From e55403ed71282d7bfd8b56df219de3c28a8af064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 25 Nov 2024 15:45:37 +0100 Subject: Merging upstream version 2.0.3+dfsg: - does not include dygraphs anymore (Closes: #923993) - does not include pako anymore (Closes: #1042533) - does not include dashboard binaries anymore (Closes: #1045145) Signed-off-by: Daniel Baumann --- src/web/api/badges/README.md | 369 - src/web/api/badges/web_buffer_svg.c | 1159 --- src/web/api/badges/web_buffer_svg.h | 18 - src/web/api/exporters/README.md | 9 - src/web/api/exporters/allmetrics.c | 132 - src/web/api/exporters/allmetrics.h | 12 - src/web/api/exporters/prometheus/README.md | 9 - src/web/api/exporters/shell/README.md | 15 +- src/web/api/exporters/shell/allmetrics_shell.c | 170 - src/web/api/exporters/shell/allmetrics_shell.h | 21 - src/web/api/formatters/README.md | 9 - src/web/api/formatters/charts2json.c | 2 +- src/web/api/formatters/csv/README.md | 9 - src/web/api/formatters/json/README.md | 9 - src/web/api/formatters/rrd2json.c | 40 - src/web/api/formatters/rrd2json.h | 35 +- src/web/api/formatters/ssv/README.md | 9 - src/web/api/formatters/value/README.md | 9 - src/web/api/functions/function-bearer_get_token.c | 81 + src/web/api/functions/function-bearer_get_token.h | 14 + src/web/api/functions/function-progress.c | 8 + src/web/api/functions/function-progress.h | 10 + src/web/api/functions/function-streaming.c | 627 ++ src/web/api/functions/function-streaming.h | 12 + src/web/api/functions/functions.c | 43 + src/web/api/functions/functions.h | 14 + src/web/api/health/README.md | 12 +- src/web/api/http_auth.c | 338 +- src/web/api/http_auth.h | 2 +- src/web/api/ilove/README.md | 0 src/web/api/ilove/ilove.c | 306 - src/web/api/ilove/ilove.h | 13 - src/web/api/ilove/measure-text.js | 73 - src/web/api/maps/contexts_alert_statuses.c | 60 + src/web/api/maps/contexts_alert_statuses.h | 26 + src/web/api/maps/contexts_options.c | 58 + src/web/api/maps/contexts_options.h | 22 + src/web/api/maps/datasource_formats.c | 89 + src/web/api/maps/datasource_formats.h | 32 + src/web/api/maps/maps.h | 12 + src/web/api/maps/rrdr_options.c | 139 + src/web/api/maps/rrdr_options.h | 52 + src/web/api/queries/average/README.md | 9 - src/web/api/queries/countif/README.md | 9 - src/web/api/queries/des/README.md | 9 - src/web/api/queries/incremental_sum/README.md | 9 - src/web/api/queries/max/README.md | 9 - src/web/api/queries/median/README.md | 10 - src/web/api/queries/min/README.md | 9 - src/web/api/queries/percentile/README.md | 10 - src/web/api/queries/rrdr.h | 56 - src/web/api/queries/ses/README.md | 9 - src/web/api/queries/stddev/README.md | 9 - src/web/api/queries/sum/README.md | 9 - src/web/api/queries/trimmed_mean/README.md | 10 - src/web/api/queries/weights.c | 16 +- src/web/api/queries/weights.h | 2 - src/web/api/v1/api_v1_aclk.c | 20 + src/web/api/v1/api_v1_alarms.c | 153 + src/web/api/v1/api_v1_allmetrics.c | 308 + src/web/api/v1/api_v1_badge/README.md | 360 + src/web/api/v1/api_v1_badge/web_buffer_svg.c | 1160 +++ src/web/api/v1/api_v1_calls.h | 47 + src/web/api/v1/api_v1_charts.c | 64 + src/web/api/v1/api_v1_config.c | 92 + src/web/api/v1/api_v1_context.c | 68 + src/web/api/v1/api_v1_contexts.c | 61 + src/web/api/v1/api_v1_data.c | 246 + src/web/api/v1/api_v1_dbengine.c | 97 + src/web/api/v1/api_v1_function.c | 44 + src/web/api/v1/api_v1_functions.c | 19 + src/web/api/v1/api_v1_info.c | 207 + src/web/api/v1/api_v1_manage.c | 86 + src/web/api/v1/api_v1_ml_info.c | 28 + src/web/api/v1/api_v1_registry.c | 198 + src/web/api/v1/api_v1_weights.c | 11 + src/web/api/v2/api_v2_alert_config.c | 32 + src/web/api/v2/api_v2_alert_transitions.c | 7 + src/web/api/v2/api_v2_alerts.c | 7 + src/web/api/v2/api_v2_bearer.c | 139 + src/web/api/v2/api_v2_calls.h | 38 + src/web/api/v2/api_v2_claim.c | 236 + src/web/api/v2/api_v2_contexts.c | 78 + src/web/api/v2/api_v2_data.c | 302 + src/web/api/v2/api_v2_functions.c | 8 + src/web/api/v2/api_v2_ilove/README.md | 0 src/web/api/v2/api_v2_ilove/ilove.c | 306 + src/web/api/v2/api_v2_ilove/measure-text.js | 73 + src/web/api/v2/api_v2_info.c | 7 + src/web/api/v2/api_v2_node_instances.c | 10 + src/web/api/v2/api_v2_nodes.c | 7 + src/web/api/v2/api_v2_progress.c | 28 + src/web/api/v2/api_v2_q.c | 9 + src/web/api/v2/api_v2_versions.c | 7 + src/web/api/v2/api_v2_webrtc.c | 8 + src/web/api/v2/api_v2_weights.c | 152 + src/web/api/v3/api_v3_calls.h | 11 + src/web/api/v3/api_v3_me.c | 37 + src/web/api/v3/api_v3_settings.c | 285 + src/web/api/web_api.c | 221 +- src/web/api/web_api.h | 22 +- src/web/api/web_api_v1.c | 1874 +---- src/web/api/web_api_v1.h | 36 - src/web/api/web_api_v2.c | 648 +- src/web/api/web_api_v3.c | 263 + src/web/api/web_api_v3.h | 12 + src/web/gui/.dashboard-v2-notice.md | 8 - src/web/gui/README.md | 163 +- src/web/gui/bundle_dashboard_v1.py | 18 +- src/web/gui/bundle_dashboard_v2.py | 97 - src/web/gui/index.html | 245 - src/web/gui/registry-access.html | 73 - src/web/gui/registry-alert-redirect.html | 152 - src/web/gui/registry-hello.html | 94 - src/web/gui/static/splash.css | 171 - src/web/gui/v1/dashboard_v1.cmake | 18 +- src/web/gui/v2/.well-known/assetlinks.json | 11 - src/web/gui/v2/1220.01d6bbaab869c74f4437.chunk.js | 1 - src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js | 2 - .../1396.56f70d7c659ac0b694cd.chunk.js.LICENSE.txt | 16 - src/web/gui/v2/1418.16d53ba5cce2c6a8143a.chunk.js | 1 - src/web/gui/v2/1782.d82eb301aa81b380dd0c.chunk.js | 1 - src/web/gui/v2/1839.a4196d2a87ac0fdd9f34.chunk.js | 1 - src/web/gui/v2/185.42bab351ba68de7ca4aa.chunk.js | 1 - src/web/gui/v2/1876.e610906417b961290730.chunk.js | 1 - src/web/gui/v2/195.4cdbea6af54d14a95949.chunk.js | 1 - src/web/gui/v2/2007.b33ce2b4b736228fd681.chunk.js | 1 - src/web/gui/v2/252.40edc9b0f6da1422f40b.chunk.js | 1 - src/web/gui/v2/3104.3b70865e21a81a616af3.chunk.js | 1 - src/web/gui/v2/3350.ae7151980981854dc3d1.chunk.js | 1 - src/web/gui/v2/3455.f9ca876de57244386773.chunk.js | 2 - .../3455.f9ca876de57244386773.chunk.js.LICENSE.txt | 13 - src/web/gui/v2/3621.01ee70ee9c311ac163d9.chunk.js | 1 - src/web/gui/v2/3624.bfeb1fdc3057ba82ddac.chunk.js | 1 - src/web/gui/v2/3736.e572adfdf7951f74a741.chunk.js | 1 - src/web/gui/v2/3750.4ad02f036f2a7c520b1c.chunk.js | 1 - src/web/gui/v2/3843.89070793921be1288bb5.css | 2 - src/web/gui/v2/3843.ffbb6f614ba4f7b77570.chunk.js | 1 - src/web/gui/v2/3968.483ca2ad3b300293e655.chunk.js | 1 - src/web/gui/v2/3D_PARTY_LICENSES.txt | 7457 -------------------- src/web/gui/v2/4034.35199d2809d318eed690.chunk.js | 1 - src/web/gui/v2/4140.46221d08bcda08826c78.chunk.js | 1 - src/web/gui/v2/4140.89070793921be1288bb5.css | 2 - src/web/gui/v2/4414.590ba07d470ba2ce7dd0.chunk.js | 1 - src/web/gui/v2/4631.158982e127e11bdc6a45.chunk.js | 1 - src/web/gui/v2/4680.7d8122d91e9d4582836a.chunk.js | 1 - src/web/gui/v2/4958.5969fedc1ff7dc82775e.chunk.js | 1 - src/web/gui/v2/5246.07c5a1649f0805c140fe.chunk.js | 1 - src/web/gui/v2/5304.cc797fdd343c7e873b2f.chunk.js | 1 - src/web/gui/v2/5426.254557ad3e1f2d14ad29.chunk.js | 1 - src/web/gui/v2/5596.2036706750ff4028cff2.chunk.js | 1 - src/web/gui/v2/5598.07ff43a6b96bd41e8637.chunk.js | 1 - src/web/gui/v2/5700.b7c9908dc7f30a5a57e7.chunk.js | 1 - src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js | 2 - .../5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt | 12 - src/web/gui/v2/5794.252ff787d58d64eb4988.chunk.js | 1 - src/web/gui/v2/6008.3d0636fe17f4f6274485.chunk.js | 1 - src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js | 2 - .../6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt | 6 - src/web/gui/v2/6323.26d4d949c9b6f8674c2e.chunk.js | 1 - src/web/gui/v2/6331.89070793921be1288bb5.css | 2 - src/web/gui/v2/6331.c91b5d104cdff1be3b80.chunk.js | 1 - src/web/gui/v2/6384.0fad56b0bc902f186c98.chunk.js | 1 - src/web/gui/v2/6469.47926fa38028dc7d0d41.chunk.js | 1 - src/web/gui/v2/6469.89070793921be1288bb5.css | 2 - src/web/gui/v2/6661.72f782bd78fea8c2d836.chunk.js | 1 - src/web/gui/v2/6760.370b9780120c145da28f.chunk.js | 1 - src/web/gui/v2/683.02c173493ef257c210fa.chunk.js | 1 - src/web/gui/v2/683.cc9fa5f3bdc0bf3ab2fc.css | 10 - src/web/gui/v2/6944.ab3e70c9ac0f05013b5f.chunk.js | 1 - src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js | 2 - .../7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt | 1 - src/web/gui/v2/7146.79304e386ac9238b7cf1.chunk.js | 1 - src/web/gui/v2/7170.5d6047bb6ce9d77d53db.chunk.js | 1 - src/web/gui/v2/7208.1d75cf5d007de32e403b.chunk.js | 1 - src/web/gui/v2/7304.ed4690ec296b59fbe7fd.chunk.js | 1 - src/web/gui/v2/7332.3acf93dcfa52c7f1bc18.chunk.js | 1 - src/web/gui/v2/7340.25dce1c5cc66b613700f.chunk.js | 1 - src/web/gui/v2/7436.1ebd371d70e6a87c5499.chunk.js | 1 - src/web/gui/v2/7471.f96c4d04a73fb7551c03.chunk.js | 1 - src/web/gui/v2/7487.89070793921be1288bb5.css | 2 - src/web/gui/v2/7487.db63c95c27d973a07d9b.chunk.js | 1 - src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js | 8 - .../749.e44087ac3a2e3a994318.chunk.js.LICENSE.txt | 11 - src/web/gui/v2/7519.7982a2e0fcdf82ba78dd.chunk.js | 1 - src/web/gui/v2/7529.658d363e12e73df83b60.chunk.js | 1 - src/web/gui/v2/7840.2f2023f2eb1dcc943d94.chunk.js | 1 - src/web/gui/v2/785.d016913841bcc0209d5b.chunk.js | 1 - src/web/gui/v2/7857.813ae058cca579e05462.chunk.js | 1 - src/web/gui/v2/7959.4f20f4b203e2bad8af39.chunk.js | 1 - src/web/gui/v2/8059.4fdc76bb2cac1f74b41b.chunk.js | 1 - src/web/gui/v2/8239.c85fc9f3599f198a9efb.chunk.js | 1 - src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js | 2 - .../8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt | 5 - src/web/gui/v2/8323.e22de33686bb2f34063c.css | 2 - src/web/gui/v2/8505.c330f2104fefd71717da.chunk.js | 1 - src/web/gui/v2/86.2c88d4d37b88e2620051.chunk.js | 1 - src/web/gui/v2/8637.0958494526e838a60d2b.js | 2 - .../v2/8637.0958494526e838a60d2b.js.LICENSE.txt | 140 - src/web/gui/v2/8784.a04e9c07186e1f057f56.chunk.js | 1 - src/web/gui/v2/8842.406028f523a00acb97bd.chunk.js | 1 - src/web/gui/v2/8910.019974f8675d8834dd07.chunk.js | 1 - src/web/gui/v2/8938.5116982f737a2ef85330.chunk.js | 1 - src/web/gui/v2/9292.cc5055091db9a0826933.chunk.js | 1 - src/web/gui/v2/934.24d6fdc5f60aa6493962.chunk.js | 1 - src/web/gui/v2/9400.6250bbf86c4fd3173de2.chunk.js | 1 - src/web/gui/v2/9473.4fd4742ffb6b5348bea8.chunk.js | 1 - src/web/gui/v2/963.35da4a3c4e49aac29dae.chunk.js | 1 - src/web/gui/v2/979.3e5fddf93c977e6c71c3.chunk.js | 1 - src/web/gui/v2/9818.3ce64e0b472412bfbc97.chunk.js | 1 - src/web/gui/v2/9843.93f8c71c64ef97b9905e.chunk.js | 1 - src/web/gui/v2/9912.702300c2dd9616289606.chunk.js | 1 - src/web/gui/v2/LICENSE.md | 42 - src/web/gui/v2/README.md | 1 - src/web/gui/v2/agent.html | 245 - src/web/gui/v2/allFiles.6.138.3.json | 386 - src/web/gui/v2/allFiles.6.json | 386 - src/web/gui/v2/app.08c9fe3ead1d43ff769b.js | 1 - src/web/gui/v2/app.cb2e9f9a81cf9533384e.css | 2 - src/web/gui/v2/apple-app-site-association | 11 - src/web/gui/v2/bundlesManifest.6.json | 9 - src/web/gui/v2/dashboard_v2.cmake | 303 - src/web/gui/v2/favicon.ico | Bin 101252 -> 0 bytes src/web/gui/v2/index.html | 245 - src/web/gui/v2/local-agent.html | 245 - .../gui/v2/netdata.charts.fdfd27674ac5533bbcc2.js | 1 - src/web/gui/v2/netdata.ui.647a4c3303ee8ec0da64.js | 2 - .../netdata.ui.647a4c3303ee8ec0da64.js.LICENSE.txt | 1 - .../gui/v2/npm.react.dom.2994f1b4604bd8ce80f6.js | 2 - ...m.react.dom.2994f1b4604bd8ce80f6.js.LICENSE.txt | 9 - src/web/gui/v2/registry-access.html | 73 - src/web/gui/v2/registry-alert-redirect.html | 152 - src/web/gui/v2/registry-hello.html | 94 - src/web/gui/v2/runtime.ceccffb089cc539b1c1f.js | 1 - src/web/gui/v2/static/.well-known/assetlinks.json | 11 - src/web/gui/v2/static/apple-app-site-association | 11 - src/web/gui/v2/static/email/img/clea_badge.png | Bin 1147 -> 0 bytes src/web/gui/v2/static/email/img/clea_siren.png | Bin 2427 -> 0 bytes src/web/gui/v2/static/email/img/community_icon.png | Bin 1271 -> 0 bytes src/web/gui/v2/static/email/img/configure_icon.png | Bin 1256 -> 0 bytes src/web/gui/v2/static/email/img/crit_badge.png | Bin 2479 -> 0 bytes src/web/gui/v2/static/email/img/crit_siren.png | Bin 3432 -> 0 bytes src/web/gui/v2/static/email/img/flood_siren.png | Bin 2059 -> 0 bytes src/web/gui/v2/static/email/img/full_logo.png | Bin 1298 -> 0 bytes src/web/gui/v2/static/email/img/header.png | Bin 5386 -> 0 bytes src/web/gui/v2/static/email/img/isotype_600.png | Bin 9114 -> 0 bytes src/web/gui/v2/static/email/img/label_critical.png | Bin 1595 -> 0 bytes .../gui/v2/static/email/img/label_recovered.png | Bin 2027 -> 0 bytes src/web/gui/v2/static/email/img/label_warning.png | Bin 1752 -> 0 bytes .../gui/v2/static/email/img/reachability_siren.png | Bin 3951 -> 0 bytes src/web/gui/v2/static/email/img/warn_badge.png | Bin 2204 -> 0 bytes src/web/gui/v2/static/email/img/warn_siren.png | Bin 3005 -> 0 bytes src/web/gui/v2/static/img/list-style-image.svg | 9 - src/web/gui/v2/static/img/logos/os/alpine.svg | 1 - src/web/gui/v2/static/img/logos/os/arch.svg | 72 - src/web/gui/v2/static/img/logos/os/centos.svg | 13 - src/web/gui/v2/static/img/logos/os/coreos.svg | 1 - src/web/gui/v2/static/img/logos/os/debian.svg | 1 - src/web/gui/v2/static/img/logos/os/docker.svg | 3 - src/web/gui/v2/static/img/logos/os/fedora.svg | 13 - src/web/gui/v2/static/img/logos/os/freebsd.svg | 1 - src/web/gui/v2/static/img/logos/os/freenas.svg | 38 - src/web/gui/v2/static/img/logos/os/gentoo.svg | 419 -- src/web/gui/v2/static/img/logos/os/kubernetes.svg | 84 - src/web/gui/v2/static/img/logos/os/linux-small.svg | 3 - src/web/gui/v2/static/img/logos/os/linux.svg | 1 - src/web/gui/v2/static/img/logos/os/macos.svg | 13 - src/web/gui/v2/static/img/logos/os/manjaro.svg | 91 - src/web/gui/v2/static/img/logos/os/openstack.svg | 1 - src/web/gui/v2/static/img/logos/os/opensuse.svg | 114 - src/web/gui/v2/static/img/logos/os/openwrt.svg | 8 - src/web/gui/v2/static/img/logos/os/oracle.svg | 28 - src/web/gui/v2/static/img/logos/os/pfsense.svg | 7 - src/web/gui/v2/static/img/logos/os/placeholder.svg | 3 - .../gui/v2/static/img/logos/os/raspberry-pi.svg | 1 - src/web/gui/v2/static/img/logos/os/redhat.svg | 1 - src/web/gui/v2/static/img/logos/os/rocky.svg | 3 - src/web/gui/v2/static/img/logos/os/suse.svg | 1 - src/web/gui/v2/static/img/logos/os/ubuntu.svg | 1 - .../v2/static/img/logos/services/access-point.svg | 7 - .../gui/v2/static/img/logos/services/activemq.svg | 253 - .../gui/v2/static/img/logos/services/adaptec.svg | 143 - .../gui/v2/static/img/logos/services/alerta.svg | 20 - .../gui/v2/static/img/logos/services/apache.svg | 138 - src/web/gui/v2/static/img/logos/services/apc.svg | 103 - .../gui/v2/static/img/logos/services/aws-sns.svg | 1 - src/web/gui/v2/static/img/logos/services/aws.svg | 3 - .../v2/static/img/logos/services/beanstalkd.svg | 112 - src/web/gui/v2/static/img/logos/services/boinc.svg | 134 - src/web/gui/v2/static/img/logos/services/btrfs.svg | 93 - src/web/gui/v2/static/img/logos/services/ceph.svg | 1 - .../gui/v2/static/img/logos/services/chrony.svg | 68 - src/web/gui/v2/static/img/logos/services/cloud.svg | 13 - .../gui/v2/static/img/logos/services/concul.svg | 8 - .../gui/v2/static/img/logos/services/consul.svg | 1 - .../gui/v2/static/img/logos/services/container.svg | 1 - .../gui/v2/static/img/logos/services/couchdb.svg | 62 - src/web/gui/v2/static/img/logos/services/cups.svg | 91 - .../static/img/logos/services/data-encryption.svg | 4 - src/web/gui/v2/static/img/logos/services/ddos.svg | 7 - .../gui/v2/static/img/logos/services/discord.svg | 1 - src/web/gui/v2/static/img/logos/services/dns.svg | 4 - .../gui/v2/static/img/logos/services/docker.svg | 100 - .../gui/v2/static/img/logos/services/dovecot.svg | 67 - .../v2/static/img/logos/services/elasticsearch.svg | 74 - src/web/gui/v2/static/img/logos/services/email.svg | 43 - src/web/gui/v2/static/img/logos/services/exim.svg | 1 - .../gui/v2/static/img/logos/services/fail2ban.svg | 1 - src/web/gui/v2/static/img/logos/services/flock.svg | 3 - .../gui/v2/static/img/logos/services/fluentd.svg | 91 - src/web/gui/v2/static/img/logos/services/fping.svg | 82 - .../v2/static/img/logos/services/freeradius.svg | 260 - .../gui/v2/static/img/logos/services/fronius.svg | 1 - .../v2/static/img/logos/services/gnu-freeipmi.svg | 1 - .../gui/v2/static/img/logos/services/golang.svg | 3 - .../gui/v2/static/img/logos/services/grafana.svg | 57 - .../gui/v2/static/img/logos/services/graphite.svg | 1 - .../gui/v2/static/img/logos/services/haproxy.svg | 1 - src/web/gui/v2/static/img/logos/services/hub.svg | 1 - .../gui/v2/static/img/logos/services/icecast.svg | 114 - .../gui/v2/static/img/logos/services/influxdb.svg | 3 - src/web/gui/v2/static/img/logos/services/ipfs.svg | 28 - src/web/gui/v2/static/img/logos/services/irc.svg | 99 - src/web/gui/v2/static/img/logos/services/isc.svg | 19 - src/web/gui/v2/static/img/logos/services/kafka.svg | 1 - .../gui/v2/static/img/logos/services/kairosdb.svg | 3 - .../gui/v2/static/img/logos/services/kavenegar.svg | 10 - .../gui/v2/static/img/logos/services/key-file.svg | 1 - .../v2/static/img/logos/services/kubernetes.svg | 84 - .../gui/v2/static/img/logos/services/libreswan.svg | 27 - .../gui/v2/static/img/logos/services/libvirt.svg | 713 -- .../v2/static/img/logos/services/lighthttpd.svg | 1 - src/web/gui/v2/static/img/logos/services/linux.svg | 1 - .../gui/v2/static/img/logos/services/litespeed.svg | 91 - .../v2/static/img/logos/services/lm-sensors.svg | 1 - .../v2/static/img/logos/services/load-balancer.svg | 8 - .../gui/v2/static/img/logos/services/log-file.svg | 55 - .../gui/v2/static/img/logos/services/logstash.svg | 1 - src/web/gui/v2/static/img/logos/services/lxd.svg | 200 - .../gui/v2/static/img/logos/services/mariadb.svg | 49 - .../gui/v2/static/img/logos/services/memcached.svg | 31 - .../v2/static/img/logos/services/messagebird.svg | 1 - .../gui/v2/static/img/logos/services/mongodb.svg | 1 - src/web/gui/v2/static/img/logos/services/monit.svg | 12 - .../v2/static/img/logos/services/monitoring.svg | 55 - src/web/gui/v2/static/img/logos/services/mysql.svg | 17 - .../gui/v2/static/img/logos/services/netfilter.svg | 98 - .../static/img/logos/services/network-protocol.svg | 44 - .../gui/v2/static/img/logos/services/network.svg | 14 - src/web/gui/v2/static/img/logos/services/nfs.svg | 18 - .../v2/static/img/logos/services/nginx-plus.svg | 28 - src/web/gui/v2/static/img/logos/services/nginx.svg | 20 - .../img/logos/services/notification-bell.svg | 55 - src/web/gui/v2/static/img/logos/services/nsd.svg | 117 - src/web/gui/v2/static/img/logos/services/ntpd.svg | 56 - src/web/gui/v2/static/img/logos/services/nut.svg | 1 - .../gui/v2/static/img/logos/services/nvidia.svg | 1 - .../gui/v2/static/img/logos/services/openldap.svg | 1 - .../gui/v2/static/img/logos/services/opensips.svg | 1 - .../gui/v2/static/img/logos/services/opentsdb.svg | 27 - .../gui/v2/static/img/logos/services/openvpn.svg | 62 - .../gui/v2/static/img/logos/services/openzfs.svg | 72 - .../gui/v2/static/img/logos/services/oracle.svg | 28 - .../gui/v2/static/img/logos/services/pagerduty.svg | 12 - .../gui/v2/static/img/logos/services/php-fpm.svg | 90 - .../v2/static/img/logos/services/placeholder.svg | 8 - .../gui/v2/static/img/logos/services/postfix.svg | 293 - .../v2/static/img/logos/services/postgresql.svg | 22 - .../gui/v2/static/img/logos/services/powerdns.svg | 1 - .../gui/v2/static/img/logos/services/processor.svg | 1 - .../v2/static/img/logos/services/prometheus.svg | 50 - src/web/gui/v2/static/img/logos/services/prowl.svg | 35 - .../gui/v2/static/img/logos/services/proxysql.svg | 1 - .../gui/v2/static/img/logos/services/puppet.svg | 31 - .../v2/static/img/logos/services/pushbullet.svg | 1 - .../gui/v2/static/img/logos/services/pushover.svg | 7 - src/web/gui/v2/static/img/logos/services/qos.svg | 7 - .../gui/v2/static/img/logos/services/rabbitmq.svg | 75 - .../v2/static/img/logos/services/raspberry-pi.svg | 1 - src/web/gui/v2/static/img/logos/services/redis.svg | 1 - .../gui/v2/static/img/logos/services/rethinkdb.svg | 805 --- .../v2/static/img/logos/services/retroshare.svg | 263 - .../v2/static/img/logos/services/rocketchat.svg | 7 - src/web/gui/v2/static/img/logos/services/samba.svg | 3 - .../img/logos/services/server-connection.svg | 68 - src/web/gui/v2/static/img/logos/services/slack.svg | 3 - src/web/gui/v2/static/img/logos/services/sma.svg | 27 - .../gui/v2/static/img/logos/services/smstools3.svg | 74 - src/web/gui/v2/static/img/logos/services/solr.svg | 1 - .../gui/v2/static/img/logos/services/spigot.svg | 1 - .../v2/static/img/logos/services/springboot.svg | 1 - src/web/gui/v2/static/img/logos/services/squid.svg | 398 -- .../gui/v2/static/img/logos/services/statsd.svg | 29 - .../gui/v2/static/img/logos/services/stiebel.svg | 49 - .../gui/v2/static/img/logos/services/systemd.svg | 152 - .../gui/v2/static/img/logos/services/telegram.svg | 17 - .../v2/static/img/logos/services/temperature.svg | 4 - .../gui/v2/static/img/logos/services/tomcat.svg | 107 - src/web/gui/v2/static/img/logos/services/tor.svg | 140 - .../gui/v2/static/img/logos/services/traefik.svg | 90 - .../gui/v2/static/img/logos/services/twilio.svg | 1 - .../gui/v2/static/img/logos/services/unbound.svg | 105 - src/web/gui/v2/static/img/logos/services/uwsgi.svg | 109 - .../gui/v2/static/img/logos/services/varnish.svg | 1 - .../gui/v2/static/img/logos/services/veritas.svg | 197 - src/web/gui/v2/static/img/logos/services/xen.svg | 104 - src/web/gui/v2/static/img/mail/isotype.png | Bin 2611 -> 0 bytes src/web/gui/v2/static/img/mail/isotype.svg | 3 - src/web/gui/v2/static/img/mail/logotype.png | Bin 1301 -> 0 bytes src/web/gui/v2/static/img/mail/logotype.svg | 11 - src/web/gui/v2/static/img/new-dashboard.svg | 52 - src/web/gui/v2/static/img/no-filter-results.png | Bin 79381 -> 0 bytes src/web/gui/v2/static/img/no-nodes-room.svg | 226 - src/web/gui/v2/static/img/rack.png | Bin 9261 -> 0 bytes .../pages/holding-page-503/holding-page-503.css | 101 - .../pages/holding-page-503/holding-page-503.svg | 534 -- .../static/site/pages/holding-page-503/index.html | 39 - .../holding-page-503/multiple-logos-group.svg | 32 - .../pages/holding-page-503/netdata-logo-white.svg | 3 - .../static/site/pages/holding-page-503/reset.svg | 3 - src/web/gui/v2/static/splash.css | 171 - src/web/gui/v2/sw.js | 1 - src/web/rtc/webrtc.c | 10 +- src/web/server/README.md | 203 +- src/web/server/h2o/http_server.c | 27 +- src/web/server/h2o/rrdpush.c | 384 + src/web/server/h2o/streaming.c | 384 - src/web/server/h2o/streaming.h | 2 - src/web/server/static/README.md | 10 - src/web/server/static/static-threaded.c | 9 - src/web/server/web_client.c | 166 +- src/web/server/web_client.h | 30 +- src/web/server/web_client_cache.c | 3 +- src/web/server/web_server.c | 4 - 434 files changed, 7750 insertions(+), 26760 deletions(-) delete mode 100644 src/web/api/badges/README.md delete mode 100644 src/web/api/badges/web_buffer_svg.c delete mode 100644 src/web/api/badges/web_buffer_svg.h delete mode 100644 src/web/api/exporters/allmetrics.c delete mode 100644 src/web/api/exporters/allmetrics.h delete mode 100644 src/web/api/exporters/shell/allmetrics_shell.c delete mode 100644 src/web/api/exporters/shell/allmetrics_shell.h create mode 100644 src/web/api/functions/function-bearer_get_token.c create mode 100644 src/web/api/functions/function-bearer_get_token.h create mode 100644 src/web/api/functions/function-progress.c create mode 100644 src/web/api/functions/function-progress.h create mode 100644 src/web/api/functions/function-streaming.c create mode 100644 src/web/api/functions/function-streaming.h create mode 100644 src/web/api/functions/functions.c create mode 100644 src/web/api/functions/functions.h delete mode 100644 src/web/api/ilove/README.md delete mode 100644 src/web/api/ilove/ilove.c delete mode 100644 src/web/api/ilove/ilove.h delete mode 100644 src/web/api/ilove/measure-text.js create mode 100644 src/web/api/maps/contexts_alert_statuses.c create mode 100644 src/web/api/maps/contexts_alert_statuses.h create mode 100644 src/web/api/maps/contexts_options.c create mode 100644 src/web/api/maps/contexts_options.h create mode 100644 src/web/api/maps/datasource_formats.c create mode 100644 src/web/api/maps/datasource_formats.h create mode 100644 src/web/api/maps/maps.h create mode 100644 src/web/api/maps/rrdr_options.c create mode 100644 src/web/api/maps/rrdr_options.h create mode 100644 src/web/api/v1/api_v1_aclk.c create mode 100644 src/web/api/v1/api_v1_alarms.c create mode 100644 src/web/api/v1/api_v1_allmetrics.c create mode 100644 src/web/api/v1/api_v1_badge/README.md create mode 100644 src/web/api/v1/api_v1_badge/web_buffer_svg.c create mode 100644 src/web/api/v1/api_v1_calls.h create mode 100644 src/web/api/v1/api_v1_charts.c create mode 100644 src/web/api/v1/api_v1_config.c create mode 100644 src/web/api/v1/api_v1_context.c create mode 100644 src/web/api/v1/api_v1_contexts.c create mode 100644 src/web/api/v1/api_v1_data.c create mode 100644 src/web/api/v1/api_v1_dbengine.c create mode 100644 src/web/api/v1/api_v1_function.c create mode 100644 src/web/api/v1/api_v1_functions.c create mode 100644 src/web/api/v1/api_v1_info.c create mode 100644 src/web/api/v1/api_v1_manage.c create mode 100644 src/web/api/v1/api_v1_ml_info.c create mode 100644 src/web/api/v1/api_v1_registry.c create mode 100644 src/web/api/v1/api_v1_weights.c create mode 100644 src/web/api/v2/api_v2_alert_config.c create mode 100644 src/web/api/v2/api_v2_alert_transitions.c create mode 100644 src/web/api/v2/api_v2_alerts.c create mode 100644 src/web/api/v2/api_v2_bearer.c create mode 100644 src/web/api/v2/api_v2_calls.h create mode 100644 src/web/api/v2/api_v2_claim.c create mode 100644 src/web/api/v2/api_v2_contexts.c create mode 100644 src/web/api/v2/api_v2_data.c create mode 100644 src/web/api/v2/api_v2_functions.c create mode 100644 src/web/api/v2/api_v2_ilove/README.md create mode 100644 src/web/api/v2/api_v2_ilove/ilove.c create mode 100644 src/web/api/v2/api_v2_ilove/measure-text.js create mode 100644 src/web/api/v2/api_v2_info.c create mode 100644 src/web/api/v2/api_v2_node_instances.c create mode 100644 src/web/api/v2/api_v2_nodes.c create mode 100644 src/web/api/v2/api_v2_progress.c create mode 100644 src/web/api/v2/api_v2_q.c create mode 100644 src/web/api/v2/api_v2_versions.c create mode 100644 src/web/api/v2/api_v2_webrtc.c create mode 100644 src/web/api/v2/api_v2_weights.c create mode 100644 src/web/api/v3/api_v3_calls.h create mode 100644 src/web/api/v3/api_v3_me.c create mode 100644 src/web/api/v3/api_v3_settings.c create mode 100644 src/web/api/web_api_v3.c create mode 100644 src/web/api/web_api_v3.h delete mode 100644 src/web/gui/.dashboard-v2-notice.md delete mode 100755 src/web/gui/bundle_dashboard_v2.py delete mode 100644 src/web/gui/index.html delete mode 100644 src/web/gui/registry-access.html delete mode 100644 src/web/gui/registry-alert-redirect.html delete mode 100644 src/web/gui/registry-hello.html delete mode 100644 src/web/gui/static/splash.css delete mode 100644 src/web/gui/v2/.well-known/assetlinks.json delete mode 100644 src/web/gui/v2/1220.01d6bbaab869c74f4437.chunk.js delete mode 100644 src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js delete mode 100644 src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/1418.16d53ba5cce2c6a8143a.chunk.js delete mode 100644 src/web/gui/v2/1782.d82eb301aa81b380dd0c.chunk.js delete mode 100644 src/web/gui/v2/1839.a4196d2a87ac0fdd9f34.chunk.js delete mode 100644 src/web/gui/v2/185.42bab351ba68de7ca4aa.chunk.js delete mode 100644 src/web/gui/v2/1876.e610906417b961290730.chunk.js delete mode 100644 src/web/gui/v2/195.4cdbea6af54d14a95949.chunk.js delete mode 100644 src/web/gui/v2/2007.b33ce2b4b736228fd681.chunk.js delete mode 100644 src/web/gui/v2/252.40edc9b0f6da1422f40b.chunk.js delete mode 100644 src/web/gui/v2/3104.3b70865e21a81a616af3.chunk.js delete mode 100644 src/web/gui/v2/3350.ae7151980981854dc3d1.chunk.js delete mode 100644 src/web/gui/v2/3455.f9ca876de57244386773.chunk.js delete mode 100644 src/web/gui/v2/3455.f9ca876de57244386773.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/3621.01ee70ee9c311ac163d9.chunk.js delete mode 100644 src/web/gui/v2/3624.bfeb1fdc3057ba82ddac.chunk.js delete mode 100644 src/web/gui/v2/3736.e572adfdf7951f74a741.chunk.js delete mode 100644 src/web/gui/v2/3750.4ad02f036f2a7c520b1c.chunk.js delete mode 100644 src/web/gui/v2/3843.89070793921be1288bb5.css delete mode 100644 src/web/gui/v2/3843.ffbb6f614ba4f7b77570.chunk.js delete mode 100644 src/web/gui/v2/3968.483ca2ad3b300293e655.chunk.js delete mode 100644 src/web/gui/v2/3D_PARTY_LICENSES.txt delete mode 100644 src/web/gui/v2/4034.35199d2809d318eed690.chunk.js delete mode 100644 src/web/gui/v2/4140.46221d08bcda08826c78.chunk.js delete mode 100644 src/web/gui/v2/4140.89070793921be1288bb5.css delete mode 100644 src/web/gui/v2/4414.590ba07d470ba2ce7dd0.chunk.js delete mode 100644 src/web/gui/v2/4631.158982e127e11bdc6a45.chunk.js delete mode 100644 src/web/gui/v2/4680.7d8122d91e9d4582836a.chunk.js delete mode 100644 src/web/gui/v2/4958.5969fedc1ff7dc82775e.chunk.js delete mode 100644 src/web/gui/v2/5246.07c5a1649f0805c140fe.chunk.js delete mode 100644 src/web/gui/v2/5304.cc797fdd343c7e873b2f.chunk.js delete mode 100644 src/web/gui/v2/5426.254557ad3e1f2d14ad29.chunk.js delete mode 100644 src/web/gui/v2/5596.2036706750ff4028cff2.chunk.js delete mode 100644 src/web/gui/v2/5598.07ff43a6b96bd41e8637.chunk.js delete mode 100644 src/web/gui/v2/5700.b7c9908dc7f30a5a57e7.chunk.js delete mode 100644 src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js delete mode 100644 src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/5794.252ff787d58d64eb4988.chunk.js delete mode 100644 src/web/gui/v2/6008.3d0636fe17f4f6274485.chunk.js delete mode 100644 src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js delete mode 100644 src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/6323.26d4d949c9b6f8674c2e.chunk.js delete mode 100644 src/web/gui/v2/6331.89070793921be1288bb5.css delete mode 100644 src/web/gui/v2/6331.c91b5d104cdff1be3b80.chunk.js delete mode 100644 src/web/gui/v2/6384.0fad56b0bc902f186c98.chunk.js delete mode 100644 src/web/gui/v2/6469.47926fa38028dc7d0d41.chunk.js delete mode 100644 src/web/gui/v2/6469.89070793921be1288bb5.css delete mode 100644 src/web/gui/v2/6661.72f782bd78fea8c2d836.chunk.js delete mode 100644 src/web/gui/v2/6760.370b9780120c145da28f.chunk.js delete mode 100644 src/web/gui/v2/683.02c173493ef257c210fa.chunk.js delete mode 100644 src/web/gui/v2/683.cc9fa5f3bdc0bf3ab2fc.css delete mode 100644 src/web/gui/v2/6944.ab3e70c9ac0f05013b5f.chunk.js delete mode 100644 src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js delete mode 100644 src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/7146.79304e386ac9238b7cf1.chunk.js delete mode 100644 src/web/gui/v2/7170.5d6047bb6ce9d77d53db.chunk.js delete mode 100644 src/web/gui/v2/7208.1d75cf5d007de32e403b.chunk.js delete mode 100644 src/web/gui/v2/7304.ed4690ec296b59fbe7fd.chunk.js delete mode 100644 src/web/gui/v2/7332.3acf93dcfa52c7f1bc18.chunk.js delete mode 100644 src/web/gui/v2/7340.25dce1c5cc66b613700f.chunk.js delete mode 100644 src/web/gui/v2/7436.1ebd371d70e6a87c5499.chunk.js delete mode 100644 src/web/gui/v2/7471.f96c4d04a73fb7551c03.chunk.js delete mode 100644 src/web/gui/v2/7487.89070793921be1288bb5.css delete mode 100644 src/web/gui/v2/7487.db63c95c27d973a07d9b.chunk.js delete mode 100644 src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js delete mode 100644 src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/7519.7982a2e0fcdf82ba78dd.chunk.js delete mode 100644 src/web/gui/v2/7529.658d363e12e73df83b60.chunk.js delete mode 100644 src/web/gui/v2/7840.2f2023f2eb1dcc943d94.chunk.js delete mode 100644 src/web/gui/v2/785.d016913841bcc0209d5b.chunk.js delete mode 100644 src/web/gui/v2/7857.813ae058cca579e05462.chunk.js delete mode 100644 src/web/gui/v2/7959.4f20f4b203e2bad8af39.chunk.js delete mode 100644 src/web/gui/v2/8059.4fdc76bb2cac1f74b41b.chunk.js delete mode 100644 src/web/gui/v2/8239.c85fc9f3599f198a9efb.chunk.js delete mode 100644 src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js delete mode 100644 src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt delete mode 100644 src/web/gui/v2/8323.e22de33686bb2f34063c.css delete mode 100644 src/web/gui/v2/8505.c330f2104fefd71717da.chunk.js delete mode 100644 src/web/gui/v2/86.2c88d4d37b88e2620051.chunk.js delete mode 100644 src/web/gui/v2/8637.0958494526e838a60d2b.js delete mode 100644 src/web/gui/v2/8637.0958494526e838a60d2b.js.LICENSE.txt delete mode 100644 src/web/gui/v2/8784.a04e9c07186e1f057f56.chunk.js delete mode 100644 src/web/gui/v2/8842.406028f523a00acb97bd.chunk.js delete mode 100644 src/web/gui/v2/8910.019974f8675d8834dd07.chunk.js delete mode 100644 src/web/gui/v2/8938.5116982f737a2ef85330.chunk.js delete mode 100644 src/web/gui/v2/9292.cc5055091db9a0826933.chunk.js delete mode 100644 src/web/gui/v2/934.24d6fdc5f60aa6493962.chunk.js delete mode 100644 src/web/gui/v2/9400.6250bbf86c4fd3173de2.chunk.js delete mode 100644 src/web/gui/v2/9473.4fd4742ffb6b5348bea8.chunk.js delete mode 100644 src/web/gui/v2/963.35da4a3c4e49aac29dae.chunk.js delete mode 100644 src/web/gui/v2/979.3e5fddf93c977e6c71c3.chunk.js delete mode 100644 src/web/gui/v2/9818.3ce64e0b472412bfbc97.chunk.js delete mode 100644 src/web/gui/v2/9843.93f8c71c64ef97b9905e.chunk.js delete mode 100644 src/web/gui/v2/9912.702300c2dd9616289606.chunk.js delete mode 100644 src/web/gui/v2/LICENSE.md delete mode 120000 src/web/gui/v2/README.md delete mode 100644 src/web/gui/v2/agent.html delete mode 100644 src/web/gui/v2/allFiles.6.138.3.json delete mode 100644 src/web/gui/v2/allFiles.6.json delete mode 100644 src/web/gui/v2/app.08c9fe3ead1d43ff769b.js delete mode 100644 src/web/gui/v2/app.cb2e9f9a81cf9533384e.css delete mode 100644 src/web/gui/v2/apple-app-site-association delete mode 100644 src/web/gui/v2/bundlesManifest.6.json delete mode 100644 src/web/gui/v2/dashboard_v2.cmake delete mode 100644 src/web/gui/v2/favicon.ico delete mode 100644 src/web/gui/v2/index.html delete mode 100644 src/web/gui/v2/local-agent.html delete mode 100644 src/web/gui/v2/netdata.charts.fdfd27674ac5533bbcc2.js delete mode 100644 src/web/gui/v2/netdata.ui.647a4c3303ee8ec0da64.js delete mode 100644 src/web/gui/v2/netdata.ui.647a4c3303ee8ec0da64.js.LICENSE.txt delete mode 100644 src/web/gui/v2/npm.react.dom.2994f1b4604bd8ce80f6.js delete mode 100644 src/web/gui/v2/npm.react.dom.2994f1b4604bd8ce80f6.js.LICENSE.txt delete mode 100644 src/web/gui/v2/registry-access.html delete mode 100644 src/web/gui/v2/registry-alert-redirect.html delete mode 100644 src/web/gui/v2/registry-hello.html delete mode 100644 src/web/gui/v2/runtime.ceccffb089cc539b1c1f.js delete mode 100644 src/web/gui/v2/static/.well-known/assetlinks.json delete mode 100644 src/web/gui/v2/static/apple-app-site-association delete mode 100644 src/web/gui/v2/static/email/img/clea_badge.png delete mode 100644 src/web/gui/v2/static/email/img/clea_siren.png delete mode 100644 src/web/gui/v2/static/email/img/community_icon.png delete mode 100644 src/web/gui/v2/static/email/img/configure_icon.png delete mode 100644 src/web/gui/v2/static/email/img/crit_badge.png delete mode 100644 src/web/gui/v2/static/email/img/crit_siren.png delete mode 100644 src/web/gui/v2/static/email/img/flood_siren.png delete mode 100644 src/web/gui/v2/static/email/img/full_logo.png delete mode 100644 src/web/gui/v2/static/email/img/header.png delete mode 100644 src/web/gui/v2/static/email/img/isotype_600.png delete mode 100644 src/web/gui/v2/static/email/img/label_critical.png delete mode 100644 src/web/gui/v2/static/email/img/label_recovered.png delete mode 100644 src/web/gui/v2/static/email/img/label_warning.png delete mode 100644 src/web/gui/v2/static/email/img/reachability_siren.png delete mode 100644 src/web/gui/v2/static/email/img/warn_badge.png delete mode 100644 src/web/gui/v2/static/email/img/warn_siren.png delete mode 100644 src/web/gui/v2/static/img/list-style-image.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/alpine.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/arch.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/centos.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/coreos.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/debian.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/docker.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/fedora.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/freebsd.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/freenas.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/gentoo.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/kubernetes.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/linux-small.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/linux.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/macos.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/manjaro.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/openstack.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/opensuse.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/openwrt.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/oracle.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/pfsense.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/placeholder.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/raspberry-pi.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/redhat.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/rocky.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/suse.svg delete mode 100644 src/web/gui/v2/static/img/logos/os/ubuntu.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/access-point.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/activemq.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/adaptec.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/alerta.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/apache.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/apc.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/aws-sns.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/aws.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/beanstalkd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/boinc.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/btrfs.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/ceph.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/chrony.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/cloud.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/concul.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/consul.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/container.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/couchdb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/cups.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/data-encryption.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/ddos.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/discord.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/dns.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/docker.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/dovecot.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/elasticsearch.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/email.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/exim.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/fail2ban.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/flock.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/fluentd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/fping.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/freeradius.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/fronius.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/gnu-freeipmi.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/golang.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/grafana.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/graphite.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/haproxy.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/hub.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/icecast.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/influxdb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/ipfs.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/irc.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/isc.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/kafka.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/kairosdb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/kavenegar.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/key-file.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/kubernetes.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/libreswan.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/libvirt.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/lighthttpd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/linux.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/litespeed.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/lm-sensors.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/load-balancer.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/log-file.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/logstash.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/lxd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/mariadb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/memcached.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/messagebird.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/mongodb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/monit.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/monitoring.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/mysql.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/netfilter.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/network-protocol.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/network.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/nfs.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/nginx-plus.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/nginx.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/notification-bell.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/nsd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/ntpd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/nut.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/nvidia.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/openldap.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/opensips.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/opentsdb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/openvpn.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/openzfs.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/oracle.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/pagerduty.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/php-fpm.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/placeholder.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/postfix.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/postgresql.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/powerdns.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/processor.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/prometheus.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/prowl.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/proxysql.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/puppet.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/pushbullet.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/pushover.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/qos.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/rabbitmq.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/raspberry-pi.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/redis.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/rethinkdb.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/retroshare.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/rocketchat.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/samba.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/server-connection.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/slack.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/sma.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/smstools3.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/solr.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/spigot.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/springboot.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/squid.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/statsd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/stiebel.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/systemd.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/telegram.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/temperature.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/tomcat.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/tor.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/traefik.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/twilio.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/unbound.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/uwsgi.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/varnish.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/veritas.svg delete mode 100644 src/web/gui/v2/static/img/logos/services/xen.svg delete mode 100644 src/web/gui/v2/static/img/mail/isotype.png delete mode 100644 src/web/gui/v2/static/img/mail/isotype.svg delete mode 100644 src/web/gui/v2/static/img/mail/logotype.png delete mode 100644 src/web/gui/v2/static/img/mail/logotype.svg delete mode 100644 src/web/gui/v2/static/img/new-dashboard.svg delete mode 100644 src/web/gui/v2/static/img/no-filter-results.png delete mode 100644 src/web/gui/v2/static/img/no-nodes-room.svg delete mode 100644 src/web/gui/v2/static/img/rack.png delete mode 100644 src/web/gui/v2/static/site/pages/holding-page-503/holding-page-503.css delete mode 100644 src/web/gui/v2/static/site/pages/holding-page-503/holding-page-503.svg delete mode 100644 src/web/gui/v2/static/site/pages/holding-page-503/index.html delete mode 100644 src/web/gui/v2/static/site/pages/holding-page-503/multiple-logos-group.svg delete mode 100644 src/web/gui/v2/static/site/pages/holding-page-503/netdata-logo-white.svg delete mode 100644 src/web/gui/v2/static/site/pages/holding-page-503/reset.svg delete mode 100644 src/web/gui/v2/static/splash.css delete mode 100644 src/web/gui/v2/sw.js create mode 100644 src/web/server/h2o/rrdpush.c delete mode 100644 src/web/server/h2o/streaming.c (limited to 'src/web') diff --git a/src/web/api/badges/README.md b/src/web/api/badges/README.md deleted file mode 100644 index 1388fe0c3..000000000 --- a/src/web/api/badges/README.md +++ /dev/null @@ -1,369 +0,0 @@ - - -# Netdata badges - -**Badges are cool!** - -Netdata can generate badges for any chart and any dimension at any time-frame. Badges come in `SVG` and can be added to any web page using an `` HTML tag. - -**Netdata badges are powerful**! - -Given that Netdata collects from **1.000** to **5.000** metrics per server (depending on the number of network interfaces, disks, cpu cores, applications running, users logged in, containers running, etc) and that Netdata already has data reduction/aggregation functions embedded, the badges can be quite powerful. - -For each metric/dimension and for arbitrary time-frames badges can show **min**, **max** or **average** value, but also **sum** or **incremental-sum** to have their **volume**. - -For example, there is [a chart in Netdata that shows the current requests/s of nginx](http://london.my-netdata.io/#nginx_local_nginx). Using this chart alone we can show the following badges (we could add more time-frames, like **today**, **yesterday**, etc): - - - -Similarly, there is [a chart that shows outbound bandwidth per class](http://london.my-netdata.io/#tc_eth0), using QoS data. So it shows `kilobits/s` per class. Using this chart we can show: - - - -The right one is a **volume** calculation. Netdata calculated the total of the last 86.400 seconds (a day) which gives `kilobits`, then divided it by 8 to make it KB, then by 1024 to make it MB and then by 1024 to make it GB. Calculations like this are quite accurate, since for every value collected, every second, Netdata interpolates it to second boundary using microsecond calculations. - -Let's see a few more badge examples (they come from the [Netdata registry](/src/registry/README.md)): - -- **cpu usage of user `root`** (you can pick any user; 100% = 1 core). This will be `green <10%`, `yellow <20%`, `orange <50%`, `blue <100%` (1 core), `red` otherwise (you define thresholds and colors on the URL). - - - -- **mysql queries per second** - - - - niche ones: **mysql SELECT statements with JOIN, which did full table scans**: - - - ---- - -> So, every single line on the charts of a [Netdata dashboard](http://london.my-netdata.io/), can become a badge and this badge can calculate **average**, **min**, **max**, or **volume** for any time-frame! And you can also vary the badge color using conditions on the calculated value. - ---- - -## How to create badges - -The basic URL is `http://your.netdata:19999/api/v1/badge.svg?option1&option2&option3&...`. - -Here is what you can put for `options` (these are standard Netdata API options): - -- `chart=CHART.NAME` - - The chart to get the values from. - - **This is the only parameter required** and with just this parameter, Netdata will return the sum of the latest values of all chart dimensions. - - Example: - -```html - - - -``` - - Which produces this: - - - - - -- `alarm=NAME` - - Render the current value and status of an alert linked to the chart. This option can be ignored if the badge to be generated is not related to an alert. - - The current value of the alert will be rendered. The color of the badge will indicate the status of the alert. - - For alert badges, **both `chart` and `alarm` parameters are required**. - -- `dimensions=DIMENSION1|DIMENSION2|...` - - The dimensions of the chart to use. If you don't set any dimension, all will be used. When multiple dimensions are used, Netdata will sum their values. You can append `options=absolute` if you want this sum to convert all values to positive before adding them. - - Pipes in HTML have to escaped with `%7C`. - - Example: - -```html - - - -``` - - Which produces this: - - - - - -- `before=SECONDS` and `after=SECONDS` - - The timeframe. These can be absolute unix timestamps, or relative to now, number of seconds. By default `before=0` and `after=-1` (1 second in the past). - - To get the last minute set `after=-60`. This will give the average of the last complete minute (XX:XX:00 - XX:XX:59). - - To get the max of the last hour set `after=-3600&group=max`. This will give the maximum value of the last complete hour (XX:00:00 - XX:59:59) - - Example: - -```html - - - -``` - - Which produces the average of last complete minute (XX:XX:00 - XX:XX:59): - - - - - - While this is the previous minute (one minute before the last one, again aligned XX:XX:00 - XX:XX:59): - -```html - - - -``` - - It produces this: - - - - - -- `group=min` or `group=max` or `group=average` (the default) or `group=sum` or `group=incremental-sum` - - If Netdata will have to reduce (aggregate) the data to calculate the value, which aggregation method to use. - - - `max` will find the max value for the timeframe. This works on both positive and negative dimensions. It will find the most extreme value. - - - `min` will find the min value for the timeframe. This works on both positive and negative dimensions. It will find the number closest to zero. - - - `average` will calculate the average value for the timeframe. - - - `sum` will sum all the values for the timeframe. This is nice for finding the volume of dimensions for a timeframe. So if you have a dimension that reports `X per second`, you can find the volume of the dimension in a timeframe, by adding its values in that timeframe. - - - `incremental-sum` will sum the difference of each value to its next. Let's assume you have a dimension that does not measure the rate of something, but the absolute value of it. So it has values like this "1, 5, 3, 7, 4". `incremental-sum` will calculate the difference of adjacent values. In this example, they will be `(5 - 1) + (3 - 5) + (7 - 3) + (4 - 7) = 3` (which is equal to the last value minus the first = 4 - 1). - -- `options=opt1|opt2|opt3|...` - - These fine tune various options of the API. Here is what you can use for badges (the API has more option, but only these are useful for badges): - - - `percentage`, instead of returning a value, calculate the percentage of the sum of the values of the selected dimensions (selected sum / total sum * 100). This also sets the units to `%`. - - - `absolute` or `abs`, turn all values positive and then sum them. - - - `display_absolute` or `display-absolute`, to use the signed value during color calculation, but display the absolute value on the badge. - - - `min2max`, when multiple dimensions are given, do not sum them, but take their `max - min`. - - - `unaligned`, when data are reduced / aggregated (e.g. the request is about the average of the last minute, or hour), Netdata by default aligns them so that the charts will have a constant shape (so average per minute returns always XX:XX:00 - XX:XX:59). Setting the `unaligned` option, Netdata will aggregate data without any alignment, so if the request is for 60 seconds, it will aggregate the latest 60 seconds of collected data. - -These are options dedicated to badges: - -- `label=TEXT` - - The label of the badge. - -- `units=TEXT` - - The units of the badge. If you want to put a `/`, please put a `\`. This is because Netdata allows badges parameters to be given as path in URL, instead of query string. You can also use `null` or `empty` to show it without any units. - - The units `seconds`, `minutes` and `hours` trigger special formatting. The value has to be in this unit, and Netdata will automatically change it to show a more pretty duration. - -- `multiply=NUMBER` - - Multiply the value with this number. The default is `1`. - -- `divide=NUMBER` - - Divide the value with this number. The default is `1`. - -- Color customization parameters - - The following parameters specify colors of each individual part of the badge. Each parameter is documented in detail - below. - - | Area of badge | Background color parameter | Text color parameter | - | ---: | :------------------------: | :------------------: | - | Label (left) part | `label_color` | `text_color_lbl` | - | Value (right) part | `value_color` | `text_color_val` | - - - `label_color=COLOR` - - The color of the label (the left part). You can use any HTML color in `RGB` or `RRGGBB` hex notation (without - the `#` character at the beginning). Additionally, you can use one of the following predefined colors (and you - can use them by their name): - - - `green` - - `brightgreen` - - `yellow` - - `yellowgreen` - - `orange` - - `red` - - `blue` - - `grey` - - `gray` - - `lightgrey` - - `lightgray` - - These colors are taken from , which makes them compatible with standard - badges. - - - `value_color=COLOR:null|COLORVALUE|COLOR>=VALUE|COLOR<=VALUE|...` - - You can add a pipe delimited list of conditions to pick the value color. The first matching (left to right) will - be used. - - Example: `value_color=grey:null|green<10|yellow<100|orange<1000|blue<10000|red` - - The above will set `grey` if no value exists (not collected within the `gap when lost iterations above` in - `netdata.conf` for the chart), `green` if the value is less than 10, `yellow` if the value is less than 100, and - so on. Netdata will use `red` if no other conditions match. Only integers are supported as values. - - The supported operators are `<`, `>`, `<=`, `>=`, `=` (or `:`), and `!=` (or `<>`). - - You can also use the same syntax as the `label_color` parameter to define each of these colors. You can - reference a predefined color by name or `RGB`/`RRGGBB` hex notation. - - - `text_color_lbl=RGB` or `text_color_lbl=RRGGBB` or `text_color_lbl=color_by_name` - - This value specifies the font color for the font of left/label side of the badge. The syntax is the same as the - `label_color` parameter. If not given, or given with an empty value, Netdata will use the default color. - - - `text_color_val=RGB` or `text_color_val=RRGGBB` or `text_color_lbl=color_by_name` - - This value specifies the font color for the font of right/value side of the badge. The syntax is the same as the - `label_color` parameter. If not given, or given with an empty value, Netdata will use the default color. - -- `precision=NUMBER` - - The number of decimal digits of the value. By default Netdata will add: - - - no decimal digits for values > 1000 - - 1 decimal digit for values > 100 - - 2 decimal digits for values > 1 - - 3 decimal digits for values > 0.1 - - 4 decimal digits for values \<= 0.1 - - Using the `precision=NUMBER` you can set your preference per badge. - -- `scale=XXX` - - This option scales the svg image. It accepts values above or equal to 100 (100% is the default scale). For example, lets get a few different sizes: - - original
- `scale=125`
- `scale=150`
- `scale=175`
- `scale=200` - -- `fixed_width_lbl=NUMBER` and `fixed_width_val=NUMBER` - - This parameter overrides auto-sizing of badges and displays them at fixed widths. `fixed_width_lbl` determines the size of the label's left side (label/name). `fixed_width_val` determines the size of the label's right side (value). You must set both parameters together, or they will be ignored. - - You should set the label/value widths wide enough to provide space for all the possible values/contents of the badge you're requesting. In case the text cannot fit the space given it will be clipped. - - The `scale` parameter still applies on the values you give to `fixed_width_lbl` and `fixed_width_val`. - -- `refresh=auto` or `refresh=SECONDS` - - This option enables auto-refreshing of images. Netdata will send the HTTP header `Refresh: SECONDS` to the web browser, thus requesting automatic refresh of the images at regular intervals. - - `auto` will calculate the proper `SECONDS` to avoid unnecessary refreshes. If `SECONDS` is zero, this feature is disabled (it is also disabled by default). - - Auto-refreshing like this, works only if you access the badge directly. So, you may have to put it an `embed` or `iframe` for it to be auto-refreshed. Use something like this: - -```html - -``` - - Another way is to use javascript to auto-refresh them. You can auto-refresh all the Netdata badges on a page using javascript. You have to add a class to all the Netdata badges, like this ``. Then add this javascript code to your page (it requires jquery): - -```html - -``` - -A more advanced badges refresh method is to include `http://your.netdata.ip:19999/refresh-badges.js` in your page. - ---- - -## Escaping URLs - -Keep in mind that if you add badge URLs to your HTML pages you have to escape the special characters: - -|character|name|escape sequence| -|:-------:|:--:|:-------------:| -|``|space (in labels and units)|`%20`| -|`#`|hash (for colors)|`%23`| -|`%`|percent (in units)|`%25`| -|`<`|less than|`%3C`| -|`>`|greater than|`%3E`| -|`\`|backslash (when you need a `/`)|`%5C`| -|`\|`|pipe (delimiting parameters)|`%7C`| - -## FAQ - -#### Is it fast? - -On modern hardware, Netdata can generate about **2.000 badges per second per core**, before noticing any delays. It generates a badge in about half a millisecond! - -Of course these timing are for badges that use recent data. If you need badges that do calculations over long durations (a day, or more), timing will differ. Netdata logs its timings at its `access.log`, so take a look there before adding a heavy badge on a busy web site. Of course, you can cache such badges or have a cron job get them from Netdata and save them at your web server at regular intervals. - -#### Embedding badges in GitHub - -You have 2 options: -- SVG images with markdown -- SVG images with HTML (directly in .md files) - -For example, this is the cpu badge shown above: - -- Markdown example: - -```md -[![A nice name](https://registry.my-netdata.io/api/v1/badge.svg?chart=users.cpu&dimensions=root&value_color=grey:null%7Cgreen%3C10%7Cyellow%3C20%7Corange%3C50%7Cblue%3C100%7Cred&label=root%20user%20cpu%20now&units=%25)](https://registry.my-netdata.io/#apps_cpu) -``` - -- HTML example: - -```html - - - -``` - -Both produce this: - - - - - -#### Auto-refreshing badges in GitHub - -Unfortunately it cannot be done. GitHub fetches all the images using a proxy and rewrites all the URLs to be served by the proxy. - -You can refresh them from your browser console though. Press F12 to open the web browser console (switch to the console too), paste the following and press enter. They will refresh: - -```js -var len = document.images.length; while(len--) { document.images[len].src = document.images[len].src.replace(/\?cacheBuster=\d*/, "") + "?cacheBuster=" + new Date().getTime().toString(); }; -``` - - diff --git a/src/web/api/badges/web_buffer_svg.c b/src/web/api/badges/web_buffer_svg.c deleted file mode 100644 index 747c46d5e..000000000 --- a/src/web/api/badges/web_buffer_svg.c +++ /dev/null @@ -1,1159 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "web_buffer_svg.h" - -#define BADGE_HORIZONTAL_PADDING 4 -#define VERDANA_KERNING 0.2 -#define VERDANA_PADDING 1.0 - -/* - * verdana11_widths[] has been generated with this method: - * https://github.com/badges/shields/blob/master/measure-text.js -*/ - -static double verdana11_widths[128] = { - [0] = 0.0, - [1] = 0.0, - [2] = 0.0, - [3] = 0.0, - [4] = 0.0, - [5] = 0.0, - [6] = 0.0, - [7] = 0.0, - [8] = 0.0, - [9] = 0.0, - [10] = 0.0, - [11] = 0.0, - [12] = 0.0, - [13] = 0.0, - [14] = 0.0, - [15] = 0.0, - [16] = 0.0, - [17] = 0.0, - [18] = 0.0, - [19] = 0.0, - [20] = 0.0, - [21] = 0.0, - [22] = 0.0, - [23] = 0.0, - [24] = 0.0, - [25] = 0.0, - [26] = 0.0, - [27] = 0.0, - [28] = 0.0, - [29] = 0.0, - [30] = 0.0, - [31] = 0.0, - [32] = 3.8671874999999996, // - [33] = 4.3291015625, // ! - [34] = 5.048828125, // " - [35] = 9.001953125, // # - [36] = 6.9931640625, // $ - [37] = 11.837890625, // % - [38] = 7.992187499999999, // & - [39] = 2.9541015625, // ' - [40] = 4.9951171875, // ( - [41] = 4.9951171875, // ) - [42] = 6.9931640625, // * - [43] = 9.001953125, // + - [44] = 4.00146484375, // , - [45] = 4.9951171875, // - - [46] = 4.00146484375, // . - [47] = 4.9951171875, // / - [48] = 6.9931640625, // 0 - [49] = 6.9931640625, // 1 - [50] = 6.9931640625, // 2 - [51] = 6.9931640625, // 3 - [52] = 6.9931640625, // 4 - [53] = 6.9931640625, // 5 - [54] = 6.9931640625, // 6 - [55] = 6.9931640625, // 7 - [56] = 6.9931640625, // 8 - [57] = 6.9931640625, // 9 - [58] = 4.9951171875, // : - [59] = 4.9951171875, // ; - [60] = 9.001953125, // < - [61] = 9.001953125, // = - [62] = 9.001953125, // > - [63] = 5.99951171875, // ? - [64] = 11.0, // @ - [65] = 7.51953125, // A - [66] = 7.541015625, // B - [67] = 7.680664062499999, // C - [68] = 8.4755859375, // D - [69] = 6.95556640625, // E - [70] = 6.32177734375, // F - [71] = 8.529296875, // G - [72] = 8.26611328125, // H - [73] = 4.6298828125, // I - [74] = 5.00048828125, // J - [75] = 7.62158203125, // K - [76] = 6.123046875, // L - [77] = 9.2705078125, // M - [78] = 8.228515625, // N - [79] = 8.658203125, // O - [80] = 6.63330078125, // P - [81] = 8.658203125, // Q - [82] = 7.6484375, // R - [83] = 7.51953125, // S - [84] = 6.7783203125, // T - [85] = 8.05126953125, // U - [86] = 7.51953125, // V - [87] = 10.87646484375, // W - [88] = 7.53564453125, // X - [89] = 6.767578125, // Y - [90] = 7.53564453125, // Z - [91] = 4.9951171875, // [ - [92] = 4.9951171875, // backslash - [93] = 4.9951171875, // ] - [94] = 9.001953125, // ^ - [95] = 6.9931640625, // _ - [96] = 6.9931640625, // ` - [97] = 6.6064453125, // a - [98] = 6.853515625, // b - [99] = 5.73095703125, // c - [100] = 6.853515625, // d - [101] = 6.552734375, // e - [102] = 3.8671874999999996, // f - [103] = 6.853515625, // g - [104] = 6.9609375, // h - [105] = 3.0185546875, // i - [106] = 3.78662109375, // j - [107] = 6.509765625, // k - [108] = 3.0185546875, // l - [109] = 10.69921875, // m - [110] = 6.9609375, // n - [111] = 6.67626953125, // o - [112] = 6.853515625, // p - [113] = 6.853515625, // q - [114] = 4.6943359375, // r - [115] = 5.73095703125, // s - [116] = 4.33447265625, // t - [117] = 6.9609375, // u - [118] = 6.509765625, // v - [119] = 9.001953125, // w - [120] = 6.509765625, // x - [121] = 6.509765625, // y - [122] = 5.779296875, // z - [123] = 6.982421875, // { - [124] = 4.9951171875, // | - [125] = 6.982421875, // } - [126] = 9.001953125, // ~ - [127] = 0.0 -}; - -// find the width of the string using the verdana 11points font -static inline double verdana11_width(const char *s, float em_size) { - double w = 0.0; - - while(*s) { - // if UTF8 multibyte char found and guess it's width equal 1em - // as label width will be updated with JavaScript this is not so important - - // TODO: maybe move UTF8 functions from url.c to separate util in libnetdata - // then use url_utf8_get_byte_length etc. - if(IS_UTF8_STARTBYTE(*s)) { - s++; - while(IS_UTF8_BYTE(*s) && !IS_UTF8_STARTBYTE(*s)){ - s++; - } - w += em_size; - } - else { - if(likely(!(*s & 0x80))){ // Byte 1XXX XXXX is not valid in UTF8 - double t = verdana11_widths[(unsigned char)*s]; - if(t != 0.0) - w += t + VERDANA_KERNING; - } - s++; - } - } - - w -= VERDANA_KERNING; - w += VERDANA_PADDING; - return w; -} - -static inline size_t escape_xmlz(char *dst, const char *src, size_t len) { - size_t i = len; - - // required escapes from - // https://github.com/badges/shields/blob/master/badge.js - while(*src && i) { - switch(*src) { - case '\\': - *dst++ = '/'; - src++; - i--; - break; - - case '&': - if(i > 5) { - strcpy(dst, "&"); - i -= 5; - dst += 5; - src++; - } - else goto cleanup; - break; - - case '<': - if(i > 4) { - strcpy(dst, "<"); - i -= 4; - dst += 4; - src++; - } - else goto cleanup; - break; - - case '>': - if(i > 4) { - strcpy(dst, ">"); - i -= 4; - dst += 4; - src++; - } - else goto cleanup; - break; - - case '"': - if(i > 6) { - strcpy(dst, """); - i -= 6; - dst += 6; - src++; - } - else goto cleanup; - break; - - case '\'': - if(i > 6) { - strcpy(dst, "'"); - i -= 6; - dst += 6; - src++; - } - else goto cleanup; - break; - - default: - i--; - *dst++ = *src++; - break; - } - } - -cleanup: - *dst = '\0'; - return len - i; -} - -static inline char *format_value_with_precision_and_unit(char *value_string, size_t value_string_len, - NETDATA_DOUBLE value, const char *units, int precision) { - if(unlikely(isnan(value) || isinf(value))) - value = 0.0; - - char *separator = ""; - if(unlikely(isalnum((uint8_t)*units))) - separator = " "; - - if(precision < 0) { - int len, lstop = 0, trim_zeros = 1; - - NETDATA_DOUBLE abs = value; - if(isless(value, 0)) { - lstop = 1; - abs = fabsndd(value); - } - - if(isgreaterequal(abs, 1000)) { - len = snprintfz(value_string, value_string_len, "%0.0" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - trim_zeros = 0; - } - else if(isgreaterequal(abs, 10)) len = snprintfz(value_string, value_string_len, "%0.1" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - else if(isgreaterequal(abs, 1)) len = snprintfz(value_string, value_string_len, "%0.2" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - else if(isgreaterequal(abs, 0.1)) len = snprintfz(value_string, value_string_len, "%0.2" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - else if(isgreaterequal(abs, 0.01)) len = snprintfz(value_string, value_string_len, "%0.4" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - else if(isgreaterequal(abs, 0.001)) len = snprintfz(value_string, value_string_len, "%0.5" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - else if(isgreaterequal(abs, 0.0001)) len = snprintfz(value_string, value_string_len, "%0.6" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - else len = snprintfz(value_string, value_string_len, "%0.7" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); - - if(unlikely(trim_zeros)) { - int l; - // remove trailing zeros from the decimal part - for(l = len - 1; l > lstop; l--) { - if(likely(value_string[l] == '0')) { - value_string[l] = '\0'; - len--; - } - - else if(unlikely(value_string[l] == '.')) { - value_string[l] = '\0'; - len--; - break; - } - - else - break; - } - } - - if(unlikely(len <= 0)) len = 1; - snprintfz(&value_string[len], value_string_len - len, "%s%s", separator, units); - } - else { - if(precision > 50) precision = 50; - snprintfz(value_string, value_string_len, "%0.*" NETDATA_DOUBLE_MODIFIER "%s%s", precision, (NETDATA_DOUBLE) value, separator, units); - } - - return value_string; -} - -typedef enum badge_units_format { - UNITS_FORMAT_NONE, - UNITS_FORMAT_SECONDS, - UNITS_FORMAT_SECONDS_AGO, - UNITS_FORMAT_MINUTES, - UNITS_FORMAT_MINUTES_AGO, - UNITS_FORMAT_HOURS, - UNITS_FORMAT_HOURS_AGO, - UNITS_FORMAT_ONOFF, - UNITS_FORMAT_UPDOWN, - UNITS_FORMAT_OKERROR, - UNITS_FORMAT_OKFAILED, - UNITS_FORMAT_EMPTY, - UNITS_FORMAT_PERCENT -} UNITS_FORMAT; - - -static struct units_formatter { - const char *units; - uint32_t hash; - UNITS_FORMAT format; -} badge_units_formatters[] = { - { "seconds", 0, UNITS_FORMAT_SECONDS }, - { "seconds ago", 0, UNITS_FORMAT_SECONDS_AGO }, - { "minutes", 0, UNITS_FORMAT_MINUTES }, - { "minutes ago", 0, UNITS_FORMAT_MINUTES_AGO }, - { "hours", 0, UNITS_FORMAT_HOURS }, - { "hours ago", 0, UNITS_FORMAT_HOURS_AGO }, - { "on/off", 0, UNITS_FORMAT_ONOFF }, - { "on-off", 0, UNITS_FORMAT_ONOFF }, - { "onoff", 0, UNITS_FORMAT_ONOFF }, - { "up/down", 0, UNITS_FORMAT_UPDOWN }, - { "up-down", 0, UNITS_FORMAT_UPDOWN }, - { "updown", 0, UNITS_FORMAT_UPDOWN }, - { "ok/error", 0, UNITS_FORMAT_OKERROR }, - { "ok-error", 0, UNITS_FORMAT_OKERROR }, - { "okerror", 0, UNITS_FORMAT_OKERROR }, - { "ok/failed", 0, UNITS_FORMAT_OKFAILED }, - { "ok-failed", 0, UNITS_FORMAT_OKFAILED }, - { "okfailed", 0, UNITS_FORMAT_OKFAILED }, - { "empty", 0, UNITS_FORMAT_EMPTY }, - { "null", 0, UNITS_FORMAT_EMPTY }, - { "percentage", 0, UNITS_FORMAT_PERCENT }, - { "percent", 0, UNITS_FORMAT_PERCENT }, - { "pcent", 0, UNITS_FORMAT_PERCENT }, - - // terminator - { NULL, 0, UNITS_FORMAT_NONE } -}; - -inline char *format_value_and_unit(char *value_string, size_t value_string_len, - NETDATA_DOUBLE value, const char *units, int precision) { - static int max = -1; - int i; - - if(unlikely(max == -1)) { - for(i = 0; badge_units_formatters[i].units; i++) - badge_units_formatters[i].hash = simple_hash(badge_units_formatters[i].units); - - max = i; - } - - if(unlikely(!units)) units = ""; - uint32_t hash_units = simple_hash(units); - - UNITS_FORMAT format = UNITS_FORMAT_NONE; - for(i = 0; i < max; i++) { - struct units_formatter *ptr = &badge_units_formatters[i]; - - if(hash_units == ptr->hash && !strcmp(units, ptr->units)) { - format = ptr->format; - break; - } - } - - if(unlikely(format == UNITS_FORMAT_SECONDS || format == UNITS_FORMAT_SECONDS_AGO)) { - if(value == 0.0) { - snprintfz(value_string, value_string_len, "%s", "now"); - return value_string; - } - else if(isnan(value) || isinf(value)) { - snprintfz(value_string, value_string_len, "%s", "undefined"); - return value_string; - } - - const char *suffix = (format == UNITS_FORMAT_SECONDS_AGO)?" ago":""; - - size_t s = (size_t)value; - size_t d = s / 86400; - s = s % 86400; - - size_t h = s / 3600; - s = s % 3600; - - size_t m = s / 60; - s = s % 60; - - if(d) - snprintfz(value_string, value_string_len, "%zu %s %02zu:%02zu:%02zu%s", d, (d == 1)?"day":"days", h, m, s, suffix); - else - snprintfz(value_string, value_string_len, "%02zu:%02zu:%02zu%s", h, m, s, suffix); - - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_MINUTES || format == UNITS_FORMAT_MINUTES_AGO)) { - if(value == 0.0) { - snprintfz(value_string, value_string_len, "%s", "now"); - return value_string; - } - else if(isnan(value) || isinf(value)) { - snprintfz(value_string, value_string_len, "%s", "undefined"); - return value_string; - } - - const char *suffix = (format == UNITS_FORMAT_MINUTES_AGO)?" ago":""; - - size_t m = (size_t)value; - size_t d = m / (60 * 24); - m = m % (60 * 24); - - size_t h = m / 60; - m = m % 60; - - if(d) - snprintfz(value_string, value_string_len, "%zud %02zuh %02zum%s", d, h, m, suffix); - else - snprintfz(value_string, value_string_len, "%zuh %zum%s", h, m, suffix); - - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_HOURS || format == UNITS_FORMAT_HOURS_AGO)) { - if(value == 0.0) { - snprintfz(value_string, value_string_len, "%s", "now"); - return value_string; - } - else if(isnan(value) || isinf(value)) { - snprintfz(value_string, value_string_len, "%s", "undefined"); - return value_string; - } - - const char *suffix = (format == UNITS_FORMAT_HOURS_AGO)?" ago":""; - - size_t h = (size_t)value; - size_t d = h / 24; - h = h % 24; - - if(d) - snprintfz(value_string, value_string_len, "%zud %zuh%s", d, h, suffix); - else - snprintfz(value_string, value_string_len, "%zuh%s", h, suffix); - - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_ONOFF)) { - snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"on":"off"); - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_UPDOWN)) { - snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"up":"down"); - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_OKERROR)) { - snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"ok":"error"); - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_OKFAILED)) { - snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"ok":"failed"); - return value_string; - } - - else if(unlikely(format == UNITS_FORMAT_EMPTY)) - units = ""; - - else if(unlikely(format == UNITS_FORMAT_PERCENT)) - units = "%"; - - if(unlikely(isnan(value) || isinf(value))) { - strcpy(value_string, "-"); - return value_string; - } - - return format_value_with_precision_and_unit(value_string, value_string_len, value, units, precision); -} - -static struct badge_color { - const char *name; - uint32_t hash; - const char *color; -} badge_colors[] = { - - // colors from: - // https://github.com/badges/shields/blob/master/colorscheme.json - - { "brightgreen", 0, "4c1" }, - { "green", 0, "97CA00" }, - { "yellow", 0, "dfb317" }, - { "yellowgreen", 0, "a4a61d" }, - { "orange", 0, "fe7d37" }, - { "red", 0, "e05d44" }, - { "blue", 0, "007ec6" }, - { "grey", 0, "555" }, - { "gray", 0, "555" }, - { "lightgrey", 0, "9f9f9f" }, - { "lightgray", 0, "9f9f9f" }, - - // terminator - { NULL, 0, NULL } -}; - -static inline const char *color_map(const char *color, const char *def) { - static int max = -1; - int i; - - if(unlikely(max == -1)) { - for(i = 0; badge_colors[i].name ;i++) - badge_colors[i].hash = simple_hash(badge_colors[i].name); - - max = i; - } - - uint32_t hash = simple_hash(color); - - for(i = 0; i < max; i++) { - struct badge_color *ptr = &badge_colors[i]; - - if(hash == ptr->hash && !strcmp(color, ptr->name)) - return ptr->color; - } - - return def; -} - -typedef enum color_comparison { - COLOR_COMPARE_EQUAL, - COLOR_COMPARE_NOTEQUAL, - COLOR_COMPARE_LESS, - COLOR_COMPARE_LESSEQUAL, - COLOR_COMPARE_GREATER, - COLOR_COMPARE_GREATEREQUAL, -} BADGE_COLOR_COMPARISON; - -static inline void calc_colorz(const char *color, char *final, size_t len, NETDATA_DOUBLE value) { - if(isnan(value) || isinf(value)) - value = NAN; - - char color_buffer[256 + 1] = ""; - char value_buffer[256 + 1] = ""; - BADGE_COLOR_COMPARISON comparison = COLOR_COMPARE_GREATER; - - // example input: - // colormin|color:null... - - const char *c = color; - while(*c) { - char *dc = color_buffer, *dv = NULL; - size_t ci = 0, vi = 0; - - const char *t = c; - - while(*t && *t != '|') { - switch(*t) { - case '!': - if(t[1] == '=') t++; - comparison = COLOR_COMPARE_NOTEQUAL; - dv = value_buffer; - break; - - case '=': - case ':': - comparison = COLOR_COMPARE_EQUAL; - dv = value_buffer; - break; - - case '}': - case ')': - case '>': - if(t[1] == '=') { - comparison = COLOR_COMPARE_GREATEREQUAL; - t++; - } - else - comparison = COLOR_COMPARE_GREATER; - dv = value_buffer; - break; - - case '{': - case '(': - case '<': - if(t[1] == '=') { - comparison = COLOR_COMPARE_LESSEQUAL; - t++; - } - else if(t[1] == '>' || t[1] == ')' || t[1] == '}') { - comparison = COLOR_COMPARE_NOTEQUAL; - t++; - } - else - comparison = COLOR_COMPARE_LESS; - dv = value_buffer; - break; - - default: - if(dv) { - if(vi < 256) { - vi++; - *dv++ = *t; - } - } - else { - if(ci < 256) { - ci++; - *dc++ = *t; - } - } - break; - } - - t++; - } - - // prepare for next iteration - if(*t == '|') t++; - c = t; - - // do the math - *dc = '\0'; - if(dv) { - *dv = '\0'; - NETDATA_DOUBLE v; - - if(!*value_buffer || !strcmp(value_buffer, "null")) { - v = NAN; - } - else { - v = str2l(value_buffer); - if(isnan(v) || isinf(v)) - v = NAN; - } - - if(unlikely(isnan(value) || isnan(v))) { - if(isnan(value) && isnan(v)) - break; - } - else { - if (unlikely(comparison == COLOR_COMPARE_LESS && isless(value, v))) break; - else if (unlikely(comparison == COLOR_COMPARE_LESSEQUAL && islessequal(value, v))) break; - else if (unlikely(comparison == COLOR_COMPARE_GREATER && isgreater(value, v))) break; - else if (unlikely(comparison == COLOR_COMPARE_GREATEREQUAL && isgreaterequal(value, v))) break; - else if (unlikely(comparison == COLOR_COMPARE_EQUAL && !islessgreater(value, v))) break; - else if (unlikely(comparison == COLOR_COMPARE_NOTEQUAL && islessgreater(value, v))) break; - } - } - else - break; - } - - const char *b; - if(color_buffer[0]) - b = color_buffer; - else - b = color; - - strncpyz(final, b, len); -} - -// value + units -#define VALUE_STRING_SIZE 100 - -// label -#define LABEL_STRING_SIZE 200 - -// colors -#define COLOR_STRING_SIZE 100 - -static inline int allowed_hexa_char(char x) { - return ( (x >= '0' && x <= '9') || - (x >= 'a' && x <= 'f') || - (x >= 'A' && x <= 'F') - ); -} - -static int html_color_check(const char *str) { - int i = 0; - while(str[i]) { - if(!allowed_hexa_char(str[i])) - return 0; - if(unlikely(i >= 6)) - return 0; - i++; - } - // want to allow either RGB or RRGGBB - return ( i == 6 || i == 3 ); -} - -// Will parse color arg as #RRGGBB or #RGB or one of the colors -// from color_map hash table -// if parsing fails (argument error) it will return default color -// given as default parameter (def) -// in any case it will return either color in "RRGGBB" or "RGB" format as string -// or whatever is given as def (without checking - caller responsible to give sensible -// safely escaped default) as default if it fails -// in any case this function must always return something we can put directly in XML -// so no escaping is necessary anymore (with exception of default where caller is responsible) -// to give sensible default -#define BADGE_SVG_COLOR_ARG_MAXLEN 20 - -static const char *parse_color_argument(const char *arg, const char *def) -{ - if( !arg ) - return def; - size_t len = strnlen(arg, BADGE_SVG_COLOR_ARG_MAXLEN); - if( len < 2 || len >= BADGE_SVG_COLOR_ARG_MAXLEN ) - return def; - if( html_color_check(arg) ) - return arg; - return color_map(arg, def); -} - -void buffer_svg(BUFFER *wb, const char *label, - NETDATA_DOUBLE value, const char *units, const char *label_color, const char *value_color, int precision, int scale, uint32_t options, int fixed_width_lbl, int fixed_width_val, const char* text_color_lbl, const char* text_color_val) { - char value_color_buffer[COLOR_STRING_SIZE + 1] - , value_string[VALUE_STRING_SIZE + 1] - , label_escaped[LABEL_STRING_SIZE + 1] - , value_escaped[VALUE_STRING_SIZE + 1]; - - const char *label_color_parsed; - const char *value_color_parsed; - - double label_width = (double)fixed_width_lbl, value_width = (double)fixed_width_val, total_width; - double height = 20.0, font_size = 11.0, text_offset = 5.8, round_corner = 3.0; - - if(scale < 100) scale = 100; - - if(unlikely(!value_color || !*value_color)) - value_color = (isnan(value) || isinf(value))?"999":"4c1"; - - calc_colorz(value_color, value_color_buffer, COLOR_STRING_SIZE, value); - format_value_and_unit(value_string, VALUE_STRING_SIZE, (options & RRDR_OPTION_DISPLAY_ABS)? fabsndd(value):value, units, precision); - - if(fixed_width_lbl <= 0 || fixed_width_val <= 0) { - label_width = verdana11_width(label, font_size) + (BADGE_HORIZONTAL_PADDING * 2); - value_width = verdana11_width(value_string, font_size) + (BADGE_HORIZONTAL_PADDING * 2); - } - total_width = label_width + value_width; - - escape_xmlz(label_escaped, label, LABEL_STRING_SIZE); - escape_xmlz(value_escaped, value_string, VALUE_STRING_SIZE); - - label_color_parsed = parse_color_argument(label_color, "555"); - value_color_parsed = parse_color_argument(value_color_buffer, "555"); - - wb->content_type = CT_IMAGE_SVG_XML; - - total_width = total_width * scale / 100.0; - height = height * scale / 100.0; - font_size = font_size * scale / 100.0; - text_offset = text_offset * scale / 100.0; - label_width = label_width * scale / 100.0; - value_width = value_width * scale / 100.0; - round_corner = round_corner * scale / 100.0; - - // svg template from: - // https://raw.githubusercontent.com/badges/shields/master/templates/flat-template.svg - buffer_sprintf(wb, - "" - "" - "" - "" - "" - "" - "" - "" - "" - "", - total_width, height, - total_width, height, round_corner, - label_width, height, label_color_parsed); // 0 && fixed_width_val > 0) { - buffer_sprintf(wb, - "" - "" - "", - label_width, height); // ", - label_width, value_width, height, value_color_parsed); - - if(fixed_width_lbl > 0 && fixed_width_val > 0) { - buffer_sprintf(wb, - "" - "" - "", - label_width, value_width, height); - } - - buffer_sprintf(wb, - "" - "" - "" - "%s" - "%s" - "%s" - "%s" - "", - total_width, height, - font_size, - label_width / 2, ceil(height - text_offset), label_escaped, - label_width / 2, ceil(height - text_offset - 1.0), parse_color_argument(text_color_lbl, "fff"), label_escaped, - label_width + value_width / 2 -1, ceil(height - text_offset), value_escaped, - label_width + value_width / 2 -1, ceil(height - text_offset - 1.0), parse_color_argument(text_color_val, "fff"), value_escaped); - - if(fixed_width_lbl <= 0 || fixed_width_val <= 0){ - buffer_sprintf(wb, - "", - BADGE_HORIZONTAL_PADDING); - } - buffer_sprintf(wb, ""); -} - -#define BADGE_URL_ARG_LBL_COLOR "text_color_lbl" -#define BADGE_URL_ARG_VAL_COLOR "text_color_val" - -int web_client_api_request_v1_badge(RRDHOST *host, struct web_client *w, char *url) { - int ret = HTTP_RESP_BAD_REQUEST; - buffer_flush(w->response.data); - - BUFFER *dimensions = NULL; - - const char *chart = NULL - , *before_str = NULL - , *after_str = NULL - , *points_str = NULL - , *multiply_str = NULL - , *divide_str = NULL - , *label = NULL - , *units = NULL - , *label_color = NULL - , *value_color = NULL - , *refresh_str = NULL - , *precision_str = NULL - , *scale_str = NULL - , *alarm = NULL - , *fixed_width_lbl_str = NULL - , *fixed_width_val_str = NULL - , *text_color_lbl_str = NULL - , *text_color_val_str = NULL - , *group_options = NULL; - - int group = RRDR_GROUPING_AVERAGE; - uint32_t options = 0x00000000; - - const RRDCALC_ACQUIRED *rca = NULL; - RRDCALC *rc = NULL; - RRDSET *st = NULL; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 badge.svg query param '%s' with value '%s'", w->id, name, value); - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "chart")) chart = value; - else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { - if(!dimensions) - dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); - - buffer_strcat(dimensions, "|"); - buffer_strcat(dimensions, value); - } - else if(!strcmp(name, "after")) after_str = value; - else if(!strcmp(name, "before")) before_str = value; - else if(!strcmp(name, "points")) points_str = value; - else if(!strcmp(name, "group_options")) group_options = value; - else if(!strcmp(name, "group")) { - group = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); - } - else if(!strcmp(name, "options")) { - options |= rrdr_options_parse(value); - } - else if(!strcmp(name, "label")) label = value; - else if(!strcmp(name, "units")) units = value; - else if(!strcmp(name, "label_color")) label_color = value; - else if(!strcmp(name, "value_color")) value_color = value; - else if(!strcmp(name, "multiply")) multiply_str = value; - else if(!strcmp(name, "divide")) divide_str = value; - else if(!strcmp(name, "refresh")) refresh_str = value; - else if(!strcmp(name, "precision")) precision_str = value; - else if(!strcmp(name, "scale")) scale_str = value; - else if(!strcmp(name, "fixed_width_lbl")) fixed_width_lbl_str = value; - else if(!strcmp(name, "fixed_width_val")) fixed_width_val_str = value; - else if(!strcmp(name, "alarm")) alarm = value; - else if(!strcmp(name, BADGE_URL_ARG_LBL_COLOR)) text_color_lbl_str = value; - else if(!strcmp(name, BADGE_URL_ARG_VAL_COLOR)) text_color_val_str = value; - } - - int fixed_width_lbl = -1; - int fixed_width_val = -1; - - if(fixed_width_lbl_str && *fixed_width_lbl_str - && fixed_width_val_str && *fixed_width_val_str) { - fixed_width_lbl = str2i(fixed_width_lbl_str); - fixed_width_val = str2i(fixed_width_val_str); - } - - if(!chart || !*chart) { - buffer_no_cacheable(w->response.data); - buffer_sprintf(w->response.data, "No chart id is given at the request."); - goto cleanup; - } - - int scale = (scale_str && *scale_str)?str2i(scale_str):100; - - st = rrdset_find(host, chart); - if(!st) st = rrdset_find_byname(host, chart); - if(!st) { - buffer_no_cacheable(w->response.data); - buffer_svg(w->response.data, "chart not found", NAN, "", NULL, NULL, -1, scale, 0, -1, -1, NULL, NULL); - ret = HTTP_RESP_OK; - goto cleanup; - } - st->last_accessed_time_s = now_realtime_sec(); - - if(alarm) { - rca = rrdcalc_from_rrdset_get(st, alarm); - rc = rrdcalc_acquired_to_rrdcalc(rca); - - if (!rc) { - buffer_no_cacheable(w->response.data); - buffer_svg(w->response.data, "alarm not found", NAN, "", NULL, NULL, -1, scale, 0, -1, -1, NULL, NULL); - ret = HTTP_RESP_OK; - goto cleanup; - } - } - - long long multiply = (multiply_str && *multiply_str )?str2l(multiply_str):1; - long long divide = (divide_str && *divide_str )?str2l(divide_str):1; - long long before = (before_str && *before_str )?str2l(before_str):0; - long long after = (after_str && *after_str )?str2l(after_str):-st->update_every; - int points = (points_str && *points_str )?str2i(points_str):1; - int precision = (precision_str && *precision_str)?str2i(precision_str):-1; - - if(!multiply) multiply = 1; - if(!divide) divide = 1; - - int refresh = 0; - if(refresh_str && *refresh_str) { - if(!strcmp(refresh_str, "auto")) { - if(rc) refresh = rc->config.update_every; - else if(options & RRDR_OPTION_NOT_ALIGNED) - refresh = st->update_every; - else { - refresh = (int)(before - after); - if(refresh < 0) refresh = -refresh; - } - } - else { - refresh = str2i(refresh_str); - if(refresh < 0) refresh = -refresh; - } - } - - if(!label) { - if(alarm) { - char *s = (char *)alarm; - while(*s) { - if(*s == '_') *s = ' '; - s++; - } - label = alarm; - } - else if(dimensions) { - const char *dim = buffer_tostring(dimensions); - if(*dim == '|') dim++; - label = dim; - } - else - label = rrdset_name(st); - } - if(!units) { - if(alarm) { - if(rc->config.units) - units = rrdcalc_units(rc); - else - units = ""; - } - else if(options & RRDR_OPTION_PERCENTAGE) - units = "%"; - else - units = rrdset_units(st); - } - - netdata_log_debug(D_WEB_CLIENT, "%llu: API command 'badge.svg' for chart '%s', alarm '%s', dimensions '%s', after '%lld', before '%lld', points '%d', group '%d', options '0x%08x'" - , w->id - , chart - , alarm?alarm:"" - , (dimensions)?buffer_tostring(dimensions):"" - , after - , before - , points - , group - , options - ); - - if(rc) { - if (refresh > 0) { - buffer_sprintf(w->response.header, "Refresh: %d\r\n", refresh); - w->response.data->date = now_realtime_sec(); - w->response.data->expires = w->response.data->date + refresh; - buffer_cacheable(w->response.data); - } - else - buffer_no_cacheable(w->response.data); - - if(!value_color) { - switch(rc->status) { - case RRDCALC_STATUS_CRITICAL: - value_color = "red"; - break; - - case RRDCALC_STATUS_WARNING: - value_color = "orange"; - break; - - case RRDCALC_STATUS_CLEAR: - value_color = "brightgreen"; - break; - - case RRDCALC_STATUS_UNDEFINED: - value_color = "lightgrey"; - break; - - case RRDCALC_STATUS_UNINITIALIZED: - value_color = "#000"; - break; - - default: - value_color = "grey"; - break; - } - } - - buffer_svg(w->response.data, - label, - (isnan(rc->value)||isinf(rc->value)) ? rc->value : rc->value * multiply / divide, - units, - label_color, - value_color, - precision, - scale, - options, - fixed_width_lbl, - fixed_width_val, - text_color_lbl_str, - text_color_val_str - ); - ret = HTTP_RESP_OK; - } - else { - time_t latest_timestamp = 0; - int value_is_null = 1; - NETDATA_DOUBLE n = NAN; - ret = HTTP_RESP_INTERNAL_SERVER_ERROR; - - // if the collected value is too old, don't calculate its value - if (rrdset_last_entry_s(st) >= (now_realtime_sec() - (st->update_every * gap_when_lost_iterations_above))) - ret = rrdset2value_api_v1(st, w->response.data, &n, - (dimensions) ? buffer_tostring(dimensions) : NULL, - points, after, before, group, group_options, 0, options, - NULL, &latest_timestamp, - NULL, NULL, NULL, - &value_is_null, NULL, 0, 0, - QUERY_SOURCE_API_BADGE, STORAGE_PRIORITY_NORMAL); - - // if the value cannot be calculated, show empty badge - if (ret != HTTP_RESP_OK) { - buffer_no_cacheable(w->response.data); - value_is_null = 1; - n = 0; - ret = HTTP_RESP_OK; - } - else if (refresh > 0) { - buffer_sprintf(w->response.header, "Refresh: %d\r\n", refresh); - w->response.data->expires = now_realtime_sec() + refresh; - } - else buffer_no_cacheable(w->response.data); - - // render the badge - buffer_svg(w->response.data, - label, - (value_is_null)?NAN:(n * multiply / divide), - units, - label_color, - value_color, - precision, - scale, - options, - fixed_width_lbl, - fixed_width_val, - text_color_lbl_str, - text_color_val_str - ); - } - -cleanup: - rrdcalc_from_rrdset_release(st, rca); - buffer_free(dimensions); - return ret; -} diff --git a/src/web/api/badges/web_buffer_svg.h b/src/web/api/badges/web_buffer_svg.h deleted file mode 100644 index 71857811f..000000000 --- a/src/web/api/badges/web_buffer_svg.h +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef NETDATA_WEB_BUFFER_SVG_H -#define NETDATA_WEB_BUFFER_SVG_H 1 - -#include "libnetdata/libnetdata.h" -#include "web/server/web_client.h" - -void buffer_svg(BUFFER *wb, const char *label, - NETDATA_DOUBLE value, const char *units, const char *label_color, const char *value_color, int precision, int scale, uint32_t options, int fixed_width_lbl, int fixed_width_val, const char* text_color_lbl, const char* text_color_val); -char *format_value_and_unit(char *value_string, size_t value_string_len, - NETDATA_DOUBLE value, const char *units, int precision); - -int web_client_api_request_v1_badge(struct rrdhost *host, struct web_client *w, char *url); - -#include "web/api/web_api_v1.h" - -#endif /* NETDATA_WEB_BUFFER_SVG_H */ diff --git a/src/web/api/exporters/README.md b/src/web/api/exporters/README.md index 206937967..47b443487 100644 --- a/src/web/api/exporters/README.md +++ b/src/web/api/exporters/README.md @@ -1,12 +1,3 @@ - - # Exporters TBD diff --git a/src/web/api/exporters/allmetrics.c b/src/web/api/exporters/allmetrics.c deleted file mode 100644 index 55179c0ae..000000000 --- a/src/web/api/exporters/allmetrics.c +++ /dev/null @@ -1,132 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "allmetrics.h" - -struct prometheus_output_options { - char *name; - PROMETHEUS_OUTPUT_OPTIONS flag; -} prometheus_output_flags_root[] = { - { "names", PROMETHEUS_OUTPUT_NAMES }, - { "timestamps", PROMETHEUS_OUTPUT_TIMESTAMPS }, - { "variables", PROMETHEUS_OUTPUT_VARIABLES }, - { "oldunits", PROMETHEUS_OUTPUT_OLDUNITS }, - { "hideunits", PROMETHEUS_OUTPUT_HIDEUNITS }, - // terminator - { NULL, PROMETHEUS_OUTPUT_NONE }, -}; - -inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client *w, char *url) { - int format = ALLMETRICS_SHELL; - const char *filter = NULL; - const char *prometheus_server = w->client_ip; - - uint32_t prometheus_exporting_options; - if (prometheus_exporter_instance) - prometheus_exporting_options = prometheus_exporter_instance->config.options; - else - prometheus_exporting_options = global_exporting_options; - - PROMETHEUS_OUTPUT_OPTIONS prometheus_output_options = - PROMETHEUS_OUTPUT_TIMESTAMPS | - ((prometheus_exporting_options & EXPORTING_OPTION_SEND_NAMES) ? PROMETHEUS_OUTPUT_NAMES : 0); - - const char *prometheus_prefix; - if (prometheus_exporter_instance) - prometheus_prefix = prometheus_exporter_instance->config.prefix; - else - prometheus_prefix = global_exporting_prefix; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - if(!strcmp(name, "format")) { - if(!strcmp(value, ALLMETRICS_FORMAT_SHELL)) - format = ALLMETRICS_SHELL; - else if(!strcmp(value, ALLMETRICS_FORMAT_PROMETHEUS)) - format = ALLMETRICS_PROMETHEUS; - else if(!strcmp(value, ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS)) - format = ALLMETRICS_PROMETHEUS_ALL_HOSTS; - else if(!strcmp(value, ALLMETRICS_FORMAT_JSON)) - format = ALLMETRICS_JSON; - else - format = 0; - } - else if(!strcmp(name, "filter")) { - filter = value; - } - else if(!strcmp(name, "server")) { - prometheus_server = value; - } - else if(!strcmp(name, "prefix")) { - prometheus_prefix = value; - } - else if(!strcmp(name, "data") || !strcmp(name, "source") || !strcmp(name, "data source") || !strcmp(name, "data-source") || !strcmp(name, "data_source") || !strcmp(name, "datasource")) { - prometheus_exporting_options = exporting_parse_data_source(value, prometheus_exporting_options); - } - else { - int i; - for(i = 0; prometheus_output_flags_root[i].name ; i++) { - if(!strcmp(name, prometheus_output_flags_root[i].name)) { - if(!strcmp(value, "yes") || !strcmp(value, "1") || !strcmp(value, "true")) - prometheus_output_options |= prometheus_output_flags_root[i].flag; - else { - prometheus_output_options &= ~prometheus_output_flags_root[i].flag; - } - - break; - } - } - } - } - - buffer_flush(w->response.data); - buffer_no_cacheable(w->response.data); - - switch(format) { - case ALLMETRICS_JSON: - w->response.data->content_type = CT_APPLICATION_JSON; - rrd_stats_api_v1_charts_allmetrics_json(host, filter, w->response.data); - return HTTP_RESP_OK; - - case ALLMETRICS_SHELL: - w->response.data->content_type = CT_TEXT_PLAIN; - rrd_stats_api_v1_charts_allmetrics_shell(host, filter, w->response.data); - return HTTP_RESP_OK; - - case ALLMETRICS_PROMETHEUS: - w->response.data->content_type = CT_PROMETHEUS; - rrd_stats_api_v1_charts_allmetrics_prometheus_single_host( - host - , filter - , w->response.data - , prometheus_server - , prometheus_prefix - , prometheus_exporting_options - , prometheus_output_options - ); - return HTTP_RESP_OK; - - case ALLMETRICS_PROMETHEUS_ALL_HOSTS: - w->response.data->content_type = CT_PROMETHEUS; - rrd_stats_api_v1_charts_allmetrics_prometheus_all_hosts( - host - , filter - , w->response.data - , prometheus_server - , prometheus_prefix - , prometheus_exporting_options - , prometheus_output_options - ); - return HTTP_RESP_OK; - - default: - w->response.data->content_type = CT_TEXT_PLAIN; - buffer_strcat(w->response.data, "Which format? '" ALLMETRICS_FORMAT_SHELL "', '" ALLMETRICS_FORMAT_PROMETHEUS "', '" ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS "' and '" ALLMETRICS_FORMAT_JSON "' are currently supported."); - return HTTP_RESP_BAD_REQUEST; - } -} diff --git a/src/web/api/exporters/allmetrics.h b/src/web/api/exporters/allmetrics.h deleted file mode 100644 index 3afc42e28..000000000 --- a/src/web/api/exporters/allmetrics.h +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef NETDATA_API_ALLMETRICS_H -#define NETDATA_API_ALLMETRICS_H - -#include "web/api/formatters/rrd2json.h" -#include "shell/allmetrics_shell.h" -#include "web/server/web_client.h" - -int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client *w, char *url); - -#endif //NETDATA_API_ALLMETRICS_H diff --git a/src/web/api/exporters/prometheus/README.md b/src/web/api/exporters/prometheus/README.md index 6c6bad3a7..f4b1602cb 100644 --- a/src/web/api/exporters/prometheus/README.md +++ b/src/web/api/exporters/prometheus/README.md @@ -1,12 +1,3 @@ - - # Prometheus exporter Read the Prometheus exporter documentation: [Using Netdata with Prometheus](/src/exporting/prometheus/README.md). diff --git a/src/web/api/exporters/shell/README.md b/src/web/api/exporters/shell/README.md index 86b774f1b..14faf1fbc 100644 --- a/src/web/api/exporters/shell/README.md +++ b/src/web/api/exporters/shell/README.md @@ -1,25 +1,16 @@ - - # Shell exporter Shell scripts can now query Netdata: ```sh -eval "$(curl -s 'http://localhost:19999/api/v1/allmetrics')" +eval "$(curl -s 'http://localhost:19999/api/v3/allmetrics')" ``` after this command, all the Netdata metrics are exposed to shell. Check: ```sh # source the metrics -eval "$(curl -s 'http://localhost:19999/api/v1/allmetrics')" +eval "$(curl -s 'http://localhost:19999/api/v3/allmetrics')" # let's see if there are variables exposed by Netdata for system.cpu set | grep "^NETDATA_SYSTEM_CPU" @@ -50,7 +41,7 @@ echo ${NETDATA_ALARM_SYSTEM_SWAP_USED_SWAP_STATUS} CLEAR # is it fast? -time curl -s 'http://localhost:19999/api/v1/allmetrics' >/dev/null +time curl -s 'http://localhost:19999/api/v3/allmetrics' >/dev/null real 0m0,070s user 0m0,000s diff --git a/src/web/api/exporters/shell/allmetrics_shell.c b/src/web/api/exporters/shell/allmetrics_shell.c deleted file mode 100644 index c8248c148..000000000 --- a/src/web/api/exporters/shell/allmetrics_shell.c +++ /dev/null @@ -1,170 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "allmetrics_shell.h" - -// ---------------------------------------------------------------------------- -// BASH -// /api/v1/allmetrics?format=bash - -static inline size_t shell_name_copy(char *d, const char *s, size_t usable) { - size_t n; - - for(n = 0; *s && n < usable ; d++, s++, n++) { - register char c = *s; - - if(unlikely(!isalnum(c))) *d = '_'; - else *d = (char)toupper(c); - } - *d = '\0'; - - return n; -} - -#define SHELL_ELEMENT_MAX 100 - -void rrd_stats_api_v1_charts_allmetrics_shell(RRDHOST *host, const char *filter_string, BUFFER *wb) { - analytics_log_shell(); - SIMPLE_PATTERN *filter = simple_pattern_create(filter_string, NULL, SIMPLE_PATTERN_EXACT, true); - - // for each chart - RRDSET *st; - rrdset_foreach_read(st, host) { - if (filter && !simple_pattern_matches_string(filter, st->name)) - continue; - if (rrdset_is_available_for_viewers(st)) { - NETDATA_DOUBLE total = 0.0; - - char chart[SHELL_ELEMENT_MAX + 1]; - shell_name_copy(chart, st->name ? rrdset_name(st) : rrdset_id(st), SHELL_ELEMENT_MAX); - - buffer_sprintf(wb, "\n# chart: %s (name: %s)\n", rrdset_id(st), rrdset_name(st)); - - // for each dimension - RRDDIM *rd; - rrddim_foreach_read(rd, st) { - if(rd->collector.counter && !rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)) { - char dimension[SHELL_ELEMENT_MAX + 1]; - shell_name_copy(dimension, rd->name?rrddim_name(rd):rrddim_id(rd), SHELL_ELEMENT_MAX); - - NETDATA_DOUBLE n = rd->collector.last_stored_value; - - if(isnan(n) || isinf(n)) - buffer_sprintf(wb, "NETDATA_%s_%s=\"\" # %s\n", chart, dimension, rrdset_units(st)); - else { - if(rd->multiplier < 0 || rd->divisor < 0) n = -n; - n = roundndd(n); - if(!rrddim_option_check(rd, RRDDIM_OPTION_HIDDEN)) total += n; - buffer_sprintf(wb, "NETDATA_%s_%s=\"" NETDATA_DOUBLE_FORMAT_ZERO "\" # %s\n", chart, dimension, n, rrdset_units(st)); - } - } - } - rrddim_foreach_done(rd); - - total = roundndd(total); - buffer_sprintf(wb, "NETDATA_%s_VISIBLETOTAL=\"" NETDATA_DOUBLE_FORMAT_ZERO "\" # %s\n", chart, total, rrdset_units(st)); - } - } - rrdset_foreach_done(st); - - buffer_strcat(wb, "\n# NETDATA ALARMS RUNNING\n"); - - RRDCALC *rc; - foreach_rrdcalc_in_rrdhost_read(host, rc) { - if(!rc->rrdset) continue; - - char chart[SHELL_ELEMENT_MAX + 1]; - shell_name_copy(chart, rc->rrdset->name?rrdset_name(rc->rrdset):rrdset_id(rc->rrdset), SHELL_ELEMENT_MAX); - - char alarm[SHELL_ELEMENT_MAX + 1]; - shell_name_copy(alarm, rrdcalc_name(rc), SHELL_ELEMENT_MAX); - - NETDATA_DOUBLE n = rc->value; - - if(isnan(n) || isinf(n)) - buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"\" # %s\n", chart, alarm, rrdcalc_units(rc)); - else { - n = roundndd(n); - buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"" NETDATA_DOUBLE_FORMAT_ZERO "\" # %s\n", chart, alarm, n, rrdcalc_units(rc)); - } - - buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_STATUS=\"%s\"\n", chart, alarm, rrdcalc_status2string(rc->status)); - } - foreach_rrdcalc_in_rrdhost_done(rc); - - simple_pattern_free(filter); -} - -// ---------------------------------------------------------------------------- - -void rrd_stats_api_v1_charts_allmetrics_json(RRDHOST *host, const char *filter_string, BUFFER *wb) { - analytics_log_json(); - SIMPLE_PATTERN *filter = simple_pattern_create(filter_string, NULL, SIMPLE_PATTERN_EXACT, true); - - buffer_strcat(wb, "{"); - - size_t chart_counter = 0; - size_t dimension_counter = 0; - - // for each chart - RRDSET *st; - rrdset_foreach_read(st, host) { - if (filter && !(simple_pattern_matches_string(filter, st->id) || simple_pattern_matches_string(filter, st->name))) - continue; - - if(rrdset_is_available_for_viewers(st)) { - buffer_sprintf( - wb, - "%s\n" - "\t\"%s\": {\n" - "\t\t\"name\":\"%s\",\n" - "\t\t\"family\":\"%s\",\n" - "\t\t\"context\":\"%s\",\n" - "\t\t\"units\":\"%s\",\n" - "\t\t\"last_updated\": %"PRId64",\n" - "\t\t\"dimensions\": {", - chart_counter ? "," : "", - rrdset_id(st), - rrdset_name(st), - rrdset_family(st), - rrdset_context(st), - rrdset_units(st), - (int64_t) rrdset_last_entry_s(st)); - - chart_counter++; - dimension_counter = 0; - - // for each dimension - RRDDIM *rd; - rrddim_foreach_read(rd, st) { - if(rd->collector.counter && !rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)) { - buffer_sprintf( - wb, - "%s\n" - "\t\t\t\"%s\": {\n" - "\t\t\t\t\"name\": \"%s\",\n" - "\t\t\t\t\"value\": ", - dimension_counter ? "," : "", - rrddim_id(rd), - rrddim_name(rd)); - - if(isnan(rd->collector.last_stored_value)) - buffer_strcat(wb, "null"); - else - buffer_sprintf(wb, NETDATA_DOUBLE_FORMAT, rd->collector.last_stored_value); - - buffer_strcat(wb, "\n\t\t\t}"); - - dimension_counter++; - } - } - rrddim_foreach_done(rd); - - buffer_strcat(wb, "\n\t\t}\n\t}"); - } - } - rrdset_foreach_done(st); - - buffer_strcat(wb, "\n}"); - simple_pattern_free(filter); -} - diff --git a/src/web/api/exporters/shell/allmetrics_shell.h b/src/web/api/exporters/shell/allmetrics_shell.h deleted file mode 100644 index d6598e08d..000000000 --- a/src/web/api/exporters/shell/allmetrics_shell.h +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef NETDATA_API_ALLMETRICS_SHELL_H -#define NETDATA_API_ALLMETRICS_SHELL_H - -#include "../allmetrics.h" - -#define ALLMETRICS_FORMAT_SHELL "shell" -#define ALLMETRICS_FORMAT_PROMETHEUS "prometheus" -#define ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS "prometheus_all_hosts" -#define ALLMETRICS_FORMAT_JSON "json" - -#define ALLMETRICS_SHELL 1 -#define ALLMETRICS_PROMETHEUS 2 -#define ALLMETRICS_JSON 3 -#define ALLMETRICS_PROMETHEUS_ALL_HOSTS 4 - -void rrd_stats_api_v1_charts_allmetrics_json(RRDHOST *host, const char *filter_string, BUFFER *wb); -void rrd_stats_api_v1_charts_allmetrics_shell(RRDHOST *host, const char *filter_string, BUFFER *wb); - -#endif //NETDATA_API_ALLMETRICS_SHELL_H diff --git a/src/web/api/formatters/README.md b/src/web/api/formatters/README.md index 6347f5fb4..27d80d403 100644 --- a/src/web/api/formatters/README.md +++ b/src/web/api/formatters/README.md @@ -1,12 +1,3 @@ - - # Query formatting API data queries need to be formatted before returned to the caller. diff --git a/src/web/api/formatters/charts2json.c b/src/web/api/formatters/charts2json.c index 0b45d77c4..9407f224b 100644 --- a/src/web/api/formatters/charts2json.c +++ b/src/web/api/formatters/charts2json.c @@ -37,7 +37,7 @@ const char* get_release_channel() { } void charts2json(RRDHOST *host, BUFFER *wb) { - static char *custom_dashboard_info_js_filename = NULL; + static const char *custom_dashboard_info_js_filename = NULL; size_t c = 0, dimensions = 0, memory = 0, alarms = 0; RRDSET *st; diff --git a/src/web/api/formatters/csv/README.md b/src/web/api/formatters/csv/README.md index e60aab57b..435d23808 100644 --- a/src/web/api/formatters/csv/README.md +++ b/src/web/api/formatters/csv/README.md @@ -1,12 +1,3 @@ - - # CSV formatter The CSV formatter presents [results of database queries](/src/web/api/queries/README.md) in the following formats: diff --git a/src/web/api/formatters/json/README.md b/src/web/api/formatters/json/README.md index 4137b0372..b1d025559 100644 --- a/src/web/api/formatters/json/README.md +++ b/src/web/api/formatters/json/README.md @@ -1,12 +1,3 @@ - - # JSON formatter The CSV formatter presents [results of database queries](/src/web/api/queries/README.md) in the following formats: diff --git a/src/web/api/formatters/rrd2json.c b/src/web/api/formatters/rrd2json.c index 81c9ad5c7..a80275487 100644 --- a/src/web/api/formatters/rrd2json.c +++ b/src/web/api/formatters/rrd2json.c @@ -10,46 +10,6 @@ void rrd_stats_api_v1_chart(RRDSET *st, BUFFER *wb) buffer_json_finalize(wb); } -const char *rrdr_format_to_string(DATASOURCE_FORMAT format) { - switch(format) { - case DATASOURCE_JSON: - return DATASOURCE_FORMAT_JSON; - - case DATASOURCE_JSON2: - return DATASOURCE_FORMAT_JSON2; - - case DATASOURCE_DATATABLE_JSON: - return DATASOURCE_FORMAT_DATATABLE_JSON; - - case DATASOURCE_DATATABLE_JSONP: - return DATASOURCE_FORMAT_DATATABLE_JSONP; - - case DATASOURCE_JSONP: - return DATASOURCE_FORMAT_JSONP; - - case DATASOURCE_SSV: - return DATASOURCE_FORMAT_SSV; - - case DATASOURCE_CSV: - return DATASOURCE_FORMAT_CSV; - - case DATASOURCE_TSV: - return DATASOURCE_FORMAT_TSV; - - case DATASOURCE_HTML: - return DATASOURCE_FORMAT_HTML; - - case DATASOURCE_JS_ARRAY: - return DATASOURCE_FORMAT_JS_ARRAY; - - case DATASOURCE_SSV_COMMA: - return DATASOURCE_FORMAT_SSV_COMMA; - - default: - return "unknown"; - } -} - int rrdset2value_api_v1( RRDSET *st , BUFFER *wb diff --git a/src/web/api/formatters/rrd2json.h b/src/web/api/formatters/rrd2json.h index f0c0c39ba..cf3492ff2 100644 --- a/src/web/api/formatters/rrd2json.h +++ b/src/web/api/formatters/rrd2json.h @@ -3,26 +3,8 @@ #ifndef NETDATA_RRD2JSON_H #define NETDATA_RRD2JSON_H 1 -// type of JSON generations -typedef enum { - DATASOURCE_JSON = 0, - DATASOURCE_DATATABLE_JSON = 1, - DATASOURCE_DATATABLE_JSONP = 2, - DATASOURCE_SSV = 3, - DATASOURCE_CSV = 4, - DATASOURCE_JSONP = 5, - DATASOURCE_TSV = 6, - DATASOURCE_HTML = 7, - DATASOURCE_JS_ARRAY = 8, - DATASOURCE_SSV_COMMA = 9, - DATASOURCE_CSV_JSON_ARRAY = 10, - DATASOURCE_CSV_MARKDOWN = 11, - DATASOURCE_JSON2 = 12, -} DATASOURCE_FORMAT; +#include "web/api/web_api.h" -#include "web/api/web_api_v1.h" - -#include "web/api/exporters/allmetrics.h" #include "web/api/queries/rrdr.h" #include "web/api/formatters/csv/csv.h" @@ -38,22 +20,7 @@ typedef enum { #define HOSTNAME_MAX 1024 -#define DATASOURCE_FORMAT_JSON "json" -#define DATASOURCE_FORMAT_JSON2 "json2" -#define DATASOURCE_FORMAT_DATATABLE_JSON "datatable" -#define DATASOURCE_FORMAT_DATATABLE_JSONP "datasource" -#define DATASOURCE_FORMAT_JSONP "jsonp" -#define DATASOURCE_FORMAT_SSV "ssv" -#define DATASOURCE_FORMAT_CSV "csv" -#define DATASOURCE_FORMAT_TSV "tsv" -#define DATASOURCE_FORMAT_HTML "html" -#define DATASOURCE_FORMAT_JS_ARRAY "array" -#define DATASOURCE_FORMAT_SSV_COMMA "ssvcomma" -#define DATASOURCE_FORMAT_CSV_JSON_ARRAY "csvjsonarray" -#define DATASOURCE_FORMAT_CSV_MARKDOWN "markdown" - void rrd_stats_api_v1_chart(RRDSET *st, BUFFER *wb); -const char *rrdr_format_to_string(DATASOURCE_FORMAT format); int data_query_execute(ONEWAYALLOC *owa, BUFFER *wb, struct query_target *qt, time_t *latest_timestamp); diff --git a/src/web/api/formatters/ssv/README.md b/src/web/api/formatters/ssv/README.md index b32494014..4d07fe5b7 100644 --- a/src/web/api/formatters/ssv/README.md +++ b/src/web/api/formatters/ssv/README.md @@ -1,12 +1,3 @@ - - # SSV formatter The SSV formatter sums all dimensions in [results of database queries](/src/web/api/queries/README.md) diff --git a/src/web/api/formatters/value/README.md b/src/web/api/formatters/value/README.md index 8a2df23c6..1f0af813d 100644 --- a/src/web/api/formatters/value/README.md +++ b/src/web/api/formatters/value/README.md @@ -1,12 +1,3 @@ - - # Value formatter The Value formatter presents [results of database queries](/src/web/api/queries/README.md) as a single value. diff --git a/src/web/api/functions/function-bearer_get_token.c b/src/web/api/functions/function-bearer_get_token.c new file mode 100644 index 000000000..8f14e68ae --- /dev/null +++ b/src/web/api/functions/function-bearer_get_token.c @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "function-bearer_get_token.h" +#include "../v2/api_v2_calls.h" + +struct bearer_token_request { + nd_uuid_t claim_id; + nd_uuid_t machine_guid; + nd_uuid_t node_id; + HTTP_USER_ROLE user_role; + HTTP_ACCESS access; + nd_uuid_t cloud_account_id; + STRING *client_name; +}; + +static bool bearer_parse_json_payload(json_object *jobj, const char *path, void *data, BUFFER *error) { + struct bearer_token_request *rq = data; + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, path, "claim_id", rq->claim_id, error, true); + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, path, "machine_guid", rq->machine_guid, error, true); + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, path, "node_id", rq->node_id, error, true); + JSONC_PARSE_TXT2ENUM_OR_ERROR_AND_RETURN(jobj, path, "user_role", http_user_role2id, rq->user_role, error, true); + JSONC_PARSE_ARRAY_OF_TXT2BITMAP_OR_ERROR_AND_RETURN(jobj, path, "access", http_access2id_one, rq->access, error, true); + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, path, "cloud_account_id", rq->cloud_account_id, error, true); + JSONC_PARSE_TXT2STRING_OR_ERROR_AND_RETURN(jobj, path, "client_name", rq->client_name, error, true); + return true; +} + +int function_bearer_get_token(BUFFER *wb, const char *function __maybe_unused, BUFFER *payload, const char *source) { + if(!request_source_is_cloud(source)) + return rrd_call_function_error( + wb, "Bearer tokens can only be provided via NC.", HTTP_RESP_BAD_REQUEST); + + int code; + struct bearer_token_request rq = { 0 }; + CLEAN_JSON_OBJECT *jobj = json_parse_function_payload_or_error(wb, payload, &code, bearer_parse_json_payload, &rq); + if(!jobj || code != HTTP_RESP_OK) { + string_freez(rq.client_name); + return code; + } + + char claim_id[UUID_STR_LEN]; + uuid_unparse_lower(rq.claim_id, claim_id); + + char machine_guid[UUID_STR_LEN]; + uuid_unparse_lower(rq.machine_guid, machine_guid); + + char node_id[UUID_STR_LEN]; + uuid_unparse_lower(rq.node_id, node_id); + + int rc = bearer_get_token_json_response(wb, localhost, claim_id, machine_guid, node_id, + rq.user_role, rq.access, rq.cloud_account_id, + string2str(rq.client_name)); + + string_freez(rq.client_name); + return rc; +} + +int call_function_bearer_get_token(RRDHOST *host, struct web_client *w, const char *claim_id, const char *machine_guid, const char *node_id) { + CLEAN_BUFFER *payload = buffer_create(0, NULL); + buffer_json_initialize(payload, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_MINIFY); + buffer_json_member_add_string(payload, "claim_id", claim_id); + buffer_json_member_add_string(payload, "machine_guid", machine_guid); + buffer_json_member_add_string(payload, "node_id", node_id); + buffer_json_member_add_string(payload, "user_role", http_id2user_role(w->user_role)); + http_access2buffer_json_array(payload, "access", w->access); + buffer_json_member_add_uuid(payload, "cloud_account_id", w->auth.cloud_account_id); + buffer_json_member_add_string(payload, "client_name", w->auth.client_name); + buffer_json_finalize(payload); + + CLEAN_BUFFER *source = buffer_create(0, NULL); + web_client_api_request_vX_source_to_buffer(w, source); + + char transaction_str[UUID_COMPACT_STR_LEN]; + uuid_unparse_lower_compact(w->transaction, transaction_str); + return rrd_function_run(host, w->response.data, 10, + w->access, RRDFUNCTIONS_BEARER_GET_TOKEN, true, + transaction_str, NULL, NULL, + NULL, NULL, + NULL, NULL, + payload, buffer_tostring(source), true); +} diff --git a/src/web/api/functions/function-bearer_get_token.h b/src/web/api/functions/function-bearer_get_token.h new file mode 100644 index 000000000..03481ebb8 --- /dev/null +++ b/src/web/api/functions/function-bearer_get_token.h @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_FUNCTION_BEARER_GET_TOKEN_H +#define NETDATA_FUNCTION_BEARER_GET_TOKEN_H + +#include "daemon/common.h" + +int function_bearer_get_token(BUFFER *wb, const char *function, BUFFER *payload, const char *source); +int call_function_bearer_get_token(RRDHOST *host, struct web_client *w, const char *claim_id, const char *machine_guid, const char *node_id); + +#define RRDFUNCTIONS_BEARER_GET_TOKEN "bearer_get_token" +#define RRDFUNCTIONS_BEARER_GET_TOKEN_HELP "Get a bearer token for authenticated direct access to the agent" + +#endif //NETDATA_FUNCTION_BEARER_GET_TOKEN_H diff --git a/src/web/api/functions/function-progress.c b/src/web/api/functions/function-progress.c new file mode 100644 index 000000000..052a9020a --- /dev/null +++ b/src/web/api/functions/function-progress.c @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "function-progress.h" + +int function_progress(BUFFER *wb, const char *function __maybe_unused, BUFFER *payload __maybe_unused, const char *source __maybe_unused) { + return progress_function_result(wb, rrdhost_hostname(localhost)); +} + diff --git a/src/web/api/functions/function-progress.h b/src/web/api/functions/function-progress.h new file mode 100644 index 000000000..7d2d10b9d --- /dev/null +++ b/src/web/api/functions/function-progress.h @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_FUNCTION_PROGRESS_H +#define NETDATA_FUNCTION_PROGRESS_H + +#include "daemon/common.h" + +int function_progress(BUFFER *wb, const char *function, BUFFER *payload, const char *source); + +#endif //NETDATA_FUNCTION_PROGRESS_H diff --git a/src/web/api/functions/function-streaming.c b/src/web/api/functions/function-streaming.c new file mode 100644 index 000000000..11e970441 --- /dev/null +++ b/src/web/api/functions/function-streaming.c @@ -0,0 +1,627 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "function-streaming.h" + +int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *payload __maybe_unused, const char *source __maybe_unused) { + + time_t now = now_realtime_sec(); + + buffer_flush(wb); + wb->content_type = CT_APPLICATION_JSON; + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); + + buffer_json_member_add_string(wb, "hostname", rrdhost_hostname(localhost)); + buffer_json_member_add_uint64(wb, "status", HTTP_RESP_OK); + buffer_json_member_add_string(wb, "type", "table"); + buffer_json_member_add_time_t(wb, "update_every", 1); + buffer_json_member_add_boolean(wb, "has_history", false); + buffer_json_member_add_string(wb, "help", RRDFUNCTIONS_STREAMING_HELP); + buffer_json_member_add_array(wb, "data"); + + size_t max_sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_MAX] = { 0 }; + size_t max_db_metrics = 0, max_db_instances = 0, max_db_contexts = 0; + size_t max_collection_replication_instances = 0, max_streaming_replication_instances = 0; + size_t max_ml_anomalous = 0, max_ml_normal = 0, max_ml_trained = 0, max_ml_pending = 0, max_ml_silenced = 0; + { + RRDHOST *host; + dfe_start_read(rrdhost_root_index, host) { + RRDHOST_STATUS s; + rrdhost_status(host, now, &s); + buffer_json_add_array_item_array(wb); + + if(s.db.metrics > max_db_metrics) + max_db_metrics = s.db.metrics; + + if(s.db.instances > max_db_instances) + max_db_instances = s.db.instances; + + if(s.db.contexts > max_db_contexts) + max_db_contexts = s.db.contexts; + + if(s.ingest.replication.instances > max_collection_replication_instances) + max_collection_replication_instances = s.ingest.replication.instances; + + if(s.stream.replication.instances > max_streaming_replication_instances) + max_streaming_replication_instances = s.stream.replication.instances; + + for(int i = 0; i < STREAM_TRAFFIC_TYPE_MAX ;i++) { + if (s.stream.sent_bytes_on_this_connection_per_type[i] > + max_sent_bytes_on_this_connection_per_type[i]) + max_sent_bytes_on_this_connection_per_type[i] = + s.stream.sent_bytes_on_this_connection_per_type[i]; + } + + // retention + buffer_json_add_array_item_string(wb, rrdhost_hostname(s.host)); // Node + buffer_json_add_array_item_uint64(wb, s.db.first_time_s * MSEC_PER_SEC); // dbFrom + buffer_json_add_array_item_uint64(wb, s.db.last_time_s * MSEC_PER_SEC); // dbTo + + if(s.db.first_time_s && s.db.last_time_s && s.db.last_time_s > s.db.first_time_s) + buffer_json_add_array_item_uint64(wb, s.db.last_time_s - s.db.first_time_s); // dbDuration + else + buffer_json_add_array_item_string(wb, NULL); // dbDuration + + buffer_json_add_array_item_uint64(wb, s.db.metrics); // dbMetrics + buffer_json_add_array_item_uint64(wb, s.db.instances); // dbInstances + buffer_json_add_array_item_uint64(wb, s.db.contexts); // dbContexts + + // statuses + buffer_json_add_array_item_string(wb, rrdhost_ingest_status_to_string(s.ingest.status)); // InStatus + buffer_json_add_array_item_string(wb, rrdhost_streaming_status_to_string(s.stream.status)); // OutStatus + buffer_json_add_array_item_string(wb, rrdhost_ml_status_to_string(s.ml.status)); // MLStatus + + // collection + if(s.ingest.since) { + buffer_json_add_array_item_uint64(wb, s.ingest.since * MSEC_PER_SEC); // InSince + buffer_json_add_array_item_time_t(wb, s.now - s.ingest.since); // InAge + } + else { + buffer_json_add_array_item_string(wb, NULL); // InSince + buffer_json_add_array_item_string(wb, NULL); // InAge + } + buffer_json_add_array_item_string(wb, stream_handshake_error_to_string(s.ingest.reason)); // InReason + buffer_json_add_array_item_uint64(wb, s.ingest.hops); // InHops + buffer_json_add_array_item_double(wb, s.ingest.replication.completion); // InReplCompletion + buffer_json_add_array_item_uint64(wb, s.ingest.replication.instances); // InReplInstances + buffer_json_add_array_item_string(wb, s.ingest.peers.local.ip); // InLocalIP + buffer_json_add_array_item_uint64(wb, s.ingest.peers.local.port); // InLocalPort + buffer_json_add_array_item_string(wb, s.ingest.peers.peer.ip); // InRemoteIP + buffer_json_add_array_item_uint64(wb, s.ingest.peers.peer.port); // InRemotePort + buffer_json_add_array_item_string(wb, s.ingest.ssl ? "SSL" : "PLAIN"); // InSSL + stream_capabilities_to_json_array(wb, s.ingest.capabilities, NULL); // InCapabilities + + // streaming + if(s.stream.since) { + buffer_json_add_array_item_uint64(wb, s.stream.since * MSEC_PER_SEC); // OutSince + buffer_json_add_array_item_time_t(wb, s.now - s.stream.since); // OutAge + } + else { + buffer_json_add_array_item_string(wb, NULL); // OutSince + buffer_json_add_array_item_string(wb, NULL); // OutAge + } + buffer_json_add_array_item_string(wb, stream_handshake_error_to_string(s.stream.reason)); // OutReason + buffer_json_add_array_item_uint64(wb, s.stream.hops); // OutHops + buffer_json_add_array_item_double(wb, s.stream.replication.completion); // OutReplCompletion + buffer_json_add_array_item_uint64(wb, s.stream.replication.instances); // OutReplInstances + buffer_json_add_array_item_string(wb, s.stream.peers.local.ip); // OutLocalIP + buffer_json_add_array_item_uint64(wb, s.stream.peers.local.port); // OutLocalPort + buffer_json_add_array_item_string(wb, s.stream.peers.peer.ip); // OutRemoteIP + buffer_json_add_array_item_uint64(wb, s.stream.peers.peer.port); // OutRemotePort + buffer_json_add_array_item_string(wb, s.stream.ssl ? "SSL" : "PLAIN"); // OutSSL + buffer_json_add_array_item_string(wb, s.stream.compression ? "COMPRESSED" : "UNCOMPRESSED"); // OutCompression + stream_capabilities_to_json_array(wb, s.stream.capabilities, NULL); // OutCapabilities + buffer_json_add_array_item_uint64(wb, s.stream.sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_DATA]); + buffer_json_add_array_item_uint64(wb, s.stream.sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_METADATA]); + buffer_json_add_array_item_uint64(wb, s.stream.sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_REPLICATION]); + buffer_json_add_array_item_uint64(wb, s.stream.sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_FUNCTIONS]); + + buffer_json_add_array_item_array(wb); // OutAttemptHandshake + time_t last_attempt = 0; + for(struct rrdpush_destinations *d = host->destinations; d ; d = d->next) { + if(d->since > last_attempt) + last_attempt = d->since; + + buffer_json_add_array_item_string(wb, stream_handshake_error_to_string(d->reason)); + } + buffer_json_array_close(wb); // // OutAttemptHandshake + + if(!last_attempt) { + buffer_json_add_array_item_string(wb, NULL); // OutAttemptSince + buffer_json_add_array_item_string(wb, NULL); // OutAttemptAge + } + else { + buffer_json_add_array_item_uint64(wb, last_attempt * 1000); // OutAttemptSince + buffer_json_add_array_item_time_t(wb, s.now - last_attempt); // OutAttemptAge + } + + // ML + if(s.ml.status == RRDHOST_ML_STATUS_RUNNING) { + buffer_json_add_array_item_uint64(wb, s.ml.metrics.anomalous); // MlAnomalous + buffer_json_add_array_item_uint64(wb, s.ml.metrics.normal); // MlNormal + buffer_json_add_array_item_uint64(wb, s.ml.metrics.trained); // MlTrained + buffer_json_add_array_item_uint64(wb, s.ml.metrics.pending); // MlPending + buffer_json_add_array_item_uint64(wb, s.ml.metrics.silenced); // MlSilenced + + if(s.ml.metrics.anomalous > max_ml_anomalous) + max_ml_anomalous = s.ml.metrics.anomalous; + + if(s.ml.metrics.normal > max_ml_normal) + max_ml_normal = s.ml.metrics.normal; + + if(s.ml.metrics.trained > max_ml_trained) + max_ml_trained = s.ml.metrics.trained; + + if(s.ml.metrics.pending > max_ml_pending) + max_ml_pending = s.ml.metrics.pending; + + if(s.ml.metrics.silenced > max_ml_silenced) + max_ml_silenced = s.ml.metrics.silenced; + + } + else { + buffer_json_add_array_item_string(wb, NULL); // MlAnomalous + buffer_json_add_array_item_string(wb, NULL); // MlNormal + buffer_json_add_array_item_string(wb, NULL); // MlTrained + buffer_json_add_array_item_string(wb, NULL); // MlPending + buffer_json_add_array_item_string(wb, NULL); // MlSilenced + } + + // close + buffer_json_array_close(wb); + } + dfe_done(host); + } + buffer_json_array_close(wb); // data + buffer_json_member_add_object(wb, "columns"); + { + size_t field_id = 0; + + // Node + buffer_rrdf_table_add_field(wb, field_id++, "Node", "Node's Hostname", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY, + NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "dbFrom", "DB Data Retention From", + RRDF_FIELD_TYPE_TIMESTAMP, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DATETIME_MS, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "dbTo", "DB Data Retention To", + RRDF_FIELD_TYPE_TIMESTAMP, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DATETIME_MS, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MAX, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "dbDuration", "DB Data Retention Duration", + RRDF_FIELD_TYPE_DURATION, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DURATION_S, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MAX, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "dbMetrics", "Time-series Metrics in the DB", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, (double)max_db_metrics, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "dbInstances", "Instances in the DB", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, (double)max_db_instances, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "dbContexts", "Contexts in the DB", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, (double)max_db_contexts, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + // --- statuses --- + + buffer_rrdf_table_add_field(wb, field_id++, "InStatus", "Data Collection Online Status", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + + buffer_rrdf_table_add_field(wb, field_id++, "OutStatus", "Streaming Online Status", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "MlStatus", "ML Status", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + // --- collection --- + + buffer_rrdf_table_add_field(wb, field_id++, "InSince", "Last Data Collection Status Change", + RRDF_FIELD_TYPE_TIMESTAMP, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DATETIME_MS, + 0, NULL, NAN, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InAge", "Last Data Collection Online Status Change Age", + RRDF_FIELD_TYPE_DURATION, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DURATION_S, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MAX, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InReason", "Data Collection Online Status Reason", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InHops", "Data Collection Distance Hops from Origin Node", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InReplCompletion", "Inbound Replication Completion", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_BAR, RRDF_FIELD_TRANSFORM_NUMBER, + 1, "%", 100.0, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InReplInstances", "Inbound Replicating Instances", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "instances", (double)max_collection_replication_instances, RRDF_FIELD_SORT_DESCENDING, + NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InLocalIP", "Inbound Local IP", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InLocalPort", "Inbound Local Port", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InRemoteIP", "Inbound Remote IP", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InRemotePort", "Inbound Remote Port", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InSSL", "Inbound SSL Connection", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "InCapabilities", "Inbound Connection Capabilities", + RRDF_FIELD_TYPE_ARRAY, RRDF_FIELD_VISUAL_PILL, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + // --- streaming --- + + buffer_rrdf_table_add_field(wb, field_id++, "OutSince", "Last Streaming Status Change", + RRDF_FIELD_TYPE_TIMESTAMP, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DATETIME_MS, + 0, NULL, NAN, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_MAX, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutAge", "Last Streaming Status Change Age", + RRDF_FIELD_TYPE_DURATION, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DURATION_S, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutReason", "Streaming Status Reason", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutHops", "Streaming Distance Hops from Origin Node", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutReplCompletion", "Outbound Replication Completion", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_BAR, RRDF_FIELD_TRANSFORM_NUMBER, + 1, "%", 100.0, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutReplInstances", "Outbound Replicating Instances", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "instances", (double)max_streaming_replication_instances, RRDF_FIELD_SORT_DESCENDING, + NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutLocalIP", "Outbound Local IP", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutLocalPort", "Outbound Local Port", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutRemoteIP", "Outbound Remote IP", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutRemotePort", "Outbound Remote Port", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutSSL", "Outbound SSL Connection", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutCompression", "Outbound Compressed Connection", + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutCapabilities", "Outbound Connection Capabilities", + RRDF_FIELD_TYPE_ARRAY, RRDF_FIELD_VISUAL_PILL, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutTrafficData", "Outbound Metric Data Traffic", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "bytes", (double)max_sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_DATA], + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutTrafficMetadata", "Outbound Metric Metadata Traffic", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "bytes", + (double)max_sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_METADATA], + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutTrafficReplication", "Outbound Metric Replication Traffic", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "bytes", + (double)max_sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_REPLICATION], + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutTrafficFunctions", "Outbound Metric Functions Traffic", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "bytes", + (double)max_sent_bytes_on_this_connection_per_type[STREAM_TRAFFIC_TYPE_FUNCTIONS], + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutAttemptHandshake", + "Outbound Connection Attempt Handshake Status", + RRDF_FIELD_TYPE_ARRAY, RRDF_FIELD_VISUAL_PILL, RRDF_FIELD_TRANSFORM_NONE, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutAttemptSince", + "Last Outbound Connection Attempt Status Change Time", + RRDF_FIELD_TYPE_TIMESTAMP, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DATETIME_MS, + 0, NULL, NAN, RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_MAX, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "OutAttemptAge", + "Last Outbound Connection Attempt Status Change Age", + RRDF_FIELD_TYPE_DURATION, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DURATION_S, + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL, + RRDF_FIELD_SUMMARY_MIN, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_VISIBLE, NULL); + + // --- ML --- + + buffer_rrdf_table_add_field(wb, field_id++, "MlAnomalous", "Number of Anomalous Metrics", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "metrics", + (double)max_ml_anomalous, + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "MlNormal", "Number of Not Anomalous Metrics", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "metrics", + (double)max_ml_normal, + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "MlTrained", "Number of Trained Metrics", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "metrics", + (double)max_ml_trained, + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "MlPending", "Number of Pending Metrics", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "metrics", + (double)max_ml_pending, + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + + buffer_rrdf_table_add_field(wb, field_id++, "MlSilenced", "Number of Silenced Metrics", + RRDF_FIELD_TYPE_INTEGER, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, + 0, "metrics", + (double)max_ml_silenced, + RRDF_FIELD_SORT_DESCENDING, NULL, + RRDF_FIELD_SUMMARY_SUM, RRDF_FIELD_FILTER_RANGE, + RRDF_FIELD_OPTS_NONE, NULL); + } + buffer_json_object_close(wb); // columns + buffer_json_member_add_string(wb, "default_sort_column", "Node"); + buffer_json_member_add_object(wb, "charts"); + { + // Data Collection Age chart + buffer_json_member_add_object(wb, "InAge"); + { + buffer_json_member_add_string(wb, "name", "Data Collection Age"); + buffer_json_member_add_string(wb, "type", "stacked-bar"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "InAge"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + // Streaming Age chart + buffer_json_member_add_object(wb, "OutAge"); + { + buffer_json_member_add_string(wb, "name", "Streaming Age"); + buffer_json_member_add_string(wb, "type", "stacked-bar"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "OutAge"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + // DB Duration + buffer_json_member_add_object(wb, "dbDuration"); + { + buffer_json_member_add_string(wb, "name", "Retention Duration"); + buffer_json_member_add_string(wb, "type", "stacked-bar"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "dbDuration"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + } + buffer_json_object_close(wb); // charts + + buffer_json_member_add_array(wb, "default_charts"); + { + buffer_json_add_array_item_array(wb); + buffer_json_add_array_item_string(wb, "InAge"); + buffer_json_add_array_item_string(wb, "Node"); + buffer_json_array_close(wb); + + buffer_json_add_array_item_array(wb); + buffer_json_add_array_item_string(wb, "OutAge"); + buffer_json_add_array_item_string(wb, "Node"); + buffer_json_array_close(wb); + } + buffer_json_array_close(wb); + + buffer_json_member_add_object(wb, "group_by"); + { + buffer_json_member_add_object(wb, "Node"); + { + buffer_json_member_add_string(wb, "name", "Node"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "Node"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + buffer_json_member_add_object(wb, "InStatus"); + { + buffer_json_member_add_string(wb, "name", "Nodes by Collection Status"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "InStatus"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + buffer_json_member_add_object(wb, "OutStatus"); + { + buffer_json_member_add_string(wb, "name", "Nodes by Streaming Status"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "OutStatus"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + buffer_json_member_add_object(wb, "MlStatus"); + { + buffer_json_member_add_string(wb, "name", "Nodes by ML Status"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "MlStatus"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + buffer_json_member_add_object(wb, "InRemoteIP"); + { + buffer_json_member_add_string(wb, "name", "Nodes by Inbound IP"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "InRemoteIP"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + + buffer_json_member_add_object(wb, "OutRemoteIP"); + { + buffer_json_member_add_string(wb, "name", "Nodes by Outbound IP"); + buffer_json_member_add_array(wb, "columns"); + { + buffer_json_add_array_item_string(wb, "OutRemoteIP"); + } + buffer_json_array_close(wb); + } + buffer_json_object_close(wb); + } + buffer_json_object_close(wb); // group_by + + buffer_json_member_add_time_t(wb, "expires", now_realtime_sec() + 1); + buffer_json_finalize(wb); + + return HTTP_RESP_OK; +} diff --git a/src/web/api/functions/function-streaming.h b/src/web/api/functions/function-streaming.h new file mode 100644 index 000000000..06da6af9f --- /dev/null +++ b/src/web/api/functions/function-streaming.h @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_FUNCTION_STREAMING_H +#define NETDATA_FUNCTION_STREAMING_H + +#include "daemon/common.h" + +#define RRDFUNCTIONS_STREAMING_HELP "Streaming status for parents and children." + +int function_streaming(BUFFER *wb, const char *function, BUFFER *payload, const char *source); + +#endif //NETDATA_FUNCTION_STREAMING_H diff --git a/src/web/api/functions/functions.c b/src/web/api/functions/functions.c new file mode 100644 index 000000000..c00e04ca0 --- /dev/null +++ b/src/web/api/functions/functions.c @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "functions.h" + +void global_functions_add(void) { + // we register this only on localhost + // for the other nodes, the origin server should register it + rrd_function_add_inline( + localhost, + NULL, + "streaming", + 10, + RRDFUNCTIONS_PRIORITY_DEFAULT + 1, + RRDFUNCTIONS_VERSION_DEFAULT, + RRDFUNCTIONS_STREAMING_HELP, + "top", + HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_SENSITIVE_DATA, + function_streaming); + + rrd_function_add_inline( + localhost, + NULL, + "netdata-api-calls", + 10, + RRDFUNCTIONS_PRIORITY_DEFAULT + 2, + RRDFUNCTIONS_VERSION_DEFAULT, + RRDFUNCTIONS_PROGRESS_HELP, + "top", + HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_SENSITIVE_DATA, + function_progress); + + rrd_function_add_inline( + localhost, + NULL, + RRDFUNCTIONS_BEARER_GET_TOKEN, + 10, + RRDFUNCTIONS_PRIORITY_DEFAULT + 3, + RRDFUNCTIONS_VERSION_DEFAULT, + RRDFUNCTIONS_BEARER_GET_TOKEN_HELP, + RRDFUNCTIONS_TAG_HIDDEN, + HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_SENSITIVE_DATA, + function_bearer_get_token); +} diff --git a/src/web/api/functions/functions.h b/src/web/api/functions/functions.h new file mode 100644 index 000000000..28c483541 --- /dev/null +++ b/src/web/api/functions/functions.h @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_FUNCTIONS_H +#define NETDATA_FUNCTIONS_H + +#include "daemon/common.h" + +#include "function-streaming.h" +#include "function-progress.h" +#include "function-bearer_get_token.h" + +void global_functions_add(void); + +#endif //NETDATA_FUNCTIONS_H diff --git a/src/web/api/health/README.md b/src/web/api/health/README.md index 725b4a36f..a788e9b4d 100644 --- a/src/web/api/health/README.md +++ b/src/web/api/health/README.md @@ -1,13 +1,3 @@ - - # Health API Calls ## Health Read API @@ -33,7 +23,7 @@ The size of the alert log is configured in `netdata.conf`. There are 2 settings: ``` [health] in memory max health log entries = 1000 - health log history = 432000 + health log retention = 5d ``` The API call retrieves all entries of the alert log: diff --git a/src/web/api/http_auth.c b/src/web/api/http_auth.c index ec0520304..5c4fffcaf 100644 --- a/src/web/api/http_auth.c +++ b/src/web/api/http_auth.c @@ -2,83 +2,341 @@ #include "http_auth.h" -#define BEARER_TOKEN_EXPIRATION 86400 +#define BEARER_TOKEN_EXPIRATION (86400 * 1) -bool netdata_is_protected_by_bearer = false; // this is controlled by cloud, at the point the agent logs in - this should also be saved to /var/lib/netdata +bool netdata_is_protected_by_bearer = false; static DICTIONARY *netdata_authorized_bearers = NULL; struct bearer_token { nd_uuid_t cloud_account_id; - char cloud_user_name[CLOUD_USER_NAME_LENGTH]; + char client_name[CLOUD_CLIENT_NAME_LENGTH]; HTTP_ACCESS access; HTTP_USER_ROLE user_role; time_t created_s; time_t expires_s; }; -bool web_client_bearer_token_auth(struct web_client *w, const char *v) { - if(!uuid_parse_flexi(v, w->auth.bearer_token)) { - char uuid_str[UUID_COMPACT_STR_LEN]; - uuid_unparse_lower_compact(w->auth.bearer_token, uuid_str); +static void bearer_tokens_path(char out[FILENAME_MAX]) { + filename_from_path_entry(out, netdata_configured_varlib_dir, "bearer_tokens", NULL); +} - struct bearer_token *z = dictionary_get(netdata_authorized_bearers, uuid_str); - if (z && z->expires_s > now_monotonic_sec()) { - strncpyz(w->auth.client_name, z->cloud_user_name, sizeof(w->auth.client_name) - 1); - uuid_copy(w->auth.cloud_account_id, z->cloud_account_id); - web_client_set_permissions(w, z->access, z->user_role, WEB_CLIENT_FLAG_AUTH_BEARER); - return true; - } - } - else - nd_log(NDLS_DAEMON, NDLP_NOTICE, "Invalid bearer token '%s' received.", v); +static void bearer_token_filename(char out[FILENAME_MAX], nd_uuid_t uuid) { + char uuid_str[UUID_STR_LEN]; + uuid_unparse_lower(uuid, uuid_str); + + char path[FILENAME_MAX]; + bearer_tokens_path(path); + filename_from_path_entry(out, path, uuid_str, NULL); +} - return false; +static inline bool bearer_tokens_ensure_path_exists(void) { + char path[FILENAME_MAX]; + bearer_tokens_path(path); + return filename_is_dir(path, true); } -static void bearer_token_cleanup(void) { +static void bearer_token_delete_from_disk(nd_uuid_t *token) { + char filename[FILENAME_MAX]; + bearer_token_filename(filename, *token); + if(unlink(filename) != 0) + nd_log(NDLS_DAEMON, NDLP_ERR, "Failed to unlink() file '%s'", filename); +} + +static void bearer_token_cleanup(bool force) { static time_t attempts = 0; - if(++attempts % 1000 != 0) + if(++attempts % 1000 != 0 && !force) return; - time_t now_s = now_monotonic_sec(); + time_t now_s = now_realtime_sec(); struct bearer_token *z; dfe_start_read(netdata_authorized_bearers, z) { - if(z->expires_s < now_s) + if(z->expires_s < now_s) { + nd_uuid_t uuid; + if(uuid_parse_flexi(z_dfe.name, uuid) == 0) + bearer_token_delete_from_disk(&uuid); + dictionary_del(netdata_authorized_bearers, z_dfe.name); + } } dfe_done(z); dictionary_garbage_collect(netdata_authorized_bearers); } -void bearer_tokens_init(void) { - netdata_authorized_bearers = dictionary_create_advanced( - DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, - NULL, sizeof(struct bearer_token)); +static uint64_t bearer_token_signature(nd_uuid_t token, struct bearer_token *bt) { + // we use a custom structure to make sure that changes in the other code will not affect the signature + + struct { + nd_uuid_t host_uuid; + nd_uuid_t token; + nd_uuid_t cloud_account_id; + char client_name[CLOUD_CLIENT_NAME_LENGTH]; + HTTP_ACCESS access; + HTTP_USER_ROLE user_role; + time_t created_s; + time_t expires_s; + } signature_payload = { + .access = bt->access, + .user_role = bt->user_role, + .created_s = bt->created_s, + .expires_s = bt->expires_s, + }; + uuid_copy(signature_payload.host_uuid, localhost->host_id.uuid); + uuid_copy(signature_payload.token, token); + uuid_copy(signature_payload.cloud_account_id, bt->cloud_account_id); + memset(signature_payload.client_name, 0, sizeof(signature_payload.client_name)); + strncpyz(signature_payload.client_name, bt->client_name, sizeof(signature_payload.client_name) - 1); + + return XXH3_64bits(&signature_payload, sizeof(signature_payload)); } -time_t bearer_create_token(nd_uuid_t *uuid, struct web_client *w) { +static bool bearer_token_save_to_file(nd_uuid_t token, struct bearer_token *bt) { + CLEAN_BUFFER *wb = buffer_create(0, NULL); + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_MINIFY); + buffer_json_member_add_uint64(wb, "version", 1); + buffer_json_member_add_uuid(wb, "host_uuid", localhost->host_id.uuid); + buffer_json_member_add_uuid(wb, "token", token); + buffer_json_member_add_uuid(wb, "cloud_account_id", bt->cloud_account_id); + buffer_json_member_add_string(wb, "client_name", bt->client_name); + http_access2buffer_json_array(wb, "access", bt->access); + buffer_json_member_add_string(wb, "user_role", http_id2user_role(bt->user_role)); + buffer_json_member_add_uint64(wb, "created_s", bt->created_s); + buffer_json_member_add_uint64(wb, "expires_s", bt->expires_s); + buffer_json_member_add_uint64(wb, "signature", bearer_token_signature(token, bt)); + buffer_json_finalize(wb); + + char filename[FILENAME_MAX]; + bearer_token_filename(filename, token); + + FILE *fp = fopen(filename, "w"); + if(!fp) { + nd_log(NDLS_DAEMON, NDLP_ERR, "Cannot create file '%s'", filename); + return false; + } + + if(fwrite(buffer_tostring(wb), 1, buffer_strlen(wb), fp) != buffer_strlen(wb)) { + fclose(fp); + unlink(filename); + nd_log(NDLS_DAEMON, NDLP_ERR, "Cannot save file '%s'", filename); + return false; + } + + fclose(fp); + return true; +} + +static time_t bearer_create_token_internal(nd_uuid_t token, HTTP_USER_ROLE user_role, HTTP_ACCESS access, nd_uuid_t cloud_account_id, const char *client_name, time_t created_s, time_t expires_s, bool save) { char uuid_str[UUID_COMPACT_STR_LEN]; + uuid_unparse_lower_compact(token, uuid_str); + + struct bearer_token t = { 0 }, *bt; + const DICTIONARY_ITEM *item = dictionary_set_and_acquire_item(netdata_authorized_bearers, uuid_str, &t, sizeof(t)); + bt = dictionary_acquired_item_value(item); + + if(!bt->created_s) { + bt->created_s = created_s; + bt->expires_s = expires_s; + bt->user_role = user_role; + bt->access = access; + + uuid_copy(bt->cloud_account_id, cloud_account_id); + strncpyz(bt->client_name, client_name, sizeof(bt->cloud_account_id) - 1); + + if(save) + bearer_token_save_to_file(token, bt); + } + + time_t expiration = bt->expires_s; + + dictionary_acquired_item_release(netdata_authorized_bearers, item); + + return expiration; +} + +time_t bearer_create_token(nd_uuid_t *uuid, HTTP_USER_ROLE user_role, HTTP_ACCESS access, nd_uuid_t cloud_account_id, const char *client_name) { + time_t now_s = now_realtime_sec(); + time_t expires_s = 0; + + struct bearer_token *bt; + dfe_start_read(netdata_authorized_bearers, bt) { + if(bt->expires_s > now_s + 3600 * 2 && // expires in more than 2 hours + user_role == bt->user_role && // the user_role matches + access == bt->access && // the access matches + uuid_eq(cloud_account_id, bt->cloud_account_id) && // the cloud_account_id matches + strncmp(client_name, bt->client_name, sizeof(bt->client_name) - 1) == 0 && // the client_name matches + uuid_parse_flexi(bt_dfe.name, *uuid) == 0) // the token can be parsed + return expires_s; /* dfe will cleanup automatically */ + } + dfe_done(bt); uuid_generate_random(*uuid); - uuid_unparse_lower_compact(*uuid, uuid_str); - - struct bearer_token t = { 0 }, *z; - z = dictionary_set(netdata_authorized_bearers, uuid_str, &t, sizeof(t)); - if(!z->created_s) { - z->created_s = now_monotonic_sec(); - z->expires_s = z->created_s + BEARER_TOKEN_EXPIRATION; - z->user_role = w->user_role; - z->access = w->access; - uuid_copy(z->cloud_account_id, w->auth.cloud_account_id); - strncpyz(z->cloud_user_name, w->auth.client_name, sizeof(z->cloud_account_id) - 1); + expires_s = bearer_create_token_internal( + *uuid, user_role, access, cloud_account_id, client_name, + now_s, now_s + BEARER_TOKEN_EXPIRATION, true); + + bearer_token_cleanup(false); + + return expires_s; +} + +static bool bearer_token_parse_json(nd_uuid_t token, struct json_object *jobj, BUFFER *error) { + int64_t version; + nd_uuid_t token_in_file, cloud_account_id, host_uuid; + CLEAN_STRING *client_name = NULL; + HTTP_USER_ROLE user_role = HTTP_USER_ROLE_NONE; + HTTP_ACCESS access = HTTP_ACCESS_NONE; + time_t created_s = 0, expires_s = 0; + uint64_t signature = 0; + + JSONC_PARSE_INT64_OR_ERROR_AND_RETURN(jobj, ".", "version", version, error, true); + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, ".", "host_uuid", host_uuid, error, true); + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, ".", "token", token_in_file, error, true); + JSONC_PARSE_TXT2UUID_OR_ERROR_AND_RETURN(jobj, ".", "cloud_account_id", cloud_account_id, error, true); + JSONC_PARSE_TXT2STRING_OR_ERROR_AND_RETURN(jobj, ".", "client_name", client_name, error, true); + JSONC_PARSE_ARRAY_OF_TXT2BITMAP_OR_ERROR_AND_RETURN(jobj, ".", "access", http_access2id_one, access, error, true); + JSONC_PARSE_TXT2ENUM_OR_ERROR_AND_RETURN(jobj, ".", "user_role", http_user_role2id, user_role, error, true); + JSONC_PARSE_UINT64_OR_ERROR_AND_RETURN(jobj, ".", "created_s", created_s, error, true); + JSONC_PARSE_UINT64_OR_ERROR_AND_RETURN(jobj, ".", "expires_s", expires_s, error, true); + JSONC_PARSE_UINT64_OR_ERROR_AND_RETURN(jobj, ".", "signature", signature, error, true); + + if(uuid_compare(token, token_in_file) != 0) { + buffer_flush(error); + buffer_strcat(error, "token in JSON file does not match the filename"); + return false; + } + + if(uuid_compare(host_uuid, localhost->host_id.uuid) != 0) { + buffer_flush(error); + buffer_strcat(error, "Host UUID in JSON file does not match our host UUID"); + return false; + } + + if(!created_s || !expires_s || created_s >= expires_s) { + buffer_flush(error); + buffer_strcat(error, "bearer token has invalid dates"); + return false; + } + + struct bearer_token bt = { + .access = access, + .user_role = user_role, + .created_s = created_s, + .expires_s = expires_s, + }; + uuid_copy(bt.cloud_account_id, cloud_account_id); + strncpyz(bt.client_name, string2str(client_name), sizeof(bt.client_name) - 1); + + if(signature != bearer_token_signature(token_in_file, &bt)) { + buffer_flush(error); + buffer_strcat(error, "bearer token has invalid signature"); + return false; + } + + bearer_create_token_internal(token, user_role, access, + cloud_account_id, string2str(client_name), + created_s, expires_s, false); + + return true; +} + +static bool bearer_token_load_token(nd_uuid_t token) { + char filename[FILENAME_MAX]; + bearer_token_filename(filename, token); + + CLEAN_BUFFER *wb = buffer_create(0, NULL); + if(!read_txt_file_to_buffer(filename, wb, 1 * 1024 * 1024)) + return false; + + CLEAN_JSON_OBJECT *jobj = json_tokener_parse(buffer_tostring(wb)); + if (jobj == NULL) { + nd_log(NDLS_DAEMON, NDLP_ERR, "Cannot parse bearer token file '%s'", filename); + return false; + } + + CLEAN_BUFFER *error = buffer_create(0, NULL); + bool rc = bearer_token_parse_json(token, jobj, error); + if(!rc) { + nd_log(NDLS_DAEMON, NDLP_ERR, "Failed to parse bearer token file '%s': %s", filename, buffer_tostring(error)); + unlink(filename); + return false; + } + + bearer_token_cleanup(true); + + return true; +} + +static void bearer_tokens_load_from_disk(void) { + bearer_tokens_ensure_path_exists(); + + char path[FILENAME_MAX]; + bearer_tokens_path(path); + + DIR *dir = opendir(path); + if(!dir) { + nd_log(NDLS_DAEMON, NDLP_ERR, "Cannot open directory '%s' to read saved bearer tokens", path); + return; } - bearer_token_cleanup(); + struct dirent *de; + while((de = readdir(dir))) { + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) + continue; + + ND_UUID uuid = UUID_ZERO; + if(uuid_parse_flexi(de->d_name, uuid.uuid) != 0 || UUIDiszero(uuid)) + continue; + + char filename[FILENAME_MAX]; + filename_from_path_entry(filename, path, de->d_name, NULL); + + if(de->d_type == DT_REG || (de->d_type == DT_LNK && filename_is_file(filename))) + bearer_token_load_token(uuid.uuid); + } + + closedir(dir); +} + +bool web_client_bearer_token_auth(struct web_client *w, const char *v) { + bool rc = false; + + if(!uuid_parse_flexi(v, w->auth.bearer_token)) { + char uuid_str[UUID_COMPACT_STR_LEN]; + uuid_unparse_lower_compact(w->auth.bearer_token, uuid_str); + + const DICTIONARY_ITEM *item = dictionary_get_and_acquire_item(netdata_authorized_bearers, uuid_str); + if(!item && bearer_token_load_token(w->auth.bearer_token)) + item = dictionary_get_and_acquire_item(netdata_authorized_bearers, uuid_str); + + if(item) { + struct bearer_token *bt = dictionary_acquired_item_value(item); + if (bt->expires_s > now_realtime_sec()) { + strncpyz(w->auth.client_name, bt->client_name, sizeof(w->auth.client_name) - 1); + uuid_copy(w->auth.cloud_account_id, bt->cloud_account_id); + web_client_set_permissions(w, bt->access, bt->user_role, WEB_CLIENT_FLAG_AUTH_BEARER); + rc = true; + } + + dictionary_acquired_item_release(netdata_authorized_bearers, item); + } + } + else + nd_log(NDLS_DAEMON, NDLP_NOTICE, "Invalid bearer token '%s' received.", v); + + return rc; +} + +void bearer_tokens_init(void) { + netdata_is_protected_by_bearer = + config_get_boolean(CONFIG_SECTION_WEB, "bearer token protection", netdata_is_protected_by_bearer); + + netdata_authorized_bearers = dictionary_create_advanced( + DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, + NULL, sizeof(struct bearer_token)); - return now_realtime_sec() + BEARER_TOKEN_EXPIRATION; + bearer_tokens_load_from_disk(); } bool extract_bearer_token_from_request(struct web_client *w, char *dst, size_t dst_len) { diff --git a/src/web/api/http_auth.h b/src/web/api/http_auth.h index f339a44cf..0b01fdb1e 100644 --- a/src/web/api/http_auth.h +++ b/src/web/api/http_auth.h @@ -11,7 +11,7 @@ extern bool netdata_is_protected_by_bearer; bool extract_bearer_token_from_request(struct web_client *w, char *dst, size_t dst_len); -time_t bearer_create_token(nd_uuid_t *uuid, struct web_client *w); +time_t bearer_create_token(nd_uuid_t *uuid, HTTP_USER_ROLE user_role, HTTP_ACCESS access, nd_uuid_t cloud_account_id, const char *client_name); bool web_client_bearer_token_auth(struct web_client *w, const char *v); static inline bool http_access_user_has_enough_access_level_for_endpoint(HTTP_ACCESS user, HTTP_ACCESS endpoint) { diff --git a/src/web/api/ilove/README.md b/src/web/api/ilove/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/web/api/ilove/ilove.c b/src/web/api/ilove/ilove.c deleted file mode 100644 index 67489ec42..000000000 --- a/src/web/api/ilove/ilove.c +++ /dev/null @@ -1,306 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "ilove.h" - -static const unsigned short int ibm_plex_sans_bold_250[128][128] = { - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, - {5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* ! */, 5900 /* " */, 5900 /* # */, 5900 /* $ */, 5900 /* % */, 5900 /* & */, 5900 /* ' */, 5900 /* ( */, 5900 /* ) */, 5900 /* * */, 5900 /* + */, 5900 /* , */, 5900 /* - */, 5900 /* . */, 5900 /* / */, 5900 /* 0 */, 5900 /* 1 */, 5900 /* 2 */, 5900 /* 3 */, 5900 /* 4 */, 5900 /* 5 */, 5900 /* 6 */, 5900 /* 7 */, 5900 /* 8 */, 5900 /* 9 */, 5900 /* : */, 5900 /* ; */, 5900 /* < */, 5900 /* = */, 5900 /* > */, 5900 /* ? */, 5900 /* @ */, 5900 /* A */, 5900 /* B */, 5900 /* C */, 5900 /* D */, 5900 /* E */, 5900 /* F */, 5900 /* G */, 5900 /* H */, 5900 /* I */, 5900 /* J */, 5900 /* K */, 5900 /* L */, 5900 /* M */, 5900 /* N */, 5900 /* O */, 5900 /* P */, 5900 /* Q */, 5900 /* R */, 5900 /* S */, 5900 /* T */, 5900 /* U */, 5900 /* V */, 5900 /* W */, 5900 /* X */, 5900 /* Y */, 5900 /* Z */, 5900 /* [ */, 5900 /* \ */, 5900 /* ] */, 5900 /* ^ */, 5900 /* _ */, 5900 /* ` */, 5900 /* a */, 5900 /* b */, 5900 /* c */, 5900 /* d */, 5900 /* e */, 5900 /* f */, 5900 /* g */, 5900 /* h */, 5900 /* i */, 5900 /* j */, 5900 /* k */, 5900 /* l */, 5900 /* m */, 5900 /* n */, 5900 /* o */, 5900 /* p */, 5900 /* q */, 5900 /* r */, 5900 /* s */, 5900 /* t */, 5900 /* u */, 5900 /* v */, 5900 /* w */, 5900 /* x */, 5900 /* y */, 5900 /* z */, 5900 /* { */, 5900 /* | */, 5900 /* } */, 5900 /* ~ */}, - {8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* !! */, 8000 /* !" */, 8000 /* !# */, 8000 /* !$ */, 8000 /* !% */, 8000 /* !& */, 8000 /* !' */, 8000 /* !( */, 8000 /* !) */, 8000 /* !* */, 8000 /* !+ */, 8000 /* !, */, 8000 /* !- */, 8000 /* !. */, 8000 /* !/ */, 8000 /* !0 */, 8000 /* !1 */, 8000 /* !2 */, 8000 /* !3 */, 8000 /* !4 */, 8000 /* !5 */, 8000 /* !6 */, 8000 /* !7 */, 8000 /* !8 */, 8000 /* !9 */, 8000 /* !: */, 8000 /* !; */, 8000 /* !< */, 8000 /* != */, 8000 /* !> */, 8000 /* !? */, 8000 /* !@ */, 8000 /* !A */, 8000 /* !B */, 8000 /* !C */, 8000 /* !D */, 8000 /* !E */, 8000 /* !F */, 8000 /* !G */, 8000 /* !H */, 8000 /* !I */, 8000 /* !J */, 8000 /* !K */, 8000 /* !L */, 8000 /* !M */, 8000 /* !N */, 8000 /* !O */, 8000 /* !P */, 8000 /* !Q */, 8000 /* !R */, 8000 /* !S */, 8000 /* !T */, 8000 /* !U */, 8000 /* !V */, 8000 /* !W */, 8000 /* !X */, 8000 /* !Y */, 8000 /* !Z */, 8000 /* ![ */, 8000 /* !\ */, 8000 /* !] */, 8000 /* !^ */, 8000 /* !_ */, 8000 /* !` */, 8000 /* !a */, 8000 /* !b */, 8000 /* !c */, 8000 /* !d */, 8000 /* !e */, 8000 /* !f */, 8000 /* !g */, 8000 /* !h */, 8000 /* !i */, 8000 /* !j */, 8000 /* !k */, 8000 /* !l */, 8000 /* !m */, 8000 /* !n */, 8000 /* !o */, 8000 /* !p */, 8000 /* !q */, 8000 /* !r */, 8000 /* !s */, 8000 /* !t */, 8000 /* !u */, 8000 /* !v */, 8000 /* !w */, 8000 /* !x */, 8000 /* !y */, 8000 /* !z */, 8000 /* !{ */, 8000 /* !| */, 8000 /* !} */, 8000 /* !~ */}, - {12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* "! */, 12325 /* "" */, 12325 /* "# */, 12325 /* "$ */, 12325 /* "% */, 12325 /* "& */, 12325 /* "' */, 12325 /* "( */, 12325 /* ") */, 12325 /* "* */, 12325 /* "+ */, 10075 /* ", */, 12325 /* "- */, 10075 /* ". */, 12325 /* "/ */, 12325 /* "0 */, 12325 /* "1 */, 12325 /* "2 */, 12325 /* "3 */, 12325 /* "4 */, 12325 /* "5 */, 12325 /* "6 */, 12325 /* "7 */, 12325 /* "8 */, 12325 /* "9 */, 12325 /* ": */, 12325 /* "; */, 12325 /* "< */, 12325 /* "= */, 12325 /* "> */, 12325 /* "? */, 12325 /* "@ */, 11075 /* "A */, 12325 /* "B */, 12075 /* "C */, 12325 /* "D */, 12325 /* "E */, 12325 /* "F */, 12075 /* "G */, 12325 /* "H */, 12325 /* "I */, 11325 /* "J */, 12325 /* "K */, 12325 /* "L */, 12325 /* "M */, 12325 /* "N */, 12075 /* "O */, 12325 /* "P */, 12075 /* "Q */, 12325 /* "R */, 12325 /* "S */, 12700 /* "T */, 12325 /* "U */, 12575 /* "V */, 12700 /* "W */, 12325 /* "X */, 12450 /* "Y */, 12325 /* "Z */, 12325 /* "[ */, 12325 /* "\ */, 12325 /* "] */, 12325 /* "^ */, 12325 /* "_ */, 12325 /* "` */, 12325 /* "a */, 12325 /* "b */, 11825 /* "c */, 11825 /* "d */, 11825 /* "e */, 12325 /* "f */, 12325 /* "g */, 12325 /* "h */, 12325 /* "i */, 12325 /* "j */, 12325 /* "k */, 12325 /* "l */, 12325 /* "m */, 12325 /* "n */, 11825 /* "o */, 12325 /* "p */, 11825 /* "q */, 12325 /* "r */, 12325 /* "s */, 12325 /* "t */, 12325 /* "u */, 12950 /* "v */, 12825 /* "w */, 12325 /* "x */, 12825 /* "y */, 12450 /* "z */, 12325 /* "{ */, 12325 /* "| */, 12325 /* "} */, 12325 /* "~ */}, - {15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* #! */, 15800 /* #" */, 15800 /* ## */, 15800 /* #$ */, 15800 /* #% */, 15800 /* #& */, 15800 /* #' */, 15800 /* #( */, 15800 /* #) */, 15800 /* #* */, 15800 /* #+ */, 15800 /* #, */, 15800 /* #- */, 15800 /* #. */, 15800 /* #/ */, 15800 /* #0 */, 15800 /* #1 */, 15800 /* #2 */, 15800 /* #3 */, 15800 /* #4 */, 15800 /* #5 */, 15800 /* #6 */, 15800 /* #7 */, 15800 /* #8 */, 15800 /* #9 */, 15800 /* #: */, 15800 /* #; */, 15800 /* #< */, 15800 /* #= */, 15800 /* #> */, 15800 /* #? */, 15800 /* #@ */, 15800 /* #A */, 15800 /* #B */, 15800 /* #C */, 15800 /* #D */, 15800 /* #E */, 15800 /* #F */, 15800 /* #G */, 15800 /* #H */, 15800 /* #I */, 15800 /* #J */, 15800 /* #K */, 15800 /* #L */, 15800 /* #M */, 15800 /* #N */, 15800 /* #O */, 15800 /* #P */, 15800 /* #Q */, 15800 /* #R */, 15800 /* #S */, 15800 /* #T */, 15800 /* #U */, 15800 /* #V */, 15800 /* #W */, 15800 /* #X */, 15800 /* #Y */, 15800 /* #Z */, 15800 /* #[ */, 15800 /* #\ */, 15800 /* #] */, 15800 /* #^ */, 15800 /* #_ */, 15800 /* #` */, 15800 /* #a */, 15800 /* #b */, 15800 /* #c */, 15800 /* #d */, 15800 /* #e */, 15800 /* #f */, 15800 /* #g */, 15800 /* #h */, 15800 /* #i */, 15800 /* #j */, 15800 /* #k */, 15800 /* #l */, 15800 /* #m */, 15800 /* #n */, 15800 /* #o */, 15800 /* #p */, 15800 /* #q */, 15800 /* #r */, 15800 /* #s */, 15800 /* #t */, 15800 /* #u */, 15800 /* #v */, 15800 /* #w */, 15800 /* #x */, 15800 /* #y */, 15800 /* #z */, 15800 /* #{ */, 15800 /* #| */, 15800 /* #} */, 15800 /* #~ */}, - {15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $! */, 15025 /* $" */, 15025 /* $# */, 15025 /* $$ */, 15025 /* $% */, 15025 /* $& */, 15025 /* $' */, 15025 /* $( */, 15025 /* $) */, 15025 /* $* */, 15025 /* $+ */, 15025 /* $, */, 15025 /* $- */, 15025 /* $. */, 15025 /* $/ */, 15025 /* $0 */, 15025 /* $1 */, 15025 /* $2 */, 15025 /* $3 */, 15025 /* $4 */, 15025 /* $5 */, 15025 /* $6 */, 15025 /* $7 */, 15025 /* $8 */, 15025 /* $9 */, 15025 /* $: */, 15025 /* $; */, 15025 /* $< */, 15025 /* $= */, 15025 /* $> */, 15025 /* $? */, 15025 /* $@ */, 15025 /* $A */, 15025 /* $B */, 15025 /* $C */, 15025 /* $D */, 15025 /* $E */, 15025 /* $F */, 15025 /* $G */, 15025 /* $H */, 15025 /* $I */, 15025 /* $J */, 15025 /* $K */, 15025 /* $L */, 15025 /* $M */, 15025 /* $N */, 15025 /* $O */, 15025 /* $P */, 15025 /* $Q */, 15025 /* $R */, 15025 /* $S */, 15025 /* $T */, 15025 /* $U */, 15025 /* $V */, 15025 /* $W */, 15025 /* $X */, 15025 /* $Y */, 15025 /* $Z */, 15025 /* $[ */, 15025 /* $\ */, 15025 /* $] */, 15025 /* $^ */, 15025 /* $_ */, 15025 /* $` */, 15025 /* $a */, 15025 /* $b */, 15025 /* $c */, 15025 /* $d */, 15025 /* $e */, 15025 /* $f */, 15025 /* $g */, 15025 /* $h */, 15025 /* $i */, 15025 /* $j */, 15025 /* $k */, 15025 /* $l */, 15025 /* $m */, 15025 /* $n */, 15025 /* $o */, 15025 /* $p */, 15025 /* $q */, 15025 /* $r */, 15025 /* $s */, 15025 /* $t */, 15025 /* $u */, 15025 /* $v */, 15025 /* $w */, 15025 /* $x */, 15025 /* $y */, 15025 /* $z */, 15025 /* ${ */, 15025 /* $| */, 15025 /* $} */, 15025 /* $~ */}, - {24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* %! */, 22850 /* %" */, 24350 /* %# */, 24350 /* %$ */, 24350 /* %% */, 24350 /* %& */, 22850 /* %' */, 24350 /* %( */, 24350 /* %) */, 22850 /* %* */, 24350 /* %+ */, 24350 /* %, */, 24350 /* %- */, 24350 /* %. */, 24350 /* %/ */, 24350 /* %0 */, 24350 /* %1 */, 24350 /* %2 */, 24350 /* %3 */, 24350 /* %4 */, 24350 /* %5 */, 24350 /* %6 */, 24350 /* %7 */, 24350 /* %8 */, 24350 /* %9 */, 24350 /* %: */, 24350 /* %; */, 24350 /* %< */, 24350 /* %= */, 24350 /* %> */, 24350 /* %? */, 24350 /* %@ */, 24350 /* %A */, 24350 /* %B */, 24350 /* %C */, 24350 /* %D */, 24350 /* %E */, 24350 /* %F */, 24350 /* %G */, 24350 /* %H */, 24350 /* %I */, 24350 /* %J */, 24350 /* %K */, 24350 /* %L */, 24350 /* %M */, 24350 /* %N */, 24350 /* %O */, 24350 /* %P */, 24350 /* %Q */, 24350 /* %R */, 24350 /* %S */, 24350 /* %T */, 24350 /* %U */, 24350 /* %V */, 24350 /* %W */, 24350 /* %X */, 24350 /* %Y */, 24350 /* %Z */, 24350 /* %[ */, 24350 /* %\ */, 24350 /* %] */, 24350 /* %^ */, 24350 /* %_ */, 24350 /* %` */, 24350 /* %a */, 24350 /* %b */, 24350 /* %c */, 24350 /* %d */, 24350 /* %e */, 24350 /* %f */, 24350 /* %g */, 24350 /* %h */, 24350 /* %i */, 24350 /* %j */, 24350 /* %k */, 24350 /* %l */, 24350 /* %m */, 24350 /* %n */, 24350 /* %o */, 24350 /* %p */, 24350 /* %q */, 24350 /* %r */, 24350 /* %s */, 24350 /* %t */, 24350 /* %u */, 24350 /* %v */, 24350 /* %w */, 24350 /* %x */, 24350 /* %y */, 24350 /* %z */, 24350 /* %{ */, 24350 /* %| */, 24350 /* %} */, 24350 /* %~ */}, - {18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* &! */, 18025 /* &" */, 18025 /* &# */, 18025 /* &$ */, 18025 /* &% */, 18025 /* && */, 18025 /* &' */, 18025 /* &( */, 18025 /* &) */, 18025 /* &* */, 18025 /* &+ */, 18025 /* &, */, 18025 /* &- */, 18025 /* &. */, 18025 /* &/ */, 18025 /* &0 */, 18025 /* &1 */, 18025 /* &2 */, 18025 /* &3 */, 18025 /* &4 */, 18025 /* &5 */, 18025 /* &6 */, 18025 /* &7 */, 18025 /* &8 */, 18025 /* &9 */, 18025 /* &: */, 18025 /* &; */, 18025 /* &< */, 18025 /* &= */, 18025 /* &> */, 18025 /* &? */, 18025 /* &@ */, 18150 /* &A */, 18025 /* &B */, 18025 /* &C */, 18025 /* &D */, 18025 /* &E */, 18025 /* &F */, 18025 /* &G */, 18025 /* &H */, 18025 /* &I */, 18025 /* &J */, 18025 /* &K */, 18025 /* &L */, 18025 /* &M */, 18025 /* &N */, 18025 /* &O */, 18025 /* &P */, 18025 /* &Q */, 18025 /* &R */, 17900 /* &S */, 17025 /* &T */, 18025 /* &U */, 17150 /* &V */, 17525 /* &W */, 18025 /* &X */, 16525 /* &Y */, 17775 /* &Z */, 18025 /* &[ */, 18025 /* &\ */, 18025 /* &] */, 18025 /* &^ */, 18025 /* &_ */, 18025 /* &` */, 18275 /* &a */, 18025 /* &b */, 18275 /* &c */, 18275 /* &d */, 18275 /* &e */, 18025 /* &f */, 18025 /* &g */, 18025 /* &h */, 18025 /* &i */, 18025 /* &j */, 18025 /* &k */, 18025 /* &l */, 18025 /* &m */, 18025 /* &n */, 18275 /* &o */, 18025 /* &p */, 18275 /* &q */, 18025 /* &r */, 18025 /* &s */, 18025 /* &t */, 18025 /* &u */, 17775 /* &v */, 17775 /* &w */, 18025 /* &x */, 17775 /* &y */, 18025 /* &z */, 18025 /* &{ */, 18025 /* &| */, 18025 /* &} */, 18025 /* &~ */}, - {6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* '! */, 6700 /* '" */, 6700 /* '# */, 6700 /* '$ */, 6700 /* '% */, 6700 /* '& */, 6700 /* '' */, 6700 /* '( */, 6700 /* ') */, 6700 /* '* */, 6700 /* '+ */, 4450 /* ', */, 6700 /* '- */, 4450 /* '. */, 6700 /* '/ */, 6700 /* '0 */, 6700 /* '1 */, 6700 /* '2 */, 6700 /* '3 */, 6700 /* '4 */, 6700 /* '5 */, 6700 /* '6 */, 6700 /* '7 */, 6700 /* '8 */, 6700 /* '9 */, 6700 /* ': */, 6700 /* '; */, 6700 /* '< */, 6700 /* '= */, 6700 /* '> */, 6700 /* '? */, 6700 /* '@ */, 5450 /* 'A */, 6700 /* 'B */, 6450 /* 'C */, 6700 /* 'D */, 6700 /* 'E */, 6700 /* 'F */, 6450 /* 'G */, 6700 /* 'H */, 6700 /* 'I */, 5700 /* 'J */, 6700 /* 'K */, 6700 /* 'L */, 6700 /* 'M */, 6700 /* 'N */, 6450 /* 'O */, 6700 /* 'P */, 6450 /* 'Q */, 6700 /* 'R */, 6700 /* 'S */, 7075 /* 'T */, 6700 /* 'U */, 6950 /* 'V */, 7075 /* 'W */, 6700 /* 'X */, 6825 /* 'Y */, 6700 /* 'Z */, 6700 /* '[ */, 6700 /* '\ */, 6700 /* '] */, 6700 /* '^ */, 6700 /* '_ */, 6700 /* '` */, 6700 /* 'a */, 6700 /* 'b */, 6200 /* 'c */, 6200 /* 'd */, 6200 /* 'e */, 6700 /* 'f */, 6700 /* 'g */, 6700 /* 'h */, 6700 /* 'i */, 6700 /* 'j */, 6700 /* 'k */, 6700 /* 'l */, 6700 /* 'm */, 6700 /* 'n */, 6200 /* 'o */, 6700 /* 'p */, 6200 /* 'q */, 6700 /* 'r */, 6700 /* 's */, 6700 /* 't */, 6700 /* 'u */, 7325 /* 'v */, 7200 /* 'w */, 6700 /* 'x */, 7200 /* 'y */, 6825 /* 'z */, 6700 /* '{ */, 6700 /* '| */, 6700 /* '} */, 6700 /* '~ */}, - {8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* (! */, 8450 /* (" */, 8450 /* (# */, 8450 /* ($ */, 8450 /* (% */, 8450 /* (& */, 8450 /* (' */, 8450 /* (( */, 8450 /* () */, 8450 /* (* */, 8450 /* (+ */, 8450 /* (, */, 8450 /* (- */, 8450 /* (. */, 8450 /* (/ */, 8450 /* (0 */, 8450 /* (1 */, 8450 /* (2 */, 8450 /* (3 */, 8450 /* (4 */, 8450 /* (5 */, 8450 /* (6 */, 8450 /* (7 */, 8450 /* (8 */, 8450 /* (9 */, 8450 /* (: */, 8450 /* (; */, 8450 /* (< */, 8450 /* (= */, 8450 /* (> */, 8450 /* (? */, 8450 /* (@ */, 8450 /* (A */, 8450 /* (B */, 8450 /* (C */, 8450 /* (D */, 8450 /* (E */, 8450 /* (F */, 8450 /* (G */, 8450 /* (H */, 8450 /* (I */, 8450 /* (J */, 8450 /* (K */, 8450 /* (L */, 8450 /* (M */, 8450 /* (N */, 8450 /* (O */, 8450 /* (P */, 8450 /* (Q */, 8450 /* (R */, 8450 /* (S */, 8950 /* (T */, 8450 /* (U */, 8950 /* (V */, 8950 /* (W */, 8700 /* (X */, 8950 /* (Y */, 8450 /* (Z */, 8450 /* ([ */, 8450 /* (\ */, 8450 /* (] */, 8450 /* (^ */, 8450 /* (_ */, 8450 /* (` */, 8450 /* (a */, 8450 /* (b */, 8450 /* (c */, 8450 /* (d */, 8450 /* (e */, 8450 /* (f */, 8700 /* (g */, 8450 /* (h */, 8450 /* (i */, 10200 /* (j */, 8450 /* (k */, 8450 /* (l */, 8450 /* (m */, 8450 /* (n */, 8450 /* (o */, 8450 /* (p */, 8450 /* (q */, 8450 /* (r */, 8450 /* (s */, 8450 /* (t */, 8450 /* (u */, 8450 /* (v */, 8450 /* (w */, 8450 /* (x */, 8450 /* (y */, 8450 /* (z */, 8450 /* ({ */, 8450 /* (| */, 8450 /* (} */, 8450 /* (~ */}, - {8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* )! */, 8450 /* )" */, 8450 /* )# */, 8450 /* )$ */, 8450 /* )% */, 8450 /* )& */, 8450 /* )' */, 8450 /* )( */, 8450 /* )) */, 8450 /* )* */, 8450 /* )+ */, 8450 /* ), */, 8450 /* )- */, 8450 /* ). */, 8450 /* )/ */, 8450 /* )0 */, 8450 /* )1 */, 8450 /* )2 */, 8450 /* )3 */, 8450 /* )4 */, 8450 /* )5 */, 8450 /* )6 */, 8450 /* )7 */, 8450 /* )8 */, 8450 /* )9 */, 8450 /* ): */, 8450 /* ); */, 8450 /* )< */, 8450 /* )= */, 8450 /* )> */, 8450 /* )? */, 8450 /* )@ */, 8450 /* )A */, 8450 /* )B */, 8450 /* )C */, 8450 /* )D */, 8450 /* )E */, 8450 /* )F */, 8450 /* )G */, 8450 /* )H */, 8450 /* )I */, 8450 /* )J */, 8450 /* )K */, 8450 /* )L */, 8450 /* )M */, 8450 /* )N */, 8450 /* )O */, 8450 /* )P */, 8450 /* )Q */, 8450 /* )R */, 8450 /* )S */, 8450 /* )T */, 8450 /* )U */, 8450 /* )V */, 8450 /* )W */, 8450 /* )X */, 8450 /* )Y */, 8450 /* )Z */, 8450 /* )[ */, 8450 /* )\ */, 8450 /* )] */, 8450 /* )^ */, 8450 /* )_ */, 8450 /* )` */, 8450 /* )a */, 8450 /* )b */, 8450 /* )c */, 8450 /* )d */, 8450 /* )e */, 8450 /* )f */, 8450 /* )g */, 8450 /* )h */, 8450 /* )i */, 8450 /* )j */, 8450 /* )k */, 8450 /* )l */, 8450 /* )m */, 8450 /* )n */, 8450 /* )o */, 8450 /* )p */, 8450 /* )q */, 8450 /* )r */, 8450 /* )s */, 8450 /* )t */, 8450 /* )u */, 8450 /* )v */, 8450 /* )w */, 8450 /* )x */, 8450 /* )y */, 8450 /* )z */, 8450 /* ){ */, 8450 /* )| */, 8450 /* )} */, 8450 /* )~ */}, - {15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* *! */, 15025 /* *" */, 15025 /* *# */, 15025 /* *$ */, 15025 /* *% */, 15025 /* *& */, 15025 /* *' */, 15025 /* *( */, 15025 /* *) */, 15025 /* ** */, 15025 /* *+ */, 12775 /* *, */, 15025 /* *- */, 12775 /* *. */, 15025 /* *\/ */, 15025 /* *0 */, 15025 /* *1 */, 15025 /* *2 */, 15025 /* *3 */, 15025 /* *4 */, 15025 /* *5 */, 15025 /* *6 */, 15025 /* *7 */, 15025 /* *8 */, 15025 /* *9 */, 15025 /* *: */, 15025 /* *; */, 15025 /* *< */, 15025 /* *= */, 15025 /* *> */, 15025 /* *? */, 15025 /* *@ */, 13775 /* *A */, 15025 /* *B */, 14775 /* *C */, 15025 /* *D */, 15025 /* *E */, 15025 /* *F */, 14775 /* *G */, 15025 /* *H */, 15025 /* *I */, 14025 /* *J */, 15025 /* *K */, 15025 /* *L */, 15025 /* *M */, 15025 /* *N */, 14775 /* *O */, 15025 /* *P */, 14775 /* *Q */, 15025 /* *R */, 15025 /* *S */, 15400 /* *T */, 15025 /* *U */, 15275 /* *V */, 15400 /* *W */, 15025 /* *X */, 15150 /* *Y */, 15025 /* *Z */, 15025 /* *[ */, 15025 /* *\ */, 15025 /* *] */, 15025 /* *^ */, 15025 /* *_ */, 15025 /* *` */, 15025 /* *a */, 15025 /* *b */, 14525 /* *c */, 14525 /* *d */, 14525 /* *e */, 15025 /* *f */, 15025 /* *g */, 15025 /* *h */, 15025 /* *i */, 15025 /* *j */, 15025 /* *k */, 15025 /* *l */, 15025 /* *m */, 15025 /* *n */, 14525 /* *o */, 15025 /* *p */, 14525 /* *q */, 15025 /* *r */, 15025 /* *s */, 15025 /* *t */, 15025 /* *u */, 15650 /* *v */, 15525 /* *w */, 15025 /* *x */, 15525 /* *y */, 15150 /* *z */, 15025 /* *{ */, 15025 /* *| */, 15025 /* *} */, 15025 /* *~ */}, - {15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* +! */, 15000 /* +" */, 15000 /* +# */, 15000 /* +$ */, 15000 /* +% */, 15000 /* +& */, 15000 /* +' */, 15000 /* +( */, 15000 /* +) */, 15000 /* +* */, 15000 /* ++ */, 15000 /* +, */, 15000 /* +- */, 15000 /* +. */, 15000 /* +/ */, 15000 /* +0 */, 15000 /* +1 */, 15000 /* +2 */, 15000 /* +3 */, 15000 /* +4 */, 15000 /* +5 */, 15000 /* +6 */, 15000 /* +7 */, 15000 /* +8 */, 15000 /* +9 */, 15000 /* +: */, 15000 /* +; */, 15000 /* +< */, 15000 /* += */, 15000 /* +> */, 15000 /* +? */, 15000 /* +@ */, 15000 /* +A */, 15000 /* +B */, 15000 /* +C */, 15000 /* +D */, 15000 /* +E */, 15000 /* +F */, 15000 /* +G */, 15000 /* +H */, 15000 /* +I */, 15000 /* +J */, 15000 /* +K */, 15000 /* +L */, 15000 /* +M */, 15000 /* +N */, 15000 /* +O */, 15000 /* +P */, 15000 /* +Q */, 15000 /* +R */, 15000 /* +S */, 15000 /* +T */, 15000 /* +U */, 15000 /* +V */, 15000 /* +W */, 15000 /* +X */, 15000 /* +Y */, 15000 /* +Z */, 15000 /* +[ */, 15000 /* +\ */, 15000 /* +] */, 15000 /* +^ */, 15000 /* +_ */, 15000 /* +` */, 15000 /* +a */, 15000 /* +b */, 15000 /* +c */, 15000 /* +d */, 15000 /* +e */, 15000 /* +f */, 15000 /* +g */, 15000 /* +h */, 15000 /* +i */, 15000 /* +j */, 15000 /* +k */, 15000 /* +l */, 15000 /* +m */, 15000 /* +n */, 15000 /* +o */, 15000 /* +p */, 15000 /* +q */, 15000 /* +r */, 15000 /* +s */, 15000 /* +t */, 15000 /* +u */, 15000 /* +v */, 15000 /* +w */, 15000 /* +x */, 15000 /* +y */, 15000 /* +z */, 15000 /* +{ */, 15000 /* +| */, 15000 /* +} */, 15000 /* +~ */}, - {7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* ,! */, 5500 /* ," */, 7750 /* ,# */, 7750 /* ,$ */, 7750 /* ,% */, 7750 /* ,& */, 5500 /* ,' */, 7750 /* ,( */, 7750 /* ,) */, 5500 /* ,* */, 7750 /* ,+ */, 7750 /* ,, */, 7750 /* ,- */, 7750 /* ,. */, 7750 /* ,/ */, 7750 /* ,0 */, 7750 /* ,1 */, 7750 /* ,2 */, 7750 /* ,3 */, 7750 /* ,4 */, 7750 /* ,5 */, 7750 /* ,6 */, 7750 /* ,7 */, 7750 /* ,8 */, 7750 /* ,9 */, 7750 /* ,: */, 7750 /* ,; */, 7750 /* ,< */, 7750 /* ,= */, 7750 /* ,> */, 5750 /* ,? */, 7750 /* ,@ */, 8250 /* ,A */, 7750 /* ,B */, 6750 /* ,C */, 7750 /* ,D */, 7750 /* ,E */, 7750 /* ,F */, 6750 /* ,G */, 7750 /* ,H */, 7750 /* ,I */, 7750 /* ,J */, 7750 /* ,K */, 7750 /* ,L */, 7750 /* ,M */, 7750 /* ,N */, 6750 /* ,O */, 7750 /* ,P */, 6750 /* ,Q */, 7750 /* ,R */, 7750 /* ,S */, 6000 /* ,T */, 6875 /* ,U */, 6250 /* ,V */, 6750 /* ,W */, 8000 /* ,X */, 6000 /* ,Y */, 8500 /* ,Z */, 7750 /* ,[ */, 7750 /* ,\ */, 7750 /* ,] */, 7750 /* ,^ */, 7750 /* ,_ */, 7750 /* ,` */, 7875 /* ,a */, 7750 /* ,b */, 7375 /* ,c */, 7375 /* ,d */, 7375 /* ,e */, 7375 /* ,f */, 7750 /* ,g */, 7750 /* ,h */, 7750 /* ,i */, 7750 /* ,j */, 7750 /* ,k */, 7750 /* ,l */, 7750 /* ,m */, 7750 /* ,n */, 7375 /* ,o */, 7750 /* ,p */, 7375 /* ,q */, 7750 /* ,r */, 7750 /* ,s */, 7150 /* ,t */, 7550 /* ,u */, 6550 /* ,v */, 6750 /* ,w */, 7750 /* ,x */, 6625 /* ,y */, 8000 /* ,z */, 7750 /* ,{ */, 7750 /* ,| */, 7750 /* ,} */, 7750 /* ,~ */}, - {10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* -! */, 10075 /* -" */, 10075 /* -# */, 10075 /* -$ */, 10075 /* -% */, 10075 /* -& */, 10075 /* -' */, 10075 /* -( */, 10075 /* -) */, 10075 /* -* */, 10075 /* -+ */, 10075 /* -, */, 10075 /* -- */, 10075 /* -. */, 10075 /* -/ */, 10075 /* -0 */, 10075 /* -1 */, 10075 /* -2 */, 10075 /* -3 */, 10075 /* -4 */, 10075 /* -5 */, 10075 /* -6 */, 10075 /* -7 */, 10075 /* -8 */, 10075 /* -9 */, 10075 /* -: */, 10075 /* -; */, 10075 /* -< */, 10075 /* -= */, 10075 /* -> */, 10075 /* -? */, 10075 /* -@ */, 9700 /* -A */, 10075 /* -B */, 10450 /* -C */, 10075 /* -D */, 10075 /* -E */, 10075 /* -F */, 10450 /* -G */, 10075 /* -H */, 9325 /* -I */, 9450 /* -J */, 10075 /* -K */, 10075 /* -L */, 10075 /* -M */, 10075 /* -N */, 10450 /* -O */, 10075 /* -P */, 10450 /* -Q */, 10075 /* -R */, 9575 /* -S */, 8950 /* -T */, 10075 /* -U */, 9450 /* -V */, 9825 /* -W */, 9325 /* -X */, 8825 /* -Y */, 9325 /* -Z */, 10075 /* -[ */, 10075 /* -\ */, 10075 /* -] */, 10075 /* -^ */, 10075 /* -_ */, 10075 /* -` */, 10075 /* -a */, 10075 /* -b */, 10325 /* -c */, 10325 /* -d */, 10325 /* -e */, 10075 /* -f */, 10075 /* -g */, 10075 /* -h */, 10075 /* -i */, 10075 /* -j */, 10075 /* -k */, 10075 /* -l */, 10075 /* -m */, 10075 /* -n */, 10325 /* -o */, 10075 /* -p */, 10325 /* -q */, 10075 /* -r */, 10200 /* -s */, 10075 /* -t */, 10075 /* -u */, 9950 /* -v */, 9975 /* -w */, 9200 /* -x */, 9950 /* -y */, 9700 /* -z */, 10075 /* -{ */, 10075 /* -| */, 10075 /* -} */, 10075 /* -~ */}, - {7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* .! */, 5500 /* ." */, 7750 /* .# */, 7750 /* .$ */, 7750 /* .% */, 7750 /* .& */, 5500 /* .' */, 7750 /* .( */, 7750 /* .) */, 5500 /* .* */, 7750 /* .+ */, 7750 /* ., */, 7750 /* .- */, 7750 /* .. */, 7750 /* ./ */, 7750 /* .0 */, 7750 /* .1 */, 7750 /* .2 */, 7750 /* .3 */, 7750 /* .4 */, 7750 /* .5 */, 7750 /* .6 */, 7750 /* .7 */, 7750 /* .8 */, 7750 /* .9 */, 7750 /* .: */, 7750 /* .; */, 7750 /* .< */, 7750 /* .= */, 7750 /* .> */, 5750 /* .? */, 7750 /* .@ */, 8250 /* .A */, 7750 /* .B */, 6750 /* .C */, 7750 /* .D */, 7750 /* .E */, 7750 /* .F */, 6750 /* .G */, 7750 /* .H */, 7750 /* .I */, 7750 /* .J */, 7750 /* .K */, 7750 /* .L */, 7750 /* .M */, 7750 /* .N */, 6750 /* .O */, 7750 /* .P */, 6750 /* .Q */, 7750 /* .R */, 7750 /* .S */, 6000 /* .T */, 6875 /* .U */, 6250 /* .V */, 6750 /* .W */, 8000 /* .X */, 6000 /* .Y */, 8500 /* .Z */, 7750 /* .[ */, 7750 /* .\ */, 7750 /* .] */, 7750 /* .^ */, 7750 /* ._ */, 7750 /* .` */, 7875 /* .a */, 7750 /* .b */, 7375 /* .c */, 7375 /* .d */, 7375 /* .e */, 7375 /* .f */, 7750 /* .g */, 7750 /* .h */, 7750 /* .i */, 7750 /* .j */, 7750 /* .k */, 7750 /* .l */, 7750 /* .m */, 7750 /* .n */, 7375 /* .o */, 7750 /* .p */, 7375 /* .q */, 7750 /* .r */, 7750 /* .s */, 7150 /* .t */, 7550 /* .u */, 6550 /* .v */, 6750 /* .w */, 7750 /* .x */, 6625 /* .y */, 8000 /* .z */, 7750 /* .{ */, 7750 /* .| */, 7750 /* .} */, 7750 /* .~ */}, - {11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* /! */, 11500 /* /" */, 11500 /* /# */, 11500 /* /$ */, 11500 /* /% */, 11500 /* /& */, 11500 /* /' */, 11500 /* /( */, 11500 /* /) */, 11500 /* /\* */, 11500 /* /+ */, 11500 /* /, */, 11500 /* /- */, 11500 /* /. */, 6750 /* // */, 11500 /* /0 */, 11500 /* /1 */, 11500 /* /2 */, 11500 /* /3 */, 11500 /* /4 */, 11500 /* /5 */, 11500 /* /6 */, 11500 /* /7 */, 11500 /* /8 */, 11500 /* /9 */, 11500 /* /: */, 11500 /* /; */, 11500 /* /< */, 11500 /* /= */, 11500 /* /> */, 11500 /* /? */, 11500 /* /@ */, 10375 /* /A */, 11500 /* /B */, 10950 /* /C */, 11500 /* /D */, 11500 /* /E */, 11500 /* /F */, 10950 /* /G */, 11500 /* /H */, 11500 /* /I */, 11500 /* /J */, 11500 /* /K */, 11500 /* /L */, 11500 /* /M */, 11500 /* /N */, 10950 /* /O */, 11500 /* /P */, 10950 /* /Q */, 11500 /* /R */, 11000 /* /S */, 12000 /* /T */, 11500 /* /U */, 11750 /* /V */, 11625 /* /W */, 11500 /* /X */, 11750 /* /Y */, 11500 /* /Z */, 11500 /* /[ */, 11500 /* /\ */, 11500 /* /] */, 11500 /* /^ */, 11500 /* /_ */, 11500 /* /` */, 10500 /* /a */, 11500 /* /b */, 10625 /* /c */, 10625 /* /d */, 10625 /* /e */, 11500 /* /f */, 10875 /* /g */, 11500 /* /h */, 11500 /* /i */, 11500 /* /j */, 11500 /* /k */, 11500 /* /l */, 11250 /* /m */, 11250 /* /n */, 10625 /* /o */, 11500 /* /p */, 10625 /* /q */, 11250 /* /r */, 11500 /* /s */, 11500 /* /t */, 11500 /* /u */, 11500 /* /v */, 11500 /* /w */, 11500 /* /x */, 11500 /* /y */, 11500 /* /z */, 11500 /* /{ */, 11500 /* /| */, 11500 /* /} */, 11500 /* /~ */}, - {15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0! */, 15000 /* 0" */, 15000 /* 0# */, 15000 /* 0$ */, 15000 /* 0% */, 15000 /* 0& */, 15000 /* 0' */, 15000 /* 0( */, 15000 /* 0) */, 15000 /* 0* */, 15000 /* 0+ */, 15000 /* 0, */, 15000 /* 0- */, 15000 /* 0. */, 15000 /* 0/ */, 15000 /* 00 */, 15000 /* 01 */, 15000 /* 02 */, 15000 /* 03 */, 15000 /* 04 */, 15000 /* 05 */, 15000 /* 06 */, 15000 /* 07 */, 15000 /* 08 */, 15000 /* 09 */, 15000 /* 0: */, 15000 /* 0; */, 15000 /* 0< */, 15000 /* 0= */, 15000 /* 0> */, 15000 /* 0? */, 15000 /* 0@ */, 15000 /* 0A */, 15000 /* 0B */, 15000 /* 0C */, 15000 /* 0D */, 15000 /* 0E */, 15000 /* 0F */, 15000 /* 0G */, 15000 /* 0H */, 15000 /* 0I */, 15000 /* 0J */, 15000 /* 0K */, 15000 /* 0L */, 15000 /* 0M */, 15000 /* 0N */, 15000 /* 0O */, 15000 /* 0P */, 15000 /* 0Q */, 15000 /* 0R */, 15000 /* 0S */, 15000 /* 0T */, 15000 /* 0U */, 15000 /* 0V */, 15000 /* 0W */, 15000 /* 0X */, 15000 /* 0Y */, 15000 /* 0Z */, 15000 /* 0[ */, 15000 /* 0\ */, 15000 /* 0] */, 15000 /* 0^ */, 15000 /* 0_ */, 15000 /* 0` */, 15000 /* 0a */, 15000 /* 0b */, 15000 /* 0c */, 15000 /* 0d */, 15000 /* 0e */, 15000 /* 0f */, 15000 /* 0g */, 15000 /* 0h */, 15000 /* 0i */, 15000 /* 0j */, 15000 /* 0k */, 15000 /* 0l */, 15000 /* 0m */, 15000 /* 0n */, 15000 /* 0o */, 15000 /* 0p */, 15000 /* 0q */, 15000 /* 0r */, 15000 /* 0s */, 15000 /* 0t */, 15000 /* 0u */, 15000 /* 0v */, 15000 /* 0w */, 15000 /* 0x */, 15000 /* 0y */, 15000 /* 0z */, 15000 /* 0{ */, 15000 /* 0| */, 15000 /* 0} */, 15000 /* 0~ */}, - {15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1! */, 15000 /* 1" */, 15000 /* 1# */, 15000 /* 1$ */, 15000 /* 1% */, 15000 /* 1& */, 15000 /* 1' */, 15000 /* 1( */, 15000 /* 1) */, 15000 /* 1* */, 15000 /* 1+ */, 15000 /* 1, */, 15000 /* 1- */, 15000 /* 1. */, 15000 /* 1/ */, 15000 /* 10 */, 15000 /* 11 */, 15000 /* 12 */, 15000 /* 13 */, 15000 /* 14 */, 15000 /* 15 */, 15000 /* 16 */, 15000 /* 17 */, 15000 /* 18 */, 15000 /* 19 */, 15000 /* 1: */, 15000 /* 1; */, 15000 /* 1< */, 15000 /* 1= */, 15000 /* 1> */, 15000 /* 1? */, 15000 /* 1@ */, 15000 /* 1A */, 15000 /* 1B */, 15000 /* 1C */, 15000 /* 1D */, 15000 /* 1E */, 15000 /* 1F */, 15000 /* 1G */, 15000 /* 1H */, 15000 /* 1I */, 15000 /* 1J */, 15000 /* 1K */, 15000 /* 1L */, 15000 /* 1M */, 15000 /* 1N */, 15000 /* 1O */, 15000 /* 1P */, 15000 /* 1Q */, 15000 /* 1R */, 15000 /* 1S */, 15000 /* 1T */, 15000 /* 1U */, 15000 /* 1V */, 15000 /* 1W */, 15000 /* 1X */, 15000 /* 1Y */, 15000 /* 1Z */, 15000 /* 1[ */, 15000 /* 1\ */, 15000 /* 1] */, 15000 /* 1^ */, 15000 /* 1_ */, 15000 /* 1` */, 15000 /* 1a */, 15000 /* 1b */, 15000 /* 1c */, 15000 /* 1d */, 15000 /* 1e */, 15000 /* 1f */, 15000 /* 1g */, 15000 /* 1h */, 15000 /* 1i */, 15000 /* 1j */, 15000 /* 1k */, 15000 /* 1l */, 15000 /* 1m */, 15000 /* 1n */, 15000 /* 1o */, 15000 /* 1p */, 15000 /* 1q */, 15000 /* 1r */, 15000 /* 1s */, 15000 /* 1t */, 15000 /* 1u */, 15000 /* 1v */, 15000 /* 1w */, 15000 /* 1x */, 15000 /* 1y */, 15000 /* 1z */, 15000 /* 1{ */, 15000 /* 1| */, 15000 /* 1} */, 15000 /* 1~ */}, - {15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2! */, 15000 /* 2" */, 15000 /* 2# */, 15000 /* 2$ */, 15000 /* 2% */, 15000 /* 2& */, 15000 /* 2' */, 15000 /* 2( */, 15000 /* 2) */, 15000 /* 2* */, 15000 /* 2+ */, 15000 /* 2, */, 15000 /* 2- */, 15000 /* 2. */, 15000 /* 2/ */, 15000 /* 20 */, 15000 /* 21 */, 15000 /* 22 */, 15000 /* 23 */, 15000 /* 24 */, 15000 /* 25 */, 15000 /* 26 */, 15000 /* 27 */, 15000 /* 28 */, 15000 /* 29 */, 15000 /* 2: */, 15000 /* 2; */, 15000 /* 2< */, 15000 /* 2= */, 15000 /* 2> */, 15000 /* 2? */, 15000 /* 2@ */, 15000 /* 2A */, 15000 /* 2B */, 15000 /* 2C */, 15000 /* 2D */, 15000 /* 2E */, 15000 /* 2F */, 15000 /* 2G */, 15000 /* 2H */, 15000 /* 2I */, 15000 /* 2J */, 15000 /* 2K */, 15000 /* 2L */, 15000 /* 2M */, 15000 /* 2N */, 15000 /* 2O */, 15000 /* 2P */, 15000 /* 2Q */, 15000 /* 2R */, 15000 /* 2S */, 15000 /* 2T */, 15000 /* 2U */, 15000 /* 2V */, 15000 /* 2W */, 15000 /* 2X */, 15000 /* 2Y */, 15000 /* 2Z */, 15000 /* 2[ */, 15000 /* 2\ */, 15000 /* 2] */, 15000 /* 2^ */, 15000 /* 2_ */, 15000 /* 2` */, 15000 /* 2a */, 15000 /* 2b */, 15000 /* 2c */, 15000 /* 2d */, 15000 /* 2e */, 15000 /* 2f */, 15000 /* 2g */, 15000 /* 2h */, 15000 /* 2i */, 15000 /* 2j */, 15000 /* 2k */, 15000 /* 2l */, 15000 /* 2m */, 15000 /* 2n */, 15000 /* 2o */, 15000 /* 2p */, 15000 /* 2q */, 15000 /* 2r */, 15000 /* 2s */, 15000 /* 2t */, 15000 /* 2u */, 15000 /* 2v */, 15000 /* 2w */, 15000 /* 2x */, 15000 /* 2y */, 15000 /* 2z */, 15000 /* 2{ */, 15000 /* 2| */, 15000 /* 2} */, 15000 /* 2~ */}, - {15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3! */, 15000 /* 3" */, 15000 /* 3# */, 15000 /* 3$ */, 15000 /* 3% */, 15000 /* 3& */, 15000 /* 3' */, 15000 /* 3( */, 15000 /* 3) */, 15000 /* 3* */, 15000 /* 3+ */, 15000 /* 3, */, 15000 /* 3- */, 15000 /* 3. */, 15000 /* 3/ */, 15000 /* 30 */, 15000 /* 31 */, 15000 /* 32 */, 15000 /* 33 */, 15000 /* 34 */, 15000 /* 35 */, 15000 /* 36 */, 15000 /* 37 */, 15000 /* 38 */, 15000 /* 39 */, 15000 /* 3: */, 15000 /* 3; */, 15000 /* 3< */, 15000 /* 3= */, 15000 /* 3> */, 15000 /* 3? */, 15000 /* 3@ */, 15000 /* 3A */, 15000 /* 3B */, 15000 /* 3C */, 15000 /* 3D */, 15000 /* 3E */, 15000 /* 3F */, 15000 /* 3G */, 15000 /* 3H */, 15000 /* 3I */, 15000 /* 3J */, 15000 /* 3K */, 15000 /* 3L */, 15000 /* 3M */, 15000 /* 3N */, 15000 /* 3O */, 15000 /* 3P */, 15000 /* 3Q */, 15000 /* 3R */, 15000 /* 3S */, 15000 /* 3T */, 15000 /* 3U */, 15000 /* 3V */, 15000 /* 3W */, 15000 /* 3X */, 15000 /* 3Y */, 15000 /* 3Z */, 15000 /* 3[ */, 15000 /* 3\ */, 15000 /* 3] */, 15000 /* 3^ */, 15000 /* 3_ */, 15000 /* 3` */, 15000 /* 3a */, 15000 /* 3b */, 15000 /* 3c */, 15000 /* 3d */, 15000 /* 3e */, 15000 /* 3f */, 15000 /* 3g */, 15000 /* 3h */, 15000 /* 3i */, 15000 /* 3j */, 15000 /* 3k */, 15000 /* 3l */, 15000 /* 3m */, 15000 /* 3n */, 15000 /* 3o */, 15000 /* 3p */, 15000 /* 3q */, 15000 /* 3r */, 15000 /* 3s */, 15000 /* 3t */, 15000 /* 3u */, 15000 /* 3v */, 15000 /* 3w */, 15000 /* 3x */, 15000 /* 3y */, 15000 /* 3z */, 15000 /* 3{ */, 15000 /* 3| */, 15000 /* 3} */, 15000 /* 3~ */}, - {15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4! */, 15000 /* 4" */, 15000 /* 4# */, 15000 /* 4$ */, 15000 /* 4% */, 15000 /* 4& */, 15000 /* 4' */, 15000 /* 4( */, 15000 /* 4) */, 15000 /* 4* */, 15000 /* 4+ */, 15000 /* 4, */, 15000 /* 4- */, 15000 /* 4. */, 15000 /* 4/ */, 15000 /* 40 */, 15000 /* 41 */, 15000 /* 42 */, 15000 /* 43 */, 15000 /* 44 */, 15000 /* 45 */, 15000 /* 46 */, 15000 /* 47 */, 15000 /* 48 */, 15000 /* 49 */, 15000 /* 4: */, 15000 /* 4; */, 15000 /* 4< */, 15000 /* 4= */, 15000 /* 4> */, 15000 /* 4? */, 15000 /* 4@ */, 15000 /* 4A */, 15000 /* 4B */, 15000 /* 4C */, 15000 /* 4D */, 15000 /* 4E */, 15000 /* 4F */, 15000 /* 4G */, 15000 /* 4H */, 15000 /* 4I */, 15000 /* 4J */, 15000 /* 4K */, 15000 /* 4L */, 15000 /* 4M */, 15000 /* 4N */, 15000 /* 4O */, 15000 /* 4P */, 15000 /* 4Q */, 15000 /* 4R */, 15000 /* 4S */, 15000 /* 4T */, 15000 /* 4U */, 15000 /* 4V */, 15000 /* 4W */, 15000 /* 4X */, 15000 /* 4Y */, 15000 /* 4Z */, 15000 /* 4[ */, 15000 /* 4\ */, 15000 /* 4] */, 15000 /* 4^ */, 15000 /* 4_ */, 15000 /* 4` */, 15000 /* 4a */, 15000 /* 4b */, 15000 /* 4c */, 15000 /* 4d */, 15000 /* 4e */, 15000 /* 4f */, 15000 /* 4g */, 15000 /* 4h */, 15000 /* 4i */, 15000 /* 4j */, 15000 /* 4k */, 15000 /* 4l */, 15000 /* 4m */, 15000 /* 4n */, 15000 /* 4o */, 15000 /* 4p */, 15000 /* 4q */, 15000 /* 4r */, 15000 /* 4s */, 15000 /* 4t */, 15000 /* 4u */, 15000 /* 4v */, 15000 /* 4w */, 15000 /* 4x */, 15000 /* 4y */, 15000 /* 4z */, 15000 /* 4{ */, 15000 /* 4| */, 15000 /* 4} */, 15000 /* 4~ */}, - {15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5! */, 15000 /* 5" */, 15000 /* 5# */, 15000 /* 5$ */, 15000 /* 5% */, 15000 /* 5& */, 15000 /* 5' */, 15000 /* 5( */, 15000 /* 5) */, 15000 /* 5* */, 15000 /* 5+ */, 15000 /* 5, */, 15000 /* 5- */, 15000 /* 5. */, 15000 /* 5/ */, 15000 /* 50 */, 15000 /* 51 */, 15000 /* 52 */, 15000 /* 53 */, 15000 /* 54 */, 15000 /* 55 */, 15000 /* 56 */, 15000 /* 57 */, 15000 /* 58 */, 15000 /* 59 */, 15000 /* 5: */, 15000 /* 5; */, 15000 /* 5< */, 15000 /* 5= */, 15000 /* 5> */, 15000 /* 5? */, 15000 /* 5@ */, 15000 /* 5A */, 15000 /* 5B */, 15000 /* 5C */, 15000 /* 5D */, 15000 /* 5E */, 15000 /* 5F */, 15000 /* 5G */, 15000 /* 5H */, 15000 /* 5I */, 15000 /* 5J */, 15000 /* 5K */, 15000 /* 5L */, 15000 /* 5M */, 15000 /* 5N */, 15000 /* 5O */, 15000 /* 5P */, 15000 /* 5Q */, 15000 /* 5R */, 15000 /* 5S */, 15000 /* 5T */, 15000 /* 5U */, 15000 /* 5V */, 15000 /* 5W */, 15000 /* 5X */, 15000 /* 5Y */, 15000 /* 5Z */, 15000 /* 5[ */, 15000 /* 5\ */, 15000 /* 5] */, 15000 /* 5^ */, 15000 /* 5_ */, 15000 /* 5` */, 15000 /* 5a */, 15000 /* 5b */, 15000 /* 5c */, 15000 /* 5d */, 15000 /* 5e */, 15000 /* 5f */, 15000 /* 5g */, 15000 /* 5h */, 15000 /* 5i */, 15000 /* 5j */, 15000 /* 5k */, 15000 /* 5l */, 15000 /* 5m */, 15000 /* 5n */, 15000 /* 5o */, 15000 /* 5p */, 15000 /* 5q */, 15000 /* 5r */, 15000 /* 5s */, 15000 /* 5t */, 15000 /* 5u */, 15000 /* 5v */, 15000 /* 5w */, 15000 /* 5x */, 15000 /* 5y */, 15000 /* 5z */, 15000 /* 5{ */, 15000 /* 5| */, 15000 /* 5} */, 15000 /* 5~ */}, - {15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6! */, 15000 /* 6" */, 15000 /* 6# */, 15000 /* 6$ */, 15000 /* 6% */, 15000 /* 6& */, 15000 /* 6' */, 15000 /* 6( */, 15000 /* 6) */, 15000 /* 6* */, 15000 /* 6+ */, 15000 /* 6, */, 15000 /* 6- */, 15000 /* 6. */, 15000 /* 6/ */, 15000 /* 60 */, 15000 /* 61 */, 15000 /* 62 */, 15000 /* 63 */, 15000 /* 64 */, 15000 /* 65 */, 15000 /* 66 */, 15000 /* 67 */, 15000 /* 68 */, 15000 /* 69 */, 15000 /* 6: */, 15000 /* 6; */, 15000 /* 6< */, 15000 /* 6= */, 15000 /* 6> */, 15000 /* 6? */, 15000 /* 6@ */, 15000 /* 6A */, 15000 /* 6B */, 15000 /* 6C */, 15000 /* 6D */, 15000 /* 6E */, 15000 /* 6F */, 15000 /* 6G */, 15000 /* 6H */, 15000 /* 6I */, 15000 /* 6J */, 15000 /* 6K */, 15000 /* 6L */, 15000 /* 6M */, 15000 /* 6N */, 15000 /* 6O */, 15000 /* 6P */, 15000 /* 6Q */, 15000 /* 6R */, 15000 /* 6S */, 15000 /* 6T */, 15000 /* 6U */, 15000 /* 6V */, 15000 /* 6W */, 15000 /* 6X */, 15000 /* 6Y */, 15000 /* 6Z */, 15000 /* 6[ */, 15000 /* 6\ */, 15000 /* 6] */, 15000 /* 6^ */, 15000 /* 6_ */, 15000 /* 6` */, 15000 /* 6a */, 15000 /* 6b */, 15000 /* 6c */, 15000 /* 6d */, 15000 /* 6e */, 15000 /* 6f */, 15000 /* 6g */, 15000 /* 6h */, 15000 /* 6i */, 15000 /* 6j */, 15000 /* 6k */, 15000 /* 6l */, 15000 /* 6m */, 15000 /* 6n */, 15000 /* 6o */, 15000 /* 6p */, 15000 /* 6q */, 15000 /* 6r */, 15000 /* 6s */, 15000 /* 6t */, 15000 /* 6u */, 15000 /* 6v */, 15000 /* 6w */, 15000 /* 6x */, 15000 /* 6y */, 15000 /* 6z */, 15000 /* 6{ */, 15000 /* 6| */, 15000 /* 6} */, 15000 /* 6~ */}, - {15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7! */, 15000 /* 7" */, 15000 /* 7# */, 15000 /* 7$ */, 15000 /* 7% */, 15000 /* 7& */, 15000 /* 7' */, 15000 /* 7( */, 15000 /* 7) */, 15000 /* 7* */, 15000 /* 7+ */, 15000 /* 7, */, 15000 /* 7- */, 15000 /* 7. */, 15000 /* 7/ */, 15000 /* 70 */, 15000 /* 71 */, 15000 /* 72 */, 15000 /* 73 */, 15000 /* 74 */, 15000 /* 75 */, 15000 /* 76 */, 15000 /* 77 */, 15000 /* 78 */, 15000 /* 79 */, 15000 /* 7: */, 15000 /* 7; */, 15000 /* 7< */, 15000 /* 7= */, 15000 /* 7> */, 15000 /* 7? */, 15000 /* 7@ */, 15000 /* 7A */, 15000 /* 7B */, 15000 /* 7C */, 15000 /* 7D */, 15000 /* 7E */, 15000 /* 7F */, 15000 /* 7G */, 15000 /* 7H */, 15000 /* 7I */, 15000 /* 7J */, 15000 /* 7K */, 15000 /* 7L */, 15000 /* 7M */, 15000 /* 7N */, 15000 /* 7O */, 15000 /* 7P */, 15000 /* 7Q */, 15000 /* 7R */, 15000 /* 7S */, 15000 /* 7T */, 15000 /* 7U */, 15000 /* 7V */, 15000 /* 7W */, 15000 /* 7X */, 15000 /* 7Y */, 15000 /* 7Z */, 15000 /* 7[ */, 15000 /* 7\ */, 15000 /* 7] */, 15000 /* 7^ */, 15000 /* 7_ */, 15000 /* 7` */, 15000 /* 7a */, 15000 /* 7b */, 15000 /* 7c */, 15000 /* 7d */, 15000 /* 7e */, 15000 /* 7f */, 15000 /* 7g */, 15000 /* 7h */, 15000 /* 7i */, 15000 /* 7j */, 15000 /* 7k */, 15000 /* 7l */, 15000 /* 7m */, 15000 /* 7n */, 15000 /* 7o */, 15000 /* 7p */, 15000 /* 7q */, 15000 /* 7r */, 15000 /* 7s */, 15000 /* 7t */, 15000 /* 7u */, 15000 /* 7v */, 15000 /* 7w */, 15000 /* 7x */, 15000 /* 7y */, 15000 /* 7z */, 15000 /* 7{ */, 15000 /* 7| */, 15000 /* 7} */, 15000 /* 7~ */}, - {15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8! */, 15000 /* 8" */, 15000 /* 8# */, 15000 /* 8$ */, 15000 /* 8% */, 15000 /* 8& */, 15000 /* 8' */, 15000 /* 8( */, 15000 /* 8) */, 15000 /* 8* */, 15000 /* 8+ */, 15000 /* 8, */, 15000 /* 8- */, 15000 /* 8. */, 15000 /* 8/ */, 15000 /* 80 */, 15000 /* 81 */, 15000 /* 82 */, 15000 /* 83 */, 15000 /* 84 */, 15000 /* 85 */, 15000 /* 86 */, 15000 /* 87 */, 15000 /* 88 */, 15000 /* 89 */, 15000 /* 8: */, 15000 /* 8; */, 15000 /* 8< */, 15000 /* 8= */, 15000 /* 8> */, 15000 /* 8? */, 15000 /* 8@ */, 15000 /* 8A */, 15000 /* 8B */, 15000 /* 8C */, 15000 /* 8D */, 15000 /* 8E */, 15000 /* 8F */, 15000 /* 8G */, 15000 /* 8H */, 15000 /* 8I */, 15000 /* 8J */, 15000 /* 8K */, 15000 /* 8L */, 15000 /* 8M */, 15000 /* 8N */, 15000 /* 8O */, 15000 /* 8P */, 15000 /* 8Q */, 15000 /* 8R */, 15000 /* 8S */, 15000 /* 8T */, 15000 /* 8U */, 15000 /* 8V */, 15000 /* 8W */, 15000 /* 8X */, 15000 /* 8Y */, 15000 /* 8Z */, 15000 /* 8[ */, 15000 /* 8\ */, 15000 /* 8] */, 15000 /* 8^ */, 15000 /* 8_ */, 15000 /* 8` */, 15000 /* 8a */, 15000 /* 8b */, 15000 /* 8c */, 15000 /* 8d */, 15000 /* 8e */, 15000 /* 8f */, 15000 /* 8g */, 15000 /* 8h */, 15000 /* 8i */, 15000 /* 8j */, 15000 /* 8k */, 15000 /* 8l */, 15000 /* 8m */, 15000 /* 8n */, 15000 /* 8o */, 15000 /* 8p */, 15000 /* 8q */, 15000 /* 8r */, 15000 /* 8s */, 15000 /* 8t */, 15000 /* 8u */, 15000 /* 8v */, 15000 /* 8w */, 15000 /* 8x */, 15000 /* 8y */, 15000 /* 8z */, 15000 /* 8{ */, 15000 /* 8| */, 15000 /* 8} */, 15000 /* 8~ */}, - {15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9! */, 15000 /* 9" */, 15000 /* 9# */, 15000 /* 9$ */, 15000 /* 9% */, 15000 /* 9& */, 15000 /* 9' */, 15000 /* 9( */, 15000 /* 9) */, 15000 /* 9* */, 15000 /* 9+ */, 15000 /* 9, */, 15000 /* 9- */, 15000 /* 9. */, 15000 /* 9/ */, 15000 /* 90 */, 15000 /* 91 */, 15000 /* 92 */, 15000 /* 93 */, 15000 /* 94 */, 15000 /* 95 */, 15000 /* 96 */, 15000 /* 97 */, 15000 /* 98 */, 15000 /* 99 */, 15000 /* 9: */, 15000 /* 9; */, 15000 /* 9< */, 15000 /* 9= */, 15000 /* 9> */, 15000 /* 9? */, 15000 /* 9@ */, 15000 /* 9A */, 15000 /* 9B */, 15000 /* 9C */, 15000 /* 9D */, 15000 /* 9E */, 15000 /* 9F */, 15000 /* 9G */, 15000 /* 9H */, 15000 /* 9I */, 15000 /* 9J */, 15000 /* 9K */, 15000 /* 9L */, 15000 /* 9M */, 15000 /* 9N */, 15000 /* 9O */, 15000 /* 9P */, 15000 /* 9Q */, 15000 /* 9R */, 15000 /* 9S */, 15000 /* 9T */, 15000 /* 9U */, 15000 /* 9V */, 15000 /* 9W */, 15000 /* 9X */, 15000 /* 9Y */, 15000 /* 9Z */, 15000 /* 9[ */, 15000 /* 9\ */, 15000 /* 9] */, 15000 /* 9^ */, 15000 /* 9_ */, 15000 /* 9` */, 15000 /* 9a */, 15000 /* 9b */, 15000 /* 9c */, 15000 /* 9d */, 15000 /* 9e */, 15000 /* 9f */, 15000 /* 9g */, 15000 /* 9h */, 15000 /* 9i */, 15000 /* 9j */, 15000 /* 9k */, 15000 /* 9l */, 15000 /* 9m */, 15000 /* 9n */, 15000 /* 9o */, 15000 /* 9p */, 15000 /* 9q */, 15000 /* 9r */, 15000 /* 9s */, 15000 /* 9t */, 15000 /* 9u */, 15000 /* 9v */, 15000 /* 9w */, 15000 /* 9x */, 15000 /* 9y */, 15000 /* 9z */, 15000 /* 9{ */, 15000 /* 9| */, 15000 /* 9} */, 15000 /* 9~ */}, - {8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* :! */, 8250 /* :" */, 8250 /* :# */, 8250 /* :$ */, 8250 /* :% */, 8250 /* :& */, 8250 /* :' */, 8250 /* :( */, 8250 /* :) */, 8250 /* :* */, 8250 /* :+ */, 8250 /* :, */, 8250 /* :- */, 8250 /* :. */, 8250 /* :/ */, 8250 /* :0 */, 8250 /* :1 */, 8250 /* :2 */, 8250 /* :3 */, 8250 /* :4 */, 8250 /* :5 */, 8250 /* :6 */, 8250 /* :7 */, 8250 /* :8 */, 8250 /* :9 */, 8250 /* :: */, 8250 /* :; */, 8250 /* :< */, 8250 /* := */, 8250 /* :> */, 8250 /* :? */, 8250 /* :@ */, 8250 /* :A */, 8250 /* :B */, 8250 /* :C */, 8250 /* :D */, 8250 /* :E */, 8250 /* :F */, 8250 /* :G */, 8250 /* :H */, 8250 /* :I */, 8250 /* :J */, 8250 /* :K */, 8250 /* :L */, 8250 /* :M */, 8250 /* :N */, 8250 /* :O */, 8250 /* :P */, 8250 /* :Q */, 8250 /* :R */, 8250 /* :S */, 7250 /* :T */, 8250 /* :U */, 7500 /* :V */, 8250 /* :W */, 7875 /* :X */, 7000 /* :Y */, 8250 /* :Z */, 8250 /* :[ */, 8250 /* :\ */, 8250 /* :] */, 8250 /* :^ */, 8250 /* :_ */, 8250 /* :` */, 8250 /* :a */, 8250 /* :b */, 8250 /* :c */, 8250 /* :d */, 8250 /* :e */, 8250 /* :f */, 8250 /* :g */, 8250 /* :h */, 8250 /* :i */, 8250 /* :j */, 8250 /* :k */, 8250 /* :l */, 8250 /* :m */, 8250 /* :n */, 8250 /* :o */, 8250 /* :p */, 8250 /* :q */, 8250 /* :r */, 8250 /* :s */, 8250 /* :t */, 8250 /* :u */, 8250 /* :v */, 8250 /* :w */, 8250 /* :x */, 8250 /* :y */, 8250 /* :z */, 8250 /* :{ */, 8250 /* :| */, 8250 /* :} */, 8250 /* :~ */}, - {8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ;! */, 8250 /* ;" */, 8250 /* ;# */, 8250 /* ;$ */, 8250 /* ;% */, 8250 /* ;& */, 8250 /* ;' */, 8250 /* ;( */, 8250 /* ;) */, 8250 /* ;* */, 8250 /* ;+ */, 8250 /* ;, */, 8250 /* ;- */, 8250 /* ;. */, 8250 /* ;/ */, 8250 /* ;0 */, 8250 /* ;1 */, 8250 /* ;2 */, 8250 /* ;3 */, 8250 /* ;4 */, 8250 /* ;5 */, 8250 /* ;6 */, 8250 /* ;7 */, 8250 /* ;8 */, 8250 /* ;9 */, 8250 /* ;: */, 8250 /* ;; */, 8250 /* ;< */, 8250 /* ;= */, 8250 /* ;> */, 8250 /* ;? */, 8250 /* ;@ */, 8250 /* ;A */, 8250 /* ;B */, 8250 /* ;C */, 8250 /* ;D */, 8250 /* ;E */, 8250 /* ;F */, 8250 /* ;G */, 8250 /* ;H */, 8250 /* ;I */, 8250 /* ;J */, 8250 /* ;K */, 8250 /* ;L */, 8250 /* ;M */, 8250 /* ;N */, 8250 /* ;O */, 8250 /* ;P */, 8250 /* ;Q */, 8250 /* ;R */, 8250 /* ;S */, 7250 /* ;T */, 8250 /* ;U */, 7500 /* ;V */, 8250 /* ;W */, 7875 /* ;X */, 7000 /* ;Y */, 8250 /* ;Z */, 8250 /* ;[ */, 8250 /* ;\ */, 8250 /* ;] */, 8250 /* ;^ */, 8250 /* ;_ */, 8250 /* ;` */, 8250 /* ;a */, 8250 /* ;b */, 8250 /* ;c */, 8250 /* ;d */, 8250 /* ;e */, 8250 /* ;f */, 8250 /* ;g */, 8250 /* ;h */, 8250 /* ;i */, 8250 /* ;j */, 8250 /* ;k */, 8250 /* ;l */, 8250 /* ;m */, 8250 /* ;n */, 8250 /* ;o */, 8250 /* ;p */, 8250 /* ;q */, 8250 /* ;r */, 8250 /* ;s */, 8250 /* ;t */, 8250 /* ;u */, 8250 /* ;v */, 8250 /* ;w */, 8250 /* ;x */, 8250 /* ;y */, 8250 /* ;z */, 8250 /* ;{ */, 8250 /* ;| */, 8250 /* ;} */, 8250 /* ;~ */}, - {15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* */, 15000 /* */, 15000 /* =? */, 15000 /* =@ */, 15000 /* =A */, 15000 /* =B */, 15000 /* =C */, 15000 /* =D */, 15000 /* =E */, 15000 /* =F */, 15000 /* =G */, 15000 /* =H */, 15000 /* =I */, 15000 /* =J */, 15000 /* =K */, 15000 /* =L */, 15000 /* =M */, 15000 /* =N */, 15000 /* =O */, 15000 /* =P */, 15000 /* =Q */, 15000 /* =R */, 15000 /* =S */, 15000 /* =T */, 15000 /* =U */, 15000 /* =V */, 15000 /* =W */, 15000 /* =X */, 15000 /* =Y */, 15000 /* =Z */, 15000 /* =[ */, 15000 /* =\ */, 15000 /* =] */, 15000 /* =^ */, 15000 /* =_ */, 15000 /* =` */, 15000 /* =a */, 15000 /* =b */, 15000 /* =c */, 15000 /* =d */, 15000 /* =e */, 15000 /* =f */, 15000 /* =g */, 15000 /* =h */, 15000 /* =i */, 15000 /* =j */, 15000 /* =k */, 15000 /* =l */, 15000 /* =m */, 15000 /* =n */, 15000 /* =o */, 15000 /* =p */, 15000 /* =q */, 15000 /* =r */, 15000 /* =s */, 15000 /* =t */, 15000 /* =u */, 15000 /* =v */, 15000 /* =w */, 15000 /* =x */, 15000 /* =y */, 15000 /* =z */, 15000 /* ={ */, 15000 /* =| */, 15000 /* =} */, 15000 /* =~ */}, - {15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* >! */, 15000 /* >" */, 15000 /* ># */, 15000 /* >$ */, 15000 /* >% */, 15000 /* >& */, 15000 /* >' */, 15000 /* >( */, 15000 /* >) */, 15000 /* >* */, 15000 /* >+ */, 15000 /* >, */, 15000 /* >- */, 15000 /* >. */, 15000 /* >/ */, 15000 /* >0 */, 15000 /* >1 */, 15000 /* >2 */, 15000 /* >3 */, 15000 /* >4 */, 15000 /* >5 */, 15000 /* >6 */, 15000 /* >7 */, 15000 /* >8 */, 15000 /* >9 */, 15000 /* >: */, 15000 /* >; */, 15000 /* >< */, 15000 /* >= */, 15000 /* >> */, 15000 /* >? */, 15000 /* >@ */, 15000 /* >A */, 15000 /* >B */, 15000 /* >C */, 15000 /* >D */, 15000 /* >E */, 15000 /* >F */, 15000 /* >G */, 15000 /* >H */, 15000 /* >I */, 15000 /* >J */, 15000 /* >K */, 15000 /* >L */, 15000 /* >M */, 15000 /* >N */, 15000 /* >O */, 15000 /* >P */, 15000 /* >Q */, 15000 /* >R */, 15000 /* >S */, 15000 /* >T */, 15000 /* >U */, 15000 /* >V */, 15000 /* >W */, 15000 /* >X */, 15000 /* >Y */, 15000 /* >Z */, 15000 /* >[ */, 15000 /* >\ */, 15000 /* >] */, 15000 /* >^ */, 15000 /* >_ */, 15000 /* >` */, 15000 /* >a */, 15000 /* >b */, 15000 /* >c */, 15000 /* >d */, 15000 /* >e */, 15000 /* >f */, 15000 /* >g */, 15000 /* >h */, 15000 /* >i */, 15000 /* >j */, 15000 /* >k */, 15000 /* >l */, 15000 /* >m */, 15000 /* >n */, 15000 /* >o */, 15000 /* >p */, 15000 /* >q */, 15000 /* >r */, 15000 /* >s */, 15000 /* >t */, 15000 /* >u */, 15000 /* >v */, 15000 /* >w */, 15000 /* >x */, 15000 /* >y */, 15000 /* >z */, 15000 /* >{ */, 15000 /* >| */, 15000 /* >} */, 15000 /* >~ */}, - {12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ?! */, 12500 /* ?" */, 12500 /* ?# */, 12500 /* ?$ */, 12500 /* ?% */, 12500 /* ?& */, 12500 /* ?' */, 12500 /* ?( */, 12500 /* ?) */, 12500 /* ?* */, 12500 /* ?+ */, 9500 /* ?, */, 12500 /* ?- */, 9500 /* ?. */, 12500 /* ?/ */, 12500 /* ?0 */, 12500 /* ?1 */, 12500 /* ?2 */, 12500 /* ?3 */, 12500 /* ?4 */, 12500 /* ?5 */, 12500 /* ?6 */, 12500 /* ?7 */, 12500 /* ?8 */, 12500 /* ?9 */, 12500 /* ?: */, 12500 /* ?; */, 12500 /* ?< */, 12500 /* ?= */, 12500 /* ?> */, 12500 /* ?? */, 12500 /* ?@ */, 11750 /* ?A */, 12500 /* ?B */, 12500 /* ?C */, 12500 /* ?D */, 12500 /* ?E */, 12500 /* ?F */, 12500 /* ?G */, 12500 /* ?H */, 12500 /* ?I */, 12500 /* ?J */, 12500 /* ?K */, 12500 /* ?L */, 12500 /* ?M */, 12500 /* ?N */, 12500 /* ?O */, 12500 /* ?P */, 12500 /* ?Q */, 12500 /* ?R */, 12500 /* ?S */, 12500 /* ?T */, 12500 /* ?U */, 12750 /* ?V */, 12875 /* ?W */, 12500 /* ?X */, 12500 /* ?Y */, 12500 /* ?Z */, 12500 /* ?[ */, 12500 /* ?\ */, 12500 /* ?] */, 12500 /* ?^ */, 12500 /* ?_ */, 12500 /* ?` */, 12500 /* ?a */, 12500 /* ?b */, 12500 /* ?c */, 12500 /* ?d */, 12500 /* ?e */, 12500 /* ?f */, 12500 /* ?g */, 12500 /* ?h */, 12500 /* ?i */, 12500 /* ?j */, 12500 /* ?k */, 12500 /* ?l */, 12500 /* ?m */, 12500 /* ?n */, 12500 /* ?o */, 12500 /* ?p */, 12500 /* ?q */, 12500 /* ?r */, 12500 /* ?s */, 12500 /* ?t */, 12500 /* ?u */, 12500 /* ?v */, 12500 /* ?w */, 12500 /* ?x */, 12500 /* ?y */, 12500 /* ?z */, 12500 /* ?{ */, 12500 /* ?| */, 12500 /* ?} */, 12500 /* ?~ */}, - {22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @! */, 22575 /* @" */, 22575 /* @# */, 22575 /* @$ */, 22575 /* @% */, 22575 /* @& */, 22575 /* @' */, 22575 /* @( */, 22575 /* @) */, 22575 /* @* */, 22575 /* @+ */, 22575 /* @, */, 22575 /* @- */, 22575 /* @. */, 22575 /* @/ */, 22575 /* @0 */, 22575 /* @1 */, 22575 /* @2 */, 22575 /* @3 */, 22575 /* @4 */, 22575 /* @5 */, 22575 /* @6 */, 22575 /* @7 */, 22575 /* @8 */, 22575 /* @9 */, 22575 /* @: */, 22575 /* @; */, 22575 /* @< */, 22575 /* @= */, 22575 /* @> */, 22575 /* @? */, 22575 /* @@ */, 22075 /* @A */, 22575 /* @B */, 22575 /* @C */, 22575 /* @D */, 22575 /* @E */, 22575 /* @F */, 22575 /* @G */, 22575 /* @H */, 22075 /* @I */, 21825 /* @J */, 22575 /* @K */, 22575 /* @L */, 22575 /* @M */, 22575 /* @N */, 22575 /* @O */, 22575 /* @P */, 22575 /* @Q */, 22575 /* @R */, 22325 /* @S */, 21825 /* @T */, 22575 /* @U */, 21825 /* @V */, 22075 /* @W */, 21575 /* @X */, 21575 /* @Y */, 22200 /* @Z */, 22575 /* @[ */, 22575 /* @\ */, 22575 /* @] */, 22575 /* @^ */, 22575 /* @_ */, 22575 /* @` */, 22575 /* @a */, 22575 /* @b */, 22575 /* @c */, 22575 /* @d */, 22575 /* @e */, 22575 /* @f */, 22450 /* @g */, 22575 /* @h */, 22575 /* @i */, 22575 /* @j */, 22575 /* @k */, 22575 /* @l */, 22575 /* @m */, 22575 /* @n */, 22575 /* @o */, 22575 /* @p */, 22575 /* @q */, 22575 /* @r */, 22575 /* @s */, 22575 /* @t */, 22575 /* @u */, 22575 /* @v */, 22325 /* @w */, 22075 /* @x */, 22325 /* @y */, 22325 /* @z */, 22575 /* @{ */, 22575 /* @| */, 22575 /* @} */, 22575 /* @~ */}, - {17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A! */, 15875 /* A" */, 17125 /* A# */, 17125 /* A$ */, 17125 /* A% */, 16875 /* A& */, 15875 /* A' */, 17125 /* A( */, 17125 /* A) */, 15875 /* A* */, 17125 /* A+ */, 17625 /* A, */, 16750 /* A- */, 17625 /* A. */, 17125 /* A/ */, 17125 /* A0 */, 17125 /* A1 */, 17125 /* A2 */, 17125 /* A3 */, 17125 /* A4 */, 17125 /* A5 */, 17125 /* A6 */, 17125 /* A7 */, 17125 /* A8 */, 17125 /* A9 */, 17125 /* A: */, 17125 /* A; */, 17125 /* A< */, 17125 /* A= */, 17125 /* A> */, 15875 /* A? */, 16625 /* A@ */, 17375 /* AA */, 17125 /* AB */, 16375 /* AC */, 17125 /* AD */, 17125 /* AE */, 17125 /* AF */, 16375 /* AG */, 17125 /* AH */, 17125 /* AI */, 16775 /* AJ */, 17125 /* AK */, 17125 /* AL */, 17125 /* AM */, 17125 /* AN */, 16375 /* AO */, 17125 /* AP */, 16375 /* AQ */, 17125 /* AR */, 17125 /* AS */, 15500 /* AT */, 16525 /* AU */, 15775 /* AV */, 16450 /* AW */, 17250 /* AX */, 15375 /* AY */, 17125 /* AZ */, 17125 /* A[ */, 17125 /* A\ */, 17125 /* A] */, 17125 /* A^ */, 17500 /* A_ */, 17125 /* A` */, 17200 /* Aa */, 17125 /* Ab */, 17125 /* Ac */, 17125 /* Ad */, 17125 /* Ae */, 17125 /* Af */, 17125 /* Ag */, 17125 /* Ah */, 17125 /* Ai */, 17125 /* Aj */, 17125 /* Ak */, 17125 /* Al */, 17125 /* Am */, 17125 /* An */, 17125 /* Ao */, 17125 /* Ap */, 17125 /* Aq */, 17125 /* Ar */, 17125 /* As */, 16650 /* At */, 17125 /* Au */, 16375 /* Av */, 16625 /* Aw */, 17125 /* Ax */, 16750 /* Ay */, 17375 /* Az */, 17125 /* A{ */, 17125 /* A| */, 17125 /* A} */, 17125 /* A~ */}, - {16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B! */, 16675 /* B" */, 16675 /* B# */, 16675 /* B$ */, 16675 /* B% */, 16675 /* B& */, 16675 /* B' */, 16675 /* B( */, 16675 /* B) */, 16675 /* B* */, 16675 /* B+ */, 16300 /* B, */, 16675 /* B- */, 16300 /* B. */, 16050 /* B/ */, 16675 /* B0 */, 16675 /* B1 */, 16675 /* B2 */, 16675 /* B3 */, 16675 /* B4 */, 16675 /* B5 */, 16675 /* B6 */, 16675 /* B7 */, 16675 /* B8 */, 16675 /* B9 */, 16675 /* B: */, 16675 /* B; */, 16675 /* B< */, 16675 /* B= */, 16675 /* B> */, 16675 /* B? */, 16675 /* B@ */, 16300 /* BA */, 16675 /* BB */, 16675 /* BC */, 16675 /* BD */, 16675 /* BE */, 16675 /* BF */, 16675 /* BG */, 16675 /* BH */, 16675 /* BI */, 16425 /* BJ */, 16675 /* BK */, 16675 /* BL */, 16675 /* BM */, 16675 /* BN */, 16675 /* BO */, 16675 /* BP */, 16675 /* BQ */, 16675 /* BR */, 16675 /* BS */, 16025 /* BT */, 16675 /* BU */, 15975 /* BV */, 16475 /* BW */, 16150 /* BX */, 15600 /* BY */, 16675 /* BZ */, 16675 /* B[ */, 16675 /* B\ */, 16675 /* B] */, 16675 /* B^ */, 15075 /* B_ */, 16675 /* B` */, 16675 /* Ba */, 16675 /* Bb */, 16675 /* Bc */, 16675 /* Bd */, 16675 /* Be */, 16625 /* Bf */, 16600 /* Bg */, 16675 /* Bh */, 16675 /* Bi */, 16675 /* Bj */, 16675 /* Bk */, 16675 /* Bl */, 16675 /* Bm */, 16675 /* Bn */, 16675 /* Bo */, 16675 /* Bp */, 16675 /* Bq */, 16675 /* Br */, 16675 /* Bs */, 16550 /* Bt */, 16675 /* Bu */, 16475 /* Bv */, 16500 /* Bw */, 16375 /* Bx */, 16475 /* By */, 16675 /* Bz */, 16675 /* B{ */, 16675 /* B| */, 16675 /* B} */, 16675 /* B~ */}, - {16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C! */, 16275 /* C" */, 16275 /* C# */, 16275 /* C$ */, 16275 /* C% */, 16025 /* C& */, 16275 /* C' */, 16275 /* C( */, 16275 /* C) */, 16275 /* C* */, 16275 /* C+ */, 16275 /* C, */, 16025 /* C- */, 16275 /* C. */, 15775 /* C/ */, 16275 /* C0 */, 16275 /* C1 */, 16275 /* C2 */, 16275 /* C3 */, 16275 /* C4 */, 16275 /* C5 */, 16275 /* C6 */, 16275 /* C7 */, 16275 /* C8 */, 16275 /* C9 */, 16275 /* C: */, 16275 /* C; */, 16275 /* C< */, 16275 /* C= */, 16275 /* C> */, 16275 /* C? */, 16025 /* C@ */, 16075 /* CA */, 16275 /* CB */, 15950 /* CC */, 16275 /* CD */, 16275 /* CE */, 16275 /* CF */, 15950 /* CG */, 16275 /* CH */, 16275 /* CI */, 16275 /* CJ */, 16275 /* CK */, 16275 /* CL */, 16275 /* CM */, 16275 /* CN */, 15950 /* CO */, 16275 /* CP */, 15950 /* CQ */, 16275 /* CR */, 16275 /* CS */, 16275 /* CT */, 16275 /* CU */, 16275 /* CV */, 16275 /* CW */, 15775 /* CX */, 16025 /* CY */, 16275 /* CZ */, 16275 /* C[ */, 16275 /* C\ */, 16275 /* C] */, 16275 /* C^ */, 15175 /* C_ */, 16275 /* C` */, 16275 /* Ca */, 16275 /* Cb */, 16275 /* Cc */, 16275 /* Cd */, 16275 /* Ce */, 16275 /* Cf */, 16275 /* Cg */, 16275 /* Ch */, 16275 /* Ci */, 16275 /* Cj */, 16275 /* Ck */, 16275 /* Cl */, 16275 /* Cm */, 16275 /* Cn */, 16275 /* Co */, 16275 /* Cp */, 16275 /* Cq */, 16275 /* Cr */, 16275 /* Cs */, 16275 /* Ct */, 16275 /* Cu */, 16275 /* Cv */, 16275 /* Cw */, 16275 /* Cx */, 16275 /* Cy */, 16275 /* Cz */, 16275 /* C{ */, 16275 /* C| */, 16275 /* C} */, 16275 /* C~ */}, - {17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D! */, 17175 /* D" */, 17425 /* D# */, 17425 /* D$ */, 17425 /* D% */, 17425 /* D& */, 17175 /* D' */, 17425 /* D( */, 17425 /* D) */, 17175 /* D* */, 17425 /* D+ */, 16425 /* D, */, 17800 /* D- */, 16425 /* D. */, 16300 /* D/ */, 17425 /* D0 */, 17425 /* D1 */, 17425 /* D2 */, 17425 /* D3 */, 17425 /* D4 */, 17425 /* D5 */, 17425 /* D6 */, 17425 /* D7 */, 17425 /* D8 */, 17425 /* D9 */, 17425 /* D: */, 17425 /* D; */, 17425 /* D< */, 17425 /* D= */, 17425 /* D> */, 17425 /* D? */, 17425 /* D@ */, 16500 /* DA */, 17425 /* DB */, 17425 /* DC */, 17425 /* DD */, 17425 /* DE */, 17425 /* DF */, 17425 /* DG */, 17425 /* DH */, 17425 /* DI */, 16675 /* DJ */, 17425 /* DK */, 17425 /* DL */, 17425 /* DM */, 17425 /* DN */, 17425 /* DO */, 17425 /* DP */, 17425 /* DQ */, 17425 /* DR */, 17425 /* DS */, 16800 /* DT */, 17425 /* DU */, 16650 /* DV */, 16850 /* DW */, 16675 /* DX */, 16275 /* DY */, 16800 /* DZ */, 17425 /* D[ */, 17425 /* D\ */, 17425 /* D] */, 17425 /* D^ */, 17425 /* D_ */, 17425 /* D` */, 17425 /* Da */, 17425 /* Db */, 17425 /* Dc */, 17425 /* Dd */, 17425 /* De */, 17425 /* Df */, 17425 /* Dg */, 17425 /* Dh */, 17425 /* Di */, 17425 /* Dj */, 17425 /* Dk */, 17425 /* Dl */, 17425 /* Dm */, 17425 /* Dn */, 17425 /* Do */, 17425 /* Dp */, 17425 /* Dq */, 17425 /* Dr */, 17425 /* Ds */, 17425 /* Dt */, 17425 /* Du */, 17425 /* Dv */, 17425 /* Dw */, 17425 /* Dx */, 17425 /* Dy */, 17425 /* Dz */, 17425 /* D{ */, 17425 /* D| */, 17425 /* D} */, 17425 /* D~ */}, - {15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E! */, 15175 /* E" */, 15175 /* E# */, 15175 /* E$ */, 15175 /* E% */, 14800 /* E& */, 15175 /* E' */, 15175 /* E( */, 15175 /* E) */, 15175 /* E* */, 15175 /* E+ */, 15175 /* E, */, 15175 /* E- */, 15175 /* E. */, 15175 /* E/ */, 15175 /* E0 */, 15175 /* E1 */, 15175 /* E2 */, 15175 /* E3 */, 15175 /* E4 */, 15175 /* E5 */, 15175 /* E6 */, 15175 /* E7 */, 15175 /* E8 */, 15175 /* E9 */, 15175 /* E: */, 15175 /* E; */, 15175 /* E< */, 15175 /* E= */, 15175 /* E> */, 15175 /* E? */, 14925 /* E@ */, 15175 /* EA */, 15175 /* EB */, 15175 /* EC */, 15175 /* ED */, 15175 /* EE */, 15175 /* EF */, 15175 /* EG */, 15175 /* EH */, 15175 /* EI */, 14675 /* EJ */, 15175 /* EK */, 15175 /* EL */, 15175 /* EM */, 15175 /* EN */, 15175 /* EO */, 15175 /* EP */, 15175 /* EQ */, 15175 /* ER */, 15175 /* ES */, 15175 /* ET */, 15175 /* EU */, 15175 /* EV */, 15175 /* EW */, 15175 /* EX */, 15175 /* EY */, 15175 /* EZ */, 15175 /* E[ */, 15175 /* E\ */, 15175 /* E] */, 15175 /* E^ */, 15175 /* E_ */, 15175 /* E` */, 15175 /* Ea */, 15175 /* Eb */, 14925 /* Ec */, 14925 /* Ed */, 14925 /* Ee */, 15175 /* Ef */, 15050 /* Eg */, 15175 /* Eh */, 15175 /* Ei */, 15175 /* Ej */, 15175 /* Ek */, 15175 /* El */, 15175 /* Em */, 15175 /* En */, 14925 /* Eo */, 15175 /* Ep */, 14925 /* Eq */, 15175 /* Er */, 15175 /* Es */, 15175 /* Et */, 15175 /* Eu */, 15175 /* Ev */, 15175 /* Ew */, 15175 /* Ex */, 15175 /* Ey */, 15175 /* Ez */, 15175 /* E{ */, 15175 /* E| */, 15175 /* E} */, 15175 /* E~ */}, - {14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F! */, 14750 /* F" */, 14625 /* F# */, 14625 /* F$ */, 14625 /* F% */, 13625 /* F& */, 14750 /* F' */, 14625 /* F( */, 15000 /* F) */, 14750 /* F* */, 14625 /* F+ */, 12125 /* F, */, 14625 /* F- */, 12125 /* F. */, 12500 /* F/ */, 14625 /* F0 */, 14625 /* F1 */, 14625 /* F2 */, 14625 /* F3 */, 14625 /* F4 */, 14625 /* F5 */, 14625 /* F6 */, 14625 /* F7 */, 14625 /* F8 */, 14625 /* F9 */, 14625 /* F: */, 14625 /* F; */, 14625 /* F< */, 14625 /* F= */, 14625 /* F> */, 14625 /* F? */, 13875 /* F@ */, 12450 /* FA */, 14625 /* FB */, 13875 /* FC */, 14625 /* FD */, 14625 /* FE */, 14625 /* FF */, 13875 /* FG */, 14625 /* FH */, 14625 /* FI */, 12750 /* FJ */, 14625 /* FK */, 14625 /* FL */, 14625 /* FM */, 14625 /* FN */, 13875 /* FO */, 14625 /* FP */, 13875 /* FQ */, 14625 /* FR */, 14625 /* FS */, 14625 /* FT */, 14625 /* FU */, 14625 /* FV */, 14625 /* FW */, 14625 /* FX */, 14625 /* FY */, 14625 /* FZ */, 14625 /* F[ */, 14625 /* F\ */, 14625 /* F] */, 14625 /* F^ */, 11125 /* F_ */, 14625 /* F` */, 13625 /* Fa */, 14625 /* Fb */, 13825 /* Fc */, 13775 /* Fd */, 13825 /* Fe */, 14450 /* Ff */, 13525 /* Fg */, 14625 /* Fh */, 14625 /* Fi */, 14375 /* Fj */, 14625 /* Fk */, 14625 /* Fl */, 13875 /* Fm */, 13875 /* Fn */, 13825 /* Fo */, 13875 /* Fp */, 13775 /* Fq */, 13875 /* Fr */, 13625 /* Fs */, 14250 /* Ft */, 14000 /* Fu */, 14125 /* Fv */, 14250 /* Fw */, 13625 /* Fx */, 14125 /* Fy */, 14000 /* Fz */, 14625 /* F{ */, 14625 /* F| */, 14625 /* F} */, 14625 /* F~ */}, - {17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G! */, 17725 /* G" */, 17975 /* G# */, 17975 /* G$ */, 17975 /* G% */, 17975 /* G& */, 17725 /* G' */, 17975 /* G( */, 17975 /* G) */, 17725 /* G* */, 17975 /* G+ */, 17975 /* G, */, 18225 /* G- */, 17975 /* G. */, 17975 /* G/ */, 17975 /* G0 */, 17975 /* G1 */, 17975 /* G2 */, 17975 /* G3 */, 17975 /* G4 */, 17975 /* G5 */, 17975 /* G6 */, 17975 /* G7 */, 17975 /* G8 */, 17975 /* G9 */, 17975 /* G: */, 17975 /* G; */, 17975 /* G< */, 17975 /* G= */, 17975 /* G> */, 17975 /* G? */, 17975 /* G@ */, 17975 /* GA */, 17975 /* GB */, 17975 /* GC */, 17975 /* GD */, 17975 /* GE */, 17975 /* GF */, 17975 /* GG */, 17975 /* GH */, 17975 /* GI */, 17675 /* GJ */, 17975 /* GK */, 17975 /* GL */, 17975 /* GM */, 17975 /* GN */, 17975 /* GO */, 17975 /* GP */, 17975 /* GQ */, 17975 /* GR */, 17975 /* GS */, 17025 /* GT */, 17975 /* GU */, 17225 /* GV */, 17650 /* GW */, 17725 /* GX */, 16875 /* GY */, 17975 /* GZ */, 17975 /* G[ */, 17975 /* G\ */, 17975 /* G] */, 17975 /* G^ */, 17975 /* G_ */, 17975 /* G` */, 17975 /* Ga */, 17975 /* Gb */, 17975 /* Gc */, 17975 /* Gd */, 17975 /* Ge */, 17975 /* Gf */, 17975 /* Gg */, 17975 /* Gh */, 17975 /* Gi */, 17975 /* Gj */, 17975 /* Gk */, 17975 /* Gl */, 17975 /* Gm */, 17975 /* Gn */, 17975 /* Go */, 17975 /* Gp */, 17975 /* Gq */, 17975 /* Gr */, 17975 /* Gs */, 17975 /* Gt */, 17975 /* Gu */, 17975 /* Gv */, 17975 /* Gw */, 17975 /* Gx */, 17975 /* Gy */, 17975 /* Gz */, 17975 /* G{ */, 17975 /* G| */, 17975 /* G} */, 17975 /* G~ */}, - {18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H! */, 18100 /* H" */, 18100 /* H# */, 18100 /* H$ */, 18100 /* H% */, 18100 /* H& */, 18100 /* H' */, 18100 /* H( */, 18100 /* H) */, 18100 /* H* */, 18100 /* H+ */, 18100 /* H, */, 18100 /* H- */, 18100 /* H. */, 18100 /* H/ */, 18100 /* H0 */, 18100 /* H1 */, 18100 /* H2 */, 18100 /* H3 */, 18100 /* H4 */, 18100 /* H5 */, 18100 /* H6 */, 18100 /* H7 */, 18100 /* H8 */, 18100 /* H9 */, 18100 /* H: */, 18100 /* H; */, 18100 /* H< */, 18100 /* H= */, 18100 /* H> */, 18100 /* H? */, 18100 /* H@ */, 18100 /* HA */, 18100 /* HB */, 18100 /* HC */, 18100 /* HD */, 18100 /* HE */, 18100 /* HF */, 18100 /* HG */, 18100 /* HH */, 18100 /* HI */, 18100 /* HJ */, 18100 /* HK */, 18100 /* HL */, 18100 /* HM */, 18100 /* HN */, 18100 /* HO */, 18100 /* HP */, 18100 /* HQ */, 18100 /* HR */, 18100 /* HS */, 18100 /* HT */, 18100 /* HU */, 18100 /* HV */, 18100 /* HW */, 18100 /* HX */, 18100 /* HY */, 18100 /* HZ */, 18100 /* H[ */, 18100 /* H\ */, 18100 /* H] */, 18100 /* H^ */, 18100 /* H_ */, 18100 /* H` */, 18100 /* Ha */, 18100 /* Hb */, 18100 /* Hc */, 18100 /* Hd */, 18100 /* He */, 18100 /* Hf */, 18100 /* Hg */, 18100 /* Hh */, 18100 /* Hi */, 18100 /* Hj */, 18100 /* Hk */, 18100 /* Hl */, 18100 /* Hm */, 18100 /* Hn */, 18100 /* Ho */, 18100 /* Hp */, 18100 /* Hq */, 18100 /* Hr */, 18100 /* Hs */, 18100 /* Ht */, 18100 /* Hu */, 18100 /* Hv */, 18100 /* Hw */, 18100 /* Hx */, 18100 /* Hy */, 18100 /* Hz */, 18100 /* H{ */, 18100 /* H| */, 18100 /* H} */, 18100 /* H~ */}, - {10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I! */, 10800 /* I" */, 10800 /* I# */, 10800 /* I$ */, 10800 /* I% */, 10800 /* I& */, 10800 /* I' */, 10800 /* I( */, 10800 /* I) */, 10800 /* I* */, 10800 /* I+ */, 10800 /* I, */, 10050 /* I- */, 10800 /* I. */, 10800 /* I/ */, 10800 /* I0 */, 10800 /* I1 */, 10800 /* I2 */, 10800 /* I3 */, 10800 /* I4 */, 10800 /* I5 */, 10800 /* I6 */, 10800 /* I7 */, 10800 /* I8 */, 10800 /* I9 */, 10800 /* I: */, 10800 /* I; */, 10800 /* I< */, 10800 /* I= */, 10800 /* I> */, 10800 /* I? */, 10300 /* I@ */, 10800 /* IA */, 10800 /* IB */, 10800 /* IC */, 10800 /* ID */, 10800 /* IE */, 10800 /* IF */, 10800 /* IG */, 10800 /* IH */, 10800 /* II */, 10800 /* IJ */, 10800 /* IK */, 10800 /* IL */, 10800 /* IM */, 10800 /* IN */, 10800 /* IO */, 10800 /* IP */, 10800 /* IQ */, 10800 /* IR */, 10800 /* IS */, 10700 /* IT */, 10800 /* IU */, 10800 /* IV */, 10800 /* IW */, 10800 /* IX */, 10800 /* IY */, 10800 /* IZ */, 10800 /* I[ */, 10800 /* I\ */, 10800 /* I] */, 10800 /* I^ */, 10800 /* I_ */, 10800 /* I` */, 10800 /* Ia */, 10800 /* Ib */, 10675 /* Ic */, 10675 /* Id */, 10675 /* Ie */, 10800 /* If */, 10800 /* Ig */, 10800 /* Ih */, 10800 /* Ii */, 10800 /* Ij */, 10800 /* Ik */, 10800 /* Il */, 10800 /* Im */, 10800 /* In */, 10675 /* Io */, 10800 /* Ip */, 10675 /* Iq */, 10800 /* Ir */, 10675 /* Is */, 10800 /* It */, 10800 /* Iu */, 10675 /* Iv */, 10800 /* Iw */, 10800 /* Ix */, 10675 /* Iy */, 10800 /* Iz */, 10800 /* I{ */, 10800 /* I| */, 10800 /* I} */, 10800 /* I~ */}, - {13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J! */, 13975 /* J" */, 13975 /* J# */, 13975 /* J$ */, 13975 /* J% */, 13975 /* J& */, 13975 /* J' */, 13975 /* J( */, 13975 /* J) */, 13975 /* J* */, 13975 /* J+ */, 13350 /* J, */, 13975 /* J- */, 13350 /* J. */, 13100 /* J/ */, 13975 /* J0 */, 13975 /* J1 */, 13975 /* J2 */, 13975 /* J3 */, 13975 /* J4 */, 13975 /* J5 */, 13975 /* J6 */, 13975 /* J7 */, 13975 /* J8 */, 13975 /* J9 */, 13975 /* J: */, 13975 /* J; */, 13975 /* J< */, 13975 /* J= */, 13975 /* J> */, 13975 /* J? */, 13975 /* J@ */, 13450 /* JA */, 13975 /* JB */, 13975 /* JC */, 13975 /* JD */, 13975 /* JE */, 13975 /* JF */, 13975 /* JG */, 13975 /* JH */, 13975 /* JI */, 13675 /* JJ */, 13975 /* JK */, 13975 /* JL */, 13975 /* JM */, 13975 /* JN */, 13975 /* JO */, 13975 /* JP */, 13975 /* JQ */, 13975 /* JR */, 13975 /* JS */, 13975 /* JT */, 13975 /* JU */, 13975 /* JV */, 13975 /* JW */, 13600 /* JX */, 13975 /* JY */, 13975 /* JZ */, 13975 /* J[ */, 13975 /* J\ */, 13975 /* J] */, 13975 /* J^ */, 11850 /* J_ */, 13975 /* J` */, 13975 /* Ja */, 13975 /* Jb */, 13975 /* Jc */, 13975 /* Jd */, 13975 /* Je */, 13975 /* Jf */, 13975 /* Jg */, 13975 /* Jh */, 13975 /* Ji */, 13975 /* Jj */, 13975 /* Jk */, 13975 /* Jl */, 13975 /* Jm */, 13975 /* Jn */, 13975 /* Jo */, 13975 /* Jp */, 13975 /* Jq */, 13975 /* Jr */, 13975 /* Js */, 13975 /* Jt */, 13975 /* Ju */, 13975 /* Jv */, 13975 /* Jw */, 13975 /* Jx */, 13975 /* Jy */, 13975 /* Jz */, 13975 /* J{ */, 13975 /* J| */, 13975 /* J} */, 13975 /* J~ */}, - {17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K! */, 17150 /* K" */, 17400 /* K# */, 17400 /* K$ */, 17400 /* K% */, 16650 /* K& */, 17150 /* K' */, 17400 /* K( */, 17650 /* K) */, 17150 /* K* */, 17400 /* K+ */, 17650 /* K, */, 16275 /* K- */, 17650 /* K. */, 17400 /* K/ */, 17400 /* K0 */, 17400 /* K1 */, 17400 /* K2 */, 17400 /* K3 */, 17400 /* K4 */, 17400 /* K5 */, 17400 /* K6 */, 17400 /* K7 */, 17400 /* K8 */, 17400 /* K9 */, 17400 /* K: */, 17400 /* K; */, 17400 /* K< */, 17400 /* K= */, 17400 /* K> */, 17400 /* K? */, 16400 /* K@ */, 17400 /* KA */, 17400 /* KB */, 16400 /* KC */, 17400 /* KD */, 17400 /* KE */, 17400 /* KF */, 16400 /* KG */, 17400 /* KH */, 17400 /* KI */, 16900 /* KJ */, 17400 /* KK */, 17400 /* KL */, 17400 /* KM */, 17400 /* KN */, 16400 /* KO */, 17400 /* KP */, 16400 /* KQ */, 17400 /* KR */, 17150 /* KS */, 16775 /* KT */, 17400 /* KU */, 16775 /* KV */, 17150 /* KW */, 17400 /* KX */, 16900 /* KY */, 17400 /* KZ */, 17400 /* K[ */, 17400 /* K\ */, 17400 /* K] */, 17400 /* K^ */, 17400 /* K_ */, 17400 /* K` */, 17150 /* Ka */, 17400 /* Kb */, 16775 /* Kc */, 16775 /* Kd */, 16775 /* Ke */, 16900 /* Kf */, 17150 /* Kg */, 17400 /* Kh */, 17400 /* Ki */, 17400 /* Kj */, 17400 /* Kk */, 17150 /* Kl */, 17150 /* Km */, 17150 /* Kn */, 16775 /* Ko */, 17150 /* Kp */, 16775 /* Kq */, 17150 /* Kr */, 17400 /* Ks */, 16650 /* Kt */, 16900 /* Ku */, 16900 /* Kv */, 16900 /* Kw */, 17275 /* Kx */, 16900 /* Ky */, 17650 /* Kz */, 17400 /* K{ */, 17400 /* K| */, 17400 /* K} */, 17400 /* K~ */}, - {13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L! */, 11000 /* L" */, 13250 /* L# */, 13250 /* L$ */, 13250 /* L% */, 13125 /* L& */, 11000 /* L' */, 13250 /* L( */, 13250 /* L) */, 11000 /* L* */, 13250 /* L+ */, 13750 /* L, */, 12375 /* L- */, 13750 /* L. */, 13500 /* L/ */, 13250 /* L0 */, 13250 /* L1 */, 13250 /* L2 */, 13250 /* L3 */, 13250 /* L4 */, 13250 /* L5 */, 13250 /* L6 */, 13250 /* L7 */, 13250 /* L8 */, 13250 /* L9 */, 13250 /* L: */, 13250 /* L; */, 13250 /* L< */, 13250 /* L= */, 13250 /* L> */, 11750 /* L? */, 13000 /* L@ */, 13675 /* LA */, 13250 /* LB */, 12250 /* LC */, 13250 /* LD */, 13250 /* LE */, 13250 /* LF */, 12250 /* LG */, 13250 /* LH */, 13250 /* LI */, 13250 /* LJ */, 13250 /* LK */, 13250 /* LL */, 13250 /* LM */, 13250 /* LN */, 12250 /* LO */, 13250 /* LP */, 12250 /* LQ */, 13250 /* LR */, 13250 /* LS */, 11400 /* LT */, 12425 /* LU */, 11450 /* LV */, 12225 /* LW */, 13250 /* LX */, 11025 /* LY */, 13250 /* LZ */, 13250 /* L[ */, 13250 /* L\ */, 13250 /* L] */, 13250 /* L^ */, 13750 /* L_ */, 13250 /* L` */, 13350 /* La */, 13250 /* Lb */, 13000 /* Lc */, 13025 /* Ld */, 13000 /* Le */, 13250 /* Lf */, 13250 /* Lg */, 13250 /* Lh */, 13250 /* Li */, 13250 /* Lj */, 13250 /* Lk */, 13250 /* Ll */, 13250 /* Lm */, 13250 /* Ln */, 13000 /* Lo */, 13250 /* Lp */, 13025 /* Lq */, 13250 /* Lr */, 13250 /* Ls */, 12750 /* Lt */, 13125 /* Lu */, 12000 /* Lv */, 12500 /* Lw */, 13500 /* Lx */, 12375 /* Ly */, 13525 /* Lz */, 13250 /* L{ */, 13250 /* L| */, 13250 /* L} */, 13250 /* L~ */}, - {20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M! */, 20475 /* M" */, 20475 /* M# */, 20475 /* M$ */, 20475 /* M% */, 20475 /* M& */, 20475 /* M' */, 20475 /* M( */, 20475 /* M) */, 20475 /* M* */, 20475 /* M+ */, 20475 /* M, */, 20475 /* M- */, 20475 /* M. */, 20475 /* M/ */, 20475 /* M0 */, 20475 /* M1 */, 20475 /* M2 */, 20475 /* M3 */, 20475 /* M4 */, 20475 /* M5 */, 20475 /* M6 */, 20475 /* M7 */, 20475 /* M8 */, 20475 /* M9 */, 20475 /* M: */, 20475 /* M; */, 20475 /* M< */, 20475 /* M= */, 20475 /* M> */, 20475 /* M? */, 20475 /* M@ */, 20475 /* MA */, 20475 /* MB */, 20475 /* MC */, 20475 /* MD */, 20475 /* ME */, 20475 /* MF */, 20475 /* MG */, 20475 /* MH */, 20475 /* MI */, 20475 /* MJ */, 20475 /* MK */, 20475 /* ML */, 20475 /* MM */, 20475 /* MN */, 20475 /* MO */, 20475 /* MP */, 20475 /* MQ */, 20475 /* MR */, 20475 /* MS */, 20475 /* MT */, 20475 /* MU */, 20475 /* MV */, 20475 /* MW */, 20475 /* MX */, 20475 /* MY */, 20475 /* MZ */, 20475 /* M[ */, 20475 /* M\ */, 20475 /* M] */, 20475 /* M^ */, 20475 /* M_ */, 20475 /* M` */, 20475 /* Ma */, 20475 /* Mb */, 20475 /* Mc */, 20475 /* Md */, 20475 /* Me */, 20475 /* Mf */, 20475 /* Mg */, 20475 /* Mh */, 20475 /* Mi */, 20475 /* Mj */, 20475 /* Mk */, 20475 /* Ml */, 20475 /* Mm */, 20475 /* Mn */, 20475 /* Mo */, 20475 /* Mp */, 20475 /* Mq */, 20475 /* Mr */, 20475 /* Ms */, 20475 /* Mt */, 20475 /* Mu */, 20475 /* Mv */, 20475 /* Mw */, 20475 /* Mx */, 20475 /* My */, 20475 /* Mz */, 20475 /* M{ */, 20475 /* M| */, 20475 /* M} */, 20475 /* M~ */}, - {18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N! */, 18100 /* N" */, 18100 /* N# */, 18100 /* N$ */, 18100 /* N% */, 18100 /* N& */, 18100 /* N' */, 18100 /* N( */, 18100 /* N) */, 18100 /* N* */, 18100 /* N+ */, 18100 /* N, */, 18100 /* N- */, 18100 /* N. */, 18100 /* N/ */, 18100 /* N0 */, 18100 /* N1 */, 18100 /* N2 */, 18100 /* N3 */, 18100 /* N4 */, 18100 /* N5 */, 18100 /* N6 */, 18100 /* N7 */, 18100 /* N8 */, 18100 /* N9 */, 18100 /* N: */, 18100 /* N; */, 18100 /* N< */, 18100 /* N= */, 18100 /* N> */, 18100 /* N? */, 18100 /* N@ */, 18100 /* NA */, 18100 /* NB */, 18100 /* NC */, 18100 /* ND */, 18100 /* NE */, 18100 /* NF */, 18100 /* NG */, 18100 /* NH */, 18100 /* NI */, 18100 /* NJ */, 18100 /* NK */, 18100 /* NL */, 18100 /* NM */, 18100 /* NN */, 18100 /* NO */, 18100 /* NP */, 18100 /* NQ */, 18100 /* NR */, 18100 /* NS */, 18100 /* NT */, 18100 /* NU */, 18100 /* NV */, 18100 /* NW */, 18100 /* NX */, 18100 /* NY */, 18100 /* NZ */, 18100 /* N[ */, 18100 /* N\ */, 18100 /* N] */, 18100 /* N^ */, 18100 /* N_ */, 18100 /* N` */, 18100 /* Na */, 18100 /* Nb */, 18100 /* Nc */, 18100 /* Nd */, 18100 /* Ne */, 18100 /* Nf */, 18100 /* Ng */, 18100 /* Nh */, 18100 /* Ni */, 18100 /* Nj */, 18100 /* Nk */, 18100 /* Nl */, 18100 /* Nm */, 18100 /* Nn */, 18100 /* No */, 18100 /* Np */, 18100 /* Nq */, 18100 /* Nr */, 18100 /* Ns */, 18100 /* Nt */, 18100 /* Nu */, 18100 /* Nv */, 18100 /* Nw */, 18100 /* Nx */, 18100 /* Ny */, 18100 /* Nz */, 18100 /* N{ */, 18100 /* N| */, 18100 /* N} */, 18100 /* N~ */}, - {17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O! */, 17600 /* O" */, 17850 /* O# */, 17850 /* O$ */, 17850 /* O% */, 17725 /* O& */, 17600 /* O' */, 17850 /* O( */, 17850 /* O) */, 17600 /* O* */, 17850 /* O+ */, 16850 /* O, */, 18225 /* O- */, 16850 /* O. */, 16725 /* O/ */, 17850 /* O0 */, 17850 /* O1 */, 17850 /* O2 */, 17850 /* O3 */, 17850 /* O4 */, 17850 /* O5 */, 17850 /* O6 */, 17850 /* O7 */, 17850 /* O8 */, 17850 /* O9 */, 17850 /* O: */, 17850 /* O; */, 17850 /* O< */, 17850 /* O= */, 17850 /* O> */, 17850 /* O? */, 17850 /* O@ */, 17100 /* OA */, 17850 /* OB */, 17850 /* OC */, 17850 /* OD */, 17850 /* OE */, 17850 /* OF */, 17850 /* OG */, 17850 /* OH */, 17850 /* OI */, 17100 /* OJ */, 17850 /* OK */, 17850 /* OL */, 17850 /* OM */, 17850 /* ON */, 17850 /* OO */, 17850 /* OP */, 17850 /* OQ */, 17850 /* OR */, 17750 /* OS */, 17225 /* OT */, 17850 /* OU */, 17075 /* OV */, 17275 /* OW */, 17100 /* OX */, 16600 /* OY */, 17400 /* OZ */, 17850 /* O[ */, 17850 /* O\ */, 17850 /* O] */, 17850 /* O^ */, 15350 /* O_ */, 17850 /* O` */, 17850 /* Oa */, 17850 /* Ob */, 17850 /* Oc */, 17850 /* Od */, 17850 /* Oe */, 17850 /* Of */, 17850 /* Og */, 17850 /* Oh */, 17850 /* Oi */, 17850 /* Oj */, 17850 /* Ok */, 17850 /* Ol */, 17850 /* Om */, 17850 /* On */, 17850 /* Oo */, 17850 /* Op */, 17850 /* Oq */, 17850 /* Or */, 17850 /* Os */, 17850 /* Ot */, 17850 /* Ou */, 17850 /* Ov */, 17850 /* Ow */, 17850 /* Ox */, 17850 /* Oy */, 17850 /* Oz */, 17850 /* O{ */, 17850 /* O| */, 17850 /* O} */, 17850 /* O~ */}, - {16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P! */, 16525 /* P" */, 16400 /* P# */, 16400 /* P$ */, 16400 /* P% */, 15650 /* P& */, 16525 /* P' */, 16400 /* P( */, 16400 /* P) */, 16525 /* P* */, 16400 /* P+ */, 13900 /* P, */, 16400 /* P- */, 13900 /* P. */, 14150 /* P/ */, 16400 /* P0 */, 16400 /* P1 */, 16400 /* P2 */, 16400 /* P3 */, 16400 /* P4 */, 16400 /* P5 */, 16400 /* P6 */, 16400 /* P7 */, 16400 /* P8 */, 16400 /* P9 */, 16400 /* P: */, 16400 /* P; */, 16400 /* P< */, 16400 /* P= */, 16400 /* P> */, 16400 /* P? */, 16150 /* P@ */, 14575 /* PA */, 16400 /* PB */, 16400 /* PC */, 16400 /* PD */, 16400 /* PE */, 16400 /* PF */, 16400 /* PG */, 16400 /* PH */, 16400 /* PI */, 14650 /* PJ */, 16400 /* PK */, 16400 /* PL */, 16400 /* PM */, 16400 /* PN */, 16400 /* PO */, 16400 /* PP */, 16400 /* PQ */, 16400 /* PR */, 16150 /* PS */, 16400 /* PT */, 16400 /* PU */, 16275 /* PV */, 16150 /* PW */, 15525 /* PX */, 15775 /* PY */, 15775 /* PZ */, 16400 /* P[ */, 16400 /* P\ */, 16400 /* P] */, 16400 /* P^ */, 12650 /* P_ */, 16400 /* P` */, 16025 /* Pa */, 16400 /* Pb */, 15900 /* Pc */, 15900 /* Pd */, 15900 /* Pe */, 16400 /* Pf */, 15650 /* Pg */, 16400 /* Ph */, 16400 /* Pi */, 16400 /* Pj */, 16400 /* Pk */, 16400 /* Pl */, 16150 /* Pm */, 16150 /* Pn */, 15900 /* Po */, 16025 /* Pp */, 15900 /* Pq */, 16150 /* Pr */, 16025 /* Ps */, 16400 /* Pt */, 16400 /* Pu */, 16400 /* Pv */, 16525 /* Pw */, 16025 /* Px */, 16400 /* Py */, 16400 /* Pz */, 16400 /* P{ */, 16400 /* P| */, 16400 /* P} */, 16400 /* P~ */}, - {17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q! */, 17600 /* Q" */, 17850 /* Q# */, 17850 /* Q$ */, 17850 /* Q% */, 17725 /* Q& */, 17600 /* Q' */, 17850 /* Q( */, 17850 /* Q) */, 17600 /* Q* */, 17850 /* Q+ */, 16850 /* Q, */, 18225 /* Q- */, 16850 /* Q. */, 16725 /* Q/ */, 17850 /* Q0 */, 17850 /* Q1 */, 17850 /* Q2 */, 17850 /* Q3 */, 17850 /* Q4 */, 17850 /* Q5 */, 17850 /* Q6 */, 17850 /* Q7 */, 17850 /* Q8 */, 17850 /* Q9 */, 17850 /* Q: */, 17850 /* Q; */, 17850 /* Q< */, 17850 /* Q= */, 17850 /* Q> */, 17850 /* Q? */, 17850 /* Q@ */, 17100 /* QA */, 17850 /* QB */, 17850 /* QC */, 17850 /* QD */, 17850 /* QE */, 17850 /* QF */, 17850 /* QG */, 17850 /* QH */, 17850 /* QI */, 17100 /* QJ */, 17850 /* QK */, 17850 /* QL */, 17850 /* QM */, 17850 /* QN */, 17850 /* QO */, 17850 /* QP */, 17850 /* QQ */, 17850 /* QR */, 17750 /* QS */, 17225 /* QT */, 17850 /* QU */, 17075 /* QV */, 17275 /* QW */, 17100 /* QX */, 16600 /* QY */, 17400 /* QZ */, 17850 /* Q[ */, 17850 /* Q\ */, 17850 /* Q] */, 17850 /* Q^ */, 15350 /* Q_ */, 17850 /* Q` */, 17850 /* Qa */, 17850 /* Qb */, 17850 /* Qc */, 17850 /* Qd */, 17850 /* Qe */, 17850 /* Qf */, 17850 /* Qg */, 17850 /* Qh */, 17850 /* Qi */, 17850 /* Qj */, 17850 /* Qk */, 17850 /* Ql */, 17850 /* Qm */, 17850 /* Qn */, 17850 /* Qo */, 17850 /* Qp */, 17850 /* Qq */, 17850 /* Qr */, 17850 /* Qs */, 17850 /* Qt */, 17850 /* Qu */, 17850 /* Qv */, 17850 /* Qw */, 17850 /* Qx */, 17850 /* Qy */, 17850 /* Qz */, 17850 /* Q{ */, 17850 /* Q| */, 17850 /* Q} */, 17850 /* Q~ */}, - {16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R! */, 16850 /* R" */, 16850 /* R# */, 16850 /* R$ */, 16850 /* R% */, 16225 /* R& */, 16850 /* R' */, 16850 /* R( */, 16850 /* R) */, 16850 /* R* */, 16850 /* R+ */, 16850 /* R, */, 16475 /* R- */, 16850 /* R. */, 16350 /* R/ */, 16850 /* R0 */, 16850 /* R1 */, 16850 /* R2 */, 16850 /* R3 */, 16850 /* R4 */, 16850 /* R5 */, 16850 /* R6 */, 16850 /* R7 */, 16850 /* R8 */, 16850 /* R9 */, 16850 /* R: */, 16850 /* R; */, 16850 /* R< */, 16850 /* R= */, 16850 /* R> */, 16850 /* R? */, 16350 /* R@ */, 16850 /* RA */, 16850 /* RB */, 16600 /* RC */, 16850 /* RD */, 16850 /* RE */, 16850 /* RF */, 16600 /* RG */, 16850 /* RH */, 16850 /* RI */, 15975 /* RJ */, 16850 /* RK */, 16850 /* RL */, 16850 /* RM */, 16850 /* RN */, 16600 /* RO */, 16850 /* RP */, 16600 /* RQ */, 16850 /* RR */, 16850 /* RS */, 16250 /* RT */, 16500 /* RU */, 16100 /* RV */, 16500 /* RW */, 16850 /* RX */, 15850 /* RY */, 16850 /* RZ */, 16850 /* R[ */, 16850 /* R\ */, 16850 /* R] */, 16850 /* R^ */, 16850 /* R_ */, 16850 /* R` */, 16600 /* Ra */, 16850 /* Rb */, 16475 /* Rc */, 16475 /* Rd */, 16475 /* Re */, 16850 /* Rf */, 16225 /* Rg */, 16850 /* Rh */, 16850 /* Ri */, 16850 /* Rj */, 16850 /* Rk */, 16850 /* Rl */, 16850 /* Rm */, 16850 /* Rn */, 16475 /* Ro */, 16850 /* Rp */, 16475 /* Rq */, 16850 /* Rr */, 16850 /* Rs */, 16850 /* Rt */, 16850 /* Ru */, 16850 /* Rv */, 16850 /* Rw */, 16850 /* Rx */, 16750 /* Ry */, 16850 /* Rz */, 16850 /* R{ */, 16850 /* R| */, 16850 /* R} */, 16850 /* R~ */}, - {15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S! */, 15600 /* S" */, 15600 /* S# */, 15600 /* S$ */, 15600 /* S% */, 15350 /* S& */, 15600 /* S' */, 15600 /* S( */, 15600 /* S) */, 15600 /* S* */, 15600 /* S+ */, 15600 /* S, */, 15975 /* S- */, 15600 /* S. */, 14725 /* S/ */, 15600 /* S0 */, 15600 /* S1 */, 15600 /* S2 */, 15600 /* S3 */, 15600 /* S4 */, 15600 /* S5 */, 15600 /* S6 */, 15600 /* S7 */, 15600 /* S8 */, 15600 /* S9 */, 15600 /* S: */, 15600 /* S; */, 15600 /* S< */, 15600 /* S= */, 15600 /* S> */, 15600 /* S? */, 15350 /* S@ */, 15600 /* SA */, 15600 /* SB */, 15600 /* SC */, 15600 /* SD */, 15600 /* SE */, 15600 /* SF */, 15600 /* SG */, 15600 /* SH */, 15600 /* SI */, 15600 /* SJ */, 15600 /* SK */, 15600 /* SL */, 15600 /* SM */, 15600 /* SN */, 15600 /* SO */, 15600 /* SP */, 15600 /* SQ */, 15600 /* SR */, 15250 /* SS */, 15025 /* ST */, 15600 /* SU */, 15150 /* SV */, 15150 /* SW */, 15600 /* SX */, 14600 /* SY */, 15600 /* SZ */, 15600 /* S[ */, 15600 /* S\ */, 15600 /* S] */, 15600 /* S^ */, 14100 /* S_ */, 15600 /* S` */, 15600 /* Sa */, 15600 /* Sb */, 15600 /* Sc */, 15600 /* Sd */, 15600 /* Se */, 15600 /* Sf */, 15600 /* Sg */, 15600 /* Sh */, 15600 /* Si */, 15600 /* Sj */, 15600 /* Sk */, 15600 /* Sl */, 15600 /* Sm */, 15600 /* Sn */, 15600 /* So */, 15600 /* Sp */, 15600 /* Sq */, 15600 /* Sr */, 15600 /* Ss */, 15475 /* St */, 15600 /* Su */, 15600 /* Sv */, 15600 /* Sw */, 15600 /* Sx */, 15600 /* Sy */, 15600 /* Sz */, 15600 /* S{ */, 15600 /* S| */, 15600 /* S} */, 15600 /* S~ */}, - {14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T! */, 14975 /* T" */, 14600 /* T# */, 14600 /* T$ */, 14600 /* T% */, 13850 /* T& */, 14975 /* T' */, 14600 /* T( */, 15100 /* T) */, 14975 /* T* */, 14600 /* T+ */, 12850 /* T, */, 13475 /* T- */, 12850 /* T. */, 12100 /* T/ */, 14600 /* T0 */, 14600 /* T1 */, 14600 /* T2 */, 14600 /* T3 */, 14600 /* T4 */, 14600 /* T5 */, 14600 /* T6 */, 14600 /* T7 */, 14600 /* T8 */, 14600 /* T9 */, 13600 /* T: */, 13600 /* T; */, 14600 /* T< */, 14600 /* T= */, 14600 /* T> */, 14600 /* T? */, 13850 /* T@ */, 12975 /* TA */, 14600 /* TB */, 13975 /* TC */, 14600 /* TD */, 14600 /* TE */, 14600 /* TF */, 13975 /* TG */, 14600 /* TH */, 14500 /* TI */, 13225 /* TJ */, 14600 /* TK */, 14600 /* TL */, 14600 /* TM */, 14600 /* TN */, 13975 /* TO */, 14600 /* TP */, 13975 /* TQ */, 14600 /* TR */, 14300 /* TS */, 14975 /* TT */, 14600 /* TU */, 14675 /* TV */, 14675 /* TW */, 14600 /* TX */, 14675 /* TY */, 14600 /* TZ */, 14600 /* T[ */, 14600 /* T\ */, 14600 /* T] */, 14600 /* T^ */, 12600 /* T_ */, 14600 /* T` */, 12850 /* Ta */, 14600 /* Tb */, 12975 /* Tc */, 12975 /* Td */, 12975 /* Te */, 14225 /* Tf */, 12600 /* Tg */, 14600 /* Th */, 14600 /* Ti */, 14600 /* Tj */, 14600 /* Tk */, 14600 /* Tl */, 13475 /* Tm */, 13475 /* Tn */, 12975 /* To */, 13475 /* Tp */, 12975 /* Tq */, 13475 /* Tr */, 12850 /* Ts */, 14600 /* Tt */, 13475 /* Tu */, 13975 /* Tv */, 13725 /* Tw */, 13725 /* Tx */, 13850 /* Ty */, 13350 /* Tz */, 14600 /* T{ */, 14600 /* T| */, 14600 /* T} */, 14600 /* T~ */}, - {17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U! */, 17350 /* U" */, 17350 /* U# */, 17350 /* U$ */, 17350 /* U% */, 17100 /* U& */, 17350 /* U' */, 17350 /* U( */, 17350 /* U) */, 17350 /* U* */, 17350 /* U+ */, 16475 /* U, */, 17350 /* U- */, 16475 /* U. */, 16350 /* U/ */, 17350 /* U0 */, 17350 /* U1 */, 17350 /* U2 */, 17350 /* U3 */, 17350 /* U4 */, 17350 /* U5 */, 17350 /* U6 */, 17350 /* U7 */, 17350 /* U8 */, 17350 /* U9 */, 17350 /* U: */, 17350 /* U; */, 17350 /* U< */, 17350 /* U= */, 17350 /* U> */, 17350 /* U? */, 17350 /* U@ */, 16725 /* UA */, 17350 /* UB */, 17350 /* UC */, 17350 /* UD */, 17350 /* UE */, 17350 /* UF */, 17350 /* UG */, 17350 /* UH */, 17350 /* UI */, 16975 /* UJ */, 17350 /* UK */, 17350 /* UL */, 17350 /* UM */, 17350 /* UN */, 17350 /* UO */, 17350 /* UP */, 17350 /* UQ */, 17350 /* UR */, 17350 /* US */, 17350 /* UT */, 17350 /* UU */, 17350 /* UV */, 17350 /* UW */, 17350 /* UX */, 17350 /* UY */, 17350 /* UZ */, 17350 /* U[ */, 17350 /* U\ */, 17350 /* U] */, 17350 /* U^ */, 15600 /* U_ */, 17350 /* U` */, 17350 /* Ua */, 17350 /* Ub */, 17350 /* Uc */, 17350 /* Ud */, 17350 /* Ue */, 17350 /* Uf */, 17100 /* Ug */, 17350 /* Uh */, 17350 /* Ui */, 17350 /* Uj */, 17350 /* Uk */, 17350 /* Ul */, 17350 /* Um */, 17350 /* Un */, 17350 /* Uo */, 17350 /* Up */, 17350 /* Uq */, 17350 /* Ur */, 17350 /* Us */, 17350 /* Ut */, 17350 /* Uu */, 17350 /* Uv */, 17350 /* Uw */, 17350 /* Ux */, 17350 /* Uy */, 17350 /* Uz */, 17350 /* U{ */, 17350 /* U| */, 17350 /* U} */, 17350 /* U~ */}, - {16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V! */, 16500 /* V" */, 16250 /* V# */, 16250 /* V$ */, 16250 /* V% */, 15375 /* V& */, 16500 /* V' */, 16250 /* V( */, 16750 /* V) */, 16500 /* V* */, 16250 /* V+ */, 14750 /* V, */, 15625 /* V- */, 14750 /* V. */, 14625 /* V/ */, 16250 /* V0 */, 16250 /* V1 */, 16250 /* V2 */, 16250 /* V3 */, 16250 /* V4 */, 16250 /* V5 */, 16250 /* V6 */, 16250 /* V7 */, 16250 /* V8 */, 16250 /* V9 */, 15500 /* V: */, 15500 /* V; */, 16250 /* V< */, 16250 /* V= */, 16250 /* V> */, 16625 /* V? */, 15500 /* V@ */, 14900 /* VA */, 16250 /* VB */, 15475 /* VC */, 16250 /* VD */, 16250 /* VE */, 16250 /* VF */, 15475 /* VG */, 16250 /* VH */, 16250 /* VI */, 14875 /* VJ */, 16250 /* VK */, 16250 /* VL */, 16250 /* VM */, 16250 /* VN */, 15475 /* VO */, 16250 /* VP */, 15475 /* VQ */, 16250 /* VR */, 15500 /* VS */, 16325 /* VT */, 16250 /* VU */, 16375 /* VV */, 16325 /* VW */, 16250 /* VX */, 16250 /* VY */, 16125 /* VZ */, 16250 /* V[ */, 16250 /* V\ */, 16250 /* V] */, 16250 /* V^ */, 14250 /* V_ */, 16250 /* V` */, 15250 /* Va */, 16250 /* Vb */, 15375 /* Vc */, 15375 /* Vd */, 15375 /* Ve */, 16250 /* Vf */, 15250 /* Vg */, 16250 /* Vh */, 16250 /* Vi */, 16125 /* Vj */, 16250 /* Vk */, 16250 /* Vl */, 15750 /* Vm */, 15750 /* Vn */, 15375 /* Vo */, 15750 /* Vp */, 15375 /* Vq */, 15750 /* Vr */, 15625 /* Vs */, 16250 /* Vt */, 15625 /* Vu */, 16000 /* Vv */, 16000 /* Vw */, 16000 /* Vx */, 16125 /* Vy */, 15875 /* Vz */, 16250 /* V{ */, 16250 /* V| */, 16250 /* V} */, 16250 /* V~ */}, - {24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W! */, 24700 /* W" */, 24325 /* W# */, 24325 /* W$ */, 24325 /* W% */, 23450 /* W& */, 24700 /* W' */, 24325 /* W( */, 24575 /* W) */, 24700 /* W* */, 24325 /* W+ */, 23325 /* W, */, 24075 /* W- */, 23325 /* W. */, 23075 /* W/ */, 24325 /* W0 */, 24325 /* W1 */, 24325 /* W2 */, 24325 /* W3 */, 24325 /* W4 */, 24325 /* W5 */, 24325 /* W6 */, 24325 /* W7 */, 24325 /* W8 */, 24325 /* W9 */, 24325 /* W: */, 24325 /* W; */, 24325 /* W< */, 24325 /* W= */, 24325 /* W> */, 24325 /* W? */, 23825 /* W@ */, 23625 /* WA */, 24325 /* WB */, 23750 /* WC */, 24325 /* WD */, 24325 /* WE */, 24325 /* WF */, 23750 /* WG */, 24325 /* WH */, 24325 /* WI */, 23075 /* WJ */, 24325 /* WK */, 24325 /* WL */, 24325 /* WM */, 24325 /* WN */, 23750 /* WO */, 24325 /* WP */, 23750 /* WQ */, 24325 /* WR */, 24325 /* WS */, 24400 /* WT */, 24325 /* WU */, 24400 /* WV */, 24375 /* WW */, 24325 /* WX */, 24325 /* WY */, 24200 /* WZ */, 24325 /* W[ */, 24325 /* W\ */, 24325 /* W] */, 24325 /* W^ */, 23075 /* W_ */, 24325 /* W` */, 23575 /* Wa */, 24325 /* Wb */, 23700 /* Wc */, 23700 /* Wd */, 23700 /* We */, 24325 /* Wf */, 23825 /* Wg */, 24325 /* Wh */, 24325 /* Wi */, 24200 /* Wj */, 24325 /* Wk */, 24325 /* Wl */, 24075 /* Wm */, 24075 /* Wn */, 23700 /* Wo */, 24200 /* Wp */, 23700 /* Wq */, 24075 /* Wr */, 24075 /* Ws */, 24325 /* Wt */, 24200 /* Wu */, 24325 /* Wv */, 24075 /* Ww */, 24075 /* Wx */, 24325 /* Wy */, 24075 /* Wz */, 24325 /* W{ */, 24325 /* W| */, 24325 /* W} */, 24325 /* W~ */}, - {16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X! */, 16825 /* X" */, 16825 /* X# */, 16825 /* X$ */, 16825 /* X% */, 16200 /* X& */, 16825 /* X' */, 16825 /* X( */, 16825 /* X) */, 16825 /* X* */, 16825 /* X+ */, 17075 /* X, */, 16075 /* X- */, 17075 /* X. */, 16825 /* X/ */, 16825 /* X0 */, 16825 /* X1 */, 16825 /* X2 */, 16825 /* X3 */, 16825 /* X4 */, 16825 /* X5 */, 16825 /* X6 */, 16825 /* X7 */, 16825 /* X8 */, 16825 /* X9 */, 16450 /* X: */, 16450 /* X; */, 16825 /* X< */, 16825 /* X= */, 16825 /* X> */, 16575 /* X? */, 16075 /* X@ */, 16950 /* XA */, 16825 /* XB */, 16075 /* XC */, 16825 /* XD */, 16825 /* XE */, 16825 /* XF */, 16075 /* XG */, 16825 /* XH */, 16825 /* XI */, 16325 /* XJ */, 16825 /* XK */, 16825 /* XL */, 16825 /* XM */, 16825 /* XN */, 16075 /* XO */, 16825 /* XP */, 16075 /* XQ */, 16825 /* XR */, 16825 /* XS */, 16825 /* XT */, 16825 /* XU */, 16825 /* XV */, 16825 /* XW */, 16825 /* XX */, 16825 /* XY */, 16825 /* XZ */, 16825 /* X[ */, 16825 /* X\ */, 16825 /* X] */, 16825 /* X^ */, 17325 /* X_ */, 16825 /* X` */, 16700 /* Xa */, 16825 /* Xb */, 16325 /* Xc */, 16325 /* Xd */, 16325 /* Xe */, 16825 /* Xf */, 16825 /* Xg */, 16825 /* Xh */, 16825 /* Xi */, 16825 /* Xj */, 16825 /* Xk */, 16825 /* Xl */, 16825 /* Xm */, 16825 /* Xn */, 16325 /* Xo */, 16825 /* Xp */, 16325 /* Xq */, 16825 /* Xr */, 16575 /* Xs */, 16325 /* Xt */, 16325 /* Xu */, 16450 /* Xv */, 16325 /* Xw */, 16825 /* Xx */, 16575 /* Xy */, 17075 /* Xz */, 16825 /* X{ */, 16825 /* X| */, 16825 /* X} */, 16825 /* X~ */}, - {16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y! */, 16350 /* Y" */, 16225 /* Y# */, 16225 /* Y$ */, 16225 /* Y% */, 14850 /* Y& */, 16350 /* Y' */, 16225 /* Y( */, 16725 /* Y) */, 16350 /* Y* */, 16225 /* Y+ */, 14475 /* Y, */, 14975 /* Y- */, 14475 /* Y. */, 13975 /* Y/ */, 16225 /* Y0 */, 16225 /* Y1 */, 16225 /* Y2 */, 16225 /* Y3 */, 16225 /* Y4 */, 16225 /* Y5 */, 16225 /* Y6 */, 16225 /* Y7 */, 16225 /* Y8 */, 16225 /* Y9 */, 14975 /* Y: */, 14975 /* Y; */, 16225 /* Y< */, 16225 /* Y= */, 16225 /* Y> */, 16225 /* Y? */, 15225 /* Y@ */, 14475 /* YA */, 16225 /* YB */, 14975 /* YC */, 16225 /* YD */, 16225 /* YE */, 16225 /* YF */, 14975 /* YG */, 16225 /* YH */, 16225 /* YI */, 14475 /* YJ */, 16225 /* YK */, 16225 /* YL */, 16225 /* YM */, 16225 /* YN */, 14975 /* YO */, 16225 /* YP */, 14975 /* YQ */, 16225 /* YR */, 15125 /* YS */, 16300 /* YT */, 16225 /* YU */, 16225 /* YV */, 16225 /* YW */, 16225 /* YX */, 16225 /* YY */, 16225 /* YZ */, 16225 /* Y[ */, 16225 /* Y\ */, 16225 /* Y] */, 16225 /* Y^ */, 13975 /* Y_ */, 16225 /* Y` */, 14600 /* Ya */, 15975 /* Yb */, 14725 /* Yc */, 14725 /* Yd */, 14725 /* Ye */, 15600 /* Yf */, 14700 /* Yg */, 15975 /* Yh */, 15975 /* Yi */, 15475 /* Yj */, 15975 /* Yk */, 16225 /* Yl */, 15100 /* Ym */, 15100 /* Yn */, 14725 /* Yo */, 14975 /* Yp */, 14725 /* Yq */, 15100 /* Yr */, 14725 /* Ys */, 15600 /* Yt */, 15225 /* Yu */, 15350 /* Yv */, 15225 /* Yw */, 15225 /* Yx */, 15350 /* Yy */, 14975 /* Yz */, 16225 /* Y{ */, 16225 /* Y| */, 16225 /* Y} */, 16225 /* Y~ */}, - {15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z! */, 15300 /* Z" */, 15175 /* Z# */, 15175 /* Z$ */, 15175 /* Z% */, 14925 /* Z& */, 15300 /* Z' */, 15175 /* Z( */, 15425 /* Z) */, 15300 /* Z* */, 15175 /* Z+ */, 15925 /* Z, */, 14175 /* Z- */, 15925 /* Z. */, 15175 /* Z/ */, 15175 /* Z0 */, 15175 /* Z1 */, 15175 /* Z2 */, 15175 /* Z3 */, 15175 /* Z4 */, 15175 /* Z5 */, 15175 /* Z6 */, 15175 /* Z7 */, 15175 /* Z8 */, 15175 /* Z9 */, 15175 /* Z: */, 15175 /* Z; */, 15175 /* Z< */, 15175 /* Z= */, 15175 /* Z> */, 15175 /* Z? */, 14800 /* Z@ */, 15175 /* ZA */, 15175 /* ZB */, 14725 /* ZC */, 15175 /* ZD */, 15175 /* ZE */, 15175 /* ZF */, 14725 /* ZG */, 15175 /* ZH */, 15175 /* ZI */, 15000 /* ZJ */, 15175 /* ZK */, 15175 /* ZL */, 15175 /* ZM */, 15175 /* ZN */, 14725 /* ZO */, 15175 /* ZP */, 14725 /* ZQ */, 15175 /* ZR */, 15175 /* ZS */, 15175 /* ZT */, 15175 /* ZU */, 14975 /* ZV */, 15050 /* ZW */, 15175 /* ZX */, 14925 /* ZY */, 15175 /* ZZ */, 15175 /* Z[ */, 15175 /* Z\ */, 15175 /* Z] */, 15175 /* Z^ */, 15550 /* Z_ */, 15175 /* Z` */, 15175 /* Za */, 15175 /* Zb */, 15050 /* Zc */, 15050 /* Zd */, 15050 /* Ze */, 15175 /* Zf */, 15175 /* Zg */, 15175 /* Zh */, 15175 /* Zi */, 15175 /* Zj */, 15175 /* Zk */, 15175 /* Zl */, 15175 /* Zm */, 15175 /* Zn */, 15050 /* Zo */, 15175 /* Zp */, 15050 /* Zq */, 15175 /* Zr */, 15175 /* Zs */, 14925 /* Zt */, 15050 /* Zu */, 15175 /* Zv */, 15175 /* Zw */, 15175 /* Zx */, 15050 /* Zy */, 15175 /* Zz */, 15175 /* Z{ */, 15175 /* Z| */, 15175 /* Z} */, 15175 /* Z~ */}, - {8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [! */, 8350 /* [" */, 8350 /* [# */, 8350 /* [$ */, 8350 /* [% */, 8350 /* [& */, 8350 /* [' */, 8350 /* [( */, 8350 /* [) */, 8350 /* [* */, 8350 /* [+ */, 8350 /* [, */, 8350 /* [- */, 8350 /* [. */, 8350 /* [/ */, 8350 /* [0 */, 8350 /* [1 */, 8350 /* [2 */, 8350 /* [3 */, 8350 /* [4 */, 8350 /* [5 */, 8350 /* [6 */, 8350 /* [7 */, 8350 /* [8 */, 8350 /* [9 */, 8350 /* [: */, 8350 /* [; */, 8350 /* [< */, 8350 /* [= */, 8350 /* [> */, 8350 /* [? */, 8350 /* [@ */, 8350 /* [A */, 8350 /* [B */, 8350 /* [C */, 8350 /* [D */, 8350 /* [E */, 8350 /* [F */, 8350 /* [G */, 8350 /* [H */, 8350 /* [I */, 8350 /* [J */, 8350 /* [K */, 8350 /* [L */, 8350 /* [M */, 8350 /* [N */, 8350 /* [O */, 8350 /* [P */, 8350 /* [Q */, 8350 /* [R */, 8350 /* [S */, 8350 /* [T */, 8350 /* [U */, 8350 /* [V */, 8350 /* [W */, 8350 /* [X */, 8350 /* [Y */, 8350 /* [Z */, 8350 /* [[ */, 8350 /* [\ */, 8350 /* [] */, 8350 /* [^ */, 8350 /* [_ */, 8350 /* [` */, 8350 /* [a */, 8350 /* [b */, 8350 /* [c */, 8350 /* [d */, 8350 /* [e */, 8350 /* [f */, 8350 /* [g */, 8350 /* [h */, 8350 /* [i */, 8600 /* [j */, 8350 /* [k */, 8350 /* [l */, 8350 /* [m */, 8350 /* [n */, 8350 /* [o */, 8350 /* [p */, 8350 /* [q */, 8350 /* [r */, 8350 /* [s */, 8350 /* [t */, 8350 /* [u */, 8350 /* [v */, 8350 /* [w */, 8350 /* [x */, 8350 /* [y */, 8350 /* [z */, 8350 /* [{ */, 8350 /* [| */, 8350 /* [} */, 8350 /* [~ */}, - {11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \! */, 11500 /* \" */, 11500 /* \# */, 11500 /* \$ */, 11500 /* \% */, 11500 /* \& */, 11500 /* \' */, 11500 /* \( */, 11500 /* \) */, 11500 /* \* */, 11500 /* \+ */, 11500 /* \, */, 11500 /* \- */, 11500 /* \. */, 11500 /* \/ */, 11500 /* \0 */, 11500 /* \1 */, 11500 /* \2 */, 11500 /* \3 */, 11500 /* \4 */, 11500 /* \5 */, 11500 /* \6 */, 11500 /* \7 */, 11500 /* \8 */, 11500 /* \9 */, 11500 /* \: */, 11500 /* \; */, 11500 /* \< */, 11500 /* \= */, 11500 /* \> */, 11500 /* \? */, 11500 /* \@ */, 11500 /* \A */, 11500 /* \B */, 11500 /* \C */, 11500 /* \D */, 11500 /* \E */, 11500 /* \F */, 11500 /* \G */, 11500 /* \H */, 11500 /* \I */, 11500 /* \J */, 11500 /* \K */, 11500 /* \L */, 11500 /* \M */, 11500 /* \N */, 11500 /* \O */, 11500 /* \P */, 11500 /* \Q */, 11500 /* \R */, 11500 /* \S */, 11500 /* \T */, 11500 /* \U */, 11500 /* \V */, 11500 /* \W */, 11500 /* \X */, 11500 /* \Y */, 11500 /* \Z */, 11500 /* \[ */, 11500 /* \\ */, 11500 /* \] */, 11500 /* \^ */, 11500 /* \_ */, 11500 /* \` */, 11500 /* \a */, 11500 /* \b */, 11500 /* \c */, 11500 /* \d */, 11500 /* \e */, 11500 /* \f */, 11500 /* \g */, 11500 /* \h */, 11500 /* \i */, 11500 /* \j */, 11500 /* \k */, 11500 /* \l */, 11500 /* \m */, 11500 /* \n */, 11500 /* \o */, 11500 /* \p */, 11500 /* \q */, 11500 /* \r */, 11500 /* \s */, 11500 /* \t */, 11500 /* \u */, 11500 /* \v */, 11500 /* \w */, 11500 /* \x */, 11500 /* \y */, 11500 /* \z */, 11500 /* \{ */, 11500 /* \| */, 11500 /* \} */, 11500 /* \~ */}, - {8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ]! */, 8350 /* ]" */, 8350 /* ]# */, 8350 /* ]$ */, 8350 /* ]% */, 8350 /* ]& */, 8350 /* ]' */, 8350 /* ]( */, 8350 /* ]) */, 8350 /* ]* */, 8350 /* ]+ */, 8350 /* ], */, 8350 /* ]- */, 8350 /* ]. */, 8350 /* ]/ */, 8350 /* ]0 */, 8350 /* ]1 */, 8350 /* ]2 */, 8350 /* ]3 */, 8350 /* ]4 */, 8350 /* ]5 */, 8350 /* ]6 */, 8350 /* ]7 */, 8350 /* ]8 */, 8350 /* ]9 */, 8350 /* ]: */, 8350 /* ]; */, 8350 /* ]< */, 8350 /* ]= */, 8350 /* ]> */, 8350 /* ]? */, 8350 /* ]@ */, 8350 /* ]A */, 8350 /* ]B */, 8350 /* ]C */, 8350 /* ]D */, 8350 /* ]E */, 8350 /* ]F */, 8350 /* ]G */, 8350 /* ]H */, 8350 /* ]I */, 8350 /* ]J */, 8350 /* ]K */, 8350 /* ]L */, 8350 /* ]M */, 8350 /* ]N */, 8350 /* ]O */, 8350 /* ]P */, 8350 /* ]Q */, 8350 /* ]R */, 8350 /* ]S */, 8350 /* ]T */, 8350 /* ]U */, 8350 /* ]V */, 8350 /* ]W */, 8350 /* ]X */, 8350 /* ]Y */, 8350 /* ]Z */, 8350 /* ][ */, 8350 /* ]\ */, 8350 /* ]] */, 8350 /* ]^ */, 8350 /* ]_ */, 8350 /* ]` */, 8350 /* ]a */, 8350 /* ]b */, 8350 /* ]c */, 8350 /* ]d */, 8350 /* ]e */, 8350 /* ]f */, 8350 /* ]g */, 8350 /* ]h */, 8350 /* ]i */, 8350 /* ]j */, 8350 /* ]k */, 8350 /* ]l */, 8350 /* ]m */, 8350 /* ]n */, 8350 /* ]o */, 8350 /* ]p */, 8350 /* ]q */, 8350 /* ]r */, 8350 /* ]s */, 8350 /* ]t */, 8350 /* ]u */, 8350 /* ]v */, 8350 /* ]w */, 8350 /* ]x */, 8350 /* ]y */, 8350 /* ]z */, 8350 /* ]{ */, 8350 /* ]| */, 8350 /* ]} */, 8350 /* ]~ */}, - {15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^! */, 15000 /* ^" */, 15000 /* ^# */, 15000 /* ^$ */, 15000 /* ^% */, 15000 /* ^& */, 15000 /* ^' */, 15000 /* ^( */, 15000 /* ^) */, 15000 /* ^* */, 15000 /* ^+ */, 15000 /* ^, */, 15000 /* ^- */, 15000 /* ^. */, 15000 /* ^/ */, 15000 /* ^0 */, 15000 /* ^1 */, 15000 /* ^2 */, 15000 /* ^3 */, 15000 /* ^4 */, 15000 /* ^5 */, 15000 /* ^6 */, 15000 /* ^7 */, 15000 /* ^8 */, 15000 /* ^9 */, 15000 /* ^: */, 15000 /* ^; */, 15000 /* ^< */, 15000 /* ^= */, 15000 /* ^> */, 15000 /* ^? */, 15000 /* ^@ */, 15000 /* ^A */, 15000 /* ^B */, 15000 /* ^C */, 15000 /* ^D */, 15000 /* ^E */, 15000 /* ^F */, 15000 /* ^G */, 15000 /* ^H */, 15000 /* ^I */, 15000 /* ^J */, 15000 /* ^K */, 15000 /* ^L */, 15000 /* ^M */, 15000 /* ^N */, 15000 /* ^O */, 15000 /* ^P */, 15000 /* ^Q */, 15000 /* ^R */, 15000 /* ^S */, 15000 /* ^T */, 15000 /* ^U */, 15000 /* ^V */, 15000 /* ^W */, 15000 /* ^X */, 15000 /* ^Y */, 15000 /* ^Z */, 15000 /* ^[ */, 15000 /* ^\ */, 15000 /* ^] */, 15000 /* ^^ */, 15000 /* ^_ */, 15000 /* ^` */, 15000 /* ^a */, 15000 /* ^b */, 15000 /* ^c */, 15000 /* ^d */, 15000 /* ^e */, 15000 /* ^f */, 15000 /* ^g */, 15000 /* ^h */, 15000 /* ^i */, 15000 /* ^j */, 15000 /* ^k */, 15000 /* ^l */, 15000 /* ^m */, 15000 /* ^n */, 15000 /* ^o */, 15000 /* ^p */, 15000 /* ^q */, 15000 /* ^r */, 15000 /* ^s */, 15000 /* ^t */, 15000 /* ^u */, 15000 /* ^v */, 15000 /* ^w */, 15000 /* ^x */, 15000 /* ^y */, 15000 /* ^z */, 15000 /* ^{ */, 15000 /* ^| */, 15000 /* ^} */, 15000 /* ^~ */}, - {13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _! */, 13900 /* _" */, 13900 /* _# */, 13900 /* _$ */, 13900 /* _% */, 13900 /* _& */, 13900 /* _' */, 13900 /* _( */, 13900 /* _) */, 13900 /* _* */, 13900 /* _+ */, 13900 /* _, */, 13900 /* _- */, 13900 /* _. */, 13900 /* _/ */, 13900 /* _0 */, 13900 /* _1 */, 13900 /* _2 */, 13900 /* _3 */, 13900 /* _4 */, 13900 /* _5 */, 13900 /* _6 */, 13900 /* _7 */, 13900 /* _8 */, 13900 /* _9 */, 13900 /* _: */, 13900 /* _; */, 13900 /* _< */, 13900 /* _= */, 13900 /* _> */, 13900 /* _? */, 13900 /* _@ */, 14275 /* _A */, 13900 /* _B */, 11400 /* _C */, 13900 /* _D */, 13900 /* _E */, 13900 /* _F */, 11400 /* _G */, 13900 /* _H */, 13900 /* _I */, 12650 /* _J */, 13900 /* _K */, 13900 /* _L */, 13900 /* _M */, 13900 /* _N */, 11400 /* _O */, 13900 /* _P */, 11400 /* _Q */, 13900 /* _R */, 12400 /* _S */, 11900 /* _T */, 12150 /* _U */, 11900 /* _V */, 12650 /* _W */, 14400 /* _X */, 11650 /* _Y */, 14525 /* _Z */, 13900 /* _[ */, 13900 /* _\ */, 13900 /* _] */, 13900 /* _^ */, 13900 /* __ */, 13900 /* _` */, 13150 /* _a */, 13900 /* _b */, 12400 /* _c */, 12650 /* _d */, 12400 /* _e */, 13275 /* _f */, 14525 /* _g */, 13900 /* _h */, 13900 /* _i */, 15275 /* _j */, 13900 /* _k */, 12525 /* _l */, 13900 /* _m */, 13900 /* _n */, 12400 /* _o */, 14150 /* _p */, 12650 /* _q */, 13900 /* _r */, 12900 /* _s */, 12275 /* _t */, 13025 /* _u */, 12150 /* _v */, 12650 /* _w */, 14400 /* _x */, 13525 /* _y */, 14025 /* _z */, 13900 /* _{ */, 13900 /* _| */, 13900 /* _} */, 13900 /* _~ */}, - {15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* `! */, 15000 /* `" */, 15000 /* `# */, 15000 /* `$ */, 15000 /* `% */, 15000 /* `& */, 15000 /* `' */, 15000 /* `( */, 15000 /* `) */, 15000 /* `* */, 15000 /* `+ */, 15000 /* `, */, 15000 /* `- */, 15000 /* `. */, 15000 /* `/ */, 15000 /* `0 */, 15000 /* `1 */, 15000 /* `2 */, 15000 /* `3 */, 15000 /* `4 */, 15000 /* `5 */, 15000 /* `6 */, 15000 /* `7 */, 15000 /* `8 */, 15000 /* `9 */, 15000 /* `: */, 15000 /* `; */, 15000 /* `< */, 15000 /* `= */, 15000 /* `> */, 15000 /* `? */, 15000 /* `@ */, 15000 /* `A */, 15000 /* `B */, 15000 /* `C */, 15000 /* `D */, 15000 /* `E */, 15000 /* `F */, 15000 /* `G */, 15000 /* `H */, 15000 /* `I */, 15000 /* `J */, 15000 /* `K */, 15000 /* `L */, 15000 /* `M */, 15000 /* `N */, 15000 /* `O */, 15000 /* `P */, 15000 /* `Q */, 15000 /* `R */, 15000 /* `S */, 15000 /* `T */, 15000 /* `U */, 15000 /* `V */, 15000 /* `W */, 15000 /* `X */, 15000 /* `Y */, 15000 /* `Z */, 15000 /* `[ */, 15000 /* `\ */, 15000 /* `] */, 15000 /* `^ */, 15000 /* `_ */, 15000 /* `` */, 15000 /* `a */, 15000 /* `b */, 15000 /* `c */, 15000 /* `d */, 15000 /* `e */, 15000 /* `f */, 15000 /* `g */, 15000 /* `h */, 15000 /* `i */, 15000 /* `j */, 15000 /* `k */, 15000 /* `l */, 15000 /* `m */, 15000 /* `n */, 15000 /* `o */, 15000 /* `p */, 15000 /* `q */, 15000 /* `r */, 15000 /* `s */, 15000 /* `t */, 15000 /* `u */, 15000 /* `v */, 15000 /* `w */, 15000 /* `x */, 15000 /* `y */, 15000 /* `z */, 15000 /* `{ */, 15000 /* `| */, 15000 /* `} */, 15000 /* `~ */}, - {14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a! */, 13850 /* a" */, 14225 /* a# */, 14225 /* a$ */, 14225 /* a% */, 14225 /* a& */, 13850 /* a' */, 14225 /* a( */, 14225 /* a) */, 13850 /* a* */, 14225 /* a+ */, 14475 /* a, */, 14100 /* a- */, 14475 /* a. */, 14725 /* a/ */, 14225 /* a0 */, 14225 /* a1 */, 14225 /* a2 */, 14225 /* a3 */, 14225 /* a4 */, 14225 /* a5 */, 14225 /* a6 */, 14225 /* a7 */, 14225 /* a8 */, 14225 /* a9 */, 14225 /* a: */, 14225 /* a; */, 14225 /* a< */, 14225 /* a= */, 14225 /* a> */, 14225 /* a? */, 14225 /* a@ */, 14425 /* aA */, 14225 /* aB */, 14225 /* aC */, 14225 /* aD */, 14225 /* aE */, 14225 /* aF */, 14225 /* aG */, 14225 /* aH */, 14225 /* aI */, 14225 /* aJ */, 14225 /* aK */, 14225 /* aL */, 14225 /* aM */, 14225 /* aN */, 14225 /* aO */, 14225 /* aP */, 14225 /* aQ */, 14225 /* aR */, 14225 /* aS */, 12475 /* aT */, 14225 /* aU */, 13475 /* aV */, 13975 /* aW */, 14225 /* aX */, 13100 /* aY */, 14375 /* aZ */, 14225 /* a[ */, 14225 /* a\ */, 14225 /* a] */, 14225 /* a^ */, 14475 /* a_ */, 14225 /* a` */, 14225 /* aa */, 14225 /* ab */, 14225 /* ac */, 14225 /* ad */, 14225 /* ae */, 14225 /* af */, 14225 /* ag */, 14225 /* ah */, 14225 /* ai */, 14225 /* aj */, 14225 /* ak */, 14225 /* al */, 14225 /* am */, 14225 /* an */, 14225 /* ao */, 14225 /* ap */, 14225 /* aq */, 14225 /* ar */, 14225 /* as */, 14075 /* at */, 14225 /* au */, 13975 /* av */, 14075 /* aw */, 14225 /* ax */, 14000 /* ay */, 14225 /* az */, 14225 /* a{ */, 14225 /* a| */, 14225 /* a} */, 14225 /* a~ */}, - {15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b! */, 14700 /* b" */, 15200 /* b# */, 15200 /* b$ */, 15200 /* b% */, 15200 /* b& */, 14700 /* b' */, 15200 /* b( */, 15200 /* b) */, 14700 /* b* */, 15200 /* b+ */, 14825 /* b, */, 15450 /* b- */, 14825 /* b. */, 15200 /* b/ */, 15200 /* b0 */, 15200 /* b1 */, 15200 /* b2 */, 15200 /* b3 */, 15200 /* b4 */, 15200 /* b5 */, 15200 /* b6 */, 15200 /* b7 */, 15200 /* b8 */, 15200 /* b9 */, 15200 /* b: */, 15200 /* b; */, 15200 /* b< */, 15200 /* b= */, 15200 /* b> */, 15200 /* b? */, 15200 /* b@ */, 15200 /* bA */, 15200 /* bB */, 15200 /* bC */, 15200 /* bD */, 15200 /* bE */, 15200 /* bF */, 15200 /* bG */, 15200 /* bH */, 15075 /* bI */, 15200 /* bJ */, 15200 /* bK */, 15200 /* bL */, 15200 /* bM */, 15200 /* bN */, 15200 /* bO */, 15200 /* bP */, 15200 /* bQ */, 15200 /* bR */, 15200 /* bS */, 13575 /* bT */, 15200 /* bU */, 14325 /* bV */, 14575 /* bW */, 14700 /* bX */, 13700 /* bY */, 15075 /* bZ */, 15200 /* b[ */, 15200 /* b\ */, 15200 /* b] */, 15200 /* b^ */, 13950 /* b_ */, 15200 /* b` */, 15200 /* ba */, 15200 /* bb */, 15200 /* bc */, 15200 /* bd */, 15200 /* be */, 15050 /* bf */, 15200 /* bg */, 15200 /* bh */, 15200 /* bi */, 15200 /* bj */, 15200 /* bk */, 15200 /* bl */, 15200 /* bm */, 15200 /* bn */, 15200 /* bo */, 15200 /* bp */, 15200 /* bq */, 15200 /* br */, 15200 /* bs */, 15050 /* bt */, 15200 /* bu */, 15000 /* bv */, 14950 /* bw */, 14800 /* bx */, 14950 /* by */, 15000 /* bz */, 15200 /* b{ */, 15200 /* b| */, 15200 /* b} */, 15200 /* b~ */}, - {12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c! */, 12925 /* c" */, 12925 /* c# */, 12925 /* c$ */, 12925 /* c% */, 12925 /* c& */, 12925 /* c' */, 12925 /* c( */, 12925 /* c) */, 12925 /* c* */, 12925 /* c+ */, 12925 /* c, */, 12925 /* c- */, 12925 /* c. */, 12800 /* c/ */, 12925 /* c0 */, 12925 /* c1 */, 12925 /* c2 */, 12925 /* c3 */, 12925 /* c4 */, 12925 /* c5 */, 12925 /* c6 */, 12925 /* c7 */, 12925 /* c8 */, 12925 /* c9 */, 12925 /* c: */, 12925 /* c; */, 12925 /* c< */, 12925 /* c= */, 12925 /* c> */, 12925 /* c? */, 12925 /* c@ */, 13125 /* cA */, 12925 /* cB */, 12925 /* cC */, 12925 /* cD */, 12925 /* cE */, 12925 /* cF */, 12925 /* cG */, 12925 /* cH */, 12925 /* cI */, 13050 /* cJ */, 12925 /* cK */, 12925 /* cL */, 12925 /* cM */, 12925 /* cN */, 12925 /* cO */, 12925 /* cP */, 12925 /* cQ */, 12925 /* cR */, 12925 /* cS */, 11775 /* cT */, 12925 /* cU */, 12250 /* cV */, 12675 /* cW */, 12925 /* cX */, 11625 /* cY */, 13075 /* cZ */, 12925 /* c[ */, 12925 /* c\ */, 12925 /* c] */, 12925 /* c^ */, 11925 /* c_ */, 12925 /* c` */, 12925 /* ca */, 12925 /* cb */, 12800 /* cc */, 12800 /* cd */, 12800 /* ce */, 12925 /* cf */, 12925 /* cg */, 12925 /* ch */, 12925 /* ci */, 12925 /* cj */, 12925 /* ck */, 12925 /* cl */, 12925 /* cm */, 12925 /* cn */, 12800 /* co */, 12925 /* cp */, 12800 /* cq */, 12925 /* cr */, 12925 /* cs */, 12925 /* ct */, 12925 /* cu */, 12925 /* cv */, 12925 /* cw */, 12925 /* cx */, 12925 /* cy */, 12925 /* cz */, 12925 /* c{ */, 12925 /* c| */, 12925 /* c} */, 12925 /* c~ */}, - {15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d! */, 15200 /* d" */, 15200 /* d# */, 15200 /* d$ */, 15200 /* d% */, 15200 /* d& */, 15200 /* d' */, 15200 /* d( */, 15200 /* d) */, 15200 /* d* */, 15200 /* d+ */, 15200 /* d, */, 15200 /* d- */, 15200 /* d. */, 15200 /* d/ */, 15200 /* d0 */, 15200 /* d1 */, 15200 /* d2 */, 15200 /* d3 */, 15200 /* d4 */, 15200 /* d5 */, 15200 /* d6 */, 15200 /* d7 */, 15200 /* d8 */, 15200 /* d9 */, 15200 /* d: */, 15200 /* d; */, 15200 /* d< */, 15200 /* d= */, 15200 /* d> */, 15200 /* d? */, 15200 /* d@ */, 15200 /* dA */, 15200 /* dB */, 15200 /* dC */, 15200 /* dD */, 15200 /* dE */, 15200 /* dF */, 15200 /* dG */, 15200 /* dH */, 15200 /* dI */, 15200 /* dJ */, 15200 /* dK */, 15200 /* dL */, 15200 /* dM */, 15200 /* dN */, 15200 /* dO */, 15200 /* dP */, 15200 /* dQ */, 15200 /* dR */, 15200 /* dS */, 15200 /* dT */, 15200 /* dU */, 15200 /* dV */, 15200 /* dW */, 15200 /* dX */, 15200 /* dY */, 15200 /* dZ */, 15200 /* d[ */, 15200 /* d\ */, 15200 /* d] */, 15200 /* d^ */, 15200 /* d_ */, 15200 /* d` */, 15200 /* da */, 15200 /* db */, 15200 /* dc */, 15200 /* dd */, 15200 /* de */, 15200 /* df */, 15200 /* dg */, 15200 /* dh */, 15200 /* di */, 15200 /* dj */, 15200 /* dk */, 15200 /* dl */, 15200 /* dm */, 15200 /* dn */, 15200 /* do */, 15200 /* dp */, 15200 /* dq */, 15200 /* dr */, 15200 /* ds */, 15200 /* dt */, 15200 /* du */, 15200 /* dv */, 15200 /* dw */, 15200 /* dx */, 15200 /* dy */, 15200 /* dz */, 15200 /* d{ */, 15200 /* d| */, 15200 /* d} */, 15200 /* d~ */}, - {14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e! */, 13550 /* e" */, 14050 /* e# */, 14050 /* e$ */, 14050 /* e% */, 14050 /* e& */, 13550 /* e' */, 14050 /* e( */, 14050 /* e) */, 13550 /* e* */, 14050 /* e+ */, 13675 /* e, */, 14300 /* e- */, 13675 /* e. */, 14050 /* e/ */, 14050 /* e0 */, 14050 /* e1 */, 14050 /* e2 */, 14050 /* e3 */, 14050 /* e4 */, 14050 /* e5 */, 14050 /* e6 */, 14050 /* e7 */, 14050 /* e8 */, 14050 /* e9 */, 14050 /* e: */, 14050 /* e; */, 14050 /* e< */, 14050 /* e= */, 14050 /* e> */, 14050 /* e? */, 14050 /* e@ */, 14050 /* eA */, 14050 /* eB */, 14050 /* eC */, 14050 /* eD */, 14050 /* eE */, 14050 /* eF */, 14050 /* eG */, 14050 /* eH */, 13925 /* eI */, 14050 /* eJ */, 14050 /* eK */, 14050 /* eL */, 14050 /* eM */, 14050 /* eN */, 14050 /* eO */, 14050 /* eP */, 14050 /* eQ */, 14050 /* eR */, 13800 /* eS */, 12425 /* eT */, 14050 /* eU */, 13175 /* eV */, 13550 /* eW */, 13550 /* eX */, 12550 /* eY */, 13925 /* eZ */, 14050 /* e[ */, 14050 /* e\ */, 14050 /* e] */, 14050 /* e^ */, 12550 /* e_ */, 14050 /* e` */, 14050 /* ea */, 14050 /* eb */, 14050 /* ec */, 14050 /* ed */, 14050 /* ee */, 14050 /* ef */, 14050 /* eg */, 14050 /* eh */, 14050 /* ei */, 14050 /* ej */, 14050 /* ek */, 14050 /* el */, 14050 /* em */, 14050 /* en */, 14050 /* eo */, 14050 /* ep */, 14050 /* eq */, 14050 /* er */, 14050 /* es */, 14050 /* et */, 14050 /* eu */, 13800 /* ev */, 13925 /* ew */, 13650 /* ex */, 13875 /* ey */, 13925 /* ez */, 14050 /* e{ */, 14050 /* e| */, 14050 /* e} */, 14050 /* e~ */}, - {9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9525 /* f! */, 9775 /* f" */, 9025 /* f# */, 9025 /* f$ */, 9025 /* f% */, 8650 /* f& */, 9775 /* f' */, 9025 /* f( */, 9650 /* f) */, 9775 /* f* */, 9025 /* f+ */, 8275 /* f, */, 9025 /* f- */, 8275 /* f. */, 8525 /* f/ */, 9025 /* f0 */, 9025 /* f1 */, 9025 /* f2 */, 9025 /* f3 */, 9025 /* f4 */, 9025 /* f5 */, 9025 /* f6 */, 9025 /* f7 */, 9025 /* f8 */, 9025 /* f9 */, 9025 /* f: */, 9025 /* f; */, 9025 /* f< */, 9025 /* f= */, 9025 /* f> */, 9775 /* f? */, 9025 /* f@ */, 8875 /* fA */, 9025 /* fB */, 9400 /* fC */, 9025 /* fD */, 9025 /* fE */, 9025 /* fF */, 9400 /* fG */, 9025 /* fH */, 9025 /* fI */, 8450 /* fJ */, 9025 /* fK */, 9025 /* fL */, 9025 /* fM */, 9025 /* fN */, 9400 /* fO */, 9025 /* fP */, 9400 /* fQ */, 9025 /* fR */, 9025 /* fS */, 9650 /* fT */, 9025 /* fU */, 9900 /* fV */, 9650 /* fW */, 9375 /* fX */, 9775 /* fY */, 9075 /* fZ */, 9025 /* f[ */, 9025 /* f\ */, 9400 /* f] */, 9025 /* f^ */, 7475 /* f_ */, 9025 /* f` */, 9025 /* fa */, 9025 /* fb */, 8925 /* fc */, 8925 /* fd */, 8925 /* fe */, 9125 /* ff */, 8925 /* fg */, 9025 /* fh */, 9025 /* fi */, 9025 /* fj */, 9025 /* fk */, 9025 /* fl */, 9025 /* fm */, 9025 /* fn */, 8925 /* fo */, 9025 /* fp */, 8925 /* fq */, 9025 /* fr */, 9025 /* fs */, 9025 /* ft */, 9025 /* fu */, 9275 /* fv */, 9025 /* fw */, 9025 /* fx */, 9275 /* fy */, 9025 /* fz */, 9025 /* f{ */, 9025 /* f| */, 9400 /* f} */, 9025 /* f~ */}, - {13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g! */, 13925 /* g" */, 13800 /* g# */, 13800 /* g$ */, 13800 /* g% */, 13675 /* g& */, 13925 /* g' */, 13800 /* g( */, 14475 /* g) */, 13925 /* g* */, 13800 /* g+ */, 13950 /* g, */, 13800 /* g- */, 13950 /* g. */, 14375 /* g/ */, 13800 /* g0 */, 13800 /* g1 */, 13800 /* g2 */, 13800 /* g3 */, 13800 /* g4 */, 13800 /* g5 */, 13800 /* g6 */, 13800 /* g7 */, 13800 /* g8 */, 13800 /* g9 */, 13800 /* g: */, 13800 /* g; */, 13800 /* g< */, 13800 /* g= */, 13800 /* g> */, 13800 /* g? */, 13800 /* g@ */, 14425 /* gA */, 13800 /* gB */, 13800 /* gC */, 13800 /* gD */, 13800 /* gE */, 13800 /* gF */, 13800 /* gG */, 13800 /* gH */, 13800 /* gI */, 13575 /* gJ */, 13800 /* gK */, 13800 /* gL */, 13800 /* gM */, 13800 /* gN */, 13800 /* gO */, 13800 /* gP */, 13800 /* gQ */, 13800 /* gR */, 13800 /* gS */, 13575 /* gT */, 13800 /* gU */, 13625 /* gV */, 13800 /* gW */, 14075 /* gX */, 13600 /* gY */, 14050 /* gZ */, 13800 /* g[ */, 13800 /* g\ */, 14100 /* g] */, 13800 /* g^ */, 15200 /* g_ */, 13800 /* g` */, 13750 /* ga */, 13800 /* gb */, 13650 /* gc */, 13650 /* gd */, 13650 /* ge */, 13800 /* gf */, 13975 /* gg */, 13800 /* gh */, 13800 /* gi */, 14500 /* gj */, 13800 /* gk */, 13800 /* gl */, 13800 /* gm */, 13800 /* gn */, 13650 /* go */, 13800 /* gp */, 13650 /* gq */, 13800 /* gr */, 13800 /* gs */, 13800 /* gt */, 13700 /* gu */, 13800 /* gv */, 13800 /* gw */, 13800 /* gx */, 13925 /* gy */, 13800 /* gz */, 13800 /* g{ */, 13800 /* g| */, 14100 /* g} */, 13800 /* g~ */}, - {14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h! */, 14525 /* h" */, 14900 /* h# */, 14900 /* h$ */, 14900 /* h% */, 14900 /* h& */, 14525 /* h' */, 14900 /* h( */, 14900 /* h) */, 14525 /* h* */, 14900 /* h+ */, 14900 /* h, */, 14900 /* h- */, 14900 /* h. */, 14900 /* h/ */, 14900 /* h0 */, 14900 /* h1 */, 14900 /* h2 */, 14900 /* h3 */, 14900 /* h4 */, 14900 /* h5 */, 14900 /* h6 */, 14900 /* h7 */, 14900 /* h8 */, 14900 /* h9 */, 14900 /* h: */, 14900 /* h; */, 14900 /* h< */, 14900 /* h= */, 14900 /* h> */, 14900 /* h? */, 14900 /* h@ */, 14900 /* hA */, 14900 /* hB */, 14900 /* hC */, 14900 /* hD */, 14900 /* hE */, 14900 /* hF */, 14900 /* hG */, 14900 /* hH */, 14900 /* hI */, 14900 /* hJ */, 14900 /* hK */, 14900 /* hL */, 14900 /* hM */, 14900 /* hN */, 14900 /* hO */, 14900 /* hP */, 14900 /* hQ */, 14900 /* hR */, 14900 /* hS */, 13525 /* hT */, 14900 /* hU */, 14025 /* hV */, 14275 /* hW */, 14900 /* hX */, 13525 /* hY */, 14900 /* hZ */, 14900 /* h[ */, 14900 /* h\ */, 14900 /* h] */, 14900 /* h^ */, 14900 /* h_ */, 14900 /* h` */, 14900 /* ha */, 14900 /* hb */, 14900 /* hc */, 14900 /* hd */, 14900 /* he */, 14900 /* hf */, 14900 /* hg */, 14900 /* hh */, 14900 /* hi */, 14900 /* hj */, 14900 /* hk */, 14900 /* hl */, 14900 /* hm */, 14900 /* hn */, 14900 /* ho */, 14900 /* hp */, 14900 /* hq */, 14900 /* hr */, 14900 /* hs */, 14900 /* ht */, 14900 /* hu */, 14700 /* hv */, 14750 /* hw */, 14900 /* hx */, 14700 /* hy */, 14900 /* hz */, 14900 /* h{ */, 14900 /* h| */, 14900 /* h} */, 14900 /* h~ */}, - {7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i! */, 7150 /* i" */, 7150 /* i# */, 7150 /* i$ */, 7150 /* i% */, 7150 /* i& */, 7150 /* i' */, 7150 /* i( */, 7150 /* i) */, 7150 /* i* */, 7150 /* i+ */, 7150 /* i, */, 7150 /* i- */, 7150 /* i. */, 7150 /* i/ */, 7150 /* i0 */, 7150 /* i1 */, 7150 /* i2 */, 7150 /* i3 */, 7150 /* i4 */, 7150 /* i5 */, 7150 /* i6 */, 7150 /* i7 */, 7150 /* i8 */, 7150 /* i9 */, 7150 /* i: */, 7150 /* i; */, 7150 /* i< */, 7150 /* i= */, 7150 /* i> */, 7150 /* i? */, 7150 /* i@ */, 7150 /* iA */, 7150 /* iB */, 7150 /* iC */, 7150 /* iD */, 7150 /* iE */, 7150 /* iF */, 7150 /* iG */, 7150 /* iH */, 7150 /* iI */, 6900 /* iJ */, 7150 /* iK */, 7150 /* iL */, 7150 /* iM */, 7150 /* iN */, 7150 /* iO */, 7150 /* iP */, 7150 /* iQ */, 7150 /* iR */, 7150 /* iS */, 7150 /* iT */, 7150 /* iU */, 7150 /* iV */, 7150 /* iW */, 7150 /* iX */, 6900 /* iY */, 7150 /* iZ */, 7150 /* i[ */, 7150 /* i\ */, 7150 /* i] */, 7150 /* i^ */, 7150 /* i_ */, 7150 /* i` */, 7150 /* ia */, 7150 /* ib */, 7150 /* ic */, 7150 /* id */, 7150 /* ie */, 7150 /* if */, 7150 /* ig */, 7150 /* ih */, 7150 /* ii */, 7150 /* ij */, 7150 /* ik */, 7150 /* il */, 7150 /* im */, 7150 /* in */, 7150 /* io */, 7150 /* ip */, 7150 /* iq */, 7150 /* ir */, 7150 /* is */, 7150 /* it */, 7150 /* iu */, 7150 /* iv */, 7150 /* iw */, 7150 /* ix */, 7150 /* iy */, 7150 /* iz */, 7150 /* i{ */, 7150 /* i| */, 7150 /* i} */, 7150 /* i~ */}, - {7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j! */, 7150 /* j" */, 7150 /* j# */, 7150 /* j$ */, 7150 /* j% */, 7150 /* j& */, 7150 /* j' */, 7150 /* j( */, 7150 /* j) */, 7150 /* j* */, 7150 /* j+ */, 7150 /* j, */, 7150 /* j- */, 7150 /* j. */, 7150 /* j/ */, 7150 /* j0 */, 7150 /* j1 */, 7150 /* j2 */, 7150 /* j3 */, 7150 /* j4 */, 7150 /* j5 */, 7150 /* j6 */, 7150 /* j7 */, 7150 /* j8 */, 7150 /* j9 */, 7150 /* j: */, 7150 /* j; */, 7150 /* j< */, 7150 /* j= */, 7150 /* j> */, 7150 /* j? */, 7150 /* j@ */, 7150 /* jA */, 7150 /* jB */, 7150 /* jC */, 7150 /* jD */, 7150 /* jE */, 7150 /* jF */, 7150 /* jG */, 7150 /* jH */, 7150 /* jI */, 7150 /* jJ */, 7150 /* jK */, 7150 /* jL */, 7150 /* jM */, 7150 /* jN */, 7150 /* jO */, 7150 /* jP */, 7150 /* jQ */, 7150 /* jR */, 7150 /* jS */, 6150 /* jT */, 7150 /* jU */, 6525 /* jV */, 6900 /* jW */, 7150 /* jX */, 7150 /* jY */, 7150 /* jZ */, 7150 /* j[ */, 7150 /* j\ */, 7150 /* j] */, 7150 /* j^ */, 7150 /* j_ */, 7150 /* j` */, 7150 /* ja */, 7150 /* jb */, 7150 /* jc */, 7150 /* jd */, 7150 /* je */, 7150 /* jf */, 7150 /* jg */, 7150 /* jh */, 7150 /* ji */, 7150 /* jj */, 7150 /* jk */, 7150 /* jl */, 7150 /* jm */, 7150 /* jn */, 7150 /* jo */, 7150 /* jp */, 7150 /* jq */, 7150 /* jr */, 7150 /* js */, 7150 /* jt */, 7150 /* ju */, 7150 /* jv */, 7150 /* jw */, 7150 /* jx */, 7150 /* jy */, 7150 /* jz */, 7150 /* j{ */, 7150 /* j| */, 7150 /* j} */, 7150 /* j~ */}, - {14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k! */, 14425 /* k" */, 14425 /* k# */, 14425 /* k$ */, 14425 /* k% */, 14175 /* k& */, 14425 /* k' */, 14425 /* k( */, 14425 /* k) */, 14425 /* k* */, 14425 /* k+ */, 14425 /* k, */, 13550 /* k- */, 14425 /* k. */, 14425 /* k/ */, 14425 /* k0 */, 14425 /* k1 */, 14425 /* k2 */, 14425 /* k3 */, 14425 /* k4 */, 14425 /* k5 */, 14425 /* k6 */, 14425 /* k7 */, 14425 /* k8 */, 14425 /* k9 */, 14425 /* k: */, 14425 /* k; */, 14425 /* k< */, 14425 /* k= */, 14425 /* k> */, 14425 /* k? */, 14175 /* k@ */, 14800 /* kA */, 14425 /* kB */, 14100 /* kC */, 14425 /* kD */, 14425 /* kE */, 14425 /* kF */, 14100 /* kG */, 14425 /* kH */, 14425 /* kI */, 14300 /* kJ */, 14425 /* kK */, 14425 /* kL */, 14425 /* kM */, 14425 /* kN */, 14100 /* kO */, 14425 /* kP */, 14100 /* kQ */, 14425 /* kR */, 14250 /* kS */, 13625 /* kT */, 14425 /* kU */, 13975 /* kV */, 14250 /* kW */, 14425 /* kX */, 13275 /* kY */, 14825 /* kZ */, 14425 /* k[ */, 14425 /* k\ */, 14425 /* k] */, 14425 /* k^ */, 14925 /* k_ */, 14425 /* k` */, 14425 /* ka */, 14425 /* kb */, 13750 /* kc */, 13925 /* kd */, 13750 /* ke */, 14425 /* kf */, 14425 /* kg */, 14425 /* kh */, 14425 /* ki */, 14425 /* kj */, 14425 /* kk */, 14425 /* kl */, 14425 /* km */, 14425 /* kn */, 13750 /* ko */, 14425 /* kp */, 13925 /* kq */, 14425 /* kr */, 14175 /* ks */, 14175 /* kt */, 14175 /* ku */, 14125 /* kv */, 14300 /* kw */, 14425 /* kx */, 14300 /* ky */, 14425 /* kz */, 14425 /* k{ */, 14425 /* k| */, 14425 /* k} */, 14425 /* k~ */}, - {7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l! */, 7575 /* l" */, 7575 /* l# */, 7575 /* l$ */, 7575 /* l% */, 7575 /* l& */, 7575 /* l' */, 7575 /* l( */, 7575 /* l) */, 7575 /* l* */, 7575 /* l+ */, 7825 /* l, */, 7325 /* l- */, 7825 /* l. */, 7575 /* l/ */, 7575 /* l0 */, 7575 /* l1 */, 7575 /* l2 */, 7575 /* l3 */, 7575 /* l4 */, 7575 /* l5 */, 7575 /* l6 */, 7575 /* l7 */, 7575 /* l8 */, 7575 /* l9 */, 7575 /* l: */, 7575 /* l; */, 7575 /* l< */, 7575 /* l= */, 7575 /* l> */, 7575 /* l? */, 7575 /* l@ */, 8175 /* lA */, 7575 /* lB */, 7575 /* lC */, 7575 /* lD */, 7575 /* lE */, 7575 /* lF */, 7575 /* lG */, 7575 /* lH */, 7575 /* lI */, 7825 /* lJ */, 7575 /* lK */, 7575 /* lL */, 7575 /* lM */, 7575 /* lN */, 7575 /* lO */, 7575 /* lP */, 7575 /* lQ */, 7575 /* lR */, 7575 /* lS */, 7250 /* lT */, 7575 /* lU */, 7450 /* lV */, 7575 /* lW */, 7950 /* lX */, 7200 /* lY */, 7950 /* lZ */, 7575 /* l[ */, 7575 /* l\ */, 7575 /* l] */, 7575 /* l^ */, 8200 /* l_ */, 7575 /* l` */, 7575 /* la */, 7575 /* lb */, 7575 /* lc */, 7575 /* ld */, 7575 /* le */, 7575 /* lf */, 7575 /* lg */, 7575 /* lh */, 7575 /* li */, 7575 /* lj */, 7575 /* lk */, 7375 /* ll */, 7575 /* lm */, 7575 /* ln */, 7575 /* lo */, 7575 /* lp */, 7575 /* lq */, 7575 /* lr */, 7575 /* ls */, 7450 /* lt */, 7575 /* lu */, 7425 /* lv */, 7475 /* lw */, 7575 /* lx */, 7425 /* ly */, 7725 /* lz */, 7575 /* l{ */, 7575 /* l| */, 7575 /* l} */, 7575 /* l~ */}, - {22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m! */, 21975 /* m" */, 22350 /* m# */, 22350 /* m$ */, 22350 /* m% */, 22350 /* m& */, 21975 /* m' */, 22350 /* m( */, 22350 /* m) */, 21975 /* m* */, 22350 /* m+ */, 22350 /* m, */, 22350 /* m- */, 22350 /* m. */, 22350 /* m/ */, 22350 /* m0 */, 22350 /* m1 */, 22350 /* m2 */, 22350 /* m3 */, 22350 /* m4 */, 22350 /* m5 */, 22350 /* m6 */, 22350 /* m7 */, 22350 /* m8 */, 22350 /* m9 */, 22350 /* m: */, 22350 /* m; */, 22350 /* m< */, 22350 /* m= */, 22350 /* m> */, 22350 /* m? */, 22350 /* m@ */, 22350 /* mA */, 22350 /* mB */, 22350 /* mC */, 22350 /* mD */, 22350 /* mE */, 22350 /* mF */, 22350 /* mG */, 22350 /* mH */, 22350 /* mI */, 22350 /* mJ */, 22350 /* mK */, 22350 /* mL */, 22350 /* mM */, 22350 /* mN */, 22350 /* mO */, 22350 /* mP */, 22350 /* mQ */, 22350 /* mR */, 22350 /* mS */, 20975 /* mT */, 22350 /* mU */, 21475 /* mV */, 21725 /* mW */, 22350 /* mX */, 20975 /* mY */, 22350 /* mZ */, 22350 /* m[ */, 22350 /* m\ */, 22350 /* m] */, 22350 /* m^ */, 22350 /* m_ */, 22350 /* m` */, 22350 /* ma */, 22350 /* mb */, 22350 /* mc */, 22350 /* md */, 22350 /* me */, 22350 /* mf */, 22350 /* mg */, 22350 /* mh */, 22350 /* mi */, 22350 /* mj */, 22350 /* mk */, 22350 /* ml */, 22350 /* mm */, 22350 /* mn */, 22350 /* mo */, 22350 /* mp */, 22350 /* mq */, 22350 /* mr */, 22350 /* ms */, 22350 /* mt */, 22350 /* mu */, 22150 /* mv */, 22200 /* mw */, 22350 /* mx */, 22150 /* my */, 22350 /* mz */, 22350 /* m{ */, 22350 /* m| */, 22350 /* m} */, 22350 /* m~ */}, - {14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n! */, 14525 /* n" */, 14900 /* n# */, 14900 /* n$ */, 14900 /* n% */, 14900 /* n& */, 14525 /* n' */, 14900 /* n( */, 14900 /* n) */, 14525 /* n* */, 14900 /* n+ */, 14900 /* n, */, 14900 /* n- */, 14900 /* n. */, 14900 /* n/ */, 14900 /* n0 */, 14900 /* n1 */, 14900 /* n2 */, 14900 /* n3 */, 14900 /* n4 */, 14900 /* n5 */, 14900 /* n6 */, 14900 /* n7 */, 14900 /* n8 */, 14900 /* n9 */, 14900 /* n: */, 14900 /* n; */, 14900 /* n< */, 14900 /* n= */, 14900 /* n> */, 14900 /* n? */, 14900 /* n@ */, 14900 /* nA */, 14900 /* nB */, 14900 /* nC */, 14900 /* nD */, 14900 /* nE */, 14900 /* nF */, 14900 /* nG */, 14900 /* nH */, 14900 /* nI */, 14900 /* nJ */, 14900 /* nK */, 14900 /* nL */, 14900 /* nM */, 14900 /* nN */, 14900 /* nO */, 14900 /* nP */, 14900 /* nQ */, 14900 /* nR */, 14900 /* nS */, 13525 /* nT */, 14900 /* nU */, 14025 /* nV */, 14275 /* nW */, 14900 /* nX */, 13525 /* nY */, 14900 /* nZ */, 14900 /* n[ */, 14900 /* n\ */, 14900 /* n] */, 14900 /* n^ */, 14900 /* n_ */, 14900 /* n` */, 14900 /* na */, 14900 /* nb */, 14900 /* nc */, 14900 /* nd */, 14900 /* ne */, 14900 /* nf */, 14900 /* ng */, 14900 /* nh */, 14900 /* ni */, 14900 /* nj */, 14900 /* nk */, 14900 /* nl */, 14900 /* nm */, 14900 /* nn */, 14900 /* no */, 14900 /* np */, 14900 /* nq */, 14900 /* nr */, 14900 /* ns */, 14900 /* nt */, 14900 /* nu */, 14700 /* nv */, 14750 /* nw */, 14900 /* nx */, 14700 /* ny */, 14900 /* nz */, 14900 /* n{ */, 14900 /* n| */, 14900 /* n} */, 14900 /* n~ */}, - {14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o! */, 13600 /* o" */, 14100 /* o# */, 14100 /* o$ */, 14100 /* o% */, 14100 /* o& */, 13600 /* o' */, 14100 /* o( */, 14100 /* o) */, 13600 /* o* */, 14100 /* o+ */, 13725 /* o, */, 14350 /* o- */, 13725 /* o. */, 14100 /* o/ */, 14100 /* o0 */, 14100 /* o1 */, 14100 /* o2 */, 14100 /* o3 */, 14100 /* o4 */, 14100 /* o5 */, 14100 /* o6 */, 14100 /* o7 */, 14100 /* o8 */, 14100 /* o9 */, 14100 /* o: */, 14100 /* o; */, 14100 /* o< */, 14100 /* o= */, 14100 /* o> */, 14100 /* o? */, 14100 /* o@ */, 14100 /* oA */, 14100 /* oB */, 14100 /* oC */, 14100 /* oD */, 14100 /* oE */, 14100 /* oF */, 14100 /* oG */, 14100 /* oH */, 13975 /* oI */, 14100 /* oJ */, 14100 /* oK */, 14100 /* oL */, 14100 /* oM */, 14100 /* oN */, 14100 /* oO */, 14100 /* oP */, 14100 /* oQ */, 14100 /* oR */, 14100 /* oS */, 12475 /* oT */, 14100 /* oU */, 13225 /* oV */, 13475 /* oW */, 13600 /* oX */, 12600 /* oY */, 13975 /* oZ */, 14100 /* o[ */, 14100 /* o\ */, 14100 /* o] */, 14100 /* o^ */, 12600 /* o_ */, 14100 /* o` */, 14100 /* oa */, 14100 /* ob */, 14100 /* oc */, 14100 /* od */, 14100 /* oe */, 13950 /* of */, 14100 /* og */, 14100 /* oh */, 14100 /* oi */, 14100 /* oj */, 14100 /* ok */, 14100 /* ol */, 14100 /* om */, 14100 /* on */, 14100 /* oo */, 14100 /* op */, 14100 /* oq */, 14100 /* or */, 14100 /* os */, 13950 /* ot */, 14100 /* ou */, 13900 /* ov */, 13850 /* ow */, 13700 /* ox */, 13850 /* oy */, 13900 /* oz */, 14100 /* o{ */, 14100 /* o| */, 14100 /* o} */, 14100 /* o~ */}, - {15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p! */, 14700 /* p" */, 15200 /* p# */, 15200 /* p$ */, 15200 /* p% */, 15200 /* p& */, 14700 /* p' */, 15200 /* p( */, 15200 /* p) */, 14700 /* p* */, 15200 /* p+ */, 14825 /* p, */, 15450 /* p- */, 14825 /* p. */, 15200 /* p/ */, 15200 /* p0 */, 15200 /* p1 */, 15200 /* p2 */, 15200 /* p3 */, 15200 /* p4 */, 15200 /* p5 */, 15200 /* p6 */, 15200 /* p7 */, 15200 /* p8 */, 15200 /* p9 */, 15200 /* p: */, 15200 /* p; */, 15200 /* p< */, 15200 /* p= */, 15200 /* p> */, 15200 /* p? */, 15200 /* p@ */, 15200 /* pA */, 15200 /* pB */, 15200 /* pC */, 15200 /* pD */, 15200 /* pE */, 15200 /* pF */, 15200 /* pG */, 15200 /* pH */, 15075 /* pI */, 15200 /* pJ */, 15200 /* pK */, 15200 /* pL */, 15200 /* pM */, 15200 /* pN */, 15200 /* pO */, 15200 /* pP */, 15200 /* pQ */, 15200 /* pR */, 15200 /* pS */, 13575 /* pT */, 15200 /* pU */, 14325 /* pV */, 14575 /* pW */, 14700 /* pX */, 13700 /* pY */, 15075 /* pZ */, 15200 /* p[ */, 15200 /* p\ */, 15200 /* p] */, 15200 /* p^ */, 13950 /* p_ */, 15200 /* p` */, 15200 /* pa */, 15200 /* pb */, 15200 /* pc */, 15200 /* pd */, 15200 /* pe */, 15050 /* pf */, 15200 /* pg */, 15200 /* ph */, 15200 /* pi */, 15200 /* pj */, 15200 /* pk */, 15200 /* pl */, 15200 /* pm */, 15200 /* pn */, 15200 /* po */, 15200 /* pp */, 15200 /* pq */, 15200 /* pr */, 15200 /* ps */, 15050 /* pt */, 15200 /* pu */, 15000 /* pv */, 14950 /* pw */, 14800 /* px */, 14950 /* py */, 15000 /* pz */, 15200 /* p{ */, 15200 /* p| */, 15200 /* p} */, 15200 /* p~ */}, - {15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q! */, 15200 /* q" */, 15200 /* q# */, 15200 /* q$ */, 15200 /* q% */, 15200 /* q& */, 15200 /* q' */, 15200 /* q( */, 15200 /* q) */, 15200 /* q* */, 15200 /* q+ */, 15200 /* q, */, 15200 /* q- */, 15200 /* q. */, 15200 /* q/ */, 15200 /* q0 */, 15200 /* q1 */, 15200 /* q2 */, 15200 /* q3 */, 15200 /* q4 */, 15200 /* q5 */, 15200 /* q6 */, 15200 /* q7 */, 15200 /* q8 */, 15200 /* q9 */, 15200 /* q: */, 15200 /* q; */, 15200 /* q< */, 15200 /* q= */, 15200 /* q> */, 15200 /* q? */, 15200 /* q@ */, 15200 /* qA */, 15200 /* qB */, 15200 /* qC */, 15200 /* qD */, 15200 /* qE */, 15200 /* qF */, 15200 /* qG */, 15200 /* qH */, 15200 /* qI */, 15200 /* qJ */, 15200 /* qK */, 15200 /* qL */, 15200 /* qM */, 15200 /* qN */, 15200 /* qO */, 15200 /* qP */, 15200 /* qQ */, 15200 /* qR */, 15200 /* qS */, 14200 /* qT */, 15200 /* qU */, 14575 /* qV */, 14950 /* qW */, 15200 /* qX */, 14450 /* qY */, 15200 /* qZ */, 15200 /* q[ */, 15200 /* q\ */, 15200 /* q] */, 15200 /* q^ */, 15200 /* q_ */, 15200 /* q` */, 15200 /* qa */, 15200 /* qb */, 15200 /* qc */, 15200 /* qd */, 15200 /* qe */, 15200 /* qf */, 15200 /* qg */, 15200 /* qh */, 15200 /* qi */, 15200 /* qj */, 15200 /* qk */, 15200 /* ql */, 15200 /* qm */, 15200 /* qn */, 15200 /* qo */, 15200 /* qp */, 15200 /* qq */, 15200 /* qr */, 15200 /* qs */, 15200 /* qt */, 15200 /* qu */, 15200 /* qv */, 15200 /* qw */, 15200 /* qx */, 15200 /* qy */, 15200 /* qz */, 15200 /* q{ */, 15200 /* q| */, 15200 /* q} */, 15200 /* q~ */}, - {10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r! */, 10850 /* r" */, 10100 /* r# */, 10100 /* r$ */, 10100 /* r% */, 9600 /* r& */, 10850 /* r' */, 10100 /* r( */, 10100 /* r) */, 10850 /* r* */, 10100 /* r+ */, 8100 /* r, */, 10100 /* r- */, 8100 /* r. */, 9550 /* r/ */, 10100 /* r0 */, 10100 /* r1 */, 10100 /* r2 */, 10100 /* r3 */, 10100 /* r4 */, 10100 /* r5 */, 10100 /* r6 */, 10100 /* r7 */, 10100 /* r8 */, 10100 /* r9 */, 10100 /* r: */, 10100 /* r; */, 10100 /* r< */, 10100 /* r= */, 10100 /* r> */, 10100 /* r? */, 10100 /* r@ */, 9100 /* rA */, 10100 /* rB */, 10350 /* rC */, 10100 /* rD */, 10100 /* rE */, 10100 /* rF */, 10350 /* rG */, 10100 /* rH */, 10100 /* rI */, 9500 /* rJ */, 10100 /* rK */, 10100 /* rL */, 10100 /* rM */, 10100 /* rN */, 10350 /* rO */, 10100 /* rP */, 10350 /* rQ */, 10100 /* rR */, 10275 /* rS */, 9850 /* rT */, 10100 /* rU */, 10100 /* rV */, 10100 /* rW */, 9600 /* rX */, 9600 /* rY */, 9825 /* rZ */, 10100 /* r[ */, 10100 /* r\ */, 10100 /* r] */, 10100 /* r^ */, 8100 /* r_ */, 10100 /* r` */, 9750 /* ra */, 10100 /* rb */, 9975 /* rc */, 10000 /* rd */, 9975 /* re */, 10325 /* rf */, 9750 /* rg */, 10100 /* rh */, 10100 /* ri */, 10100 /* rj */, 10100 /* rk */, 10100 /* rl */, 10100 /* rm */, 10100 /* rn */, 9975 /* ro */, 10100 /* rp */, 10000 /* rq */, 10100 /* rr */, 10100 /* rs */, 10200 /* rt */, 10100 /* ru */, 10275 /* rv */, 10225 /* rw */, 10100 /* rx */, 10275 /* ry */, 10100 /* rz */, 10100 /* r{ */, 10100 /* r| */, 10100 /* r} */, 10100 /* r~ */}, - {12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s! */, 12350 /* s" */, 12600 /* s# */, 12600 /* s$ */, 12600 /* s% */, 12600 /* s& */, 12350 /* s' */, 12600 /* s( */, 12600 /* s) */, 12350 /* s* */, 12600 /* s+ */, 12400 /* s, */, 12600 /* s- */, 12400 /* s. */, 12600 /* s/ */, 12600 /* s0 */, 12600 /* s1 */, 12600 /* s2 */, 12600 /* s3 */, 12600 /* s4 */, 12600 /* s5 */, 12600 /* s6 */, 12600 /* s7 */, 12600 /* s8 */, 12600 /* s9 */, 12600 /* s: */, 12600 /* s; */, 12600 /* s< */, 12600 /* s= */, 12600 /* s> */, 12600 /* s? */, 12600 /* s@ */, 12650 /* sA */, 12600 /* sB */, 12600 /* sC */, 12600 /* sD */, 12600 /* sE */, 12600 /* sF */, 12600 /* sG */, 12600 /* sH */, 12600 /* sI */, 12550 /* sJ */, 12600 /* sK */, 12600 /* sL */, 12600 /* sM */, 12600 /* sN */, 12600 /* sO */, 12600 /* sP */, 12600 /* sQ */, 12600 /* sR */, 12600 /* sS */, 10975 /* sT */, 12600 /* sU */, 11775 /* sV */, 12600 /* sW */, 12025 /* sX */, 11250 /* sY */, 12600 /* sZ */, 12600 /* s[ */, 12600 /* s\ */, 12600 /* s] */, 12600 /* s^ */, 11350 /* s_ */, 12600 /* s` */, 12600 /* sa */, 12600 /* sb */, 12600 /* sc */, 12600 /* sd */, 12600 /* se */, 12525 /* sf */, 12600 /* sg */, 12600 /* sh */, 12600 /* si */, 12600 /* sj */, 12600 /* sk */, 12600 /* sl */, 12600 /* sm */, 12600 /* sn */, 12600 /* so */, 12600 /* sp */, 12600 /* sq */, 12600 /* sr */, 12425 /* ss */, 12400 /* st */, 12600 /* su */, 12300 /* sv */, 12350 /* sw */, 12175 /* sx */, 12375 /* sy */, 12350 /* sz */, 12600 /* s{ */, 12600 /* s| */, 12600 /* s} */, 12600 /* s~ */}, - {9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t! */, 9575 /* t" */, 9575 /* t# */, 9575 /* t$ */, 9575 /* t% */, 9325 /* t& */, 9575 /* t' */, 9575 /* t( */, 9575 /* t) */, 9575 /* t* */, 9575 /* t+ */, 9575 /* t, */, 9325 /* t- */, 9575 /* t. */, 9575 /* t/ */, 9575 /* t0 */, 9575 /* t1 */, 9575 /* t2 */, 9575 /* t3 */, 9575 /* t4 */, 9575 /* t5 */, 9575 /* t6 */, 9575 /* t7 */, 9575 /* t8 */, 9575 /* t9 */, 9575 /* t: */, 9575 /* t; */, 9575 /* t< */, 9575 /* t= */, 9575 /* t> */, 9575 /* t? */, 9575 /* t@ */, 9725 /* tA */, 9575 /* tB */, 9575 /* tC */, 9575 /* tD */, 9575 /* tE */, 9575 /* tF */, 9575 /* tG */, 9575 /* tH */, 9575 /* tI */, 9575 /* tJ */, 9575 /* tK */, 9575 /* tL */, 9575 /* tM */, 9575 /* tN */, 9575 /* tO */, 9575 /* tP */, 9575 /* tQ */, 9575 /* tR */, 9575 /* tS */, 8975 /* tT */, 9575 /* tU */, 9575 /* tV */, 9575 /* tW */, 9575 /* tX */, 9075 /* tY */, 9575 /* tZ */, 9575 /* t[ */, 9575 /* t\ */, 9575 /* t] */, 9575 /* t^ */, 10075 /* t_ */, 9575 /* t` */, 9575 /* ta */, 9575 /* tb */, 9475 /* tc */, 9475 /* td */, 9475 /* te */, 9575 /* tf */, 9575 /* tg */, 9575 /* th */, 9575 /* ti */, 9575 /* tj */, 9575 /* tk */, 9575 /* tl */, 9575 /* tm */, 9575 /* tn */, 9475 /* to */, 9575 /* tp */, 9475 /* tq */, 9575 /* tr */, 9575 /* ts */, 9450 /* tt */, 9575 /* tu */, 9575 /* tv */, 9575 /* tw */, 9575 /* tx */, 9575 /* ty */, 9575 /* tz */, 9575 /* t{ */, 9575 /* t| */, 9575 /* t} */, 9575 /* t~ */}, - {14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u! */, 14900 /* u" */, 14900 /* u# */, 14900 /* u$ */, 14900 /* u% */, 14900 /* u& */, 14900 /* u' */, 14900 /* u( */, 14900 /* u) */, 14900 /* u* */, 14900 /* u+ */, 14900 /* u, */, 14900 /* u- */, 14900 /* u. */, 14900 /* u/ */, 14900 /* u0 */, 14900 /* u1 */, 14900 /* u2 */, 14900 /* u3 */, 14900 /* u4 */, 14900 /* u5 */, 14900 /* u6 */, 14900 /* u7 */, 14900 /* u8 */, 14900 /* u9 */, 14900 /* u: */, 14900 /* u; */, 14900 /* u< */, 14900 /* u= */, 14900 /* u> */, 14900 /* u? */, 14900 /* u@ */, 14900 /* uA */, 14900 /* uB */, 14900 /* uC */, 14900 /* uD */, 14900 /* uE */, 14900 /* uF */, 14900 /* uG */, 14900 /* uH */, 14900 /* uI */, 14900 /* uJ */, 14900 /* uK */, 14900 /* uL */, 14900 /* uM */, 14900 /* uN */, 14900 /* uO */, 14900 /* uP */, 14900 /* uQ */, 14900 /* uR */, 14900 /* uS */, 13775 /* uT */, 14900 /* uU */, 14275 /* uV */, 14650 /* uW */, 14900 /* uX */, 13650 /* uY */, 14900 /* uZ */, 14900 /* u[ */, 14900 /* u\ */, 14900 /* u] */, 14900 /* u^ */, 14900 /* u_ */, 14900 /* u` */, 14900 /* ua */, 14900 /* ub */, 14900 /* uc */, 14900 /* ud */, 14900 /* ue */, 14900 /* uf */, 14900 /* ug */, 14900 /* uh */, 14900 /* ui */, 14900 /* uj */, 14900 /* uk */, 14900 /* ul */, 14900 /* um */, 14900 /* un */, 14900 /* uo */, 14900 /* up */, 14900 /* uq */, 14900 /* ur */, 14900 /* us */, 14900 /* ut */, 14900 /* uu */, 14900 /* uv */, 14900 /* uw */, 14900 /* ux */, 14900 /* uy */, 14900 /* uz */, 14900 /* u{ */, 14900 /* u| */, 14900 /* u} */, 14900 /* u~ */}, - {13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v! */, 14075 /* v" */, 13450 /* v# */, 13450 /* v$ */, 13450 /* v% */, 12950 /* v& */, 14075 /* v' */, 13450 /* v( */, 13450 /* v) */, 14075 /* v* */, 13450 /* v+ */, 12250 /* v, */, 13325 /* v- */, 12250 /* v. */, 13075 /* v/ */, 13450 /* v0 */, 13450 /* v1 */, 13450 /* v2 */, 13450 /* v3 */, 13450 /* v4 */, 13450 /* v5 */, 13450 /* v6 */, 13450 /* v7 */, 13450 /* v8 */, 13450 /* v9 */, 13450 /* v: */, 13450 /* v; */, 13450 /* v< */, 13450 /* v= */, 13450 /* v> */, 13450 /* v? */, 13450 /* v@ */, 12700 /* vA */, 13450 /* vB */, 13450 /* vC */, 13450 /* vD */, 13450 /* vE */, 13450 /* vF */, 13450 /* vG */, 13450 /* vH */, 13325 /* vI */, 12700 /* vJ */, 13450 /* vK */, 13450 /* vL */, 13450 /* vM */, 13450 /* vN */, 13450 /* vO */, 13450 /* vP */, 13450 /* vQ */, 13450 /* vR */, 13450 /* vS */, 12825 /* vT */, 13450 /* vU */, 13200 /* vV */, 13450 /* vW */, 13450 /* vX */, 12575 /* vY */, 13450 /* vZ */, 13450 /* v[ */, 13450 /* v\ */, 13450 /* v] */, 13450 /* v^ */, 11700 /* v_ */, 13450 /* v` */, 13225 /* va */, 13450 /* vb */, 13250 /* vc */, 13250 /* vd */, 13250 /* ve */, 13600 /* vf */, 13125 /* vg */, 13450 /* vh */, 13450 /* vi */, 13450 /* vj */, 13450 /* vk */, 13450 /* vl */, 13450 /* vm */, 13450 /* vn */, 13250 /* vo */, 13450 /* vp */, 13250 /* vq */, 13450 /* vr */, 13400 /* vs */, 13450 /* vt */, 13450 /* vu */, 13450 /* vv */, 13450 /* vw */, 13450 /* vx */, 13450 /* vy */, 13350 /* vz */, 13450 /* v{ */, 13450 /* v| */, 13450 /* v} */, 13450 /* v~ */}, - {21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w! */, 21525 /* w" */, 21025 /* w# */, 21025 /* w$ */, 21025 /* w% */, 20525 /* w& */, 21525 /* w' */, 21025 /* w( */, 21025 /* w) */, 21525 /* w* */, 21025 /* w+ */, 20025 /* w, */, 20925 /* w- */, 20025 /* w. */, 21025 /* w/ */, 21025 /* w0 */, 21025 /* w1 */, 21025 /* w2 */, 21025 /* w3 */, 21025 /* w4 */, 21025 /* w5 */, 21025 /* w6 */, 21025 /* w7 */, 21025 /* w8 */, 21025 /* w9 */, 21025 /* w: */, 21025 /* w; */, 21025 /* w< */, 21025 /* w= */, 21025 /* w> */, 21025 /* w? */, 20775 /* w@ */, 20525 /* wA */, 21025 /* wB */, 21025 /* wC */, 21025 /* wD */, 21025 /* wE */, 21025 /* wF */, 21025 /* wG */, 21025 /* wH */, 21025 /* wI */, 20275 /* wJ */, 21025 /* wK */, 21025 /* wL */, 21025 /* wM */, 21025 /* wN */, 21025 /* wO */, 21025 /* wP */, 21025 /* wQ */, 21025 /* wR */, 21025 /* wS */, 20150 /* wT */, 21025 /* wU */, 20775 /* wV */, 20775 /* wW */, 21025 /* wX */, 20025 /* wY */, 21025 /* wZ */, 21025 /* w[ */, 21025 /* w\ */, 21025 /* w] */, 21025 /* w^ */, 19775 /* w_ */, 21025 /* w` */, 20675 /* wa */, 21025 /* wb */, 20775 /* wc */, 20775 /* wd */, 20775 /* we */, 21025 /* wf */, 20600 /* wg */, 21025 /* wh */, 21025 /* wi */, 21025 /* wj */, 21025 /* wk */, 21025 /* wl */, 21025 /* wm */, 21025 /* wn */, 20775 /* wo */, 21025 /* wp */, 20775 /* wq */, 21025 /* wr */, 20925 /* ws */, 21025 /* wt */, 21025 /* wu */, 21025 /* wv */, 21025 /* ww */, 21025 /* wx */, 21025 /* wy */, 21025 /* wz */, 21025 /* w{ */, 21025 /* w| */, 21025 /* w} */, 21025 /* w~ */}, - {14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x! */, 14000 /* x" */, 14000 /* x# */, 14000 /* x$ */, 14000 /* x% */, 13250 /* x& */, 14000 /* x' */, 14000 /* x( */, 14000 /* x) */, 14000 /* x* */, 14000 /* x+ */, 14000 /* x, */, 13125 /* x- */, 14000 /* x. */, 14000 /* x/ */, 14000 /* x0 */, 14000 /* x1 */, 14000 /* x2 */, 14000 /* x3 */, 14000 /* x4 */, 14000 /* x5 */, 14000 /* x6 */, 14000 /* x7 */, 14000 /* x8 */, 14000 /* x9 */, 14000 /* x: */, 14000 /* x; */, 14000 /* x< */, 14000 /* x= */, 14000 /* x> */, 14000 /* x? */, 13500 /* x@ */, 14000 /* xA */, 14000 /* xB */, 14000 /* xC */, 14000 /* xD */, 14000 /* xE */, 14000 /* xF */, 14000 /* xG */, 14000 /* xH */, 14000 /* xI */, 13625 /* xJ */, 14000 /* xK */, 14000 /* xL */, 14000 /* xM */, 14000 /* xN */, 14000 /* xO */, 14000 /* xP */, 14000 /* xQ */, 14000 /* xR */, 14000 /* xS */, 13125 /* xT */, 14000 /* xU */, 13750 /* xV */, 13750 /* xW */, 14000 /* xX */, 13000 /* xY */, 14000 /* xZ */, 14000 /* x[ */, 14000 /* x\ */, 14000 /* x] */, 14000 /* x^ */, 14500 /* x_ */, 14000 /* x` */, 14000 /* xa */, 14000 /* xb */, 13600 /* xc */, 13600 /* xd */, 13600 /* xe */, 14000 /* xf */, 14000 /* xg */, 14000 /* xh */, 14000 /* xi */, 14000 /* xj */, 14000 /* xk */, 14000 /* xl */, 14000 /* xm */, 14000 /* xn */, 13600 /* xo */, 14000 /* xp */, 13600 /* xq */, 14000 /* xr */, 13900 /* xs */, 14000 /* xt */, 14000 /* xu */, 14000 /* xv */, 14000 /* xw */, 14000 /* xx */, 14000 /* xy */, 14000 /* xz */, 14000 /* x{ */, 14000 /* x| */, 14000 /* x} */, 14000 /* x~ */}, - {13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y! */, 13850 /* y" */, 13350 /* y# */, 13350 /* y$ */, 13350 /* y% */, 12600 /* y& */, 13850 /* y' */, 13350 /* y( */, 13350 /* y) */, 13850 /* y* */, 13350 /* y+ */, 12225 /* y, */, 13225 /* y- */, 12225 /* y. */, 13225 /* y/ */, 13350 /* y0 */, 13350 /* y1 */, 13350 /* y2 */, 13350 /* y3 */, 13350 /* y4 */, 13350 /* y5 */, 13350 /* y6 */, 13350 /* y7 */, 13350 /* y8 */, 13350 /* y9 */, 13350 /* y: */, 13350 /* y; */, 13350 /* y< */, 13350 /* y= */, 13350 /* y> */, 13350 /* y? */, 13100 /* y@ */, 12975 /* yA */, 13350 /* yB */, 13350 /* yC */, 13350 /* yD */, 13350 /* yE */, 13350 /* yF */, 13350 /* yG */, 13350 /* yH */, 13225 /* yI */, 12600 /* yJ */, 13350 /* yK */, 13350 /* yL */, 13350 /* yM */, 13350 /* yN */, 13350 /* yO */, 13350 /* yP */, 13350 /* yQ */, 13350 /* yR */, 13350 /* yS */, 12600 /* yT */, 13350 /* yU */, 13100 /* yV */, 13350 /* yW */, 13350 /* yX */, 12475 /* yY */, 13350 /* yZ */, 13350 /* y[ */, 13350 /* y\ */, 13350 /* y] */, 13350 /* y^ */, 11350 /* y_ */, 13350 /* y` */, 13000 /* ya */, 13350 /* yb */, 13150 /* yc */, 13150 /* yd */, 13150 /* ye */, 13525 /* yf */, 12825 /* yg */, 13350 /* yh */, 13350 /* yi */, 13350 /* yj */, 13350 /* yk */, 13350 /* yl */, 13350 /* ym */, 13350 /* yn */, 13150 /* yo */, 13350 /* yp */, 13150 /* yq */, 13350 /* yr */, 13125 /* ys */, 13350 /* yt */, 13350 /* yu */, 13350 /* yv */, 13350 /* yw */, 13350 /* yx */, 13350 /* yy */, 13250 /* yz */, 13350 /* y{ */, 13350 /* y| */, 13350 /* y} */, 13350 /* y~ */}, - {12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z! */, 13075 /* z" */, 12950 /* z# */, 12950 /* z$ */, 12950 /* z% */, 12700 /* z& */, 13075 /* z' */, 12950 /* z( */, 12950 /* z) */, 13075 /* z* */, 12950 /* z+ */, 13200 /* z, */, 12450 /* z- */, 13200 /* z. */, 12950 /* z/ */, 12950 /* z0 */, 12950 /* z1 */, 12950 /* z2 */, 12950 /* z3 */, 12950 /* z4 */, 12950 /* z5 */, 12950 /* z6 */, 12950 /* z7 */, 12950 /* z8 */, 12950 /* z9 */, 12950 /* z: */, 12950 /* z; */, 12950 /* z< */, 12950 /* z= */, 12950 /* z> */, 12950 /* z? */, 12700 /* z@ */, 13200 /* zA */, 12950 /* zB */, 12950 /* zC */, 12950 /* zD */, 12950 /* zE */, 12950 /* zF */, 12950 /* zG */, 12950 /* zH */, 12950 /* zI */, 12950 /* zJ */, 12950 /* zK */, 12950 /* zL */, 12950 /* zM */, 12950 /* zN */, 12950 /* zO */, 12950 /* zP */, 12950 /* zQ */, 12950 /* zR */, 12950 /* zS */, 12075 /* zT */, 12950 /* zU */, 12700 /* zV */, 12825 /* zW */, 13200 /* zX */, 12200 /* zY */, 12950 /* zZ */, 12950 /* z[ */, 12950 /* z\ */, 12950 /* z] */, 12950 /* z^ */, 13075 /* z_ */, 12950 /* z` */, 12950 /* za */, 12950 /* zb */, 12650 /* zc */, 12700 /* zd */, 12650 /* ze */, 12950 /* zf */, 12950 /* zg */, 12950 /* zh */, 12950 /* zi */, 12950 /* zj */, 12950 /* zk */, 12950 /* zl */, 12950 /* zm */, 12950 /* zn */, 12650 /* zo */, 12950 /* zp */, 12700 /* zq */, 12950 /* zr */, 12950 /* zs */, 12950 /* zt */, 12950 /* zu */, 12950 /* zv */, 12950 /* zw */, 12950 /* zx */, 12950 /* zy */, 12950 /* zz */, 12950 /* z{ */, 12950 /* z| */, 12950 /* z} */, 12950 /* z~ */}, - {9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* {! */, 9300 /* {" */, 9300 /* {# */, 9300 /* {$ */, 9300 /* {% */, 9300 /* {& */, 9300 /* {' */, 9300 /* {( */, 9300 /* {) */, 9300 /* {* */, 9300 /* {+ */, 9300 /* {, */, 9300 /* {- */, 9300 /* {. */, 9300 /* {/ */, 9300 /* {0 */, 9300 /* {1 */, 9300 /* {2 */, 9300 /* {3 */, 9300 /* {4 */, 9300 /* {5 */, 9300 /* {6 */, 9300 /* {7 */, 9300 /* {8 */, 9300 /* {9 */, 9300 /* {: */, 9300 /* {; */, 9300 /* {< */, 9300 /* {= */, 9300 /* {> */, 9300 /* {? */, 9300 /* {@ */, 9300 /* {A */, 9300 /* {B */, 9300 /* {C */, 9300 /* {D */, 9300 /* {E */, 9300 /* {F */, 9300 /* {G */, 9300 /* {H */, 9300 /* {I */, 9300 /* {J */, 9300 /* {K */, 9300 /* {L */, 9300 /* {M */, 9300 /* {N */, 9300 /* {O */, 9300 /* {P */, 9300 /* {Q */, 9300 /* {R */, 9300 /* {S */, 9300 /* {T */, 9300 /* {U */, 9300 /* {V */, 9300 /* {W */, 9300 /* {X */, 9300 /* {Y */, 9300 /* {Z */, 9300 /* {[ */, 9300 /* {\ */, 9300 /* {] */, 9300 /* {^ */, 9300 /* {_ */, 9300 /* {` */, 9300 /* {a */, 9300 /* {b */, 9300 /* {c */, 9300 /* {d */, 9300 /* {e */, 9300 /* {f */, 9300 /* {g */, 9300 /* {h */, 9300 /* {i */, 9550 /* {j */, 9300 /* {k */, 9300 /* {l */, 9300 /* {m */, 9300 /* {n */, 9300 /* {o */, 9300 /* {p */, 9300 /* {q */, 9300 /* {r */, 9300 /* {s */, 9300 /* {t */, 9300 /* {u */, 9300 /* {v */, 9300 /* {w */, 9300 /* {x */, 9300 /* {y */, 9300 /* {z */, 9300 /* {{ */, 9300 /* {| */, 9300 /* {} */, 9300 /* {~ */}, - {10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* |! */, 10050 /* |" */, 10050 /* |# */, 10050 /* |$ */, 10050 /* |% */, 10050 /* |& */, 10050 /* |' */, 10050 /* |( */, 10050 /* |) */, 10050 /* |* */, 10050 /* |+ */, 10050 /* |, */, 10050 /* |- */, 10050 /* |. */, 10050 /* |/ */, 10050 /* |0 */, 10050 /* |1 */, 10050 /* |2 */, 10050 /* |3 */, 10050 /* |4 */, 10050 /* |5 */, 10050 /* |6 */, 10050 /* |7 */, 10050 /* |8 */, 10050 /* |9 */, 10050 /* |: */, 10050 /* |; */, 10050 /* |< */, 10050 /* |= */, 10050 /* |> */, 10050 /* |? */, 10050 /* |@ */, 10050 /* |A */, 10050 /* |B */, 10050 /* |C */, 10050 /* |D */, 10050 /* |E */, 10050 /* |F */, 10050 /* |G */, 10050 /* |H */, 10050 /* |I */, 10050 /* |J */, 10050 /* |K */, 10050 /* |L */, 10050 /* |M */, 10050 /* |N */, 10050 /* |O */, 10050 /* |P */, 10050 /* |Q */, 10050 /* |R */, 10050 /* |S */, 10050 /* |T */, 10050 /* |U */, 10050 /* |V */, 10050 /* |W */, 10050 /* |X */, 10050 /* |Y */, 10050 /* |Z */, 10050 /* |[ */, 10050 /* |\ */, 10050 /* |] */, 10050 /* |^ */, 10050 /* |_ */, 10050 /* |` */, 10050 /* |a */, 10050 /* |b */, 10050 /* |c */, 10050 /* |d */, 10050 /* |e */, 10050 /* |f */, 10050 /* |g */, 10050 /* |h */, 10050 /* |i */, 10050 /* |j */, 10050 /* |k */, 10050 /* |l */, 10050 /* |m */, 10050 /* |n */, 10050 /* |o */, 10050 /* |p */, 10050 /* |q */, 10050 /* |r */, 10050 /* |s */, 10050 /* |t */, 10050 /* |u */, 10050 /* |v */, 10050 /* |w */, 10050 /* |x */, 10050 /* |y */, 10050 /* |z */, 10050 /* |{ */, 10050 /* || */, 10050 /* |} */, 10050 /* |~ */}, - {9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* }! */, 9300 /* }" */, 9300 /* }# */, 9300 /* }$ */, 9300 /* }% */, 9300 /* }& */, 9300 /* }' */, 9300 /* }( */, 9300 /* }) */, 9300 /* }* */, 9300 /* }+ */, 9300 /* }, */, 9300 /* }- */, 9300 /* }. */, 9300 /* }/ */, 9300 /* }0 */, 9300 /* }1 */, 9300 /* }2 */, 9300 /* }3 */, 9300 /* }4 */, 9300 /* }5 */, 9300 /* }6 */, 9300 /* }7 */, 9300 /* }8 */, 9300 /* }9 */, 9300 /* }: */, 9300 /* }; */, 9300 /* }< */, 9300 /* }= */, 9300 /* }> */, 9300 /* }? */, 9300 /* }@ */, 9300 /* }A */, 9300 /* }B */, 9300 /* }C */, 9300 /* }D */, 9300 /* }E */, 9300 /* }F */, 9300 /* }G */, 9300 /* }H */, 9300 /* }I */, 9300 /* }J */, 9300 /* }K */, 9300 /* }L */, 9300 /* }M */, 9300 /* }N */, 9300 /* }O */, 9300 /* }P */, 9300 /* }Q */, 9300 /* }R */, 9300 /* }S */, 9300 /* }T */, 9300 /* }U */, 9300 /* }V */, 9300 /* }W */, 9300 /* }X */, 9300 /* }Y */, 9300 /* }Z */, 9300 /* }[ */, 9300 /* }\ */, 9300 /* }] */, 9300 /* }^ */, 9300 /* }_ */, 9300 /* }` */, 9300 /* }a */, 9300 /* }b */, 9300 /* }c */, 9300 /* }d */, 9300 /* }e */, 9300 /* }f */, 9300 /* }g */, 9300 /* }h */, 9300 /* }i */, 9300 /* }j */, 9300 /* }k */, 9300 /* }l */, 9300 /* }m */, 9300 /* }n */, 9300 /* }o */, 9300 /* }p */, 9300 /* }q */, 9300 /* }r */, 9300 /* }s */, 9300 /* }t */, 9300 /* }u */, 9300 /* }v */, 9300 /* }w */, 9300 /* }x */, 9300 /* }y */, 9300 /* }z */, 9300 /* }{ */, 9300 /* }| */, 9300 /* }} */, 9300 /* }~ */}, - {15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~! */, 15000 /* ~" */, 15000 /* ~# */, 15000 /* ~$ */, 15000 /* ~% */, 15000 /* ~& */, 15000 /* ~' */, 15000 /* ~( */, 15000 /* ~) */, 15000 /* ~* */, 15000 /* ~+ */, 15000 /* ~, */, 15000 /* ~- */, 15000 /* ~. */, 15000 /* ~/ */, 15000 /* ~0 */, 15000 /* ~1 */, 15000 /* ~2 */, 15000 /* ~3 */, 15000 /* ~4 */, 15000 /* ~5 */, 15000 /* ~6 */, 15000 /* ~7 */, 15000 /* ~8 */, 15000 /* ~9 */, 15000 /* ~: */, 15000 /* ~; */, 15000 /* ~< */, 15000 /* ~= */, 15000 /* ~> */, 15000 /* ~? */, 15000 /* ~@ */, 15000 /* ~A */, 15000 /* ~B */, 15000 /* ~C */, 15000 /* ~D */, 15000 /* ~E */, 15000 /* ~F */, 15000 /* ~G */, 15000 /* ~H */, 15000 /* ~I */, 15000 /* ~J */, 15000 /* ~K */, 15000 /* ~L */, 15000 /* ~M */, 15000 /* ~N */, 15000 /* ~O */, 15000 /* ~P */, 15000 /* ~Q */, 15000 /* ~R */, 15000 /* ~S */, 15000 /* ~T */, 15000 /* ~U */, 15000 /* ~V */, 15000 /* ~W */, 15000 /* ~X */, 15000 /* ~Y */, 15000 /* ~Z */, 15000 /* ~[ */, 15000 /* ~\ */, 15000 /* ~] */, 15000 /* ~^ */, 15000 /* ~_ */, 15000 /* ~` */, 15000 /* ~a */, 15000 /* ~b */, 15000 /* ~c */, 15000 /* ~d */, 15000 /* ~e */, 15000 /* ~f */, 15000 /* ~g */, 15000 /* ~h */, 15000 /* ~i */, 15000 /* ~j */, 15000 /* ~k */, 15000 /* ~l */, 15000 /* ~m */, 15000 /* ~n */, 15000 /* ~o */, 15000 /* ~p */, 15000 /* ~q */, 15000 /* ~r */, 15000 /* ~s */, 15000 /* ~t */, 15000 /* ~u */, 15000 /* ~v */, 15000 /* ~w */, 15000 /* ~x */, 15000 /* ~y */, 15000 /* ~z */, 15000 /* ~{ */, 15000 /* ~| */, 15000 /* ~} */, 15000 /* ~~ */}, -}; - -static const unsigned short int ibm_plex_sans_bold_250_em_size = 20475; - -static double ibm_plex_sans_bold_word_width(const char *s, double fontSize) { - unsigned long int totalWidth = 0; - - while(*s) { - if (IS_UTF8_STARTBYTE(*s)) { - s++; - - while(IS_UTF8_BYTE(*s) && !IS_UTF8_STARTBYTE(*s)) - s++; - - totalWidth += ibm_plex_sans_bold_250_em_size; - } - else { - if (*s >= 0 && *s <= 126) // Check if it's a valid ASCII character (including '\0') - totalWidth += ibm_plex_sans_bold_250[(unsigned char)*s][(unsigned char)s[1]]; - - s++; - } - } - - // Convert the width from the encoded value to the actual float value - double actualWidth = (double)totalWidth / 100.0; - - // Scale the width proportionally based on the desired font size - double scaledWidth = actualWidth * (fontSize / 250.0); - - return scaledWidth; -} - -/* - - - - - - - - - - - - - - I - - - TROUBLE - - - - */ - -static bool word_goes_below_baseline(const char *love) { - const char *s = love; - while(*s) { - switch(*s) { - case 'g': - case 'j': - case 'p': - case 'q': - case 'y': - case 'Q': - return true; - } - - s++; - } - - return false; -} - -static void generate_ilove_svg(BUFFER *wb, const char *love) { - const char *i = "I"; - const char *stretch = "spacing"; - - double font_size = 250.0; - double border_width = 25.0; - double logo_scale = 0.215; - double logo_width = 1000.0 * logo_scale; - double i_width = ibm_plex_sans_bold_word_width(i, font_size); - double first_line_width = i_width + logo_width; - double second_line_font_size = font_size; - double second_line_width = ibm_plex_sans_bold_word_width(love, second_line_font_size); - bool second_line_needs_height = word_goes_below_baseline(love); - - if(second_line_width <= first_line_width) { - second_line_width = first_line_width; - stretch = "spacingAndGlyphs"; - - if(!second_line_needs_height) - second_line_font_size *= 1.10; - } - else if(second_line_width > first_line_width * 4) { - second_line_width *= 0.80; - stretch = "spacingAndGlyphs"; - second_line_font_size *= 0.90; - } - else if(second_line_width > first_line_width * 2) { - second_line_width *= 0.93; - stretch = "spacing"; - } - - double width = second_line_width + border_width * 4.0; - - buffer_flush(wb); - - buffer_sprintf(wb, "\n", - width); - - // White bounding box with rounded corners - buffer_sprintf(wb, " \n", - width, border_width * 2, border_width * 2); - - // Black background - buffer_sprintf(wb, " \n", - border_width, border_width, width - border_width * 2, border_width * 1.5, border_width * 1.5); - - // Netdata logo - buffer_sprintf(wb, " \n", - (width - first_line_width) / 2 + i_width, border_width * 2, logo_scale); - - // first line - double first_line_baseline = font_size * 0.70 + border_width * 2; - buffer_sprintf(wb, " %s\n", - (width - first_line_width) / 2, first_line_baseline, font_size, i); - - // second line - double second_line_baseline = first_line_baseline + font_size * 0.85; - if(second_line_needs_height) - second_line_baseline = first_line_baseline + font_size * 0.78; - - buffer_sprintf(wb, " %s\n", - border_width * 2, second_line_baseline, second_line_font_size, second_line_width, stretch, love); - - buffer_sprintf(wb, ""); - - wb->content_type = CT_IMAGE_SVG_XML; -} - -int web_client_api_request_v2_ilove(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - char *love = "TROUBLE"; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "love")) love = value; - } - -// char *s = love; -// while(*s) { -// *s = toupper(*s); -// s++; -// } - - generate_ilove_svg(w->response.data, love); - - return HTTP_RESP_OK; -} diff --git a/src/web/api/ilove/ilove.h b/src/web/api/ilove/ilove.h deleted file mode 100644 index 010c19c6b..000000000 --- a/src/web/api/ilove/ilove.h +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef NETDATA_WEB_API_ILOVE_H -#define NETDATA_WEB_API_ILOVE_H 1 - -#include "libnetdata/libnetdata.h" -#include "web/server/web_client.h" - -int web_client_api_request_v2_ilove(RRDHOST *host, struct web_client *w, char *url); - -#include "web/api/web_api_v1.h" - -#endif /* NETDATA_WEB_API_ILOVE_H */ diff --git a/src/web/api/ilove/measure-text.js b/src/web/api/ilove/measure-text.js deleted file mode 100644 index e2a2a6e94..000000000 --- a/src/web/api/ilove/measure-text.js +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -'use strict'; - -var path = require('path'); -var fs = require('fs'); -var PDFDocument = require('pdfkit'); -var doc = new PDFDocument({size:'A4', layout:'landscape'}); - -function loadFont(fontPaths, callback) { - for (let fontPath of fontPaths) { - try { - doc = doc.font(fontPath); - if (callback) { callback(null); } - return; // Exit once a font is loaded successfully - } catch(err) { - // Log error but continue to next font path - console.error(`Failed to load font from path: ${fontPath}. Error: ${err.message}`); - } - } - - // If we reached here, none of the fonts were loaded successfully. - console.error('All font paths failed. Stopping execution.'); - process.exit(1); // Exit with an error code -} - -loadFont(['IBMPlexSans-Bold.ttf'], function(err) { - if (err) { - console.error('Could not load any of the specified fonts.'); - } -}); - -doc = doc.fontSize(250); - -function measureCombination(charA, charB) { - return doc.widthOfString(charA + charB); -} - -function getCharRepresentation(charCode) { - return (charCode >= 32 && charCode <= 126) ? String.fromCharCode(charCode) : ''; -} - -function generateCombinationArray() { - let output = "static const unsigned short int ibm_plex_sans_bold_250[128][128] = {\n"; - - for (let i = 0; i <= 126; i++) { - output += " {"; // Start of inner array - for (let j = 0; j <= 126; j++) { - let charA = getCharRepresentation(i); - let charB = getCharRepresentation(j); - let width = measureCombination(charA, charB) - doc.widthOfString(charB); - let encodedWidth = Math.round(width * 100); // Multiply by 100 and round - - if(charA === '*' && charB == '/') - charB = '\\/'; - - if(charA === '/' && charB == '*') - charB = '\\*'; - - output += `${encodedWidth} /* ${charA}${charB} */`; - if (j < 126) { - output += ", "; - } - } - output += "},\n"; // End of inner array - } - output += "};\n"; // End of 2D array - - return output; -} - -console.log(generateCombinationArray()); -console.log('static const unsigned short int ibm_plex_sans_bold_250_em_size = ' + Math.round(doc.widthOfString('M') * 100) + ';'); diff --git a/src/web/api/maps/contexts_alert_statuses.c b/src/web/api/maps/contexts_alert_statuses.c new file mode 100644 index 000000000..d3565c9e8 --- /dev/null +++ b/src/web/api/maps/contexts_alert_statuses.c @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "contexts_alert_statuses.h" + +static struct { + const char *name; + uint32_t hash; + CONTEXTS_ALERT_STATUS value; +} contexts_alert_status[] = { + {"uninitialized" , 0 , CONTEXT_ALERT_UNINITIALIZED} + , {"undefined" , 0 , CONTEXT_ALERT_UNDEFINED} + , {"clear" , 0 , CONTEXT_ALERT_CLEAR} + , {"raised" , 0 , CONTEXT_ALERT_RAISED} + , {"active" , 0 , CONTEXT_ALERT_RAISED} + , {"warning" , 0 , CONTEXT_ALERT_WARNING} + , {"critical" , 0 , CONTEXT_ALERT_CRITICAL} + , {NULL , 0 , 0} +}; + +CONTEXTS_ALERT_STATUS contexts_alert_status_str_to_id(char *o) { + CONTEXTS_ALERT_STATUS ret = 0; + char *tok; + + while(o && *o && (tok = strsep_skip_consecutive_separators(&o, ", |"))) { + if(!*tok) continue; + + uint32_t hash = simple_hash(tok); + int i; + for(i = 0; contexts_alert_status[i].name ; i++) { + if (unlikely(hash == contexts_alert_status[i].hash && !strcmp(tok, contexts_alert_status[i].name))) { + ret |= contexts_alert_status[i].value; + break; + } + } + } + + return ret; +} + +void contexts_alerts_status_to_buffer_json_array(BUFFER *wb, const char *key, + CONTEXTS_ALERT_STATUS options) { + buffer_json_member_add_array(wb, key); + + CONTEXTS_ALERT_STATUS used = 0; // to prevent adding duplicates + for(int i = 0; contexts_alert_status[i].name ; i++) { + if (unlikely((contexts_alert_status[i].value & options) && !(contexts_alert_status[i].value & used))) { + const char *name = contexts_alert_status[i].name; + used |= contexts_alert_status[i].value; + + buffer_json_add_array_item_string(wb, name); + } + } + + buffer_json_array_close(wb); +} + +void contexts_alert_statuses_init(void) { + for(size_t i = 0; contexts_alert_status[i].name ; i++) + contexts_alert_status[i].hash = simple_hash(contexts_alert_status[i].name); +} diff --git a/src/web/api/maps/contexts_alert_statuses.h b/src/web/api/maps/contexts_alert_statuses.h new file mode 100644 index 000000000..1c38cb976 --- /dev/null +++ b/src/web/api/maps/contexts_alert_statuses.h @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_CONTEXTS_ALERT_STATUSES_H +#define NETDATA_CONTEXTS_ALERT_STATUSES_H + +#include "libnetdata/libnetdata.h" + +typedef enum contexts_alert_status { + CONTEXT_ALERT_UNINITIALIZED = (1 << 6), // include UNINITIALIZED alerts + CONTEXT_ALERT_UNDEFINED = (1 << 7), // include UNDEFINED alerts + CONTEXT_ALERT_CLEAR = (1 << 8), // include CLEAR alerts + CONTEXT_ALERT_RAISED = (1 << 9), // include WARNING & CRITICAL alerts + CONTEXT_ALERT_WARNING = (1 << 10), // include WARNING alerts + CONTEXT_ALERT_CRITICAL = (1 << 11), // include CRITICAL alerts +} CONTEXTS_ALERT_STATUS; + +#define CONTEXTS_ALERT_STATUSES (CONTEXT_ALERT_UNINITIALIZED | CONTEXT_ALERT_UNDEFINED | CONTEXT_ALERT_CLEAR | \ + CONTEXT_ALERT_RAISED | CONTEXT_ALERT_WARNING | CONTEXT_ALERT_CRITICAL) + +CONTEXTS_ALERT_STATUS contexts_alert_status_str_to_id(char *o); +void contexts_alerts_status_to_buffer_json_array(BUFFER *wb, const char *key, + CONTEXTS_ALERT_STATUS options); + +void contexts_alert_statuses_init(void); + +#endif //NETDATA_CONTEXTS_ALERT_STATUSES_H diff --git a/src/web/api/maps/contexts_options.c b/src/web/api/maps/contexts_options.c new file mode 100644 index 000000000..22e50e8d7 --- /dev/null +++ b/src/web/api/maps/contexts_options.c @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "contexts_options.h" + +static struct { + const char *name; + uint32_t hash; + CONTEXTS_OPTIONS value; +} contexts_options[] = { + {"minify" , 0 , CONTEXTS_OPTION_MINIFY} + , {"debug" , 0 , CONTEXTS_OPTION_DEBUG} + , {"config" , 0 , CONTEXTS_OPTION_ALERTS_WITH_CONFIGURATIONS} + , {"instances" , 0 , CONTEXTS_OPTION_ALERTS_WITH_INSTANCES} + , {"values" , 0 , CONTEXTS_OPTION_ALERTS_WITH_VALUES} + , {"summary" , 0 , CONTEXTS_OPTION_ALERTS_WITH_SUMMARY} + , {NULL , 0 , 0} +}; + +CONTEXTS_OPTIONS contexts_options_str_to_id(char *o) { + CONTEXTS_OPTIONS ret = 0; + char *tok; + + while(o && *o && (tok = strsep_skip_consecutive_separators(&o, ", |"))) { + if(!*tok) continue; + + uint32_t hash = simple_hash(tok); + int i; + for(i = 0; contexts_options[i].name ; i++) { + if (unlikely(hash == contexts_options[i].hash && !strcmp(tok, contexts_options[i].name))) { + ret |= contexts_options[i].value; + break; + } + } + } + + return ret; +} + +void contexts_options_to_buffer_json_array(BUFFER *wb, const char *key, CONTEXTS_OPTIONS options) { + buffer_json_member_add_array(wb, key); + + CONTEXTS_OPTIONS used = 0; // to prevent adding duplicates + for(int i = 0; contexts_options[i].name ; i++) { + if (unlikely((contexts_options[i].value & options) && !(contexts_options[i].value & used))) { + const char *name = contexts_options[i].name; + used |= contexts_options[i].value; + + buffer_json_add_array_item_string(wb, name); + } + } + + buffer_json_array_close(wb); +} + +void contexts_options_init(void) { + for(size_t i = 0; contexts_options[i].name ; i++) + contexts_options[i].hash = simple_hash(contexts_options[i].name); +} diff --git a/src/web/api/maps/contexts_options.h b/src/web/api/maps/contexts_options.h new file mode 100644 index 000000000..a21bd76ca --- /dev/null +++ b/src/web/api/maps/contexts_options.h @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_CONTEXTS_OPTIONS_H +#define NETDATA_CONTEXTS_OPTIONS_H + +#include "libnetdata/libnetdata.h" + +typedef enum contexts_options { + CONTEXTS_OPTION_MINIFY = (1 << 0), // remove JSON spaces and newlines from JSON output + CONTEXTS_OPTION_DEBUG = (1 << 1), // show the request + CONTEXTS_OPTION_ALERTS_WITH_CONFIGURATIONS = (1 << 2), // include alert configurations (used by /api/v2/alert_transitions) + CONTEXTS_OPTION_ALERTS_WITH_INSTANCES = (1 << 3), // include alert instances (used by /api/v2/alerts) + CONTEXTS_OPTION_ALERTS_WITH_VALUES = (1 << 4), // include alert latest values (used by /api/v2/alerts) + CONTEXTS_OPTION_ALERTS_WITH_SUMMARY = (1 << 5), // include alerts summary counters (used by /api/v2/alerts) +} CONTEXTS_OPTIONS; + +CONTEXTS_OPTIONS contexts_options_str_to_id(char *o); +void contexts_options_to_buffer_json_array(BUFFER *wb, const char *key, CONTEXTS_OPTIONS options); + +void contexts_options_init(void); + +#endif //NETDATA_CONTEXTS_OPTIONS_H diff --git a/src/web/api/maps/datasource_formats.c b/src/web/api/maps/datasource_formats.c new file mode 100644 index 000000000..33e1e7457 --- /dev/null +++ b/src/web/api/maps/datasource_formats.c @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "datasource_formats.h" + +static struct { + const char *name; + uint32_t hash; + DATASOURCE_FORMAT value; +} google_data_formats[] = { + // this is not an error - when Google requests json, it expects javascript + // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#responseformat + {"json", 0, DATASOURCE_DATATABLE_JSONP} + , {"html", 0, DATASOURCE_HTML} + , {"csv", 0, DATASOURCE_CSV} + , {"tsv-excel", 0, DATASOURCE_TSV} + + // terminator + , {NULL, 0, 0} +}; + +inline DATASOURCE_FORMAT google_data_format_str_to_id(char *name) { + uint32_t hash = simple_hash(name); + int i; + + for(i = 0; google_data_formats[i].name ; i++) { + if (unlikely(hash == google_data_formats[i].hash && !strcmp(name, google_data_formats[i].name))) { + return google_data_formats[i].value; + } + } + + return DATASOURCE_JSON; +} + +// -------------------------------------------------------------------------------------------------------------------- + +static struct { + const char *name; + uint32_t hash; + DATASOURCE_FORMAT value; +} datasource_formats[] = { + { "datatable" , 0 , DATASOURCE_DATATABLE_JSON} + , {"datasource" , 0 , DATASOURCE_DATATABLE_JSONP} + , {"json" , 0 , DATASOURCE_JSON} + , {"json2" , 0 , DATASOURCE_JSON2} + , {"jsonp" , 0 , DATASOURCE_JSONP} + , {"ssv" , 0 , DATASOURCE_SSV} + , {"csv" , 0 , DATASOURCE_CSV} + , {"tsv" , 0 , DATASOURCE_TSV} + , {"tsv-excel" , 0 , DATASOURCE_TSV} + , {"html" , 0 , DATASOURCE_HTML} + , {"array" , 0 , DATASOURCE_JS_ARRAY} + , {"ssvcomma" , 0 , DATASOURCE_SSV_COMMA} + , {"csvjsonarray" , 0 , DATASOURCE_CSV_JSON_ARRAY} + , {"markdown" , 0 , DATASOURCE_CSV_MARKDOWN} + + // terminator + , {NULL, 0, 0} +}; + +DATASOURCE_FORMAT datasource_format_str_to_id(char *name) { + uint32_t hash = simple_hash(name); + int i; + + for(i = 0; datasource_formats[i].name ; i++) { + if (unlikely(hash == datasource_formats[i].hash && !strcmp(name, datasource_formats[i].name))) { + return datasource_formats[i].value; + } + } + + return DATASOURCE_JSON; +} + +const char *rrdr_format_to_string(DATASOURCE_FORMAT format) { + for(size_t i = 0; datasource_formats[i].name ;i++) + if(unlikely(datasource_formats[i].value == format)) + return datasource_formats[i].name; + + return "unknown"; +} + +// -------------------------------------------------------------------------------------------------------------------- + +void datasource_formats_init(void) { + for(size_t i = 0; datasource_formats[i].name ; i++) + datasource_formats[i].hash = simple_hash(datasource_formats[i].name); + + for(size_t i = 0; google_data_formats[i].name ; i++) + google_data_formats[i].hash = simple_hash(google_data_formats[i].name); +} diff --git a/src/web/api/maps/datasource_formats.h b/src/web/api/maps/datasource_formats.h new file mode 100644 index 000000000..50d8a82b4 --- /dev/null +++ b/src/web/api/maps/datasource_formats.h @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_DATASOURCE_FORMATS_H +#define NETDATA_DATASOURCE_FORMATS_H + +#include "libnetdata/libnetdata.h" + +// type of JSON generations +typedef enum { + DATASOURCE_JSON = 0, + DATASOURCE_DATATABLE_JSON, + DATASOURCE_DATATABLE_JSONP, + DATASOURCE_SSV, + DATASOURCE_CSV, + DATASOURCE_JSONP, + DATASOURCE_TSV, + DATASOURCE_HTML, + DATASOURCE_JS_ARRAY, + DATASOURCE_SSV_COMMA, + DATASOURCE_CSV_JSON_ARRAY, + DATASOURCE_CSV_MARKDOWN, + DATASOURCE_JSON2, +} DATASOURCE_FORMAT; + +DATASOURCE_FORMAT datasource_format_str_to_id(char *name); +const char *rrdr_format_to_string(DATASOURCE_FORMAT format); + +DATASOURCE_FORMAT google_data_format_str_to_id(char *name); + +void datasource_formats_init(void); + +#endif //NETDATA_DATASOURCE_FORMATS_H diff --git a/src/web/api/maps/maps.h b/src/web/api/maps/maps.h new file mode 100644 index 000000000..25d210235 --- /dev/null +++ b/src/web/api/maps/maps.h @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_MAPS_H +#define NETDATA_MAPS_H + +#include "libnetdata/libnetdata.h" +#include "datasource_formats.h" +#include "contexts_options.h" +#include "rrdr_options.h" +#include "contexts_alert_statuses.h" + +#endif //NETDATA_MAPS_H diff --git a/src/web/api/maps/rrdr_options.c b/src/web/api/maps/rrdr_options.c new file mode 100644 index 000000000..41161d802 --- /dev/null +++ b/src/web/api/maps/rrdr_options.c @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "rrdr_options.h" + +static struct { + const char *name; + uint32_t hash; + RRDR_OPTIONS value; +} rrdr_options[] = { + { "nonzero" , 0 , RRDR_OPTION_NONZERO} + , {"flip" , 0 , RRDR_OPTION_REVERSED} + , {"reversed" , 0 , RRDR_OPTION_REVERSED} + , {"reverse" , 0 , RRDR_OPTION_REVERSED} + , {"jsonwrap" , 0 , RRDR_OPTION_JSON_WRAP} + , {"min2max" , 0 , RRDR_OPTION_DIMS_MIN2MAX} // rrdr2value() only + , {"average" , 0 , RRDR_OPTION_DIMS_AVERAGE} // rrdr2value() only + , {"min" , 0 , RRDR_OPTION_DIMS_MIN} // rrdr2value() only + , {"max" , 0 , RRDR_OPTION_DIMS_MAX} // rrdr2value() only + , {"ms" , 0 , RRDR_OPTION_MILLISECONDS} + , {"milliseconds" , 0 , RRDR_OPTION_MILLISECONDS} + , {"absolute" , 0 , RRDR_OPTION_ABSOLUTE} + , {"abs" , 0 , RRDR_OPTION_ABSOLUTE} + , {"absolute_sum" , 0 , RRDR_OPTION_ABSOLUTE} + , {"absolute-sum" , 0 , RRDR_OPTION_ABSOLUTE} + , {"display_absolute" , 0 , RRDR_OPTION_DISPLAY_ABS} + , {"display-absolute" , 0 , RRDR_OPTION_DISPLAY_ABS} + , {"seconds" , 0 , RRDR_OPTION_SECONDS} + , {"null2zero" , 0 , RRDR_OPTION_NULL2ZERO} + , {"objectrows" , 0 , RRDR_OPTION_OBJECTSROWS} + , {"google_json" , 0 , RRDR_OPTION_GOOGLE_JSON} + , {"google-json" , 0 , RRDR_OPTION_GOOGLE_JSON} + , {"percentage" , 0 , RRDR_OPTION_PERCENTAGE} + , {"unaligned" , 0 , RRDR_OPTION_NOT_ALIGNED} + , {"match_ids" , 0 , RRDR_OPTION_MATCH_IDS} + , {"match-ids" , 0 , RRDR_OPTION_MATCH_IDS} + , {"match_names" , 0 , RRDR_OPTION_MATCH_NAMES} + , {"match-names" , 0 , RRDR_OPTION_MATCH_NAMES} + , {"anomaly-bit" , 0 , RRDR_OPTION_ANOMALY_BIT} + , {"selected-tier" , 0 , RRDR_OPTION_SELECTED_TIER} + , {"raw" , 0 , RRDR_OPTION_RETURN_RAW} + , {"jw-anomaly-rates" , 0 , RRDR_OPTION_RETURN_JWAR} + , {"natural-points" , 0 , RRDR_OPTION_NATURAL_POINTS} + , {"virtual-points" , 0 , RRDR_OPTION_VIRTUAL_POINTS} + , {"all-dimensions" , 0 , RRDR_OPTION_ALL_DIMENSIONS} + , {"details" , 0 , RRDR_OPTION_SHOW_DETAILS} + , {"debug" , 0 , RRDR_OPTION_DEBUG} + , {"plan" , 0 , RRDR_OPTION_DEBUG} + , {"minify" , 0 , RRDR_OPTION_MINIFY} + , {"group-by-labels" , 0 , RRDR_OPTION_GROUP_BY_LABELS} + , {"label-quotes" , 0 , RRDR_OPTION_LABEL_QUOTES} + , {NULL , 0 , 0} +}; + +RRDR_OPTIONS rrdr_options_parse_one(const char *o) { + RRDR_OPTIONS ret = 0; + + if(!o || !*o) return ret; + + uint32_t hash = simple_hash(o); + int i; + for(i = 0; rrdr_options[i].name ; i++) { + if (unlikely(hash == rrdr_options[i].hash && !strcmp(o, rrdr_options[i].name))) { + ret |= rrdr_options[i].value; + break; + } + } + + return ret; +} + +RRDR_OPTIONS rrdr_options_parse(char *o) { + RRDR_OPTIONS ret = 0; + char *tok; + + while(o && *o && (tok = strsep_skip_consecutive_separators(&o, ", |"))) { + if(!*tok) continue; + ret |= rrdr_options_parse_one(tok); + } + + return ret; +} + +void rrdr_options_to_buffer_json_array(BUFFER *wb, const char *key, RRDR_OPTIONS options) { + buffer_json_member_add_array(wb, key); + + RRDR_OPTIONS used = 0; // to prevent adding duplicates + for(int i = 0; rrdr_options[i].name ; i++) { + if (unlikely((rrdr_options[i].value & options) && !(rrdr_options[i].value & used))) { + const char *name = rrdr_options[i].name; + used |= rrdr_options[i].value; + + buffer_json_add_array_item_string(wb, name); + } + } + + buffer_json_array_close(wb); +} + +void rrdr_options_to_buffer(BUFFER *wb, RRDR_OPTIONS options) { + RRDR_OPTIONS used = 0; // to prevent adding duplicates + size_t added = 0; + for(int i = 0; rrdr_options[i].name ; i++) { + if (unlikely((rrdr_options[i].value & options) && !(rrdr_options[i].value & used))) { + const char *name = rrdr_options[i].name; + used |= rrdr_options[i].value; + + if(added++) buffer_strcat(wb, " "); + buffer_strcat(wb, name); + } + } +} + +void web_client_api_request_data_vX_options_to_string(char *buf, size_t size, RRDR_OPTIONS options) { + char *write = buf; + char *end = &buf[size - 1]; + + RRDR_OPTIONS used = 0; // to prevent adding duplicates + int added = 0; + for(int i = 0; rrdr_options[i].name ; i++) { + if (unlikely((rrdr_options[i].value & options) && !(rrdr_options[i].value & used))) { + const char *name = rrdr_options[i].name; + used |= rrdr_options[i].value; + + if(added && write < end) + *write++ = ','; + + while(*name && write < end) + *write++ = *name++; + + added++; + } + } + *write = *end = '\0'; +} + +void rrdr_options_init(void) { + for(size_t i = 0; rrdr_options[i].name ; i++) + rrdr_options[i].hash = simple_hash(rrdr_options[i].name); +} diff --git a/src/web/api/maps/rrdr_options.h b/src/web/api/maps/rrdr_options.h new file mode 100644 index 000000000..4b6697dba --- /dev/null +++ b/src/web/api/maps/rrdr_options.h @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_RRDR_OPTIONS_H +#define NETDATA_RRDR_OPTIONS_H + +#include "libnetdata/libnetdata.h" + +typedef enum rrdr_options { + RRDR_OPTION_NONZERO = (1 << 0), // don't output dimensions with just zero values + RRDR_OPTION_REVERSED = (1 << 1), // output the rows in reverse order (oldest to newest) + RRDR_OPTION_ABSOLUTE = (1 << 2), // values positive, for DATASOURCE_SSV before summing + RRDR_OPTION_DIMS_MIN2MAX = (1 << 3), // when adding dimensions, use max - min, instead of sum + RRDR_OPTION_DIMS_AVERAGE = (1 << 4), // when adding dimensions, use average, instead of sum + RRDR_OPTION_DIMS_MIN = (1 << 5), // when adding dimensions, use minimum, instead of sum + RRDR_OPTION_DIMS_MAX = (1 << 6), // when adding dimensions, use maximum, instead of sum + RRDR_OPTION_SECONDS = (1 << 7), // output seconds, instead of dates + RRDR_OPTION_MILLISECONDS = (1 << 8), // output milliseconds, instead of dates + RRDR_OPTION_NULL2ZERO = (1 << 9), // do not show nulls, convert them to zeros + RRDR_OPTION_OBJECTSROWS = (1 << 10), // each row of values should be an object, not an array + RRDR_OPTION_GOOGLE_JSON = (1 << 11), // comply with google JSON/JSONP specs + RRDR_OPTION_JSON_WRAP = (1 << 12), // wrap the response in a JSON header with info about the result + RRDR_OPTION_LABEL_QUOTES = (1 << 13), // in CSV output, wrap header labels in double quotes + RRDR_OPTION_PERCENTAGE = (1 << 14), // give values as percentage of total + RRDR_OPTION_NOT_ALIGNED = (1 << 15), // do not align charts for persistent timeframes + RRDR_OPTION_DISPLAY_ABS = (1 << 16), // for badges, display the absolute value, but calculate colors with sign + RRDR_OPTION_MATCH_IDS = (1 << 17), // when filtering dimensions, match only IDs + RRDR_OPTION_MATCH_NAMES = (1 << 18), // when filtering dimensions, match only names + RRDR_OPTION_NATURAL_POINTS = (1 << 19), // return the natural points of the database + RRDR_OPTION_VIRTUAL_POINTS = (1 << 20), // return virtual points + RRDR_OPTION_ANOMALY_BIT = (1 << 21), // Return the anomaly bit stored in each collected_number + RRDR_OPTION_RETURN_RAW = (1 << 22), // Return raw data for aggregating across multiple nodes + RRDR_OPTION_RETURN_JWAR = (1 << 23), // Return anomaly rates in jsonwrap + RRDR_OPTION_SELECTED_TIER = (1 << 24), // Use the selected tier for the query + RRDR_OPTION_ALL_DIMENSIONS = (1 << 25), // Return the full dimensions list + RRDR_OPTION_SHOW_DETAILS = (1 << 26), // v2 returns detailed object tree + RRDR_OPTION_DEBUG = (1 << 27), // v2 returns request description + RRDR_OPTION_MINIFY = (1 << 28), // remove JSON spaces and newlines from JSON output + RRDR_OPTION_GROUP_BY_LABELS = (1 << 29), // v2 returns flattened labels per dimension of the chart + + // internal ones - not to be exposed to the API + RRDR_OPTION_INTERNAL_AR = (1 << 31), // internal use only, to let the formatters know we want to render the anomaly rate +} RRDR_OPTIONS; + +void rrdr_options_to_buffer(BUFFER *wb, RRDR_OPTIONS options); +void rrdr_options_to_buffer_json_array(BUFFER *wb, const char *key, RRDR_OPTIONS options); +void web_client_api_request_data_vX_options_to_string(char *buf, size_t size, RRDR_OPTIONS options); +void rrdr_options_init(void); + +RRDR_OPTIONS rrdr_options_parse(char *o); +RRDR_OPTIONS rrdr_options_parse_one(const char *o); + +#endif //NETDATA_RRDR_OPTIONS_H diff --git a/src/web/api/queries/average/README.md b/src/web/api/queries/average/README.md index 1ad78bee5..97fb8beb7 100644 --- a/src/web/api/queries/average/README.md +++ b/src/web/api/queries/average/README.md @@ -1,12 +1,3 @@ - - # Average or Mean > This query is available as `average` and `mean`. diff --git a/src/web/api/queries/countif/README.md b/src/web/api/queries/countif/README.md index a40535395..1b7b682c2 100644 --- a/src/web/api/queries/countif/README.md +++ b/src/web/api/queries/countif/README.md @@ -1,12 +1,3 @@ - - # CountIf > This query is available as `countif`. diff --git a/src/web/api/queries/des/README.md b/src/web/api/queries/des/README.md index 6dc19e732..fb053de5d 100644 --- a/src/web/api/queries/des/README.md +++ b/src/web/api/queries/des/README.md @@ -1,12 +1,3 @@ - - # double exponential smoothing Exponential smoothing is one of many window functions commonly applied to smooth data in signal diff --git a/src/web/api/queries/incremental_sum/README.md b/src/web/api/queries/incremental_sum/README.md index 6f02abe7d..5e2462893 100644 --- a/src/web/api/queries/incremental_sum/README.md +++ b/src/web/api/queries/incremental_sum/README.md @@ -1,12 +1,3 @@ - - # Incremental Sum (`incremental_sum`) This modules finds the incremental sum of a period, which `last value - first value`. diff --git a/src/web/api/queries/max/README.md b/src/web/api/queries/max/README.md index ae634e05e..6a24a0a57 100644 --- a/src/web/api/queries/max/README.md +++ b/src/web/api/queries/max/README.md @@ -1,12 +1,3 @@ - - # Max This module finds the max value in the time-frame given. diff --git a/src/web/api/queries/median/README.md b/src/web/api/queries/median/README.md index e6f6c04e7..42a9afb1d 100644 --- a/src/web/api/queries/median/README.md +++ b/src/web/api/queries/median/README.md @@ -1,13 +1,3 @@ - - # Median The median is the value separating the higher half from the lower half of a data sample diff --git a/src/web/api/queries/min/README.md b/src/web/api/queries/min/README.md index 35acb8c9e..f2a35d625 100644 --- a/src/web/api/queries/min/README.md +++ b/src/web/api/queries/min/README.md @@ -1,12 +1,3 @@ - - # Min This module finds the min value in the time-frame given. diff --git a/src/web/api/queries/percentile/README.md b/src/web/api/queries/percentile/README.md index 88abf8d5c..0f9a2f398 100644 --- a/src/web/api/queries/percentile/README.md +++ b/src/web/api/queries/percentile/README.md @@ -1,13 +1,3 @@ - - # Percentile The percentile is the average value of a series using only the smaller N percentile of the values. diff --git a/src/web/api/queries/rrdr.h b/src/web/api/queries/rrdr.h index d36d3f5b3..860a375c9 100644 --- a/src/web/api/queries/rrdr.h +++ b/src/web/api/queries/rrdr.h @@ -17,62 +17,6 @@ typedef enum tier_query_fetch { TIER_QUERY_FETCH_AVERAGE } TIER_QUERY_FETCH; -typedef enum rrdr_options { - RRDR_OPTION_NONZERO = (1 << 0), // don't output dimensions with just zero values - RRDR_OPTION_REVERSED = (1 << 1), // output the rows in reverse order (oldest to newest) - RRDR_OPTION_ABSOLUTE = (1 << 2), // values positive, for DATASOURCE_SSV before summing - RRDR_OPTION_DIMS_MIN2MAX = (1 << 3), // when adding dimensions, use max - min, instead of sum - RRDR_OPTION_DIMS_AVERAGE = (1 << 4), // when adding dimensions, use average, instead of sum - RRDR_OPTION_DIMS_MIN = (1 << 5), // when adding dimensions, use minimum, instead of sum - RRDR_OPTION_DIMS_MAX = (1 << 6), // when adding dimensions, use maximum, instead of sum - RRDR_OPTION_SECONDS = (1 << 7), // output seconds, instead of dates - RRDR_OPTION_MILLISECONDS = (1 << 8), // output milliseconds, instead of dates - RRDR_OPTION_NULL2ZERO = (1 << 9), // do not show nulls, convert them to zeros - RRDR_OPTION_OBJECTSROWS = (1 << 10), // each row of values should be an object, not an array - RRDR_OPTION_GOOGLE_JSON = (1 << 11), // comply with google JSON/JSONP specs - RRDR_OPTION_JSON_WRAP = (1 << 12), // wrap the response in a JSON header with info about the result - RRDR_OPTION_LABEL_QUOTES = (1 << 13), // in CSV output, wrap header labels in double quotes - RRDR_OPTION_PERCENTAGE = (1 << 14), // give values as percentage of total - RRDR_OPTION_NOT_ALIGNED = (1 << 15), // do not align charts for persistent timeframes - RRDR_OPTION_DISPLAY_ABS = (1 << 16), // for badges, display the absolute value, but calculate colors with sign - RRDR_OPTION_MATCH_IDS = (1 << 17), // when filtering dimensions, match only IDs - RRDR_OPTION_MATCH_NAMES = (1 << 18), // when filtering dimensions, match only names - RRDR_OPTION_NATURAL_POINTS = (1 << 19), // return the natural points of the database - RRDR_OPTION_VIRTUAL_POINTS = (1 << 20), // return virtual points - RRDR_OPTION_ANOMALY_BIT = (1 << 21), // Return the anomaly bit stored in each collected_number - RRDR_OPTION_RETURN_RAW = (1 << 22), // Return raw data for aggregating across multiple nodes - RRDR_OPTION_RETURN_JWAR = (1 << 23), // Return anomaly rates in jsonwrap - RRDR_OPTION_SELECTED_TIER = (1 << 24), // Use the selected tier for the query - RRDR_OPTION_ALL_DIMENSIONS = (1 << 25), // Return the full dimensions list - RRDR_OPTION_SHOW_DETAILS = (1 << 26), // v2 returns detailed object tree - RRDR_OPTION_DEBUG = (1 << 27), // v2 returns request description - RRDR_OPTION_MINIFY = (1 << 28), // remove JSON spaces and newlines from JSON output - RRDR_OPTION_GROUP_BY_LABELS = (1 << 29), // v2 returns flattened labels per dimension of the chart - - // internal ones - not to be exposed to the API - RRDR_OPTION_INTERNAL_AR = (1 << 31), // internal use only, to let the formatters know we want to render the anomaly rate -} RRDR_OPTIONS; - -typedef enum context_v2_options { - CONTEXT_V2_OPTION_MINIFY = (1 << 0), // remove JSON spaces and newlines from JSON output - CONTEXT_V2_OPTION_DEBUG = (1 << 1), // show the request - CONTEXT_V2_OPTION_ALERTS_WITH_CONFIGURATIONS = (1 << 2), // include alert configurations (used by /api/v2/alert_transitions) - CONTEXT_V2_OPTION_ALERTS_WITH_INSTANCES = (1 << 3), // include alert instances (used by /api/v2/alerts) - CONTEXT_V2_OPTION_ALERTS_WITH_VALUES = (1 << 4), // include alert latest values (used by /api/v2/alerts) - CONTEXT_V2_OPTION_ALERTS_WITH_SUMMARY = (1 << 5), // include alerts summary counters (used by /api/v2/alerts) -} CONTEXTS_V2_OPTIONS; - -typedef enum context_v2_alert_status { - CONTEXT_V2_ALERT_UNINITIALIZED = (1 << 5), // include UNINITIALIZED alerts - CONTEXT_V2_ALERT_UNDEFINED = (1 << 6), // include UNDEFINED alerts - CONTEXT_V2_ALERT_CLEAR = (1 << 7), // include CLEAR alerts - CONTEXT_V2_ALERT_RAISED = (1 << 8), // include WARNING & CRITICAL alerts - CONTEXT_V2_ALERT_WARNING = (1 << 9), // include WARNING alerts - CONTEXT_V2_ALERT_CRITICAL = (1 << 10), // include CRITICAL alerts -} CONTEXTS_V2_ALERT_STATUS; - -#define CONTEXTS_V2_ALERT_STATUSES (CONTEXT_V2_ALERT_UNINITIALIZED|CONTEXT_V2_ALERT_UNDEFINED|CONTEXT_V2_ALERT_CLEAR|CONTEXT_V2_ALERT_RAISED|CONTEXT_V2_ALERT_WARNING|CONTEXT_V2_ALERT_CRITICAL) - typedef enum __attribute__ ((__packed__)) rrdr_value_flag { // IMPORTANT: diff --git a/src/web/api/queries/ses/README.md b/src/web/api/queries/ses/README.md index e2fd65d7a..58afdbe0c 100644 --- a/src/web/api/queries/ses/README.md +++ b/src/web/api/queries/ses/README.md @@ -1,12 +1,3 @@ - - # Single (or Simple) Exponential Smoothing (`ses`) > This query is also available as `ema` and `ewma`. diff --git a/src/web/api/queries/stddev/README.md b/src/web/api/queries/stddev/README.md index 76cfee1f1..62cda84fd 100644 --- a/src/web/api/queries/stddev/README.md +++ b/src/web/api/queries/stddev/README.md @@ -1,12 +1,3 @@ - - # standard deviation (`stddev`) The standard deviation is a measure that is used to quantify the amount of variation or dispersion diff --git a/src/web/api/queries/sum/README.md b/src/web/api/queries/sum/README.md index dd29b9c5b..1bb71a623 100644 --- a/src/web/api/queries/sum/README.md +++ b/src/web/api/queries/sum/README.md @@ -1,12 +1,3 @@ - - # Sum This module sums all the values in the time-frame requested. diff --git a/src/web/api/queries/trimmed_mean/README.md b/src/web/api/queries/trimmed_mean/README.md index 969023292..66d86a535 100644 --- a/src/web/api/queries/trimmed_mean/README.md +++ b/src/web/api/queries/trimmed_mean/README.md @@ -1,13 +1,3 @@ - - # Trimmed Mean The trimmed mean is the average value of a series excluding the smallest and biggest points. diff --git a/src/web/api/queries/weights.c b/src/web/api/queries/weights.c index 44928fea8..e34774f32 100644 --- a/src/web/api/queries/weights.c +++ b/src/web/api/queries/weights.c @@ -4,9 +4,7 @@ #include "database/KolmogorovSmirnovDist.h" #define MAX_POINTS 10000 -int enable_metric_correlations = CONFIG_BOOLEAN_YES; int metric_correlations_version = 1; -WEIGHTS_METHOD default_metric_correlations_method = WEIGHTS_METHOD_MC_KS2; typedef struct weights_stats { NETDATA_DOUBLE max_base_high_ratio; @@ -36,7 +34,7 @@ WEIGHTS_METHOD weights_string_to_method(const char *method) { if(strcmp(method, weights_methods[i].name) == 0) return weights_methods[i].value; - return default_metric_correlations_method; + return WEIGHTS_METHOD_MC_KS2; } const char *weights_method_to_string(WEIGHTS_METHOD method) { @@ -44,7 +42,7 @@ const char *weights_method_to_string(WEIGHTS_METHOD method) { if(weights_methods[i].value == method) return weights_methods[i].name; - return "unknown"; + return "ks2"; } // ---------------------------------------------------------------------------- @@ -978,6 +976,12 @@ static size_t registered_results_to_json_multinode_group_by( BUFFER *key = buffer_create(0, NULL); BUFFER *name = buffer_create(0, NULL); dfe_start_read(results, t) { + char node_uuid[UUID_STR_LEN]; + + if(UUIDiszero(t->host->node_id)) + uuid_unparse_lower(t->host->host_id.uuid, node_uuid); + else + uuid_unparse_lower(t->host->node_id.uuid, node_uuid); buffer_flush(key); buffer_flush(name); @@ -998,7 +1002,7 @@ static size_t registered_results_to_json_multinode_group_by( if(!(qwd->qwr->group_by.group_by & RRDR_GROUP_BY_NODE)) { buffer_fast_strcat(key, "@", 1); buffer_fast_strcat(name, "@", 1); - buffer_strcat(key, t->host->machine_guid); + buffer_strcat(key, node_uuid); buffer_strcat(name, rrdhost_hostname(t->host)); } } @@ -1008,7 +1012,7 @@ static size_t registered_results_to_json_multinode_group_by( buffer_fast_strcat(name, ",", 1); } - buffer_strcat(key, t->host->machine_guid); + buffer_strcat(key, node_uuid); buffer_strcat(name, rrdhost_hostname(t->host)); } if(qwd->qwr->group_by.group_by & RRDR_GROUP_BY_CONTEXT) { diff --git a/src/web/api/queries/weights.h b/src/web/api/queries/weights.h index be7e5a8b3..6d2bf8e09 100644 --- a/src/web/api/queries/weights.h +++ b/src/web/api/queries/weights.h @@ -18,9 +18,7 @@ typedef enum { WEIGHTS_FORMAT_MULTINODE = 3, } WEIGHTS_FORMAT; -extern int enable_metric_correlations; extern int metric_correlations_version; -extern WEIGHTS_METHOD default_metric_correlations_method; typedef bool (*weights_interrupt_callback_t)(void *data); diff --git a/src/web/api/v1/api_v1_aclk.c b/src/web/api/v1/api_v1_aclk.c new file mode 100644 index 000000000..b9878db2f --- /dev/null +++ b/src/web/api/v1/api_v1_aclk.c @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_aclk(RRDHOST *host, struct web_client *w, char *url) { + UNUSED(url); + UNUSED(host); + if (!netdata_ready) return HTTP_RESP_SERVICE_UNAVAILABLE; + + BUFFER *wb = w->response.data; + buffer_flush(wb); + char *str = aclk_state_json(); + buffer_strcat(wb, str); + freez(str); + + wb->content_type = CT_APPLICATION_JSON; + buffer_no_cacheable(wb); + return HTTP_RESP_OK; +} + diff --git a/src/web/api/v1/api_v1_alarms.c b/src/web/api/v1/api_v1_alarms.c new file mode 100644 index 000000000..4f3af74b5 --- /dev/null +++ b/src/web/api/v1/api_v1_alarms.c @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +static int web_client_api_request_v1_alarms_select(char *url) { + int all = 0; + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + if(!strcmp(value, "all") || !strcmp(value, "all=true")) all = 1; + else if(!strcmp(value, "active") || !strcmp(value, "active=true")) all = 0; + } + + return all; +} + +int api_v1_alarms(RRDHOST *host, struct web_client *w, char *url) { + int all = web_client_api_request_v1_alarms_select(url); + + buffer_flush(w->response.data); + w->response.data->content_type = CT_APPLICATION_JSON; + health_alarms2json(host, w->response.data, all); + buffer_no_cacheable(w->response.data); + return HTTP_RESP_OK; +} + +int api_v1_alarms_values(RRDHOST *host, struct web_client *w, char *url) { + int all = web_client_api_request_v1_alarms_select(url); + + buffer_flush(w->response.data); + w->response.data->content_type = CT_APPLICATION_JSON; + health_alarms_values2json(host, w->response.data, all); + buffer_no_cacheable(w->response.data); + return HTTP_RESP_OK; +} + +int api_v1_alarm_count(RRDHOST *host, struct web_client *w, char *url) { + RRDCALC_STATUS status = RRDCALC_STATUS_RAISED; + BUFFER *contexts = NULL; + + buffer_flush(w->response.data); + buffer_sprintf(w->response.data, "["); + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 alarm_count query param '%s' with value '%s'", w->id, name, value); + + char* p = value; + if(!strcmp(name, "status")) { + while ((*p = toupper(*p))) p++; + if (!strcmp("CRITICAL", value)) status = RRDCALC_STATUS_CRITICAL; + else if (!strcmp("WARNING", value)) status = RRDCALC_STATUS_WARNING; + else if (!strcmp("UNINITIALIZED", value)) status = RRDCALC_STATUS_UNINITIALIZED; + else if (!strcmp("UNDEFINED", value)) status = RRDCALC_STATUS_UNDEFINED; + else if (!strcmp("REMOVED", value)) status = RRDCALC_STATUS_REMOVED; + else if (!strcmp("CLEAR", value)) status = RRDCALC_STATUS_CLEAR; + } + else if(!strcmp(name, "context") || !strcmp(name, "ctx")) { + if(!contexts) contexts = buffer_create(255, &netdata_buffers_statistics.buffers_api); + buffer_strcat(contexts, "|"); + buffer_strcat(contexts, value); + } + } + + health_aggregate_alarms(host, w->response.data, contexts, status); + + buffer_sprintf(w->response.data, "]\n"); + w->response.data->content_type = CT_APPLICATION_JSON; + buffer_no_cacheable(w->response.data); + + buffer_free(contexts); + return 200; +} + +int api_v1_alarm_log(RRDHOST *host, struct web_client *w, char *url) { + time_t after = 0; + char *chart = NULL; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + if (!strcmp(name, "after")) after = (time_t) strtoul(value, NULL, 0); + else if (!strcmp(name, "chart")) chart = value; + } + + buffer_flush(w->response.data); + w->response.data->content_type = CT_APPLICATION_JSON; + sql_health_alarm_log2json(host, w->response.data, after, chart); + return HTTP_RESP_OK; +} + +int api_v1_variable(RRDHOST *host, struct web_client *w, char *url) { + int ret = HTTP_RESP_BAD_REQUEST; + char *chart = NULL; + char *variable = NULL; + + buffer_flush(w->response.data); + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "chart")) chart = value; + else if(!strcmp(name, "variable")) variable = value; + } + + if(!chart || !*chart || !variable || !*variable) { + buffer_sprintf(w->response.data, "A chart= and a variable= are required."); + goto cleanup; + } + + RRDSET *st = rrdset_find(host, chart); + if(!st) st = rrdset_find_byname(host, chart); + if(!st) { + buffer_strcat(w->response.data, "Chart is not found: "); + buffer_strcat_htmlescape(w->response.data, chart); + ret = HTTP_RESP_NOT_FOUND; + goto cleanup; + } + + w->response.data->content_type = CT_APPLICATION_JSON; + st->last_accessed_time_s = now_realtime_sec(); + alert_variable_lookup_trace(host, st, variable, w->response.data); + + return HTTP_RESP_OK; + +cleanup: + return ret; +} + +int api_v1_alarm_variables(RRDHOST *host, struct web_client *w, char *url) { + return api_v1_single_chart_helper(host, w, url, health_api_v1_chart_variables2json); +} + diff --git a/src/web/api/v1/api_v1_allmetrics.c b/src/web/api/v1/api_v1_allmetrics.c new file mode 100644 index 000000000..593475efd --- /dev/null +++ b/src/web/api/v1/api_v1_allmetrics.c @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +#define ALLMETRICS_FORMAT_SHELL "shell" +#define ALLMETRICS_FORMAT_PROMETHEUS "prometheus" +#define ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS "prometheus_all_hosts" +#define ALLMETRICS_FORMAT_JSON "json" + +#define ALLMETRICS_SHELL 1 +#define ALLMETRICS_PROMETHEUS 2 +#define ALLMETRICS_JSON 3 +#define ALLMETRICS_PROMETHEUS_ALL_HOSTS 4 + +struct prometheus_output_options { + char *name; + PROMETHEUS_OUTPUT_OPTIONS flag; +} prometheus_output_flags_root[] = { + { "names", PROMETHEUS_OUTPUT_NAMES }, + { "timestamps", PROMETHEUS_OUTPUT_TIMESTAMPS }, + { "variables", PROMETHEUS_OUTPUT_VARIABLES }, + { "oldunits", PROMETHEUS_OUTPUT_OLDUNITS }, + { "hideunits", PROMETHEUS_OUTPUT_HIDEUNITS }, + // terminator + { NULL, PROMETHEUS_OUTPUT_NONE }, +}; + +// ---------------------------------------------------------------------------- +// BASH +// /api/v1/allmetrics?format=bash + +static inline size_t shell_name_copy(char *d, const char *s, size_t usable) { + size_t n; + + for(n = 0; *s && n < usable ; d++, s++, n++) { + register char c = *s; + + if(unlikely(!isalnum(c))) *d = '_'; + else *d = (char)toupper(c); + } + *d = '\0'; + + return n; +} + +#define SHELL_ELEMENT_MAX 100 + +void rrd_stats_api_v1_charts_allmetrics_shell(RRDHOST *host, const char *filter_string, BUFFER *wb) { + analytics_log_shell(); + SIMPLE_PATTERN *filter = simple_pattern_create(filter_string, NULL, SIMPLE_PATTERN_EXACT, true); + + // for each chart + RRDSET *st; + rrdset_foreach_read(st, host) { + if (filter && !simple_pattern_matches_string(filter, st->name)) + continue; + if (rrdset_is_available_for_viewers(st)) { + NETDATA_DOUBLE total = 0.0; + + char chart[SHELL_ELEMENT_MAX + 1]; + shell_name_copy(chart, st->name ? rrdset_name(st) : rrdset_id(st), SHELL_ELEMENT_MAX); + + buffer_sprintf(wb, "\n# chart: %s (name: %s)\n", rrdset_id(st), rrdset_name(st)); + + // for each dimension + RRDDIM *rd; + rrddim_foreach_read(rd, st) { + if(rd->collector.counter && !rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)) { + char dimension[SHELL_ELEMENT_MAX + 1]; + shell_name_copy(dimension, rd->name?rrddim_name(rd):rrddim_id(rd), SHELL_ELEMENT_MAX); + + NETDATA_DOUBLE n = rd->collector.last_stored_value; + + if(isnan(n) || isinf(n)) + buffer_sprintf(wb, "NETDATA_%s_%s=\"\" # %s\n", chart, dimension, rrdset_units(st)); + else { + if(rd->multiplier < 0 || rd->divisor < 0) n = -n; + n = roundndd(n); + if(!rrddim_option_check(rd, RRDDIM_OPTION_HIDDEN)) total += n; + buffer_sprintf(wb, "NETDATA_%s_%s=\"" NETDATA_DOUBLE_FORMAT_ZERO "\" # %s\n", chart, dimension, n, rrdset_units(st)); + } + } + } + rrddim_foreach_done(rd); + + total = roundndd(total); + buffer_sprintf(wb, "NETDATA_%s_VISIBLETOTAL=\"" NETDATA_DOUBLE_FORMAT_ZERO "\" # %s\n", chart, total, rrdset_units(st)); + } + } + rrdset_foreach_done(st); + + buffer_strcat(wb, "\n# NETDATA ALARMS RUNNING\n"); + + RRDCALC *rc; + foreach_rrdcalc_in_rrdhost_read(host, rc) { + if(!rc->rrdset) continue; + + char chart[SHELL_ELEMENT_MAX + 1]; + shell_name_copy(chart, rc->rrdset->name?rrdset_name(rc->rrdset):rrdset_id(rc->rrdset), SHELL_ELEMENT_MAX); + + char alarm[SHELL_ELEMENT_MAX + 1]; + shell_name_copy(alarm, rrdcalc_name(rc), SHELL_ELEMENT_MAX); + + NETDATA_DOUBLE n = rc->value; + + if(isnan(n) || isinf(n)) + buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"\" # %s\n", chart, alarm, rrdcalc_units(rc)); + else { + n = roundndd(n); + buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"" NETDATA_DOUBLE_FORMAT_ZERO "\" # %s\n", chart, alarm, n, rrdcalc_units(rc)); + } + + buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_STATUS=\"%s\"\n", chart, alarm, rrdcalc_status2string(rc->status)); + } + foreach_rrdcalc_in_rrdhost_done(rc); + + simple_pattern_free(filter); +} + +// ---------------------------------------------------------------------------- + +void rrd_stats_api_v1_charts_allmetrics_json(RRDHOST *host, const char *filter_string, BUFFER *wb) { + analytics_log_json(); + SIMPLE_PATTERN *filter = simple_pattern_create(filter_string, NULL, SIMPLE_PATTERN_EXACT, true); + + buffer_strcat(wb, "{"); + + size_t chart_counter = 0; + size_t dimension_counter = 0; + + // for each chart + RRDSET *st; + rrdset_foreach_read(st, host) { + if (filter && !(simple_pattern_matches_string(filter, st->id) || simple_pattern_matches_string(filter, st->name))) + continue; + + if(rrdset_is_available_for_viewers(st)) { + buffer_sprintf( + wb, + "%s\n" + "\t\"%s\": {\n" + "\t\t\"name\":\"%s\",\n" + "\t\t\"family\":\"%s\",\n" + "\t\t\"context\":\"%s\",\n" + "\t\t\"units\":\"%s\",\n" + "\t\t\"last_updated\": %"PRId64",\n" + "\t\t\"dimensions\": {", + chart_counter ? "," : "", + rrdset_id(st), + rrdset_name(st), + rrdset_family(st), + rrdset_context(st), + rrdset_units(st), + (int64_t) rrdset_last_entry_s(st)); + + chart_counter++; + dimension_counter = 0; + + // for each dimension + RRDDIM *rd; + rrddim_foreach_read(rd, st) { + if(rd->collector.counter && !rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE)) { + buffer_sprintf( + wb, + "%s\n" + "\t\t\t\"%s\": {\n" + "\t\t\t\t\"name\": \"%s\",\n" + "\t\t\t\t\"value\": ", + dimension_counter ? "," : "", + rrddim_id(rd), + rrddim_name(rd)); + + if(isnan(rd->collector.last_stored_value)) + buffer_strcat(wb, "null"); + else + buffer_sprintf(wb, NETDATA_DOUBLE_FORMAT, rd->collector.last_stored_value); + + buffer_strcat(wb, "\n\t\t\t}"); + + dimension_counter++; + } + } + rrddim_foreach_done(rd); + + buffer_strcat(wb, "\n\t\t}\n\t}"); + } + } + rrdset_foreach_done(st); + + buffer_strcat(wb, "\n}"); + simple_pattern_free(filter); +} + +int api_v1_allmetrics(RRDHOST *host, struct web_client *w, char *url) { + int format = ALLMETRICS_SHELL; + const char *filter = NULL; + const char *prometheus_server = w->client_ip; + + uint32_t prometheus_exporting_options; + if (prometheus_exporter_instance) + prometheus_exporting_options = prometheus_exporter_instance->config.options; + else + prometheus_exporting_options = global_exporting_options; + + PROMETHEUS_OUTPUT_OPTIONS prometheus_output_options = + PROMETHEUS_OUTPUT_TIMESTAMPS | + ((prometheus_exporting_options & EXPORTING_OPTION_SEND_NAMES) ? PROMETHEUS_OUTPUT_NAMES : 0); + + const char *prometheus_prefix; + if (prometheus_exporter_instance) + prometheus_prefix = prometheus_exporter_instance->config.prefix; + else + prometheus_prefix = global_exporting_prefix; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + if(!strcmp(name, "format")) { + if(!strcmp(value, ALLMETRICS_FORMAT_SHELL)) + format = ALLMETRICS_SHELL; + else if(!strcmp(value, ALLMETRICS_FORMAT_PROMETHEUS)) + format = ALLMETRICS_PROMETHEUS; + else if(!strcmp(value, ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS)) + format = ALLMETRICS_PROMETHEUS_ALL_HOSTS; + else if(!strcmp(value, ALLMETRICS_FORMAT_JSON)) + format = ALLMETRICS_JSON; + else + format = 0; + } + else if(!strcmp(name, "filter")) { + filter = value; + } + else if(!strcmp(name, "server")) { + prometheus_server = value; + } + else if(!strcmp(name, "prefix")) { + prometheus_prefix = value; + } + else if(!strcmp(name, "data") || !strcmp(name, "source") || !strcmp(name, "data source") || !strcmp(name, "data-source") || !strcmp(name, "data_source") || !strcmp(name, "datasource")) { + prometheus_exporting_options = exporting_parse_data_source(value, prometheus_exporting_options); + } + else { + int i; + for(i = 0; prometheus_output_flags_root[i].name ; i++) { + if(!strcmp(name, prometheus_output_flags_root[i].name)) { + if(!strcmp(value, "yes") || !strcmp(value, "1") || !strcmp(value, "true")) + prometheus_output_options |= prometheus_output_flags_root[i].flag; + else { + prometheus_output_options &= ~prometheus_output_flags_root[i].flag; + } + + break; + } + } + } + } + + buffer_flush(w->response.data); + buffer_no_cacheable(w->response.data); + + switch(format) { + case ALLMETRICS_JSON: + w->response.data->content_type = CT_APPLICATION_JSON; + rrd_stats_api_v1_charts_allmetrics_json(host, filter, w->response.data); + return HTTP_RESP_OK; + + case ALLMETRICS_SHELL: + w->response.data->content_type = CT_TEXT_PLAIN; + rrd_stats_api_v1_charts_allmetrics_shell(host, filter, w->response.data); + return HTTP_RESP_OK; + + case ALLMETRICS_PROMETHEUS: + w->response.data->content_type = CT_PROMETHEUS; + rrd_stats_api_v1_charts_allmetrics_prometheus_single_host( + host + , filter + , w->response.data + , prometheus_server + , prometheus_prefix + , prometheus_exporting_options + , prometheus_output_options + ); + return HTTP_RESP_OK; + + case ALLMETRICS_PROMETHEUS_ALL_HOSTS: + w->response.data->content_type = CT_PROMETHEUS; + rrd_stats_api_v1_charts_allmetrics_prometheus_all_hosts( + host + , filter + , w->response.data + , prometheus_server + , prometheus_prefix + , prometheus_exporting_options + , prometheus_output_options + ); + return HTTP_RESP_OK; + + default: + w->response.data->content_type = CT_TEXT_PLAIN; + buffer_strcat(w->response.data, "Which format? '" ALLMETRICS_FORMAT_SHELL "', '" ALLMETRICS_FORMAT_PROMETHEUS "', '" ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS "' and '" ALLMETRICS_FORMAT_JSON "' are currently supported."); + return HTTP_RESP_BAD_REQUEST; + } +} diff --git a/src/web/api/v1/api_v1_badge/README.md b/src/web/api/v1/api_v1_badge/README.md new file mode 100644 index 000000000..d6deb7994 --- /dev/null +++ b/src/web/api/v1/api_v1_badge/README.md @@ -0,0 +1,360 @@ +# Netdata badges + +**Badges are cool!** + +Netdata can generate badges for any chart and any dimension at any time-frame. Badges come in `SVG` and can be added to any web page using an `` HTML tag. + +**Netdata badges are powerful**! + +Given that Netdata collects from **1.000** to **5.000** metrics per server (depending on the number of network interfaces, disks, cpu cores, applications running, users logged in, containers running, etc) and that Netdata already has data reduction/aggregation functions embedded, the badges can be quite powerful. + +For each metric/dimension and for arbitrary time-frames badges can show **min**, **max** or **average** value, but also **sum** or **incremental-sum** to have their **volume**. + +For example, there is [a chart in Netdata that shows the current requests/s of nginx](http://london.my-netdata.io/#nginx_local_nginx). Using this chart alone we can show the following badges (we could add more time-frames, like **today**, **yesterday**, etc): + + + +Similarly, there is [a chart that shows outbound bandwidth per class](http://london.my-netdata.io/#tc_eth0), using QoS data. So it shows `kilobits/s` per class. Using this chart we can show: + + + +The right one is a **volume** calculation. Netdata calculated the total of the last 86.400 seconds (a day) which gives `kilobits`, then divided it by 8 to make it KB, then by 1024 to make it MB and then by 1024 to make it GB. Calculations like this are quite accurate, since for every value collected, every second, Netdata interpolates it to second boundary using microsecond calculations. + +Let's see a few more badge examples (they come from the [Netdata registry](/src/registry/README.md)): + +- **cpu usage of user `root`** (you can pick any user; 100% = 1 core). This will be `green <10%`, `yellow <20%`, `orange <50%`, `blue <100%` (1 core), `red` otherwise (you define thresholds and colors on the URL). + + + +- **mysql queries per second** + + + + niche ones: **mysql SELECT statements with JOIN, which did full table scans**: + + + +--- + +> So, every single line on the charts of a [Netdata dashboard](http://london.my-netdata.io/), can become a badge and this badge can calculate **average**, **min**, **max**, or **volume** for any time-frame! And you can also vary the badge color using conditions on the calculated value. + +--- + +## How to create badges + +The basic URL is `http://your.netdata:19999/api/v1/badge.svg?option1&option2&option3&...`. + +Here is what you can put for `options` (these are standard Netdata API options): + +- `chart=CHART.NAME` + + The chart to get the values from. + + **This is the only parameter required** and with just this parameter, Netdata will return the sum of the latest values of all chart dimensions. + + Example: + +```html + + + +``` + + Which produces this: + + + + + +- `alarm=NAME` + + Render the current value and status of an alert linked to the chart. This option can be ignored if the badge to be generated is not related to an alert. + + The current value of the alert will be rendered. The color of the badge will indicate the status of the alert. + + For alert badges, **both `chart` and `alarm` parameters are required**. + +- `dimensions=DIMENSION1|DIMENSION2|...` + + The dimensions of the chart to use. If you don't set any dimension, all will be used. When multiple dimensions are used, Netdata will sum their values. You can append `options=absolute` if you want this sum to convert all values to positive before adding them. + + Pipes in HTML have to escaped with `%7C`. + + Example: + +```html + + + +``` + + Which produces this: + + + + + +- `before=SECONDS` and `after=SECONDS` + + The timeframe. These can be absolute unix timestamps, or relative to now, number of seconds. By default `before=0` and `after=-1` (1 second in the past). + + To get the last minute set `after=-60`. This will give the average of the last complete minute (XX:XX:00 - XX:XX:59). + + To get the max of the last hour set `after=-3600&group=max`. This will give the maximum value of the last complete hour (XX:00:00 - XX:59:59) + + Example: + +```html + + + +``` + + Which produces the average of last complete minute (XX:XX:00 - XX:XX:59): + + + + + + While this is the previous minute (one minute before the last one, again aligned XX:XX:00 - XX:XX:59): + +```html + + + +``` + + It produces this: + + + + + +- `group=min` or `group=max` or `group=average` (the default) or `group=sum` or `group=incremental-sum` + + If Netdata will have to reduce (aggregate) the data to calculate the value, which aggregation method to use. + + - `max` will find the max value for the timeframe. This works on both positive and negative dimensions. It will find the most extreme value. + + - `min` will find the min value for the timeframe. This works on both positive and negative dimensions. It will find the number closest to zero. + + - `average` will calculate the average value for the timeframe. + + - `sum` will sum all the values for the timeframe. This is nice for finding the volume of dimensions for a timeframe. So if you have a dimension that reports `X per second`, you can find the volume of the dimension in a timeframe, by adding its values in that timeframe. + + - `incremental-sum` will sum the difference of each value to its next. Let's assume you have a dimension that does not measure the rate of something, but the absolute value of it. So it has values like this "1, 5, 3, 7, 4". `incremental-sum` will calculate the difference of adjacent values. In this example, they will be `(5 - 1) + (3 - 5) + (7 - 3) + (4 - 7) = 3` (which is equal to the last value minus the first = 4 - 1). + +- `options=opt1|opt2|opt3|...` + + These fine tune various options of the API. Here is what you can use for badges (the API has more option, but only these are useful for badges): + + - `percentage`, instead of returning a value, calculate the percentage of the sum of the values of the selected dimensions (selected sum / total sum * 100). This also sets the units to `%`. + + - `absolute` or `abs`, turn all values positive and then sum them. + + - `display_absolute` or `display-absolute`, to use the signed value during color calculation, but display the absolute value on the badge. + + - `min2max`, when multiple dimensions are given, do not sum them, but take their `max - min`. + + - `unaligned`, when data are reduced / aggregated (e.g. the request is about the average of the last minute, or hour), Netdata by default aligns them so that the charts will have a constant shape (so average per minute returns always XX:XX:00 - XX:XX:59). Setting the `unaligned` option, Netdata will aggregate data without any alignment, so if the request is for 60 seconds, it will aggregate the latest 60 seconds of collected data. + +These are options dedicated to badges: + +- `label=TEXT` + + The label of the badge. + +- `units=TEXT` + + The units of the badge. If you want to put a `/`, please put a `\`. This is because Netdata allows badges parameters to be given as path in URL, instead of query string. You can also use `null` or `empty` to show it without any units. + + The units `seconds`, `minutes` and `hours` trigger special formatting. The value has to be in this unit, and Netdata will automatically change it to show a more pretty duration. + +- `multiply=NUMBER` + + Multiply the value with this number. The default is `1`. + +- `divide=NUMBER` + + Divide the value with this number. The default is `1`. + +- Color customization parameters + + The following parameters specify colors of each individual part of the badge. Each parameter is documented in detail + below. + + | Area of badge | Background color parameter | Text color parameter | + | ---: | :------------------------: | :------------------: | + | Label (left) part | `label_color` | `text_color_lbl` | + | Value (right) part | `value_color` | `text_color_val` | + + - `label_color=COLOR` + + The color of the label (the left part). You can use any HTML color in `RGB` or `RRGGBB` hex notation (without + the `#` character at the beginning). Additionally, you can use one of the following predefined colors (and you + can use them by their name): + + - `green` + - `brightgreen` + - `yellow` + - `yellowgreen` + - `orange` + - `red` + - `blue` + - `grey` + - `gray` + - `lightgrey` + - `lightgray` + + These colors are taken from , which makes them compatible with standard + badges. + + - `value_color=COLOR:null|COLORVALUE|COLOR>=VALUE|COLOR<=VALUE|...` + + You can add a pipe delimited list of conditions to pick the value color. The first matching (left to right) will + be used. + + Example: `value_color=grey:null|green<10|yellow<100|orange<1000|blue<10000|red` + + The above will set `grey` if no value exists (not collected within the `gap when lost iterations above` in + `netdata.conf` for the chart), `green` if the value is less than 10, `yellow` if the value is less than 100, and + so on. Netdata will use `red` if no other conditions match. Only integers are supported as values. + + The supported operators are `<`, `>`, `<=`, `>=`, `=` (or `:`), and `!=` (or `<>`). + + You can also use the same syntax as the `label_color` parameter to define each of these colors. You can + reference a predefined color by name or `RGB`/`RRGGBB` hex notation. + + - `text_color_lbl=RGB` or `text_color_lbl=RRGGBB` or `text_color_lbl=color_by_name` + + This value specifies the font color for the font of left/label side of the badge. The syntax is the same as the + `label_color` parameter. If not given, or given with an empty value, Netdata will use the default color. + + - `text_color_val=RGB` or `text_color_val=RRGGBB` or `text_color_lbl=color_by_name` + + This value specifies the font color for the font of right/value side of the badge. The syntax is the same as the + `label_color` parameter. If not given, or given with an empty value, Netdata will use the default color. + +- `precision=NUMBER` + + The number of decimal digits of the value. By default Netdata will add: + + - no decimal digits for values > 1000 + - 1 decimal digit for values > 100 + - 2 decimal digits for values > 1 + - 3 decimal digits for values > 0.1 + - 4 decimal digits for values \<= 0.1 + + Using the `precision=NUMBER` you can set your preference per badge. + +- `scale=XXX` + + This option scales the svg image. It accepts values above or equal to 100 (100% is the default scale). For example, lets get a few different sizes: + + original
+ `scale=125`
+ `scale=150`
+ `scale=175`
+ `scale=200` + +- `fixed_width_lbl=NUMBER` and `fixed_width_val=NUMBER` + + This parameter overrides auto-sizing of badges and displays them at fixed widths. `fixed_width_lbl` determines the size of the label's left side (label/name). `fixed_width_val` determines the size of the label's right side (value). You must set both parameters together, or they will be ignored. + + You should set the label/value widths wide enough to provide space for all the possible values/contents of the badge you're requesting. In case the text cannot fit the space given it will be clipped. + + The `scale` parameter still applies on the values you give to `fixed_width_lbl` and `fixed_width_val`. + +- `refresh=auto` or `refresh=SECONDS` + + This option enables auto-refreshing of images. Netdata will send the HTTP header `Refresh: SECONDS` to the web browser, thus requesting automatic refresh of the images at regular intervals. + + `auto` will calculate the proper `SECONDS` to avoid unnecessary refreshes. If `SECONDS` is zero, this feature is disabled (it is also disabled by default). + + Auto-refreshing like this, works only if you access the badge directly. So, you may have to put it an `embed` or `iframe` for it to be auto-refreshed. Use something like this: + +```html + +``` + + Another way is to use javascript to auto-refresh them. You can auto-refresh all the Netdata badges on a page using javascript. You have to add a class to all the Netdata badges, like this ``. Then add this javascript code to your page (it requires jquery): + +```html + +``` + +A more advanced badges refresh method is to include `http://your.netdata.ip:19999/refresh-badges.js` in your page. + +--- + +## Escaping URLs + +Keep in mind that if you add badge URLs to your HTML pages you have to escape the special characters: + +|character|name|escape sequence| +|:-------:|:--:|:-------------:| +|``|space (in labels and units)|`%20`| +|`#`|hash (for colors)|`%23`| +|`%`|percent (in units)|`%25`| +|`<`|less than|`%3C`| +|`>`|greater than|`%3E`| +|`\`|backslash (when you need a `/`)|`%5C`| +|`\|`|pipe (delimiting parameters)|`%7C`| + +## FAQ + +#### Is it fast? + +On modern hardware, Netdata can generate about **2.000 badges per second per core**, before noticing any delays. It generates a badge in about half a millisecond! + +Of course these timing are for badges that use recent data. If you need badges that do calculations over long durations (a day, or more), timing will differ. Netdata logs its timings at its `access.log`, so take a look there before adding a heavy badge on a busy web site. Of course, you can cache such badges or have a cron job get them from Netdata and save them at your web server at regular intervals. + +#### Embedding badges in GitHub + +You have 2 options: +- SVG images with markdown +- SVG images with HTML (directly in .md files) + +For example, this is the cpu badge shown above: + +- Markdown example: + +```md +[![A nice name](https://registry.my-netdata.io/api/v1/badge.svg?chart=users.cpu&dimensions=root&value_color=grey:null%7Cgreen%3C10%7Cyellow%3C20%7Corange%3C50%7Cblue%3C100%7Cred&label=root%20user%20cpu%20now&units=%25)](https://registry.my-netdata.io/#apps_cpu) +``` + +- HTML example: + +```html + + + +``` + +Both produce this: + + + + + +#### Auto-refreshing badges in GitHub + +Unfortunately it cannot be done. GitHub fetches all the images using a proxy and rewrites all the URLs to be served by the proxy. + +You can refresh them from your browser console though. Press F12 to open the web browser console (switch to the console too), paste the following and press enter. They will refresh: + +```js +var len = document.images.length; while(len--) { document.images[len].src = document.images[len].src.replace(/\?cacheBuster=\d*/, "") + "?cacheBuster=" + new Date().getTime().toString(); }; +``` + + diff --git a/src/web/api/v1/api_v1_badge/web_buffer_svg.c b/src/web/api/v1/api_v1_badge/web_buffer_svg.c new file mode 100644 index 000000000..642261fd3 --- /dev/null +++ b/src/web/api/v1/api_v1_badge/web_buffer_svg.c @@ -0,0 +1,1160 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "libnetdata/libnetdata.h" +#include "../../../server/web_client.h" + +#define BADGE_HORIZONTAL_PADDING 4 +#define VERDANA_KERNING 0.2 +#define VERDANA_PADDING 1.0 + +/* + * verdana11_widths[] has been generated with this method: + * https://github.com/badges/shields/blob/master/measure-text.js +*/ + +static double verdana11_widths[128] = { + [0] = 0.0, + [1] = 0.0, + [2] = 0.0, + [3] = 0.0, + [4] = 0.0, + [5] = 0.0, + [6] = 0.0, + [7] = 0.0, + [8] = 0.0, + [9] = 0.0, + [10] = 0.0, + [11] = 0.0, + [12] = 0.0, + [13] = 0.0, + [14] = 0.0, + [15] = 0.0, + [16] = 0.0, + [17] = 0.0, + [18] = 0.0, + [19] = 0.0, + [20] = 0.0, + [21] = 0.0, + [22] = 0.0, + [23] = 0.0, + [24] = 0.0, + [25] = 0.0, + [26] = 0.0, + [27] = 0.0, + [28] = 0.0, + [29] = 0.0, + [30] = 0.0, + [31] = 0.0, + [32] = 3.8671874999999996, // + [33] = 4.3291015625, // ! + [34] = 5.048828125, // " + [35] = 9.001953125, // # + [36] = 6.9931640625, // $ + [37] = 11.837890625, // % + [38] = 7.992187499999999, // & + [39] = 2.9541015625, // ' + [40] = 4.9951171875, // ( + [41] = 4.9951171875, // ) + [42] = 6.9931640625, // * + [43] = 9.001953125, // + + [44] = 4.00146484375, // , + [45] = 4.9951171875, // - + [46] = 4.00146484375, // . + [47] = 4.9951171875, // / + [48] = 6.9931640625, // 0 + [49] = 6.9931640625, // 1 + [50] = 6.9931640625, // 2 + [51] = 6.9931640625, // 3 + [52] = 6.9931640625, // 4 + [53] = 6.9931640625, // 5 + [54] = 6.9931640625, // 6 + [55] = 6.9931640625, // 7 + [56] = 6.9931640625, // 8 + [57] = 6.9931640625, // 9 + [58] = 4.9951171875, // : + [59] = 4.9951171875, // ; + [60] = 9.001953125, // < + [61] = 9.001953125, // = + [62] = 9.001953125, // > + [63] = 5.99951171875, // ? + [64] = 11.0, // @ + [65] = 7.51953125, // A + [66] = 7.541015625, // B + [67] = 7.680664062499999, // C + [68] = 8.4755859375, // D + [69] = 6.95556640625, // E + [70] = 6.32177734375, // F + [71] = 8.529296875, // G + [72] = 8.26611328125, // H + [73] = 4.6298828125, // I + [74] = 5.00048828125, // J + [75] = 7.62158203125, // K + [76] = 6.123046875, // L + [77] = 9.2705078125, // M + [78] = 8.228515625, // N + [79] = 8.658203125, // O + [80] = 6.63330078125, // P + [81] = 8.658203125, // Q + [82] = 7.6484375, // R + [83] = 7.51953125, // S + [84] = 6.7783203125, // T + [85] = 8.05126953125, // U + [86] = 7.51953125, // V + [87] = 10.87646484375, // W + [88] = 7.53564453125, // X + [89] = 6.767578125, // Y + [90] = 7.53564453125, // Z + [91] = 4.9951171875, // [ + [92] = 4.9951171875, // backslash + [93] = 4.9951171875, // ] + [94] = 9.001953125, // ^ + [95] = 6.9931640625, // _ + [96] = 6.9931640625, // ` + [97] = 6.6064453125, // a + [98] = 6.853515625, // b + [99] = 5.73095703125, // c + [100] = 6.853515625, // d + [101] = 6.552734375, // e + [102] = 3.8671874999999996, // f + [103] = 6.853515625, // g + [104] = 6.9609375, // h + [105] = 3.0185546875, // i + [106] = 3.78662109375, // j + [107] = 6.509765625, // k + [108] = 3.0185546875, // l + [109] = 10.69921875, // m + [110] = 6.9609375, // n + [111] = 6.67626953125, // o + [112] = 6.853515625, // p + [113] = 6.853515625, // q + [114] = 4.6943359375, // r + [115] = 5.73095703125, // s + [116] = 4.33447265625, // t + [117] = 6.9609375, // u + [118] = 6.509765625, // v + [119] = 9.001953125, // w + [120] = 6.509765625, // x + [121] = 6.509765625, // y + [122] = 5.779296875, // z + [123] = 6.982421875, // { + [124] = 4.9951171875, // | + [125] = 6.982421875, // } + [126] = 9.001953125, // ~ + [127] = 0.0 +}; + +// find the width of the string using the verdana 11points font +static inline double verdana11_width(const char *s, float em_size) { + double w = 0.0; + + while(*s) { + // if UTF8 multibyte char found and guess it's width equal 1em + // as label width will be updated with JavaScript this is not so important + + // TODO: maybe move UTF8 functions from url.c to separate util in libnetdata + // then use url_utf8_get_byte_length etc. + if(IS_UTF8_STARTBYTE(*s)) { + s++; + while(IS_UTF8_BYTE(*s) && !IS_UTF8_STARTBYTE(*s)){ + s++; + } + w += em_size; + } + else { + if(likely(!(*s & 0x80))){ // Byte 1XXX XXXX is not valid in UTF8 + double t = verdana11_widths[(unsigned char)*s]; + if(t != 0.0) + w += t + VERDANA_KERNING; + } + s++; + } + } + + w -= VERDANA_KERNING; + w += VERDANA_PADDING; + return w; +} + +static inline size_t escape_xmlz(char *dst, const char *src, size_t len) { + size_t i = len; + + // required escapes from + // https://github.com/badges/shields/blob/master/badge.js + while(*src && i) { + switch(*src) { + case '\\': + *dst++ = '/'; + src++; + i--; + break; + + case '&': + if(i > 5) { + strcpy(dst, "&"); + i -= 5; + dst += 5; + src++; + } + else goto cleanup; + break; + + case '<': + if(i > 4) { + strcpy(dst, "<"); + i -= 4; + dst += 4; + src++; + } + else goto cleanup; + break; + + case '>': + if(i > 4) { + strcpy(dst, ">"); + i -= 4; + dst += 4; + src++; + } + else goto cleanup; + break; + + case '"': + if(i > 6) { + strcpy(dst, """); + i -= 6; + dst += 6; + src++; + } + else goto cleanup; + break; + + case '\'': + if(i > 6) { + strcpy(dst, "'"); + i -= 6; + dst += 6; + src++; + } + else goto cleanup; + break; + + default: + i--; + *dst++ = *src++; + break; + } + } + +cleanup: + *dst = '\0'; + return len - i; +} + +static inline char *format_value_with_precision_and_unit(char *value_string, size_t value_string_len, + NETDATA_DOUBLE value, const char *units, int precision) { + if(unlikely(isnan(value) || isinf(value))) + value = 0.0; + + char *separator = ""; + if(unlikely(isalnum((uint8_t)*units))) + separator = " "; + + if(precision < 0) { + int len, lstop = 0, trim_zeros = 1; + + NETDATA_DOUBLE abs = value; + if(isless(value, 0)) { + lstop = 1; + abs = fabsndd(value); + } + + if(isgreaterequal(abs, 1000)) { + len = snprintfz(value_string, value_string_len, "%0.0" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + trim_zeros = 0; + } + else if(isgreaterequal(abs, 10)) len = snprintfz(value_string, value_string_len, "%0.1" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + else if(isgreaterequal(abs, 1)) len = snprintfz(value_string, value_string_len, "%0.2" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + else if(isgreaterequal(abs, 0.1)) len = snprintfz(value_string, value_string_len, "%0.2" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + else if(isgreaterequal(abs, 0.01)) len = snprintfz(value_string, value_string_len, "%0.4" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + else if(isgreaterequal(abs, 0.001)) len = snprintfz(value_string, value_string_len, "%0.5" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + else if(isgreaterequal(abs, 0.0001)) len = snprintfz(value_string, value_string_len, "%0.6" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + else len = snprintfz(value_string, value_string_len, "%0.7" NETDATA_DOUBLE_MODIFIER, (NETDATA_DOUBLE) value); + + if(unlikely(trim_zeros)) { + int l; + // remove trailing zeros from the decimal part + for(l = len - 1; l > lstop; l--) { + if(likely(value_string[l] == '0')) { + value_string[l] = '\0'; + len--; + } + + else if(unlikely(value_string[l] == '.')) { + value_string[l] = '\0'; + len--; + break; + } + + else + break; + } + } + + if(unlikely(len <= 0)) len = 1; + snprintfz(&value_string[len], value_string_len - len, "%s%s", separator, units); + } + else { + if(precision > 50) precision = 50; + snprintfz(value_string, value_string_len, "%0.*" NETDATA_DOUBLE_MODIFIER "%s%s", precision, (NETDATA_DOUBLE) value, separator, units); + } + + return value_string; +} + +typedef enum badge_units_format { + UNITS_FORMAT_NONE, + UNITS_FORMAT_SECONDS, + UNITS_FORMAT_SECONDS_AGO, + UNITS_FORMAT_MINUTES, + UNITS_FORMAT_MINUTES_AGO, + UNITS_FORMAT_HOURS, + UNITS_FORMAT_HOURS_AGO, + UNITS_FORMAT_ONOFF, + UNITS_FORMAT_UPDOWN, + UNITS_FORMAT_OKERROR, + UNITS_FORMAT_OKFAILED, + UNITS_FORMAT_EMPTY, + UNITS_FORMAT_PERCENT +} UNITS_FORMAT; + + +static struct units_formatter { + const char *units; + uint32_t hash; + UNITS_FORMAT format; +} badge_units_formatters[] = { + { "seconds", 0, UNITS_FORMAT_SECONDS }, + { "seconds ago", 0, UNITS_FORMAT_SECONDS_AGO }, + { "minutes", 0, UNITS_FORMAT_MINUTES }, + { "minutes ago", 0, UNITS_FORMAT_MINUTES_AGO }, + { "hours", 0, UNITS_FORMAT_HOURS }, + { "hours ago", 0, UNITS_FORMAT_HOURS_AGO }, + { "on/off", 0, UNITS_FORMAT_ONOFF }, + { "on-off", 0, UNITS_FORMAT_ONOFF }, + { "onoff", 0, UNITS_FORMAT_ONOFF }, + { "up/down", 0, UNITS_FORMAT_UPDOWN }, + { "up-down", 0, UNITS_FORMAT_UPDOWN }, + { "updown", 0, UNITS_FORMAT_UPDOWN }, + { "ok/error", 0, UNITS_FORMAT_OKERROR }, + { "ok-error", 0, UNITS_FORMAT_OKERROR }, + { "okerror", 0, UNITS_FORMAT_OKERROR }, + { "ok/failed", 0, UNITS_FORMAT_OKFAILED }, + { "ok-failed", 0, UNITS_FORMAT_OKFAILED }, + { "okfailed", 0, UNITS_FORMAT_OKFAILED }, + { "empty", 0, UNITS_FORMAT_EMPTY }, + { "null", 0, UNITS_FORMAT_EMPTY }, + { "percentage", 0, UNITS_FORMAT_PERCENT }, + { "percent", 0, UNITS_FORMAT_PERCENT }, + { "pcent", 0, UNITS_FORMAT_PERCENT }, + + // terminator + { NULL, 0, UNITS_FORMAT_NONE } +}; + +char *format_value_and_unit(char *value_string, size_t value_string_len, + NETDATA_DOUBLE value, const char *units, int precision) { + static int max = -1; + int i; + + if(unlikely(max == -1)) { + for(i = 0; badge_units_formatters[i].units; i++) + badge_units_formatters[i].hash = simple_hash(badge_units_formatters[i].units); + + max = i; + } + + if(unlikely(!units)) units = ""; + uint32_t hash_units = simple_hash(units); + + UNITS_FORMAT format = UNITS_FORMAT_NONE; + for(i = 0; i < max; i++) { + struct units_formatter *ptr = &badge_units_formatters[i]; + + if(hash_units == ptr->hash && !strcmp(units, ptr->units)) { + format = ptr->format; + break; + } + } + + if(unlikely(format == UNITS_FORMAT_SECONDS || format == UNITS_FORMAT_SECONDS_AGO)) { + if(value == 0.0) { + snprintfz(value_string, value_string_len, "%s", "now"); + return value_string; + } + else if(isnan(value) || isinf(value)) { + snprintfz(value_string, value_string_len, "%s", "undefined"); + return value_string; + } + + const char *suffix = (format == UNITS_FORMAT_SECONDS_AGO)?" ago":""; + + size_t s = (size_t)value; + size_t d = s / 86400; + s = s % 86400; + + size_t h = s / 3600; + s = s % 3600; + + size_t m = s / 60; + s = s % 60; + + if(d) + snprintfz(value_string, value_string_len, "%zu %s %02zu:%02zu:%02zu%s", d, (d == 1)?"day":"days", h, m, s, suffix); + else + snprintfz(value_string, value_string_len, "%02zu:%02zu:%02zu%s", h, m, s, suffix); + + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_MINUTES || format == UNITS_FORMAT_MINUTES_AGO)) { + if(value == 0.0) { + snprintfz(value_string, value_string_len, "%s", "now"); + return value_string; + } + else if(isnan(value) || isinf(value)) { + snprintfz(value_string, value_string_len, "%s", "undefined"); + return value_string; + } + + const char *suffix = (format == UNITS_FORMAT_MINUTES_AGO)?" ago":""; + + size_t m = (size_t)value; + size_t d = m / (60 * 24); + m = m % (60 * 24); + + size_t h = m / 60; + m = m % 60; + + if(d) + snprintfz(value_string, value_string_len, "%zud %02zuh %02zum%s", d, h, m, suffix); + else + snprintfz(value_string, value_string_len, "%zuh %zum%s", h, m, suffix); + + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_HOURS || format == UNITS_FORMAT_HOURS_AGO)) { + if(value == 0.0) { + snprintfz(value_string, value_string_len, "%s", "now"); + return value_string; + } + else if(isnan(value) || isinf(value)) { + snprintfz(value_string, value_string_len, "%s", "undefined"); + return value_string; + } + + const char *suffix = (format == UNITS_FORMAT_HOURS_AGO)?" ago":""; + + size_t h = (size_t)value; + size_t d = h / 24; + h = h % 24; + + if(d) + snprintfz(value_string, value_string_len, "%zud %zuh%s", d, h, suffix); + else + snprintfz(value_string, value_string_len, "%zuh%s", h, suffix); + + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_ONOFF)) { + snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"on":"off"); + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_UPDOWN)) { + snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"up":"down"); + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_OKERROR)) { + snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"ok":"error"); + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_OKFAILED)) { + snprintfz(value_string, value_string_len, "%s", (value != 0.0)?"ok":"failed"); + return value_string; + } + + else if(unlikely(format == UNITS_FORMAT_EMPTY)) + units = ""; + + else if(unlikely(format == UNITS_FORMAT_PERCENT)) + units = "%"; + + if(unlikely(isnan(value) || isinf(value))) { + strcpy(value_string, "-"); + return value_string; + } + + return format_value_with_precision_and_unit(value_string, value_string_len, value, units, precision); +} + +static struct badge_color { + const char *name; + uint32_t hash; + const char *color; +} badge_colors[] = { + + // colors from: + // https://github.com/badges/shields/blob/master/colorscheme.json + + { "brightgreen", 0, "4c1" }, + { "green", 0, "97CA00" }, + { "yellow", 0, "dfb317" }, + { "yellowgreen", 0, "a4a61d" }, + { "orange", 0, "fe7d37" }, + { "red", 0, "e05d44" }, + { "blue", 0, "007ec6" }, + { "grey", 0, "555" }, + { "gray", 0, "555" }, + { "lightgrey", 0, "9f9f9f" }, + { "lightgray", 0, "9f9f9f" }, + + // terminator + { NULL, 0, NULL } +}; + +static inline const char *color_map(const char *color, const char *def) { + static int max = -1; + int i; + + if(unlikely(max == -1)) { + for(i = 0; badge_colors[i].name ;i++) + badge_colors[i].hash = simple_hash(badge_colors[i].name); + + max = i; + } + + uint32_t hash = simple_hash(color); + + for(i = 0; i < max; i++) { + struct badge_color *ptr = &badge_colors[i]; + + if(hash == ptr->hash && !strcmp(color, ptr->name)) + return ptr->color; + } + + return def; +} + +typedef enum color_comparison { + COLOR_COMPARE_EQUAL, + COLOR_COMPARE_NOTEQUAL, + COLOR_COMPARE_LESS, + COLOR_COMPARE_LESSEQUAL, + COLOR_COMPARE_GREATER, + COLOR_COMPARE_GREATEREQUAL, +} BADGE_COLOR_COMPARISON; + +static inline void calc_colorz(const char *color, char *final, size_t len, NETDATA_DOUBLE value) { + if(isnan(value) || isinf(value)) + value = NAN; + + char color_buffer[256 + 1] = ""; + char value_buffer[256 + 1] = ""; + BADGE_COLOR_COMPARISON comparison = COLOR_COMPARE_GREATER; + + // example input: + // colormin|color:null... + + const char *c = color; + while(*c) { + char *dc = color_buffer, *dv = NULL; + size_t ci = 0, vi = 0; + + const char *t = c; + + while(*t && *t != '|') { + switch(*t) { + case '!': + if(t[1] == '=') t++; + comparison = COLOR_COMPARE_NOTEQUAL; + dv = value_buffer; + break; + + case '=': + case ':': + comparison = COLOR_COMPARE_EQUAL; + dv = value_buffer; + break; + + case '}': + case ')': + case '>': + if(t[1] == '=') { + comparison = COLOR_COMPARE_GREATEREQUAL; + t++; + } + else + comparison = COLOR_COMPARE_GREATER; + dv = value_buffer; + break; + + case '{': + case '(': + case '<': + if(t[1] == '=') { + comparison = COLOR_COMPARE_LESSEQUAL; + t++; + } + else if(t[1] == '>' || t[1] == ')' || t[1] == '}') { + comparison = COLOR_COMPARE_NOTEQUAL; + t++; + } + else + comparison = COLOR_COMPARE_LESS; + dv = value_buffer; + break; + + default: + if(dv) { + if(vi < 256) { + vi++; + *dv++ = *t; + } + } + else { + if(ci < 256) { + ci++; + *dc++ = *t; + } + } + break; + } + + t++; + } + + // prepare for next iteration + if(*t == '|') t++; + c = t; + + // do the math + *dc = '\0'; + if(dv) { + *dv = '\0'; + NETDATA_DOUBLE v; + + if(!*value_buffer || !strcmp(value_buffer, "null")) { + v = NAN; + } + else { + v = str2l(value_buffer); + if(isnan(v) || isinf(v)) + v = NAN; + } + + if(unlikely(isnan(value) || isnan(v))) { + if(isnan(value) && isnan(v)) + break; + } + else { + if (unlikely(comparison == COLOR_COMPARE_LESS && isless(value, v))) break; + else if (unlikely(comparison == COLOR_COMPARE_LESSEQUAL && islessequal(value, v))) break; + else if (unlikely(comparison == COLOR_COMPARE_GREATER && isgreater(value, v))) break; + else if (unlikely(comparison == COLOR_COMPARE_GREATEREQUAL && isgreaterequal(value, v))) break; + else if (unlikely(comparison == COLOR_COMPARE_EQUAL && !islessgreater(value, v))) break; + else if (unlikely(comparison == COLOR_COMPARE_NOTEQUAL && islessgreater(value, v))) break; + } + } + else + break; + } + + const char *b; + if(color_buffer[0]) + b = color_buffer; + else + b = color; + + strncpyz(final, b, len); +} + +// value + units +#define VALUE_STRING_SIZE 100 + +// label +#define LABEL_STRING_SIZE 200 + +// colors +#define COLOR_STRING_SIZE 100 + +static inline int allowed_hexa_char(char x) { + return ( (x >= '0' && x <= '9') || + (x >= 'a' && x <= 'f') || + (x >= 'A' && x <= 'F') + ); +} + +static int html_color_check(const char *str) { + int i = 0; + while(str[i]) { + if(!allowed_hexa_char(str[i])) + return 0; + if(unlikely(i >= 6)) + return 0; + i++; + } + // want to allow either RGB or RRGGBB + return ( i == 6 || i == 3 ); +} + +// Will parse color arg as #RRGGBB or #RGB or one of the colors +// from color_map hash table +// if parsing fails (argument error) it will return default color +// given as default parameter (def) +// in any case it will return either color in "RRGGBB" or "RGB" format as string +// or whatever is given as def (without checking - caller responsible to give sensible +// safely escaped default) as default if it fails +// in any case this function must always return something we can put directly in XML +// so no escaping is necessary anymore (with exception of default where caller is responsible) +// to give sensible default +#define BADGE_SVG_COLOR_ARG_MAXLEN 20 + +static const char *parse_color_argument(const char *arg, const char *def) +{ + if( !arg ) + return def; + size_t len = strnlen(arg, BADGE_SVG_COLOR_ARG_MAXLEN); + if( len < 2 || len >= BADGE_SVG_COLOR_ARG_MAXLEN ) + return def; + if( html_color_check(arg) ) + return arg; + return color_map(arg, def); +} + +static void buffer_svg(BUFFER *wb, const char *label, + NETDATA_DOUBLE value, const char *units, const char *label_color, const char *value_color, int precision, int scale, uint32_t options, int fixed_width_lbl, int fixed_width_val, const char* text_color_lbl, const char* text_color_val) { + char value_color_buffer[COLOR_STRING_SIZE + 1] + , value_string[VALUE_STRING_SIZE + 1] + , label_escaped[LABEL_STRING_SIZE + 1] + , value_escaped[VALUE_STRING_SIZE + 1]; + + const char *label_color_parsed; + const char *value_color_parsed; + + double label_width = (double)fixed_width_lbl, value_width = (double)fixed_width_val, total_width; + double height = 20.0, font_size = 11.0, text_offset = 5.8, round_corner = 3.0; + + if(scale < 100) scale = 100; + + if(unlikely(!value_color || !*value_color)) + value_color = (isnan(value) || isinf(value))?"999":"4c1"; + + calc_colorz(value_color, value_color_buffer, COLOR_STRING_SIZE, value); + format_value_and_unit(value_string, VALUE_STRING_SIZE, (options & RRDR_OPTION_DISPLAY_ABS)? fabsndd(value):value, units, precision); + + if(fixed_width_lbl <= 0 || fixed_width_val <= 0) { + label_width = verdana11_width(label, font_size) + (BADGE_HORIZONTAL_PADDING * 2); + value_width = verdana11_width(value_string, font_size) + (BADGE_HORIZONTAL_PADDING * 2); + } + total_width = label_width + value_width; + + escape_xmlz(label_escaped, label, LABEL_STRING_SIZE); + escape_xmlz(value_escaped, value_string, VALUE_STRING_SIZE); + + label_color_parsed = parse_color_argument(label_color, "555"); + value_color_parsed = parse_color_argument(value_color_buffer, "555"); + + wb->content_type = CT_IMAGE_SVG_XML; + + total_width = total_width * scale / 100.0; + height = height * scale / 100.0; + font_size = font_size * scale / 100.0; + text_offset = text_offset * scale / 100.0; + label_width = label_width * scale / 100.0; + value_width = value_width * scale / 100.0; + round_corner = round_corner * scale / 100.0; + + // svg template from: + // https://raw.githubusercontent.com/badges/shields/master/templates/flat-template.svg + buffer_sprintf(wb, + "" + "" + "" + "" + "" + "" + "" + "" + "" + "", + total_width, height, + total_width, height, round_corner, + label_width, height, label_color_parsed); // 0 && fixed_width_val > 0) { + buffer_sprintf(wb, + "" + "" + "", + label_width, height); // ", + label_width, value_width, height, value_color_parsed); + + if(fixed_width_lbl > 0 && fixed_width_val > 0) { + buffer_sprintf(wb, + "" + "" + "", + label_width, value_width, height); + } + + buffer_sprintf(wb, + "" + "" + "" + "%s" + "%s" + "%s" + "%s" + "", + total_width, height, + font_size, + label_width / 2, ceil(height - text_offset), label_escaped, + label_width / 2, ceil(height - text_offset - 1.0), parse_color_argument(text_color_lbl, "fff"), label_escaped, + label_width + value_width / 2 -1, ceil(height - text_offset), value_escaped, + label_width + value_width / 2 -1, ceil(height - text_offset - 1.0), parse_color_argument(text_color_val, "fff"), value_escaped); + + if(fixed_width_lbl <= 0 || fixed_width_val <= 0){ + buffer_sprintf(wb, + "", + BADGE_HORIZONTAL_PADDING); + } + buffer_sprintf(wb, ""); +} + +#define BADGE_URL_ARG_LBL_COLOR "text_color_lbl" +#define BADGE_URL_ARG_VAL_COLOR "text_color_val" + +int api_v1_badge(RRDHOST *host, struct web_client *w, char *url) { + int ret = HTTP_RESP_BAD_REQUEST; + buffer_flush(w->response.data); + + BUFFER *dimensions = NULL; + + const char *chart = NULL + , *before_str = NULL + , *after_str = NULL + , *points_str = NULL + , *multiply_str = NULL + , *divide_str = NULL + , *label = NULL + , *units = NULL + , *label_color = NULL + , *value_color = NULL + , *refresh_str = NULL + , *precision_str = NULL + , *scale_str = NULL + , *alarm = NULL + , *fixed_width_lbl_str = NULL + , *fixed_width_val_str = NULL + , *text_color_lbl_str = NULL + , *text_color_val_str = NULL + , *group_options = NULL; + + int group = RRDR_GROUPING_AVERAGE; + uint32_t options = 0x00000000; + + const RRDCALC_ACQUIRED *rca = NULL; + RRDCALC *rc = NULL; + RRDSET *st = NULL; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 badge.svg query param '%s' with value '%s'", w->id, name, value); + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "chart")) chart = value; + else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { + if(!dimensions) + dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); + + buffer_strcat(dimensions, "|"); + buffer_strcat(dimensions, value); + } + else if(!strcmp(name, "after")) after_str = value; + else if(!strcmp(name, "before")) before_str = value; + else if(!strcmp(name, "points")) points_str = value; + else if(!strcmp(name, "group_options")) group_options = value; + else if(!strcmp(name, "group")) { + group = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); + } + else if(!strcmp(name, "options")) { + options |= rrdr_options_parse(value); + } + else if(!strcmp(name, "label")) label = value; + else if(!strcmp(name, "units")) units = value; + else if(!strcmp(name, "label_color")) label_color = value; + else if(!strcmp(name, "value_color")) value_color = value; + else if(!strcmp(name, "multiply")) multiply_str = value; + else if(!strcmp(name, "divide")) divide_str = value; + else if(!strcmp(name, "refresh")) refresh_str = value; + else if(!strcmp(name, "precision")) precision_str = value; + else if(!strcmp(name, "scale")) scale_str = value; + else if(!strcmp(name, "fixed_width_lbl")) fixed_width_lbl_str = value; + else if(!strcmp(name, "fixed_width_val")) fixed_width_val_str = value; + else if(!strcmp(name, "alarm")) alarm = value; + else if(!strcmp(name, BADGE_URL_ARG_LBL_COLOR)) text_color_lbl_str = value; + else if(!strcmp(name, BADGE_URL_ARG_VAL_COLOR)) text_color_val_str = value; + } + + int fixed_width_lbl = -1; + int fixed_width_val = -1; + + if(fixed_width_lbl_str && *fixed_width_lbl_str + && fixed_width_val_str && *fixed_width_val_str) { + fixed_width_lbl = str2i(fixed_width_lbl_str); + fixed_width_val = str2i(fixed_width_val_str); + } + + if(!chart || !*chart) { + buffer_no_cacheable(w->response.data); + buffer_sprintf(w->response.data, "No chart id is given at the request."); + goto cleanup; + } + + int scale = (scale_str && *scale_str)?str2i(scale_str):100; + + st = rrdset_find(host, chart); + if(!st) st = rrdset_find_byname(host, chart); + if(!st) { + buffer_no_cacheable(w->response.data); + buffer_svg(w->response.data, "chart not found", NAN, "", NULL, NULL, -1, scale, 0, -1, -1, NULL, NULL); + ret = HTTP_RESP_OK; + goto cleanup; + } + st->last_accessed_time_s = now_realtime_sec(); + + if(alarm) { + rca = rrdcalc_from_rrdset_get(st, alarm); + rc = rrdcalc_acquired_to_rrdcalc(rca); + + if (!rc) { + buffer_no_cacheable(w->response.data); + buffer_svg(w->response.data, "alarm not found", NAN, "", NULL, NULL, -1, scale, 0, -1, -1, NULL, NULL); + ret = HTTP_RESP_OK; + goto cleanup; + } + } + + long long multiply = (multiply_str && *multiply_str )?str2l(multiply_str):1; + long long divide = (divide_str && *divide_str )?str2l(divide_str):1; + long long before = (before_str && *before_str )?str2l(before_str):0; + long long after = (after_str && *after_str )?str2l(after_str):-st->update_every; + int points = (points_str && *points_str )?str2i(points_str):1; + int precision = (precision_str && *precision_str)?str2i(precision_str):-1; + + if(!multiply) multiply = 1; + if(!divide) divide = 1; + + int refresh = 0; + if(refresh_str && *refresh_str) { + if(!strcmp(refresh_str, "auto")) { + if(rc) refresh = rc->config.update_every; + else if(options & RRDR_OPTION_NOT_ALIGNED) + refresh = st->update_every; + else { + refresh = (int)(before - after); + if(refresh < 0) refresh = -refresh; + } + } + else { + refresh = str2i(refresh_str); + if(refresh < 0) refresh = -refresh; + } + } + + if(!label) { + if(alarm) { + char *s = (char *)alarm; + while(*s) { + if(*s == '_') *s = ' '; + s++; + } + label = alarm; + } + else if(dimensions) { + const char *dim = buffer_tostring(dimensions); + if(*dim == '|') dim++; + label = dim; + } + else + label = rrdset_name(st); + } + if(!units) { + if(alarm) { + if(rc->config.units) + units = rrdcalc_units(rc); + else + units = ""; + } + else if(options & RRDR_OPTION_PERCENTAGE) + units = "%"; + else + units = rrdset_units(st); + } + + netdata_log_debug(D_WEB_CLIENT, "%llu: API command 'badge.svg' for chart '%s', alarm '%s', dimensions '%s', after '%lld', before '%lld', points '%d', group '%d', options '0x%08x'" + , w->id + , chart + , alarm?alarm:"" + , (dimensions)?buffer_tostring(dimensions):"" + , after + , before + , points + , group + , options + ); + + if(rc) { + if (refresh > 0) { + buffer_sprintf(w->response.header, "Refresh: %d\r\n", refresh); + w->response.data->date = now_realtime_sec(); + w->response.data->expires = w->response.data->date + refresh; + buffer_cacheable(w->response.data); + } + else + buffer_no_cacheable(w->response.data); + + if(!value_color) { + switch(rc->status) { + case RRDCALC_STATUS_CRITICAL: + value_color = "red"; + break; + + case RRDCALC_STATUS_WARNING: + value_color = "orange"; + break; + + case RRDCALC_STATUS_CLEAR: + value_color = "brightgreen"; + break; + + case RRDCALC_STATUS_UNDEFINED: + value_color = "lightgrey"; + break; + + case RRDCALC_STATUS_UNINITIALIZED: + value_color = "#000"; + break; + + default: + value_color = "grey"; + break; + } + } + + buffer_svg(w->response.data, + label, + (isnan(rc->value)||isinf(rc->value)) ? rc->value : rc->value * multiply / divide, + units, + label_color, + value_color, + precision, + scale, + options, + fixed_width_lbl, + fixed_width_val, + text_color_lbl_str, + text_color_val_str + ); + ret = HTTP_RESP_OK; + } + else { + time_t latest_timestamp = 0; + int value_is_null = 1; + NETDATA_DOUBLE n = NAN; + ret = HTTP_RESP_INTERNAL_SERVER_ERROR; + + // if the collected value is too old, don't calculate its value + if (rrdset_last_entry_s(st) >= (now_realtime_sec() - (st->update_every * gap_when_lost_iterations_above))) + ret = rrdset2value_api_v1(st, w->response.data, &n, + (dimensions) ? buffer_tostring(dimensions) : NULL, + points, after, before, group, group_options, 0, options, + NULL, &latest_timestamp, + NULL, NULL, NULL, + &value_is_null, NULL, 0, 0, + QUERY_SOURCE_API_BADGE, STORAGE_PRIORITY_NORMAL); + + // if the value cannot be calculated, show empty badge + if (ret != HTTP_RESP_OK) { + buffer_no_cacheable(w->response.data); + value_is_null = 1; + n = 0; + ret = HTTP_RESP_OK; + } + else if (refresh > 0) { + buffer_sprintf(w->response.header, "Refresh: %d\r\n", refresh); + w->response.data->expires = now_realtime_sec() + refresh; + } + else buffer_no_cacheable(w->response.data); + + // render the badge + buffer_svg(w->response.data, + label, + (value_is_null)?NAN:(n * multiply / divide), + units, + label_color, + value_color, + precision, + scale, + options, + fixed_width_lbl, + fixed_width_val, + text_color_lbl_str, + text_color_val_str + ); + } + +cleanup: + rrdcalc_from_rrdset_release(st, rca); + buffer_free(dimensions); + return ret; +} diff --git a/src/web/api/v1/api_v1_calls.h b/src/web/api/v1/api_v1_calls.h new file mode 100644 index 000000000..36a0605cb --- /dev/null +++ b/src/web/api/v1/api_v1_calls.h @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_API_V1_CALLS_H +#define NETDATA_API_V1_CALLS_H + +#include "../web_api_v1.h" + +int api_v1_info(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_config(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_registry(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_manage(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_data(RRDHOST *host, struct web_client *w, char *url); +int api_v1_chart(RRDHOST *host, struct web_client *w, char *url); +int api_v1_charts(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_context(RRDHOST *host, struct web_client *w, char *url); +int api_v1_contexts(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_alarms(RRDHOST *host, struct web_client *w, char *url); +int api_v1_alarms_values(RRDHOST *host, struct web_client *w, char *url); +int api_v1_alarm_count(RRDHOST *host, struct web_client *w, char *url); +int api_v1_alarm_log(RRDHOST *host, struct web_client *w, char *url); +int api_v1_variable(RRDHOST *host, struct web_client *w, char *url); +int api_v1_alarm_variables(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_dbengine_stats(RRDHOST *host, struct web_client *w, char *url); +int api_v1_ml_info(RRDHOST *host, struct web_client *w, char *url); +int api_v1_aclk(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_functions(RRDHOST *host, struct web_client *w, char *url); +int api_v1_function(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_metric_correlations(RRDHOST *host, struct web_client *w, char *url); +int api_v1_weights(RRDHOST *host, struct web_client *w, char *url); + +int api_v1_badge(RRDHOST *host, struct web_client *w, char *url); +int api_v1_allmetrics(RRDHOST *host, struct web_client *w, char *url); + +// common library calls +int api_v1_single_chart_helper(RRDHOST *host, struct web_client *w, char *url, void callback(RRDSET *st, BUFFER *buf)); +void api_v1_management_init(void); + +#endif //NETDATA_API_V1_CALLS_H diff --git a/src/web/api/v1/api_v1_charts.c b/src/web/api/v1/api_v1_charts.c new file mode 100644 index 000000000..afc67af68 --- /dev/null +++ b/src/web/api/v1/api_v1_charts.c @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_single_chart_helper(RRDHOST *host, struct web_client *w, char *url, void callback(RRDSET *st, BUFFER *buf)) { + int ret = HTTP_RESP_BAD_REQUEST; + char *chart = NULL; + + buffer_flush(w->response.data); + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "chart")) chart = value; + //else { + /// buffer_sprintf(w->response.data, "Unknown parameter '%s' in request.", name); + // goto cleanup; + //} + } + + if(!chart || !*chart) { + buffer_sprintf(w->response.data, "No chart id is given at the request."); + goto cleanup; + } + + RRDSET *st = rrdset_find(host, chart); + if(!st) st = rrdset_find_byname(host, chart); + if(!st) { + buffer_strcat(w->response.data, "Chart is not found: "); + buffer_strcat_htmlescape(w->response.data, chart); + ret = HTTP_RESP_NOT_FOUND; + goto cleanup; + } + + w->response.data->content_type = CT_APPLICATION_JSON; + st->last_accessed_time_s = now_realtime_sec(); + callback(st, w->response.data); + return HTTP_RESP_OK; + +cleanup: + return ret; +} + +int api_v1_charts(RRDHOST *host, struct web_client *w, char *url) { + (void)url; + + buffer_flush(w->response.data); + w->response.data->content_type = CT_APPLICATION_JSON; + charts2json(host, w->response.data); + return HTTP_RESP_OK; +} + +int api_v1_chart(RRDHOST *host, struct web_client *w, char *url) { + return api_v1_single_chart_helper(host, w, url, rrd_stats_api_v1_chart); +} + diff --git a/src/web/api/v1/api_v1_config.c b/src/web/api/v1/api_v1_config.c new file mode 100644 index 000000000..69bcde760 --- /dev/null +++ b/src/web/api/v1/api_v1_config.c @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "web/api/v2/api_v2_calls.h" + +int api_v1_config(RRDHOST *host, struct web_client *w, char *url __maybe_unused) { + char *action = "tree"; + char *path = "/"; + char *id = NULL; + char *add_name = NULL; + int timeout = 120; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "action")) + action = value; + else if(!strcmp(name, "path")) + path = value; + else if(!strcmp(name, "id")) + id = value; + else if(!strcmp(name, "name")) + add_name = value; + else if(!strcmp(name, "timeout")) { + timeout = (int)strtol(value, NULL, 10); + if(timeout < 10) + timeout = 10; + } + } + + char transaction[UUID_COMPACT_STR_LEN]; + uuid_unparse_lower_compact(w->transaction, transaction); + + size_t len = strlen(action) + (id ? strlen(id) : 0) + strlen(path) + (add_name ? strlen(add_name) : 0) + 100; + + char cmd[len]; + if(strcmp(action, "tree") == 0) + snprintfz(cmd, sizeof(cmd), PLUGINSD_FUNCTION_CONFIG " tree '%s' '%s'", path, id?id:""); + else { + DYNCFG_CMDS c = dyncfg_cmds2id(action); + if(!id || !*id || !dyncfg_is_valid_id(id)) { + rrd_call_function_error(w->response.data, "Invalid id", HTTP_RESP_BAD_REQUEST); + return HTTP_RESP_BAD_REQUEST; + } + + if(c == DYNCFG_CMD_NONE) { + rrd_call_function_error(w->response.data, "Invalid action", HTTP_RESP_BAD_REQUEST); + return HTTP_RESP_BAD_REQUEST; + } + + if(c == DYNCFG_CMD_ADD || c == DYNCFG_CMD_USERCONFIG || c == DYNCFG_CMD_TEST) { + if(c == DYNCFG_CMD_TEST && (!add_name || !*add_name)) { + // backwards compatibility for TEST without a name + char *colon = strrchr(id, ':'); + if(colon) { + *colon = '\0'; + add_name = ++colon; + } + else + add_name = "test"; + } + + if(!add_name || !*add_name || !dyncfg_is_valid_id(add_name)) { + rrd_call_function_error(w->response.data, "Invalid name", HTTP_RESP_BAD_REQUEST); + return HTTP_RESP_BAD_REQUEST; + } + snprintfz(cmd, sizeof(cmd), PLUGINSD_FUNCTION_CONFIG " %s %s %s", id, dyncfg_id2cmd_one(c), add_name); + } + else + snprintfz(cmd, sizeof(cmd), PLUGINSD_FUNCTION_CONFIG " %s %s", id, dyncfg_id2cmd_one(c)); + } + + CLEAN_BUFFER *source = buffer_create(100, NULL); + web_client_api_request_vX_source_to_buffer(w, source); + + buffer_flush(w->response.data); + int code = rrd_function_run(host, w->response.data, timeout, w->access, cmd, + true, transaction, + NULL, NULL, + web_client_progress_functions_update, w, + web_client_interrupt_callback, w, + w->payload, buffer_tostring(source), false); + + return code; +} diff --git a/src/web/api/v1/api_v1_context.c b/src/web/api/v1/api_v1_context.c new file mode 100644 index 000000000..5b7baf80c --- /dev/null +++ b/src/web/api/v1/api_v1_context.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_context(RRDHOST *host, struct web_client *w, char *url) { + char *context = NULL; + RRDCONTEXT_TO_JSON_OPTIONS options = RRDCONTEXT_OPTION_NONE; + time_t after = 0, before = 0; + const char *chart_label_key = NULL, *chart_labels_filter = NULL; + BUFFER *dimensions = NULL; + + buffer_flush(w->response.data); + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "context") || !strcmp(name, "ctx")) context = value; + else if(!strcmp(name, "after")) after = str2l(value); + else if(!strcmp(name, "before")) before = str2l(value); + else if(!strcmp(name, "options")) options = rrdcontext_to_json_parse_options(value); + else if(!strcmp(name, "chart_label_key")) chart_label_key = value; + else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value; + else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { + if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); + buffer_strcat(dimensions, "|"); + buffer_strcat(dimensions, value); + } + } + + if(!context || !*context) { + buffer_sprintf(w->response.data, "No context is given at the request."); + return HTTP_RESP_BAD_REQUEST; + } + + SIMPLE_PATTERN *chart_label_key_pattern = NULL; + SIMPLE_PATTERN *chart_labels_filter_pattern = NULL; + SIMPLE_PATTERN *chart_dimensions_pattern = NULL; + + if(chart_label_key) + chart_label_key_pattern = simple_pattern_create(chart_label_key, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, true); + + if(chart_labels_filter) + chart_labels_filter_pattern = simple_pattern_create(chart_labels_filter, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, + true); + + if(dimensions) { + chart_dimensions_pattern = simple_pattern_create(buffer_tostring(dimensions), ",|\t\r\n\f\v", + SIMPLE_PATTERN_EXACT, true); + buffer_free(dimensions); + } + + w->response.data->content_type = CT_APPLICATION_JSON; + int ret = rrdcontext_to_json(host, w->response.data, after, before, options, context, chart_label_key_pattern, chart_labels_filter_pattern, chart_dimensions_pattern); + + simple_pattern_free(chart_label_key_pattern); + simple_pattern_free(chart_labels_filter_pattern); + simple_pattern_free(chart_dimensions_pattern); + + return ret; +} diff --git a/src/web/api/v1/api_v1_contexts.c b/src/web/api/v1/api_v1_contexts.c new file mode 100644 index 000000000..90d376d47 --- /dev/null +++ b/src/web/api/v1/api_v1_contexts.c @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_contexts(RRDHOST *host, struct web_client *w, char *url) { + RRDCONTEXT_TO_JSON_OPTIONS options = RRDCONTEXT_OPTION_NONE; + time_t after = 0, before = 0; + const char *chart_label_key = NULL, *chart_labels_filter = NULL; + BUFFER *dimensions = NULL; + + buffer_flush(w->response.data); + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "after")) after = str2l(value); + else if(!strcmp(name, "before")) before = str2l(value); + else if(!strcmp(name, "options")) options = rrdcontext_to_json_parse_options(value); + else if(!strcmp(name, "chart_label_key")) chart_label_key = value; + else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value; + else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { + if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); + buffer_strcat(dimensions, "|"); + buffer_strcat(dimensions, value); + } + } + + SIMPLE_PATTERN *chart_label_key_pattern = NULL; + SIMPLE_PATTERN *chart_labels_filter_pattern = NULL; + SIMPLE_PATTERN *chart_dimensions_pattern = NULL; + + if(chart_label_key) + chart_label_key_pattern = simple_pattern_create(chart_label_key, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, true); + + if(chart_labels_filter) + chart_labels_filter_pattern = simple_pattern_create(chart_labels_filter, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, + true); + + if(dimensions) { + chart_dimensions_pattern = simple_pattern_create(buffer_tostring(dimensions), ",|\t\r\n\f\v", + SIMPLE_PATTERN_EXACT, true); + buffer_free(dimensions); + } + + w->response.data->content_type = CT_APPLICATION_JSON; + int ret = rrdcontexts_to_json(host, w->response.data, after, before, options, chart_label_key_pattern, chart_labels_filter_pattern, chart_dimensions_pattern); + + simple_pattern_free(chart_label_key_pattern); + simple_pattern_free(chart_labels_filter_pattern); + simple_pattern_free(chart_dimensions_pattern); + + return ret; +} diff --git a/src/web/api/v1/api_v1_data.c b/src/web/api/v1/api_v1_data.c new file mode 100644 index 000000000..30328ed3e --- /dev/null +++ b/src/web/api/v1/api_v1_data.c @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_data(RRDHOST *host, struct web_client *w, char *url) { + netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 data with URL '%s'", w->id, url); + + int ret = HTTP_RESP_BAD_REQUEST; + BUFFER *dimensions = NULL; + + buffer_flush(w->response.data); + + char *google_version = "0.6", + *google_reqId = "0", + *google_sig = "0", + *google_out = "json", + *responseHandler = NULL, + *outFileName = NULL; + + time_t last_timestamp_in_data = 0, google_timestamp = 0; + + char *chart = NULL; + char *before_str = NULL; + char *after_str = NULL; + char *group_time_str = NULL; + char *points_str = NULL; + char *timeout_str = NULL; + char *context = NULL; + char *chart_label_key = NULL; + char *chart_labels_filter = NULL; + char *group_options = NULL; + size_t tier = 0; + RRDR_TIME_GROUPING group = RRDR_GROUPING_AVERAGE; + DATASOURCE_FORMAT format = DATASOURCE_JSON; + RRDR_OPTIONS options = 0; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 data query param '%s' with value '%s'", w->id, name, value); + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "context")) context = value; + else if(!strcmp(name, "chart_label_key")) chart_label_key = value; + else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value; + else if(!strcmp(name, "chart")) chart = value; + else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { + if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); + buffer_strcat(dimensions, "|"); + buffer_strcat(dimensions, value); + } + else if(!strcmp(name, "show_dimensions")) options |= RRDR_OPTION_ALL_DIMENSIONS; + else if(!strcmp(name, "after")) after_str = value; + else if(!strcmp(name, "before")) before_str = value; + else if(!strcmp(name, "points")) points_str = value; + else if(!strcmp(name, "timeout")) timeout_str = value; + else if(!strcmp(name, "gtime")) group_time_str = value; + else if(!strcmp(name, "group_options")) group_options = value; + else if(!strcmp(name, "group")) { + group = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); + } + else if(!strcmp(name, "format")) { + format = datasource_format_str_to_id(value); + } + else if(!strcmp(name, "options")) { + options |= rrdr_options_parse(value); + } + else if(!strcmp(name, "callback")) { + responseHandler = value; + } + else if(!strcmp(name, "filename")) { + outFileName = value; + } + else if(!strcmp(name, "tqx")) { + // parse Google Visualization API options + // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source + char *tqx_name, *tqx_value; + + while(value) { + tqx_value = strsep_skip_consecutive_separators(&value, ";"); + if(!tqx_value || !*tqx_value) continue; + + tqx_name = strsep_skip_consecutive_separators(&tqx_value, ":"); + if(!tqx_name || !*tqx_name) continue; + if(!tqx_value || !*tqx_value) continue; + + if(!strcmp(tqx_name, "version")) + google_version = tqx_value; + else if(!strcmp(tqx_name, "reqId")) + google_reqId = tqx_value; + else if(!strcmp(tqx_name, "sig")) { + google_sig = tqx_value; + google_timestamp = strtoul(google_sig, NULL, 0); + } + else if(!strcmp(tqx_name, "out")) { + google_out = tqx_value; + format = google_data_format_str_to_id(google_out); + } + else if(!strcmp(tqx_name, "responseHandler")) + responseHandler = tqx_value; + else if(!strcmp(tqx_name, "outFileName")) + outFileName = tqx_value; + } + } + else if(!strcmp(name, "tier")) { + tier = str2ul(value); + if(tier < storage_tiers) + options |= RRDR_OPTION_SELECTED_TIER; + else + tier = 0; + } + } + + // validate the google parameters given + fix_google_param(google_out); + fix_google_param(google_sig); + fix_google_param(google_reqId); + fix_google_param(google_version); + fix_google_param(responseHandler); + fix_google_param(outFileName); + + RRDSET *st = NULL; + ONEWAYALLOC *owa = onewayalloc_create(0); + QUERY_TARGET *qt = NULL; + + if(!is_valid_sp(chart) && !is_valid_sp(context)) { + buffer_sprintf(w->response.data, "No chart or context is given."); + goto cleanup; + } + + if(chart && !context) { + // check if this is a specific chart + st = rrdset_find(host, chart); + if (!st) st = rrdset_find_byname(host, chart); + } + + long long before = (before_str && *before_str)?str2l(before_str):0; + long long after = (after_str && *after_str) ?str2l(after_str):-600; + int points = (points_str && *points_str)?str2i(points_str):0; + int timeout = (timeout_str && *timeout_str)?str2i(timeout_str): 0; + long group_time = (group_time_str && *group_time_str)?str2l(group_time_str):0; + + QUERY_TARGET_REQUEST qtr = { + .version = 1, + .after = after, + .before = before, + .host = host, + .st = st, + .nodes = NULL, + .contexts = context, + .instances = chart, + .dimensions = (dimensions)?buffer_tostring(dimensions):NULL, + .timeout_ms = timeout, + .points = points, + .format = format, + .options = options, + .time_group_method = group, + .time_group_options = group_options, + .resampling_time = group_time, + .tier = tier, + .chart_label_key = chart_label_key, + .labels = chart_labels_filter, + .query_source = QUERY_SOURCE_API_DATA, + .priority = STORAGE_PRIORITY_NORMAL, + .interrupt_callback = web_client_interrupt_callback, + .interrupt_callback_data = w, + .transaction = &w->transaction, + }; + qt = query_target_create(&qtr); + + if(!qt || !qt->query.used) { + buffer_sprintf(w->response.data, "No metrics where matched to query."); + ret = HTTP_RESP_NOT_FOUND; + goto cleanup; + } + + web_client_timeout_checkpoint_set(w, timeout); + if(web_client_timeout_checkpoint_and_check(w, NULL)) { + ret = w->response.code; + goto cleanup; + } + + if(outFileName && *outFileName) { + buffer_sprintf(w->response.header, "Content-Disposition: attachment; filename=\"%s\"\r\n", outFileName); + netdata_log_debug(D_WEB_CLIENT, "%llu: generating outfilename header: '%s'", w->id, outFileName); + } + + if(format == DATASOURCE_DATATABLE_JSONP) { + if(responseHandler == NULL) + responseHandler = "google.visualization.Query.setResponse"; + + netdata_log_debug(D_WEB_CLIENT_ACCESS, "%llu: GOOGLE JSON/JSONP: version = '%s', reqId = '%s', sig = '%s', out = '%s', responseHandler = '%s', outFileName = '%s'", + w->id, google_version, google_reqId, google_sig, google_out, responseHandler, outFileName + ); + + buffer_sprintf( + w->response.data, + "%s({version:'%s',reqId:'%s',status:'ok',sig:'%"PRId64"',table:", + responseHandler, + google_version, + google_reqId, + (int64_t)(st ? st->last_updated.tv_sec : 0)); + } + else if(format == DATASOURCE_JSONP) { + if(responseHandler == NULL) + responseHandler = "callback"; + + buffer_strcat(w->response.data, responseHandler); + buffer_strcat(w->response.data, "("); + } + + ret = data_query_execute(owa, w->response.data, qt, &last_timestamp_in_data); + + if(format == DATASOURCE_DATATABLE_JSONP) { + if(google_timestamp < last_timestamp_in_data) + buffer_strcat(w->response.data, "});"); + + else { + // the client already has the latest data + buffer_flush(w->response.data); + buffer_sprintf(w->response.data, + "%s({version:'%s',reqId:'%s',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});", + responseHandler, google_version, google_reqId); + } + } + else if(format == DATASOURCE_JSONP) + buffer_strcat(w->response.data, ");"); + + if(qt->internal.relative) + buffer_no_cacheable(w->response.data); + else + buffer_cacheable(w->response.data); + +cleanup: + query_target_release(qt); + onewayalloc_destroy(owa); + buffer_free(dimensions); + return ret; +} diff --git a/src/web/api/v1/api_v1_dbengine.c b/src/web/api/v1/api_v1_dbengine.c new file mode 100644 index 000000000..89855f88a --- /dev/null +++ b/src/web/api/v1/api_v1_dbengine.c @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +#ifndef ENABLE_DBENGINE +int web_client_api_request_v1_dbengine_stats(RRDHOST *host __maybe_unused, struct web_client *w __maybe_unused, char *url __maybe_unused) { + return HTTP_RESP_NOT_FOUND; +} +#else +static void web_client_api_v1_dbengine_stats_for_tier(BUFFER *wb, size_t tier) { + RRDENG_SIZE_STATS stats = rrdeng_size_statistics(multidb_ctx[tier]); + + buffer_sprintf(wb, + "\n\t\t\"default_granularity_secs\":%zu" + ",\n\t\t\"sizeof_datafile\":%zu" + ",\n\t\t\"sizeof_page_in_cache\":%zu" + ",\n\t\t\"sizeof_point_data\":%zu" + ",\n\t\t\"sizeof_page_data\":%zu" + ",\n\t\t\"pages_per_extent\":%zu" + ",\n\t\t\"datafiles\":%zu" + ",\n\t\t\"extents\":%zu" + ",\n\t\t\"extents_pages\":%zu" + ",\n\t\t\"points\":%zu" + ",\n\t\t\"metrics\":%zu" + ",\n\t\t\"metrics_pages\":%zu" + ",\n\t\t\"extents_compressed_bytes\":%zu" + ",\n\t\t\"pages_uncompressed_bytes\":%zu" + ",\n\t\t\"pages_duration_secs\":%lld" + ",\n\t\t\"single_point_pages\":%zu" + ",\n\t\t\"first_t\":%ld" + ",\n\t\t\"last_t\":%ld" + ",\n\t\t\"database_retention_secs\":%lld" + ",\n\t\t\"average_compression_savings\":%0.2f" + ",\n\t\t\"average_point_duration_secs\":%0.2f" + ",\n\t\t\"average_metric_retention_secs\":%0.2f" + ",\n\t\t\"ephemeral_metrics_per_day_percent\":%0.2f" + ",\n\t\t\"average_page_size_bytes\":%0.2f" + ",\n\t\t\"estimated_concurrently_collected_metrics\":%zu" + ",\n\t\t\"currently_collected_metrics\":%zu" + ",\n\t\t\"disk_space\":%zu" + ",\n\t\t\"max_disk_space\":%zu" + , stats.default_granularity_secs + , stats.sizeof_datafile + , stats.sizeof_page_in_cache + , stats.sizeof_point_data + , stats.sizeof_page_data + , stats.pages_per_extent + , stats.datafiles + , stats.extents + , stats.extents_pages + , stats.points + , stats.metrics + , stats.metrics_pages + , stats.extents_compressed_bytes + , stats.pages_uncompressed_bytes + , (long long)stats.pages_duration_secs + , stats.single_point_pages + , stats.first_time_s + , stats.last_time_s + , (long long)stats.database_retention_secs + , stats.average_compression_savings + , stats.average_point_duration_secs + , stats.average_metric_retention_secs + , stats.ephemeral_metrics_per_day_percent + , stats.average_page_size_bytes + , stats.estimated_concurrently_collected_metrics + , stats.currently_collected_metrics + , stats.disk_space + , stats.max_disk_space + ); +} + +int api_v1_dbengine_stats(RRDHOST *host __maybe_unused, struct web_client *w, char *url __maybe_unused) { + if (!netdata_ready) + return HTTP_RESP_SERVICE_UNAVAILABLE; + + BUFFER *wb = w->response.data; + buffer_flush(wb); + + if(!dbengine_enabled) { + buffer_strcat(wb, "dbengine is not enabled"); + return HTTP_RESP_NOT_FOUND; + } + + wb->content_type = CT_APPLICATION_JSON; + buffer_no_cacheable(wb); + buffer_strcat(wb, "{"); + for(size_t tier = 0; tier < storage_tiers ;tier++) { + buffer_sprintf(wb, "%s\n\t\"tier%zu\": {", tier?",":"", tier); + web_client_api_v1_dbengine_stats_for_tier(wb, tier); + buffer_strcat(wb, "\n\t}"); + } + buffer_strcat(wb, "\n}"); + + return HTTP_RESP_OK; +} +#endif diff --git a/src/web/api/v1/api_v1_function.c b/src/web/api/v1/api_v1_function.c new file mode 100644 index 000000000..761164fd0 --- /dev/null +++ b/src/web/api/v1/api_v1_function.c @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_function(RRDHOST *host, struct web_client *w, char *url) { + if (!netdata_ready) + return HTTP_RESP_SERVICE_UNAVAILABLE; + + int timeout = 0; + const char *function = NULL; + + while (url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) + continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if (!name || !*name) + continue; + + if (!strcmp(name, "function")) + function = value; + + else if (!strcmp(name, "timeout")) + timeout = (int) strtoul(value, NULL, 0); + } + + BUFFER *wb = w->response.data; + buffer_flush(wb); + wb->content_type = CT_APPLICATION_JSON; + buffer_no_cacheable(wb); + + char transaction[UUID_COMPACT_STR_LEN]; + uuid_unparse_lower_compact(w->transaction, transaction); + + CLEAN_BUFFER *source = buffer_create(100, NULL); + web_client_api_request_vX_source_to_buffer(w, source); + + return rrd_function_run(host, wb, timeout, w->access, function, true, transaction, + NULL, NULL, + web_client_progress_functions_update, w, + web_client_interrupt_callback, w, w->payload, + buffer_tostring(source), false); +} diff --git a/src/web/api/v1/api_v1_functions.c b/src/web/api/v1/api_v1_functions.c new file mode 100644 index 000000000..bc1c7df8e --- /dev/null +++ b/src/web/api/v1/api_v1_functions.c @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_functions(RRDHOST *host, struct web_client *w, char *url __maybe_unused) { + if (!netdata_ready) + return HTTP_RESP_SERVICE_UNAVAILABLE; + + BUFFER *wb = w->response.data; + buffer_flush(wb); + wb->content_type = CT_APPLICATION_JSON; + buffer_no_cacheable(wb); + + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); + host_functions2json(host, wb); + buffer_json_finalize(wb); + + return HTTP_RESP_OK; +} diff --git a/src/web/api/v1/api_v1_info.c b/src/web/api/v1/api_v1_info.c new file mode 100644 index 000000000..2395cea59 --- /dev/null +++ b/src/web/api/v1/api_v1_info.c @@ -0,0 +1,207 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +static void host_collectors(RRDHOST *host, BUFFER *wb) { + buffer_json_member_add_array(wb, "collectors"); + + DICTIONARY *dict = dictionary_create(DICT_OPTION_SINGLE_THREADED|DICT_OPTION_DONT_OVERWRITE_VALUE); + RRDSET *st; + char name[500]; + + time_t now = now_realtime_sec(); + + rrdset_foreach_read(st, host) { + if (!rrdset_is_available_for_viewers(st)) + continue; + + sprintf(name, "%s:%s", rrdset_plugin_name(st), rrdset_module_name(st)); + + bool old = 0; + bool *set = dictionary_set(dict, name, &old, sizeof(bool)); + if(!*set) { + *set = true; + st->last_accessed_time_s = now; + buffer_json_add_array_item_object(wb); + buffer_json_member_add_string(wb, "plugin", rrdset_plugin_name(st)); + buffer_json_member_add_string(wb, "module", rrdset_module_name(st)); + buffer_json_object_close(wb); + } + } + rrdset_foreach_done(st); + dictionary_destroy(dict); + + buffer_json_array_close(wb); +} + +static inline void web_client_api_request_v1_info_mirrored_hosts_status(BUFFER *wb, RRDHOST *host) { + buffer_json_add_array_item_object(wb); + + buffer_json_member_add_string(wb, "hostname", rrdhost_hostname(host)); + buffer_json_member_add_uint64(wb, "hops", host->system_info ? host->system_info->hops : (host == localhost) ? 0 : 1); + buffer_json_member_add_boolean(wb, "reachable", (host == localhost || !rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))); + + buffer_json_member_add_string(wb, "guid", host->machine_guid); + buffer_json_member_add_uuid(wb, "node_id", host->node_id.uuid); + CLAIM_ID claim_id = rrdhost_claim_id_get(host); + buffer_json_member_add_string(wb, "claim_id", claim_id_is_set(claim_id) ? claim_id.str : NULL); + + buffer_json_object_close(wb); +} + +static inline void web_client_api_request_v1_info_mirrored_hosts(BUFFER *wb) { + RRDHOST *host; + + rrd_rdlock(); + + buffer_json_member_add_array(wb, "mirrored_hosts"); + rrdhost_foreach_read(host) + buffer_json_add_array_item_string(wb, rrdhost_hostname(host)); + buffer_json_array_close(wb); + + buffer_json_member_add_array(wb, "mirrored_hosts_status"); + rrdhost_foreach_read(host) { + if ((host == localhost || !rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))) { + web_client_api_request_v1_info_mirrored_hosts_status(wb, host); + } + } + rrdhost_foreach_read(host) { + if ((host != localhost && rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))) { + web_client_api_request_v1_info_mirrored_hosts_status(wb, host); + } + } + buffer_json_array_close(wb); + + rrd_rdunlock(); +} + +static void web_client_api_request_v1_info_summary_alarm_statuses(RRDHOST *host, BUFFER *wb, const char *key) { + buffer_json_member_add_object(wb, key); + + size_t normal = 0, warning = 0, critical = 0; + RRDCALC *rc; + foreach_rrdcalc_in_rrdhost_read(host, rc) { + if(unlikely(!rc->rrdset || !rc->rrdset->last_collected_time.tv_sec)) + continue; + + switch(rc->status) { + case RRDCALC_STATUS_WARNING: + warning++; + break; + case RRDCALC_STATUS_CRITICAL: + critical++; + break; + default: + normal++; + } + } + foreach_rrdcalc_in_rrdhost_done(rc); + + buffer_json_member_add_uint64(wb, "normal", normal); + buffer_json_member_add_uint64(wb, "warning", warning); + buffer_json_member_add_uint64(wb, "critical", critical); + + buffer_json_object_close(wb); +} + +static int web_client_api_request_v1_info_fill_buffer(RRDHOST *host, BUFFER *wb) { + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); + + buffer_json_member_add_string(wb, "version", rrdhost_program_version(host)); + buffer_json_member_add_string(wb, "uid", host->machine_guid); + + buffer_json_member_add_uint64(wb, "hosts-available", rrdhost_hosts_available()); + web_client_api_request_v1_info_mirrored_hosts(wb); + + web_client_api_request_v1_info_summary_alarm_statuses(host, wb, "alarms"); + + buffer_json_member_add_string_or_empty(wb, "os_name", host->system_info->host_os_name); + buffer_json_member_add_string_or_empty(wb, "os_id", host->system_info->host_os_id); + buffer_json_member_add_string_or_empty(wb, "os_id_like", host->system_info->host_os_id_like); + buffer_json_member_add_string_or_empty(wb, "os_version", host->system_info->host_os_version); + buffer_json_member_add_string_or_empty(wb, "os_version_id", host->system_info->host_os_version_id); + buffer_json_member_add_string_or_empty(wb, "os_detection", host->system_info->host_os_detection); + buffer_json_member_add_string_or_empty(wb, "cores_total", host->system_info->host_cores); + buffer_json_member_add_string_or_empty(wb, "total_disk_space", host->system_info->host_disk_space); + buffer_json_member_add_string_or_empty(wb, "cpu_freq", host->system_info->host_cpu_freq); + buffer_json_member_add_string_or_empty(wb, "ram_total", host->system_info->host_ram_total); + + buffer_json_member_add_string_or_omit(wb, "container_os_name", host->system_info->container_os_name); + buffer_json_member_add_string_or_omit(wb, "container_os_id", host->system_info->container_os_id); + buffer_json_member_add_string_or_omit(wb, "container_os_id_like", host->system_info->container_os_id_like); + buffer_json_member_add_string_or_omit(wb, "container_os_version", host->system_info->container_os_version); + buffer_json_member_add_string_or_omit(wb, "container_os_version_id", host->system_info->container_os_version_id); + buffer_json_member_add_string_or_omit(wb, "container_os_detection", host->system_info->container_os_detection); + buffer_json_member_add_string_or_omit(wb, "is_k8s_node", host->system_info->is_k8s_node); + + buffer_json_member_add_string_or_empty(wb, "kernel_name", host->system_info->kernel_name); + buffer_json_member_add_string_or_empty(wb, "kernel_version", host->system_info->kernel_version); + buffer_json_member_add_string_or_empty(wb, "architecture", host->system_info->architecture); + buffer_json_member_add_string_or_empty(wb, "virtualization", host->system_info->virtualization); + buffer_json_member_add_string_or_empty(wb, "virt_detection", host->system_info->virt_detection); + buffer_json_member_add_string_or_empty(wb, "container", host->system_info->container); + buffer_json_member_add_string_or_empty(wb, "container_detection", host->system_info->container_detection); + + buffer_json_member_add_string_or_omit(wb, "cloud_provider_type", host->system_info->cloud_provider_type); + buffer_json_member_add_string_or_omit(wb, "cloud_instance_type", host->system_info->cloud_instance_type); + buffer_json_member_add_string_or_omit(wb, "cloud_instance_region", host->system_info->cloud_instance_region); + + host_labels2json(host, wb, "host_labels"); + host_functions2json(host, wb); + host_collectors(host, wb); + + buffer_json_member_add_boolean(wb, "cloud-enabled", true); + buffer_json_member_add_boolean(wb, "cloud-available", true); + buffer_json_member_add_boolean(wb, "agent-claimed", is_agent_claimed()); + buffer_json_member_add_boolean(wb, "aclk-available", aclk_online()); + + buffer_json_member_add_string(wb, "memory-mode", rrd_memory_mode_name(host->rrd_memory_mode)); +#ifdef ENABLE_DBENGINE + buffer_json_member_add_uint64(wb, "multidb-disk-quota", default_multidb_disk_quota_mb); + buffer_json_member_add_uint64(wb, "page-cache-size", default_rrdeng_page_cache_mb); +#endif // ENABLE_DBENGINE + buffer_json_member_add_boolean(wb, "web-enabled", web_server_mode != WEB_SERVER_MODE_NONE); + buffer_json_member_add_boolean(wb, "stream-enabled", stream_conf_send_enabled); + + buffer_json_member_add_boolean(wb, "stream-compression", + host->sender && host->sender->compressor.initialized); + + buffer_json_member_add_boolean(wb, "https-enabled", true); + + buffer_json_member_add_quoted_string(wb, "buildinfo", analytics_data.netdata_buildinfo); + buffer_json_member_add_quoted_string(wb, "release-channel", analytics_data.netdata_config_release_channel); + buffer_json_member_add_quoted_string(wb, "notification-methods", analytics_data.netdata_notification_methods); + + buffer_json_member_add_boolean(wb, "exporting-enabled", analytics_data.exporting_enabled); + buffer_json_member_add_quoted_string(wb, "exporting-connectors", analytics_data.netdata_exporting_connectors); + + buffer_json_member_add_uint64(wb, "allmetrics-prometheus-used", analytics_data.prometheus_hits); + buffer_json_member_add_uint64(wb, "allmetrics-shell-used", analytics_data.shell_hits); + buffer_json_member_add_uint64(wb, "allmetrics-json-used", analytics_data.json_hits); + buffer_json_member_add_uint64(wb, "dashboard-used", analytics_data.dashboard_hits); + + buffer_json_member_add_uint64(wb, "charts-count", analytics_data.charts_count); + buffer_json_member_add_uint64(wb, "metrics-count", analytics_data.metrics_count); + +#if defined(ENABLE_ML) + buffer_json_member_add_object(wb, "ml-info"); + ml_host_get_info(host, wb); + buffer_json_object_close(wb); +#endif + + buffer_json_finalize(wb); + return 0; +} + +int api_v1_info(RRDHOST *host, struct web_client *w, char *url) { + (void)url; + if (!netdata_ready) return HTTP_RESP_SERVICE_UNAVAILABLE; + BUFFER *wb = w->response.data; + buffer_flush(wb); + wb->content_type = CT_APPLICATION_JSON; + + web_client_api_request_v1_info_fill_buffer(host, wb); + + buffer_no_cacheable(wb); + return HTTP_RESP_OK; +} diff --git a/src/web/api/v1/api_v1_manage.c b/src/web/api/v1/api_v1_manage.c new file mode 100644 index 000000000..46611fbf5 --- /dev/null +++ b/src/web/api/v1/api_v1_manage.c @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +char *api_secret; + +static char *get_mgmt_api_key(void) { + char filename[FILENAME_MAX + 1]; + snprintfz(filename, FILENAME_MAX, "%s/netdata.api.key", netdata_configured_varlib_dir); + const char *api_key_filename = config_get(CONFIG_SECTION_REGISTRY, "netdata management api key file", filename); + static char guid[GUID_LEN + 1] = ""; + + if(likely(guid[0])) + return guid; + + // read it from disk + int fd = open(api_key_filename, O_RDONLY | O_CLOEXEC); + if(fd != -1) { + char buf[GUID_LEN + 1]; + if(read(fd, buf, GUID_LEN) != GUID_LEN) + netdata_log_error("Failed to read management API key from '%s'", api_key_filename); + else { + buf[GUID_LEN] = '\0'; + if(regenerate_guid(buf, guid) == -1) { + netdata_log_error("Failed to validate management API key '%s' from '%s'.", + buf, api_key_filename); + + guid[0] = '\0'; + } + } + close(fd); + } + + // generate a new one? + if(!guid[0]) { + nd_uuid_t uuid; + + uuid_generate_time(uuid); + uuid_unparse_lower(uuid, guid); + guid[GUID_LEN] = '\0'; + + // save it + fd = open(api_key_filename, O_WRONLY|O_CREAT|O_TRUNC | O_CLOEXEC, 444); + if(fd == -1) { + netdata_log_error("Cannot create unique management API key file '%s'. Please adjust config parameter 'netdata management api key file' to a proper path and file.", api_key_filename); + goto temp_key; + } + + if(write(fd, guid, GUID_LEN) != GUID_LEN) { + netdata_log_error("Cannot write the unique management API key file '%s'. Please adjust config parameter 'netdata management api key file' to a proper path and file with enough space left.", api_key_filename); + close(fd); + goto temp_key; + } + + close(fd); + } + + return guid; + +temp_key: + netdata_log_info("You can still continue to use the alarm management API using the authorization token %s during this Netdata session only.", guid); + return guid; +} + +void api_v1_management_init(void) { + api_secret = get_mgmt_api_key(); +} + +#define HLT_MGM "manage/health" +int api_v1_manage(RRDHOST *host, struct web_client *w, char *url) { + const char *haystack = buffer_tostring(w->url_path_decoded); + char *needle; + + buffer_flush(w->response.data); + + if ((needle = strstr(haystack, HLT_MGM)) == NULL) { + buffer_strcat(w->response.data, "Invalid management request. Curently only 'health' is supported."); + return HTTP_RESP_NOT_FOUND; + } + needle += strlen(HLT_MGM); + if (*needle != '\0') { + buffer_strcat(w->response.data, "Invalid management request. Currently only 'health' is supported."); + return HTTP_RESP_NOT_FOUND; + } + return web_client_api_request_v1_mgmt_health(host, w, url); +} diff --git a/src/web/api/v1/api_v1_ml_info.c b/src/web/api/v1/api_v1_ml_info.c new file mode 100644 index 000000000..121f9bf9c --- /dev/null +++ b/src/web/api/v1/api_v1_ml_info.c @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_ml_info(RRDHOST *host, struct web_client *w, char *url) { + (void) url; +#if defined(ENABLE_ML) + + if (!netdata_ready) + return HTTP_RESP_SERVICE_UNAVAILABLE; + + BUFFER *wb = w->response.data; + buffer_flush(wb); + wb->content_type = CT_APPLICATION_JSON; + + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); + ml_host_get_detection_info(host, wb); + buffer_json_finalize(wb); + + buffer_no_cacheable(wb); + + return HTTP_RESP_OK; +#else + UNUSED(host); + UNUSED(w); + return HTTP_RESP_SERVICE_UNAVAILABLE; +#endif // ENABLE_ML +} diff --git a/src/web/api/v1/api_v1_registry.c b/src/web/api/v1/api_v1_registry.c new file mode 100644 index 000000000..fa4ce4ca4 --- /dev/null +++ b/src/web/api/v1/api_v1_registry.c @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +// Pings a netdata server: +// /api/v1/registry?action=hello +// +// Access to a netdata registry: +// /api/v1/registry?action=access&machine=${machine_guid}&name=${hostname}&url=${url} +// +// Delete from a netdata registry: +// /api/v1/registry?action=delete&machine=${machine_guid}&name=${hostname}&url=${url}&delete_url=${delete_url} +// +// Search for the URLs of a machine: +// /api/v1/registry?action=search&for=${machine_guid} +// +// Impersonate: +// /api/v1/registry?action=switch&machine=${machine_guid}&name=${hostname}&url=${url}&to=${new_person_guid} +int api_v1_registry(RRDHOST *host, struct web_client *w, char *url) { + static uint32_t hash_action = 0, hash_access = 0, hash_hello = 0, hash_delete = 0, hash_search = 0, + hash_switch = 0, hash_machine = 0, hash_url = 0, hash_name = 0, hash_delete_url = 0, hash_for = 0, + hash_to = 0 /*, hash_redirects = 0 */; + + if(unlikely(!hash_action)) { + hash_action = simple_hash("action"); + hash_access = simple_hash("access"); + hash_hello = simple_hash("hello"); + hash_delete = simple_hash("delete"); + hash_search = simple_hash("search"); + hash_switch = simple_hash("switch"); + hash_machine = simple_hash("machine"); + hash_url = simple_hash("url"); + hash_name = simple_hash("name"); + hash_delete_url = simple_hash("delete_url"); + hash_for = simple_hash("for"); + hash_to = simple_hash("to"); + /* + hash_redirects = simple_hash("redirects"); +*/ + } + + netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 registry with URL '%s'", w->id, url); + + // TODO + // The browser may send multiple cookies with our id + + char person_guid[UUID_STR_LEN] = ""; + char *cookie = strstr(w->response.data->buffer, NETDATA_REGISTRY_COOKIE_NAME "="); + if(cookie) + strncpyz(person_guid, &cookie[sizeof(NETDATA_REGISTRY_COOKIE_NAME)], UUID_STR_LEN - 1); + else if(!extract_bearer_token_from_request(w, person_guid, sizeof(person_guid))) + person_guid[0] = '\0'; + + char action = '\0'; + char *machine_guid = NULL, + *machine_url = NULL, + *url_name = NULL, + *search_machine_guid = NULL, + *delete_url = NULL, + *to_person_guid = NULL; + /* + int redirects = 0; +*/ + + // Don't cache registry responses + buffer_no_cacheable(w->response.data); + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if (!name || !*name) continue; + if (!value || !*value) continue; + + netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 registry query param '%s' with value '%s'", w->id, name, value); + + uint32_t hash = simple_hash(name); + + if(hash == hash_action && !strcmp(name, "action")) { + uint32_t vhash = simple_hash(value); + + if(vhash == hash_access && !strcmp(value, "access")) action = 'A'; + else if(vhash == hash_hello && !strcmp(value, "hello")) action = 'H'; + else if(vhash == hash_delete && !strcmp(value, "delete")) action = 'D'; + else if(vhash == hash_search && !strcmp(value, "search")) action = 'S'; + else if(vhash == hash_switch && !strcmp(value, "switch")) action = 'W'; +#ifdef NETDATA_INTERNAL_CHECKS + else netdata_log_error("unknown registry action '%s'", value); +#endif /* NETDATA_INTERNAL_CHECKS */ + } + /* + else if(hash == hash_redirects && !strcmp(name, "redirects")) + redirects = atoi(value); +*/ + else if(hash == hash_machine && !strcmp(name, "machine")) + machine_guid = value; + + else if(hash == hash_url && !strcmp(name, "url")) + machine_url = value; + + else if(action == 'A') { + if(hash == hash_name && !strcmp(name, "name")) + url_name = value; + } + else if(action == 'D') { + if(hash == hash_delete_url && !strcmp(name, "delete_url")) + delete_url = value; + } + else if(action == 'S') { + if(hash == hash_for && !strcmp(name, "for")) + search_machine_guid = value; + } + else if(action == 'W') { + if(hash == hash_to && !strcmp(name, "to")) + to_person_guid = value; + } +#ifdef NETDATA_INTERNAL_CHECKS + else netdata_log_error("unused registry URL parameter '%s' with value '%s'", name, value); +#endif /* NETDATA_INTERNAL_CHECKS */ + } + + bool do_not_track = respect_web_browser_do_not_track_policy && web_client_has_donottrack(w); + + if(unlikely(action == 'H')) { + // HELLO request, dashboard ACL + analytics_log_dashboard(); + if(unlikely(!http_can_access_dashboard(w))) + return web_client_permission_denied_acl(w); + } + else { + // everything else, registry ACL + if(unlikely(!http_can_access_registry(w))) + return web_client_permission_denied_acl(w); + + if(unlikely(do_not_track)) { + buffer_flush(w->response.data); + buffer_sprintf(w->response.data, "Your web browser is sending 'DNT: 1' (Do Not Track). The registry requires persistent cookies on your browser to work."); + return HTTP_RESP_BAD_REQUEST; + } + } + + buffer_no_cacheable(w->response.data); + + switch(action) { + case 'A': + if(unlikely(!machine_guid || !machine_url || !url_name)) { + netdata_log_error("Invalid registry request - access requires these parameters: machine ('%s'), url ('%s'), name ('%s')", machine_guid ? machine_guid : "UNSET", machine_url ? machine_url : "UNSET", url_name ? url_name : "UNSET"); + buffer_flush(w->response.data); + buffer_strcat(w->response.data, "Invalid registry Access request."); + return HTTP_RESP_BAD_REQUEST; + } + + web_client_enable_tracking_required(w); + return registry_request_access_json(host, w, person_guid, machine_guid, machine_url, url_name, now_realtime_sec()); + + case 'D': + if(unlikely(!machine_guid || !machine_url || !delete_url)) { + netdata_log_error("Invalid registry request - delete requires these parameters: machine ('%s'), url ('%s'), delete_url ('%s')", machine_guid?machine_guid:"UNSET", machine_url?machine_url:"UNSET", delete_url?delete_url:"UNSET"); + buffer_flush(w->response.data); + buffer_strcat(w->response.data, "Invalid registry Delete request."); + return HTTP_RESP_BAD_REQUEST; + } + + web_client_enable_tracking_required(w); + return registry_request_delete_json(host, w, person_guid, machine_guid, machine_url, delete_url, now_realtime_sec()); + + case 'S': + if(unlikely(!search_machine_guid)) { + netdata_log_error("Invalid registry request - search requires these parameters: for ('%s')", search_machine_guid?search_machine_guid:"UNSET"); + buffer_flush(w->response.data); + buffer_strcat(w->response.data, "Invalid registry Search request."); + return HTTP_RESP_BAD_REQUEST; + } + + web_client_enable_tracking_required(w); + return registry_request_search_json(host, w, person_guid, search_machine_guid); + + case 'W': + if(unlikely(!machine_guid || !machine_url || !to_person_guid)) { + netdata_log_error("Invalid registry request - switching identity requires these parameters: machine ('%s'), url ('%s'), to ('%s')", machine_guid?machine_guid:"UNSET", machine_url?machine_url:"UNSET", to_person_guid?to_person_guid:"UNSET"); + buffer_flush(w->response.data); + buffer_strcat(w->response.data, "Invalid registry Switch request."); + return HTTP_RESP_BAD_REQUEST; + } + + web_client_enable_tracking_required(w); + return registry_request_switch_json(host, w, person_guid, machine_guid, machine_url, to_person_guid, now_realtime_sec()); + + case 'H': + return registry_request_hello_json(host, w, do_not_track); + + default: + buffer_flush(w->response.data); + buffer_strcat(w->response.data, "Invalid registry request - you need to set an action: hello, access, delete, search"); + return HTTP_RESP_BAD_REQUEST; + } +} diff --git a/src/web/api/v1/api_v1_weights.c b/src/web/api/v1/api_v1_weights.c new file mode 100644 index 000000000..e39fceae1 --- /dev/null +++ b/src/web/api/v1/api_v1_weights.c @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v1_calls.h" + +int api_v1_metric_correlations(RRDHOST *host, struct web_client *w, char *url) { + return web_client_api_request_weights(host, w, url, WEIGHTS_METHOD_MC_KS2, WEIGHTS_FORMAT_CHARTS, 1); +} + +int api_v1_weights(RRDHOST *host, struct web_client *w, char *url) { + return web_client_api_request_weights(host, w, url, WEIGHTS_METHOD_ANOMALY_RATE, WEIGHTS_FORMAT_CONTEXTS, 1); +} diff --git a/src/web/api/v2/api_v2_alert_config.c b/src/web/api/v2/api_v2_alert_config.c new file mode 100644 index 000000000..b4f5344e2 --- /dev/null +++ b/src/web/api/v2/api_v2_alert_config.c @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_alert_config(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + const char *config = NULL; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "config")) + config = value; + } + + buffer_flush(w->response.data); + + if(!config) { + w->response.data->content_type = CT_TEXT_PLAIN; + buffer_strcat(w->response.data, "A config hash ID is required. Add ?config=UUID query param"); + return HTTP_RESP_BAD_REQUEST; + } + + return contexts_v2_alert_config_to_json(w, config); +} diff --git a/src/web/api/v2/api_v2_alert_transitions.c b/src/web/api/v2/api_v2_alert_transitions.c new file mode 100644 index 000000000..e84b80184 --- /dev/null +++ b/src/web/api/v2/api_v2_alert_transitions.c @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_alert_transitions(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal(host, w, url, CONTEXTS_V2_ALERT_TRANSITIONS | CONTEXTS_V2_NODES); +} diff --git a/src/web/api/v2/api_v2_alerts.c b/src/web/api/v2/api_v2_alerts.c new file mode 100644 index 000000000..c5d1922e2 --- /dev/null +++ b/src/web/api/v2/api_v2_alerts.c @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_alerts(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal(host, w, url, CONTEXTS_V2_ALERTS | CONTEXTS_V2_NODES); +} diff --git a/src/web/api/v2/api_v2_bearer.c b/src/web/api/v2/api_v2_bearer.c new file mode 100644 index 000000000..312ca4e48 --- /dev/null +++ b/src/web/api/v2/api_v2_bearer.c @@ -0,0 +1,139 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +static bool verify_host_uuids(RRDHOST *host, const char *machine_guid, const char *node_id) { + if(!machine_guid || !node_id) + return false; + + if(strcmp(machine_guid, host->machine_guid) != 0) + return false; + + if(UUIDiszero(host->node_id)) + return false; + + char buf[UUID_STR_LEN]; + uuid_unparse_lower(host->node_id.uuid, buf); + + return strcmp(node_id, buf) == 0; +} + +int api_v2_bearer_protection(RRDHOST *host __maybe_unused, struct web_client *w __maybe_unused, char *url) { + char *machine_guid = NULL; + char *claim_id = NULL; + char *node_id = NULL; + bool protection = netdata_is_protected_by_bearer; + + while (url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if (!name || !*name) continue; + if (!value || !*value) continue; + + if(!strcmp(name, "bearer_protection")) { + if(!strcmp(value, "on") || !strcmp(value, "true") || !strcmp(value, "yes")) + protection = true; + else + protection = false; + } + else if(!strcmp(name, "machine_guid")) + machine_guid = value; + else if(!strcmp(name, "claim_id")) + claim_id = value; + else if(!strcmp(name, "node_id")) + node_id = value; + } + + if(!claim_id_matches(claim_id)) { + buffer_reset(w->response.data); + buffer_strcat(w->response.data, "The request is for a different claimed agent"); + return HTTP_RESP_BAD_REQUEST; + } + + if(!verify_host_uuids(localhost, machine_guid, node_id)) { + buffer_reset(w->response.data); + buffer_strcat(w->response.data, "The request is missing or not matching local UUIDs"); + return HTTP_RESP_BAD_REQUEST; + } + + netdata_is_protected_by_bearer = protection; + + BUFFER *wb = w->response.data; + buffer_reset(wb); + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); + buffer_json_member_add_boolean(wb, "bearer_protection", netdata_is_protected_by_bearer); + buffer_json_finalize(wb); + + return HTTP_RESP_OK; +} + +int bearer_get_token_json_response(BUFFER *wb, RRDHOST *host, const char *claim_id, const char *machine_guid, const char *node_id, HTTP_USER_ROLE user_role, HTTP_ACCESS access, nd_uuid_t cloud_account_id, const char *client_name) { + if(!claim_id_matches_any(claim_id)) + return rrd_call_function_error(wb, "The request is for a different agent", HTTP_RESP_BAD_REQUEST); + + if(!verify_host_uuids(host, machine_guid, node_id)) + return rrd_call_function_error(wb, "The request is missing or not matching local node UUIDs", HTTP_RESP_BAD_REQUEST); + + nd_uuid_t uuid; + time_t expires_s = bearer_create_token(&uuid, user_role, access, cloud_account_id, client_name); + + buffer_reset(wb); + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_MINIFY); + buffer_json_member_add_int64(wb, "status", HTTP_RESP_OK); + buffer_json_member_add_string(wb, "mg", host->machine_guid); + buffer_json_member_add_boolean(wb, "bearer_protection", netdata_is_protected_by_bearer); + buffer_json_member_add_uuid(wb, "token", uuid); + buffer_json_member_add_time_t(wb, "expiration", expires_s); + buffer_json_finalize(wb); + return HTTP_RESP_OK; +} + +int api_v2_bearer_get_token(RRDHOST *host, struct web_client *w, char *url) { + char *machine_guid = NULL; + char *claim_id = NULL; + char *node_id = NULL; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if (!name || !*name) continue; + if (!value || !*value) continue; + + if(!strcmp(name, "machine_guid")) + machine_guid = value; + else if(!strcmp(name, "claim_id")) + claim_id = value; + else if(!strcmp(name, "node_id")) + node_id = value; + } + + if(!claim_id_matches(claim_id)) { + buffer_reset(w->response.data); + buffer_strcat(w->response.data, "The request is for a different claimed agent"); + return HTTP_RESP_BAD_REQUEST; + } + + if(!verify_host_uuids(host, machine_guid, node_id)) { + buffer_reset(w->response.data); + buffer_strcat(w->response.data, "The request is missing or not matching local UUIDs"); + return HTTP_RESP_BAD_REQUEST; + } + + if(host != localhost) + return call_function_bearer_get_token(host, w, claim_id, machine_guid, node_id); + + return bearer_get_token_json_response( + w->response.data, + host, + claim_id, + machine_guid, + node_id, + w->user_role, + w->access, + w->auth.cloud_account_id, + w->auth.client_name); +} diff --git a/src/web/api/v2/api_v2_calls.h b/src/web/api/v2/api_v2_calls.h new file mode 100644 index 000000000..809af9669 --- /dev/null +++ b/src/web/api/v2/api_v2_calls.h @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_API_V2_CALLS_H +#define NETDATA_API_V2_CALLS_H + +#include "../web_api_v2.h" + +int api_v2_info(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_data(RRDHOST *host, struct web_client *w, char *url); +int api_v2_weights(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_alert_config(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_contexts_internal(RRDHOST *host, struct web_client *w, char *url, CONTEXTS_V2_MODE mode); +int api_v2_contexts(RRDHOST *host, struct web_client *w, char *url); +int api_v2_alert_transitions(RRDHOST *host, struct web_client *w, char *url); +int api_v2_alerts(RRDHOST *host, struct web_client *w, char *url); +int api_v2_functions(RRDHOST *host, struct web_client *w, char *url); +int api_v2_versions(RRDHOST *host, struct web_client *w, char *url); +int api_v2_q(RRDHOST *host, struct web_client *w, char *url); +int api_v2_nodes(RRDHOST *host, struct web_client *w, char *url); +int api_v2_node_instances(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_ilove(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_claim(RRDHOST *host, struct web_client *w, char *url); +int api_v3_claim(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_webrtc(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_progress(RRDHOST *host, struct web_client *w, char *url); + +int api_v2_bearer_get_token(RRDHOST *host, struct web_client *w, char *url); +int bearer_get_token_json_response(BUFFER *wb, RRDHOST *host, const char *claim_id, const char *machine_guid, const char *node_id, HTTP_USER_ROLE user_role, HTTP_ACCESS access, nd_uuid_t cloud_account_id, const char *client_name); +int api_v2_bearer_protection(RRDHOST *host, struct web_client *w, char *url); + +#endif //NETDATA_API_V2_CALLS_H diff --git a/src/web/api/v2/api_v2_claim.c b/src/web/api/v2/api_v2_claim.c new file mode 100644 index 000000000..906986101 --- /dev/null +++ b/src/web/api/v2/api_v2_claim.c @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" +#include "claim/claim.h" + +static char *netdata_random_session_id_filename = NULL; +static nd_uuid_t netdata_random_session_id = { 0 }; + +bool netdata_random_session_id_generate(void) { + static char guid[UUID_STR_LEN] = ""; + + uuid_generate_random(netdata_random_session_id); + uuid_unparse_lower(netdata_random_session_id, guid); + + char filename[FILENAME_MAX + 1]; + snprintfz(filename, FILENAME_MAX, "%s/netdata_random_session_id", netdata_configured_varlib_dir); + + bool ret = true; + + (void)unlink(filename); + + // save it + int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 640); + if(fd == -1) { + netdata_log_error("Cannot create random session id file '%s'.", filename); + ret = false; + } + else { + if (write(fd, guid, UUID_STR_LEN - 1) != UUID_STR_LEN - 1) { + netdata_log_error("Cannot write the random session id file '%s'.", filename); + ret = false; + } else { + ssize_t bytes = write(fd, "\n", 1); + UNUSED(bytes); + } + close(fd); + } + + if(ret && (!netdata_random_session_id_filename || strcmp(netdata_random_session_id_filename, filename) != 0)) { + freez(netdata_random_session_id_filename); + netdata_random_session_id_filename = strdupz(filename); + } + + return ret; +} + +static const char *netdata_random_session_id_get_filename(void) { + if(!netdata_random_session_id_filename) + netdata_random_session_id_generate(); + + return netdata_random_session_id_filename; +} + +static bool netdata_random_session_id_matches(const char *guid) { + if(uuid_is_null(netdata_random_session_id)) + return false; + + nd_uuid_t uuid; + + if(uuid_parse(guid, uuid)) + return false; + + if(uuid_compare(netdata_random_session_id, uuid) == 0) + return true; + + return false; +} + +static bool check_claim_param(const char *s) { + if(!s || !*s) return true; + + do { + if(isalnum((uint8_t)*s) || *s == '.' || *s == ',' || *s == '-' || *s == ':' || *s == '/' || *s == '_') + ; + else + return false; + + } while(*++s); + + return true; +} + +static bool agent_can_be_claimed(void) { + CLOUD_STATUS status = cloud_status(); + switch(status) { + case CLOUD_STATUS_AVAILABLE: + case CLOUD_STATUS_OFFLINE: + case CLOUD_STATUS_INDIRECT: + return true; + + case CLOUD_STATUS_BANNED: + case CLOUD_STATUS_ONLINE: + return false; + } + + return false; +} + +typedef enum { + CLAIM_RESP_INFO, + CLAIM_RESP_ERROR, + CLAIM_RESP_ACTION_OK, + CLAIM_RESP_ACTION_FAILED, +} CLAIM_RESPONSE; + +static void claim_add_user_info_command(BUFFER *wb) { + const char *filename = netdata_random_session_id_get_filename(); + CLEAN_BUFFER *os_cmd = buffer_create(0, NULL); + + const char *os_filename; + const char *os_prefix; + const char *os_quote; + const char *os_message; + +#if defined(OS_WINDOWS) + char win_path[MAX_PATH]; + cygwin_conv_path(CCP_POSIX_TO_WIN_A, filename, win_path, sizeof(win_path)); + os_filename = win_path; + os_prefix = "more"; + os_message = "We need to verify this Windows server is yours. So, open a Command Prompt on this server to run the command. It will give you a UUID. Copy and paste this UUID to this box:"; +#else + os_filename = filename; + os_prefix = "sudo cat"; + os_message = "We need to verify this server is yours. SSH to this server and run this command. It will give you a UUID. Copy and paste this UUID to this box:"; +#endif + + // add quotes only when the filename has a space + if(strchr(os_filename, ' ')) + os_quote = "\""; + else + os_quote = ""; + + buffer_sprintf(os_cmd, "%s %s%s%s", os_prefix, os_quote, os_filename, os_quote); + + buffer_json_member_add_string(wb, "key_filename", os_filename); + buffer_json_member_add_string(wb, "cmd", buffer_tostring(os_cmd)); + buffer_json_member_add_string(wb, "help", os_message); +} + +static int claim_json_response(BUFFER *wb, CLAIM_RESPONSE response, const char *msg) { + time_t now_s = now_realtime_sec(); + buffer_reset(wb); + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); + + if(response != CLAIM_RESP_INFO) { + // this is not an info, so it needs a status report + buffer_json_member_add_boolean(wb, "success", response == CLAIM_RESP_ACTION_OK ? true : false); + buffer_json_member_add_string_or_empty(wb, "message", msg ? msg : ""); + } + + buffer_json_cloud_status(wb, now_s); + + if(response != CLAIM_RESP_ACTION_OK) { + buffer_json_member_add_boolean(wb, "can_be_claimed", agent_can_be_claimed()); + claim_add_user_info_command(wb); + } + + buffer_json_agents_v2(wb, NULL, now_s, false, false); + buffer_json_finalize(wb); + + return (response == CLAIM_RESP_ERROR) ? HTTP_RESP_BAD_REQUEST : HTTP_RESP_OK; +} + +static int claim_txt_response(BUFFER *wb, const char *msg) { + buffer_reset(wb); + buffer_strcat(wb, msg); + return HTTP_RESP_BAD_REQUEST; +} + +static int api_claim(uint8_t version, struct web_client *w, char *url) { + char *key = NULL; + char *token = NULL; + char *rooms = NULL; + char *base_url = NULL; + + while (url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if (!name || !*name) continue; + if (!value || !*value) continue; + + if(!strcmp(name, "key")) + key = value; + else if(!strcmp(name, "token")) + token = value; + else if(!strcmp(name, "rooms")) + rooms = value; + else if(!strcmp(name, "url")) + base_url = value; + } + + BUFFER *wb = w->response.data; + + CLAIM_RESPONSE response = CLAIM_RESP_INFO; + const char *msg = NULL; + bool can_be_claimed = agent_can_be_claimed(); + + if(can_be_claimed && key) { + if(!netdata_random_session_id_matches(key)) { + netdata_random_session_id_generate(); // generate a new key, to avoid an attack to find it + if(version < 3) return claim_txt_response(wb, "invalid key"); + return claim_json_response(wb, CLAIM_RESP_ERROR, "invalid key"); + } + + if(!token || !base_url || !check_claim_param(token) || !check_claim_param(base_url) || (rooms && !check_claim_param(rooms))) { + netdata_random_session_id_generate(); // generate a new key, to avoid an attack to find it + if(version < 3) return claim_txt_response(wb, "invalid parameters"); + return claim_json_response(wb, CLAIM_RESP_ERROR, "invalid parameters"); + } + + netdata_random_session_id_generate(); // generate a new key, to avoid an attack to find it + + if(claim_agent(base_url, token, rooms, cloud_config_proxy_get(), cloud_config_insecure_get())) { + msg = "ok"; + can_be_claimed = false; + claim_reload_and_wait_online(); + response = CLAIM_RESP_ACTION_OK; + } + else { + msg = claim_agent_failure_reason_get(); + response = CLAIM_RESP_ACTION_FAILED; + } + } + + return claim_json_response(wb, response, msg); +} + +int api_v2_claim(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_claim(2, w, url); +} + +int api_v3_claim(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_claim(3, w, url); +} diff --git a/src/web/api/v2/api_v2_contexts.c b/src/web/api/v2/api_v2_contexts.c new file mode 100644 index 000000000..bbe36ab34 --- /dev/null +++ b/src/web/api/v2/api_v2_contexts.c @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +// -------------------------------------------------------------------------------------------------------------------- + +int api_v2_contexts_internal(RRDHOST *host __maybe_unused, struct web_client *w, char *url, CONTEXTS_V2_MODE mode) { + struct api_v2_contexts_request req = { 0 }; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "scope_nodes")) + req.scope_nodes = value; + else if(!strcmp(name, "nodes")) + req.nodes = value; + else if((mode & (CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_SEARCH | CONTEXTS_V2_ALERTS | CONTEXTS_V2_ALERT_TRANSITIONS)) && !strcmp(name, "scope_contexts")) + req.scope_contexts = value; + else if((mode & (CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_SEARCH | CONTEXTS_V2_ALERTS | CONTEXTS_V2_ALERT_TRANSITIONS)) && !strcmp(name, "contexts")) + req.contexts = value; + else if((mode & CONTEXTS_V2_SEARCH) && !strcmp(name, "q")) + req.q = value; + else if(!strcmp(name, "options")) + req.options = contexts_options_str_to_id(value); + else if(!strcmp(name, "after")) + req.after = str2l(value); + else if(!strcmp(name, "before")) + req.before = str2l(value); + else if(!strcmp(name, "timeout")) + req.timeout_ms = str2l(value); + else if(mode & (CONTEXTS_V2_ALERTS | CONTEXTS_V2_ALERT_TRANSITIONS)) { + if (!strcmp(name, "alert")) + req.alerts.alert = value; + else if (!strcmp(name, "transition")) + req.alerts.transition = value; + else if(mode & CONTEXTS_V2_ALERTS) { + if (!strcmp(name, "status")) + req.alerts.status = contexts_alert_status_str_to_id(value); + } + else if(mode & CONTEXTS_V2_ALERT_TRANSITIONS) { + if (!strcmp(name, "last")) + req.alerts.last = strtoul(value, NULL, 0); + else if(!strcmp(name, "context")) + req.contexts = value; + else if (!strcmp(name, "anchor_gi")) { + req.alerts.global_id_anchor = str2ull(value, NULL); + } + else { + for(int i = 0; i < ATF_TOTAL_ENTRIES ;i++) { + if(!strcmp(name, alert_transition_facets[i].query_param)) + req.alerts.facets[i] = value; + } + } + } + } + } + + if ((mode & CONTEXTS_V2_ALERT_TRANSITIONS) && !req.alerts.last) + req.alerts.last = 1; + + buffer_flush(w->response.data); + buffer_no_cacheable(w->response.data); + return rrdcontext_to_json_v2(w->response.data, &req, mode); +} + +int api_v2_contexts(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal( + host, w, url, CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_NODES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_VERSIONS); +} + diff --git a/src/web/api/v2/api_v2_data.c b/src/web/api/v2/api_v2_data.c new file mode 100644 index 000000000..4eb54e9ad --- /dev/null +++ b/src/web/api/v2/api_v2_data.c @@ -0,0 +1,302 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +#define GROUP_BY_KEY_MAX_LENGTH 30 +static struct { + char group_by[GROUP_BY_KEY_MAX_LENGTH + 1]; + char aggregation[GROUP_BY_KEY_MAX_LENGTH + 1]; + char group_by_label[GROUP_BY_KEY_MAX_LENGTH + 1]; +} group_by_keys[MAX_QUERY_GROUP_BY_PASSES]; + +__attribute__((constructor)) void initialize_group_by_keys(void) { + for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { + snprintfz(group_by_keys[g].group_by, GROUP_BY_KEY_MAX_LENGTH, "group_by[%zu]", g); + snprintfz(group_by_keys[g].aggregation, GROUP_BY_KEY_MAX_LENGTH, "aggregation[%zu]", g); + snprintfz(group_by_keys[g].group_by_label, GROUP_BY_KEY_MAX_LENGTH, "group_by_label[%zu]", g); + } +} + +int api_v2_data(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + usec_t received_ut = now_monotonic_usec(); + + int ret = HTTP_RESP_BAD_REQUEST; + + buffer_flush(w->response.data); + + char *google_version = "0.6", + *google_reqId = "0", + *google_sig = "0", + *google_out = "json", + *responseHandler = NULL, + *outFileName = NULL; + + time_t last_timestamp_in_data = 0, google_timestamp = 0; + + char *scope_nodes = NULL; + char *scope_contexts = NULL; + char *nodes = NULL; + char *contexts = NULL; + char *instances = NULL; + char *dimensions = NULL; + char *before_str = NULL; + char *after_str = NULL; + char *resampling_time_str = NULL; + char *points_str = NULL; + char *timeout_str = NULL; + char *labels = NULL; + char *alerts = NULL; + char *time_group_options = NULL; + char *tier_str = NULL; + size_t tier = 0; + RRDR_TIME_GROUPING time_group = RRDR_GROUPING_AVERAGE; + DATASOURCE_FORMAT format = DATASOURCE_JSON2; + RRDR_OPTIONS options = RRDR_OPTION_VIRTUAL_POINTS | RRDR_OPTION_JSON_WRAP | RRDR_OPTION_RETURN_JWAR; + + struct group_by_pass group_by[MAX_QUERY_GROUP_BY_PASSES] = { + { + .group_by = RRDR_GROUP_BY_DIMENSION, + .group_by_label = NULL, + .aggregation = RRDR_GROUP_BY_FUNCTION_AVERAGE, + }, + }; + + size_t group_by_idx = 0, group_by_label_idx = 0, aggregation_idx = 0; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "scope_nodes")) scope_nodes = value; + else if(!strcmp(name, "scope_contexts")) scope_contexts = value; + else if(!strcmp(name, "nodes")) nodes = value; + else if(!strcmp(name, "contexts")) contexts = value; + else if(!strcmp(name, "instances")) instances = value; + else if(!strcmp(name, "dimensions")) dimensions = value; + else if(!strcmp(name, "labels")) labels = value; + else if(!strcmp(name, "alerts")) alerts = value; + else if(!strcmp(name, "after")) after_str = value; + else if(!strcmp(name, "before")) before_str = value; + else if(!strcmp(name, "points")) points_str = value; + else if(!strcmp(name, "timeout")) timeout_str = value; + else if(!strcmp(name, "group_by")) { + group_by[group_by_idx++].group_by = group_by_parse(value); + if(group_by_idx >= MAX_QUERY_GROUP_BY_PASSES) + group_by_idx = MAX_QUERY_GROUP_BY_PASSES - 1; + } + else if(!strcmp(name, "group_by_label")) { + group_by[group_by_label_idx++].group_by_label = value; + if(group_by_label_idx >= MAX_QUERY_GROUP_BY_PASSES) + group_by_label_idx = MAX_QUERY_GROUP_BY_PASSES - 1; + } + else if(!strcmp(name, "aggregation")) { + group_by[aggregation_idx++].aggregation = group_by_aggregate_function_parse(value); + if(aggregation_idx >= MAX_QUERY_GROUP_BY_PASSES) + aggregation_idx = MAX_QUERY_GROUP_BY_PASSES - 1; + } + else if(!strcmp(name, "format")) format = datasource_format_str_to_id(value); + else if(!strcmp(name, "options")) options |= rrdr_options_parse(value); + else if(!strcmp(name, "time_group")) time_group = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); + else if(!strcmp(name, "time_group_options")) time_group_options = value; + else if(!strcmp(name, "time_resampling")) resampling_time_str = value; + else if(!strcmp(name, "tier")) tier_str = value; + else if(!strcmp(name, "callback")) responseHandler = value; + else if(!strcmp(name, "filename")) outFileName = value; + else if(!strcmp(name, "tqx")) { + // parse Google Visualization API options + // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source + char *tqx_name, *tqx_value; + + while(value) { + tqx_value = strsep_skip_consecutive_separators(&value, ";"); + if(!tqx_value || !*tqx_value) continue; + + tqx_name = strsep_skip_consecutive_separators(&tqx_value, ":"); + if(!tqx_name || !*tqx_name) continue; + if(!tqx_value || !*tqx_value) continue; + + if(!strcmp(tqx_name, "version")) + google_version = tqx_value; + else if(!strcmp(tqx_name, "reqId")) + google_reqId = tqx_value; + else if(!strcmp(tqx_name, "sig")) { + google_sig = tqx_value; + google_timestamp = strtoul(google_sig, NULL, 0); + } + else if(!strcmp(tqx_name, "out")) { + google_out = tqx_value; + format = google_data_format_str_to_id(google_out); + } + else if(!strcmp(tqx_name, "responseHandler")) + responseHandler = tqx_value; + else if(!strcmp(tqx_name, "outFileName")) + outFileName = tqx_value; + } + } + else { + for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { + if(!strcmp(name, group_by_keys[g].group_by)) + group_by[g].group_by = group_by_parse(value); + else if(!strcmp(name, group_by_keys[g].group_by_label)) + group_by[g].group_by_label = value; + else if(!strcmp(name, group_by_keys[g].aggregation)) + group_by[g].aggregation = group_by_aggregate_function_parse(value); + } + } + } + + // validate the google parameters given + fix_google_param(google_out); + fix_google_param(google_sig); + fix_google_param(google_reqId); + fix_google_param(google_version); + fix_google_param(responseHandler); + fix_google_param(outFileName); + + for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { + if (group_by[g].group_by_label && *group_by[g].group_by_label) + group_by[g].group_by |= RRDR_GROUP_BY_LABEL; + } + + if(group_by[0].group_by == RRDR_GROUP_BY_NONE) + group_by[0].group_by = RRDR_GROUP_BY_DIMENSION; + + for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { + if ((group_by[g].group_by & ~(RRDR_GROUP_BY_DIMENSION)) || (options & RRDR_OPTION_PERCENTAGE)) { + options |= RRDR_OPTION_ABSOLUTE; + break; + } + } + + if(options & RRDR_OPTION_DEBUG) + options &= ~RRDR_OPTION_MINIFY; + + if(tier_str && *tier_str) { + tier = str2ul(tier_str); + if(tier < storage_tiers) + options |= RRDR_OPTION_SELECTED_TIER; + else + tier = 0; + } + + time_t before = (before_str && *before_str)?str2l(before_str):0; + time_t after = (after_str && *after_str) ?str2l(after_str):-600; + size_t points = (points_str && *points_str)?str2u(points_str):0; + int timeout = (timeout_str && *timeout_str)?str2i(timeout_str): 0; + time_t resampling_time = (resampling_time_str && *resampling_time_str) ? str2l(resampling_time_str) : 0; + + QUERY_TARGET_REQUEST qtr = { + .version = 2, + .scope_nodes = scope_nodes, + .scope_contexts = scope_contexts, + .after = after, + .before = before, + .host = NULL, + .st = NULL, + .nodes = nodes, + .contexts = contexts, + .instances = instances, + .dimensions = dimensions, + .alerts = alerts, + .timeout_ms = timeout, + .points = points, + .format = format, + .options = options, + .time_group_method = time_group, + .time_group_options = time_group_options, + .resampling_time = resampling_time, + .tier = tier, + .chart_label_key = NULL, + .labels = labels, + .query_source = QUERY_SOURCE_API_DATA, + .priority = STORAGE_PRIORITY_NORMAL, + .received_ut = received_ut, + + .interrupt_callback = web_client_interrupt_callback, + .interrupt_callback_data = w, + + .transaction = &w->transaction, + }; + + for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) + qtr.group_by[g] = group_by[g]; + + QUERY_TARGET *qt = query_target_create(&qtr); + ONEWAYALLOC *owa = NULL; + + if(!qt) { + buffer_sprintf(w->response.data, "Failed to prepare the query."); + ret = HTTP_RESP_INTERNAL_SERVER_ERROR; + goto cleanup; + } + + web_client_timeout_checkpoint_set(w, timeout); + if(web_client_timeout_checkpoint_and_check(w, NULL)) { + ret = w->response.code; + goto cleanup; + } + + if(outFileName && *outFileName) { + buffer_sprintf(w->response.header, "Content-Disposition: attachment; filename=\"%s\"\r\n", outFileName); + netdata_log_debug(D_WEB_CLIENT, "%llu: generating outfilename header: '%s'", w->id, outFileName); + } + + if(format == DATASOURCE_DATATABLE_JSONP) { + if(responseHandler == NULL) + responseHandler = "google.visualization.Query.setResponse"; + + netdata_log_debug(D_WEB_CLIENT_ACCESS, "%llu: GOOGLE JSON/JSONP: version = '%s', reqId = '%s', sig = '%s', out = '%s', responseHandler = '%s', outFileName = '%s'", + w->id, google_version, google_reqId, google_sig, google_out, responseHandler, outFileName + ); + + buffer_sprintf( + w->response.data, + "%s({version:'%s',reqId:'%s',status:'ok',sig:'%"PRId64"',table:", + responseHandler, + google_version, + google_reqId, + (int64_t)now_realtime_sec()); + } + else if(format == DATASOURCE_JSONP) { + if(responseHandler == NULL) + responseHandler = "callback"; + + buffer_strcat(w->response.data, responseHandler); + buffer_strcat(w->response.data, "("); + } + + owa = onewayalloc_create(0); + ret = data_query_execute(owa, w->response.data, qt, &last_timestamp_in_data); + + if(format == DATASOURCE_DATATABLE_JSONP) { + if(google_timestamp < last_timestamp_in_data) + buffer_strcat(w->response.data, "});"); + + else { + // the client already has the latest data + buffer_flush(w->response.data); + buffer_sprintf(w->response.data, + "%s({version:'%s',reqId:'%s',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});", + responseHandler, google_version, google_reqId); + } + } + else if(format == DATASOURCE_JSONP) + buffer_strcat(w->response.data, ");"); + + if(qt->internal.relative) + buffer_no_cacheable(w->response.data); + else + buffer_cacheable(w->response.data); + +cleanup: + query_target_release(qt); + onewayalloc_destroy(owa); + return ret; +} diff --git a/src/web/api/v2/api_v2_functions.c b/src/web/api/v2/api_v2_functions.c new file mode 100644 index 000000000..286efd130 --- /dev/null +++ b/src/web/api/v2/api_v2_functions.c @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_functions(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal( + host, w, url, CONTEXTS_V2_FUNCTIONS | CONTEXTS_V2_NODES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_VERSIONS); +} diff --git a/src/web/api/v2/api_v2_ilove/README.md b/src/web/api/v2/api_v2_ilove/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/src/web/api/v2/api_v2_ilove/ilove.c b/src/web/api/v2/api_v2_ilove/ilove.c new file mode 100644 index 000000000..501e00123 --- /dev/null +++ b/src/web/api/v2/api_v2_ilove/ilove.c @@ -0,0 +1,306 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "../api_v2_calls.h" + +static const unsigned short int ibm_plex_sans_bold_250[128][128] = { + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* */, 0 /* ! */, 0 /* " */, 0 /* # */, 0 /* $ */, 0 /* % */, 0 /* & */, 0 /* ' */, 0 /* ( */, 0 /* ) */, 0 /* * */, 0 /* + */, 0 /* , */, 0 /* - */, 0 /* . */, 0 /* / */, 0 /* 0 */, 0 /* 1 */, 0 /* 2 */, 0 /* 3 */, 0 /* 4 */, 0 /* 5 */, 0 /* 6 */, 0 /* 7 */, 0 /* 8 */, 0 /* 9 */, 0 /* : */, 0 /* ; */, 0 /* < */, 0 /* = */, 0 /* > */, 0 /* ? */, 0 /* @ */, 0 /* A */, 0 /* B */, 0 /* C */, 0 /* D */, 0 /* E */, 0 /* F */, 0 /* G */, 0 /* H */, 0 /* I */, 0 /* J */, 0 /* K */, 0 /* L */, 0 /* M */, 0 /* N */, 0 /* O */, 0 /* P */, 0 /* Q */, 0 /* R */, 0 /* S */, 0 /* T */, 0 /* U */, 0 /* V */, 0 /* W */, 0 /* X */, 0 /* Y */, 0 /* Z */, 0 /* [ */, 0 /* \ */, 0 /* ] */, 0 /* ^ */, 0 /* _ */, 0 /* ` */, 0 /* a */, 0 /* b */, 0 /* c */, 0 /* d */, 0 /* e */, 0 /* f */, 0 /* g */, 0 /* h */, 0 /* i */, 0 /* j */, 0 /* k */, 0 /* l */, 0 /* m */, 0 /* n */, 0 /* o */, 0 /* p */, 0 /* q */, 0 /* r */, 0 /* s */, 0 /* t */, 0 /* u */, 0 /* v */, 0 /* w */, 0 /* x */, 0 /* y */, 0 /* z */, 0 /* { */, 0 /* | */, 0 /* } */, 0 /* ~ */}, + {5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* */, 5900 /* ! */, 5900 /* " */, 5900 /* # */, 5900 /* $ */, 5900 /* % */, 5900 /* & */, 5900 /* ' */, 5900 /* ( */, 5900 /* ) */, 5900 /* * */, 5900 /* + */, 5900 /* , */, 5900 /* - */, 5900 /* . */, 5900 /* / */, 5900 /* 0 */, 5900 /* 1 */, 5900 /* 2 */, 5900 /* 3 */, 5900 /* 4 */, 5900 /* 5 */, 5900 /* 6 */, 5900 /* 7 */, 5900 /* 8 */, 5900 /* 9 */, 5900 /* : */, 5900 /* ; */, 5900 /* < */, 5900 /* = */, 5900 /* > */, 5900 /* ? */, 5900 /* @ */, 5900 /* A */, 5900 /* B */, 5900 /* C */, 5900 /* D */, 5900 /* E */, 5900 /* F */, 5900 /* G */, 5900 /* H */, 5900 /* I */, 5900 /* J */, 5900 /* K */, 5900 /* L */, 5900 /* M */, 5900 /* N */, 5900 /* O */, 5900 /* P */, 5900 /* Q */, 5900 /* R */, 5900 /* S */, 5900 /* T */, 5900 /* U */, 5900 /* V */, 5900 /* W */, 5900 /* X */, 5900 /* Y */, 5900 /* Z */, 5900 /* [ */, 5900 /* \ */, 5900 /* ] */, 5900 /* ^ */, 5900 /* _ */, 5900 /* ` */, 5900 /* a */, 5900 /* b */, 5900 /* c */, 5900 /* d */, 5900 /* e */, 5900 /* f */, 5900 /* g */, 5900 /* h */, 5900 /* i */, 5900 /* j */, 5900 /* k */, 5900 /* l */, 5900 /* m */, 5900 /* n */, 5900 /* o */, 5900 /* p */, 5900 /* q */, 5900 /* r */, 5900 /* s */, 5900 /* t */, 5900 /* u */, 5900 /* v */, 5900 /* w */, 5900 /* x */, 5900 /* y */, 5900 /* z */, 5900 /* { */, 5900 /* | */, 5900 /* } */, 5900 /* ~ */}, + {8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* ! */, 8000 /* !! */, 8000 /* !" */, 8000 /* !# */, 8000 /* !$ */, 8000 /* !% */, 8000 /* !& */, 8000 /* !' */, 8000 /* !( */, 8000 /* !) */, 8000 /* !* */, 8000 /* !+ */, 8000 /* !, */, 8000 /* !- */, 8000 /* !. */, 8000 /* !/ */, 8000 /* !0 */, 8000 /* !1 */, 8000 /* !2 */, 8000 /* !3 */, 8000 /* !4 */, 8000 /* !5 */, 8000 /* !6 */, 8000 /* !7 */, 8000 /* !8 */, 8000 /* !9 */, 8000 /* !: */, 8000 /* !; */, 8000 /* !< */, 8000 /* != */, 8000 /* !> */, 8000 /* !? */, 8000 /* !@ */, 8000 /* !A */, 8000 /* !B */, 8000 /* !C */, 8000 /* !D */, 8000 /* !E */, 8000 /* !F */, 8000 /* !G */, 8000 /* !H */, 8000 /* !I */, 8000 /* !J */, 8000 /* !K */, 8000 /* !L */, 8000 /* !M */, 8000 /* !N */, 8000 /* !O */, 8000 /* !P */, 8000 /* !Q */, 8000 /* !R */, 8000 /* !S */, 8000 /* !T */, 8000 /* !U */, 8000 /* !V */, 8000 /* !W */, 8000 /* !X */, 8000 /* !Y */, 8000 /* !Z */, 8000 /* ![ */, 8000 /* !\ */, 8000 /* !] */, 8000 /* !^ */, 8000 /* !_ */, 8000 /* !` */, 8000 /* !a */, 8000 /* !b */, 8000 /* !c */, 8000 /* !d */, 8000 /* !e */, 8000 /* !f */, 8000 /* !g */, 8000 /* !h */, 8000 /* !i */, 8000 /* !j */, 8000 /* !k */, 8000 /* !l */, 8000 /* !m */, 8000 /* !n */, 8000 /* !o */, 8000 /* !p */, 8000 /* !q */, 8000 /* !r */, 8000 /* !s */, 8000 /* !t */, 8000 /* !u */, 8000 /* !v */, 8000 /* !w */, 8000 /* !x */, 8000 /* !y */, 8000 /* !z */, 8000 /* !{ */, 8000 /* !| */, 8000 /* !} */, 8000 /* !~ */}, + {12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* " */, 12325 /* "! */, 12325 /* "" */, 12325 /* "# */, 12325 /* "$ */, 12325 /* "% */, 12325 /* "& */, 12325 /* "' */, 12325 /* "( */, 12325 /* ") */, 12325 /* "* */, 12325 /* "+ */, 10075 /* ", */, 12325 /* "- */, 10075 /* ". */, 12325 /* "/ */, 12325 /* "0 */, 12325 /* "1 */, 12325 /* "2 */, 12325 /* "3 */, 12325 /* "4 */, 12325 /* "5 */, 12325 /* "6 */, 12325 /* "7 */, 12325 /* "8 */, 12325 /* "9 */, 12325 /* ": */, 12325 /* "; */, 12325 /* "< */, 12325 /* "= */, 12325 /* "> */, 12325 /* "? */, 12325 /* "@ */, 11075 /* "A */, 12325 /* "B */, 12075 /* "C */, 12325 /* "D */, 12325 /* "E */, 12325 /* "F */, 12075 /* "G */, 12325 /* "H */, 12325 /* "I */, 11325 /* "J */, 12325 /* "K */, 12325 /* "L */, 12325 /* "M */, 12325 /* "N */, 12075 /* "O */, 12325 /* "P */, 12075 /* "Q */, 12325 /* "R */, 12325 /* "S */, 12700 /* "T */, 12325 /* "U */, 12575 /* "V */, 12700 /* "W */, 12325 /* "X */, 12450 /* "Y */, 12325 /* "Z */, 12325 /* "[ */, 12325 /* "\ */, 12325 /* "] */, 12325 /* "^ */, 12325 /* "_ */, 12325 /* "` */, 12325 /* "a */, 12325 /* "b */, 11825 /* "c */, 11825 /* "d */, 11825 /* "e */, 12325 /* "f */, 12325 /* "g */, 12325 /* "h */, 12325 /* "i */, 12325 /* "j */, 12325 /* "k */, 12325 /* "l */, 12325 /* "m */, 12325 /* "n */, 11825 /* "o */, 12325 /* "p */, 11825 /* "q */, 12325 /* "r */, 12325 /* "s */, 12325 /* "t */, 12325 /* "u */, 12950 /* "v */, 12825 /* "w */, 12325 /* "x */, 12825 /* "y */, 12450 /* "z */, 12325 /* "{ */, 12325 /* "| */, 12325 /* "} */, 12325 /* "~ */}, + {15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* # */, 15800 /* #! */, 15800 /* #" */, 15800 /* ## */, 15800 /* #$ */, 15800 /* #% */, 15800 /* #& */, 15800 /* #' */, 15800 /* #( */, 15800 /* #) */, 15800 /* #* */, 15800 /* #+ */, 15800 /* #, */, 15800 /* #- */, 15800 /* #. */, 15800 /* #/ */, 15800 /* #0 */, 15800 /* #1 */, 15800 /* #2 */, 15800 /* #3 */, 15800 /* #4 */, 15800 /* #5 */, 15800 /* #6 */, 15800 /* #7 */, 15800 /* #8 */, 15800 /* #9 */, 15800 /* #: */, 15800 /* #; */, 15800 /* #< */, 15800 /* #= */, 15800 /* #> */, 15800 /* #? */, 15800 /* #@ */, 15800 /* #A */, 15800 /* #B */, 15800 /* #C */, 15800 /* #D */, 15800 /* #E */, 15800 /* #F */, 15800 /* #G */, 15800 /* #H */, 15800 /* #I */, 15800 /* #J */, 15800 /* #K */, 15800 /* #L */, 15800 /* #M */, 15800 /* #N */, 15800 /* #O */, 15800 /* #P */, 15800 /* #Q */, 15800 /* #R */, 15800 /* #S */, 15800 /* #T */, 15800 /* #U */, 15800 /* #V */, 15800 /* #W */, 15800 /* #X */, 15800 /* #Y */, 15800 /* #Z */, 15800 /* #[ */, 15800 /* #\ */, 15800 /* #] */, 15800 /* #^ */, 15800 /* #_ */, 15800 /* #` */, 15800 /* #a */, 15800 /* #b */, 15800 /* #c */, 15800 /* #d */, 15800 /* #e */, 15800 /* #f */, 15800 /* #g */, 15800 /* #h */, 15800 /* #i */, 15800 /* #j */, 15800 /* #k */, 15800 /* #l */, 15800 /* #m */, 15800 /* #n */, 15800 /* #o */, 15800 /* #p */, 15800 /* #q */, 15800 /* #r */, 15800 /* #s */, 15800 /* #t */, 15800 /* #u */, 15800 /* #v */, 15800 /* #w */, 15800 /* #x */, 15800 /* #y */, 15800 /* #z */, 15800 /* #{ */, 15800 /* #| */, 15800 /* #} */, 15800 /* #~ */}, + {15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $ */, 15025 /* $! */, 15025 /* $" */, 15025 /* $# */, 15025 /* $$ */, 15025 /* $% */, 15025 /* $& */, 15025 /* $' */, 15025 /* $( */, 15025 /* $) */, 15025 /* $* */, 15025 /* $+ */, 15025 /* $, */, 15025 /* $- */, 15025 /* $. */, 15025 /* $/ */, 15025 /* $0 */, 15025 /* $1 */, 15025 /* $2 */, 15025 /* $3 */, 15025 /* $4 */, 15025 /* $5 */, 15025 /* $6 */, 15025 /* $7 */, 15025 /* $8 */, 15025 /* $9 */, 15025 /* $: */, 15025 /* $; */, 15025 /* $< */, 15025 /* $= */, 15025 /* $> */, 15025 /* $? */, 15025 /* $@ */, 15025 /* $A */, 15025 /* $B */, 15025 /* $C */, 15025 /* $D */, 15025 /* $E */, 15025 /* $F */, 15025 /* $G */, 15025 /* $H */, 15025 /* $I */, 15025 /* $J */, 15025 /* $K */, 15025 /* $L */, 15025 /* $M */, 15025 /* $N */, 15025 /* $O */, 15025 /* $P */, 15025 /* $Q */, 15025 /* $R */, 15025 /* $S */, 15025 /* $T */, 15025 /* $U */, 15025 /* $V */, 15025 /* $W */, 15025 /* $X */, 15025 /* $Y */, 15025 /* $Z */, 15025 /* $[ */, 15025 /* $\ */, 15025 /* $] */, 15025 /* $^ */, 15025 /* $_ */, 15025 /* $` */, 15025 /* $a */, 15025 /* $b */, 15025 /* $c */, 15025 /* $d */, 15025 /* $e */, 15025 /* $f */, 15025 /* $g */, 15025 /* $h */, 15025 /* $i */, 15025 /* $j */, 15025 /* $k */, 15025 /* $l */, 15025 /* $m */, 15025 /* $n */, 15025 /* $o */, 15025 /* $p */, 15025 /* $q */, 15025 /* $r */, 15025 /* $s */, 15025 /* $t */, 15025 /* $u */, 15025 /* $v */, 15025 /* $w */, 15025 /* $x */, 15025 /* $y */, 15025 /* $z */, 15025 /* ${ */, 15025 /* $| */, 15025 /* $} */, 15025 /* $~ */}, + {24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* % */, 24350 /* %! */, 22850 /* %" */, 24350 /* %# */, 24350 /* %$ */, 24350 /* %% */, 24350 /* %& */, 22850 /* %' */, 24350 /* %( */, 24350 /* %) */, 22850 /* %* */, 24350 /* %+ */, 24350 /* %, */, 24350 /* %- */, 24350 /* %. */, 24350 /* %/ */, 24350 /* %0 */, 24350 /* %1 */, 24350 /* %2 */, 24350 /* %3 */, 24350 /* %4 */, 24350 /* %5 */, 24350 /* %6 */, 24350 /* %7 */, 24350 /* %8 */, 24350 /* %9 */, 24350 /* %: */, 24350 /* %; */, 24350 /* %< */, 24350 /* %= */, 24350 /* %> */, 24350 /* %? */, 24350 /* %@ */, 24350 /* %A */, 24350 /* %B */, 24350 /* %C */, 24350 /* %D */, 24350 /* %E */, 24350 /* %F */, 24350 /* %G */, 24350 /* %H */, 24350 /* %I */, 24350 /* %J */, 24350 /* %K */, 24350 /* %L */, 24350 /* %M */, 24350 /* %N */, 24350 /* %O */, 24350 /* %P */, 24350 /* %Q */, 24350 /* %R */, 24350 /* %S */, 24350 /* %T */, 24350 /* %U */, 24350 /* %V */, 24350 /* %W */, 24350 /* %X */, 24350 /* %Y */, 24350 /* %Z */, 24350 /* %[ */, 24350 /* %\ */, 24350 /* %] */, 24350 /* %^ */, 24350 /* %_ */, 24350 /* %` */, 24350 /* %a */, 24350 /* %b */, 24350 /* %c */, 24350 /* %d */, 24350 /* %e */, 24350 /* %f */, 24350 /* %g */, 24350 /* %h */, 24350 /* %i */, 24350 /* %j */, 24350 /* %k */, 24350 /* %l */, 24350 /* %m */, 24350 /* %n */, 24350 /* %o */, 24350 /* %p */, 24350 /* %q */, 24350 /* %r */, 24350 /* %s */, 24350 /* %t */, 24350 /* %u */, 24350 /* %v */, 24350 /* %w */, 24350 /* %x */, 24350 /* %y */, 24350 /* %z */, 24350 /* %{ */, 24350 /* %| */, 24350 /* %} */, 24350 /* %~ */}, + {18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* & */, 18025 /* &! */, 18025 /* &" */, 18025 /* &# */, 18025 /* &$ */, 18025 /* &% */, 18025 /* && */, 18025 /* &' */, 18025 /* &( */, 18025 /* &) */, 18025 /* &* */, 18025 /* &+ */, 18025 /* &, */, 18025 /* &- */, 18025 /* &. */, 18025 /* &/ */, 18025 /* &0 */, 18025 /* &1 */, 18025 /* &2 */, 18025 /* &3 */, 18025 /* &4 */, 18025 /* &5 */, 18025 /* &6 */, 18025 /* &7 */, 18025 /* &8 */, 18025 /* &9 */, 18025 /* &: */, 18025 /* &; */, 18025 /* &< */, 18025 /* &= */, 18025 /* &> */, 18025 /* &? */, 18025 /* &@ */, 18150 /* &A */, 18025 /* &B */, 18025 /* &C */, 18025 /* &D */, 18025 /* &E */, 18025 /* &F */, 18025 /* &G */, 18025 /* &H */, 18025 /* &I */, 18025 /* &J */, 18025 /* &K */, 18025 /* &L */, 18025 /* &M */, 18025 /* &N */, 18025 /* &O */, 18025 /* &P */, 18025 /* &Q */, 18025 /* &R */, 17900 /* &S */, 17025 /* &T */, 18025 /* &U */, 17150 /* &V */, 17525 /* &W */, 18025 /* &X */, 16525 /* &Y */, 17775 /* &Z */, 18025 /* &[ */, 18025 /* &\ */, 18025 /* &] */, 18025 /* &^ */, 18025 /* &_ */, 18025 /* &` */, 18275 /* &a */, 18025 /* &b */, 18275 /* &c */, 18275 /* &d */, 18275 /* &e */, 18025 /* &f */, 18025 /* &g */, 18025 /* &h */, 18025 /* &i */, 18025 /* &j */, 18025 /* &k */, 18025 /* &l */, 18025 /* &m */, 18025 /* &n */, 18275 /* &o */, 18025 /* &p */, 18275 /* &q */, 18025 /* &r */, 18025 /* &s */, 18025 /* &t */, 18025 /* &u */, 17775 /* &v */, 17775 /* &w */, 18025 /* &x */, 17775 /* &y */, 18025 /* &z */, 18025 /* &{ */, 18025 /* &| */, 18025 /* &} */, 18025 /* &~ */}, + {6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* ' */, 6700 /* '! */, 6700 /* '" */, 6700 /* '# */, 6700 /* '$ */, 6700 /* '% */, 6700 /* '& */, 6700 /* '' */, 6700 /* '( */, 6700 /* ') */, 6700 /* '* */, 6700 /* '+ */, 4450 /* ', */, 6700 /* '- */, 4450 /* '. */, 6700 /* '/ */, 6700 /* '0 */, 6700 /* '1 */, 6700 /* '2 */, 6700 /* '3 */, 6700 /* '4 */, 6700 /* '5 */, 6700 /* '6 */, 6700 /* '7 */, 6700 /* '8 */, 6700 /* '9 */, 6700 /* ': */, 6700 /* '; */, 6700 /* '< */, 6700 /* '= */, 6700 /* '> */, 6700 /* '? */, 6700 /* '@ */, 5450 /* 'A */, 6700 /* 'B */, 6450 /* 'C */, 6700 /* 'D */, 6700 /* 'E */, 6700 /* 'F */, 6450 /* 'G */, 6700 /* 'H */, 6700 /* 'I */, 5700 /* 'J */, 6700 /* 'K */, 6700 /* 'L */, 6700 /* 'M */, 6700 /* 'N */, 6450 /* 'O */, 6700 /* 'P */, 6450 /* 'Q */, 6700 /* 'R */, 6700 /* 'S */, 7075 /* 'T */, 6700 /* 'U */, 6950 /* 'V */, 7075 /* 'W */, 6700 /* 'X */, 6825 /* 'Y */, 6700 /* 'Z */, 6700 /* '[ */, 6700 /* '\ */, 6700 /* '] */, 6700 /* '^ */, 6700 /* '_ */, 6700 /* '` */, 6700 /* 'a */, 6700 /* 'b */, 6200 /* 'c */, 6200 /* 'd */, 6200 /* 'e */, 6700 /* 'f */, 6700 /* 'g */, 6700 /* 'h */, 6700 /* 'i */, 6700 /* 'j */, 6700 /* 'k */, 6700 /* 'l */, 6700 /* 'm */, 6700 /* 'n */, 6200 /* 'o */, 6700 /* 'p */, 6200 /* 'q */, 6700 /* 'r */, 6700 /* 's */, 6700 /* 't */, 6700 /* 'u */, 7325 /* 'v */, 7200 /* 'w */, 6700 /* 'x */, 7200 /* 'y */, 6825 /* 'z */, 6700 /* '{ */, 6700 /* '| */, 6700 /* '} */, 6700 /* '~ */}, + {8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* ( */, 8450 /* (! */, 8450 /* (" */, 8450 /* (# */, 8450 /* ($ */, 8450 /* (% */, 8450 /* (& */, 8450 /* (' */, 8450 /* (( */, 8450 /* () */, 8450 /* (* */, 8450 /* (+ */, 8450 /* (, */, 8450 /* (- */, 8450 /* (. */, 8450 /* (/ */, 8450 /* (0 */, 8450 /* (1 */, 8450 /* (2 */, 8450 /* (3 */, 8450 /* (4 */, 8450 /* (5 */, 8450 /* (6 */, 8450 /* (7 */, 8450 /* (8 */, 8450 /* (9 */, 8450 /* (: */, 8450 /* (; */, 8450 /* (< */, 8450 /* (= */, 8450 /* (> */, 8450 /* (? */, 8450 /* (@ */, 8450 /* (A */, 8450 /* (B */, 8450 /* (C */, 8450 /* (D */, 8450 /* (E */, 8450 /* (F */, 8450 /* (G */, 8450 /* (H */, 8450 /* (I */, 8450 /* (J */, 8450 /* (K */, 8450 /* (L */, 8450 /* (M */, 8450 /* (N */, 8450 /* (O */, 8450 /* (P */, 8450 /* (Q */, 8450 /* (R */, 8450 /* (S */, 8950 /* (T */, 8450 /* (U */, 8950 /* (V */, 8950 /* (W */, 8700 /* (X */, 8950 /* (Y */, 8450 /* (Z */, 8450 /* ([ */, 8450 /* (\ */, 8450 /* (] */, 8450 /* (^ */, 8450 /* (_ */, 8450 /* (` */, 8450 /* (a */, 8450 /* (b */, 8450 /* (c */, 8450 /* (d */, 8450 /* (e */, 8450 /* (f */, 8700 /* (g */, 8450 /* (h */, 8450 /* (i */, 10200 /* (j */, 8450 /* (k */, 8450 /* (l */, 8450 /* (m */, 8450 /* (n */, 8450 /* (o */, 8450 /* (p */, 8450 /* (q */, 8450 /* (r */, 8450 /* (s */, 8450 /* (t */, 8450 /* (u */, 8450 /* (v */, 8450 /* (w */, 8450 /* (x */, 8450 /* (y */, 8450 /* (z */, 8450 /* ({ */, 8450 /* (| */, 8450 /* (} */, 8450 /* (~ */}, + {8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* ) */, 8450 /* )! */, 8450 /* )" */, 8450 /* )# */, 8450 /* )$ */, 8450 /* )% */, 8450 /* )& */, 8450 /* )' */, 8450 /* )( */, 8450 /* )) */, 8450 /* )* */, 8450 /* )+ */, 8450 /* ), */, 8450 /* )- */, 8450 /* ). */, 8450 /* )/ */, 8450 /* )0 */, 8450 /* )1 */, 8450 /* )2 */, 8450 /* )3 */, 8450 /* )4 */, 8450 /* )5 */, 8450 /* )6 */, 8450 /* )7 */, 8450 /* )8 */, 8450 /* )9 */, 8450 /* ): */, 8450 /* ); */, 8450 /* )< */, 8450 /* )= */, 8450 /* )> */, 8450 /* )? */, 8450 /* )@ */, 8450 /* )A */, 8450 /* )B */, 8450 /* )C */, 8450 /* )D */, 8450 /* )E */, 8450 /* )F */, 8450 /* )G */, 8450 /* )H */, 8450 /* )I */, 8450 /* )J */, 8450 /* )K */, 8450 /* )L */, 8450 /* )M */, 8450 /* )N */, 8450 /* )O */, 8450 /* )P */, 8450 /* )Q */, 8450 /* )R */, 8450 /* )S */, 8450 /* )T */, 8450 /* )U */, 8450 /* )V */, 8450 /* )W */, 8450 /* )X */, 8450 /* )Y */, 8450 /* )Z */, 8450 /* )[ */, 8450 /* )\ */, 8450 /* )] */, 8450 /* )^ */, 8450 /* )_ */, 8450 /* )` */, 8450 /* )a */, 8450 /* )b */, 8450 /* )c */, 8450 /* )d */, 8450 /* )e */, 8450 /* )f */, 8450 /* )g */, 8450 /* )h */, 8450 /* )i */, 8450 /* )j */, 8450 /* )k */, 8450 /* )l */, 8450 /* )m */, 8450 /* )n */, 8450 /* )o */, 8450 /* )p */, 8450 /* )q */, 8450 /* )r */, 8450 /* )s */, 8450 /* )t */, 8450 /* )u */, 8450 /* )v */, 8450 /* )w */, 8450 /* )x */, 8450 /* )y */, 8450 /* )z */, 8450 /* ){ */, 8450 /* )| */, 8450 /* )} */, 8450 /* )~ */}, + {15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* * */, 15025 /* *! */, 15025 /* *" */, 15025 /* *# */, 15025 /* *$ */, 15025 /* *% */, 15025 /* *& */, 15025 /* *' */, 15025 /* *( */, 15025 /* *) */, 15025 /* ** */, 15025 /* *+ */, 12775 /* *, */, 15025 /* *- */, 12775 /* *. */, 15025 /* *\/ */, 15025 /* *0 */, 15025 /* *1 */, 15025 /* *2 */, 15025 /* *3 */, 15025 /* *4 */, 15025 /* *5 */, 15025 /* *6 */, 15025 /* *7 */, 15025 /* *8 */, 15025 /* *9 */, 15025 /* *: */, 15025 /* *; */, 15025 /* *< */, 15025 /* *= */, 15025 /* *> */, 15025 /* *? */, 15025 /* *@ */, 13775 /* *A */, 15025 /* *B */, 14775 /* *C */, 15025 /* *D */, 15025 /* *E */, 15025 /* *F */, 14775 /* *G */, 15025 /* *H */, 15025 /* *I */, 14025 /* *J */, 15025 /* *K */, 15025 /* *L */, 15025 /* *M */, 15025 /* *N */, 14775 /* *O */, 15025 /* *P */, 14775 /* *Q */, 15025 /* *R */, 15025 /* *S */, 15400 /* *T */, 15025 /* *U */, 15275 /* *V */, 15400 /* *W */, 15025 /* *X */, 15150 /* *Y */, 15025 /* *Z */, 15025 /* *[ */, 15025 /* *\ */, 15025 /* *] */, 15025 /* *^ */, 15025 /* *_ */, 15025 /* *` */, 15025 /* *a */, 15025 /* *b */, 14525 /* *c */, 14525 /* *d */, 14525 /* *e */, 15025 /* *f */, 15025 /* *g */, 15025 /* *h */, 15025 /* *i */, 15025 /* *j */, 15025 /* *k */, 15025 /* *l */, 15025 /* *m */, 15025 /* *n */, 14525 /* *o */, 15025 /* *p */, 14525 /* *q */, 15025 /* *r */, 15025 /* *s */, 15025 /* *t */, 15025 /* *u */, 15650 /* *v */, 15525 /* *w */, 15025 /* *x */, 15525 /* *y */, 15150 /* *z */, 15025 /* *{ */, 15025 /* *| */, 15025 /* *} */, 15025 /* *~ */}, + {15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* + */, 15000 /* +! */, 15000 /* +" */, 15000 /* +# */, 15000 /* +$ */, 15000 /* +% */, 15000 /* +& */, 15000 /* +' */, 15000 /* +( */, 15000 /* +) */, 15000 /* +* */, 15000 /* ++ */, 15000 /* +, */, 15000 /* +- */, 15000 /* +. */, 15000 /* +/ */, 15000 /* +0 */, 15000 /* +1 */, 15000 /* +2 */, 15000 /* +3 */, 15000 /* +4 */, 15000 /* +5 */, 15000 /* +6 */, 15000 /* +7 */, 15000 /* +8 */, 15000 /* +9 */, 15000 /* +: */, 15000 /* +; */, 15000 /* +< */, 15000 /* += */, 15000 /* +> */, 15000 /* +? */, 15000 /* +@ */, 15000 /* +A */, 15000 /* +B */, 15000 /* +C */, 15000 /* +D */, 15000 /* +E */, 15000 /* +F */, 15000 /* +G */, 15000 /* +H */, 15000 /* +I */, 15000 /* +J */, 15000 /* +K */, 15000 /* +L */, 15000 /* +M */, 15000 /* +N */, 15000 /* +O */, 15000 /* +P */, 15000 /* +Q */, 15000 /* +R */, 15000 /* +S */, 15000 /* +T */, 15000 /* +U */, 15000 /* +V */, 15000 /* +W */, 15000 /* +X */, 15000 /* +Y */, 15000 /* +Z */, 15000 /* +[ */, 15000 /* +\ */, 15000 /* +] */, 15000 /* +^ */, 15000 /* +_ */, 15000 /* +` */, 15000 /* +a */, 15000 /* +b */, 15000 /* +c */, 15000 /* +d */, 15000 /* +e */, 15000 /* +f */, 15000 /* +g */, 15000 /* +h */, 15000 /* +i */, 15000 /* +j */, 15000 /* +k */, 15000 /* +l */, 15000 /* +m */, 15000 /* +n */, 15000 /* +o */, 15000 /* +p */, 15000 /* +q */, 15000 /* +r */, 15000 /* +s */, 15000 /* +t */, 15000 /* +u */, 15000 /* +v */, 15000 /* +w */, 15000 /* +x */, 15000 /* +y */, 15000 /* +z */, 15000 /* +{ */, 15000 /* +| */, 15000 /* +} */, 15000 /* +~ */}, + {7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* , */, 7750 /* ,! */, 5500 /* ," */, 7750 /* ,# */, 7750 /* ,$ */, 7750 /* ,% */, 7750 /* ,& */, 5500 /* ,' */, 7750 /* ,( */, 7750 /* ,) */, 5500 /* ,* */, 7750 /* ,+ */, 7750 /* ,, */, 7750 /* ,- */, 7750 /* ,. */, 7750 /* ,/ */, 7750 /* ,0 */, 7750 /* ,1 */, 7750 /* ,2 */, 7750 /* ,3 */, 7750 /* ,4 */, 7750 /* ,5 */, 7750 /* ,6 */, 7750 /* ,7 */, 7750 /* ,8 */, 7750 /* ,9 */, 7750 /* ,: */, 7750 /* ,; */, 7750 /* ,< */, 7750 /* ,= */, 7750 /* ,> */, 5750 /* ,? */, 7750 /* ,@ */, 8250 /* ,A */, 7750 /* ,B */, 6750 /* ,C */, 7750 /* ,D */, 7750 /* ,E */, 7750 /* ,F */, 6750 /* ,G */, 7750 /* ,H */, 7750 /* ,I */, 7750 /* ,J */, 7750 /* ,K */, 7750 /* ,L */, 7750 /* ,M */, 7750 /* ,N */, 6750 /* ,O */, 7750 /* ,P */, 6750 /* ,Q */, 7750 /* ,R */, 7750 /* ,S */, 6000 /* ,T */, 6875 /* ,U */, 6250 /* ,V */, 6750 /* ,W */, 8000 /* ,X */, 6000 /* ,Y */, 8500 /* ,Z */, 7750 /* ,[ */, 7750 /* ,\ */, 7750 /* ,] */, 7750 /* ,^ */, 7750 /* ,_ */, 7750 /* ,` */, 7875 /* ,a */, 7750 /* ,b */, 7375 /* ,c */, 7375 /* ,d */, 7375 /* ,e */, 7375 /* ,f */, 7750 /* ,g */, 7750 /* ,h */, 7750 /* ,i */, 7750 /* ,j */, 7750 /* ,k */, 7750 /* ,l */, 7750 /* ,m */, 7750 /* ,n */, 7375 /* ,o */, 7750 /* ,p */, 7375 /* ,q */, 7750 /* ,r */, 7750 /* ,s */, 7150 /* ,t */, 7550 /* ,u */, 6550 /* ,v */, 6750 /* ,w */, 7750 /* ,x */, 6625 /* ,y */, 8000 /* ,z */, 7750 /* ,{ */, 7750 /* ,| */, 7750 /* ,} */, 7750 /* ,~ */}, + {10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* - */, 10075 /* -! */, 10075 /* -" */, 10075 /* -# */, 10075 /* -$ */, 10075 /* -% */, 10075 /* -& */, 10075 /* -' */, 10075 /* -( */, 10075 /* -) */, 10075 /* -* */, 10075 /* -+ */, 10075 /* -, */, 10075 /* -- */, 10075 /* -. */, 10075 /* -/ */, 10075 /* -0 */, 10075 /* -1 */, 10075 /* -2 */, 10075 /* -3 */, 10075 /* -4 */, 10075 /* -5 */, 10075 /* -6 */, 10075 /* -7 */, 10075 /* -8 */, 10075 /* -9 */, 10075 /* -: */, 10075 /* -; */, 10075 /* -< */, 10075 /* -= */, 10075 /* -> */, 10075 /* -? */, 10075 /* -@ */, 9700 /* -A */, 10075 /* -B */, 10450 /* -C */, 10075 /* -D */, 10075 /* -E */, 10075 /* -F */, 10450 /* -G */, 10075 /* -H */, 9325 /* -I */, 9450 /* -J */, 10075 /* -K */, 10075 /* -L */, 10075 /* -M */, 10075 /* -N */, 10450 /* -O */, 10075 /* -P */, 10450 /* -Q */, 10075 /* -R */, 9575 /* -S */, 8950 /* -T */, 10075 /* -U */, 9450 /* -V */, 9825 /* -W */, 9325 /* -X */, 8825 /* -Y */, 9325 /* -Z */, 10075 /* -[ */, 10075 /* -\ */, 10075 /* -] */, 10075 /* -^ */, 10075 /* -_ */, 10075 /* -` */, 10075 /* -a */, 10075 /* -b */, 10325 /* -c */, 10325 /* -d */, 10325 /* -e */, 10075 /* -f */, 10075 /* -g */, 10075 /* -h */, 10075 /* -i */, 10075 /* -j */, 10075 /* -k */, 10075 /* -l */, 10075 /* -m */, 10075 /* -n */, 10325 /* -o */, 10075 /* -p */, 10325 /* -q */, 10075 /* -r */, 10200 /* -s */, 10075 /* -t */, 10075 /* -u */, 9950 /* -v */, 9975 /* -w */, 9200 /* -x */, 9950 /* -y */, 9700 /* -z */, 10075 /* -{ */, 10075 /* -| */, 10075 /* -} */, 10075 /* -~ */}, + {7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* . */, 7750 /* .! */, 5500 /* ." */, 7750 /* .# */, 7750 /* .$ */, 7750 /* .% */, 7750 /* .& */, 5500 /* .' */, 7750 /* .( */, 7750 /* .) */, 5500 /* .* */, 7750 /* .+ */, 7750 /* ., */, 7750 /* .- */, 7750 /* .. */, 7750 /* ./ */, 7750 /* .0 */, 7750 /* .1 */, 7750 /* .2 */, 7750 /* .3 */, 7750 /* .4 */, 7750 /* .5 */, 7750 /* .6 */, 7750 /* .7 */, 7750 /* .8 */, 7750 /* .9 */, 7750 /* .: */, 7750 /* .; */, 7750 /* .< */, 7750 /* .= */, 7750 /* .> */, 5750 /* .? */, 7750 /* .@ */, 8250 /* .A */, 7750 /* .B */, 6750 /* .C */, 7750 /* .D */, 7750 /* .E */, 7750 /* .F */, 6750 /* .G */, 7750 /* .H */, 7750 /* .I */, 7750 /* .J */, 7750 /* .K */, 7750 /* .L */, 7750 /* .M */, 7750 /* .N */, 6750 /* .O */, 7750 /* .P */, 6750 /* .Q */, 7750 /* .R */, 7750 /* .S */, 6000 /* .T */, 6875 /* .U */, 6250 /* .V */, 6750 /* .W */, 8000 /* .X */, 6000 /* .Y */, 8500 /* .Z */, 7750 /* .[ */, 7750 /* .\ */, 7750 /* .] */, 7750 /* .^ */, 7750 /* ._ */, 7750 /* .` */, 7875 /* .a */, 7750 /* .b */, 7375 /* .c */, 7375 /* .d */, 7375 /* .e */, 7375 /* .f */, 7750 /* .g */, 7750 /* .h */, 7750 /* .i */, 7750 /* .j */, 7750 /* .k */, 7750 /* .l */, 7750 /* .m */, 7750 /* .n */, 7375 /* .o */, 7750 /* .p */, 7375 /* .q */, 7750 /* .r */, 7750 /* .s */, 7150 /* .t */, 7550 /* .u */, 6550 /* .v */, 6750 /* .w */, 7750 /* .x */, 6625 /* .y */, 8000 /* .z */, 7750 /* .{ */, 7750 /* .| */, 7750 /* .} */, 7750 /* .~ */}, + {11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* / */, 11500 /* /! */, 11500 /* /" */, 11500 /* /# */, 11500 /* /$ */, 11500 /* /% */, 11500 /* /& */, 11500 /* /' */, 11500 /* /( */, 11500 /* /) */, 11500 /* /\* */, 11500 /* /+ */, 11500 /* /, */, 11500 /* /- */, 11500 /* /. */, 6750 /* // */, 11500 /* /0 */, 11500 /* /1 */, 11500 /* /2 */, 11500 /* /3 */, 11500 /* /4 */, 11500 /* /5 */, 11500 /* /6 */, 11500 /* /7 */, 11500 /* /8 */, 11500 /* /9 */, 11500 /* /: */, 11500 /* /; */, 11500 /* /< */, 11500 /* /= */, 11500 /* /> */, 11500 /* /? */, 11500 /* /@ */, 10375 /* /A */, 11500 /* /B */, 10950 /* /C */, 11500 /* /D */, 11500 /* /E */, 11500 /* /F */, 10950 /* /G */, 11500 /* /H */, 11500 /* /I */, 11500 /* /J */, 11500 /* /K */, 11500 /* /L */, 11500 /* /M */, 11500 /* /N */, 10950 /* /O */, 11500 /* /P */, 10950 /* /Q */, 11500 /* /R */, 11000 /* /S */, 12000 /* /T */, 11500 /* /U */, 11750 /* /V */, 11625 /* /W */, 11500 /* /X */, 11750 /* /Y */, 11500 /* /Z */, 11500 /* /[ */, 11500 /* /\ */, 11500 /* /] */, 11500 /* /^ */, 11500 /* /_ */, 11500 /* /` */, 10500 /* /a */, 11500 /* /b */, 10625 /* /c */, 10625 /* /d */, 10625 /* /e */, 11500 /* /f */, 10875 /* /g */, 11500 /* /h */, 11500 /* /i */, 11500 /* /j */, 11500 /* /k */, 11500 /* /l */, 11250 /* /m */, 11250 /* /n */, 10625 /* /o */, 11500 /* /p */, 10625 /* /q */, 11250 /* /r */, 11500 /* /s */, 11500 /* /t */, 11500 /* /u */, 11500 /* /v */, 11500 /* /w */, 11500 /* /x */, 11500 /* /y */, 11500 /* /z */, 11500 /* /{ */, 11500 /* /| */, 11500 /* /} */, 11500 /* /~ */}, + {15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0 */, 15000 /* 0! */, 15000 /* 0" */, 15000 /* 0# */, 15000 /* 0$ */, 15000 /* 0% */, 15000 /* 0& */, 15000 /* 0' */, 15000 /* 0( */, 15000 /* 0) */, 15000 /* 0* */, 15000 /* 0+ */, 15000 /* 0, */, 15000 /* 0- */, 15000 /* 0. */, 15000 /* 0/ */, 15000 /* 00 */, 15000 /* 01 */, 15000 /* 02 */, 15000 /* 03 */, 15000 /* 04 */, 15000 /* 05 */, 15000 /* 06 */, 15000 /* 07 */, 15000 /* 08 */, 15000 /* 09 */, 15000 /* 0: */, 15000 /* 0; */, 15000 /* 0< */, 15000 /* 0= */, 15000 /* 0> */, 15000 /* 0? */, 15000 /* 0@ */, 15000 /* 0A */, 15000 /* 0B */, 15000 /* 0C */, 15000 /* 0D */, 15000 /* 0E */, 15000 /* 0F */, 15000 /* 0G */, 15000 /* 0H */, 15000 /* 0I */, 15000 /* 0J */, 15000 /* 0K */, 15000 /* 0L */, 15000 /* 0M */, 15000 /* 0N */, 15000 /* 0O */, 15000 /* 0P */, 15000 /* 0Q */, 15000 /* 0R */, 15000 /* 0S */, 15000 /* 0T */, 15000 /* 0U */, 15000 /* 0V */, 15000 /* 0W */, 15000 /* 0X */, 15000 /* 0Y */, 15000 /* 0Z */, 15000 /* 0[ */, 15000 /* 0\ */, 15000 /* 0] */, 15000 /* 0^ */, 15000 /* 0_ */, 15000 /* 0` */, 15000 /* 0a */, 15000 /* 0b */, 15000 /* 0c */, 15000 /* 0d */, 15000 /* 0e */, 15000 /* 0f */, 15000 /* 0g */, 15000 /* 0h */, 15000 /* 0i */, 15000 /* 0j */, 15000 /* 0k */, 15000 /* 0l */, 15000 /* 0m */, 15000 /* 0n */, 15000 /* 0o */, 15000 /* 0p */, 15000 /* 0q */, 15000 /* 0r */, 15000 /* 0s */, 15000 /* 0t */, 15000 /* 0u */, 15000 /* 0v */, 15000 /* 0w */, 15000 /* 0x */, 15000 /* 0y */, 15000 /* 0z */, 15000 /* 0{ */, 15000 /* 0| */, 15000 /* 0} */, 15000 /* 0~ */}, + {15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1 */, 15000 /* 1! */, 15000 /* 1" */, 15000 /* 1# */, 15000 /* 1$ */, 15000 /* 1% */, 15000 /* 1& */, 15000 /* 1' */, 15000 /* 1( */, 15000 /* 1) */, 15000 /* 1* */, 15000 /* 1+ */, 15000 /* 1, */, 15000 /* 1- */, 15000 /* 1. */, 15000 /* 1/ */, 15000 /* 10 */, 15000 /* 11 */, 15000 /* 12 */, 15000 /* 13 */, 15000 /* 14 */, 15000 /* 15 */, 15000 /* 16 */, 15000 /* 17 */, 15000 /* 18 */, 15000 /* 19 */, 15000 /* 1: */, 15000 /* 1; */, 15000 /* 1< */, 15000 /* 1= */, 15000 /* 1> */, 15000 /* 1? */, 15000 /* 1@ */, 15000 /* 1A */, 15000 /* 1B */, 15000 /* 1C */, 15000 /* 1D */, 15000 /* 1E */, 15000 /* 1F */, 15000 /* 1G */, 15000 /* 1H */, 15000 /* 1I */, 15000 /* 1J */, 15000 /* 1K */, 15000 /* 1L */, 15000 /* 1M */, 15000 /* 1N */, 15000 /* 1O */, 15000 /* 1P */, 15000 /* 1Q */, 15000 /* 1R */, 15000 /* 1S */, 15000 /* 1T */, 15000 /* 1U */, 15000 /* 1V */, 15000 /* 1W */, 15000 /* 1X */, 15000 /* 1Y */, 15000 /* 1Z */, 15000 /* 1[ */, 15000 /* 1\ */, 15000 /* 1] */, 15000 /* 1^ */, 15000 /* 1_ */, 15000 /* 1` */, 15000 /* 1a */, 15000 /* 1b */, 15000 /* 1c */, 15000 /* 1d */, 15000 /* 1e */, 15000 /* 1f */, 15000 /* 1g */, 15000 /* 1h */, 15000 /* 1i */, 15000 /* 1j */, 15000 /* 1k */, 15000 /* 1l */, 15000 /* 1m */, 15000 /* 1n */, 15000 /* 1o */, 15000 /* 1p */, 15000 /* 1q */, 15000 /* 1r */, 15000 /* 1s */, 15000 /* 1t */, 15000 /* 1u */, 15000 /* 1v */, 15000 /* 1w */, 15000 /* 1x */, 15000 /* 1y */, 15000 /* 1z */, 15000 /* 1{ */, 15000 /* 1| */, 15000 /* 1} */, 15000 /* 1~ */}, + {15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2 */, 15000 /* 2! */, 15000 /* 2" */, 15000 /* 2# */, 15000 /* 2$ */, 15000 /* 2% */, 15000 /* 2& */, 15000 /* 2' */, 15000 /* 2( */, 15000 /* 2) */, 15000 /* 2* */, 15000 /* 2+ */, 15000 /* 2, */, 15000 /* 2- */, 15000 /* 2. */, 15000 /* 2/ */, 15000 /* 20 */, 15000 /* 21 */, 15000 /* 22 */, 15000 /* 23 */, 15000 /* 24 */, 15000 /* 25 */, 15000 /* 26 */, 15000 /* 27 */, 15000 /* 28 */, 15000 /* 29 */, 15000 /* 2: */, 15000 /* 2; */, 15000 /* 2< */, 15000 /* 2= */, 15000 /* 2> */, 15000 /* 2? */, 15000 /* 2@ */, 15000 /* 2A */, 15000 /* 2B */, 15000 /* 2C */, 15000 /* 2D */, 15000 /* 2E */, 15000 /* 2F */, 15000 /* 2G */, 15000 /* 2H */, 15000 /* 2I */, 15000 /* 2J */, 15000 /* 2K */, 15000 /* 2L */, 15000 /* 2M */, 15000 /* 2N */, 15000 /* 2O */, 15000 /* 2P */, 15000 /* 2Q */, 15000 /* 2R */, 15000 /* 2S */, 15000 /* 2T */, 15000 /* 2U */, 15000 /* 2V */, 15000 /* 2W */, 15000 /* 2X */, 15000 /* 2Y */, 15000 /* 2Z */, 15000 /* 2[ */, 15000 /* 2\ */, 15000 /* 2] */, 15000 /* 2^ */, 15000 /* 2_ */, 15000 /* 2` */, 15000 /* 2a */, 15000 /* 2b */, 15000 /* 2c */, 15000 /* 2d */, 15000 /* 2e */, 15000 /* 2f */, 15000 /* 2g */, 15000 /* 2h */, 15000 /* 2i */, 15000 /* 2j */, 15000 /* 2k */, 15000 /* 2l */, 15000 /* 2m */, 15000 /* 2n */, 15000 /* 2o */, 15000 /* 2p */, 15000 /* 2q */, 15000 /* 2r */, 15000 /* 2s */, 15000 /* 2t */, 15000 /* 2u */, 15000 /* 2v */, 15000 /* 2w */, 15000 /* 2x */, 15000 /* 2y */, 15000 /* 2z */, 15000 /* 2{ */, 15000 /* 2| */, 15000 /* 2} */, 15000 /* 2~ */}, + {15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3 */, 15000 /* 3! */, 15000 /* 3" */, 15000 /* 3# */, 15000 /* 3$ */, 15000 /* 3% */, 15000 /* 3& */, 15000 /* 3' */, 15000 /* 3( */, 15000 /* 3) */, 15000 /* 3* */, 15000 /* 3+ */, 15000 /* 3, */, 15000 /* 3- */, 15000 /* 3. */, 15000 /* 3/ */, 15000 /* 30 */, 15000 /* 31 */, 15000 /* 32 */, 15000 /* 33 */, 15000 /* 34 */, 15000 /* 35 */, 15000 /* 36 */, 15000 /* 37 */, 15000 /* 38 */, 15000 /* 39 */, 15000 /* 3: */, 15000 /* 3; */, 15000 /* 3< */, 15000 /* 3= */, 15000 /* 3> */, 15000 /* 3? */, 15000 /* 3@ */, 15000 /* 3A */, 15000 /* 3B */, 15000 /* 3C */, 15000 /* 3D */, 15000 /* 3E */, 15000 /* 3F */, 15000 /* 3G */, 15000 /* 3H */, 15000 /* 3I */, 15000 /* 3J */, 15000 /* 3K */, 15000 /* 3L */, 15000 /* 3M */, 15000 /* 3N */, 15000 /* 3O */, 15000 /* 3P */, 15000 /* 3Q */, 15000 /* 3R */, 15000 /* 3S */, 15000 /* 3T */, 15000 /* 3U */, 15000 /* 3V */, 15000 /* 3W */, 15000 /* 3X */, 15000 /* 3Y */, 15000 /* 3Z */, 15000 /* 3[ */, 15000 /* 3\ */, 15000 /* 3] */, 15000 /* 3^ */, 15000 /* 3_ */, 15000 /* 3` */, 15000 /* 3a */, 15000 /* 3b */, 15000 /* 3c */, 15000 /* 3d */, 15000 /* 3e */, 15000 /* 3f */, 15000 /* 3g */, 15000 /* 3h */, 15000 /* 3i */, 15000 /* 3j */, 15000 /* 3k */, 15000 /* 3l */, 15000 /* 3m */, 15000 /* 3n */, 15000 /* 3o */, 15000 /* 3p */, 15000 /* 3q */, 15000 /* 3r */, 15000 /* 3s */, 15000 /* 3t */, 15000 /* 3u */, 15000 /* 3v */, 15000 /* 3w */, 15000 /* 3x */, 15000 /* 3y */, 15000 /* 3z */, 15000 /* 3{ */, 15000 /* 3| */, 15000 /* 3} */, 15000 /* 3~ */}, + {15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4 */, 15000 /* 4! */, 15000 /* 4" */, 15000 /* 4# */, 15000 /* 4$ */, 15000 /* 4% */, 15000 /* 4& */, 15000 /* 4' */, 15000 /* 4( */, 15000 /* 4) */, 15000 /* 4* */, 15000 /* 4+ */, 15000 /* 4, */, 15000 /* 4- */, 15000 /* 4. */, 15000 /* 4/ */, 15000 /* 40 */, 15000 /* 41 */, 15000 /* 42 */, 15000 /* 43 */, 15000 /* 44 */, 15000 /* 45 */, 15000 /* 46 */, 15000 /* 47 */, 15000 /* 48 */, 15000 /* 49 */, 15000 /* 4: */, 15000 /* 4; */, 15000 /* 4< */, 15000 /* 4= */, 15000 /* 4> */, 15000 /* 4? */, 15000 /* 4@ */, 15000 /* 4A */, 15000 /* 4B */, 15000 /* 4C */, 15000 /* 4D */, 15000 /* 4E */, 15000 /* 4F */, 15000 /* 4G */, 15000 /* 4H */, 15000 /* 4I */, 15000 /* 4J */, 15000 /* 4K */, 15000 /* 4L */, 15000 /* 4M */, 15000 /* 4N */, 15000 /* 4O */, 15000 /* 4P */, 15000 /* 4Q */, 15000 /* 4R */, 15000 /* 4S */, 15000 /* 4T */, 15000 /* 4U */, 15000 /* 4V */, 15000 /* 4W */, 15000 /* 4X */, 15000 /* 4Y */, 15000 /* 4Z */, 15000 /* 4[ */, 15000 /* 4\ */, 15000 /* 4] */, 15000 /* 4^ */, 15000 /* 4_ */, 15000 /* 4` */, 15000 /* 4a */, 15000 /* 4b */, 15000 /* 4c */, 15000 /* 4d */, 15000 /* 4e */, 15000 /* 4f */, 15000 /* 4g */, 15000 /* 4h */, 15000 /* 4i */, 15000 /* 4j */, 15000 /* 4k */, 15000 /* 4l */, 15000 /* 4m */, 15000 /* 4n */, 15000 /* 4o */, 15000 /* 4p */, 15000 /* 4q */, 15000 /* 4r */, 15000 /* 4s */, 15000 /* 4t */, 15000 /* 4u */, 15000 /* 4v */, 15000 /* 4w */, 15000 /* 4x */, 15000 /* 4y */, 15000 /* 4z */, 15000 /* 4{ */, 15000 /* 4| */, 15000 /* 4} */, 15000 /* 4~ */}, + {15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5 */, 15000 /* 5! */, 15000 /* 5" */, 15000 /* 5# */, 15000 /* 5$ */, 15000 /* 5% */, 15000 /* 5& */, 15000 /* 5' */, 15000 /* 5( */, 15000 /* 5) */, 15000 /* 5* */, 15000 /* 5+ */, 15000 /* 5, */, 15000 /* 5- */, 15000 /* 5. */, 15000 /* 5/ */, 15000 /* 50 */, 15000 /* 51 */, 15000 /* 52 */, 15000 /* 53 */, 15000 /* 54 */, 15000 /* 55 */, 15000 /* 56 */, 15000 /* 57 */, 15000 /* 58 */, 15000 /* 59 */, 15000 /* 5: */, 15000 /* 5; */, 15000 /* 5< */, 15000 /* 5= */, 15000 /* 5> */, 15000 /* 5? */, 15000 /* 5@ */, 15000 /* 5A */, 15000 /* 5B */, 15000 /* 5C */, 15000 /* 5D */, 15000 /* 5E */, 15000 /* 5F */, 15000 /* 5G */, 15000 /* 5H */, 15000 /* 5I */, 15000 /* 5J */, 15000 /* 5K */, 15000 /* 5L */, 15000 /* 5M */, 15000 /* 5N */, 15000 /* 5O */, 15000 /* 5P */, 15000 /* 5Q */, 15000 /* 5R */, 15000 /* 5S */, 15000 /* 5T */, 15000 /* 5U */, 15000 /* 5V */, 15000 /* 5W */, 15000 /* 5X */, 15000 /* 5Y */, 15000 /* 5Z */, 15000 /* 5[ */, 15000 /* 5\ */, 15000 /* 5] */, 15000 /* 5^ */, 15000 /* 5_ */, 15000 /* 5` */, 15000 /* 5a */, 15000 /* 5b */, 15000 /* 5c */, 15000 /* 5d */, 15000 /* 5e */, 15000 /* 5f */, 15000 /* 5g */, 15000 /* 5h */, 15000 /* 5i */, 15000 /* 5j */, 15000 /* 5k */, 15000 /* 5l */, 15000 /* 5m */, 15000 /* 5n */, 15000 /* 5o */, 15000 /* 5p */, 15000 /* 5q */, 15000 /* 5r */, 15000 /* 5s */, 15000 /* 5t */, 15000 /* 5u */, 15000 /* 5v */, 15000 /* 5w */, 15000 /* 5x */, 15000 /* 5y */, 15000 /* 5z */, 15000 /* 5{ */, 15000 /* 5| */, 15000 /* 5} */, 15000 /* 5~ */}, + {15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6 */, 15000 /* 6! */, 15000 /* 6" */, 15000 /* 6# */, 15000 /* 6$ */, 15000 /* 6% */, 15000 /* 6& */, 15000 /* 6' */, 15000 /* 6( */, 15000 /* 6) */, 15000 /* 6* */, 15000 /* 6+ */, 15000 /* 6, */, 15000 /* 6- */, 15000 /* 6. */, 15000 /* 6/ */, 15000 /* 60 */, 15000 /* 61 */, 15000 /* 62 */, 15000 /* 63 */, 15000 /* 64 */, 15000 /* 65 */, 15000 /* 66 */, 15000 /* 67 */, 15000 /* 68 */, 15000 /* 69 */, 15000 /* 6: */, 15000 /* 6; */, 15000 /* 6< */, 15000 /* 6= */, 15000 /* 6> */, 15000 /* 6? */, 15000 /* 6@ */, 15000 /* 6A */, 15000 /* 6B */, 15000 /* 6C */, 15000 /* 6D */, 15000 /* 6E */, 15000 /* 6F */, 15000 /* 6G */, 15000 /* 6H */, 15000 /* 6I */, 15000 /* 6J */, 15000 /* 6K */, 15000 /* 6L */, 15000 /* 6M */, 15000 /* 6N */, 15000 /* 6O */, 15000 /* 6P */, 15000 /* 6Q */, 15000 /* 6R */, 15000 /* 6S */, 15000 /* 6T */, 15000 /* 6U */, 15000 /* 6V */, 15000 /* 6W */, 15000 /* 6X */, 15000 /* 6Y */, 15000 /* 6Z */, 15000 /* 6[ */, 15000 /* 6\ */, 15000 /* 6] */, 15000 /* 6^ */, 15000 /* 6_ */, 15000 /* 6` */, 15000 /* 6a */, 15000 /* 6b */, 15000 /* 6c */, 15000 /* 6d */, 15000 /* 6e */, 15000 /* 6f */, 15000 /* 6g */, 15000 /* 6h */, 15000 /* 6i */, 15000 /* 6j */, 15000 /* 6k */, 15000 /* 6l */, 15000 /* 6m */, 15000 /* 6n */, 15000 /* 6o */, 15000 /* 6p */, 15000 /* 6q */, 15000 /* 6r */, 15000 /* 6s */, 15000 /* 6t */, 15000 /* 6u */, 15000 /* 6v */, 15000 /* 6w */, 15000 /* 6x */, 15000 /* 6y */, 15000 /* 6z */, 15000 /* 6{ */, 15000 /* 6| */, 15000 /* 6} */, 15000 /* 6~ */}, + {15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7 */, 15000 /* 7! */, 15000 /* 7" */, 15000 /* 7# */, 15000 /* 7$ */, 15000 /* 7% */, 15000 /* 7& */, 15000 /* 7' */, 15000 /* 7( */, 15000 /* 7) */, 15000 /* 7* */, 15000 /* 7+ */, 15000 /* 7, */, 15000 /* 7- */, 15000 /* 7. */, 15000 /* 7/ */, 15000 /* 70 */, 15000 /* 71 */, 15000 /* 72 */, 15000 /* 73 */, 15000 /* 74 */, 15000 /* 75 */, 15000 /* 76 */, 15000 /* 77 */, 15000 /* 78 */, 15000 /* 79 */, 15000 /* 7: */, 15000 /* 7; */, 15000 /* 7< */, 15000 /* 7= */, 15000 /* 7> */, 15000 /* 7? */, 15000 /* 7@ */, 15000 /* 7A */, 15000 /* 7B */, 15000 /* 7C */, 15000 /* 7D */, 15000 /* 7E */, 15000 /* 7F */, 15000 /* 7G */, 15000 /* 7H */, 15000 /* 7I */, 15000 /* 7J */, 15000 /* 7K */, 15000 /* 7L */, 15000 /* 7M */, 15000 /* 7N */, 15000 /* 7O */, 15000 /* 7P */, 15000 /* 7Q */, 15000 /* 7R */, 15000 /* 7S */, 15000 /* 7T */, 15000 /* 7U */, 15000 /* 7V */, 15000 /* 7W */, 15000 /* 7X */, 15000 /* 7Y */, 15000 /* 7Z */, 15000 /* 7[ */, 15000 /* 7\ */, 15000 /* 7] */, 15000 /* 7^ */, 15000 /* 7_ */, 15000 /* 7` */, 15000 /* 7a */, 15000 /* 7b */, 15000 /* 7c */, 15000 /* 7d */, 15000 /* 7e */, 15000 /* 7f */, 15000 /* 7g */, 15000 /* 7h */, 15000 /* 7i */, 15000 /* 7j */, 15000 /* 7k */, 15000 /* 7l */, 15000 /* 7m */, 15000 /* 7n */, 15000 /* 7o */, 15000 /* 7p */, 15000 /* 7q */, 15000 /* 7r */, 15000 /* 7s */, 15000 /* 7t */, 15000 /* 7u */, 15000 /* 7v */, 15000 /* 7w */, 15000 /* 7x */, 15000 /* 7y */, 15000 /* 7z */, 15000 /* 7{ */, 15000 /* 7| */, 15000 /* 7} */, 15000 /* 7~ */}, + {15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8 */, 15000 /* 8! */, 15000 /* 8" */, 15000 /* 8# */, 15000 /* 8$ */, 15000 /* 8% */, 15000 /* 8& */, 15000 /* 8' */, 15000 /* 8( */, 15000 /* 8) */, 15000 /* 8* */, 15000 /* 8+ */, 15000 /* 8, */, 15000 /* 8- */, 15000 /* 8. */, 15000 /* 8/ */, 15000 /* 80 */, 15000 /* 81 */, 15000 /* 82 */, 15000 /* 83 */, 15000 /* 84 */, 15000 /* 85 */, 15000 /* 86 */, 15000 /* 87 */, 15000 /* 88 */, 15000 /* 89 */, 15000 /* 8: */, 15000 /* 8; */, 15000 /* 8< */, 15000 /* 8= */, 15000 /* 8> */, 15000 /* 8? */, 15000 /* 8@ */, 15000 /* 8A */, 15000 /* 8B */, 15000 /* 8C */, 15000 /* 8D */, 15000 /* 8E */, 15000 /* 8F */, 15000 /* 8G */, 15000 /* 8H */, 15000 /* 8I */, 15000 /* 8J */, 15000 /* 8K */, 15000 /* 8L */, 15000 /* 8M */, 15000 /* 8N */, 15000 /* 8O */, 15000 /* 8P */, 15000 /* 8Q */, 15000 /* 8R */, 15000 /* 8S */, 15000 /* 8T */, 15000 /* 8U */, 15000 /* 8V */, 15000 /* 8W */, 15000 /* 8X */, 15000 /* 8Y */, 15000 /* 8Z */, 15000 /* 8[ */, 15000 /* 8\ */, 15000 /* 8] */, 15000 /* 8^ */, 15000 /* 8_ */, 15000 /* 8` */, 15000 /* 8a */, 15000 /* 8b */, 15000 /* 8c */, 15000 /* 8d */, 15000 /* 8e */, 15000 /* 8f */, 15000 /* 8g */, 15000 /* 8h */, 15000 /* 8i */, 15000 /* 8j */, 15000 /* 8k */, 15000 /* 8l */, 15000 /* 8m */, 15000 /* 8n */, 15000 /* 8o */, 15000 /* 8p */, 15000 /* 8q */, 15000 /* 8r */, 15000 /* 8s */, 15000 /* 8t */, 15000 /* 8u */, 15000 /* 8v */, 15000 /* 8w */, 15000 /* 8x */, 15000 /* 8y */, 15000 /* 8z */, 15000 /* 8{ */, 15000 /* 8| */, 15000 /* 8} */, 15000 /* 8~ */}, + {15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9 */, 15000 /* 9! */, 15000 /* 9" */, 15000 /* 9# */, 15000 /* 9$ */, 15000 /* 9% */, 15000 /* 9& */, 15000 /* 9' */, 15000 /* 9( */, 15000 /* 9) */, 15000 /* 9* */, 15000 /* 9+ */, 15000 /* 9, */, 15000 /* 9- */, 15000 /* 9. */, 15000 /* 9/ */, 15000 /* 90 */, 15000 /* 91 */, 15000 /* 92 */, 15000 /* 93 */, 15000 /* 94 */, 15000 /* 95 */, 15000 /* 96 */, 15000 /* 97 */, 15000 /* 98 */, 15000 /* 99 */, 15000 /* 9: */, 15000 /* 9; */, 15000 /* 9< */, 15000 /* 9= */, 15000 /* 9> */, 15000 /* 9? */, 15000 /* 9@ */, 15000 /* 9A */, 15000 /* 9B */, 15000 /* 9C */, 15000 /* 9D */, 15000 /* 9E */, 15000 /* 9F */, 15000 /* 9G */, 15000 /* 9H */, 15000 /* 9I */, 15000 /* 9J */, 15000 /* 9K */, 15000 /* 9L */, 15000 /* 9M */, 15000 /* 9N */, 15000 /* 9O */, 15000 /* 9P */, 15000 /* 9Q */, 15000 /* 9R */, 15000 /* 9S */, 15000 /* 9T */, 15000 /* 9U */, 15000 /* 9V */, 15000 /* 9W */, 15000 /* 9X */, 15000 /* 9Y */, 15000 /* 9Z */, 15000 /* 9[ */, 15000 /* 9\ */, 15000 /* 9] */, 15000 /* 9^ */, 15000 /* 9_ */, 15000 /* 9` */, 15000 /* 9a */, 15000 /* 9b */, 15000 /* 9c */, 15000 /* 9d */, 15000 /* 9e */, 15000 /* 9f */, 15000 /* 9g */, 15000 /* 9h */, 15000 /* 9i */, 15000 /* 9j */, 15000 /* 9k */, 15000 /* 9l */, 15000 /* 9m */, 15000 /* 9n */, 15000 /* 9o */, 15000 /* 9p */, 15000 /* 9q */, 15000 /* 9r */, 15000 /* 9s */, 15000 /* 9t */, 15000 /* 9u */, 15000 /* 9v */, 15000 /* 9w */, 15000 /* 9x */, 15000 /* 9y */, 15000 /* 9z */, 15000 /* 9{ */, 15000 /* 9| */, 15000 /* 9} */, 15000 /* 9~ */}, + {8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* : */, 8250 /* :! */, 8250 /* :" */, 8250 /* :# */, 8250 /* :$ */, 8250 /* :% */, 8250 /* :& */, 8250 /* :' */, 8250 /* :( */, 8250 /* :) */, 8250 /* :* */, 8250 /* :+ */, 8250 /* :, */, 8250 /* :- */, 8250 /* :. */, 8250 /* :/ */, 8250 /* :0 */, 8250 /* :1 */, 8250 /* :2 */, 8250 /* :3 */, 8250 /* :4 */, 8250 /* :5 */, 8250 /* :6 */, 8250 /* :7 */, 8250 /* :8 */, 8250 /* :9 */, 8250 /* :: */, 8250 /* :; */, 8250 /* :< */, 8250 /* := */, 8250 /* :> */, 8250 /* :? */, 8250 /* :@ */, 8250 /* :A */, 8250 /* :B */, 8250 /* :C */, 8250 /* :D */, 8250 /* :E */, 8250 /* :F */, 8250 /* :G */, 8250 /* :H */, 8250 /* :I */, 8250 /* :J */, 8250 /* :K */, 8250 /* :L */, 8250 /* :M */, 8250 /* :N */, 8250 /* :O */, 8250 /* :P */, 8250 /* :Q */, 8250 /* :R */, 8250 /* :S */, 7250 /* :T */, 8250 /* :U */, 7500 /* :V */, 8250 /* :W */, 7875 /* :X */, 7000 /* :Y */, 8250 /* :Z */, 8250 /* :[ */, 8250 /* :\ */, 8250 /* :] */, 8250 /* :^ */, 8250 /* :_ */, 8250 /* :` */, 8250 /* :a */, 8250 /* :b */, 8250 /* :c */, 8250 /* :d */, 8250 /* :e */, 8250 /* :f */, 8250 /* :g */, 8250 /* :h */, 8250 /* :i */, 8250 /* :j */, 8250 /* :k */, 8250 /* :l */, 8250 /* :m */, 8250 /* :n */, 8250 /* :o */, 8250 /* :p */, 8250 /* :q */, 8250 /* :r */, 8250 /* :s */, 8250 /* :t */, 8250 /* :u */, 8250 /* :v */, 8250 /* :w */, 8250 /* :x */, 8250 /* :y */, 8250 /* :z */, 8250 /* :{ */, 8250 /* :| */, 8250 /* :} */, 8250 /* :~ */}, + {8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ; */, 8250 /* ;! */, 8250 /* ;" */, 8250 /* ;# */, 8250 /* ;$ */, 8250 /* ;% */, 8250 /* ;& */, 8250 /* ;' */, 8250 /* ;( */, 8250 /* ;) */, 8250 /* ;* */, 8250 /* ;+ */, 8250 /* ;, */, 8250 /* ;- */, 8250 /* ;. */, 8250 /* ;/ */, 8250 /* ;0 */, 8250 /* ;1 */, 8250 /* ;2 */, 8250 /* ;3 */, 8250 /* ;4 */, 8250 /* ;5 */, 8250 /* ;6 */, 8250 /* ;7 */, 8250 /* ;8 */, 8250 /* ;9 */, 8250 /* ;: */, 8250 /* ;; */, 8250 /* ;< */, 8250 /* ;= */, 8250 /* ;> */, 8250 /* ;? */, 8250 /* ;@ */, 8250 /* ;A */, 8250 /* ;B */, 8250 /* ;C */, 8250 /* ;D */, 8250 /* ;E */, 8250 /* ;F */, 8250 /* ;G */, 8250 /* ;H */, 8250 /* ;I */, 8250 /* ;J */, 8250 /* ;K */, 8250 /* ;L */, 8250 /* ;M */, 8250 /* ;N */, 8250 /* ;O */, 8250 /* ;P */, 8250 /* ;Q */, 8250 /* ;R */, 8250 /* ;S */, 7250 /* ;T */, 8250 /* ;U */, 7500 /* ;V */, 8250 /* ;W */, 7875 /* ;X */, 7000 /* ;Y */, 8250 /* ;Z */, 8250 /* ;[ */, 8250 /* ;\ */, 8250 /* ;] */, 8250 /* ;^ */, 8250 /* ;_ */, 8250 /* ;` */, 8250 /* ;a */, 8250 /* ;b */, 8250 /* ;c */, 8250 /* ;d */, 8250 /* ;e */, 8250 /* ;f */, 8250 /* ;g */, 8250 /* ;h */, 8250 /* ;i */, 8250 /* ;j */, 8250 /* ;k */, 8250 /* ;l */, 8250 /* ;m */, 8250 /* ;n */, 8250 /* ;o */, 8250 /* ;p */, 8250 /* ;q */, 8250 /* ;r */, 8250 /* ;s */, 8250 /* ;t */, 8250 /* ;u */, 8250 /* ;v */, 8250 /* ;w */, 8250 /* ;x */, 8250 /* ;y */, 8250 /* ;z */, 8250 /* ;{ */, 8250 /* ;| */, 8250 /* ;} */, 8250 /* ;~ */}, + {15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* < */, 15000 /* */, 15000 /* */, 15000 /* =? */, 15000 /* =@ */, 15000 /* =A */, 15000 /* =B */, 15000 /* =C */, 15000 /* =D */, 15000 /* =E */, 15000 /* =F */, 15000 /* =G */, 15000 /* =H */, 15000 /* =I */, 15000 /* =J */, 15000 /* =K */, 15000 /* =L */, 15000 /* =M */, 15000 /* =N */, 15000 /* =O */, 15000 /* =P */, 15000 /* =Q */, 15000 /* =R */, 15000 /* =S */, 15000 /* =T */, 15000 /* =U */, 15000 /* =V */, 15000 /* =W */, 15000 /* =X */, 15000 /* =Y */, 15000 /* =Z */, 15000 /* =[ */, 15000 /* =\ */, 15000 /* =] */, 15000 /* =^ */, 15000 /* =_ */, 15000 /* =` */, 15000 /* =a */, 15000 /* =b */, 15000 /* =c */, 15000 /* =d */, 15000 /* =e */, 15000 /* =f */, 15000 /* =g */, 15000 /* =h */, 15000 /* =i */, 15000 /* =j */, 15000 /* =k */, 15000 /* =l */, 15000 /* =m */, 15000 /* =n */, 15000 /* =o */, 15000 /* =p */, 15000 /* =q */, 15000 /* =r */, 15000 /* =s */, 15000 /* =t */, 15000 /* =u */, 15000 /* =v */, 15000 /* =w */, 15000 /* =x */, 15000 /* =y */, 15000 /* =z */, 15000 /* ={ */, 15000 /* =| */, 15000 /* =} */, 15000 /* =~ */}, + {15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* > */, 15000 /* >! */, 15000 /* >" */, 15000 /* ># */, 15000 /* >$ */, 15000 /* >% */, 15000 /* >& */, 15000 /* >' */, 15000 /* >( */, 15000 /* >) */, 15000 /* >* */, 15000 /* >+ */, 15000 /* >, */, 15000 /* >- */, 15000 /* >. */, 15000 /* >/ */, 15000 /* >0 */, 15000 /* >1 */, 15000 /* >2 */, 15000 /* >3 */, 15000 /* >4 */, 15000 /* >5 */, 15000 /* >6 */, 15000 /* >7 */, 15000 /* >8 */, 15000 /* >9 */, 15000 /* >: */, 15000 /* >; */, 15000 /* >< */, 15000 /* >= */, 15000 /* >> */, 15000 /* >? */, 15000 /* >@ */, 15000 /* >A */, 15000 /* >B */, 15000 /* >C */, 15000 /* >D */, 15000 /* >E */, 15000 /* >F */, 15000 /* >G */, 15000 /* >H */, 15000 /* >I */, 15000 /* >J */, 15000 /* >K */, 15000 /* >L */, 15000 /* >M */, 15000 /* >N */, 15000 /* >O */, 15000 /* >P */, 15000 /* >Q */, 15000 /* >R */, 15000 /* >S */, 15000 /* >T */, 15000 /* >U */, 15000 /* >V */, 15000 /* >W */, 15000 /* >X */, 15000 /* >Y */, 15000 /* >Z */, 15000 /* >[ */, 15000 /* >\ */, 15000 /* >] */, 15000 /* >^ */, 15000 /* >_ */, 15000 /* >` */, 15000 /* >a */, 15000 /* >b */, 15000 /* >c */, 15000 /* >d */, 15000 /* >e */, 15000 /* >f */, 15000 /* >g */, 15000 /* >h */, 15000 /* >i */, 15000 /* >j */, 15000 /* >k */, 15000 /* >l */, 15000 /* >m */, 15000 /* >n */, 15000 /* >o */, 15000 /* >p */, 15000 /* >q */, 15000 /* >r */, 15000 /* >s */, 15000 /* >t */, 15000 /* >u */, 15000 /* >v */, 15000 /* >w */, 15000 /* >x */, 15000 /* >y */, 15000 /* >z */, 15000 /* >{ */, 15000 /* >| */, 15000 /* >} */, 15000 /* >~ */}, + {12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ? */, 12500 /* ?! */, 12500 /* ?" */, 12500 /* ?# */, 12500 /* ?$ */, 12500 /* ?% */, 12500 /* ?& */, 12500 /* ?' */, 12500 /* ?( */, 12500 /* ?) */, 12500 /* ?* */, 12500 /* ?+ */, 9500 /* ?, */, 12500 /* ?- */, 9500 /* ?. */, 12500 /* ?/ */, 12500 /* ?0 */, 12500 /* ?1 */, 12500 /* ?2 */, 12500 /* ?3 */, 12500 /* ?4 */, 12500 /* ?5 */, 12500 /* ?6 */, 12500 /* ?7 */, 12500 /* ?8 */, 12500 /* ?9 */, 12500 /* ?: */, 12500 /* ?; */, 12500 /* ?< */, 12500 /* ?= */, 12500 /* ?> */, 12500 /* ?? */, 12500 /* ?@ */, 11750 /* ?A */, 12500 /* ?B */, 12500 /* ?C */, 12500 /* ?D */, 12500 /* ?E */, 12500 /* ?F */, 12500 /* ?G */, 12500 /* ?H */, 12500 /* ?I */, 12500 /* ?J */, 12500 /* ?K */, 12500 /* ?L */, 12500 /* ?M */, 12500 /* ?N */, 12500 /* ?O */, 12500 /* ?P */, 12500 /* ?Q */, 12500 /* ?R */, 12500 /* ?S */, 12500 /* ?T */, 12500 /* ?U */, 12750 /* ?V */, 12875 /* ?W */, 12500 /* ?X */, 12500 /* ?Y */, 12500 /* ?Z */, 12500 /* ?[ */, 12500 /* ?\ */, 12500 /* ?] */, 12500 /* ?^ */, 12500 /* ?_ */, 12500 /* ?` */, 12500 /* ?a */, 12500 /* ?b */, 12500 /* ?c */, 12500 /* ?d */, 12500 /* ?e */, 12500 /* ?f */, 12500 /* ?g */, 12500 /* ?h */, 12500 /* ?i */, 12500 /* ?j */, 12500 /* ?k */, 12500 /* ?l */, 12500 /* ?m */, 12500 /* ?n */, 12500 /* ?o */, 12500 /* ?p */, 12500 /* ?q */, 12500 /* ?r */, 12500 /* ?s */, 12500 /* ?t */, 12500 /* ?u */, 12500 /* ?v */, 12500 /* ?w */, 12500 /* ?x */, 12500 /* ?y */, 12500 /* ?z */, 12500 /* ?{ */, 12500 /* ?| */, 12500 /* ?} */, 12500 /* ?~ */}, + {22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @ */, 22575 /* @! */, 22575 /* @" */, 22575 /* @# */, 22575 /* @$ */, 22575 /* @% */, 22575 /* @& */, 22575 /* @' */, 22575 /* @( */, 22575 /* @) */, 22575 /* @* */, 22575 /* @+ */, 22575 /* @, */, 22575 /* @- */, 22575 /* @. */, 22575 /* @/ */, 22575 /* @0 */, 22575 /* @1 */, 22575 /* @2 */, 22575 /* @3 */, 22575 /* @4 */, 22575 /* @5 */, 22575 /* @6 */, 22575 /* @7 */, 22575 /* @8 */, 22575 /* @9 */, 22575 /* @: */, 22575 /* @; */, 22575 /* @< */, 22575 /* @= */, 22575 /* @> */, 22575 /* @? */, 22575 /* @@ */, 22075 /* @A */, 22575 /* @B */, 22575 /* @C */, 22575 /* @D */, 22575 /* @E */, 22575 /* @F */, 22575 /* @G */, 22575 /* @H */, 22075 /* @I */, 21825 /* @J */, 22575 /* @K */, 22575 /* @L */, 22575 /* @M */, 22575 /* @N */, 22575 /* @O */, 22575 /* @P */, 22575 /* @Q */, 22575 /* @R */, 22325 /* @S */, 21825 /* @T */, 22575 /* @U */, 21825 /* @V */, 22075 /* @W */, 21575 /* @X */, 21575 /* @Y */, 22200 /* @Z */, 22575 /* @[ */, 22575 /* @\ */, 22575 /* @] */, 22575 /* @^ */, 22575 /* @_ */, 22575 /* @` */, 22575 /* @a */, 22575 /* @b */, 22575 /* @c */, 22575 /* @d */, 22575 /* @e */, 22575 /* @f */, 22450 /* @g */, 22575 /* @h */, 22575 /* @i */, 22575 /* @j */, 22575 /* @k */, 22575 /* @l */, 22575 /* @m */, 22575 /* @n */, 22575 /* @o */, 22575 /* @p */, 22575 /* @q */, 22575 /* @r */, 22575 /* @s */, 22575 /* @t */, 22575 /* @u */, 22575 /* @v */, 22325 /* @w */, 22075 /* @x */, 22325 /* @y */, 22325 /* @z */, 22575 /* @{ */, 22575 /* @| */, 22575 /* @} */, 22575 /* @~ */}, + {17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A */, 17125 /* A! */, 15875 /* A" */, 17125 /* A# */, 17125 /* A$ */, 17125 /* A% */, 16875 /* A& */, 15875 /* A' */, 17125 /* A( */, 17125 /* A) */, 15875 /* A* */, 17125 /* A+ */, 17625 /* A, */, 16750 /* A- */, 17625 /* A. */, 17125 /* A/ */, 17125 /* A0 */, 17125 /* A1 */, 17125 /* A2 */, 17125 /* A3 */, 17125 /* A4 */, 17125 /* A5 */, 17125 /* A6 */, 17125 /* A7 */, 17125 /* A8 */, 17125 /* A9 */, 17125 /* A: */, 17125 /* A; */, 17125 /* A< */, 17125 /* A= */, 17125 /* A> */, 15875 /* A? */, 16625 /* A@ */, 17375 /* AA */, 17125 /* AB */, 16375 /* AC */, 17125 /* AD */, 17125 /* AE */, 17125 /* AF */, 16375 /* AG */, 17125 /* AH */, 17125 /* AI */, 16775 /* AJ */, 17125 /* AK */, 17125 /* AL */, 17125 /* AM */, 17125 /* AN */, 16375 /* AO */, 17125 /* AP */, 16375 /* AQ */, 17125 /* AR */, 17125 /* AS */, 15500 /* AT */, 16525 /* AU */, 15775 /* AV */, 16450 /* AW */, 17250 /* AX */, 15375 /* AY */, 17125 /* AZ */, 17125 /* A[ */, 17125 /* A\ */, 17125 /* A] */, 17125 /* A^ */, 17500 /* A_ */, 17125 /* A` */, 17200 /* Aa */, 17125 /* Ab */, 17125 /* Ac */, 17125 /* Ad */, 17125 /* Ae */, 17125 /* Af */, 17125 /* Ag */, 17125 /* Ah */, 17125 /* Ai */, 17125 /* Aj */, 17125 /* Ak */, 17125 /* Al */, 17125 /* Am */, 17125 /* An */, 17125 /* Ao */, 17125 /* Ap */, 17125 /* Aq */, 17125 /* Ar */, 17125 /* As */, 16650 /* At */, 17125 /* Au */, 16375 /* Av */, 16625 /* Aw */, 17125 /* Ax */, 16750 /* Ay */, 17375 /* Az */, 17125 /* A{ */, 17125 /* A| */, 17125 /* A} */, 17125 /* A~ */}, + {16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B */, 16675 /* B! */, 16675 /* B" */, 16675 /* B# */, 16675 /* B$ */, 16675 /* B% */, 16675 /* B& */, 16675 /* B' */, 16675 /* B( */, 16675 /* B) */, 16675 /* B* */, 16675 /* B+ */, 16300 /* B, */, 16675 /* B- */, 16300 /* B. */, 16050 /* B/ */, 16675 /* B0 */, 16675 /* B1 */, 16675 /* B2 */, 16675 /* B3 */, 16675 /* B4 */, 16675 /* B5 */, 16675 /* B6 */, 16675 /* B7 */, 16675 /* B8 */, 16675 /* B9 */, 16675 /* B: */, 16675 /* B; */, 16675 /* B< */, 16675 /* B= */, 16675 /* B> */, 16675 /* B? */, 16675 /* B@ */, 16300 /* BA */, 16675 /* BB */, 16675 /* BC */, 16675 /* BD */, 16675 /* BE */, 16675 /* BF */, 16675 /* BG */, 16675 /* BH */, 16675 /* BI */, 16425 /* BJ */, 16675 /* BK */, 16675 /* BL */, 16675 /* BM */, 16675 /* BN */, 16675 /* BO */, 16675 /* BP */, 16675 /* BQ */, 16675 /* BR */, 16675 /* BS */, 16025 /* BT */, 16675 /* BU */, 15975 /* BV */, 16475 /* BW */, 16150 /* BX */, 15600 /* BY */, 16675 /* BZ */, 16675 /* B[ */, 16675 /* B\ */, 16675 /* B] */, 16675 /* B^ */, 15075 /* B_ */, 16675 /* B` */, 16675 /* Ba */, 16675 /* Bb */, 16675 /* Bc */, 16675 /* Bd */, 16675 /* Be */, 16625 /* Bf */, 16600 /* Bg */, 16675 /* Bh */, 16675 /* Bi */, 16675 /* Bj */, 16675 /* Bk */, 16675 /* Bl */, 16675 /* Bm */, 16675 /* Bn */, 16675 /* Bo */, 16675 /* Bp */, 16675 /* Bq */, 16675 /* Br */, 16675 /* Bs */, 16550 /* Bt */, 16675 /* Bu */, 16475 /* Bv */, 16500 /* Bw */, 16375 /* Bx */, 16475 /* By */, 16675 /* Bz */, 16675 /* B{ */, 16675 /* B| */, 16675 /* B} */, 16675 /* B~ */}, + {16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C */, 16275 /* C! */, 16275 /* C" */, 16275 /* C# */, 16275 /* C$ */, 16275 /* C% */, 16025 /* C& */, 16275 /* C' */, 16275 /* C( */, 16275 /* C) */, 16275 /* C* */, 16275 /* C+ */, 16275 /* C, */, 16025 /* C- */, 16275 /* C. */, 15775 /* C/ */, 16275 /* C0 */, 16275 /* C1 */, 16275 /* C2 */, 16275 /* C3 */, 16275 /* C4 */, 16275 /* C5 */, 16275 /* C6 */, 16275 /* C7 */, 16275 /* C8 */, 16275 /* C9 */, 16275 /* C: */, 16275 /* C; */, 16275 /* C< */, 16275 /* C= */, 16275 /* C> */, 16275 /* C? */, 16025 /* C@ */, 16075 /* CA */, 16275 /* CB */, 15950 /* CC */, 16275 /* CD */, 16275 /* CE */, 16275 /* CF */, 15950 /* CG */, 16275 /* CH */, 16275 /* CI */, 16275 /* CJ */, 16275 /* CK */, 16275 /* CL */, 16275 /* CM */, 16275 /* CN */, 15950 /* CO */, 16275 /* CP */, 15950 /* CQ */, 16275 /* CR */, 16275 /* CS */, 16275 /* CT */, 16275 /* CU */, 16275 /* CV */, 16275 /* CW */, 15775 /* CX */, 16025 /* CY */, 16275 /* CZ */, 16275 /* C[ */, 16275 /* C\ */, 16275 /* C] */, 16275 /* C^ */, 15175 /* C_ */, 16275 /* C` */, 16275 /* Ca */, 16275 /* Cb */, 16275 /* Cc */, 16275 /* Cd */, 16275 /* Ce */, 16275 /* Cf */, 16275 /* Cg */, 16275 /* Ch */, 16275 /* Ci */, 16275 /* Cj */, 16275 /* Ck */, 16275 /* Cl */, 16275 /* Cm */, 16275 /* Cn */, 16275 /* Co */, 16275 /* Cp */, 16275 /* Cq */, 16275 /* Cr */, 16275 /* Cs */, 16275 /* Ct */, 16275 /* Cu */, 16275 /* Cv */, 16275 /* Cw */, 16275 /* Cx */, 16275 /* Cy */, 16275 /* Cz */, 16275 /* C{ */, 16275 /* C| */, 16275 /* C} */, 16275 /* C~ */}, + {17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D */, 17425 /* D! */, 17175 /* D" */, 17425 /* D# */, 17425 /* D$ */, 17425 /* D% */, 17425 /* D& */, 17175 /* D' */, 17425 /* D( */, 17425 /* D) */, 17175 /* D* */, 17425 /* D+ */, 16425 /* D, */, 17800 /* D- */, 16425 /* D. */, 16300 /* D/ */, 17425 /* D0 */, 17425 /* D1 */, 17425 /* D2 */, 17425 /* D3 */, 17425 /* D4 */, 17425 /* D5 */, 17425 /* D6 */, 17425 /* D7 */, 17425 /* D8 */, 17425 /* D9 */, 17425 /* D: */, 17425 /* D; */, 17425 /* D< */, 17425 /* D= */, 17425 /* D> */, 17425 /* D? */, 17425 /* D@ */, 16500 /* DA */, 17425 /* DB */, 17425 /* DC */, 17425 /* DD */, 17425 /* DE */, 17425 /* DF */, 17425 /* DG */, 17425 /* DH */, 17425 /* DI */, 16675 /* DJ */, 17425 /* DK */, 17425 /* DL */, 17425 /* DM */, 17425 /* DN */, 17425 /* DO */, 17425 /* DP */, 17425 /* DQ */, 17425 /* DR */, 17425 /* DS */, 16800 /* DT */, 17425 /* DU */, 16650 /* DV */, 16850 /* DW */, 16675 /* DX */, 16275 /* DY */, 16800 /* DZ */, 17425 /* D[ */, 17425 /* D\ */, 17425 /* D] */, 17425 /* D^ */, 17425 /* D_ */, 17425 /* D` */, 17425 /* Da */, 17425 /* Db */, 17425 /* Dc */, 17425 /* Dd */, 17425 /* De */, 17425 /* Df */, 17425 /* Dg */, 17425 /* Dh */, 17425 /* Di */, 17425 /* Dj */, 17425 /* Dk */, 17425 /* Dl */, 17425 /* Dm */, 17425 /* Dn */, 17425 /* Do */, 17425 /* Dp */, 17425 /* Dq */, 17425 /* Dr */, 17425 /* Ds */, 17425 /* Dt */, 17425 /* Du */, 17425 /* Dv */, 17425 /* Dw */, 17425 /* Dx */, 17425 /* Dy */, 17425 /* Dz */, 17425 /* D{ */, 17425 /* D| */, 17425 /* D} */, 17425 /* D~ */}, + {15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E */, 15175 /* E! */, 15175 /* E" */, 15175 /* E# */, 15175 /* E$ */, 15175 /* E% */, 14800 /* E& */, 15175 /* E' */, 15175 /* E( */, 15175 /* E) */, 15175 /* E* */, 15175 /* E+ */, 15175 /* E, */, 15175 /* E- */, 15175 /* E. */, 15175 /* E/ */, 15175 /* E0 */, 15175 /* E1 */, 15175 /* E2 */, 15175 /* E3 */, 15175 /* E4 */, 15175 /* E5 */, 15175 /* E6 */, 15175 /* E7 */, 15175 /* E8 */, 15175 /* E9 */, 15175 /* E: */, 15175 /* E; */, 15175 /* E< */, 15175 /* E= */, 15175 /* E> */, 15175 /* E? */, 14925 /* E@ */, 15175 /* EA */, 15175 /* EB */, 15175 /* EC */, 15175 /* ED */, 15175 /* EE */, 15175 /* EF */, 15175 /* EG */, 15175 /* EH */, 15175 /* EI */, 14675 /* EJ */, 15175 /* EK */, 15175 /* EL */, 15175 /* EM */, 15175 /* EN */, 15175 /* EO */, 15175 /* EP */, 15175 /* EQ */, 15175 /* ER */, 15175 /* ES */, 15175 /* ET */, 15175 /* EU */, 15175 /* EV */, 15175 /* EW */, 15175 /* EX */, 15175 /* EY */, 15175 /* EZ */, 15175 /* E[ */, 15175 /* E\ */, 15175 /* E] */, 15175 /* E^ */, 15175 /* E_ */, 15175 /* E` */, 15175 /* Ea */, 15175 /* Eb */, 14925 /* Ec */, 14925 /* Ed */, 14925 /* Ee */, 15175 /* Ef */, 15050 /* Eg */, 15175 /* Eh */, 15175 /* Ei */, 15175 /* Ej */, 15175 /* Ek */, 15175 /* El */, 15175 /* Em */, 15175 /* En */, 14925 /* Eo */, 15175 /* Ep */, 14925 /* Eq */, 15175 /* Er */, 15175 /* Es */, 15175 /* Et */, 15175 /* Eu */, 15175 /* Ev */, 15175 /* Ew */, 15175 /* Ex */, 15175 /* Ey */, 15175 /* Ez */, 15175 /* E{ */, 15175 /* E| */, 15175 /* E} */, 15175 /* E~ */}, + {14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F */, 14625 /* F! */, 14750 /* F" */, 14625 /* F# */, 14625 /* F$ */, 14625 /* F% */, 13625 /* F& */, 14750 /* F' */, 14625 /* F( */, 15000 /* F) */, 14750 /* F* */, 14625 /* F+ */, 12125 /* F, */, 14625 /* F- */, 12125 /* F. */, 12500 /* F/ */, 14625 /* F0 */, 14625 /* F1 */, 14625 /* F2 */, 14625 /* F3 */, 14625 /* F4 */, 14625 /* F5 */, 14625 /* F6 */, 14625 /* F7 */, 14625 /* F8 */, 14625 /* F9 */, 14625 /* F: */, 14625 /* F; */, 14625 /* F< */, 14625 /* F= */, 14625 /* F> */, 14625 /* F? */, 13875 /* F@ */, 12450 /* FA */, 14625 /* FB */, 13875 /* FC */, 14625 /* FD */, 14625 /* FE */, 14625 /* FF */, 13875 /* FG */, 14625 /* FH */, 14625 /* FI */, 12750 /* FJ */, 14625 /* FK */, 14625 /* FL */, 14625 /* FM */, 14625 /* FN */, 13875 /* FO */, 14625 /* FP */, 13875 /* FQ */, 14625 /* FR */, 14625 /* FS */, 14625 /* FT */, 14625 /* FU */, 14625 /* FV */, 14625 /* FW */, 14625 /* FX */, 14625 /* FY */, 14625 /* FZ */, 14625 /* F[ */, 14625 /* F\ */, 14625 /* F] */, 14625 /* F^ */, 11125 /* F_ */, 14625 /* F` */, 13625 /* Fa */, 14625 /* Fb */, 13825 /* Fc */, 13775 /* Fd */, 13825 /* Fe */, 14450 /* Ff */, 13525 /* Fg */, 14625 /* Fh */, 14625 /* Fi */, 14375 /* Fj */, 14625 /* Fk */, 14625 /* Fl */, 13875 /* Fm */, 13875 /* Fn */, 13825 /* Fo */, 13875 /* Fp */, 13775 /* Fq */, 13875 /* Fr */, 13625 /* Fs */, 14250 /* Ft */, 14000 /* Fu */, 14125 /* Fv */, 14250 /* Fw */, 13625 /* Fx */, 14125 /* Fy */, 14000 /* Fz */, 14625 /* F{ */, 14625 /* F| */, 14625 /* F} */, 14625 /* F~ */}, + {17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G */, 17975 /* G! */, 17725 /* G" */, 17975 /* G# */, 17975 /* G$ */, 17975 /* G% */, 17975 /* G& */, 17725 /* G' */, 17975 /* G( */, 17975 /* G) */, 17725 /* G* */, 17975 /* G+ */, 17975 /* G, */, 18225 /* G- */, 17975 /* G. */, 17975 /* G/ */, 17975 /* G0 */, 17975 /* G1 */, 17975 /* G2 */, 17975 /* G3 */, 17975 /* G4 */, 17975 /* G5 */, 17975 /* G6 */, 17975 /* G7 */, 17975 /* G8 */, 17975 /* G9 */, 17975 /* G: */, 17975 /* G; */, 17975 /* G< */, 17975 /* G= */, 17975 /* G> */, 17975 /* G? */, 17975 /* G@ */, 17975 /* GA */, 17975 /* GB */, 17975 /* GC */, 17975 /* GD */, 17975 /* GE */, 17975 /* GF */, 17975 /* GG */, 17975 /* GH */, 17975 /* GI */, 17675 /* GJ */, 17975 /* GK */, 17975 /* GL */, 17975 /* GM */, 17975 /* GN */, 17975 /* GO */, 17975 /* GP */, 17975 /* GQ */, 17975 /* GR */, 17975 /* GS */, 17025 /* GT */, 17975 /* GU */, 17225 /* GV */, 17650 /* GW */, 17725 /* GX */, 16875 /* GY */, 17975 /* GZ */, 17975 /* G[ */, 17975 /* G\ */, 17975 /* G] */, 17975 /* G^ */, 17975 /* G_ */, 17975 /* G` */, 17975 /* Ga */, 17975 /* Gb */, 17975 /* Gc */, 17975 /* Gd */, 17975 /* Ge */, 17975 /* Gf */, 17975 /* Gg */, 17975 /* Gh */, 17975 /* Gi */, 17975 /* Gj */, 17975 /* Gk */, 17975 /* Gl */, 17975 /* Gm */, 17975 /* Gn */, 17975 /* Go */, 17975 /* Gp */, 17975 /* Gq */, 17975 /* Gr */, 17975 /* Gs */, 17975 /* Gt */, 17975 /* Gu */, 17975 /* Gv */, 17975 /* Gw */, 17975 /* Gx */, 17975 /* Gy */, 17975 /* Gz */, 17975 /* G{ */, 17975 /* G| */, 17975 /* G} */, 17975 /* G~ */}, + {18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H */, 18100 /* H! */, 18100 /* H" */, 18100 /* H# */, 18100 /* H$ */, 18100 /* H% */, 18100 /* H& */, 18100 /* H' */, 18100 /* H( */, 18100 /* H) */, 18100 /* H* */, 18100 /* H+ */, 18100 /* H, */, 18100 /* H- */, 18100 /* H. */, 18100 /* H/ */, 18100 /* H0 */, 18100 /* H1 */, 18100 /* H2 */, 18100 /* H3 */, 18100 /* H4 */, 18100 /* H5 */, 18100 /* H6 */, 18100 /* H7 */, 18100 /* H8 */, 18100 /* H9 */, 18100 /* H: */, 18100 /* H; */, 18100 /* H< */, 18100 /* H= */, 18100 /* H> */, 18100 /* H? */, 18100 /* H@ */, 18100 /* HA */, 18100 /* HB */, 18100 /* HC */, 18100 /* HD */, 18100 /* HE */, 18100 /* HF */, 18100 /* HG */, 18100 /* HH */, 18100 /* HI */, 18100 /* HJ */, 18100 /* HK */, 18100 /* HL */, 18100 /* HM */, 18100 /* HN */, 18100 /* HO */, 18100 /* HP */, 18100 /* HQ */, 18100 /* HR */, 18100 /* HS */, 18100 /* HT */, 18100 /* HU */, 18100 /* HV */, 18100 /* HW */, 18100 /* HX */, 18100 /* HY */, 18100 /* HZ */, 18100 /* H[ */, 18100 /* H\ */, 18100 /* H] */, 18100 /* H^ */, 18100 /* H_ */, 18100 /* H` */, 18100 /* Ha */, 18100 /* Hb */, 18100 /* Hc */, 18100 /* Hd */, 18100 /* He */, 18100 /* Hf */, 18100 /* Hg */, 18100 /* Hh */, 18100 /* Hi */, 18100 /* Hj */, 18100 /* Hk */, 18100 /* Hl */, 18100 /* Hm */, 18100 /* Hn */, 18100 /* Ho */, 18100 /* Hp */, 18100 /* Hq */, 18100 /* Hr */, 18100 /* Hs */, 18100 /* Ht */, 18100 /* Hu */, 18100 /* Hv */, 18100 /* Hw */, 18100 /* Hx */, 18100 /* Hy */, 18100 /* Hz */, 18100 /* H{ */, 18100 /* H| */, 18100 /* H} */, 18100 /* H~ */}, + {10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I */, 10800 /* I! */, 10800 /* I" */, 10800 /* I# */, 10800 /* I$ */, 10800 /* I% */, 10800 /* I& */, 10800 /* I' */, 10800 /* I( */, 10800 /* I) */, 10800 /* I* */, 10800 /* I+ */, 10800 /* I, */, 10050 /* I- */, 10800 /* I. */, 10800 /* I/ */, 10800 /* I0 */, 10800 /* I1 */, 10800 /* I2 */, 10800 /* I3 */, 10800 /* I4 */, 10800 /* I5 */, 10800 /* I6 */, 10800 /* I7 */, 10800 /* I8 */, 10800 /* I9 */, 10800 /* I: */, 10800 /* I; */, 10800 /* I< */, 10800 /* I= */, 10800 /* I> */, 10800 /* I? */, 10300 /* I@ */, 10800 /* IA */, 10800 /* IB */, 10800 /* IC */, 10800 /* ID */, 10800 /* IE */, 10800 /* IF */, 10800 /* IG */, 10800 /* IH */, 10800 /* II */, 10800 /* IJ */, 10800 /* IK */, 10800 /* IL */, 10800 /* IM */, 10800 /* IN */, 10800 /* IO */, 10800 /* IP */, 10800 /* IQ */, 10800 /* IR */, 10800 /* IS */, 10700 /* IT */, 10800 /* IU */, 10800 /* IV */, 10800 /* IW */, 10800 /* IX */, 10800 /* IY */, 10800 /* IZ */, 10800 /* I[ */, 10800 /* I\ */, 10800 /* I] */, 10800 /* I^ */, 10800 /* I_ */, 10800 /* I` */, 10800 /* Ia */, 10800 /* Ib */, 10675 /* Ic */, 10675 /* Id */, 10675 /* Ie */, 10800 /* If */, 10800 /* Ig */, 10800 /* Ih */, 10800 /* Ii */, 10800 /* Ij */, 10800 /* Ik */, 10800 /* Il */, 10800 /* Im */, 10800 /* In */, 10675 /* Io */, 10800 /* Ip */, 10675 /* Iq */, 10800 /* Ir */, 10675 /* Is */, 10800 /* It */, 10800 /* Iu */, 10675 /* Iv */, 10800 /* Iw */, 10800 /* Ix */, 10675 /* Iy */, 10800 /* Iz */, 10800 /* I{ */, 10800 /* I| */, 10800 /* I} */, 10800 /* I~ */}, + {13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J */, 13975 /* J! */, 13975 /* J" */, 13975 /* J# */, 13975 /* J$ */, 13975 /* J% */, 13975 /* J& */, 13975 /* J' */, 13975 /* J( */, 13975 /* J) */, 13975 /* J* */, 13975 /* J+ */, 13350 /* J, */, 13975 /* J- */, 13350 /* J. */, 13100 /* J/ */, 13975 /* J0 */, 13975 /* J1 */, 13975 /* J2 */, 13975 /* J3 */, 13975 /* J4 */, 13975 /* J5 */, 13975 /* J6 */, 13975 /* J7 */, 13975 /* J8 */, 13975 /* J9 */, 13975 /* J: */, 13975 /* J; */, 13975 /* J< */, 13975 /* J= */, 13975 /* J> */, 13975 /* J? */, 13975 /* J@ */, 13450 /* JA */, 13975 /* JB */, 13975 /* JC */, 13975 /* JD */, 13975 /* JE */, 13975 /* JF */, 13975 /* JG */, 13975 /* JH */, 13975 /* JI */, 13675 /* JJ */, 13975 /* JK */, 13975 /* JL */, 13975 /* JM */, 13975 /* JN */, 13975 /* JO */, 13975 /* JP */, 13975 /* JQ */, 13975 /* JR */, 13975 /* JS */, 13975 /* JT */, 13975 /* JU */, 13975 /* JV */, 13975 /* JW */, 13600 /* JX */, 13975 /* JY */, 13975 /* JZ */, 13975 /* J[ */, 13975 /* J\ */, 13975 /* J] */, 13975 /* J^ */, 11850 /* J_ */, 13975 /* J` */, 13975 /* Ja */, 13975 /* Jb */, 13975 /* Jc */, 13975 /* Jd */, 13975 /* Je */, 13975 /* Jf */, 13975 /* Jg */, 13975 /* Jh */, 13975 /* Ji */, 13975 /* Jj */, 13975 /* Jk */, 13975 /* Jl */, 13975 /* Jm */, 13975 /* Jn */, 13975 /* Jo */, 13975 /* Jp */, 13975 /* Jq */, 13975 /* Jr */, 13975 /* Js */, 13975 /* Jt */, 13975 /* Ju */, 13975 /* Jv */, 13975 /* Jw */, 13975 /* Jx */, 13975 /* Jy */, 13975 /* Jz */, 13975 /* J{ */, 13975 /* J| */, 13975 /* J} */, 13975 /* J~ */}, + {17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K */, 17400 /* K! */, 17150 /* K" */, 17400 /* K# */, 17400 /* K$ */, 17400 /* K% */, 16650 /* K& */, 17150 /* K' */, 17400 /* K( */, 17650 /* K) */, 17150 /* K* */, 17400 /* K+ */, 17650 /* K, */, 16275 /* K- */, 17650 /* K. */, 17400 /* K/ */, 17400 /* K0 */, 17400 /* K1 */, 17400 /* K2 */, 17400 /* K3 */, 17400 /* K4 */, 17400 /* K5 */, 17400 /* K6 */, 17400 /* K7 */, 17400 /* K8 */, 17400 /* K9 */, 17400 /* K: */, 17400 /* K; */, 17400 /* K< */, 17400 /* K= */, 17400 /* K> */, 17400 /* K? */, 16400 /* K@ */, 17400 /* KA */, 17400 /* KB */, 16400 /* KC */, 17400 /* KD */, 17400 /* KE */, 17400 /* KF */, 16400 /* KG */, 17400 /* KH */, 17400 /* KI */, 16900 /* KJ */, 17400 /* KK */, 17400 /* KL */, 17400 /* KM */, 17400 /* KN */, 16400 /* KO */, 17400 /* KP */, 16400 /* KQ */, 17400 /* KR */, 17150 /* KS */, 16775 /* KT */, 17400 /* KU */, 16775 /* KV */, 17150 /* KW */, 17400 /* KX */, 16900 /* KY */, 17400 /* KZ */, 17400 /* K[ */, 17400 /* K\ */, 17400 /* K] */, 17400 /* K^ */, 17400 /* K_ */, 17400 /* K` */, 17150 /* Ka */, 17400 /* Kb */, 16775 /* Kc */, 16775 /* Kd */, 16775 /* Ke */, 16900 /* Kf */, 17150 /* Kg */, 17400 /* Kh */, 17400 /* Ki */, 17400 /* Kj */, 17400 /* Kk */, 17150 /* Kl */, 17150 /* Km */, 17150 /* Kn */, 16775 /* Ko */, 17150 /* Kp */, 16775 /* Kq */, 17150 /* Kr */, 17400 /* Ks */, 16650 /* Kt */, 16900 /* Ku */, 16900 /* Kv */, 16900 /* Kw */, 17275 /* Kx */, 16900 /* Ky */, 17650 /* Kz */, 17400 /* K{ */, 17400 /* K| */, 17400 /* K} */, 17400 /* K~ */}, + {13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L */, 13250 /* L! */, 11000 /* L" */, 13250 /* L# */, 13250 /* L$ */, 13250 /* L% */, 13125 /* L& */, 11000 /* L' */, 13250 /* L( */, 13250 /* L) */, 11000 /* L* */, 13250 /* L+ */, 13750 /* L, */, 12375 /* L- */, 13750 /* L. */, 13500 /* L/ */, 13250 /* L0 */, 13250 /* L1 */, 13250 /* L2 */, 13250 /* L3 */, 13250 /* L4 */, 13250 /* L5 */, 13250 /* L6 */, 13250 /* L7 */, 13250 /* L8 */, 13250 /* L9 */, 13250 /* L: */, 13250 /* L; */, 13250 /* L< */, 13250 /* L= */, 13250 /* L> */, 11750 /* L? */, 13000 /* L@ */, 13675 /* LA */, 13250 /* LB */, 12250 /* LC */, 13250 /* LD */, 13250 /* LE */, 13250 /* LF */, 12250 /* LG */, 13250 /* LH */, 13250 /* LI */, 13250 /* LJ */, 13250 /* LK */, 13250 /* LL */, 13250 /* LM */, 13250 /* LN */, 12250 /* LO */, 13250 /* LP */, 12250 /* LQ */, 13250 /* LR */, 13250 /* LS */, 11400 /* LT */, 12425 /* LU */, 11450 /* LV */, 12225 /* LW */, 13250 /* LX */, 11025 /* LY */, 13250 /* LZ */, 13250 /* L[ */, 13250 /* L\ */, 13250 /* L] */, 13250 /* L^ */, 13750 /* L_ */, 13250 /* L` */, 13350 /* La */, 13250 /* Lb */, 13000 /* Lc */, 13025 /* Ld */, 13000 /* Le */, 13250 /* Lf */, 13250 /* Lg */, 13250 /* Lh */, 13250 /* Li */, 13250 /* Lj */, 13250 /* Lk */, 13250 /* Ll */, 13250 /* Lm */, 13250 /* Ln */, 13000 /* Lo */, 13250 /* Lp */, 13025 /* Lq */, 13250 /* Lr */, 13250 /* Ls */, 12750 /* Lt */, 13125 /* Lu */, 12000 /* Lv */, 12500 /* Lw */, 13500 /* Lx */, 12375 /* Ly */, 13525 /* Lz */, 13250 /* L{ */, 13250 /* L| */, 13250 /* L} */, 13250 /* L~ */}, + {20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M */, 20475 /* M! */, 20475 /* M" */, 20475 /* M# */, 20475 /* M$ */, 20475 /* M% */, 20475 /* M& */, 20475 /* M' */, 20475 /* M( */, 20475 /* M) */, 20475 /* M* */, 20475 /* M+ */, 20475 /* M, */, 20475 /* M- */, 20475 /* M. */, 20475 /* M/ */, 20475 /* M0 */, 20475 /* M1 */, 20475 /* M2 */, 20475 /* M3 */, 20475 /* M4 */, 20475 /* M5 */, 20475 /* M6 */, 20475 /* M7 */, 20475 /* M8 */, 20475 /* M9 */, 20475 /* M: */, 20475 /* M; */, 20475 /* M< */, 20475 /* M= */, 20475 /* M> */, 20475 /* M? */, 20475 /* M@ */, 20475 /* MA */, 20475 /* MB */, 20475 /* MC */, 20475 /* MD */, 20475 /* ME */, 20475 /* MF */, 20475 /* MG */, 20475 /* MH */, 20475 /* MI */, 20475 /* MJ */, 20475 /* MK */, 20475 /* ML */, 20475 /* MM */, 20475 /* MN */, 20475 /* MO */, 20475 /* MP */, 20475 /* MQ */, 20475 /* MR */, 20475 /* MS */, 20475 /* MT */, 20475 /* MU */, 20475 /* MV */, 20475 /* MW */, 20475 /* MX */, 20475 /* MY */, 20475 /* MZ */, 20475 /* M[ */, 20475 /* M\ */, 20475 /* M] */, 20475 /* M^ */, 20475 /* M_ */, 20475 /* M` */, 20475 /* Ma */, 20475 /* Mb */, 20475 /* Mc */, 20475 /* Md */, 20475 /* Me */, 20475 /* Mf */, 20475 /* Mg */, 20475 /* Mh */, 20475 /* Mi */, 20475 /* Mj */, 20475 /* Mk */, 20475 /* Ml */, 20475 /* Mm */, 20475 /* Mn */, 20475 /* Mo */, 20475 /* Mp */, 20475 /* Mq */, 20475 /* Mr */, 20475 /* Ms */, 20475 /* Mt */, 20475 /* Mu */, 20475 /* Mv */, 20475 /* Mw */, 20475 /* Mx */, 20475 /* My */, 20475 /* Mz */, 20475 /* M{ */, 20475 /* M| */, 20475 /* M} */, 20475 /* M~ */}, + {18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N */, 18100 /* N! */, 18100 /* N" */, 18100 /* N# */, 18100 /* N$ */, 18100 /* N% */, 18100 /* N& */, 18100 /* N' */, 18100 /* N( */, 18100 /* N) */, 18100 /* N* */, 18100 /* N+ */, 18100 /* N, */, 18100 /* N- */, 18100 /* N. */, 18100 /* N/ */, 18100 /* N0 */, 18100 /* N1 */, 18100 /* N2 */, 18100 /* N3 */, 18100 /* N4 */, 18100 /* N5 */, 18100 /* N6 */, 18100 /* N7 */, 18100 /* N8 */, 18100 /* N9 */, 18100 /* N: */, 18100 /* N; */, 18100 /* N< */, 18100 /* N= */, 18100 /* N> */, 18100 /* N? */, 18100 /* N@ */, 18100 /* NA */, 18100 /* NB */, 18100 /* NC */, 18100 /* ND */, 18100 /* NE */, 18100 /* NF */, 18100 /* NG */, 18100 /* NH */, 18100 /* NI */, 18100 /* NJ */, 18100 /* NK */, 18100 /* NL */, 18100 /* NM */, 18100 /* NN */, 18100 /* NO */, 18100 /* NP */, 18100 /* NQ */, 18100 /* NR */, 18100 /* NS */, 18100 /* NT */, 18100 /* NU */, 18100 /* NV */, 18100 /* NW */, 18100 /* NX */, 18100 /* NY */, 18100 /* NZ */, 18100 /* N[ */, 18100 /* N\ */, 18100 /* N] */, 18100 /* N^ */, 18100 /* N_ */, 18100 /* N` */, 18100 /* Na */, 18100 /* Nb */, 18100 /* Nc */, 18100 /* Nd */, 18100 /* Ne */, 18100 /* Nf */, 18100 /* Ng */, 18100 /* Nh */, 18100 /* Ni */, 18100 /* Nj */, 18100 /* Nk */, 18100 /* Nl */, 18100 /* Nm */, 18100 /* Nn */, 18100 /* No */, 18100 /* Np */, 18100 /* Nq */, 18100 /* Nr */, 18100 /* Ns */, 18100 /* Nt */, 18100 /* Nu */, 18100 /* Nv */, 18100 /* Nw */, 18100 /* Nx */, 18100 /* Ny */, 18100 /* Nz */, 18100 /* N{ */, 18100 /* N| */, 18100 /* N} */, 18100 /* N~ */}, + {17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O */, 17850 /* O! */, 17600 /* O" */, 17850 /* O# */, 17850 /* O$ */, 17850 /* O% */, 17725 /* O& */, 17600 /* O' */, 17850 /* O( */, 17850 /* O) */, 17600 /* O* */, 17850 /* O+ */, 16850 /* O, */, 18225 /* O- */, 16850 /* O. */, 16725 /* O/ */, 17850 /* O0 */, 17850 /* O1 */, 17850 /* O2 */, 17850 /* O3 */, 17850 /* O4 */, 17850 /* O5 */, 17850 /* O6 */, 17850 /* O7 */, 17850 /* O8 */, 17850 /* O9 */, 17850 /* O: */, 17850 /* O; */, 17850 /* O< */, 17850 /* O= */, 17850 /* O> */, 17850 /* O? */, 17850 /* O@ */, 17100 /* OA */, 17850 /* OB */, 17850 /* OC */, 17850 /* OD */, 17850 /* OE */, 17850 /* OF */, 17850 /* OG */, 17850 /* OH */, 17850 /* OI */, 17100 /* OJ */, 17850 /* OK */, 17850 /* OL */, 17850 /* OM */, 17850 /* ON */, 17850 /* OO */, 17850 /* OP */, 17850 /* OQ */, 17850 /* OR */, 17750 /* OS */, 17225 /* OT */, 17850 /* OU */, 17075 /* OV */, 17275 /* OW */, 17100 /* OX */, 16600 /* OY */, 17400 /* OZ */, 17850 /* O[ */, 17850 /* O\ */, 17850 /* O] */, 17850 /* O^ */, 15350 /* O_ */, 17850 /* O` */, 17850 /* Oa */, 17850 /* Ob */, 17850 /* Oc */, 17850 /* Od */, 17850 /* Oe */, 17850 /* Of */, 17850 /* Og */, 17850 /* Oh */, 17850 /* Oi */, 17850 /* Oj */, 17850 /* Ok */, 17850 /* Ol */, 17850 /* Om */, 17850 /* On */, 17850 /* Oo */, 17850 /* Op */, 17850 /* Oq */, 17850 /* Or */, 17850 /* Os */, 17850 /* Ot */, 17850 /* Ou */, 17850 /* Ov */, 17850 /* Ow */, 17850 /* Ox */, 17850 /* Oy */, 17850 /* Oz */, 17850 /* O{ */, 17850 /* O| */, 17850 /* O} */, 17850 /* O~ */}, + {16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P */, 16400 /* P! */, 16525 /* P" */, 16400 /* P# */, 16400 /* P$ */, 16400 /* P% */, 15650 /* P& */, 16525 /* P' */, 16400 /* P( */, 16400 /* P) */, 16525 /* P* */, 16400 /* P+ */, 13900 /* P, */, 16400 /* P- */, 13900 /* P. */, 14150 /* P/ */, 16400 /* P0 */, 16400 /* P1 */, 16400 /* P2 */, 16400 /* P3 */, 16400 /* P4 */, 16400 /* P5 */, 16400 /* P6 */, 16400 /* P7 */, 16400 /* P8 */, 16400 /* P9 */, 16400 /* P: */, 16400 /* P; */, 16400 /* P< */, 16400 /* P= */, 16400 /* P> */, 16400 /* P? */, 16150 /* P@ */, 14575 /* PA */, 16400 /* PB */, 16400 /* PC */, 16400 /* PD */, 16400 /* PE */, 16400 /* PF */, 16400 /* PG */, 16400 /* PH */, 16400 /* PI */, 14650 /* PJ */, 16400 /* PK */, 16400 /* PL */, 16400 /* PM */, 16400 /* PN */, 16400 /* PO */, 16400 /* PP */, 16400 /* PQ */, 16400 /* PR */, 16150 /* PS */, 16400 /* PT */, 16400 /* PU */, 16275 /* PV */, 16150 /* PW */, 15525 /* PX */, 15775 /* PY */, 15775 /* PZ */, 16400 /* P[ */, 16400 /* P\ */, 16400 /* P] */, 16400 /* P^ */, 12650 /* P_ */, 16400 /* P` */, 16025 /* Pa */, 16400 /* Pb */, 15900 /* Pc */, 15900 /* Pd */, 15900 /* Pe */, 16400 /* Pf */, 15650 /* Pg */, 16400 /* Ph */, 16400 /* Pi */, 16400 /* Pj */, 16400 /* Pk */, 16400 /* Pl */, 16150 /* Pm */, 16150 /* Pn */, 15900 /* Po */, 16025 /* Pp */, 15900 /* Pq */, 16150 /* Pr */, 16025 /* Ps */, 16400 /* Pt */, 16400 /* Pu */, 16400 /* Pv */, 16525 /* Pw */, 16025 /* Px */, 16400 /* Py */, 16400 /* Pz */, 16400 /* P{ */, 16400 /* P| */, 16400 /* P} */, 16400 /* P~ */}, + {17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q */, 17850 /* Q! */, 17600 /* Q" */, 17850 /* Q# */, 17850 /* Q$ */, 17850 /* Q% */, 17725 /* Q& */, 17600 /* Q' */, 17850 /* Q( */, 17850 /* Q) */, 17600 /* Q* */, 17850 /* Q+ */, 16850 /* Q, */, 18225 /* Q- */, 16850 /* Q. */, 16725 /* Q/ */, 17850 /* Q0 */, 17850 /* Q1 */, 17850 /* Q2 */, 17850 /* Q3 */, 17850 /* Q4 */, 17850 /* Q5 */, 17850 /* Q6 */, 17850 /* Q7 */, 17850 /* Q8 */, 17850 /* Q9 */, 17850 /* Q: */, 17850 /* Q; */, 17850 /* Q< */, 17850 /* Q= */, 17850 /* Q> */, 17850 /* Q? */, 17850 /* Q@ */, 17100 /* QA */, 17850 /* QB */, 17850 /* QC */, 17850 /* QD */, 17850 /* QE */, 17850 /* QF */, 17850 /* QG */, 17850 /* QH */, 17850 /* QI */, 17100 /* QJ */, 17850 /* QK */, 17850 /* QL */, 17850 /* QM */, 17850 /* QN */, 17850 /* QO */, 17850 /* QP */, 17850 /* QQ */, 17850 /* QR */, 17750 /* QS */, 17225 /* QT */, 17850 /* QU */, 17075 /* QV */, 17275 /* QW */, 17100 /* QX */, 16600 /* QY */, 17400 /* QZ */, 17850 /* Q[ */, 17850 /* Q\ */, 17850 /* Q] */, 17850 /* Q^ */, 15350 /* Q_ */, 17850 /* Q` */, 17850 /* Qa */, 17850 /* Qb */, 17850 /* Qc */, 17850 /* Qd */, 17850 /* Qe */, 17850 /* Qf */, 17850 /* Qg */, 17850 /* Qh */, 17850 /* Qi */, 17850 /* Qj */, 17850 /* Qk */, 17850 /* Ql */, 17850 /* Qm */, 17850 /* Qn */, 17850 /* Qo */, 17850 /* Qp */, 17850 /* Qq */, 17850 /* Qr */, 17850 /* Qs */, 17850 /* Qt */, 17850 /* Qu */, 17850 /* Qv */, 17850 /* Qw */, 17850 /* Qx */, 17850 /* Qy */, 17850 /* Qz */, 17850 /* Q{ */, 17850 /* Q| */, 17850 /* Q} */, 17850 /* Q~ */}, + {16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R */, 16850 /* R! */, 16850 /* R" */, 16850 /* R# */, 16850 /* R$ */, 16850 /* R% */, 16225 /* R& */, 16850 /* R' */, 16850 /* R( */, 16850 /* R) */, 16850 /* R* */, 16850 /* R+ */, 16850 /* R, */, 16475 /* R- */, 16850 /* R. */, 16350 /* R/ */, 16850 /* R0 */, 16850 /* R1 */, 16850 /* R2 */, 16850 /* R3 */, 16850 /* R4 */, 16850 /* R5 */, 16850 /* R6 */, 16850 /* R7 */, 16850 /* R8 */, 16850 /* R9 */, 16850 /* R: */, 16850 /* R; */, 16850 /* R< */, 16850 /* R= */, 16850 /* R> */, 16850 /* R? */, 16350 /* R@ */, 16850 /* RA */, 16850 /* RB */, 16600 /* RC */, 16850 /* RD */, 16850 /* RE */, 16850 /* RF */, 16600 /* RG */, 16850 /* RH */, 16850 /* RI */, 15975 /* RJ */, 16850 /* RK */, 16850 /* RL */, 16850 /* RM */, 16850 /* RN */, 16600 /* RO */, 16850 /* RP */, 16600 /* RQ */, 16850 /* RR */, 16850 /* RS */, 16250 /* RT */, 16500 /* RU */, 16100 /* RV */, 16500 /* RW */, 16850 /* RX */, 15850 /* RY */, 16850 /* RZ */, 16850 /* R[ */, 16850 /* R\ */, 16850 /* R] */, 16850 /* R^ */, 16850 /* R_ */, 16850 /* R` */, 16600 /* Ra */, 16850 /* Rb */, 16475 /* Rc */, 16475 /* Rd */, 16475 /* Re */, 16850 /* Rf */, 16225 /* Rg */, 16850 /* Rh */, 16850 /* Ri */, 16850 /* Rj */, 16850 /* Rk */, 16850 /* Rl */, 16850 /* Rm */, 16850 /* Rn */, 16475 /* Ro */, 16850 /* Rp */, 16475 /* Rq */, 16850 /* Rr */, 16850 /* Rs */, 16850 /* Rt */, 16850 /* Ru */, 16850 /* Rv */, 16850 /* Rw */, 16850 /* Rx */, 16750 /* Ry */, 16850 /* Rz */, 16850 /* R{ */, 16850 /* R| */, 16850 /* R} */, 16850 /* R~ */}, + {15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S */, 15600 /* S! */, 15600 /* S" */, 15600 /* S# */, 15600 /* S$ */, 15600 /* S% */, 15350 /* S& */, 15600 /* S' */, 15600 /* S( */, 15600 /* S) */, 15600 /* S* */, 15600 /* S+ */, 15600 /* S, */, 15975 /* S- */, 15600 /* S. */, 14725 /* S/ */, 15600 /* S0 */, 15600 /* S1 */, 15600 /* S2 */, 15600 /* S3 */, 15600 /* S4 */, 15600 /* S5 */, 15600 /* S6 */, 15600 /* S7 */, 15600 /* S8 */, 15600 /* S9 */, 15600 /* S: */, 15600 /* S; */, 15600 /* S< */, 15600 /* S= */, 15600 /* S> */, 15600 /* S? */, 15350 /* S@ */, 15600 /* SA */, 15600 /* SB */, 15600 /* SC */, 15600 /* SD */, 15600 /* SE */, 15600 /* SF */, 15600 /* SG */, 15600 /* SH */, 15600 /* SI */, 15600 /* SJ */, 15600 /* SK */, 15600 /* SL */, 15600 /* SM */, 15600 /* SN */, 15600 /* SO */, 15600 /* SP */, 15600 /* SQ */, 15600 /* SR */, 15250 /* SS */, 15025 /* ST */, 15600 /* SU */, 15150 /* SV */, 15150 /* SW */, 15600 /* SX */, 14600 /* SY */, 15600 /* SZ */, 15600 /* S[ */, 15600 /* S\ */, 15600 /* S] */, 15600 /* S^ */, 14100 /* S_ */, 15600 /* S` */, 15600 /* Sa */, 15600 /* Sb */, 15600 /* Sc */, 15600 /* Sd */, 15600 /* Se */, 15600 /* Sf */, 15600 /* Sg */, 15600 /* Sh */, 15600 /* Si */, 15600 /* Sj */, 15600 /* Sk */, 15600 /* Sl */, 15600 /* Sm */, 15600 /* Sn */, 15600 /* So */, 15600 /* Sp */, 15600 /* Sq */, 15600 /* Sr */, 15600 /* Ss */, 15475 /* St */, 15600 /* Su */, 15600 /* Sv */, 15600 /* Sw */, 15600 /* Sx */, 15600 /* Sy */, 15600 /* Sz */, 15600 /* S{ */, 15600 /* S| */, 15600 /* S} */, 15600 /* S~ */}, + {14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T */, 14600 /* T! */, 14975 /* T" */, 14600 /* T# */, 14600 /* T$ */, 14600 /* T% */, 13850 /* T& */, 14975 /* T' */, 14600 /* T( */, 15100 /* T) */, 14975 /* T* */, 14600 /* T+ */, 12850 /* T, */, 13475 /* T- */, 12850 /* T. */, 12100 /* T/ */, 14600 /* T0 */, 14600 /* T1 */, 14600 /* T2 */, 14600 /* T3 */, 14600 /* T4 */, 14600 /* T5 */, 14600 /* T6 */, 14600 /* T7 */, 14600 /* T8 */, 14600 /* T9 */, 13600 /* T: */, 13600 /* T; */, 14600 /* T< */, 14600 /* T= */, 14600 /* T> */, 14600 /* T? */, 13850 /* T@ */, 12975 /* TA */, 14600 /* TB */, 13975 /* TC */, 14600 /* TD */, 14600 /* TE */, 14600 /* TF */, 13975 /* TG */, 14600 /* TH */, 14500 /* TI */, 13225 /* TJ */, 14600 /* TK */, 14600 /* TL */, 14600 /* TM */, 14600 /* TN */, 13975 /* TO */, 14600 /* TP */, 13975 /* TQ */, 14600 /* TR */, 14300 /* TS */, 14975 /* TT */, 14600 /* TU */, 14675 /* TV */, 14675 /* TW */, 14600 /* TX */, 14675 /* TY */, 14600 /* TZ */, 14600 /* T[ */, 14600 /* T\ */, 14600 /* T] */, 14600 /* T^ */, 12600 /* T_ */, 14600 /* T` */, 12850 /* Ta */, 14600 /* Tb */, 12975 /* Tc */, 12975 /* Td */, 12975 /* Te */, 14225 /* Tf */, 12600 /* Tg */, 14600 /* Th */, 14600 /* Ti */, 14600 /* Tj */, 14600 /* Tk */, 14600 /* Tl */, 13475 /* Tm */, 13475 /* Tn */, 12975 /* To */, 13475 /* Tp */, 12975 /* Tq */, 13475 /* Tr */, 12850 /* Ts */, 14600 /* Tt */, 13475 /* Tu */, 13975 /* Tv */, 13725 /* Tw */, 13725 /* Tx */, 13850 /* Ty */, 13350 /* Tz */, 14600 /* T{ */, 14600 /* T| */, 14600 /* T} */, 14600 /* T~ */}, + {17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U */, 17350 /* U! */, 17350 /* U" */, 17350 /* U# */, 17350 /* U$ */, 17350 /* U% */, 17100 /* U& */, 17350 /* U' */, 17350 /* U( */, 17350 /* U) */, 17350 /* U* */, 17350 /* U+ */, 16475 /* U, */, 17350 /* U- */, 16475 /* U. */, 16350 /* U/ */, 17350 /* U0 */, 17350 /* U1 */, 17350 /* U2 */, 17350 /* U3 */, 17350 /* U4 */, 17350 /* U5 */, 17350 /* U6 */, 17350 /* U7 */, 17350 /* U8 */, 17350 /* U9 */, 17350 /* U: */, 17350 /* U; */, 17350 /* U< */, 17350 /* U= */, 17350 /* U> */, 17350 /* U? */, 17350 /* U@ */, 16725 /* UA */, 17350 /* UB */, 17350 /* UC */, 17350 /* UD */, 17350 /* UE */, 17350 /* UF */, 17350 /* UG */, 17350 /* UH */, 17350 /* UI */, 16975 /* UJ */, 17350 /* UK */, 17350 /* UL */, 17350 /* UM */, 17350 /* UN */, 17350 /* UO */, 17350 /* UP */, 17350 /* UQ */, 17350 /* UR */, 17350 /* US */, 17350 /* UT */, 17350 /* UU */, 17350 /* UV */, 17350 /* UW */, 17350 /* UX */, 17350 /* UY */, 17350 /* UZ */, 17350 /* U[ */, 17350 /* U\ */, 17350 /* U] */, 17350 /* U^ */, 15600 /* U_ */, 17350 /* U` */, 17350 /* Ua */, 17350 /* Ub */, 17350 /* Uc */, 17350 /* Ud */, 17350 /* Ue */, 17350 /* Uf */, 17100 /* Ug */, 17350 /* Uh */, 17350 /* Ui */, 17350 /* Uj */, 17350 /* Uk */, 17350 /* Ul */, 17350 /* Um */, 17350 /* Un */, 17350 /* Uo */, 17350 /* Up */, 17350 /* Uq */, 17350 /* Ur */, 17350 /* Us */, 17350 /* Ut */, 17350 /* Uu */, 17350 /* Uv */, 17350 /* Uw */, 17350 /* Ux */, 17350 /* Uy */, 17350 /* Uz */, 17350 /* U{ */, 17350 /* U| */, 17350 /* U} */, 17350 /* U~ */}, + {16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V */, 16250 /* V! */, 16500 /* V" */, 16250 /* V# */, 16250 /* V$ */, 16250 /* V% */, 15375 /* V& */, 16500 /* V' */, 16250 /* V( */, 16750 /* V) */, 16500 /* V* */, 16250 /* V+ */, 14750 /* V, */, 15625 /* V- */, 14750 /* V. */, 14625 /* V/ */, 16250 /* V0 */, 16250 /* V1 */, 16250 /* V2 */, 16250 /* V3 */, 16250 /* V4 */, 16250 /* V5 */, 16250 /* V6 */, 16250 /* V7 */, 16250 /* V8 */, 16250 /* V9 */, 15500 /* V: */, 15500 /* V; */, 16250 /* V< */, 16250 /* V= */, 16250 /* V> */, 16625 /* V? */, 15500 /* V@ */, 14900 /* VA */, 16250 /* VB */, 15475 /* VC */, 16250 /* VD */, 16250 /* VE */, 16250 /* VF */, 15475 /* VG */, 16250 /* VH */, 16250 /* VI */, 14875 /* VJ */, 16250 /* VK */, 16250 /* VL */, 16250 /* VM */, 16250 /* VN */, 15475 /* VO */, 16250 /* VP */, 15475 /* VQ */, 16250 /* VR */, 15500 /* VS */, 16325 /* VT */, 16250 /* VU */, 16375 /* VV */, 16325 /* VW */, 16250 /* VX */, 16250 /* VY */, 16125 /* VZ */, 16250 /* V[ */, 16250 /* V\ */, 16250 /* V] */, 16250 /* V^ */, 14250 /* V_ */, 16250 /* V` */, 15250 /* Va */, 16250 /* Vb */, 15375 /* Vc */, 15375 /* Vd */, 15375 /* Ve */, 16250 /* Vf */, 15250 /* Vg */, 16250 /* Vh */, 16250 /* Vi */, 16125 /* Vj */, 16250 /* Vk */, 16250 /* Vl */, 15750 /* Vm */, 15750 /* Vn */, 15375 /* Vo */, 15750 /* Vp */, 15375 /* Vq */, 15750 /* Vr */, 15625 /* Vs */, 16250 /* Vt */, 15625 /* Vu */, 16000 /* Vv */, 16000 /* Vw */, 16000 /* Vx */, 16125 /* Vy */, 15875 /* Vz */, 16250 /* V{ */, 16250 /* V| */, 16250 /* V} */, 16250 /* V~ */}, + {24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W */, 24325 /* W! */, 24700 /* W" */, 24325 /* W# */, 24325 /* W$ */, 24325 /* W% */, 23450 /* W& */, 24700 /* W' */, 24325 /* W( */, 24575 /* W) */, 24700 /* W* */, 24325 /* W+ */, 23325 /* W, */, 24075 /* W- */, 23325 /* W. */, 23075 /* W/ */, 24325 /* W0 */, 24325 /* W1 */, 24325 /* W2 */, 24325 /* W3 */, 24325 /* W4 */, 24325 /* W5 */, 24325 /* W6 */, 24325 /* W7 */, 24325 /* W8 */, 24325 /* W9 */, 24325 /* W: */, 24325 /* W; */, 24325 /* W< */, 24325 /* W= */, 24325 /* W> */, 24325 /* W? */, 23825 /* W@ */, 23625 /* WA */, 24325 /* WB */, 23750 /* WC */, 24325 /* WD */, 24325 /* WE */, 24325 /* WF */, 23750 /* WG */, 24325 /* WH */, 24325 /* WI */, 23075 /* WJ */, 24325 /* WK */, 24325 /* WL */, 24325 /* WM */, 24325 /* WN */, 23750 /* WO */, 24325 /* WP */, 23750 /* WQ */, 24325 /* WR */, 24325 /* WS */, 24400 /* WT */, 24325 /* WU */, 24400 /* WV */, 24375 /* WW */, 24325 /* WX */, 24325 /* WY */, 24200 /* WZ */, 24325 /* W[ */, 24325 /* W\ */, 24325 /* W] */, 24325 /* W^ */, 23075 /* W_ */, 24325 /* W` */, 23575 /* Wa */, 24325 /* Wb */, 23700 /* Wc */, 23700 /* Wd */, 23700 /* We */, 24325 /* Wf */, 23825 /* Wg */, 24325 /* Wh */, 24325 /* Wi */, 24200 /* Wj */, 24325 /* Wk */, 24325 /* Wl */, 24075 /* Wm */, 24075 /* Wn */, 23700 /* Wo */, 24200 /* Wp */, 23700 /* Wq */, 24075 /* Wr */, 24075 /* Ws */, 24325 /* Wt */, 24200 /* Wu */, 24325 /* Wv */, 24075 /* Ww */, 24075 /* Wx */, 24325 /* Wy */, 24075 /* Wz */, 24325 /* W{ */, 24325 /* W| */, 24325 /* W} */, 24325 /* W~ */}, + {16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X */, 16825 /* X! */, 16825 /* X" */, 16825 /* X# */, 16825 /* X$ */, 16825 /* X% */, 16200 /* X& */, 16825 /* X' */, 16825 /* X( */, 16825 /* X) */, 16825 /* X* */, 16825 /* X+ */, 17075 /* X, */, 16075 /* X- */, 17075 /* X. */, 16825 /* X/ */, 16825 /* X0 */, 16825 /* X1 */, 16825 /* X2 */, 16825 /* X3 */, 16825 /* X4 */, 16825 /* X5 */, 16825 /* X6 */, 16825 /* X7 */, 16825 /* X8 */, 16825 /* X9 */, 16450 /* X: */, 16450 /* X; */, 16825 /* X< */, 16825 /* X= */, 16825 /* X> */, 16575 /* X? */, 16075 /* X@ */, 16950 /* XA */, 16825 /* XB */, 16075 /* XC */, 16825 /* XD */, 16825 /* XE */, 16825 /* XF */, 16075 /* XG */, 16825 /* XH */, 16825 /* XI */, 16325 /* XJ */, 16825 /* XK */, 16825 /* XL */, 16825 /* XM */, 16825 /* XN */, 16075 /* XO */, 16825 /* XP */, 16075 /* XQ */, 16825 /* XR */, 16825 /* XS */, 16825 /* XT */, 16825 /* XU */, 16825 /* XV */, 16825 /* XW */, 16825 /* XX */, 16825 /* XY */, 16825 /* XZ */, 16825 /* X[ */, 16825 /* X\ */, 16825 /* X] */, 16825 /* X^ */, 17325 /* X_ */, 16825 /* X` */, 16700 /* Xa */, 16825 /* Xb */, 16325 /* Xc */, 16325 /* Xd */, 16325 /* Xe */, 16825 /* Xf */, 16825 /* Xg */, 16825 /* Xh */, 16825 /* Xi */, 16825 /* Xj */, 16825 /* Xk */, 16825 /* Xl */, 16825 /* Xm */, 16825 /* Xn */, 16325 /* Xo */, 16825 /* Xp */, 16325 /* Xq */, 16825 /* Xr */, 16575 /* Xs */, 16325 /* Xt */, 16325 /* Xu */, 16450 /* Xv */, 16325 /* Xw */, 16825 /* Xx */, 16575 /* Xy */, 17075 /* Xz */, 16825 /* X{ */, 16825 /* X| */, 16825 /* X} */, 16825 /* X~ */}, + {16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y */, 16225 /* Y! */, 16350 /* Y" */, 16225 /* Y# */, 16225 /* Y$ */, 16225 /* Y% */, 14850 /* Y& */, 16350 /* Y' */, 16225 /* Y( */, 16725 /* Y) */, 16350 /* Y* */, 16225 /* Y+ */, 14475 /* Y, */, 14975 /* Y- */, 14475 /* Y. */, 13975 /* Y/ */, 16225 /* Y0 */, 16225 /* Y1 */, 16225 /* Y2 */, 16225 /* Y3 */, 16225 /* Y4 */, 16225 /* Y5 */, 16225 /* Y6 */, 16225 /* Y7 */, 16225 /* Y8 */, 16225 /* Y9 */, 14975 /* Y: */, 14975 /* Y; */, 16225 /* Y< */, 16225 /* Y= */, 16225 /* Y> */, 16225 /* Y? */, 15225 /* Y@ */, 14475 /* YA */, 16225 /* YB */, 14975 /* YC */, 16225 /* YD */, 16225 /* YE */, 16225 /* YF */, 14975 /* YG */, 16225 /* YH */, 16225 /* YI */, 14475 /* YJ */, 16225 /* YK */, 16225 /* YL */, 16225 /* YM */, 16225 /* YN */, 14975 /* YO */, 16225 /* YP */, 14975 /* YQ */, 16225 /* YR */, 15125 /* YS */, 16300 /* YT */, 16225 /* YU */, 16225 /* YV */, 16225 /* YW */, 16225 /* YX */, 16225 /* YY */, 16225 /* YZ */, 16225 /* Y[ */, 16225 /* Y\ */, 16225 /* Y] */, 16225 /* Y^ */, 13975 /* Y_ */, 16225 /* Y` */, 14600 /* Ya */, 15975 /* Yb */, 14725 /* Yc */, 14725 /* Yd */, 14725 /* Ye */, 15600 /* Yf */, 14700 /* Yg */, 15975 /* Yh */, 15975 /* Yi */, 15475 /* Yj */, 15975 /* Yk */, 16225 /* Yl */, 15100 /* Ym */, 15100 /* Yn */, 14725 /* Yo */, 14975 /* Yp */, 14725 /* Yq */, 15100 /* Yr */, 14725 /* Ys */, 15600 /* Yt */, 15225 /* Yu */, 15350 /* Yv */, 15225 /* Yw */, 15225 /* Yx */, 15350 /* Yy */, 14975 /* Yz */, 16225 /* Y{ */, 16225 /* Y| */, 16225 /* Y} */, 16225 /* Y~ */}, + {15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z */, 15175 /* Z! */, 15300 /* Z" */, 15175 /* Z# */, 15175 /* Z$ */, 15175 /* Z% */, 14925 /* Z& */, 15300 /* Z' */, 15175 /* Z( */, 15425 /* Z) */, 15300 /* Z* */, 15175 /* Z+ */, 15925 /* Z, */, 14175 /* Z- */, 15925 /* Z. */, 15175 /* Z/ */, 15175 /* Z0 */, 15175 /* Z1 */, 15175 /* Z2 */, 15175 /* Z3 */, 15175 /* Z4 */, 15175 /* Z5 */, 15175 /* Z6 */, 15175 /* Z7 */, 15175 /* Z8 */, 15175 /* Z9 */, 15175 /* Z: */, 15175 /* Z; */, 15175 /* Z< */, 15175 /* Z= */, 15175 /* Z> */, 15175 /* Z? */, 14800 /* Z@ */, 15175 /* ZA */, 15175 /* ZB */, 14725 /* ZC */, 15175 /* ZD */, 15175 /* ZE */, 15175 /* ZF */, 14725 /* ZG */, 15175 /* ZH */, 15175 /* ZI */, 15000 /* ZJ */, 15175 /* ZK */, 15175 /* ZL */, 15175 /* ZM */, 15175 /* ZN */, 14725 /* ZO */, 15175 /* ZP */, 14725 /* ZQ */, 15175 /* ZR */, 15175 /* ZS */, 15175 /* ZT */, 15175 /* ZU */, 14975 /* ZV */, 15050 /* ZW */, 15175 /* ZX */, 14925 /* ZY */, 15175 /* ZZ */, 15175 /* Z[ */, 15175 /* Z\ */, 15175 /* Z] */, 15175 /* Z^ */, 15550 /* Z_ */, 15175 /* Z` */, 15175 /* Za */, 15175 /* Zb */, 15050 /* Zc */, 15050 /* Zd */, 15050 /* Ze */, 15175 /* Zf */, 15175 /* Zg */, 15175 /* Zh */, 15175 /* Zi */, 15175 /* Zj */, 15175 /* Zk */, 15175 /* Zl */, 15175 /* Zm */, 15175 /* Zn */, 15050 /* Zo */, 15175 /* Zp */, 15050 /* Zq */, 15175 /* Zr */, 15175 /* Zs */, 14925 /* Zt */, 15050 /* Zu */, 15175 /* Zv */, 15175 /* Zw */, 15175 /* Zx */, 15050 /* Zy */, 15175 /* Zz */, 15175 /* Z{ */, 15175 /* Z| */, 15175 /* Z} */, 15175 /* Z~ */}, + {8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [ */, 8350 /* [! */, 8350 /* [" */, 8350 /* [# */, 8350 /* [$ */, 8350 /* [% */, 8350 /* [& */, 8350 /* [' */, 8350 /* [( */, 8350 /* [) */, 8350 /* [* */, 8350 /* [+ */, 8350 /* [, */, 8350 /* [- */, 8350 /* [. */, 8350 /* [/ */, 8350 /* [0 */, 8350 /* [1 */, 8350 /* [2 */, 8350 /* [3 */, 8350 /* [4 */, 8350 /* [5 */, 8350 /* [6 */, 8350 /* [7 */, 8350 /* [8 */, 8350 /* [9 */, 8350 /* [: */, 8350 /* [; */, 8350 /* [< */, 8350 /* [= */, 8350 /* [> */, 8350 /* [? */, 8350 /* [@ */, 8350 /* [A */, 8350 /* [B */, 8350 /* [C */, 8350 /* [D */, 8350 /* [E */, 8350 /* [F */, 8350 /* [G */, 8350 /* [H */, 8350 /* [I */, 8350 /* [J */, 8350 /* [K */, 8350 /* [L */, 8350 /* [M */, 8350 /* [N */, 8350 /* [O */, 8350 /* [P */, 8350 /* [Q */, 8350 /* [R */, 8350 /* [S */, 8350 /* [T */, 8350 /* [U */, 8350 /* [V */, 8350 /* [W */, 8350 /* [X */, 8350 /* [Y */, 8350 /* [Z */, 8350 /* [[ */, 8350 /* [\ */, 8350 /* [] */, 8350 /* [^ */, 8350 /* [_ */, 8350 /* [` */, 8350 /* [a */, 8350 /* [b */, 8350 /* [c */, 8350 /* [d */, 8350 /* [e */, 8350 /* [f */, 8350 /* [g */, 8350 /* [h */, 8350 /* [i */, 8600 /* [j */, 8350 /* [k */, 8350 /* [l */, 8350 /* [m */, 8350 /* [n */, 8350 /* [o */, 8350 /* [p */, 8350 /* [q */, 8350 /* [r */, 8350 /* [s */, 8350 /* [t */, 8350 /* [u */, 8350 /* [v */, 8350 /* [w */, 8350 /* [x */, 8350 /* [y */, 8350 /* [z */, 8350 /* [{ */, 8350 /* [| */, 8350 /* [} */, 8350 /* [~ */}, + {11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \ */, 11500 /* \! */, 11500 /* \" */, 11500 /* \# */, 11500 /* \$ */, 11500 /* \% */, 11500 /* \& */, 11500 /* \' */, 11500 /* \( */, 11500 /* \) */, 11500 /* \* */, 11500 /* \+ */, 11500 /* \, */, 11500 /* \- */, 11500 /* \. */, 11500 /* \/ */, 11500 /* \0 */, 11500 /* \1 */, 11500 /* \2 */, 11500 /* \3 */, 11500 /* \4 */, 11500 /* \5 */, 11500 /* \6 */, 11500 /* \7 */, 11500 /* \8 */, 11500 /* \9 */, 11500 /* \: */, 11500 /* \; */, 11500 /* \< */, 11500 /* \= */, 11500 /* \> */, 11500 /* \? */, 11500 /* \@ */, 11500 /* \A */, 11500 /* \B */, 11500 /* \C */, 11500 /* \D */, 11500 /* \E */, 11500 /* \F */, 11500 /* \G */, 11500 /* \H */, 11500 /* \I */, 11500 /* \J */, 11500 /* \K */, 11500 /* \L */, 11500 /* \M */, 11500 /* \N */, 11500 /* \O */, 11500 /* \P */, 11500 /* \Q */, 11500 /* \R */, 11500 /* \S */, 11500 /* \T */, 11500 /* \U */, 11500 /* \V */, 11500 /* \W */, 11500 /* \X */, 11500 /* \Y */, 11500 /* \Z */, 11500 /* \[ */, 11500 /* \\ */, 11500 /* \] */, 11500 /* \^ */, 11500 /* \_ */, 11500 /* \` */, 11500 /* \a */, 11500 /* \b */, 11500 /* \c */, 11500 /* \d */, 11500 /* \e */, 11500 /* \f */, 11500 /* \g */, 11500 /* \h */, 11500 /* \i */, 11500 /* \j */, 11500 /* \k */, 11500 /* \l */, 11500 /* \m */, 11500 /* \n */, 11500 /* \o */, 11500 /* \p */, 11500 /* \q */, 11500 /* \r */, 11500 /* \s */, 11500 /* \t */, 11500 /* \u */, 11500 /* \v */, 11500 /* \w */, 11500 /* \x */, 11500 /* \y */, 11500 /* \z */, 11500 /* \{ */, 11500 /* \| */, 11500 /* \} */, 11500 /* \~ */}, + {8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ] */, 8350 /* ]! */, 8350 /* ]" */, 8350 /* ]# */, 8350 /* ]$ */, 8350 /* ]% */, 8350 /* ]& */, 8350 /* ]' */, 8350 /* ]( */, 8350 /* ]) */, 8350 /* ]* */, 8350 /* ]+ */, 8350 /* ], */, 8350 /* ]- */, 8350 /* ]. */, 8350 /* ]/ */, 8350 /* ]0 */, 8350 /* ]1 */, 8350 /* ]2 */, 8350 /* ]3 */, 8350 /* ]4 */, 8350 /* ]5 */, 8350 /* ]6 */, 8350 /* ]7 */, 8350 /* ]8 */, 8350 /* ]9 */, 8350 /* ]: */, 8350 /* ]; */, 8350 /* ]< */, 8350 /* ]= */, 8350 /* ]> */, 8350 /* ]? */, 8350 /* ]@ */, 8350 /* ]A */, 8350 /* ]B */, 8350 /* ]C */, 8350 /* ]D */, 8350 /* ]E */, 8350 /* ]F */, 8350 /* ]G */, 8350 /* ]H */, 8350 /* ]I */, 8350 /* ]J */, 8350 /* ]K */, 8350 /* ]L */, 8350 /* ]M */, 8350 /* ]N */, 8350 /* ]O */, 8350 /* ]P */, 8350 /* ]Q */, 8350 /* ]R */, 8350 /* ]S */, 8350 /* ]T */, 8350 /* ]U */, 8350 /* ]V */, 8350 /* ]W */, 8350 /* ]X */, 8350 /* ]Y */, 8350 /* ]Z */, 8350 /* ][ */, 8350 /* ]\ */, 8350 /* ]] */, 8350 /* ]^ */, 8350 /* ]_ */, 8350 /* ]` */, 8350 /* ]a */, 8350 /* ]b */, 8350 /* ]c */, 8350 /* ]d */, 8350 /* ]e */, 8350 /* ]f */, 8350 /* ]g */, 8350 /* ]h */, 8350 /* ]i */, 8350 /* ]j */, 8350 /* ]k */, 8350 /* ]l */, 8350 /* ]m */, 8350 /* ]n */, 8350 /* ]o */, 8350 /* ]p */, 8350 /* ]q */, 8350 /* ]r */, 8350 /* ]s */, 8350 /* ]t */, 8350 /* ]u */, 8350 /* ]v */, 8350 /* ]w */, 8350 /* ]x */, 8350 /* ]y */, 8350 /* ]z */, 8350 /* ]{ */, 8350 /* ]| */, 8350 /* ]} */, 8350 /* ]~ */}, + {15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^ */, 15000 /* ^! */, 15000 /* ^" */, 15000 /* ^# */, 15000 /* ^$ */, 15000 /* ^% */, 15000 /* ^& */, 15000 /* ^' */, 15000 /* ^( */, 15000 /* ^) */, 15000 /* ^* */, 15000 /* ^+ */, 15000 /* ^, */, 15000 /* ^- */, 15000 /* ^. */, 15000 /* ^/ */, 15000 /* ^0 */, 15000 /* ^1 */, 15000 /* ^2 */, 15000 /* ^3 */, 15000 /* ^4 */, 15000 /* ^5 */, 15000 /* ^6 */, 15000 /* ^7 */, 15000 /* ^8 */, 15000 /* ^9 */, 15000 /* ^: */, 15000 /* ^; */, 15000 /* ^< */, 15000 /* ^= */, 15000 /* ^> */, 15000 /* ^? */, 15000 /* ^@ */, 15000 /* ^A */, 15000 /* ^B */, 15000 /* ^C */, 15000 /* ^D */, 15000 /* ^E */, 15000 /* ^F */, 15000 /* ^G */, 15000 /* ^H */, 15000 /* ^I */, 15000 /* ^J */, 15000 /* ^K */, 15000 /* ^L */, 15000 /* ^M */, 15000 /* ^N */, 15000 /* ^O */, 15000 /* ^P */, 15000 /* ^Q */, 15000 /* ^R */, 15000 /* ^S */, 15000 /* ^T */, 15000 /* ^U */, 15000 /* ^V */, 15000 /* ^W */, 15000 /* ^X */, 15000 /* ^Y */, 15000 /* ^Z */, 15000 /* ^[ */, 15000 /* ^\ */, 15000 /* ^] */, 15000 /* ^^ */, 15000 /* ^_ */, 15000 /* ^` */, 15000 /* ^a */, 15000 /* ^b */, 15000 /* ^c */, 15000 /* ^d */, 15000 /* ^e */, 15000 /* ^f */, 15000 /* ^g */, 15000 /* ^h */, 15000 /* ^i */, 15000 /* ^j */, 15000 /* ^k */, 15000 /* ^l */, 15000 /* ^m */, 15000 /* ^n */, 15000 /* ^o */, 15000 /* ^p */, 15000 /* ^q */, 15000 /* ^r */, 15000 /* ^s */, 15000 /* ^t */, 15000 /* ^u */, 15000 /* ^v */, 15000 /* ^w */, 15000 /* ^x */, 15000 /* ^y */, 15000 /* ^z */, 15000 /* ^{ */, 15000 /* ^| */, 15000 /* ^} */, 15000 /* ^~ */}, + {13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _ */, 13900 /* _! */, 13900 /* _" */, 13900 /* _# */, 13900 /* _$ */, 13900 /* _% */, 13900 /* _& */, 13900 /* _' */, 13900 /* _( */, 13900 /* _) */, 13900 /* _* */, 13900 /* _+ */, 13900 /* _, */, 13900 /* _- */, 13900 /* _. */, 13900 /* _/ */, 13900 /* _0 */, 13900 /* _1 */, 13900 /* _2 */, 13900 /* _3 */, 13900 /* _4 */, 13900 /* _5 */, 13900 /* _6 */, 13900 /* _7 */, 13900 /* _8 */, 13900 /* _9 */, 13900 /* _: */, 13900 /* _; */, 13900 /* _< */, 13900 /* _= */, 13900 /* _> */, 13900 /* _? */, 13900 /* _@ */, 14275 /* _A */, 13900 /* _B */, 11400 /* _C */, 13900 /* _D */, 13900 /* _E */, 13900 /* _F */, 11400 /* _G */, 13900 /* _H */, 13900 /* _I */, 12650 /* _J */, 13900 /* _K */, 13900 /* _L */, 13900 /* _M */, 13900 /* _N */, 11400 /* _O */, 13900 /* _P */, 11400 /* _Q */, 13900 /* _R */, 12400 /* _S */, 11900 /* _T */, 12150 /* _U */, 11900 /* _V */, 12650 /* _W */, 14400 /* _X */, 11650 /* _Y */, 14525 /* _Z */, 13900 /* _[ */, 13900 /* _\ */, 13900 /* _] */, 13900 /* _^ */, 13900 /* __ */, 13900 /* _` */, 13150 /* _a */, 13900 /* _b */, 12400 /* _c */, 12650 /* _d */, 12400 /* _e */, 13275 /* _f */, 14525 /* _g */, 13900 /* _h */, 13900 /* _i */, 15275 /* _j */, 13900 /* _k */, 12525 /* _l */, 13900 /* _m */, 13900 /* _n */, 12400 /* _o */, 14150 /* _p */, 12650 /* _q */, 13900 /* _r */, 12900 /* _s */, 12275 /* _t */, 13025 /* _u */, 12150 /* _v */, 12650 /* _w */, 14400 /* _x */, 13525 /* _y */, 14025 /* _z */, 13900 /* _{ */, 13900 /* _| */, 13900 /* _} */, 13900 /* _~ */}, + {15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* ` */, 15000 /* `! */, 15000 /* `" */, 15000 /* `# */, 15000 /* `$ */, 15000 /* `% */, 15000 /* `& */, 15000 /* `' */, 15000 /* `( */, 15000 /* `) */, 15000 /* `* */, 15000 /* `+ */, 15000 /* `, */, 15000 /* `- */, 15000 /* `. */, 15000 /* `/ */, 15000 /* `0 */, 15000 /* `1 */, 15000 /* `2 */, 15000 /* `3 */, 15000 /* `4 */, 15000 /* `5 */, 15000 /* `6 */, 15000 /* `7 */, 15000 /* `8 */, 15000 /* `9 */, 15000 /* `: */, 15000 /* `; */, 15000 /* `< */, 15000 /* `= */, 15000 /* `> */, 15000 /* `? */, 15000 /* `@ */, 15000 /* `A */, 15000 /* `B */, 15000 /* `C */, 15000 /* `D */, 15000 /* `E */, 15000 /* `F */, 15000 /* `G */, 15000 /* `H */, 15000 /* `I */, 15000 /* `J */, 15000 /* `K */, 15000 /* `L */, 15000 /* `M */, 15000 /* `N */, 15000 /* `O */, 15000 /* `P */, 15000 /* `Q */, 15000 /* `R */, 15000 /* `S */, 15000 /* `T */, 15000 /* `U */, 15000 /* `V */, 15000 /* `W */, 15000 /* `X */, 15000 /* `Y */, 15000 /* `Z */, 15000 /* `[ */, 15000 /* `\ */, 15000 /* `] */, 15000 /* `^ */, 15000 /* `_ */, 15000 /* `` */, 15000 /* `a */, 15000 /* `b */, 15000 /* `c */, 15000 /* `d */, 15000 /* `e */, 15000 /* `f */, 15000 /* `g */, 15000 /* `h */, 15000 /* `i */, 15000 /* `j */, 15000 /* `k */, 15000 /* `l */, 15000 /* `m */, 15000 /* `n */, 15000 /* `o */, 15000 /* `p */, 15000 /* `q */, 15000 /* `r */, 15000 /* `s */, 15000 /* `t */, 15000 /* `u */, 15000 /* `v */, 15000 /* `w */, 15000 /* `x */, 15000 /* `y */, 15000 /* `z */, 15000 /* `{ */, 15000 /* `| */, 15000 /* `} */, 15000 /* `~ */}, + {14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a */, 14225 /* a! */, 13850 /* a" */, 14225 /* a# */, 14225 /* a$ */, 14225 /* a% */, 14225 /* a& */, 13850 /* a' */, 14225 /* a( */, 14225 /* a) */, 13850 /* a* */, 14225 /* a+ */, 14475 /* a, */, 14100 /* a- */, 14475 /* a. */, 14725 /* a/ */, 14225 /* a0 */, 14225 /* a1 */, 14225 /* a2 */, 14225 /* a3 */, 14225 /* a4 */, 14225 /* a5 */, 14225 /* a6 */, 14225 /* a7 */, 14225 /* a8 */, 14225 /* a9 */, 14225 /* a: */, 14225 /* a; */, 14225 /* a< */, 14225 /* a= */, 14225 /* a> */, 14225 /* a? */, 14225 /* a@ */, 14425 /* aA */, 14225 /* aB */, 14225 /* aC */, 14225 /* aD */, 14225 /* aE */, 14225 /* aF */, 14225 /* aG */, 14225 /* aH */, 14225 /* aI */, 14225 /* aJ */, 14225 /* aK */, 14225 /* aL */, 14225 /* aM */, 14225 /* aN */, 14225 /* aO */, 14225 /* aP */, 14225 /* aQ */, 14225 /* aR */, 14225 /* aS */, 12475 /* aT */, 14225 /* aU */, 13475 /* aV */, 13975 /* aW */, 14225 /* aX */, 13100 /* aY */, 14375 /* aZ */, 14225 /* a[ */, 14225 /* a\ */, 14225 /* a] */, 14225 /* a^ */, 14475 /* a_ */, 14225 /* a` */, 14225 /* aa */, 14225 /* ab */, 14225 /* ac */, 14225 /* ad */, 14225 /* ae */, 14225 /* af */, 14225 /* ag */, 14225 /* ah */, 14225 /* ai */, 14225 /* aj */, 14225 /* ak */, 14225 /* al */, 14225 /* am */, 14225 /* an */, 14225 /* ao */, 14225 /* ap */, 14225 /* aq */, 14225 /* ar */, 14225 /* as */, 14075 /* at */, 14225 /* au */, 13975 /* av */, 14075 /* aw */, 14225 /* ax */, 14000 /* ay */, 14225 /* az */, 14225 /* a{ */, 14225 /* a| */, 14225 /* a} */, 14225 /* a~ */}, + {15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b */, 15200 /* b! */, 14700 /* b" */, 15200 /* b# */, 15200 /* b$ */, 15200 /* b% */, 15200 /* b& */, 14700 /* b' */, 15200 /* b( */, 15200 /* b) */, 14700 /* b* */, 15200 /* b+ */, 14825 /* b, */, 15450 /* b- */, 14825 /* b. */, 15200 /* b/ */, 15200 /* b0 */, 15200 /* b1 */, 15200 /* b2 */, 15200 /* b3 */, 15200 /* b4 */, 15200 /* b5 */, 15200 /* b6 */, 15200 /* b7 */, 15200 /* b8 */, 15200 /* b9 */, 15200 /* b: */, 15200 /* b; */, 15200 /* b< */, 15200 /* b= */, 15200 /* b> */, 15200 /* b? */, 15200 /* b@ */, 15200 /* bA */, 15200 /* bB */, 15200 /* bC */, 15200 /* bD */, 15200 /* bE */, 15200 /* bF */, 15200 /* bG */, 15200 /* bH */, 15075 /* bI */, 15200 /* bJ */, 15200 /* bK */, 15200 /* bL */, 15200 /* bM */, 15200 /* bN */, 15200 /* bO */, 15200 /* bP */, 15200 /* bQ */, 15200 /* bR */, 15200 /* bS */, 13575 /* bT */, 15200 /* bU */, 14325 /* bV */, 14575 /* bW */, 14700 /* bX */, 13700 /* bY */, 15075 /* bZ */, 15200 /* b[ */, 15200 /* b\ */, 15200 /* b] */, 15200 /* b^ */, 13950 /* b_ */, 15200 /* b` */, 15200 /* ba */, 15200 /* bb */, 15200 /* bc */, 15200 /* bd */, 15200 /* be */, 15050 /* bf */, 15200 /* bg */, 15200 /* bh */, 15200 /* bi */, 15200 /* bj */, 15200 /* bk */, 15200 /* bl */, 15200 /* bm */, 15200 /* bn */, 15200 /* bo */, 15200 /* bp */, 15200 /* bq */, 15200 /* br */, 15200 /* bs */, 15050 /* bt */, 15200 /* bu */, 15000 /* bv */, 14950 /* bw */, 14800 /* bx */, 14950 /* by */, 15000 /* bz */, 15200 /* b{ */, 15200 /* b| */, 15200 /* b} */, 15200 /* b~ */}, + {12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c */, 12925 /* c! */, 12925 /* c" */, 12925 /* c# */, 12925 /* c$ */, 12925 /* c% */, 12925 /* c& */, 12925 /* c' */, 12925 /* c( */, 12925 /* c) */, 12925 /* c* */, 12925 /* c+ */, 12925 /* c, */, 12925 /* c- */, 12925 /* c. */, 12800 /* c/ */, 12925 /* c0 */, 12925 /* c1 */, 12925 /* c2 */, 12925 /* c3 */, 12925 /* c4 */, 12925 /* c5 */, 12925 /* c6 */, 12925 /* c7 */, 12925 /* c8 */, 12925 /* c9 */, 12925 /* c: */, 12925 /* c; */, 12925 /* c< */, 12925 /* c= */, 12925 /* c> */, 12925 /* c? */, 12925 /* c@ */, 13125 /* cA */, 12925 /* cB */, 12925 /* cC */, 12925 /* cD */, 12925 /* cE */, 12925 /* cF */, 12925 /* cG */, 12925 /* cH */, 12925 /* cI */, 13050 /* cJ */, 12925 /* cK */, 12925 /* cL */, 12925 /* cM */, 12925 /* cN */, 12925 /* cO */, 12925 /* cP */, 12925 /* cQ */, 12925 /* cR */, 12925 /* cS */, 11775 /* cT */, 12925 /* cU */, 12250 /* cV */, 12675 /* cW */, 12925 /* cX */, 11625 /* cY */, 13075 /* cZ */, 12925 /* c[ */, 12925 /* c\ */, 12925 /* c] */, 12925 /* c^ */, 11925 /* c_ */, 12925 /* c` */, 12925 /* ca */, 12925 /* cb */, 12800 /* cc */, 12800 /* cd */, 12800 /* ce */, 12925 /* cf */, 12925 /* cg */, 12925 /* ch */, 12925 /* ci */, 12925 /* cj */, 12925 /* ck */, 12925 /* cl */, 12925 /* cm */, 12925 /* cn */, 12800 /* co */, 12925 /* cp */, 12800 /* cq */, 12925 /* cr */, 12925 /* cs */, 12925 /* ct */, 12925 /* cu */, 12925 /* cv */, 12925 /* cw */, 12925 /* cx */, 12925 /* cy */, 12925 /* cz */, 12925 /* c{ */, 12925 /* c| */, 12925 /* c} */, 12925 /* c~ */}, + {15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d */, 15200 /* d! */, 15200 /* d" */, 15200 /* d# */, 15200 /* d$ */, 15200 /* d% */, 15200 /* d& */, 15200 /* d' */, 15200 /* d( */, 15200 /* d) */, 15200 /* d* */, 15200 /* d+ */, 15200 /* d, */, 15200 /* d- */, 15200 /* d. */, 15200 /* d/ */, 15200 /* d0 */, 15200 /* d1 */, 15200 /* d2 */, 15200 /* d3 */, 15200 /* d4 */, 15200 /* d5 */, 15200 /* d6 */, 15200 /* d7 */, 15200 /* d8 */, 15200 /* d9 */, 15200 /* d: */, 15200 /* d; */, 15200 /* d< */, 15200 /* d= */, 15200 /* d> */, 15200 /* d? */, 15200 /* d@ */, 15200 /* dA */, 15200 /* dB */, 15200 /* dC */, 15200 /* dD */, 15200 /* dE */, 15200 /* dF */, 15200 /* dG */, 15200 /* dH */, 15200 /* dI */, 15200 /* dJ */, 15200 /* dK */, 15200 /* dL */, 15200 /* dM */, 15200 /* dN */, 15200 /* dO */, 15200 /* dP */, 15200 /* dQ */, 15200 /* dR */, 15200 /* dS */, 15200 /* dT */, 15200 /* dU */, 15200 /* dV */, 15200 /* dW */, 15200 /* dX */, 15200 /* dY */, 15200 /* dZ */, 15200 /* d[ */, 15200 /* d\ */, 15200 /* d] */, 15200 /* d^ */, 15200 /* d_ */, 15200 /* d` */, 15200 /* da */, 15200 /* db */, 15200 /* dc */, 15200 /* dd */, 15200 /* de */, 15200 /* df */, 15200 /* dg */, 15200 /* dh */, 15200 /* di */, 15200 /* dj */, 15200 /* dk */, 15200 /* dl */, 15200 /* dm */, 15200 /* dn */, 15200 /* do */, 15200 /* dp */, 15200 /* dq */, 15200 /* dr */, 15200 /* ds */, 15200 /* dt */, 15200 /* du */, 15200 /* dv */, 15200 /* dw */, 15200 /* dx */, 15200 /* dy */, 15200 /* dz */, 15200 /* d{ */, 15200 /* d| */, 15200 /* d} */, 15200 /* d~ */}, + {14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e */, 14050 /* e! */, 13550 /* e" */, 14050 /* e# */, 14050 /* e$ */, 14050 /* e% */, 14050 /* e& */, 13550 /* e' */, 14050 /* e( */, 14050 /* e) */, 13550 /* e* */, 14050 /* e+ */, 13675 /* e, */, 14300 /* e- */, 13675 /* e. */, 14050 /* e/ */, 14050 /* e0 */, 14050 /* e1 */, 14050 /* e2 */, 14050 /* e3 */, 14050 /* e4 */, 14050 /* e5 */, 14050 /* e6 */, 14050 /* e7 */, 14050 /* e8 */, 14050 /* e9 */, 14050 /* e: */, 14050 /* e; */, 14050 /* e< */, 14050 /* e= */, 14050 /* e> */, 14050 /* e? */, 14050 /* e@ */, 14050 /* eA */, 14050 /* eB */, 14050 /* eC */, 14050 /* eD */, 14050 /* eE */, 14050 /* eF */, 14050 /* eG */, 14050 /* eH */, 13925 /* eI */, 14050 /* eJ */, 14050 /* eK */, 14050 /* eL */, 14050 /* eM */, 14050 /* eN */, 14050 /* eO */, 14050 /* eP */, 14050 /* eQ */, 14050 /* eR */, 13800 /* eS */, 12425 /* eT */, 14050 /* eU */, 13175 /* eV */, 13550 /* eW */, 13550 /* eX */, 12550 /* eY */, 13925 /* eZ */, 14050 /* e[ */, 14050 /* e\ */, 14050 /* e] */, 14050 /* e^ */, 12550 /* e_ */, 14050 /* e` */, 14050 /* ea */, 14050 /* eb */, 14050 /* ec */, 14050 /* ed */, 14050 /* ee */, 14050 /* ef */, 14050 /* eg */, 14050 /* eh */, 14050 /* ei */, 14050 /* ej */, 14050 /* ek */, 14050 /* el */, 14050 /* em */, 14050 /* en */, 14050 /* eo */, 14050 /* ep */, 14050 /* eq */, 14050 /* er */, 14050 /* es */, 14050 /* et */, 14050 /* eu */, 13800 /* ev */, 13925 /* ew */, 13650 /* ex */, 13875 /* ey */, 13925 /* ez */, 14050 /* e{ */, 14050 /* e| */, 14050 /* e} */, 14050 /* e~ */}, + {9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9025 /* f */, 9525 /* f! */, 9775 /* f" */, 9025 /* f# */, 9025 /* f$ */, 9025 /* f% */, 8650 /* f& */, 9775 /* f' */, 9025 /* f( */, 9650 /* f) */, 9775 /* f* */, 9025 /* f+ */, 8275 /* f, */, 9025 /* f- */, 8275 /* f. */, 8525 /* f/ */, 9025 /* f0 */, 9025 /* f1 */, 9025 /* f2 */, 9025 /* f3 */, 9025 /* f4 */, 9025 /* f5 */, 9025 /* f6 */, 9025 /* f7 */, 9025 /* f8 */, 9025 /* f9 */, 9025 /* f: */, 9025 /* f; */, 9025 /* f< */, 9025 /* f= */, 9025 /* f> */, 9775 /* f? */, 9025 /* f@ */, 8875 /* fA */, 9025 /* fB */, 9400 /* fC */, 9025 /* fD */, 9025 /* fE */, 9025 /* fF */, 9400 /* fG */, 9025 /* fH */, 9025 /* fI */, 8450 /* fJ */, 9025 /* fK */, 9025 /* fL */, 9025 /* fM */, 9025 /* fN */, 9400 /* fO */, 9025 /* fP */, 9400 /* fQ */, 9025 /* fR */, 9025 /* fS */, 9650 /* fT */, 9025 /* fU */, 9900 /* fV */, 9650 /* fW */, 9375 /* fX */, 9775 /* fY */, 9075 /* fZ */, 9025 /* f[ */, 9025 /* f\ */, 9400 /* f] */, 9025 /* f^ */, 7475 /* f_ */, 9025 /* f` */, 9025 /* fa */, 9025 /* fb */, 8925 /* fc */, 8925 /* fd */, 8925 /* fe */, 9125 /* ff */, 8925 /* fg */, 9025 /* fh */, 9025 /* fi */, 9025 /* fj */, 9025 /* fk */, 9025 /* fl */, 9025 /* fm */, 9025 /* fn */, 8925 /* fo */, 9025 /* fp */, 8925 /* fq */, 9025 /* fr */, 9025 /* fs */, 9025 /* ft */, 9025 /* fu */, 9275 /* fv */, 9025 /* fw */, 9025 /* fx */, 9275 /* fy */, 9025 /* fz */, 9025 /* f{ */, 9025 /* f| */, 9400 /* f} */, 9025 /* f~ */}, + {13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g */, 13800 /* g! */, 13925 /* g" */, 13800 /* g# */, 13800 /* g$ */, 13800 /* g% */, 13675 /* g& */, 13925 /* g' */, 13800 /* g( */, 14475 /* g) */, 13925 /* g* */, 13800 /* g+ */, 13950 /* g, */, 13800 /* g- */, 13950 /* g. */, 14375 /* g/ */, 13800 /* g0 */, 13800 /* g1 */, 13800 /* g2 */, 13800 /* g3 */, 13800 /* g4 */, 13800 /* g5 */, 13800 /* g6 */, 13800 /* g7 */, 13800 /* g8 */, 13800 /* g9 */, 13800 /* g: */, 13800 /* g; */, 13800 /* g< */, 13800 /* g= */, 13800 /* g> */, 13800 /* g? */, 13800 /* g@ */, 14425 /* gA */, 13800 /* gB */, 13800 /* gC */, 13800 /* gD */, 13800 /* gE */, 13800 /* gF */, 13800 /* gG */, 13800 /* gH */, 13800 /* gI */, 13575 /* gJ */, 13800 /* gK */, 13800 /* gL */, 13800 /* gM */, 13800 /* gN */, 13800 /* gO */, 13800 /* gP */, 13800 /* gQ */, 13800 /* gR */, 13800 /* gS */, 13575 /* gT */, 13800 /* gU */, 13625 /* gV */, 13800 /* gW */, 14075 /* gX */, 13600 /* gY */, 14050 /* gZ */, 13800 /* g[ */, 13800 /* g\ */, 14100 /* g] */, 13800 /* g^ */, 15200 /* g_ */, 13800 /* g` */, 13750 /* ga */, 13800 /* gb */, 13650 /* gc */, 13650 /* gd */, 13650 /* ge */, 13800 /* gf */, 13975 /* gg */, 13800 /* gh */, 13800 /* gi */, 14500 /* gj */, 13800 /* gk */, 13800 /* gl */, 13800 /* gm */, 13800 /* gn */, 13650 /* go */, 13800 /* gp */, 13650 /* gq */, 13800 /* gr */, 13800 /* gs */, 13800 /* gt */, 13700 /* gu */, 13800 /* gv */, 13800 /* gw */, 13800 /* gx */, 13925 /* gy */, 13800 /* gz */, 13800 /* g{ */, 13800 /* g| */, 14100 /* g} */, 13800 /* g~ */}, + {14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h */, 14900 /* h! */, 14525 /* h" */, 14900 /* h# */, 14900 /* h$ */, 14900 /* h% */, 14900 /* h& */, 14525 /* h' */, 14900 /* h( */, 14900 /* h) */, 14525 /* h* */, 14900 /* h+ */, 14900 /* h, */, 14900 /* h- */, 14900 /* h. */, 14900 /* h/ */, 14900 /* h0 */, 14900 /* h1 */, 14900 /* h2 */, 14900 /* h3 */, 14900 /* h4 */, 14900 /* h5 */, 14900 /* h6 */, 14900 /* h7 */, 14900 /* h8 */, 14900 /* h9 */, 14900 /* h: */, 14900 /* h; */, 14900 /* h< */, 14900 /* h= */, 14900 /* h> */, 14900 /* h? */, 14900 /* h@ */, 14900 /* hA */, 14900 /* hB */, 14900 /* hC */, 14900 /* hD */, 14900 /* hE */, 14900 /* hF */, 14900 /* hG */, 14900 /* hH */, 14900 /* hI */, 14900 /* hJ */, 14900 /* hK */, 14900 /* hL */, 14900 /* hM */, 14900 /* hN */, 14900 /* hO */, 14900 /* hP */, 14900 /* hQ */, 14900 /* hR */, 14900 /* hS */, 13525 /* hT */, 14900 /* hU */, 14025 /* hV */, 14275 /* hW */, 14900 /* hX */, 13525 /* hY */, 14900 /* hZ */, 14900 /* h[ */, 14900 /* h\ */, 14900 /* h] */, 14900 /* h^ */, 14900 /* h_ */, 14900 /* h` */, 14900 /* ha */, 14900 /* hb */, 14900 /* hc */, 14900 /* hd */, 14900 /* he */, 14900 /* hf */, 14900 /* hg */, 14900 /* hh */, 14900 /* hi */, 14900 /* hj */, 14900 /* hk */, 14900 /* hl */, 14900 /* hm */, 14900 /* hn */, 14900 /* ho */, 14900 /* hp */, 14900 /* hq */, 14900 /* hr */, 14900 /* hs */, 14900 /* ht */, 14900 /* hu */, 14700 /* hv */, 14750 /* hw */, 14900 /* hx */, 14700 /* hy */, 14900 /* hz */, 14900 /* h{ */, 14900 /* h| */, 14900 /* h} */, 14900 /* h~ */}, + {7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i */, 7150 /* i! */, 7150 /* i" */, 7150 /* i# */, 7150 /* i$ */, 7150 /* i% */, 7150 /* i& */, 7150 /* i' */, 7150 /* i( */, 7150 /* i) */, 7150 /* i* */, 7150 /* i+ */, 7150 /* i, */, 7150 /* i- */, 7150 /* i. */, 7150 /* i/ */, 7150 /* i0 */, 7150 /* i1 */, 7150 /* i2 */, 7150 /* i3 */, 7150 /* i4 */, 7150 /* i5 */, 7150 /* i6 */, 7150 /* i7 */, 7150 /* i8 */, 7150 /* i9 */, 7150 /* i: */, 7150 /* i; */, 7150 /* i< */, 7150 /* i= */, 7150 /* i> */, 7150 /* i? */, 7150 /* i@ */, 7150 /* iA */, 7150 /* iB */, 7150 /* iC */, 7150 /* iD */, 7150 /* iE */, 7150 /* iF */, 7150 /* iG */, 7150 /* iH */, 7150 /* iI */, 6900 /* iJ */, 7150 /* iK */, 7150 /* iL */, 7150 /* iM */, 7150 /* iN */, 7150 /* iO */, 7150 /* iP */, 7150 /* iQ */, 7150 /* iR */, 7150 /* iS */, 7150 /* iT */, 7150 /* iU */, 7150 /* iV */, 7150 /* iW */, 7150 /* iX */, 6900 /* iY */, 7150 /* iZ */, 7150 /* i[ */, 7150 /* i\ */, 7150 /* i] */, 7150 /* i^ */, 7150 /* i_ */, 7150 /* i` */, 7150 /* ia */, 7150 /* ib */, 7150 /* ic */, 7150 /* id */, 7150 /* ie */, 7150 /* if */, 7150 /* ig */, 7150 /* ih */, 7150 /* ii */, 7150 /* ij */, 7150 /* ik */, 7150 /* il */, 7150 /* im */, 7150 /* in */, 7150 /* io */, 7150 /* ip */, 7150 /* iq */, 7150 /* ir */, 7150 /* is */, 7150 /* it */, 7150 /* iu */, 7150 /* iv */, 7150 /* iw */, 7150 /* ix */, 7150 /* iy */, 7150 /* iz */, 7150 /* i{ */, 7150 /* i| */, 7150 /* i} */, 7150 /* i~ */}, + {7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j */, 7150 /* j! */, 7150 /* j" */, 7150 /* j# */, 7150 /* j$ */, 7150 /* j% */, 7150 /* j& */, 7150 /* j' */, 7150 /* j( */, 7150 /* j) */, 7150 /* j* */, 7150 /* j+ */, 7150 /* j, */, 7150 /* j- */, 7150 /* j. */, 7150 /* j/ */, 7150 /* j0 */, 7150 /* j1 */, 7150 /* j2 */, 7150 /* j3 */, 7150 /* j4 */, 7150 /* j5 */, 7150 /* j6 */, 7150 /* j7 */, 7150 /* j8 */, 7150 /* j9 */, 7150 /* j: */, 7150 /* j; */, 7150 /* j< */, 7150 /* j= */, 7150 /* j> */, 7150 /* j? */, 7150 /* j@ */, 7150 /* jA */, 7150 /* jB */, 7150 /* jC */, 7150 /* jD */, 7150 /* jE */, 7150 /* jF */, 7150 /* jG */, 7150 /* jH */, 7150 /* jI */, 7150 /* jJ */, 7150 /* jK */, 7150 /* jL */, 7150 /* jM */, 7150 /* jN */, 7150 /* jO */, 7150 /* jP */, 7150 /* jQ */, 7150 /* jR */, 7150 /* jS */, 6150 /* jT */, 7150 /* jU */, 6525 /* jV */, 6900 /* jW */, 7150 /* jX */, 7150 /* jY */, 7150 /* jZ */, 7150 /* j[ */, 7150 /* j\ */, 7150 /* j] */, 7150 /* j^ */, 7150 /* j_ */, 7150 /* j` */, 7150 /* ja */, 7150 /* jb */, 7150 /* jc */, 7150 /* jd */, 7150 /* je */, 7150 /* jf */, 7150 /* jg */, 7150 /* jh */, 7150 /* ji */, 7150 /* jj */, 7150 /* jk */, 7150 /* jl */, 7150 /* jm */, 7150 /* jn */, 7150 /* jo */, 7150 /* jp */, 7150 /* jq */, 7150 /* jr */, 7150 /* js */, 7150 /* jt */, 7150 /* ju */, 7150 /* jv */, 7150 /* jw */, 7150 /* jx */, 7150 /* jy */, 7150 /* jz */, 7150 /* j{ */, 7150 /* j| */, 7150 /* j} */, 7150 /* j~ */}, + {14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k */, 14425 /* k! */, 14425 /* k" */, 14425 /* k# */, 14425 /* k$ */, 14425 /* k% */, 14175 /* k& */, 14425 /* k' */, 14425 /* k( */, 14425 /* k) */, 14425 /* k* */, 14425 /* k+ */, 14425 /* k, */, 13550 /* k- */, 14425 /* k. */, 14425 /* k/ */, 14425 /* k0 */, 14425 /* k1 */, 14425 /* k2 */, 14425 /* k3 */, 14425 /* k4 */, 14425 /* k5 */, 14425 /* k6 */, 14425 /* k7 */, 14425 /* k8 */, 14425 /* k9 */, 14425 /* k: */, 14425 /* k; */, 14425 /* k< */, 14425 /* k= */, 14425 /* k> */, 14425 /* k? */, 14175 /* k@ */, 14800 /* kA */, 14425 /* kB */, 14100 /* kC */, 14425 /* kD */, 14425 /* kE */, 14425 /* kF */, 14100 /* kG */, 14425 /* kH */, 14425 /* kI */, 14300 /* kJ */, 14425 /* kK */, 14425 /* kL */, 14425 /* kM */, 14425 /* kN */, 14100 /* kO */, 14425 /* kP */, 14100 /* kQ */, 14425 /* kR */, 14250 /* kS */, 13625 /* kT */, 14425 /* kU */, 13975 /* kV */, 14250 /* kW */, 14425 /* kX */, 13275 /* kY */, 14825 /* kZ */, 14425 /* k[ */, 14425 /* k\ */, 14425 /* k] */, 14425 /* k^ */, 14925 /* k_ */, 14425 /* k` */, 14425 /* ka */, 14425 /* kb */, 13750 /* kc */, 13925 /* kd */, 13750 /* ke */, 14425 /* kf */, 14425 /* kg */, 14425 /* kh */, 14425 /* ki */, 14425 /* kj */, 14425 /* kk */, 14425 /* kl */, 14425 /* km */, 14425 /* kn */, 13750 /* ko */, 14425 /* kp */, 13925 /* kq */, 14425 /* kr */, 14175 /* ks */, 14175 /* kt */, 14175 /* ku */, 14125 /* kv */, 14300 /* kw */, 14425 /* kx */, 14300 /* ky */, 14425 /* kz */, 14425 /* k{ */, 14425 /* k| */, 14425 /* k} */, 14425 /* k~ */}, + {7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l */, 7575 /* l! */, 7575 /* l" */, 7575 /* l# */, 7575 /* l$ */, 7575 /* l% */, 7575 /* l& */, 7575 /* l' */, 7575 /* l( */, 7575 /* l) */, 7575 /* l* */, 7575 /* l+ */, 7825 /* l, */, 7325 /* l- */, 7825 /* l. */, 7575 /* l/ */, 7575 /* l0 */, 7575 /* l1 */, 7575 /* l2 */, 7575 /* l3 */, 7575 /* l4 */, 7575 /* l5 */, 7575 /* l6 */, 7575 /* l7 */, 7575 /* l8 */, 7575 /* l9 */, 7575 /* l: */, 7575 /* l; */, 7575 /* l< */, 7575 /* l= */, 7575 /* l> */, 7575 /* l? */, 7575 /* l@ */, 8175 /* lA */, 7575 /* lB */, 7575 /* lC */, 7575 /* lD */, 7575 /* lE */, 7575 /* lF */, 7575 /* lG */, 7575 /* lH */, 7575 /* lI */, 7825 /* lJ */, 7575 /* lK */, 7575 /* lL */, 7575 /* lM */, 7575 /* lN */, 7575 /* lO */, 7575 /* lP */, 7575 /* lQ */, 7575 /* lR */, 7575 /* lS */, 7250 /* lT */, 7575 /* lU */, 7450 /* lV */, 7575 /* lW */, 7950 /* lX */, 7200 /* lY */, 7950 /* lZ */, 7575 /* l[ */, 7575 /* l\ */, 7575 /* l] */, 7575 /* l^ */, 8200 /* l_ */, 7575 /* l` */, 7575 /* la */, 7575 /* lb */, 7575 /* lc */, 7575 /* ld */, 7575 /* le */, 7575 /* lf */, 7575 /* lg */, 7575 /* lh */, 7575 /* li */, 7575 /* lj */, 7575 /* lk */, 7375 /* ll */, 7575 /* lm */, 7575 /* ln */, 7575 /* lo */, 7575 /* lp */, 7575 /* lq */, 7575 /* lr */, 7575 /* ls */, 7450 /* lt */, 7575 /* lu */, 7425 /* lv */, 7475 /* lw */, 7575 /* lx */, 7425 /* ly */, 7725 /* lz */, 7575 /* l{ */, 7575 /* l| */, 7575 /* l} */, 7575 /* l~ */}, + {22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m */, 22350 /* m! */, 21975 /* m" */, 22350 /* m# */, 22350 /* m$ */, 22350 /* m% */, 22350 /* m& */, 21975 /* m' */, 22350 /* m( */, 22350 /* m) */, 21975 /* m* */, 22350 /* m+ */, 22350 /* m, */, 22350 /* m- */, 22350 /* m. */, 22350 /* m/ */, 22350 /* m0 */, 22350 /* m1 */, 22350 /* m2 */, 22350 /* m3 */, 22350 /* m4 */, 22350 /* m5 */, 22350 /* m6 */, 22350 /* m7 */, 22350 /* m8 */, 22350 /* m9 */, 22350 /* m: */, 22350 /* m; */, 22350 /* m< */, 22350 /* m= */, 22350 /* m> */, 22350 /* m? */, 22350 /* m@ */, 22350 /* mA */, 22350 /* mB */, 22350 /* mC */, 22350 /* mD */, 22350 /* mE */, 22350 /* mF */, 22350 /* mG */, 22350 /* mH */, 22350 /* mI */, 22350 /* mJ */, 22350 /* mK */, 22350 /* mL */, 22350 /* mM */, 22350 /* mN */, 22350 /* mO */, 22350 /* mP */, 22350 /* mQ */, 22350 /* mR */, 22350 /* mS */, 20975 /* mT */, 22350 /* mU */, 21475 /* mV */, 21725 /* mW */, 22350 /* mX */, 20975 /* mY */, 22350 /* mZ */, 22350 /* m[ */, 22350 /* m\ */, 22350 /* m] */, 22350 /* m^ */, 22350 /* m_ */, 22350 /* m` */, 22350 /* ma */, 22350 /* mb */, 22350 /* mc */, 22350 /* md */, 22350 /* me */, 22350 /* mf */, 22350 /* mg */, 22350 /* mh */, 22350 /* mi */, 22350 /* mj */, 22350 /* mk */, 22350 /* ml */, 22350 /* mm */, 22350 /* mn */, 22350 /* mo */, 22350 /* mp */, 22350 /* mq */, 22350 /* mr */, 22350 /* ms */, 22350 /* mt */, 22350 /* mu */, 22150 /* mv */, 22200 /* mw */, 22350 /* mx */, 22150 /* my */, 22350 /* mz */, 22350 /* m{ */, 22350 /* m| */, 22350 /* m} */, 22350 /* m~ */}, + {14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n */, 14900 /* n! */, 14525 /* n" */, 14900 /* n# */, 14900 /* n$ */, 14900 /* n% */, 14900 /* n& */, 14525 /* n' */, 14900 /* n( */, 14900 /* n) */, 14525 /* n* */, 14900 /* n+ */, 14900 /* n, */, 14900 /* n- */, 14900 /* n. */, 14900 /* n/ */, 14900 /* n0 */, 14900 /* n1 */, 14900 /* n2 */, 14900 /* n3 */, 14900 /* n4 */, 14900 /* n5 */, 14900 /* n6 */, 14900 /* n7 */, 14900 /* n8 */, 14900 /* n9 */, 14900 /* n: */, 14900 /* n; */, 14900 /* n< */, 14900 /* n= */, 14900 /* n> */, 14900 /* n? */, 14900 /* n@ */, 14900 /* nA */, 14900 /* nB */, 14900 /* nC */, 14900 /* nD */, 14900 /* nE */, 14900 /* nF */, 14900 /* nG */, 14900 /* nH */, 14900 /* nI */, 14900 /* nJ */, 14900 /* nK */, 14900 /* nL */, 14900 /* nM */, 14900 /* nN */, 14900 /* nO */, 14900 /* nP */, 14900 /* nQ */, 14900 /* nR */, 14900 /* nS */, 13525 /* nT */, 14900 /* nU */, 14025 /* nV */, 14275 /* nW */, 14900 /* nX */, 13525 /* nY */, 14900 /* nZ */, 14900 /* n[ */, 14900 /* n\ */, 14900 /* n] */, 14900 /* n^ */, 14900 /* n_ */, 14900 /* n` */, 14900 /* na */, 14900 /* nb */, 14900 /* nc */, 14900 /* nd */, 14900 /* ne */, 14900 /* nf */, 14900 /* ng */, 14900 /* nh */, 14900 /* ni */, 14900 /* nj */, 14900 /* nk */, 14900 /* nl */, 14900 /* nm */, 14900 /* nn */, 14900 /* no */, 14900 /* np */, 14900 /* nq */, 14900 /* nr */, 14900 /* ns */, 14900 /* nt */, 14900 /* nu */, 14700 /* nv */, 14750 /* nw */, 14900 /* nx */, 14700 /* ny */, 14900 /* nz */, 14900 /* n{ */, 14900 /* n| */, 14900 /* n} */, 14900 /* n~ */}, + {14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o */, 14100 /* o! */, 13600 /* o" */, 14100 /* o# */, 14100 /* o$ */, 14100 /* o% */, 14100 /* o& */, 13600 /* o' */, 14100 /* o( */, 14100 /* o) */, 13600 /* o* */, 14100 /* o+ */, 13725 /* o, */, 14350 /* o- */, 13725 /* o. */, 14100 /* o/ */, 14100 /* o0 */, 14100 /* o1 */, 14100 /* o2 */, 14100 /* o3 */, 14100 /* o4 */, 14100 /* o5 */, 14100 /* o6 */, 14100 /* o7 */, 14100 /* o8 */, 14100 /* o9 */, 14100 /* o: */, 14100 /* o; */, 14100 /* o< */, 14100 /* o= */, 14100 /* o> */, 14100 /* o? */, 14100 /* o@ */, 14100 /* oA */, 14100 /* oB */, 14100 /* oC */, 14100 /* oD */, 14100 /* oE */, 14100 /* oF */, 14100 /* oG */, 14100 /* oH */, 13975 /* oI */, 14100 /* oJ */, 14100 /* oK */, 14100 /* oL */, 14100 /* oM */, 14100 /* oN */, 14100 /* oO */, 14100 /* oP */, 14100 /* oQ */, 14100 /* oR */, 14100 /* oS */, 12475 /* oT */, 14100 /* oU */, 13225 /* oV */, 13475 /* oW */, 13600 /* oX */, 12600 /* oY */, 13975 /* oZ */, 14100 /* o[ */, 14100 /* o\ */, 14100 /* o] */, 14100 /* o^ */, 12600 /* o_ */, 14100 /* o` */, 14100 /* oa */, 14100 /* ob */, 14100 /* oc */, 14100 /* od */, 14100 /* oe */, 13950 /* of */, 14100 /* og */, 14100 /* oh */, 14100 /* oi */, 14100 /* oj */, 14100 /* ok */, 14100 /* ol */, 14100 /* om */, 14100 /* on */, 14100 /* oo */, 14100 /* op */, 14100 /* oq */, 14100 /* or */, 14100 /* os */, 13950 /* ot */, 14100 /* ou */, 13900 /* ov */, 13850 /* ow */, 13700 /* ox */, 13850 /* oy */, 13900 /* oz */, 14100 /* o{ */, 14100 /* o| */, 14100 /* o} */, 14100 /* o~ */}, + {15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p */, 15200 /* p! */, 14700 /* p" */, 15200 /* p# */, 15200 /* p$ */, 15200 /* p% */, 15200 /* p& */, 14700 /* p' */, 15200 /* p( */, 15200 /* p) */, 14700 /* p* */, 15200 /* p+ */, 14825 /* p, */, 15450 /* p- */, 14825 /* p. */, 15200 /* p/ */, 15200 /* p0 */, 15200 /* p1 */, 15200 /* p2 */, 15200 /* p3 */, 15200 /* p4 */, 15200 /* p5 */, 15200 /* p6 */, 15200 /* p7 */, 15200 /* p8 */, 15200 /* p9 */, 15200 /* p: */, 15200 /* p; */, 15200 /* p< */, 15200 /* p= */, 15200 /* p> */, 15200 /* p? */, 15200 /* p@ */, 15200 /* pA */, 15200 /* pB */, 15200 /* pC */, 15200 /* pD */, 15200 /* pE */, 15200 /* pF */, 15200 /* pG */, 15200 /* pH */, 15075 /* pI */, 15200 /* pJ */, 15200 /* pK */, 15200 /* pL */, 15200 /* pM */, 15200 /* pN */, 15200 /* pO */, 15200 /* pP */, 15200 /* pQ */, 15200 /* pR */, 15200 /* pS */, 13575 /* pT */, 15200 /* pU */, 14325 /* pV */, 14575 /* pW */, 14700 /* pX */, 13700 /* pY */, 15075 /* pZ */, 15200 /* p[ */, 15200 /* p\ */, 15200 /* p] */, 15200 /* p^ */, 13950 /* p_ */, 15200 /* p` */, 15200 /* pa */, 15200 /* pb */, 15200 /* pc */, 15200 /* pd */, 15200 /* pe */, 15050 /* pf */, 15200 /* pg */, 15200 /* ph */, 15200 /* pi */, 15200 /* pj */, 15200 /* pk */, 15200 /* pl */, 15200 /* pm */, 15200 /* pn */, 15200 /* po */, 15200 /* pp */, 15200 /* pq */, 15200 /* pr */, 15200 /* ps */, 15050 /* pt */, 15200 /* pu */, 15000 /* pv */, 14950 /* pw */, 14800 /* px */, 14950 /* py */, 15000 /* pz */, 15200 /* p{ */, 15200 /* p| */, 15200 /* p} */, 15200 /* p~ */}, + {15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q */, 15200 /* q! */, 15200 /* q" */, 15200 /* q# */, 15200 /* q$ */, 15200 /* q% */, 15200 /* q& */, 15200 /* q' */, 15200 /* q( */, 15200 /* q) */, 15200 /* q* */, 15200 /* q+ */, 15200 /* q, */, 15200 /* q- */, 15200 /* q. */, 15200 /* q/ */, 15200 /* q0 */, 15200 /* q1 */, 15200 /* q2 */, 15200 /* q3 */, 15200 /* q4 */, 15200 /* q5 */, 15200 /* q6 */, 15200 /* q7 */, 15200 /* q8 */, 15200 /* q9 */, 15200 /* q: */, 15200 /* q; */, 15200 /* q< */, 15200 /* q= */, 15200 /* q> */, 15200 /* q? */, 15200 /* q@ */, 15200 /* qA */, 15200 /* qB */, 15200 /* qC */, 15200 /* qD */, 15200 /* qE */, 15200 /* qF */, 15200 /* qG */, 15200 /* qH */, 15200 /* qI */, 15200 /* qJ */, 15200 /* qK */, 15200 /* qL */, 15200 /* qM */, 15200 /* qN */, 15200 /* qO */, 15200 /* qP */, 15200 /* qQ */, 15200 /* qR */, 15200 /* qS */, 14200 /* qT */, 15200 /* qU */, 14575 /* qV */, 14950 /* qW */, 15200 /* qX */, 14450 /* qY */, 15200 /* qZ */, 15200 /* q[ */, 15200 /* q\ */, 15200 /* q] */, 15200 /* q^ */, 15200 /* q_ */, 15200 /* q` */, 15200 /* qa */, 15200 /* qb */, 15200 /* qc */, 15200 /* qd */, 15200 /* qe */, 15200 /* qf */, 15200 /* qg */, 15200 /* qh */, 15200 /* qi */, 15200 /* qj */, 15200 /* qk */, 15200 /* ql */, 15200 /* qm */, 15200 /* qn */, 15200 /* qo */, 15200 /* qp */, 15200 /* qq */, 15200 /* qr */, 15200 /* qs */, 15200 /* qt */, 15200 /* qu */, 15200 /* qv */, 15200 /* qw */, 15200 /* qx */, 15200 /* qy */, 15200 /* qz */, 15200 /* q{ */, 15200 /* q| */, 15200 /* q} */, 15200 /* q~ */}, + {10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r */, 10100 /* r! */, 10850 /* r" */, 10100 /* r# */, 10100 /* r$ */, 10100 /* r% */, 9600 /* r& */, 10850 /* r' */, 10100 /* r( */, 10100 /* r) */, 10850 /* r* */, 10100 /* r+ */, 8100 /* r, */, 10100 /* r- */, 8100 /* r. */, 9550 /* r/ */, 10100 /* r0 */, 10100 /* r1 */, 10100 /* r2 */, 10100 /* r3 */, 10100 /* r4 */, 10100 /* r5 */, 10100 /* r6 */, 10100 /* r7 */, 10100 /* r8 */, 10100 /* r9 */, 10100 /* r: */, 10100 /* r; */, 10100 /* r< */, 10100 /* r= */, 10100 /* r> */, 10100 /* r? */, 10100 /* r@ */, 9100 /* rA */, 10100 /* rB */, 10350 /* rC */, 10100 /* rD */, 10100 /* rE */, 10100 /* rF */, 10350 /* rG */, 10100 /* rH */, 10100 /* rI */, 9500 /* rJ */, 10100 /* rK */, 10100 /* rL */, 10100 /* rM */, 10100 /* rN */, 10350 /* rO */, 10100 /* rP */, 10350 /* rQ */, 10100 /* rR */, 10275 /* rS */, 9850 /* rT */, 10100 /* rU */, 10100 /* rV */, 10100 /* rW */, 9600 /* rX */, 9600 /* rY */, 9825 /* rZ */, 10100 /* r[ */, 10100 /* r\ */, 10100 /* r] */, 10100 /* r^ */, 8100 /* r_ */, 10100 /* r` */, 9750 /* ra */, 10100 /* rb */, 9975 /* rc */, 10000 /* rd */, 9975 /* re */, 10325 /* rf */, 9750 /* rg */, 10100 /* rh */, 10100 /* ri */, 10100 /* rj */, 10100 /* rk */, 10100 /* rl */, 10100 /* rm */, 10100 /* rn */, 9975 /* ro */, 10100 /* rp */, 10000 /* rq */, 10100 /* rr */, 10100 /* rs */, 10200 /* rt */, 10100 /* ru */, 10275 /* rv */, 10225 /* rw */, 10100 /* rx */, 10275 /* ry */, 10100 /* rz */, 10100 /* r{ */, 10100 /* r| */, 10100 /* r} */, 10100 /* r~ */}, + {12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s */, 12600 /* s! */, 12350 /* s" */, 12600 /* s# */, 12600 /* s$ */, 12600 /* s% */, 12600 /* s& */, 12350 /* s' */, 12600 /* s( */, 12600 /* s) */, 12350 /* s* */, 12600 /* s+ */, 12400 /* s, */, 12600 /* s- */, 12400 /* s. */, 12600 /* s/ */, 12600 /* s0 */, 12600 /* s1 */, 12600 /* s2 */, 12600 /* s3 */, 12600 /* s4 */, 12600 /* s5 */, 12600 /* s6 */, 12600 /* s7 */, 12600 /* s8 */, 12600 /* s9 */, 12600 /* s: */, 12600 /* s; */, 12600 /* s< */, 12600 /* s= */, 12600 /* s> */, 12600 /* s? */, 12600 /* s@ */, 12650 /* sA */, 12600 /* sB */, 12600 /* sC */, 12600 /* sD */, 12600 /* sE */, 12600 /* sF */, 12600 /* sG */, 12600 /* sH */, 12600 /* sI */, 12550 /* sJ */, 12600 /* sK */, 12600 /* sL */, 12600 /* sM */, 12600 /* sN */, 12600 /* sO */, 12600 /* sP */, 12600 /* sQ */, 12600 /* sR */, 12600 /* sS */, 10975 /* sT */, 12600 /* sU */, 11775 /* sV */, 12600 /* sW */, 12025 /* sX */, 11250 /* sY */, 12600 /* sZ */, 12600 /* s[ */, 12600 /* s\ */, 12600 /* s] */, 12600 /* s^ */, 11350 /* s_ */, 12600 /* s` */, 12600 /* sa */, 12600 /* sb */, 12600 /* sc */, 12600 /* sd */, 12600 /* se */, 12525 /* sf */, 12600 /* sg */, 12600 /* sh */, 12600 /* si */, 12600 /* sj */, 12600 /* sk */, 12600 /* sl */, 12600 /* sm */, 12600 /* sn */, 12600 /* so */, 12600 /* sp */, 12600 /* sq */, 12600 /* sr */, 12425 /* ss */, 12400 /* st */, 12600 /* su */, 12300 /* sv */, 12350 /* sw */, 12175 /* sx */, 12375 /* sy */, 12350 /* sz */, 12600 /* s{ */, 12600 /* s| */, 12600 /* s} */, 12600 /* s~ */}, + {9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t */, 9575 /* t! */, 9575 /* t" */, 9575 /* t# */, 9575 /* t$ */, 9575 /* t% */, 9325 /* t& */, 9575 /* t' */, 9575 /* t( */, 9575 /* t) */, 9575 /* t* */, 9575 /* t+ */, 9575 /* t, */, 9325 /* t- */, 9575 /* t. */, 9575 /* t/ */, 9575 /* t0 */, 9575 /* t1 */, 9575 /* t2 */, 9575 /* t3 */, 9575 /* t4 */, 9575 /* t5 */, 9575 /* t6 */, 9575 /* t7 */, 9575 /* t8 */, 9575 /* t9 */, 9575 /* t: */, 9575 /* t; */, 9575 /* t< */, 9575 /* t= */, 9575 /* t> */, 9575 /* t? */, 9575 /* t@ */, 9725 /* tA */, 9575 /* tB */, 9575 /* tC */, 9575 /* tD */, 9575 /* tE */, 9575 /* tF */, 9575 /* tG */, 9575 /* tH */, 9575 /* tI */, 9575 /* tJ */, 9575 /* tK */, 9575 /* tL */, 9575 /* tM */, 9575 /* tN */, 9575 /* tO */, 9575 /* tP */, 9575 /* tQ */, 9575 /* tR */, 9575 /* tS */, 8975 /* tT */, 9575 /* tU */, 9575 /* tV */, 9575 /* tW */, 9575 /* tX */, 9075 /* tY */, 9575 /* tZ */, 9575 /* t[ */, 9575 /* t\ */, 9575 /* t] */, 9575 /* t^ */, 10075 /* t_ */, 9575 /* t` */, 9575 /* ta */, 9575 /* tb */, 9475 /* tc */, 9475 /* td */, 9475 /* te */, 9575 /* tf */, 9575 /* tg */, 9575 /* th */, 9575 /* ti */, 9575 /* tj */, 9575 /* tk */, 9575 /* tl */, 9575 /* tm */, 9575 /* tn */, 9475 /* to */, 9575 /* tp */, 9475 /* tq */, 9575 /* tr */, 9575 /* ts */, 9450 /* tt */, 9575 /* tu */, 9575 /* tv */, 9575 /* tw */, 9575 /* tx */, 9575 /* ty */, 9575 /* tz */, 9575 /* t{ */, 9575 /* t| */, 9575 /* t} */, 9575 /* t~ */}, + {14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u */, 14900 /* u! */, 14900 /* u" */, 14900 /* u# */, 14900 /* u$ */, 14900 /* u% */, 14900 /* u& */, 14900 /* u' */, 14900 /* u( */, 14900 /* u) */, 14900 /* u* */, 14900 /* u+ */, 14900 /* u, */, 14900 /* u- */, 14900 /* u. */, 14900 /* u/ */, 14900 /* u0 */, 14900 /* u1 */, 14900 /* u2 */, 14900 /* u3 */, 14900 /* u4 */, 14900 /* u5 */, 14900 /* u6 */, 14900 /* u7 */, 14900 /* u8 */, 14900 /* u9 */, 14900 /* u: */, 14900 /* u; */, 14900 /* u< */, 14900 /* u= */, 14900 /* u> */, 14900 /* u? */, 14900 /* u@ */, 14900 /* uA */, 14900 /* uB */, 14900 /* uC */, 14900 /* uD */, 14900 /* uE */, 14900 /* uF */, 14900 /* uG */, 14900 /* uH */, 14900 /* uI */, 14900 /* uJ */, 14900 /* uK */, 14900 /* uL */, 14900 /* uM */, 14900 /* uN */, 14900 /* uO */, 14900 /* uP */, 14900 /* uQ */, 14900 /* uR */, 14900 /* uS */, 13775 /* uT */, 14900 /* uU */, 14275 /* uV */, 14650 /* uW */, 14900 /* uX */, 13650 /* uY */, 14900 /* uZ */, 14900 /* u[ */, 14900 /* u\ */, 14900 /* u] */, 14900 /* u^ */, 14900 /* u_ */, 14900 /* u` */, 14900 /* ua */, 14900 /* ub */, 14900 /* uc */, 14900 /* ud */, 14900 /* ue */, 14900 /* uf */, 14900 /* ug */, 14900 /* uh */, 14900 /* ui */, 14900 /* uj */, 14900 /* uk */, 14900 /* ul */, 14900 /* um */, 14900 /* un */, 14900 /* uo */, 14900 /* up */, 14900 /* uq */, 14900 /* ur */, 14900 /* us */, 14900 /* ut */, 14900 /* uu */, 14900 /* uv */, 14900 /* uw */, 14900 /* ux */, 14900 /* uy */, 14900 /* uz */, 14900 /* u{ */, 14900 /* u| */, 14900 /* u} */, 14900 /* u~ */}, + {13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v */, 13450 /* v! */, 14075 /* v" */, 13450 /* v# */, 13450 /* v$ */, 13450 /* v% */, 12950 /* v& */, 14075 /* v' */, 13450 /* v( */, 13450 /* v) */, 14075 /* v* */, 13450 /* v+ */, 12250 /* v, */, 13325 /* v- */, 12250 /* v. */, 13075 /* v/ */, 13450 /* v0 */, 13450 /* v1 */, 13450 /* v2 */, 13450 /* v3 */, 13450 /* v4 */, 13450 /* v5 */, 13450 /* v6 */, 13450 /* v7 */, 13450 /* v8 */, 13450 /* v9 */, 13450 /* v: */, 13450 /* v; */, 13450 /* v< */, 13450 /* v= */, 13450 /* v> */, 13450 /* v? */, 13450 /* v@ */, 12700 /* vA */, 13450 /* vB */, 13450 /* vC */, 13450 /* vD */, 13450 /* vE */, 13450 /* vF */, 13450 /* vG */, 13450 /* vH */, 13325 /* vI */, 12700 /* vJ */, 13450 /* vK */, 13450 /* vL */, 13450 /* vM */, 13450 /* vN */, 13450 /* vO */, 13450 /* vP */, 13450 /* vQ */, 13450 /* vR */, 13450 /* vS */, 12825 /* vT */, 13450 /* vU */, 13200 /* vV */, 13450 /* vW */, 13450 /* vX */, 12575 /* vY */, 13450 /* vZ */, 13450 /* v[ */, 13450 /* v\ */, 13450 /* v] */, 13450 /* v^ */, 11700 /* v_ */, 13450 /* v` */, 13225 /* va */, 13450 /* vb */, 13250 /* vc */, 13250 /* vd */, 13250 /* ve */, 13600 /* vf */, 13125 /* vg */, 13450 /* vh */, 13450 /* vi */, 13450 /* vj */, 13450 /* vk */, 13450 /* vl */, 13450 /* vm */, 13450 /* vn */, 13250 /* vo */, 13450 /* vp */, 13250 /* vq */, 13450 /* vr */, 13400 /* vs */, 13450 /* vt */, 13450 /* vu */, 13450 /* vv */, 13450 /* vw */, 13450 /* vx */, 13450 /* vy */, 13350 /* vz */, 13450 /* v{ */, 13450 /* v| */, 13450 /* v} */, 13450 /* v~ */}, + {21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w */, 21025 /* w! */, 21525 /* w" */, 21025 /* w# */, 21025 /* w$ */, 21025 /* w% */, 20525 /* w& */, 21525 /* w' */, 21025 /* w( */, 21025 /* w) */, 21525 /* w* */, 21025 /* w+ */, 20025 /* w, */, 20925 /* w- */, 20025 /* w. */, 21025 /* w/ */, 21025 /* w0 */, 21025 /* w1 */, 21025 /* w2 */, 21025 /* w3 */, 21025 /* w4 */, 21025 /* w5 */, 21025 /* w6 */, 21025 /* w7 */, 21025 /* w8 */, 21025 /* w9 */, 21025 /* w: */, 21025 /* w; */, 21025 /* w< */, 21025 /* w= */, 21025 /* w> */, 21025 /* w? */, 20775 /* w@ */, 20525 /* wA */, 21025 /* wB */, 21025 /* wC */, 21025 /* wD */, 21025 /* wE */, 21025 /* wF */, 21025 /* wG */, 21025 /* wH */, 21025 /* wI */, 20275 /* wJ */, 21025 /* wK */, 21025 /* wL */, 21025 /* wM */, 21025 /* wN */, 21025 /* wO */, 21025 /* wP */, 21025 /* wQ */, 21025 /* wR */, 21025 /* wS */, 20150 /* wT */, 21025 /* wU */, 20775 /* wV */, 20775 /* wW */, 21025 /* wX */, 20025 /* wY */, 21025 /* wZ */, 21025 /* w[ */, 21025 /* w\ */, 21025 /* w] */, 21025 /* w^ */, 19775 /* w_ */, 21025 /* w` */, 20675 /* wa */, 21025 /* wb */, 20775 /* wc */, 20775 /* wd */, 20775 /* we */, 21025 /* wf */, 20600 /* wg */, 21025 /* wh */, 21025 /* wi */, 21025 /* wj */, 21025 /* wk */, 21025 /* wl */, 21025 /* wm */, 21025 /* wn */, 20775 /* wo */, 21025 /* wp */, 20775 /* wq */, 21025 /* wr */, 20925 /* ws */, 21025 /* wt */, 21025 /* wu */, 21025 /* wv */, 21025 /* ww */, 21025 /* wx */, 21025 /* wy */, 21025 /* wz */, 21025 /* w{ */, 21025 /* w| */, 21025 /* w} */, 21025 /* w~ */}, + {14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x */, 14000 /* x! */, 14000 /* x" */, 14000 /* x# */, 14000 /* x$ */, 14000 /* x% */, 13250 /* x& */, 14000 /* x' */, 14000 /* x( */, 14000 /* x) */, 14000 /* x* */, 14000 /* x+ */, 14000 /* x, */, 13125 /* x- */, 14000 /* x. */, 14000 /* x/ */, 14000 /* x0 */, 14000 /* x1 */, 14000 /* x2 */, 14000 /* x3 */, 14000 /* x4 */, 14000 /* x5 */, 14000 /* x6 */, 14000 /* x7 */, 14000 /* x8 */, 14000 /* x9 */, 14000 /* x: */, 14000 /* x; */, 14000 /* x< */, 14000 /* x= */, 14000 /* x> */, 14000 /* x? */, 13500 /* x@ */, 14000 /* xA */, 14000 /* xB */, 14000 /* xC */, 14000 /* xD */, 14000 /* xE */, 14000 /* xF */, 14000 /* xG */, 14000 /* xH */, 14000 /* xI */, 13625 /* xJ */, 14000 /* xK */, 14000 /* xL */, 14000 /* xM */, 14000 /* xN */, 14000 /* xO */, 14000 /* xP */, 14000 /* xQ */, 14000 /* xR */, 14000 /* xS */, 13125 /* xT */, 14000 /* xU */, 13750 /* xV */, 13750 /* xW */, 14000 /* xX */, 13000 /* xY */, 14000 /* xZ */, 14000 /* x[ */, 14000 /* x\ */, 14000 /* x] */, 14000 /* x^ */, 14500 /* x_ */, 14000 /* x` */, 14000 /* xa */, 14000 /* xb */, 13600 /* xc */, 13600 /* xd */, 13600 /* xe */, 14000 /* xf */, 14000 /* xg */, 14000 /* xh */, 14000 /* xi */, 14000 /* xj */, 14000 /* xk */, 14000 /* xl */, 14000 /* xm */, 14000 /* xn */, 13600 /* xo */, 14000 /* xp */, 13600 /* xq */, 14000 /* xr */, 13900 /* xs */, 14000 /* xt */, 14000 /* xu */, 14000 /* xv */, 14000 /* xw */, 14000 /* xx */, 14000 /* xy */, 14000 /* xz */, 14000 /* x{ */, 14000 /* x| */, 14000 /* x} */, 14000 /* x~ */}, + {13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y */, 13350 /* y! */, 13850 /* y" */, 13350 /* y# */, 13350 /* y$ */, 13350 /* y% */, 12600 /* y& */, 13850 /* y' */, 13350 /* y( */, 13350 /* y) */, 13850 /* y* */, 13350 /* y+ */, 12225 /* y, */, 13225 /* y- */, 12225 /* y. */, 13225 /* y/ */, 13350 /* y0 */, 13350 /* y1 */, 13350 /* y2 */, 13350 /* y3 */, 13350 /* y4 */, 13350 /* y5 */, 13350 /* y6 */, 13350 /* y7 */, 13350 /* y8 */, 13350 /* y9 */, 13350 /* y: */, 13350 /* y; */, 13350 /* y< */, 13350 /* y= */, 13350 /* y> */, 13350 /* y? */, 13100 /* y@ */, 12975 /* yA */, 13350 /* yB */, 13350 /* yC */, 13350 /* yD */, 13350 /* yE */, 13350 /* yF */, 13350 /* yG */, 13350 /* yH */, 13225 /* yI */, 12600 /* yJ */, 13350 /* yK */, 13350 /* yL */, 13350 /* yM */, 13350 /* yN */, 13350 /* yO */, 13350 /* yP */, 13350 /* yQ */, 13350 /* yR */, 13350 /* yS */, 12600 /* yT */, 13350 /* yU */, 13100 /* yV */, 13350 /* yW */, 13350 /* yX */, 12475 /* yY */, 13350 /* yZ */, 13350 /* y[ */, 13350 /* y\ */, 13350 /* y] */, 13350 /* y^ */, 11350 /* y_ */, 13350 /* y` */, 13000 /* ya */, 13350 /* yb */, 13150 /* yc */, 13150 /* yd */, 13150 /* ye */, 13525 /* yf */, 12825 /* yg */, 13350 /* yh */, 13350 /* yi */, 13350 /* yj */, 13350 /* yk */, 13350 /* yl */, 13350 /* ym */, 13350 /* yn */, 13150 /* yo */, 13350 /* yp */, 13150 /* yq */, 13350 /* yr */, 13125 /* ys */, 13350 /* yt */, 13350 /* yu */, 13350 /* yv */, 13350 /* yw */, 13350 /* yx */, 13350 /* yy */, 13250 /* yz */, 13350 /* y{ */, 13350 /* y| */, 13350 /* y} */, 13350 /* y~ */}, + {12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z */, 12950 /* z! */, 13075 /* z" */, 12950 /* z# */, 12950 /* z$ */, 12950 /* z% */, 12700 /* z& */, 13075 /* z' */, 12950 /* z( */, 12950 /* z) */, 13075 /* z* */, 12950 /* z+ */, 13200 /* z, */, 12450 /* z- */, 13200 /* z. */, 12950 /* z/ */, 12950 /* z0 */, 12950 /* z1 */, 12950 /* z2 */, 12950 /* z3 */, 12950 /* z4 */, 12950 /* z5 */, 12950 /* z6 */, 12950 /* z7 */, 12950 /* z8 */, 12950 /* z9 */, 12950 /* z: */, 12950 /* z; */, 12950 /* z< */, 12950 /* z= */, 12950 /* z> */, 12950 /* z? */, 12700 /* z@ */, 13200 /* zA */, 12950 /* zB */, 12950 /* zC */, 12950 /* zD */, 12950 /* zE */, 12950 /* zF */, 12950 /* zG */, 12950 /* zH */, 12950 /* zI */, 12950 /* zJ */, 12950 /* zK */, 12950 /* zL */, 12950 /* zM */, 12950 /* zN */, 12950 /* zO */, 12950 /* zP */, 12950 /* zQ */, 12950 /* zR */, 12950 /* zS */, 12075 /* zT */, 12950 /* zU */, 12700 /* zV */, 12825 /* zW */, 13200 /* zX */, 12200 /* zY */, 12950 /* zZ */, 12950 /* z[ */, 12950 /* z\ */, 12950 /* z] */, 12950 /* z^ */, 13075 /* z_ */, 12950 /* z` */, 12950 /* za */, 12950 /* zb */, 12650 /* zc */, 12700 /* zd */, 12650 /* ze */, 12950 /* zf */, 12950 /* zg */, 12950 /* zh */, 12950 /* zi */, 12950 /* zj */, 12950 /* zk */, 12950 /* zl */, 12950 /* zm */, 12950 /* zn */, 12650 /* zo */, 12950 /* zp */, 12700 /* zq */, 12950 /* zr */, 12950 /* zs */, 12950 /* zt */, 12950 /* zu */, 12950 /* zv */, 12950 /* zw */, 12950 /* zx */, 12950 /* zy */, 12950 /* zz */, 12950 /* z{ */, 12950 /* z| */, 12950 /* z} */, 12950 /* z~ */}, + {9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* { */, 9300 /* {! */, 9300 /* {" */, 9300 /* {# */, 9300 /* {$ */, 9300 /* {% */, 9300 /* {& */, 9300 /* {' */, 9300 /* {( */, 9300 /* {) */, 9300 /* {* */, 9300 /* {+ */, 9300 /* {, */, 9300 /* {- */, 9300 /* {. */, 9300 /* {/ */, 9300 /* {0 */, 9300 /* {1 */, 9300 /* {2 */, 9300 /* {3 */, 9300 /* {4 */, 9300 /* {5 */, 9300 /* {6 */, 9300 /* {7 */, 9300 /* {8 */, 9300 /* {9 */, 9300 /* {: */, 9300 /* {; */, 9300 /* {< */, 9300 /* {= */, 9300 /* {> */, 9300 /* {? */, 9300 /* {@ */, 9300 /* {A */, 9300 /* {B */, 9300 /* {C */, 9300 /* {D */, 9300 /* {E */, 9300 /* {F */, 9300 /* {G */, 9300 /* {H */, 9300 /* {I */, 9300 /* {J */, 9300 /* {K */, 9300 /* {L */, 9300 /* {M */, 9300 /* {N */, 9300 /* {O */, 9300 /* {P */, 9300 /* {Q */, 9300 /* {R */, 9300 /* {S */, 9300 /* {T */, 9300 /* {U */, 9300 /* {V */, 9300 /* {W */, 9300 /* {X */, 9300 /* {Y */, 9300 /* {Z */, 9300 /* {[ */, 9300 /* {\ */, 9300 /* {] */, 9300 /* {^ */, 9300 /* {_ */, 9300 /* {` */, 9300 /* {a */, 9300 /* {b */, 9300 /* {c */, 9300 /* {d */, 9300 /* {e */, 9300 /* {f */, 9300 /* {g */, 9300 /* {h */, 9300 /* {i */, 9550 /* {j */, 9300 /* {k */, 9300 /* {l */, 9300 /* {m */, 9300 /* {n */, 9300 /* {o */, 9300 /* {p */, 9300 /* {q */, 9300 /* {r */, 9300 /* {s */, 9300 /* {t */, 9300 /* {u */, 9300 /* {v */, 9300 /* {w */, 9300 /* {x */, 9300 /* {y */, 9300 /* {z */, 9300 /* {{ */, 9300 /* {| */, 9300 /* {} */, 9300 /* {~ */}, + {10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* | */, 10050 /* |! */, 10050 /* |" */, 10050 /* |# */, 10050 /* |$ */, 10050 /* |% */, 10050 /* |& */, 10050 /* |' */, 10050 /* |( */, 10050 /* |) */, 10050 /* |* */, 10050 /* |+ */, 10050 /* |, */, 10050 /* |- */, 10050 /* |. */, 10050 /* |/ */, 10050 /* |0 */, 10050 /* |1 */, 10050 /* |2 */, 10050 /* |3 */, 10050 /* |4 */, 10050 /* |5 */, 10050 /* |6 */, 10050 /* |7 */, 10050 /* |8 */, 10050 /* |9 */, 10050 /* |: */, 10050 /* |; */, 10050 /* |< */, 10050 /* |= */, 10050 /* |> */, 10050 /* |? */, 10050 /* |@ */, 10050 /* |A */, 10050 /* |B */, 10050 /* |C */, 10050 /* |D */, 10050 /* |E */, 10050 /* |F */, 10050 /* |G */, 10050 /* |H */, 10050 /* |I */, 10050 /* |J */, 10050 /* |K */, 10050 /* |L */, 10050 /* |M */, 10050 /* |N */, 10050 /* |O */, 10050 /* |P */, 10050 /* |Q */, 10050 /* |R */, 10050 /* |S */, 10050 /* |T */, 10050 /* |U */, 10050 /* |V */, 10050 /* |W */, 10050 /* |X */, 10050 /* |Y */, 10050 /* |Z */, 10050 /* |[ */, 10050 /* |\ */, 10050 /* |] */, 10050 /* |^ */, 10050 /* |_ */, 10050 /* |` */, 10050 /* |a */, 10050 /* |b */, 10050 /* |c */, 10050 /* |d */, 10050 /* |e */, 10050 /* |f */, 10050 /* |g */, 10050 /* |h */, 10050 /* |i */, 10050 /* |j */, 10050 /* |k */, 10050 /* |l */, 10050 /* |m */, 10050 /* |n */, 10050 /* |o */, 10050 /* |p */, 10050 /* |q */, 10050 /* |r */, 10050 /* |s */, 10050 /* |t */, 10050 /* |u */, 10050 /* |v */, 10050 /* |w */, 10050 /* |x */, 10050 /* |y */, 10050 /* |z */, 10050 /* |{ */, 10050 /* || */, 10050 /* |} */, 10050 /* |~ */}, + {9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* } */, 9300 /* }! */, 9300 /* }" */, 9300 /* }# */, 9300 /* }$ */, 9300 /* }% */, 9300 /* }& */, 9300 /* }' */, 9300 /* }( */, 9300 /* }) */, 9300 /* }* */, 9300 /* }+ */, 9300 /* }, */, 9300 /* }- */, 9300 /* }. */, 9300 /* }/ */, 9300 /* }0 */, 9300 /* }1 */, 9300 /* }2 */, 9300 /* }3 */, 9300 /* }4 */, 9300 /* }5 */, 9300 /* }6 */, 9300 /* }7 */, 9300 /* }8 */, 9300 /* }9 */, 9300 /* }: */, 9300 /* }; */, 9300 /* }< */, 9300 /* }= */, 9300 /* }> */, 9300 /* }? */, 9300 /* }@ */, 9300 /* }A */, 9300 /* }B */, 9300 /* }C */, 9300 /* }D */, 9300 /* }E */, 9300 /* }F */, 9300 /* }G */, 9300 /* }H */, 9300 /* }I */, 9300 /* }J */, 9300 /* }K */, 9300 /* }L */, 9300 /* }M */, 9300 /* }N */, 9300 /* }O */, 9300 /* }P */, 9300 /* }Q */, 9300 /* }R */, 9300 /* }S */, 9300 /* }T */, 9300 /* }U */, 9300 /* }V */, 9300 /* }W */, 9300 /* }X */, 9300 /* }Y */, 9300 /* }Z */, 9300 /* }[ */, 9300 /* }\ */, 9300 /* }] */, 9300 /* }^ */, 9300 /* }_ */, 9300 /* }` */, 9300 /* }a */, 9300 /* }b */, 9300 /* }c */, 9300 /* }d */, 9300 /* }e */, 9300 /* }f */, 9300 /* }g */, 9300 /* }h */, 9300 /* }i */, 9300 /* }j */, 9300 /* }k */, 9300 /* }l */, 9300 /* }m */, 9300 /* }n */, 9300 /* }o */, 9300 /* }p */, 9300 /* }q */, 9300 /* }r */, 9300 /* }s */, 9300 /* }t */, 9300 /* }u */, 9300 /* }v */, 9300 /* }w */, 9300 /* }x */, 9300 /* }y */, 9300 /* }z */, 9300 /* }{ */, 9300 /* }| */, 9300 /* }} */, 9300 /* }~ */}, + {15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~ */, 15000 /* ~! */, 15000 /* ~" */, 15000 /* ~# */, 15000 /* ~$ */, 15000 /* ~% */, 15000 /* ~& */, 15000 /* ~' */, 15000 /* ~( */, 15000 /* ~) */, 15000 /* ~* */, 15000 /* ~+ */, 15000 /* ~, */, 15000 /* ~- */, 15000 /* ~. */, 15000 /* ~/ */, 15000 /* ~0 */, 15000 /* ~1 */, 15000 /* ~2 */, 15000 /* ~3 */, 15000 /* ~4 */, 15000 /* ~5 */, 15000 /* ~6 */, 15000 /* ~7 */, 15000 /* ~8 */, 15000 /* ~9 */, 15000 /* ~: */, 15000 /* ~; */, 15000 /* ~< */, 15000 /* ~= */, 15000 /* ~> */, 15000 /* ~? */, 15000 /* ~@ */, 15000 /* ~A */, 15000 /* ~B */, 15000 /* ~C */, 15000 /* ~D */, 15000 /* ~E */, 15000 /* ~F */, 15000 /* ~G */, 15000 /* ~H */, 15000 /* ~I */, 15000 /* ~J */, 15000 /* ~K */, 15000 /* ~L */, 15000 /* ~M */, 15000 /* ~N */, 15000 /* ~O */, 15000 /* ~P */, 15000 /* ~Q */, 15000 /* ~R */, 15000 /* ~S */, 15000 /* ~T */, 15000 /* ~U */, 15000 /* ~V */, 15000 /* ~W */, 15000 /* ~X */, 15000 /* ~Y */, 15000 /* ~Z */, 15000 /* ~[ */, 15000 /* ~\ */, 15000 /* ~] */, 15000 /* ~^ */, 15000 /* ~_ */, 15000 /* ~` */, 15000 /* ~a */, 15000 /* ~b */, 15000 /* ~c */, 15000 /* ~d */, 15000 /* ~e */, 15000 /* ~f */, 15000 /* ~g */, 15000 /* ~h */, 15000 /* ~i */, 15000 /* ~j */, 15000 /* ~k */, 15000 /* ~l */, 15000 /* ~m */, 15000 /* ~n */, 15000 /* ~o */, 15000 /* ~p */, 15000 /* ~q */, 15000 /* ~r */, 15000 /* ~s */, 15000 /* ~t */, 15000 /* ~u */, 15000 /* ~v */, 15000 /* ~w */, 15000 /* ~x */, 15000 /* ~y */, 15000 /* ~z */, 15000 /* ~{ */, 15000 /* ~| */, 15000 /* ~} */, 15000 /* ~~ */}, +}; + +static const unsigned short int ibm_plex_sans_bold_250_em_size = 20475; + +static double ibm_plex_sans_bold_word_width(const char *s, double fontSize) { + unsigned long int totalWidth = 0; + + while(*s) { + if (IS_UTF8_STARTBYTE(*s)) { + s++; + + while(IS_UTF8_BYTE(*s) && !IS_UTF8_STARTBYTE(*s)) + s++; + + totalWidth += ibm_plex_sans_bold_250_em_size; + } + else { + if (*s >= 0 && *s <= 126) // Check if it's a valid ASCII character (including '\0') + totalWidth += ibm_plex_sans_bold_250[(unsigned char)*s][(unsigned char)s[1]]; + + s++; + } + } + + // Convert the width from the encoded value to the actual float value + double actualWidth = (double)totalWidth / 100.0; + + // Scale the width proportionally based on the desired font size + double scaledWidth = actualWidth * (fontSize / 250.0); + + return scaledWidth; +} + +/* + + + + + + + + + + + + + + I + + + TROUBLE + + + + */ + +static bool word_goes_below_baseline(const char *love) { + const char *s = love; + while(*s) { + switch(*s) { + case 'g': + case 'j': + case 'p': + case 'q': + case 'y': + case 'Q': + return true; + } + + s++; + } + + return false; +} + +static void generate_ilove_svg(BUFFER *wb, const char *love) { + const char *i = "I"; + const char *stretch = "spacing"; + + double font_size = 250.0; + double border_width = 25.0; + double logo_scale = 0.215; + double logo_width = 1000.0 * logo_scale; + double i_width = ibm_plex_sans_bold_word_width(i, font_size); + double first_line_width = i_width + logo_width; + double second_line_font_size = font_size; + double second_line_width = ibm_plex_sans_bold_word_width(love, second_line_font_size); + bool second_line_needs_height = word_goes_below_baseline(love); + + if(second_line_width <= first_line_width) { + second_line_width = first_line_width; + stretch = "spacingAndGlyphs"; + + if(!second_line_needs_height) + second_line_font_size *= 1.10; + } + else if(second_line_width > first_line_width * 4) { + second_line_width *= 0.80; + stretch = "spacingAndGlyphs"; + second_line_font_size *= 0.90; + } + else if(second_line_width > first_line_width * 2) { + second_line_width *= 0.93; + stretch = "spacing"; + } + + double width = second_line_width + border_width * 4.0; + + buffer_flush(wb); + + buffer_sprintf(wb, "\n", + width); + + // White bounding box with rounded corners + buffer_sprintf(wb, " \n", + width, border_width * 2, border_width * 2); + + // Black background + buffer_sprintf(wb, " \n", + border_width, border_width, width - border_width * 2, border_width * 1.5, border_width * 1.5); + + // Netdata logo + buffer_sprintf(wb, " \n", + (width - first_line_width) / 2 + i_width, border_width * 2, logo_scale); + + // first line + double first_line_baseline = font_size * 0.70 + border_width * 2; + buffer_sprintf(wb, " %s\n", + (width - first_line_width) / 2, first_line_baseline, font_size, i); + + // second line + double second_line_baseline = first_line_baseline + font_size * 0.85; + if(second_line_needs_height) + second_line_baseline = first_line_baseline + font_size * 0.78; + + buffer_sprintf(wb, " %s\n", + border_width * 2, second_line_baseline, second_line_font_size, second_line_width, stretch, love); + + buffer_sprintf(wb, ""); + + wb->content_type = CT_IMAGE_SVG_XML; +} + +int api_v2_ilove(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + char *love = "TROUBLE"; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "love")) love = value; + } + +// char *s = love; +// while(*s) { +// *s = toupper(*s); +// s++; +// } + + generate_ilove_svg(w->response.data, love); + + return HTTP_RESP_OK; +} diff --git a/src/web/api/v2/api_v2_ilove/measure-text.js b/src/web/api/v2/api_v2_ilove/measure-text.js new file mode 100644 index 000000000..e2a2a6e94 --- /dev/null +++ b/src/web/api/v2/api_v2_ilove/measure-text.js @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +'use strict'; + +var path = require('path'); +var fs = require('fs'); +var PDFDocument = require('pdfkit'); +var doc = new PDFDocument({size:'A4', layout:'landscape'}); + +function loadFont(fontPaths, callback) { + for (let fontPath of fontPaths) { + try { + doc = doc.font(fontPath); + if (callback) { callback(null); } + return; // Exit once a font is loaded successfully + } catch(err) { + // Log error but continue to next font path + console.error(`Failed to load font from path: ${fontPath}. Error: ${err.message}`); + } + } + + // If we reached here, none of the fonts were loaded successfully. + console.error('All font paths failed. Stopping execution.'); + process.exit(1); // Exit with an error code +} + +loadFont(['IBMPlexSans-Bold.ttf'], function(err) { + if (err) { + console.error('Could not load any of the specified fonts.'); + } +}); + +doc = doc.fontSize(250); + +function measureCombination(charA, charB) { + return doc.widthOfString(charA + charB); +} + +function getCharRepresentation(charCode) { + return (charCode >= 32 && charCode <= 126) ? String.fromCharCode(charCode) : ''; +} + +function generateCombinationArray() { + let output = "static const unsigned short int ibm_plex_sans_bold_250[128][128] = {\n"; + + for (let i = 0; i <= 126; i++) { + output += " {"; // Start of inner array + for (let j = 0; j <= 126; j++) { + let charA = getCharRepresentation(i); + let charB = getCharRepresentation(j); + let width = measureCombination(charA, charB) - doc.widthOfString(charB); + let encodedWidth = Math.round(width * 100); // Multiply by 100 and round + + if(charA === '*' && charB == '/') + charB = '\\/'; + + if(charA === '/' && charB == '*') + charB = '\\*'; + + output += `${encodedWidth} /* ${charA}${charB} */`; + if (j < 126) { + output += ", "; + } + } + output += "},\n"; // End of inner array + } + output += "};\n"; // End of 2D array + + return output; +} + +console.log(generateCombinationArray()); +console.log('static const unsigned short int ibm_plex_sans_bold_250_em_size = ' + Math.round(doc.widthOfString('M') * 100) + ';'); diff --git a/src/web/api/v2/api_v2_info.c b/src/web/api/v2/api_v2_info.c new file mode 100644 index 000000000..fd2aba633 --- /dev/null +++ b/src/web/api/v2/api_v2_info.c @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_info(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal(host, w, url, CONTEXTS_V2_AGENTS | CONTEXTS_V2_AGENTS_INFO); +} diff --git a/src/web/api/v2/api_v2_node_instances.c b/src/web/api/v2/api_v2_node_instances.c new file mode 100644 index 000000000..037191432 --- /dev/null +++ b/src/web/api/v2/api_v2_node_instances.c @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_node_instances(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal( + host, w, url, + CONTEXTS_V2_NODES | CONTEXTS_V2_NODE_INSTANCES | CONTEXTS_V2_AGENTS | + CONTEXTS_V2_AGENTS_INFO | CONTEXTS_V2_VERSIONS); +} diff --git a/src/web/api/v2/api_v2_nodes.c b/src/web/api/v2/api_v2_nodes.c new file mode 100644 index 000000000..3880f279f --- /dev/null +++ b/src/web/api/v2/api_v2_nodes.c @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_nodes(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal(host, w, url, CONTEXTS_V2_NODES | CONTEXTS_V2_NODES_INFO); +} diff --git a/src/web/api/v2/api_v2_progress.c b/src/web/api/v2/api_v2_progress.c new file mode 100644 index 000000000..ebb53ca88 --- /dev/null +++ b/src/web/api/v2/api_v2_progress.c @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_progress(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + char *transaction = NULL; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "transaction")) transaction = value; + } + + nd_uuid_t tr; + uuid_parse_flexi(transaction, tr); + + rrd_function_call_progresser(&tr); + + return web_api_v2_report_progress(&tr, w->response.data); +} diff --git a/src/web/api/v2/api_v2_q.c b/src/web/api/v2/api_v2_q.c new file mode 100644 index 000000000..57fcec7dd --- /dev/null +++ b/src/web/api/v2/api_v2_q.c @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_q(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal( + host, w, url, + CONTEXTS_V2_SEARCH | CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_NODES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_VERSIONS); +} diff --git a/src/web/api/v2/api_v2_versions.c b/src/web/api/v2/api_v2_versions.c new file mode 100644 index 000000000..299e7a30c --- /dev/null +++ b/src/web/api/v2/api_v2_versions.c @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int api_v2_versions(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return api_v2_contexts_internal(host, w, url, CONTEXTS_V2_VERSIONS); +} diff --git a/src/web/api/v2/api_v2_webrtc.c b/src/web/api/v2/api_v2_webrtc.c new file mode 100644 index 000000000..dcd383d47 --- /dev/null +++ b/src/web/api/v2/api_v2_webrtc.c @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" +#include "../../rtc/webrtc.h" + +int api_v2_webrtc(RRDHOST *host __maybe_unused, struct web_client *w, char *url __maybe_unused) { + return webrtc_new_connection(buffer_tostring(w->payload), w->response.data); +} diff --git a/src/web/api/v2/api_v2_weights.c b/src/web/api/v2/api_v2_weights.c new file mode 100644 index 000000000..442c8b75a --- /dev/null +++ b/src/web/api/v2/api_v2_weights.c @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v2_calls.h" + +int web_client_api_request_weights(RRDHOST *host, struct web_client *w, char *url, WEIGHTS_METHOD method, WEIGHTS_FORMAT format, size_t api_version) { + if (!netdata_ready) + return HTTP_RESP_SERVICE_UNAVAILABLE; + + time_t baseline_after = 0, baseline_before = 0, after = 0, before = 0; + size_t points = 0; + RRDR_OPTIONS options = 0; + RRDR_TIME_GROUPING time_group_method = RRDR_GROUPING_AVERAGE; + time_t timeout_ms = 0; + size_t tier = 0; + const char *time_group_options = NULL, *scope_contexts = NULL, *scope_nodes = NULL, *contexts = NULL, *nodes = NULL, + *instances = NULL, *dimensions = NULL, *labels = NULL, *alerts = NULL; + + struct group_by_pass group_by = { + .group_by = RRDR_GROUP_BY_NONE, + .group_by_label = NULL, + .aggregation = RRDR_GROUP_BY_FUNCTION_AVERAGE, + }; + + while (url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if (!value || !*value) + continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if (!name || !*name) + continue; + if (!value || !*value) + continue; + + if (!strcmp(name, "baseline_after")) + baseline_after = str2l(value); + + else if (!strcmp(name, "baseline_before")) + baseline_before = str2l(value); + + else if (!strcmp(name, "after") || !strcmp(name, "highlight_after")) + after = str2l(value); + + else if (!strcmp(name, "before") || !strcmp(name, "highlight_before")) + before = str2l(value); + + else if (!strcmp(name, "points") || !strcmp(name, "max_points")) + points = str2ul(value); + + else if (!strcmp(name, "timeout")) + timeout_ms = str2l(value); + + else if((api_version == 1 && !strcmp(name, "group")) || (api_version >= 2 && !strcmp(name, "time_group"))) + time_group_method = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); + + else if((api_version == 1 && !strcmp(name, "group_options")) || (api_version >= 2 && !strcmp(name, "time_group_options"))) + time_group_options = value; + + else if(!strcmp(name, "options")) + options |= rrdr_options_parse(value); + + else if(!strcmp(name, "method")) + method = weights_string_to_method(value); + + else if(api_version == 1 && (!strcmp(name, "context") || !strcmp(name, "contexts"))) + scope_contexts = value; + + else if(api_version >= 2 && !strcmp(name, "scope_nodes")) scope_nodes = value; + else if(api_version >= 2 && !strcmp(name, "scope_contexts")) scope_contexts = value; + else if(api_version >= 2 && !strcmp(name, "nodes")) nodes = value; + else if(api_version >= 2 && !strcmp(name, "contexts")) contexts = value; + else if(api_version >= 2 && !strcmp(name, "instances")) instances = value; + else if(api_version >= 2 && !strcmp(name, "dimensions")) dimensions = value; + else if(api_version >= 2 && !strcmp(name, "labels")) labels = value; + else if(api_version >= 2 && !strcmp(name, "alerts")) alerts = value; + else if(api_version >= 2 && (!strcmp(name, "group_by") || !strcmp(name, "group_by[0]"))) { + group_by.group_by = group_by_parse(value); + } + else if(api_version >= 2 && (!strcmp(name, "group_by_label") || !strcmp(name, "group_by_label[0]"))) { + group_by.group_by_label = value; + } + else if(api_version >= 2 && (!strcmp(name, "aggregation") || !strcmp(name, "aggregation[0]"))) { + group_by.aggregation = group_by_aggregate_function_parse(value); + } + + else if(!strcmp(name, "tier")) { + tier = str2ul(value); + if(tier < storage_tiers) + options |= RRDR_OPTION_SELECTED_TIER; + else + tier = 0; + } + } + + if(options == 0) + // the user did not set any options + options = RRDR_OPTION_NOT_ALIGNED | RRDR_OPTION_NULL2ZERO | RRDR_OPTION_NONZERO; + else + // the user set some options, add also these + options |= RRDR_OPTION_NOT_ALIGNED | RRDR_OPTION_NULL2ZERO; + + if(options & RRDR_OPTION_PERCENTAGE) + options |= RRDR_OPTION_ABSOLUTE; + + if(options & RRDR_OPTION_DEBUG) + options &= ~RRDR_OPTION_MINIFY; + + BUFFER *wb = w->response.data; + buffer_flush(wb); + wb->content_type = CT_APPLICATION_JSON; + + QUERY_WEIGHTS_REQUEST qwr = { + .version = api_version, + .host = (api_version == 1) ? NULL : host, + .scope_nodes = scope_nodes, + .scope_contexts = scope_contexts, + .nodes = nodes, + .contexts = contexts, + .instances = instances, + .dimensions = dimensions, + .labels = labels, + .alerts = alerts, + .group_by = { + .group_by = group_by.group_by, + .group_by_label = group_by.group_by_label, + .aggregation = group_by.aggregation, + }, + .method = method, + .format = format, + .time_group_method = time_group_method, + .time_group_options = time_group_options, + .baseline_after = baseline_after, + .baseline_before = baseline_before, + .after = after, + .before = before, + .points = points, + .options = options, + .tier = tier, + .timeout_ms = timeout_ms, + + .interrupt_callback = web_client_interrupt_callback, + .interrupt_callback_data = w, + + .transaction = &w->transaction, + }; + + return web_api_v12_weights(wb, &qwr); +} + +int api_v2_weights(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { + return web_client_api_request_weights(host, w, url, WEIGHTS_METHOD_VALUE, WEIGHTS_FORMAT_MULTINODE, 2); +} diff --git a/src/web/api/v3/api_v3_calls.h b/src/web/api/v3/api_v3_calls.h new file mode 100644 index 000000000..4cee766fd --- /dev/null +++ b/src/web/api/v3/api_v3_calls.h @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_API_V3_CALLS_H +#define NETDATA_API_V3_CALLS_H + +#include "../web_api_v3.h" + +int api_v3_settings(RRDHOST *host, struct web_client *w, char *url); +int api_v3_me(RRDHOST *host, struct web_client *w, char *url); + +#endif //NETDATA_API_V3_CALLS_H diff --git a/src/web/api/v3/api_v3_me.c b/src/web/api/v3/api_v3_me.c new file mode 100644 index 000000000..39ba2c29b --- /dev/null +++ b/src/web/api/v3/api_v3_me.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "api_v3_calls.h" + +int api_v3_me(RRDHOST *host __maybe_unused, struct web_client *w, char *url __maybe_unused) { + BUFFER *wb = w->response.data; + buffer_reset(wb); + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_MINIFY); + + const char *auth; + switch(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_CLOUD|WEB_CLIENT_FLAG_AUTH_BEARER|WEB_CLIENT_FLAG_AUTH_GOD)) { + case WEB_CLIENT_FLAG_AUTH_CLOUD: + auth = "cloud"; + break; + + case WEB_CLIENT_FLAG_AUTH_BEARER: + auth = "bearer"; + break; + + case WEB_CLIENT_FLAG_AUTH_GOD: + auth = "god"; + break; + + default: + auth = "none"; + break; + } + buffer_json_member_add_string(wb, "auth", auth); + + buffer_json_member_add_uuid(wb, "cloud_account_id", w->auth.cloud_account_id); + buffer_json_member_add_string(wb, "client_name", w->auth.client_name); + http_access2buffer_json_array(wb, "access", w->access); + buffer_json_member_add_string(wb, "user_role", http_id2user_role(w->user_role)); + + buffer_json_finalize(wb); + return HTTP_RESP_OK; +} diff --git a/src/web/api/v3/api_v3_settings.c b/src/web/api/v3/api_v3_settings.c new file mode 100644 index 000000000..3b02e6b61 --- /dev/null +++ b/src/web/api/v3/api_v3_settings.c @@ -0,0 +1,285 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +/* + * /api/v3/settings + * + * QUERY STRING PARAMETERS: + * - file=a file name (alphanumerics, dashes, underscores) + * When the user is not authenticated with a bearer token + * only the 'default' file is allowed. + * Authenticated users can create, store and update any + * settings file. + * + * HTTP METHODS + * - GET to retrieve a file + * - PUT to create or update a file + * + * PAYLOAD + * - The payload MUST have the member 'version'. + * - The payload MAY have anything else. + * - The maximum payload size in JSON is 20MiB. + * - When updating the payload, the caller must specify the + * version of the existing file. If this check fails, + * Netdata will return 409 (conflict). + * When the caller receives 409, it means there are updates + * in the payload outside its control and the object MUST + * be loaded again to find its current version to update it. + * After loading it, the caller must reapply the changes and + * PUT it again. + * - Netdata will increase the version on every PUT action. + * So, the payload MUST specify the version found on disk + * but, Netdata will increment the version before saving it. + */ + +#include "api_v3_calls.h" + +#define MAX_SETTINGS_SIZE_BYTES (20 * 1024 * 1024) + +// we need an r/w spinlock to ensure that reads and write do not happen +// concurrently for settings files +static RW_SPINLOCK settings_spinlock = NETDATA_RW_SPINLOCK_INITIALIZER; + +static inline void settings_path(char out[FILENAME_MAX]) { + filename_from_path_entry(out, netdata_configured_varlib_dir, "settings", NULL); +} + +static inline void settings_filename(char out[FILENAME_MAX], const char *file, const char *extension) { + char path[FILENAME_MAX]; + settings_path(path); + filename_from_path_entry(out, path, file, extension); +} + +static inline bool settings_ensure_path_exists(void) { + char path[FILENAME_MAX]; + settings_path(path); + return filename_is_dir(path, true); +} + +static inline size_t settings_extract_json_version(const char *json) { + if(!json || !*json) return 0; + + // Parse the JSON string into a JSON-C object + CLEAN_JSON_OBJECT *jobj = json_tokener_parse(json); + if (jobj == NULL) + return 0; + + // Access the "version" field + struct json_object *version_obj; + if (json_object_object_get_ex(jobj, "version", &version_obj)) + // Extract the integer value of the version + return (size_t)json_object_get_int(version_obj); + + return 0; +} + +static inline void settings_initial_version(BUFFER *wb) { + buffer_reset(wb); + buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_MINIFY); + buffer_json_member_add_uint64(wb, "version", 1); + buffer_json_finalize(wb); +} + +static inline void settings_get(BUFFER *wb, const char *file, bool have_lock) { + char filename[FILENAME_MAX]; + settings_filename(filename, file, NULL); + + buffer_reset(wb); + + if(!have_lock) + rw_spinlock_read_lock(&settings_spinlock); + + bool rc = read_txt_file_to_buffer(filename, wb, MAX_SETTINGS_SIZE_BYTES); + + if(!have_lock) + rw_spinlock_read_unlock(&settings_spinlock); + + if(rc) { + size_t version = settings_extract_json_version(buffer_tostring(wb)); + if (!version) { + nd_log(NDLS_DAEMON, NDLP_ERR, "file '%s' cannot be parsed to extract version", filename); + settings_initial_version(wb); + } + else { + wb->content_type = CT_APPLICATION_JSON; + buffer_no_cacheable(wb); + } + } + else + settings_initial_version(wb); +} + +static inline size_t settings_get_version(const char *path, bool have_lock) { + CLEAN_BUFFER *wb = buffer_create(0, NULL); + settings_get(wb, path, have_lock); + + return settings_extract_json_version(buffer_tostring(wb)); +} + +static inline int settings_put(struct web_client *w, char *file) { + rw_spinlock_write_lock(&settings_spinlock); + + if(!settings_ensure_path_exists()) { + rw_spinlock_write_unlock(&settings_spinlock); + return rrd_call_function_error( + w->response.data, + "Settings path cannot be created or accessed.", + HTTP_RESP_BAD_REQUEST); + } + + size_t old_version = settings_get_version(file, true); + + // Parse the JSON string into a JSON-C object + CLEAN_JSON_OBJECT *jobj = json_tokener_parse(buffer_tostring(w->payload)); + if (jobj == NULL) { + rw_spinlock_write_unlock(&settings_spinlock); + return rrd_call_function_error( + w->response.data, + "Payload cannot be parsed as a JSON object", + HTTP_RESP_BAD_REQUEST); + } + + // Access the "version" field + struct json_object *version_obj; + if (!json_object_object_get_ex(jobj, "version", &version_obj)) { + rw_spinlock_write_unlock(&settings_spinlock); + return rrd_call_function_error( + w->response.data, + "Field version is not found in payload", + HTTP_RESP_BAD_REQUEST); + } + + size_t new_version = (size_t)json_object_get_int(version_obj); + + if (old_version != new_version) { + rw_spinlock_write_unlock(&settings_spinlock); + return rrd_call_function_error( + w->response.data, + "Payload version does not match the version of the stored object", + HTTP_RESP_CONFLICT); + } + + new_version++; + // Set the new version back into the JSON object + json_object_object_add(jobj, "version", json_object_new_int((int)new_version)); + + // Convert the updated JSON object back to a string + const char *updated_json_str = json_object_to_json_string(jobj); + + char tmp_filename[FILENAME_MAX]; + settings_filename(tmp_filename, file, "new"); + + // Save the updated JSON string to a file + FILE *fp = fopen(tmp_filename, "w"); + if (fp == NULL) { + rw_spinlock_write_unlock(&settings_spinlock); + nd_log(NDLS_DAEMON, NDLP_ERR, "cannot open/create settings file '%s'", tmp_filename); + return rrd_call_function_error( + w->response.data, + "Cannot create payload file '%s'", + HTTP_RESP_INTERNAL_SERVER_ERROR); + } + size_t len = strlen(updated_json_str); + if(fwrite(updated_json_str, 1, len, fp) != len) { + fclose(fp); + unlink(tmp_filename); + rw_spinlock_write_unlock(&settings_spinlock); + nd_log(NDLS_DAEMON, NDLP_ERR, "cannot save settings to file '%s'", tmp_filename); + return rrd_call_function_error( + w->response.data, + "Cannot save payload to file '%s'", + HTTP_RESP_INTERNAL_SERVER_ERROR); + } + fclose(fp); + + char filename[FILENAME_MAX]; + settings_filename(filename, file, NULL); + + bool renamed = rename(tmp_filename, filename) == 0; + + rw_spinlock_write_unlock(&settings_spinlock); + + if(!renamed) { + nd_log(NDLS_DAEMON, NDLP_ERR, "cannot rename file '%s' to '%s'", tmp_filename, filename); + return rrd_call_function_error( + w->response.data, + "Failed to move the payload file to its final location", + HTTP_RESP_INTERNAL_SERVER_ERROR); + } + + return rrd_call_function_error( + w->response.data, + "OK", + HTTP_RESP_OK); +} + +static inline bool is_settings_file_valid(char *file) { + char *s = file; + + if(!s || !*s) + return false; + + while(*s) { + if(!isalnum((uint8_t)*s) && *s != '-' && *s != '_') + return false; + s++; + } + + return true; +} + +int api_v3_settings(RRDHOST *host, struct web_client *w, char *url) { + char *file = NULL; + + while(url) { + char *value = strsep_skip_consecutive_separators(&url, "&"); + if(!value || !*value) continue; + + char *name = strsep_skip_consecutive_separators(&value, "="); + if(!name || !*name) continue; + if(!value || !*value) continue; + + // name and value are now the parameters + // they are not null and not empty + + if(!strcmp(name, "file")) + file = value; + } + + if(!is_settings_file_valid(file)) + return rrd_call_function_error( + w->response.data, + "Invalid settings file given.", + HTTP_RESP_BAD_REQUEST); + + if(host != localhost) + return rrd_call_function_error( + w->response.data, + "Settings API is only allowed for the agent node.", + HTTP_RESP_BAD_REQUEST); + + if(web_client_flags_check_auth(w) != WEB_CLIENT_FLAG_AUTH_BEARER && strcmp(file, "default") != 0) + return rrd_call_function_error( + w->response.data, + "Only the 'default' settings file is allowed for anonymous users", + HTTP_RESP_BAD_REQUEST); + + switch(w->mode) { + case HTTP_REQUEST_MODE_GET: + settings_get(w->response.data, file, false); + return HTTP_RESP_OK; + + case HTTP_REQUEST_MODE_PUT: + if(!w->payload || !buffer_strlen(w->payload)) + return rrd_call_function_error( + w->response.data, + "Settings API PUT action requires a payload.", + HTTP_RESP_BAD_REQUEST); + + return settings_put(w, file); + + default: + return rrd_call_function_error(w->response.data, + "Invalid HTTP mode. HTTP modes GET and PUT are supported.", + HTTP_RESP_BAD_REQUEST); + } +} diff --git a/src/web/api/web_api.c b/src/web/api/web_api.c index 4e936be5b..88be32a40 100644 --- a/src/web/api/web_api.c +++ b/src/web/api/web_api.c @@ -2,6 +2,12 @@ #include "web_api.h" +void host_labels2json(RRDHOST *host, BUFFER *wb, const char *key) { + buffer_json_member_add_object(wb, key); + rrdlabels_to_buffer_json_members(host->rrdlabels, wb); + buffer_json_object_close(wb); +} + int web_client_api_request_vX(RRDHOST *host, struct web_client *w, char *url_path_endpoint, struct web_api_command *api_commands) { buffer_no_cacheable(w->response.data); @@ -11,15 +17,16 @@ int web_client_api_request_vX(RRDHOST *host, struct web_client *w, char *url_pat internal_fatal(!web_client_flags_check_auth(w) && (w->access & HTTP_ACCESS_SIGNED_ID), "signed-in permission is set, but it shouldn't"); +#ifdef NETDATA_GOD_MODE + web_client_set_permissions(w, HTTP_ACCESS_ALL, HTTP_USER_ROLE_ADMIN, WEB_CLIENT_FLAG_AUTH_GOD); +#else if(!web_client_flags_check_auth(w)) { - w->user_role = (netdata_is_protected_by_bearer) ? HTTP_USER_ROLE_NONE : HTTP_USER_ROLE_ANY; - w->access = (netdata_is_protected_by_bearer) ? HTTP_ACCESS_NONE : HTTP_ACCESS_ANONYMOUS_DATA; + web_client_set_permissions( + w, + (netdata_is_protected_by_bearer) ? HTTP_ACCESS_NONE : HTTP_ACCESS_ANONYMOUS_DATA, + (netdata_is_protected_by_bearer) ? HTTP_USER_ROLE_NONE : HTTP_USER_ROLE_ANY, + 0); } - -#ifdef NETDATA_GOD_MODE - web_client_flag_set(w, WEB_CLIENT_FLAG_AUTH_GOD); - w->user_role = HTTP_USER_ROLE_ADMIN; - w->access = HTTP_ACCESS_ALL; #endif if(unlikely(!url_path_endpoint || !*url_path_endpoint)) { @@ -110,156 +117,66 @@ RRDCONTEXT_TO_JSON_OPTIONS rrdcontext_to_json_parse_options(char *o) { return options; } -int web_client_api_request_weights(RRDHOST *host, struct web_client *w, char *url, WEIGHTS_METHOD method, WEIGHTS_FORMAT format, size_t api_version) { - if (!netdata_ready) - return HTTP_RESP_SERVICE_UNAVAILABLE; - - time_t baseline_after = 0, baseline_before = 0, after = 0, before = 0; - size_t points = 0; - RRDR_OPTIONS options = 0; - RRDR_TIME_GROUPING time_group_method = RRDR_GROUPING_AVERAGE; - time_t timeout_ms = 0; - size_t tier = 0; - const char *time_group_options = NULL, *scope_contexts = NULL, *scope_nodes = NULL, *contexts = NULL, *nodes = NULL, - *instances = NULL, *dimensions = NULL, *labels = NULL, *alerts = NULL; - - struct group_by_pass group_by = { - .group_by = RRDR_GROUP_BY_NONE, - .group_by_label = NULL, - .aggregation = RRDR_GROUP_BY_FUNCTION_AVERAGE, - }; - - while (url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) - continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if (!name || !*name) - continue; - if (!value || !*value) - continue; - - if (!strcmp(name, "baseline_after")) - baseline_after = str2l(value); - - else if (!strcmp(name, "baseline_before")) - baseline_before = str2l(value); - - else if (!strcmp(name, "after") || !strcmp(name, "highlight_after")) - after = str2l(value); - - else if (!strcmp(name, "before") || !strcmp(name, "highlight_before")) - before = str2l(value); - - else if (!strcmp(name, "points") || !strcmp(name, "max_points")) - points = str2ul(value); - - else if (!strcmp(name, "timeout")) - timeout_ms = str2l(value); - - else if((api_version == 1 && !strcmp(name, "group")) || (api_version >= 2 && !strcmp(name, "time_group"))) - time_group_method = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); - - else if((api_version == 1 && !strcmp(name, "group_options")) || (api_version >= 2 && !strcmp(name, "time_group_options"))) - time_group_options = value; - - else if(!strcmp(name, "options")) - options |= rrdr_options_parse(value); - - else if(!strcmp(name, "method")) - method = weights_string_to_method(value); - - else if(api_version == 1 && (!strcmp(name, "context") || !strcmp(name, "contexts"))) - scope_contexts = value; - - else if(api_version >= 2 && !strcmp(name, "scope_nodes")) scope_nodes = value; - else if(api_version >= 2 && !strcmp(name, "scope_contexts")) scope_contexts = value; - else if(api_version >= 2 && !strcmp(name, "nodes")) nodes = value; - else if(api_version >= 2 && !strcmp(name, "contexts")) contexts = value; - else if(api_version >= 2 && !strcmp(name, "instances")) instances = value; - else if(api_version >= 2 && !strcmp(name, "dimensions")) dimensions = value; - else if(api_version >= 2 && !strcmp(name, "labels")) labels = value; - else if(api_version >= 2 && !strcmp(name, "alerts")) alerts = value; - else if(api_version >= 2 && (!strcmp(name, "group_by") || !strcmp(name, "group_by[0]"))) { - group_by.group_by = group_by_parse(value); - } - else if(api_version >= 2 && (!strcmp(name, "group_by_label") || !strcmp(name, "group_by_label[0]"))) { - group_by.group_by_label = value; - } - else if(api_version >= 2 && (!strcmp(name, "aggregation") || !strcmp(name, "aggregation[0]"))) { - group_by.aggregation = group_by_aggregate_function_parse(value); - } - else if(!strcmp(name, "tier")) { - tier = str2ul(value); - if(tier < storage_tiers) - options |= RRDR_OPTION_SELECTED_TIER; - else - tier = 0; - } - } +bool web_client_interrupt_callback(void *data) { + struct web_client *w = data; - if(options == 0) - // the user did not set any options - options = RRDR_OPTION_NOT_ALIGNED | RRDR_OPTION_NULL2ZERO | RRDR_OPTION_NONZERO; + bool ret; + if(w->interrupt.callback) + ret = w->interrupt.callback(w, w->interrupt.callback_data); else - // the user set some options, add also these - options |= RRDR_OPTION_NOT_ALIGNED | RRDR_OPTION_NULL2ZERO; - - if(options & RRDR_OPTION_PERCENTAGE) - options |= RRDR_OPTION_ABSOLUTE; - - if(options & RRDR_OPTION_DEBUG) - options &= ~RRDR_OPTION_MINIFY; - - BUFFER *wb = w->response.data; - buffer_flush(wb); - wb->content_type = CT_APPLICATION_JSON; - - QUERY_WEIGHTS_REQUEST qwr = { - .version = api_version, - .host = (api_version == 1) ? NULL : host, - .scope_nodes = scope_nodes, - .scope_contexts = scope_contexts, - .nodes = nodes, - .contexts = contexts, - .instances = instances, - .dimensions = dimensions, - .labels = labels, - .alerts = alerts, - .group_by = { - .group_by = group_by.group_by, - .group_by_label = group_by.group_by_label, - .aggregation = group_by.aggregation, - }, - .method = method, - .format = format, - .time_group_method = time_group_method, - .time_group_options = time_group_options, - .baseline_after = baseline_after, - .baseline_before = baseline_before, - .after = after, - .before = before, - .points = points, - .options = options, - .tier = tier, - .timeout_ms = timeout_ms, - - .interrupt_callback = web_client_interrupt_callback, - .interrupt_callback_data = w, - - .transaction = &w->transaction, - }; - - return web_api_v12_weights(wb, &qwr); + ret = is_socket_closed(w->ofd); + + return ret; } -bool web_client_interrupt_callback(void *data) { - struct web_client *w = data; +void nd_web_api_init(void) { + contexts_alert_statuses_init(); + rrdr_options_init(); + contexts_options_init(); + datasource_formats_init(); + time_grouping_init(); +} - if(w->interrupt.callback) - return w->interrupt.callback(w, w->interrupt.callback_data); - return sock_has_output_error(w->ofd); +bool request_source_is_cloud(const char *source) { + return source && *source && strstartswith(source, "method=NC,"); +} + +void web_client_api_request_vX_source_to_buffer(struct web_client *w, BUFFER *source) { + if(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_CLOUD)) + buffer_sprintf(source, "method=NC"); + else if(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_BEARER)) + buffer_sprintf(source, "method=api-bearer"); + else + buffer_sprintf(source, "method=api"); + + if(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_GOD)) + buffer_strcat(source, ",role=god"); + else + buffer_sprintf(source, ",role=%s", http_id2user_role(w->user_role)); + + buffer_sprintf(source, ",permissions="HTTP_ACCESS_FORMAT, (HTTP_ACCESS_FORMAT_CAST)w->access); + + if(w->auth.client_name[0]) + buffer_sprintf(source, ",user=%s", w->auth.client_name); + + if(!uuid_is_null(w->auth.cloud_account_id)) { + char uuid_str[UUID_COMPACT_STR_LEN]; + uuid_unparse_lower_compact(w->auth.cloud_account_id, uuid_str); + buffer_sprintf(source, ",account=%s", uuid_str); + } + + if(w->client_ip[0]) + buffer_sprintf(source, ",ip=%s", w->client_ip); + + if(w->forwarded_for) + buffer_sprintf(source, ",forwarded_for=%s", w->forwarded_for); } + +void web_client_progress_functions_update(void *data, size_t done, size_t all) { + // handle progress updates from the plugin + struct web_client *w = data; + query_progress_functions_update(&w->transaction, done, all); +} + diff --git a/src/web/api/web_api.h b/src/web/api/web_api.h index 634e59657..cb694a33d 100644 --- a/src/web/api/web_api.h +++ b/src/web/api/web_api.h @@ -3,14 +3,28 @@ #ifndef NETDATA_WEB_API_H #define NETDATA_WEB_API_H 1 +#define ENABLE_API_V1 1 +#define ENABLE_API_v2 1 + +struct web_client; + #include "daemon/common.h" +#include "maps/maps.h" +#include "functions/functions.h" + #include "web/api/http_header.h" #include "web/api/http_auth.h" -#include "web/api/badges/web_buffer_svg.h" -#include "web/api/ilove/ilove.h" #include "web/api/formatters/rrd2json.h" #include "web/api/queries/weights.h" +void nd_web_api_init(void); + +bool request_source_is_cloud(const char *source); +void web_client_api_request_vX_source_to_buffer(struct web_client *w, BUFFER *source); +void web_client_progress_functions_update(void *data, size_t done, size_t all); + +void host_labels2json(RRDHOST *host, BUFFER *wb, const char *key); + struct web_api_command { const char *api; uint32_t hash; @@ -37,7 +51,11 @@ int web_client_api_request_weights(RRDHOST *host, struct web_client *w, char *ur bool web_client_interrupt_callback(void *data); +char *format_value_and_unit(char *value_string, size_t value_string_len, + NETDATA_DOUBLE value, const char *units, int precision); + #include "web_api_v1.h" #include "web_api_v2.h" +#include "web_api_v3.h" #endif //NETDATA_WEB_API_H diff --git a/src/web/api/web_api_v1.c b/src/web/api/web_api_v1.c index bfaa4f6f7..8d38e01db 100644 --- a/src/web/api/web_api_v1.c +++ b/src/web/api/web_api_v1.c @@ -1,1958 +1,232 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "web_api_v1.h" - -char *api_secret; - -static struct { - const char *name; - uint32_t hash; - RRDR_OPTIONS value; -} rrdr_options[] = { - { "nonzero" , 0 , RRDR_OPTION_NONZERO} - , {"flip" , 0 , RRDR_OPTION_REVERSED} - , {"reversed" , 0 , RRDR_OPTION_REVERSED} - , {"reverse" , 0 , RRDR_OPTION_REVERSED} - , {"jsonwrap" , 0 , RRDR_OPTION_JSON_WRAP} - , {"min2max" , 0 , RRDR_OPTION_DIMS_MIN2MAX} // rrdr2value() only - , {"average" , 0 , RRDR_OPTION_DIMS_AVERAGE} // rrdr2value() only - , {"min" , 0 , RRDR_OPTION_DIMS_MIN} // rrdr2value() only - , {"max" , 0 , RRDR_OPTION_DIMS_MAX} // rrdr2value() only - , {"ms" , 0 , RRDR_OPTION_MILLISECONDS} - , {"milliseconds" , 0 , RRDR_OPTION_MILLISECONDS} - , {"absolute" , 0 , RRDR_OPTION_ABSOLUTE} - , {"abs" , 0 , RRDR_OPTION_ABSOLUTE} - , {"absolute_sum" , 0 , RRDR_OPTION_ABSOLUTE} - , {"absolute-sum" , 0 , RRDR_OPTION_ABSOLUTE} - , {"display_absolute" , 0 , RRDR_OPTION_DISPLAY_ABS} - , {"display-absolute" , 0 , RRDR_OPTION_DISPLAY_ABS} - , {"seconds" , 0 , RRDR_OPTION_SECONDS} - , {"null2zero" , 0 , RRDR_OPTION_NULL2ZERO} - , {"objectrows" , 0 , RRDR_OPTION_OBJECTSROWS} - , {"google_json" , 0 , RRDR_OPTION_GOOGLE_JSON} - , {"google-json" , 0 , RRDR_OPTION_GOOGLE_JSON} - , {"percentage" , 0 , RRDR_OPTION_PERCENTAGE} - , {"unaligned" , 0 , RRDR_OPTION_NOT_ALIGNED} - , {"match_ids" , 0 , RRDR_OPTION_MATCH_IDS} - , {"match-ids" , 0 , RRDR_OPTION_MATCH_IDS} - , {"match_names" , 0 , RRDR_OPTION_MATCH_NAMES} - , {"match-names" , 0 , RRDR_OPTION_MATCH_NAMES} - , {"anomaly-bit" , 0 , RRDR_OPTION_ANOMALY_BIT} - , {"selected-tier" , 0 , RRDR_OPTION_SELECTED_TIER} - , {"raw" , 0 , RRDR_OPTION_RETURN_RAW} - , {"jw-anomaly-rates" , 0 , RRDR_OPTION_RETURN_JWAR} - , {"natural-points" , 0 , RRDR_OPTION_NATURAL_POINTS} - , {"virtual-points" , 0 , RRDR_OPTION_VIRTUAL_POINTS} - , {"all-dimensions" , 0 , RRDR_OPTION_ALL_DIMENSIONS} - , {"details" , 0 , RRDR_OPTION_SHOW_DETAILS} - , {"debug" , 0 , RRDR_OPTION_DEBUG} - , {"plan" , 0 , RRDR_OPTION_DEBUG} - , {"minify" , 0 , RRDR_OPTION_MINIFY} - , {"group-by-labels" , 0 , RRDR_OPTION_GROUP_BY_LABELS} - , {"label-quotes" , 0 , RRDR_OPTION_LABEL_QUOTES} - , {NULL , 0 , 0} -}; - -static struct { - const char *name; - uint32_t hash; - CONTEXTS_V2_OPTIONS value; -} contexts_v2_options[] = { - {"minify" , 0 , CONTEXT_V2_OPTION_MINIFY} - , {"debug" , 0 , CONTEXT_V2_OPTION_DEBUG} - , {"config" , 0 , CONTEXT_V2_OPTION_ALERTS_WITH_CONFIGURATIONS} - , {"instances" , 0 , CONTEXT_V2_OPTION_ALERTS_WITH_INSTANCES} - , {"values" , 0 , CONTEXT_V2_OPTION_ALERTS_WITH_VALUES} - , {"summary" , 0 , CONTEXT_V2_OPTION_ALERTS_WITH_SUMMARY} - , {NULL , 0 , 0} -}; - -static struct { - const char *name; - uint32_t hash; - CONTEXTS_V2_ALERT_STATUS value; -} contexts_v2_alert_status[] = { - {"uninitialized" , 0 , CONTEXT_V2_ALERT_UNINITIALIZED} - , {"undefined" , 0 , CONTEXT_V2_ALERT_UNDEFINED} - , {"clear" , 0 , CONTEXT_V2_ALERT_CLEAR} - , {"raised" , 0 , CONTEXT_V2_ALERT_RAISED} - , {"active" , 0 , CONTEXT_V2_ALERT_RAISED} - , {"warning" , 0 , CONTEXT_V2_ALERT_WARNING} - , {"critical" , 0 , CONTEXT_V2_ALERT_CRITICAL} - , {NULL , 0 , 0} -}; - -static struct { - const char *name; - uint32_t hash; - DATASOURCE_FORMAT value; -} api_v1_data_formats[] = { - { DATASOURCE_FORMAT_DATATABLE_JSON , 0 , DATASOURCE_DATATABLE_JSON} - , {DATASOURCE_FORMAT_DATATABLE_JSONP, 0 , DATASOURCE_DATATABLE_JSONP} - , {DATASOURCE_FORMAT_JSON , 0 , DATASOURCE_JSON} - , {DATASOURCE_FORMAT_JSON2 , 0 , DATASOURCE_JSON2} - , {DATASOURCE_FORMAT_JSONP , 0 , DATASOURCE_JSONP} - , {DATASOURCE_FORMAT_SSV , 0 , DATASOURCE_SSV} - , {DATASOURCE_FORMAT_CSV , 0 , DATASOURCE_CSV} - , {DATASOURCE_FORMAT_TSV , 0 , DATASOURCE_TSV} - , {"tsv-excel" , 0 , DATASOURCE_TSV} - , {DATASOURCE_FORMAT_HTML , 0 , DATASOURCE_HTML} - , {DATASOURCE_FORMAT_JS_ARRAY , 0 , DATASOURCE_JS_ARRAY} - , {DATASOURCE_FORMAT_SSV_COMMA , 0 , DATASOURCE_SSV_COMMA} - , {DATASOURCE_FORMAT_CSV_JSON_ARRAY , 0 , DATASOURCE_CSV_JSON_ARRAY} - , {DATASOURCE_FORMAT_CSV_MARKDOWN , 0 , DATASOURCE_CSV_MARKDOWN} - - // terminator - , {NULL, 0, 0} -}; - -static struct { - const char *name; - uint32_t hash; - DATASOURCE_FORMAT value; -} api_v1_data_google_formats[] = { - // this is not an error - when Google requests json, it expects javascript - // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#responseformat - {"json", 0, DATASOURCE_DATATABLE_JSONP} - , {"html", 0, DATASOURCE_HTML} - , {"csv", 0, DATASOURCE_CSV} - , {"tsv-excel", 0, DATASOURCE_TSV} - - // terminator - , {NULL, 0, 0} -}; - -void web_client_api_v1_init(void) { - int i; - - for(i = 0; contexts_v2_alert_status[i].name ; i++) - contexts_v2_alert_status[i].hash = simple_hash(contexts_v2_alert_status[i].name); - - for(i = 0; rrdr_options[i].name ; i++) - rrdr_options[i].hash = simple_hash(rrdr_options[i].name); - - for(i = 0; contexts_v2_options[i].name ; i++) - contexts_v2_options[i].hash = simple_hash(contexts_v2_options[i].name); - - for(i = 0; api_v1_data_formats[i].name ; i++) - api_v1_data_formats[i].hash = simple_hash(api_v1_data_formats[i].name); - - for(i = 0; api_v1_data_google_formats[i].name ; i++) - api_v1_data_google_formats[i].hash = simple_hash(api_v1_data_google_formats[i].name); - - time_grouping_init(); - - nd_uuid_t uuid; - - // generate - uuid_generate(uuid); - - // unparse (to string) - char uuid_str[37]; - uuid_unparse_lower(uuid, uuid_str); -} - -char *get_mgmt_api_key(void) { - char filename[FILENAME_MAX + 1]; - snprintfz(filename, FILENAME_MAX, "%s/netdata.api.key", netdata_configured_varlib_dir); - char *api_key_filename=config_get(CONFIG_SECTION_REGISTRY, "netdata management api key file", filename); - static char guid[GUID_LEN + 1] = ""; - - if(likely(guid[0])) - return guid; - - // read it from disk - int fd = open(api_key_filename, O_RDONLY | O_CLOEXEC); - if(fd != -1) { - char buf[GUID_LEN + 1]; - if(read(fd, buf, GUID_LEN) != GUID_LEN) - netdata_log_error("Failed to read management API key from '%s'", api_key_filename); - else { - buf[GUID_LEN] = '\0'; - if(regenerate_guid(buf, guid) == -1) { - netdata_log_error("Failed to validate management API key '%s' from '%s'.", - buf, api_key_filename); - - guid[0] = '\0'; - } - } - close(fd); - } - - // generate a new one? - if(!guid[0]) { - nd_uuid_t uuid; - - uuid_generate_time(uuid); - uuid_unparse_lower(uuid, guid); - guid[GUID_LEN] = '\0'; - - // save it - fd = open(api_key_filename, O_WRONLY|O_CREAT|O_TRUNC | O_CLOEXEC, 444); - if(fd == -1) { - netdata_log_error("Cannot create unique management API key file '%s'. Please adjust config parameter 'netdata management api key file' to a proper path and file.", api_key_filename); - goto temp_key; - } - - if(write(fd, guid, GUID_LEN) != GUID_LEN) { - netdata_log_error("Cannot write the unique management API key file '%s'. Please adjust config parameter 'netdata management api key file' to a proper path and file with enough space left.", api_key_filename); - close(fd); - goto temp_key; - } - - close(fd); - } - - return guid; - -temp_key: - netdata_log_info("You can still continue to use the alarm management API using the authorization token %s during this Netdata session only.", guid); - return guid; -} - -void web_client_api_v1_management_init(void) { - api_secret = get_mgmt_api_key(); -} - -inline RRDR_OPTIONS rrdr_options_parse_one(const char *o) { - RRDR_OPTIONS ret = 0; - - if(!o || !*o) return ret; - - uint32_t hash = simple_hash(o); - int i; - for(i = 0; rrdr_options[i].name ; i++) { - if (unlikely(hash == rrdr_options[i].hash && !strcmp(o, rrdr_options[i].name))) { - ret |= rrdr_options[i].value; - break; - } - } - - return ret; -} - -inline RRDR_OPTIONS rrdr_options_parse(char *o) { - RRDR_OPTIONS ret = 0; - char *tok; - - while(o && *o && (tok = strsep_skip_consecutive_separators(&o, ", |"))) { - if(!*tok) continue; - ret |= rrdr_options_parse_one(tok); - } - - return ret; -} - -inline CONTEXTS_V2_OPTIONS web_client_api_request_v2_context_options(char *o) { - CONTEXTS_V2_OPTIONS ret = 0; - char *tok; - - while(o && *o && (tok = strsep_skip_consecutive_separators(&o, ", |"))) { - if(!*tok) continue; - - uint32_t hash = simple_hash(tok); - int i; - for(i = 0; contexts_v2_options[i].name ; i++) { - if (unlikely(hash == contexts_v2_options[i].hash && !strcmp(tok, contexts_v2_options[i].name))) { - ret |= contexts_v2_options[i].value; - break; - } - } - } - - return ret; -} - -inline CONTEXTS_V2_ALERT_STATUS web_client_api_request_v2_alert_status(char *o) { - CONTEXTS_V2_ALERT_STATUS ret = 0; - char *tok; - - while(o && *o && (tok = strsep_skip_consecutive_separators(&o, ", |"))) { - if(!*tok) continue; - - uint32_t hash = simple_hash(tok); - int i; - for(i = 0; contexts_v2_alert_status[i].name ; i++) { - if (unlikely(hash == contexts_v2_alert_status[i].hash && !strcmp(tok, contexts_v2_alert_status[i].name))) { - ret |= contexts_v2_alert_status[i].value; - break; - } - } - } - - return ret; -} - -void web_client_api_request_v2_contexts_alerts_status_to_buffer_json_array(BUFFER *wb, const char *key, CONTEXTS_V2_ALERT_STATUS options) { - buffer_json_member_add_array(wb, key); - - RRDR_OPTIONS used = 0; // to prevent adding duplicates - for(int i = 0; contexts_v2_alert_status[i].name ; i++) { - if (unlikely((contexts_v2_alert_status[i].value & options) && !(contexts_v2_alert_status[i].value & used))) { - const char *name = contexts_v2_alert_status[i].name; - used |= contexts_v2_alert_status[i].value; - - buffer_json_add_array_item_string(wb, name); - } - } - - buffer_json_array_close(wb); -} - -void web_client_api_request_v2_contexts_options_to_buffer_json_array(BUFFER *wb, const char *key, CONTEXTS_V2_OPTIONS options) { - buffer_json_member_add_array(wb, key); - - RRDR_OPTIONS used = 0; // to prevent adding duplicates - for(int i = 0; contexts_v2_options[i].name ; i++) { - if (unlikely((contexts_v2_options[i].value & options) && !(contexts_v2_options[i].value & used))) { - const char *name = contexts_v2_options[i].name; - used |= contexts_v2_options[i].value; - - buffer_json_add_array_item_string(wb, name); - } - } - - buffer_json_array_close(wb); -} - -void rrdr_options_to_buffer_json_array(BUFFER *wb, const char *key, RRDR_OPTIONS options) { - buffer_json_member_add_array(wb, key); - - RRDR_OPTIONS used = 0; // to prevent adding duplicates - for(int i = 0; rrdr_options[i].name ; i++) { - if (unlikely((rrdr_options[i].value & options) && !(rrdr_options[i].value & used))) { - const char *name = rrdr_options[i].name; - used |= rrdr_options[i].value; - - buffer_json_add_array_item_string(wb, name); - } - } - - buffer_json_array_close(wb); -} - -void rrdr_options_to_buffer(BUFFER *wb, RRDR_OPTIONS options) { - RRDR_OPTIONS used = 0; // to prevent adding duplicates - size_t added = 0; - for(int i = 0; rrdr_options[i].name ; i++) { - if (unlikely((rrdr_options[i].value & options) && !(rrdr_options[i].value & used))) { - const char *name = rrdr_options[i].name; - used |= rrdr_options[i].value; - - if(added++) buffer_strcat(wb, " "); - buffer_strcat(wb, name); - } - } -} - -void web_client_api_request_v1_data_options_to_string(char *buf, size_t size, RRDR_OPTIONS options) { - char *write = buf; - char *end = &buf[size - 1]; - - RRDR_OPTIONS used = 0; // to prevent adding duplicates - int added = 0; - for(int i = 0; rrdr_options[i].name ; i++) { - if (unlikely((rrdr_options[i].value & options) && !(rrdr_options[i].value & used))) { - const char *name = rrdr_options[i].name; - used |= rrdr_options[i].value; - - if(added && write < end) - *write++ = ','; - - while(*name && write < end) - *write++ = *name++; - - added++; - } - } - *write = *end = '\0'; -} - -inline uint32_t web_client_api_request_v1_data_format(char *name) { - uint32_t hash = simple_hash(name); - int i; - - for(i = 0; api_v1_data_formats[i].name ; i++) { - if (unlikely(hash == api_v1_data_formats[i].hash && !strcmp(name, api_v1_data_formats[i].name))) { - return api_v1_data_formats[i].value; - } - } - - return DATASOURCE_JSON; -} - -inline uint32_t web_client_api_request_v1_data_google_format(char *name) { - uint32_t hash = simple_hash(name); - int i; - - for(i = 0; api_v1_data_google_formats[i].name ; i++) { - if (unlikely(hash == api_v1_data_google_formats[i].hash && !strcmp(name, api_v1_data_google_formats[i].name))) { - return api_v1_data_google_formats[i].value; - } - } - - return DATASOURCE_JSON; -} - -int web_client_api_request_v1_alarms_select (char *url) { - int all = 0; - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - if(!strcmp(value, "all") || !strcmp(value, "all=true")) all = 1; - else if(!strcmp(value, "active") || !strcmp(value, "active=true")) all = 0; - } - - return all; -} - -inline int web_client_api_request_v1_alarms(RRDHOST *host, struct web_client *w, char *url) { - int all = web_client_api_request_v1_alarms_select(url); - - buffer_flush(w->response.data); - w->response.data->content_type = CT_APPLICATION_JSON; - health_alarms2json(host, w->response.data, all); - buffer_no_cacheable(w->response.data); - return HTTP_RESP_OK; -} - -inline int web_client_api_request_v1_alarms_values(RRDHOST *host, struct web_client *w, char *url) { - int all = web_client_api_request_v1_alarms_select(url); - - buffer_flush(w->response.data); - w->response.data->content_type = CT_APPLICATION_JSON; - health_alarms_values2json(host, w->response.data, all); - buffer_no_cacheable(w->response.data); - return HTTP_RESP_OK; -} - -inline int web_client_api_request_v1_alarm_count(RRDHOST *host, struct web_client *w, char *url) { - RRDCALC_STATUS status = RRDCALC_STATUS_RAISED; - BUFFER *contexts = NULL; - - buffer_flush(w->response.data); - buffer_sprintf(w->response.data, "["); - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 alarm_count query param '%s' with value '%s'", w->id, name, value); - - char* p = value; - if(!strcmp(name, "status")) { - while ((*p = toupper(*p))) p++; - if (!strcmp("CRITICAL", value)) status = RRDCALC_STATUS_CRITICAL; - else if (!strcmp("WARNING", value)) status = RRDCALC_STATUS_WARNING; - else if (!strcmp("UNINITIALIZED", value)) status = RRDCALC_STATUS_UNINITIALIZED; - else if (!strcmp("UNDEFINED", value)) status = RRDCALC_STATUS_UNDEFINED; - else if (!strcmp("REMOVED", value)) status = RRDCALC_STATUS_REMOVED; - else if (!strcmp("CLEAR", value)) status = RRDCALC_STATUS_CLEAR; - } - else if(!strcmp(name, "context") || !strcmp(name, "ctx")) { - if(!contexts) contexts = buffer_create(255, &netdata_buffers_statistics.buffers_api); - buffer_strcat(contexts, "|"); - buffer_strcat(contexts, value); - } - } - - health_aggregate_alarms(host, w->response.data, contexts, status); - - buffer_sprintf(w->response.data, "]\n"); - w->response.data->content_type = CT_APPLICATION_JSON; - buffer_no_cacheable(w->response.data); - - buffer_free(contexts); - return 200; -} - -inline int web_client_api_request_v1_alarm_log(RRDHOST *host, struct web_client *w, char *url) { - time_t after = 0; - char *chart = NULL; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - if (!strcmp(name, "after")) after = (time_t) strtoul(value, NULL, 0); - else if (!strcmp(name, "chart")) chart = value; - } - - buffer_flush(w->response.data); - w->response.data->content_type = CT_APPLICATION_JSON; - sql_health_alarm_log2json(host, w->response.data, after, chart); - return HTTP_RESP_OK; -} - -inline int web_client_api_request_single_chart(RRDHOST *host, struct web_client *w, char *url, void callback(RRDSET *st, BUFFER *buf)) { - int ret = HTTP_RESP_BAD_REQUEST; - char *chart = NULL; - - buffer_flush(w->response.data); - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "chart")) chart = value; - //else { - /// buffer_sprintf(w->response.data, "Unknown parameter '%s' in request.", name); - // goto cleanup; - //} - } - - if(!chart || !*chart) { - buffer_sprintf(w->response.data, "No chart id is given at the request."); - goto cleanup; - } - - RRDSET *st = rrdset_find(host, chart); - if(!st) st = rrdset_find_byname(host, chart); - if(!st) { - buffer_strcat(w->response.data, "Chart is not found: "); - buffer_strcat_htmlescape(w->response.data, chart); - ret = HTTP_RESP_NOT_FOUND; - goto cleanup; - } - - w->response.data->content_type = CT_APPLICATION_JSON; - st->last_accessed_time_s = now_realtime_sec(); - callback(st, w->response.data); - return HTTP_RESP_OK; - - cleanup: - return ret; -} - -static inline int web_client_api_request_variable(RRDHOST *host, struct web_client *w, char *url) { - int ret = HTTP_RESP_BAD_REQUEST; - char *chart = NULL; - char *variable = NULL; - - buffer_flush(w->response.data); - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "chart")) chart = value; - else if(!strcmp(name, "variable")) variable = value; - } - - if(!chart || !*chart || !variable || !*variable) { - buffer_sprintf(w->response.data, "A chart= and a variable= are required."); - goto cleanup; - } - - RRDSET *st = rrdset_find(host, chart); - if(!st) st = rrdset_find_byname(host, chart); - if(!st) { - buffer_strcat(w->response.data, "Chart is not found: "); - buffer_strcat_htmlescape(w->response.data, chart); - ret = HTTP_RESP_NOT_FOUND; - goto cleanup; - } - - w->response.data->content_type = CT_APPLICATION_JSON; - st->last_accessed_time_s = now_realtime_sec(); - alert_variable_lookup_trace(host, st, variable, w->response.data); - - return HTTP_RESP_OK; - -cleanup: - return ret; -} - -inline int web_client_api_request_v1_alarm_variables(RRDHOST *host, struct web_client *w, char *url) { - return web_client_api_request_single_chart(host, w, url, health_api_v1_chart_variables2json); -} - -static int web_client_api_request_v1_context(RRDHOST *host, struct web_client *w, char *url) { - char *context = NULL; - RRDCONTEXT_TO_JSON_OPTIONS options = RRDCONTEXT_OPTION_NONE; - time_t after = 0, before = 0; - const char *chart_label_key = NULL, *chart_labels_filter = NULL; - BUFFER *dimensions = NULL; - - buffer_flush(w->response.data); - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "context") || !strcmp(name, "ctx")) context = value; - else if(!strcmp(name, "after")) after = str2l(value); - else if(!strcmp(name, "before")) before = str2l(value); - else if(!strcmp(name, "options")) options = rrdcontext_to_json_parse_options(value); - else if(!strcmp(name, "chart_label_key")) chart_label_key = value; - else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value; - else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { - if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); - buffer_strcat(dimensions, "|"); - buffer_strcat(dimensions, value); - } - } - - if(!context || !*context) { - buffer_sprintf(w->response.data, "No context is given at the request."); - return HTTP_RESP_BAD_REQUEST; - } - - SIMPLE_PATTERN *chart_label_key_pattern = NULL; - SIMPLE_PATTERN *chart_labels_filter_pattern = NULL; - SIMPLE_PATTERN *chart_dimensions_pattern = NULL; - - if(chart_label_key) - chart_label_key_pattern = simple_pattern_create(chart_label_key, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, true); - - if(chart_labels_filter) - chart_labels_filter_pattern = simple_pattern_create(chart_labels_filter, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, - true); - - if(dimensions) { - chart_dimensions_pattern = simple_pattern_create(buffer_tostring(dimensions), ",|\t\r\n\f\v", - SIMPLE_PATTERN_EXACT, true); - buffer_free(dimensions); - } - - w->response.data->content_type = CT_APPLICATION_JSON; - int ret = rrdcontext_to_json(host, w->response.data, after, before, options, context, chart_label_key_pattern, chart_labels_filter_pattern, chart_dimensions_pattern); - - simple_pattern_free(chart_label_key_pattern); - simple_pattern_free(chart_labels_filter_pattern); - simple_pattern_free(chart_dimensions_pattern); - - return ret; -} - -static int web_client_api_request_v1_contexts(RRDHOST *host, struct web_client *w, char *url) { - RRDCONTEXT_TO_JSON_OPTIONS options = RRDCONTEXT_OPTION_NONE; - time_t after = 0, before = 0; - const char *chart_label_key = NULL, *chart_labels_filter = NULL; - BUFFER *dimensions = NULL; - - buffer_flush(w->response.data); - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "after")) after = str2l(value); - else if(!strcmp(name, "before")) before = str2l(value); - else if(!strcmp(name, "options")) options = rrdcontext_to_json_parse_options(value); - else if(!strcmp(name, "chart_label_key")) chart_label_key = value; - else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value; - else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { - if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); - buffer_strcat(dimensions, "|"); - buffer_strcat(dimensions, value); - } - } - - SIMPLE_PATTERN *chart_label_key_pattern = NULL; - SIMPLE_PATTERN *chart_labels_filter_pattern = NULL; - SIMPLE_PATTERN *chart_dimensions_pattern = NULL; - - if(chart_label_key) - chart_label_key_pattern = simple_pattern_create(chart_label_key, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, true); - - if(chart_labels_filter) - chart_labels_filter_pattern = simple_pattern_create(chart_labels_filter, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, - true); - - if(dimensions) { - chart_dimensions_pattern = simple_pattern_create(buffer_tostring(dimensions), ",|\t\r\n\f\v", - SIMPLE_PATTERN_EXACT, true); - buffer_free(dimensions); - } - - w->response.data->content_type = CT_APPLICATION_JSON; - int ret = rrdcontexts_to_json(host, w->response.data, after, before, options, chart_label_key_pattern, chart_labels_filter_pattern, chart_dimensions_pattern); - - simple_pattern_free(chart_label_key_pattern); - simple_pattern_free(chart_labels_filter_pattern); - simple_pattern_free(chart_dimensions_pattern); - - return ret; -} - -inline int web_client_api_request_v1_charts(RRDHOST *host, struct web_client *w, char *url) { - (void)url; - - buffer_flush(w->response.data); - w->response.data->content_type = CT_APPLICATION_JSON; - charts2json(host, w->response.data); - return HTTP_RESP_OK; -} - -inline int web_client_api_request_v1_chart(RRDHOST *host, struct web_client *w, char *url) { - return web_client_api_request_single_chart(host, w, url, rrd_stats_api_v1_chart); -} - -// returns the HTTP code -static inline int web_client_api_request_v1_data(RRDHOST *host, struct web_client *w, char *url) { - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 data with URL '%s'", w->id, url); - - int ret = HTTP_RESP_BAD_REQUEST; - BUFFER *dimensions = NULL; - - buffer_flush(w->response.data); - - char *google_version = "0.6", - *google_reqId = "0", - *google_sig = "0", - *google_out = "json", - *responseHandler = NULL, - *outFileName = NULL; - - time_t last_timestamp_in_data = 0, google_timestamp = 0; - - char *chart = NULL; - char *before_str = NULL; - char *after_str = NULL; - char *group_time_str = NULL; - char *points_str = NULL; - char *timeout_str = NULL; - char *context = NULL; - char *chart_label_key = NULL; - char *chart_labels_filter = NULL; - char *group_options = NULL; - size_t tier = 0; - RRDR_TIME_GROUPING group = RRDR_GROUPING_AVERAGE; - DATASOURCE_FORMAT format = DATASOURCE_JSON; - RRDR_OPTIONS options = 0; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 data query param '%s' with value '%s'", w->id, name, value); - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "context")) context = value; - else if(!strcmp(name, "chart_label_key")) chart_label_key = value; - else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value; - else if(!strcmp(name, "chart")) chart = value; - else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) { - if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api); - buffer_strcat(dimensions, "|"); - buffer_strcat(dimensions, value); - } - else if(!strcmp(name, "show_dimensions")) options |= RRDR_OPTION_ALL_DIMENSIONS; - else if(!strcmp(name, "after")) after_str = value; - else if(!strcmp(name, "before")) before_str = value; - else if(!strcmp(name, "points")) points_str = value; - else if(!strcmp(name, "timeout")) timeout_str = value; - else if(!strcmp(name, "gtime")) group_time_str = value; - else if(!strcmp(name, "group_options")) group_options = value; - else if(!strcmp(name, "group")) { - group = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); - } - else if(!strcmp(name, "format")) { - format = web_client_api_request_v1_data_format(value); - } - else if(!strcmp(name, "options")) { - options |= rrdr_options_parse(value); - } - else if(!strcmp(name, "callback")) { - responseHandler = value; - } - else if(!strcmp(name, "filename")) { - outFileName = value; - } - else if(!strcmp(name, "tqx")) { - // parse Google Visualization API options - // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source - char *tqx_name, *tqx_value; - - while(value) { - tqx_value = strsep_skip_consecutive_separators(&value, ";"); - if(!tqx_value || !*tqx_value) continue; - - tqx_name = strsep_skip_consecutive_separators(&tqx_value, ":"); - if(!tqx_name || !*tqx_name) continue; - if(!tqx_value || !*tqx_value) continue; - - if(!strcmp(tqx_name, "version")) - google_version = tqx_value; - else if(!strcmp(tqx_name, "reqId")) - google_reqId = tqx_value; - else if(!strcmp(tqx_name, "sig")) { - google_sig = tqx_value; - google_timestamp = strtoul(google_sig, NULL, 0); - } - else if(!strcmp(tqx_name, "out")) { - google_out = tqx_value; - format = web_client_api_request_v1_data_google_format(google_out); - } - else if(!strcmp(tqx_name, "responseHandler")) - responseHandler = tqx_value; - else if(!strcmp(tqx_name, "outFileName")) - outFileName = tqx_value; - } - } - else if(!strcmp(name, "tier")) { - tier = str2ul(value); - if(tier < storage_tiers) - options |= RRDR_OPTION_SELECTED_TIER; - else - tier = 0; - } - } - - // validate the google parameters given - fix_google_param(google_out); - fix_google_param(google_sig); - fix_google_param(google_reqId); - fix_google_param(google_version); - fix_google_param(responseHandler); - fix_google_param(outFileName); - - RRDSET *st = NULL; - ONEWAYALLOC *owa = onewayalloc_create(0); - QUERY_TARGET *qt = NULL; - - if(!is_valid_sp(chart) && !is_valid_sp(context)) { - buffer_sprintf(w->response.data, "No chart or context is given."); - goto cleanup; - } - - if(chart && !context) { - // check if this is a specific chart - st = rrdset_find(host, chart); - if (!st) st = rrdset_find_byname(host, chart); - } - - long long before = (before_str && *before_str)?str2l(before_str):0; - long long after = (after_str && *after_str) ?str2l(after_str):-600; - int points = (points_str && *points_str)?str2i(points_str):0; - int timeout = (timeout_str && *timeout_str)?str2i(timeout_str): 0; - long group_time = (group_time_str && *group_time_str)?str2l(group_time_str):0; - - QUERY_TARGET_REQUEST qtr = { - .version = 1, - .after = after, - .before = before, - .host = host, - .st = st, - .nodes = NULL, - .contexts = context, - .instances = chart, - .dimensions = (dimensions)?buffer_tostring(dimensions):NULL, - .timeout_ms = timeout, - .points = points, - .format = format, - .options = options, - .time_group_method = group, - .time_group_options = group_options, - .resampling_time = group_time, - .tier = tier, - .chart_label_key = chart_label_key, - .labels = chart_labels_filter, - .query_source = QUERY_SOURCE_API_DATA, - .priority = STORAGE_PRIORITY_NORMAL, - .interrupt_callback = web_client_interrupt_callback, - .interrupt_callback_data = w, - .transaction = &w->transaction, - }; - qt = query_target_create(&qtr); - - if(!qt || !qt->query.used) { - buffer_sprintf(w->response.data, "No metrics where matched to query."); - ret = HTTP_RESP_NOT_FOUND; - goto cleanup; - } - - web_client_timeout_checkpoint_set(w, timeout); - if(web_client_timeout_checkpoint_and_check(w, NULL)) { - ret = w->response.code; - goto cleanup; - } - - if(outFileName && *outFileName) { - buffer_sprintf(w->response.header, "Content-Disposition: attachment; filename=\"%s\"\r\n", outFileName); - netdata_log_debug(D_WEB_CLIENT, "%llu: generating outfilename header: '%s'", w->id, outFileName); - } - - if(format == DATASOURCE_DATATABLE_JSONP) { - if(responseHandler == NULL) - responseHandler = "google.visualization.Query.setResponse"; - - netdata_log_debug(D_WEB_CLIENT_ACCESS, "%llu: GOOGLE JSON/JSONP: version = '%s', reqId = '%s', sig = '%s', out = '%s', responseHandler = '%s', outFileName = '%s'", - w->id, google_version, google_reqId, google_sig, google_out, responseHandler, outFileName - ); - - buffer_sprintf( - w->response.data, - "%s({version:'%s',reqId:'%s',status:'ok',sig:'%"PRId64"',table:", - responseHandler, - google_version, - google_reqId, - (int64_t)(st ? st->last_updated.tv_sec : 0)); - } - else if(format == DATASOURCE_JSONP) { - if(responseHandler == NULL) - responseHandler = "callback"; - - buffer_strcat(w->response.data, responseHandler); - buffer_strcat(w->response.data, "("); - } - - ret = data_query_execute(owa, w->response.data, qt, &last_timestamp_in_data); - - if(format == DATASOURCE_DATATABLE_JSONP) { - if(google_timestamp < last_timestamp_in_data) - buffer_strcat(w->response.data, "});"); - - else { - // the client already has the latest data - buffer_flush(w->response.data); - buffer_sprintf(w->response.data, - "%s({version:'%s',reqId:'%s',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});", - responseHandler, google_version, google_reqId); - } - } - else if(format == DATASOURCE_JSONP) - buffer_strcat(w->response.data, ");"); - - if(qt->internal.relative) - buffer_no_cacheable(w->response.data); - else - buffer_cacheable(w->response.data); - -cleanup: - query_target_release(qt); - onewayalloc_destroy(owa); - buffer_free(dimensions); - return ret; -} - -// Pings a netdata server: -// /api/v1/registry?action=hello -// -// Access to a netdata registry: -// /api/v1/registry?action=access&machine=${machine_guid}&name=${hostname}&url=${url} -// -// Delete from a netdata registry: -// /api/v1/registry?action=delete&machine=${machine_guid}&name=${hostname}&url=${url}&delete_url=${delete_url} -// -// Search for the URLs of a machine: -// /api/v1/registry?action=search&for=${machine_guid} -// -// Impersonate: -// /api/v1/registry?action=switch&machine=${machine_guid}&name=${hostname}&url=${url}&to=${new_person_guid} -inline int web_client_api_request_v1_registry(RRDHOST *host, struct web_client *w, char *url) { - static uint32_t hash_action = 0, hash_access = 0, hash_hello = 0, hash_delete = 0, hash_search = 0, - hash_switch = 0, hash_machine = 0, hash_url = 0, hash_name = 0, hash_delete_url = 0, hash_for = 0, - hash_to = 0 /*, hash_redirects = 0 */; - - if(unlikely(!hash_action)) { - hash_action = simple_hash("action"); - hash_access = simple_hash("access"); - hash_hello = simple_hash("hello"); - hash_delete = simple_hash("delete"); - hash_search = simple_hash("search"); - hash_switch = simple_hash("switch"); - hash_machine = simple_hash("machine"); - hash_url = simple_hash("url"); - hash_name = simple_hash("name"); - hash_delete_url = simple_hash("delete_url"); - hash_for = simple_hash("for"); - hash_to = simple_hash("to"); -/* - hash_redirects = simple_hash("redirects"); -*/ - } - - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 registry with URL '%s'", w->id, url); - - // TODO - // The browser may send multiple cookies with our id - - char person_guid[UUID_STR_LEN] = ""; - char *cookie = strstr(w->response.data->buffer, NETDATA_REGISTRY_COOKIE_NAME "="); - if(cookie) - strncpyz(person_guid, &cookie[sizeof(NETDATA_REGISTRY_COOKIE_NAME)], UUID_STR_LEN - 1); - else if(!extract_bearer_token_from_request(w, person_guid, sizeof(person_guid))) - person_guid[0] = '\0'; - - char action = '\0'; - char *machine_guid = NULL, - *machine_url = NULL, - *url_name = NULL, - *search_machine_guid = NULL, - *delete_url = NULL, - *to_person_guid = NULL; -/* - int redirects = 0; -*/ - - // Don't cache registry responses - buffer_no_cacheable(w->response.data); - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if (!name || !*name) continue; - if (!value || !*value) continue; - - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 registry query param '%s' with value '%s'", w->id, name, value); - - uint32_t hash = simple_hash(name); - - if(hash == hash_action && !strcmp(name, "action")) { - uint32_t vhash = simple_hash(value); - - if(vhash == hash_access && !strcmp(value, "access")) action = 'A'; - else if(vhash == hash_hello && !strcmp(value, "hello")) action = 'H'; - else if(vhash == hash_delete && !strcmp(value, "delete")) action = 'D'; - else if(vhash == hash_search && !strcmp(value, "search")) action = 'S'; - else if(vhash == hash_switch && !strcmp(value, "switch")) action = 'W'; -#ifdef NETDATA_INTERNAL_CHECKS - else netdata_log_error("unknown registry action '%s'", value); -#endif /* NETDATA_INTERNAL_CHECKS */ - } -/* - else if(hash == hash_redirects && !strcmp(name, "redirects")) - redirects = atoi(value); -*/ - else if(hash == hash_machine && !strcmp(name, "machine")) - machine_guid = value; - - else if(hash == hash_url && !strcmp(name, "url")) - machine_url = value; - - else if(action == 'A') { - if(hash == hash_name && !strcmp(name, "name")) - url_name = value; - } - else if(action == 'D') { - if(hash == hash_delete_url && !strcmp(name, "delete_url")) - delete_url = value; - } - else if(action == 'S') { - if(hash == hash_for && !strcmp(name, "for")) - search_machine_guid = value; - } - else if(action == 'W') { - if(hash == hash_to && !strcmp(name, "to")) - to_person_guid = value; - } -#ifdef NETDATA_INTERNAL_CHECKS - else netdata_log_error("unused registry URL parameter '%s' with value '%s'", name, value); -#endif /* NETDATA_INTERNAL_CHECKS */ - } - - bool do_not_track = respect_web_browser_do_not_track_policy && web_client_has_donottrack(w); - - if(unlikely(action == 'H')) { - // HELLO request, dashboard ACL - analytics_log_dashboard(); - if(unlikely(!http_can_access_dashboard(w))) - return web_client_permission_denied_acl(w); - } - else { - // everything else, registry ACL - if(unlikely(!http_can_access_registry(w))) - return web_client_permission_denied_acl(w); - - if(unlikely(do_not_track)) { - buffer_flush(w->response.data); - buffer_sprintf(w->response.data, "Your web browser is sending 'DNT: 1' (Do Not Track). The registry requires persistent cookies on your browser to work."); - return HTTP_RESP_BAD_REQUEST; - } - } - - buffer_no_cacheable(w->response.data); - - switch(action) { - case 'A': - if(unlikely(!machine_guid || !machine_url || !url_name)) { - netdata_log_error("Invalid registry request - access requires these parameters: machine ('%s'), url ('%s'), name ('%s')", machine_guid ? machine_guid : "UNSET", machine_url ? machine_url : "UNSET", url_name ? url_name : "UNSET"); - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "Invalid registry Access request."); - return HTTP_RESP_BAD_REQUEST; - } - - web_client_enable_tracking_required(w); - return registry_request_access_json(host, w, person_guid, machine_guid, machine_url, url_name, now_realtime_sec()); - - case 'D': - if(unlikely(!machine_guid || !machine_url || !delete_url)) { - netdata_log_error("Invalid registry request - delete requires these parameters: machine ('%s'), url ('%s'), delete_url ('%s')", machine_guid?machine_guid:"UNSET", machine_url?machine_url:"UNSET", delete_url?delete_url:"UNSET"); - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "Invalid registry Delete request."); - return HTTP_RESP_BAD_REQUEST; - } - - web_client_enable_tracking_required(w); - return registry_request_delete_json(host, w, person_guid, machine_guid, machine_url, delete_url, now_realtime_sec()); - - case 'S': - if(unlikely(!search_machine_guid)) { - netdata_log_error("Invalid registry request - search requires these parameters: for ('%s')", search_machine_guid?search_machine_guid:"UNSET"); - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "Invalid registry Search request."); - return HTTP_RESP_BAD_REQUEST; - } - - web_client_enable_tracking_required(w); - return registry_request_search_json(host, w, person_guid, search_machine_guid); - - case 'W': - if(unlikely(!machine_guid || !machine_url || !to_person_guid)) { - netdata_log_error("Invalid registry request - switching identity requires these parameters: machine ('%s'), url ('%s'), to ('%s')", machine_guid?machine_guid:"UNSET", machine_url?machine_url:"UNSET", to_person_guid?to_person_guid:"UNSET"); - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "Invalid registry Switch request."); - return HTTP_RESP_BAD_REQUEST; - } - - web_client_enable_tracking_required(w); - return registry_request_switch_json(host, w, person_guid, machine_guid, machine_url, to_person_guid, now_realtime_sec()); - - case 'H': - return registry_request_hello_json(host, w, do_not_track); - - default: - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "Invalid registry request - you need to set an action: hello, access, delete, search"); - return HTTP_RESP_BAD_REQUEST; - } -} - -void web_client_api_request_v1_info_summary_alarm_statuses(RRDHOST *host, BUFFER *wb, const char *key) { - buffer_json_member_add_object(wb, key); - - size_t normal = 0, warning = 0, critical = 0; - RRDCALC *rc; - foreach_rrdcalc_in_rrdhost_read(host, rc) { - if(unlikely(!rc->rrdset || !rc->rrdset->last_collected_time.tv_sec)) - continue; - - switch(rc->status) { - case RRDCALC_STATUS_WARNING: - warning++; - break; - case RRDCALC_STATUS_CRITICAL: - critical++; - break; - default: - normal++; - } - } - foreach_rrdcalc_in_rrdhost_done(rc); - - buffer_json_member_add_uint64(wb, "normal", normal); - buffer_json_member_add_uint64(wb, "warning", warning); - buffer_json_member_add_uint64(wb, "critical", critical); - - buffer_json_object_close(wb); -} - -static inline void web_client_api_request_v1_info_mirrored_hosts_status(BUFFER *wb, RRDHOST *host) { - buffer_json_add_array_item_object(wb); - - buffer_json_member_add_string(wb, "hostname", rrdhost_hostname(host)); - buffer_json_member_add_uint64(wb, "hops", host->system_info ? host->system_info->hops : (host == localhost) ? 0 : 1); - buffer_json_member_add_boolean(wb, "reachable", (host == localhost || !rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))); - - buffer_json_member_add_string(wb, "guid", host->machine_guid); - buffer_json_member_add_uuid(wb, "node_id", host->node_id); - rrdhost_aclk_state_lock(host); - buffer_json_member_add_string(wb, "claim_id", host->aclk_state.claimed_id); - rrdhost_aclk_state_unlock(host); - - buffer_json_object_close(wb); -} - -static inline void web_client_api_request_v1_info_mirrored_hosts(BUFFER *wb) { - RRDHOST *host; - - rrd_rdlock(); - - buffer_json_member_add_array(wb, "mirrored_hosts"); - rrdhost_foreach_read(host) - buffer_json_add_array_item_string(wb, rrdhost_hostname(host)); - buffer_json_array_close(wb); - - buffer_json_member_add_array(wb, "mirrored_hosts_status"); - rrdhost_foreach_read(host) { - if ((host == localhost || !rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))) { - web_client_api_request_v1_info_mirrored_hosts_status(wb, host); - } - } - rrdhost_foreach_read(host) { - if ((host != localhost && rrdhost_flag_check(host, RRDHOST_FLAG_ORPHAN))) { - web_client_api_request_v1_info_mirrored_hosts_status(wb, host); - } - } - buffer_json_array_close(wb); - - rrd_rdunlock(); -} - -void host_labels2json(RRDHOST *host, BUFFER *wb, const char *key) { - buffer_json_member_add_object(wb, key); - rrdlabels_to_buffer_json_members(host->rrdlabels, wb); - buffer_json_object_close(wb); -} - -static void host_collectors(RRDHOST *host, BUFFER *wb) { - buffer_json_member_add_array(wb, "collectors"); - - DICTIONARY *dict = dictionary_create(DICT_OPTION_SINGLE_THREADED|DICT_OPTION_DONT_OVERWRITE_VALUE); - RRDSET *st; - char name[500]; - - time_t now = now_realtime_sec(); - - rrdset_foreach_read(st, host) { - if (!rrdset_is_available_for_viewers(st)) - continue; - - sprintf(name, "%s:%s", rrdset_plugin_name(st), rrdset_module_name(st)); - - bool old = 0; - bool *set = dictionary_set(dict, name, &old, sizeof(bool)); - if(!*set) { - *set = true; - st->last_accessed_time_s = now; - buffer_json_add_array_item_object(wb); - buffer_json_member_add_string(wb, "plugin", rrdset_plugin_name(st)); - buffer_json_member_add_string(wb, "module", rrdset_module_name(st)); - buffer_json_object_close(wb); - } - } - rrdset_foreach_done(st); - dictionary_destroy(dict); - - buffer_json_array_close(wb); -} - -extern int aclk_connected; -inline int web_client_api_request_v1_info_fill_buffer(RRDHOST *host, BUFFER *wb) { - buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); - - buffer_json_member_add_string(wb, "version", rrdhost_program_version(host)); - buffer_json_member_add_string(wb, "uid", host->machine_guid); - - buffer_json_member_add_uint64(wb, "hosts-available", rrdhost_hosts_available()); - web_client_api_request_v1_info_mirrored_hosts(wb); - - web_client_api_request_v1_info_summary_alarm_statuses(host, wb, "alarms"); - - buffer_json_member_add_string_or_empty(wb, "os_name", host->system_info->host_os_name); - buffer_json_member_add_string_or_empty(wb, "os_id", host->system_info->host_os_id); - buffer_json_member_add_string_or_empty(wb, "os_id_like", host->system_info->host_os_id_like); - buffer_json_member_add_string_or_empty(wb, "os_version", host->system_info->host_os_version); - buffer_json_member_add_string_or_empty(wb, "os_version_id", host->system_info->host_os_version_id); - buffer_json_member_add_string_or_empty(wb, "os_detection", host->system_info->host_os_detection); - buffer_json_member_add_string_or_empty(wb, "cores_total", host->system_info->host_cores); - buffer_json_member_add_string_or_empty(wb, "total_disk_space", host->system_info->host_disk_space); - buffer_json_member_add_string_or_empty(wb, "cpu_freq", host->system_info->host_cpu_freq); - buffer_json_member_add_string_or_empty(wb, "ram_total", host->system_info->host_ram_total); - - buffer_json_member_add_string_or_omit(wb, "container_os_name", host->system_info->container_os_name); - buffer_json_member_add_string_or_omit(wb, "container_os_id", host->system_info->container_os_id); - buffer_json_member_add_string_or_omit(wb, "container_os_id_like", host->system_info->container_os_id_like); - buffer_json_member_add_string_or_omit(wb, "container_os_version", host->system_info->container_os_version); - buffer_json_member_add_string_or_omit(wb, "container_os_version_id", host->system_info->container_os_version_id); - buffer_json_member_add_string_or_omit(wb, "container_os_detection", host->system_info->container_os_detection); - buffer_json_member_add_string_or_omit(wb, "is_k8s_node", host->system_info->is_k8s_node); - - buffer_json_member_add_string_or_empty(wb, "kernel_name", host->system_info->kernel_name); - buffer_json_member_add_string_or_empty(wb, "kernel_version", host->system_info->kernel_version); - buffer_json_member_add_string_or_empty(wb, "architecture", host->system_info->architecture); - buffer_json_member_add_string_or_empty(wb, "virtualization", host->system_info->virtualization); - buffer_json_member_add_string_or_empty(wb, "virt_detection", host->system_info->virt_detection); - buffer_json_member_add_string_or_empty(wb, "container", host->system_info->container); - buffer_json_member_add_string_or_empty(wb, "container_detection", host->system_info->container_detection); - - buffer_json_member_add_string_or_omit(wb, "cloud_provider_type", host->system_info->cloud_provider_type); - buffer_json_member_add_string_or_omit(wb, "cloud_instance_type", host->system_info->cloud_instance_type); - buffer_json_member_add_string_or_omit(wb, "cloud_instance_region", host->system_info->cloud_instance_region); - - host_labels2json(host, wb, "host_labels"); - host_functions2json(host, wb); - host_collectors(host, wb); - - buffer_json_member_add_boolean(wb, "cloud-enabled", netdata_cloud_enabled); - -#ifdef ENABLE_ACLK - buffer_json_member_add_boolean(wb, "cloud-available", true); -#else - buffer_json_member_add_boolean(wb, "cloud-available", false); -#endif - - char *agent_id = get_agent_claimid(); - buffer_json_member_add_boolean(wb, "agent-claimed", agent_id != NULL); - freez(agent_id); - -#ifdef ENABLE_ACLK - buffer_json_member_add_boolean(wb, "aclk-available", aclk_connected); -#else - buffer_json_member_add_boolean(wb, "aclk-available", false); -#endif - - buffer_json_member_add_string(wb, "memory-mode", rrd_memory_mode_name(host->rrd_memory_mode)); -#ifdef ENABLE_DBENGINE - buffer_json_member_add_uint64(wb, "multidb-disk-quota", default_multidb_disk_quota_mb); - buffer_json_member_add_uint64(wb, "page-cache-size", default_rrdeng_page_cache_mb); -#endif // ENABLE_DBENGINE - buffer_json_member_add_boolean(wb, "web-enabled", web_server_mode != WEB_SERVER_MODE_NONE); - buffer_json_member_add_boolean(wb, "stream-enabled", default_rrdpush_enabled); - - buffer_json_member_add_boolean(wb, "stream-compression", - host->sender && host->sender->compressor.initialized); - -#ifdef ENABLE_HTTPS - buffer_json_member_add_boolean(wb, "https-enabled", true); -#else - buffer_json_member_add_boolean(wb, "https-enabled", false); -#endif - - buffer_json_member_add_quoted_string(wb, "buildinfo", analytics_data.netdata_buildinfo); - buffer_json_member_add_quoted_string(wb, "release-channel", analytics_data.netdata_config_release_channel); - buffer_json_member_add_quoted_string(wb, "notification-methods", analytics_data.netdata_notification_methods); - - buffer_json_member_add_boolean(wb, "exporting-enabled", analytics_data.exporting_enabled); - buffer_json_member_add_quoted_string(wb, "exporting-connectors", analytics_data.netdata_exporting_connectors); - - buffer_json_member_add_uint64(wb, "allmetrics-prometheus-used", analytics_data.prometheus_hits); - buffer_json_member_add_uint64(wb, "allmetrics-shell-used", analytics_data.shell_hits); - buffer_json_member_add_uint64(wb, "allmetrics-json-used", analytics_data.json_hits); - buffer_json_member_add_uint64(wb, "dashboard-used", analytics_data.dashboard_hits); - - buffer_json_member_add_uint64(wb, "charts-count", analytics_data.charts_count); - buffer_json_member_add_uint64(wb, "metrics-count", analytics_data.metrics_count); - -#if defined(ENABLE_ML) - buffer_json_member_add_object(wb, "ml-info"); - ml_host_get_info(host, wb); - buffer_json_object_close(wb); -#endif - - buffer_json_finalize(wb); - return 0; -} - -#if defined(ENABLE_ML) -int web_client_api_request_v1_ml_info(RRDHOST *host, struct web_client *w, char *url) { - (void) url; - - if (!netdata_ready) - return HTTP_RESP_SERVICE_UNAVAILABLE; - - BUFFER *wb = w->response.data; - buffer_flush(wb); - wb->content_type = CT_APPLICATION_JSON; - - buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); - ml_host_get_detection_info(host, wb); - buffer_json_finalize(wb); - - buffer_no_cacheable(wb); - - return HTTP_RESP_OK; -} -#endif // ENABLE_ML - -inline int web_client_api_request_v1_info(RRDHOST *host, struct web_client *w, char *url) { - (void)url; - if (!netdata_ready) return HTTP_RESP_SERVICE_UNAVAILABLE; - BUFFER *wb = w->response.data; - buffer_flush(wb); - wb->content_type = CT_APPLICATION_JSON; - - web_client_api_request_v1_info_fill_buffer(host, wb); - - buffer_no_cacheable(wb); - return HTTP_RESP_OK; -} - -static int web_client_api_request_v1_aclk_state(RRDHOST *host, struct web_client *w, char *url) { - UNUSED(url); - UNUSED(host); - if (!netdata_ready) return HTTP_RESP_SERVICE_UNAVAILABLE; - - BUFFER *wb = w->response.data; - buffer_flush(wb); -#ifdef ENABLE_ACLK - char *str = aclk_state_json(); - buffer_strcat(wb, str); - freez(str); -#else - buffer_strcat(wb, "{\"aclk-available\":false}"); -#endif - - wb->content_type = CT_APPLICATION_JSON; - buffer_no_cacheable(wb); - return HTTP_RESP_OK; -} - -int web_client_api_request_v1_metric_correlations(RRDHOST *host, struct web_client *w, char *url) { - return web_client_api_request_weights(host, w, url, default_metric_correlations_method, WEIGHTS_FORMAT_CHARTS, 1); -} - -int web_client_api_request_v1_weights(RRDHOST *host, struct web_client *w, char *url) { - return web_client_api_request_weights(host, w, url, WEIGHTS_METHOD_ANOMALY_RATE, WEIGHTS_FORMAT_CONTEXTS, 1); -} - -static void web_client_progress_functions_update(void *data, size_t done, size_t all) { - // handle progress updates from the plugin - struct web_client *w = data; - query_progress_functions_update(&w->transaction, done, all); -} - -int web_client_api_request_v1_function(RRDHOST *host, struct web_client *w, char *url) { - if (!netdata_ready) - return HTTP_RESP_SERVICE_UNAVAILABLE; - - int timeout = 0; - const char *function = NULL; - - while (url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) - continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if (!name || !*name) - continue; - - if (!strcmp(name, "function")) - function = value; - - else if (!strcmp(name, "timeout")) - timeout = (int) strtoul(value, NULL, 0); - } - - BUFFER *wb = w->response.data; - buffer_flush(wb); - wb->content_type = CT_APPLICATION_JSON; - buffer_no_cacheable(wb); - - char transaction[UUID_COMPACT_STR_LEN]; - uuid_unparse_lower_compact(w->transaction, transaction); - - CLEAN_BUFFER *source = buffer_create(100, NULL); - web_client_source2buffer(w, source); - - return rrd_function_run(host, wb, timeout, w->access, function, true, transaction, - NULL, NULL, - web_client_progress_functions_update, w, - web_client_interrupt_callback, w, NULL, - buffer_tostring(source)); -} - -int web_client_api_request_v1_functions(RRDHOST *host, struct web_client *w, char *url __maybe_unused) { - if (!netdata_ready) - return HTTP_RESP_SERVICE_UNAVAILABLE; - - BUFFER *wb = w->response.data; - buffer_flush(wb); - wb->content_type = CT_APPLICATION_JSON; - buffer_no_cacheable(wb); - - buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); - host_functions2json(host, wb); - buffer_json_finalize(wb); - - return HTTP_RESP_OK; -} - -void web_client_source2buffer(struct web_client *w, BUFFER *source) { - if(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_CLOUD)) - buffer_sprintf(source, "method=NC"); - else if(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_BEARER)) - buffer_sprintf(source, "method=api-bearer"); - else - buffer_sprintf(source, "method=api"); - - if(web_client_flag_check(w, WEB_CLIENT_FLAG_AUTH_GOD)) - buffer_strcat(source, ",role=god"); - else - buffer_sprintf(source, ",role=%s", http_id2user_role(w->user_role)); - - buffer_sprintf(source, ",permissions="HTTP_ACCESS_FORMAT, (HTTP_ACCESS_FORMAT_CAST)w->access); - - if(w->auth.client_name[0]) - buffer_sprintf(source, ",user=%s", w->auth.client_name); - - if(!uuid_is_null(w->auth.cloud_account_id)) { - char uuid_str[UUID_COMPACT_STR_LEN]; - uuid_unparse_lower_compact(w->auth.cloud_account_id, uuid_str); - buffer_sprintf(source, ",account=%s", uuid_str); - } - - if(w->client_ip[0]) - buffer_sprintf(source, ",ip=%s", w->client_ip); - - if(w->forwarded_for) - buffer_sprintf(source, ",forwarded_for=%s", w->forwarded_for); -} - -static int web_client_api_request_v1_config(RRDHOST *host, struct web_client *w, char *url __maybe_unused) { - char *action = "tree"; - char *path = "/"; - char *id = NULL; - char *add_name = NULL; - int timeout = 120; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "action")) - action = value; - else if(!strcmp(name, "path")) - path = value; - else if(!strcmp(name, "id")) - id = value; - else if(!strcmp(name, "name")) - add_name = value; - else if(!strcmp(name, "timeout")) { - timeout = (int)strtol(value, NULL, 10); - if(timeout < 10) - timeout = 10; - } - } - - char transaction[UUID_COMPACT_STR_LEN]; - uuid_unparse_lower_compact(w->transaction, transaction); - - size_t len = strlen(action) + (id ? strlen(id) : 0) + strlen(path) + (add_name ? strlen(add_name) : 0) + 100; - - char cmd[len]; - if(strcmp(action, "tree") == 0) - snprintfz(cmd, sizeof(cmd), PLUGINSD_FUNCTION_CONFIG " tree '%s' '%s'", path, id?id:""); - else { - DYNCFG_CMDS c = dyncfg_cmds2id(action); - if(!id || !*id || !dyncfg_is_valid_id(id)) { - rrd_call_function_error(w->response.data, "invalid id given", HTTP_RESP_BAD_REQUEST); - return HTTP_RESP_BAD_REQUEST; - } - - if(c == DYNCFG_CMD_NONE) { - rrd_call_function_error(w->response.data, "invalid action given", HTTP_RESP_BAD_REQUEST); - return HTTP_RESP_BAD_REQUEST; - } - - if(c == DYNCFG_CMD_ADD || c == DYNCFG_CMD_USERCONFIG || c == DYNCFG_CMD_TEST) { - if(c == DYNCFG_CMD_TEST && (!add_name || !*add_name)) { - // backwards compatibility for TEST without a name - char *colon = strrchr(id, ':'); - if(colon) { - *colon = '\0'; - add_name = ++colon; - } - else - add_name = "test"; - } - - if(!add_name || !*add_name || !dyncfg_is_valid_id(add_name)) { - rrd_call_function_error(w->response.data, "invalid name given", HTTP_RESP_BAD_REQUEST); - return HTTP_RESP_BAD_REQUEST; - } - snprintfz(cmd, sizeof(cmd), PLUGINSD_FUNCTION_CONFIG " %s %s %s", id, dyncfg_id2cmd_one(c), add_name); - } - else - snprintfz(cmd, sizeof(cmd), PLUGINSD_FUNCTION_CONFIG " %s %s", id, dyncfg_id2cmd_one(c)); - } - - CLEAN_BUFFER *source = buffer_create(100, NULL); - web_client_source2buffer(w, source); - - buffer_flush(w->response.data); - int code = rrd_function_run(host, w->response.data, timeout, w->access, cmd, - true, transaction, - NULL, NULL, - web_client_progress_functions_update, w, - web_client_interrupt_callback, w, - w->payload, buffer_tostring(source)); - - return code; -} - -#ifndef ENABLE_DBENGINE -int web_client_api_request_v1_dbengine_stats(RRDHOST *host __maybe_unused, struct web_client *w __maybe_unused, char *url __maybe_unused) { - return HTTP_RESP_NOT_FOUND; -} -#else -static void web_client_api_v1_dbengine_stats_for_tier(BUFFER *wb, size_t tier) { - RRDENG_SIZE_STATS stats = rrdeng_size_statistics(multidb_ctx[tier]); - - buffer_sprintf(wb, - "\n\t\t\"default_granularity_secs\":%zu" - ",\n\t\t\"sizeof_datafile\":%zu" - ",\n\t\t\"sizeof_page_in_cache\":%zu" - ",\n\t\t\"sizeof_point_data\":%zu" - ",\n\t\t\"sizeof_page_data\":%zu" - ",\n\t\t\"pages_per_extent\":%zu" - ",\n\t\t\"datafiles\":%zu" - ",\n\t\t\"extents\":%zu" - ",\n\t\t\"extents_pages\":%zu" - ",\n\t\t\"points\":%zu" - ",\n\t\t\"metrics\":%zu" - ",\n\t\t\"metrics_pages\":%zu" - ",\n\t\t\"extents_compressed_bytes\":%zu" - ",\n\t\t\"pages_uncompressed_bytes\":%zu" - ",\n\t\t\"pages_duration_secs\":%lld" - ",\n\t\t\"single_point_pages\":%zu" - ",\n\t\t\"first_t\":%ld" - ",\n\t\t\"last_t\":%ld" - ",\n\t\t\"database_retention_secs\":%lld" - ",\n\t\t\"average_compression_savings\":%0.2f" - ",\n\t\t\"average_point_duration_secs\":%0.2f" - ",\n\t\t\"average_metric_retention_secs\":%0.2f" - ",\n\t\t\"ephemeral_metrics_per_day_percent\":%0.2f" - ",\n\t\t\"average_page_size_bytes\":%0.2f" - ",\n\t\t\"estimated_concurrently_collected_metrics\":%zu" - ",\n\t\t\"currently_collected_metrics\":%zu" - ",\n\t\t\"disk_space\":%zu" - ",\n\t\t\"max_disk_space\":%zu" - , stats.default_granularity_secs - , stats.sizeof_datafile - , stats.sizeof_page_in_cache - , stats.sizeof_point_data - , stats.sizeof_page_data - , stats.pages_per_extent - , stats.datafiles - , stats.extents - , stats.extents_pages - , stats.points - , stats.metrics - , stats.metrics_pages - , stats.extents_compressed_bytes - , stats.pages_uncompressed_bytes - , (long long)stats.pages_duration_secs - , stats.single_point_pages - , stats.first_time_s - , stats.last_time_s - , (long long)stats.database_retention_secs - , stats.average_compression_savings - , stats.average_point_duration_secs - , stats.average_metric_retention_secs - , stats.ephemeral_metrics_per_day_percent - , stats.average_page_size_bytes - , stats.estimated_concurrently_collected_metrics - , stats.currently_collected_metrics - , stats.disk_space - , stats.max_disk_space - ); -} -int web_client_api_request_v1_dbengine_stats(RRDHOST *host __maybe_unused, struct web_client *w, char *url __maybe_unused) { - if (!netdata_ready) - return HTTP_RESP_SERVICE_UNAVAILABLE; - - BUFFER *wb = w->response.data; - buffer_flush(wb); - - if(!dbengine_enabled) { - buffer_strcat(wb, "dbengine is not enabled"); - return HTTP_RESP_NOT_FOUND; - } - - wb->content_type = CT_APPLICATION_JSON; - buffer_no_cacheable(wb); - buffer_strcat(wb, "{"); - for(size_t tier = 0; tier < storage_tiers ;tier++) { - buffer_sprintf(wb, "%s\n\t\"tier%zu\": {", tier?",":"", tier); - web_client_api_v1_dbengine_stats_for_tier(wb, tier); - buffer_strcat(wb, "\n\t}"); - } - buffer_strcat(wb, "\n}"); - - return HTTP_RESP_OK; -} -#endif - -#define HLT_MGM "manage/health" -int web_client_api_request_v1_mgmt(RRDHOST *host, struct web_client *w, char *url) { - const char *haystack = buffer_tostring(w->url_path_decoded); - char *needle; - - buffer_flush(w->response.data); - - if ((needle = strstr(haystack, HLT_MGM)) == NULL) { - buffer_strcat(w->response.data, "Invalid management request. Curently only 'health' is supported."); - return HTTP_RESP_NOT_FOUND; - } - needle += strlen(HLT_MGM); - if (*needle != '\0') { - buffer_strcat(w->response.data, "Invalid management request. Currently only 'health' is supported."); - return HTTP_RESP_NOT_FOUND; - } - return web_client_api_request_v1_mgmt_health(host, w, url); -} +#include "v1/api_v1_calls.h" +#include "v2/api_v2_calls.h" +#include "v3/api_v3_calls.h" static struct web_api_command api_commands_v1[] = { // time-series data APIs { .api = "data", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_data, + .callback = api_v1_data, .allow_subpaths = 0 }, +#if defined(ENABLE_API_V1) { .api = "weights", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_weights, + .callback = api_v1_weights, .allow_subpaths = 0 }, { // deprecated - do not use anymore - use "weights" .api = "metric_correlations", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_metric_correlations, + .callback = api_v1_metric_correlations, .allow_subpaths = 0 }, +#endif { - // exporting API - .api = "allmetrics", + .api = "badge.svg", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_BADGES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_allmetrics, + .callback = api_v1_badge, .allow_subpaths = 0 }, { - // badges can be fetched with both dashboard and badge ACL - .api = "badge.svg", + // exporting API + .api = "allmetrics", .hash = 0, - .acl = HTTP_ACL_BADGES, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_badge, + .callback = api_v1_allmetrics, .allow_subpaths = 0 }, // alerts APIs +#if defined(ENABLE_API_V1) { .api = "alarms", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_alarms, + .callback = api_v1_alarms, .allow_subpaths = 0 }, { .api = "alarms_values", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_alarms_values, + .callback = api_v1_alarms_values, .allow_subpaths = 0 }, { .api = "alarm_log", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_alarm_log, + .callback = api_v1_alarm_log, .allow_subpaths = 0 }, { .api = "alarm_variables", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_alarm_variables, + .callback = api_v1_alarm_variables, .allow_subpaths = 0 }, { .api = "variable", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_variable, + .callback = api_v1_variable, .allow_subpaths = 0 }, { .api = "alarm_count", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_alarm_count, + .callback = api_v1_alarm_count, .allow_subpaths = 0 }, +#endif // functions APIs - they check permissions per function call { .api = "function", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_FUNCTIONS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_function, + .callback = api_v1_function, .allow_subpaths = 0 }, + +#if defined(ENABLE_API_V1) { .api = "functions", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_FUNCTIONS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_functions, + .callback = api_v1_functions, .allow_subpaths = 0 }, +#endif // time-series metadata APIs +#if defined(ENABLE_API_V1) { .api = "chart", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_chart, + .callback = api_v1_chart, .allow_subpaths = 0 }, +#endif { .api = "charts", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_charts, + .callback = api_v1_charts, .allow_subpaths = 0 }, { .api = "context", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_context, + .callback = api_v1_context, .allow_subpaths = 0 }, { .api = "contexts", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_contexts, + .callback = api_v1_contexts, .allow_subpaths = 0 }, // registry APIs +#if defined(ENABLE_API_V1) { // registry checks the ACL by itself, so we allow everything .api = "registry", .hash = 0, .acl = HTTP_ACL_NONE, // it manages acl by itself .access = HTTP_ACCESS_NONE, // it manages access by itself - .callback = web_client_api_request_v1_registry, + .callback = api_v1_registry, .allow_subpaths = 0 }, +#endif // agent information APIs +#if defined(ENABLE_API_V1) { .api = "info", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_info, + .callback = api_v1_info, .allow_subpaths = 0 }, { .api = "aclk", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_aclk_state, + .callback = api_v1_aclk, .allow_subpaths = 0 }, { // deprecated - use /api/v2/info .api = "dbengine_stats", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_dbengine_stats, + .callback = api_v1_dbengine_stats, .allow_subpaths = 0 }, - - // dyncfg APIs { - .api = "config", + .api = "ml_info", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_config, + .callback = api_v1_ml_info, .allow_subpaths = 0 }, - -#if defined(ENABLE_ML) { - .api = "ml_info", - .hash = 0, - .acl = HTTP_ACL_DASHBOARD, - .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v1_ml_info, - .allow_subpaths = 0 + .api = "manage", + .hash = 0, + .acl = HTTP_ACL_MANAGEMENT, + .access = HTTP_ACCESS_NONE, // it manages access by itself + .callback = api_v1_manage, + .allow_subpaths = 1 }, #endif + // dyncfg APIs { - // deprecated - .api = "manage", + .api = "config", .hash = 0, - .acl = HTTP_ACL_MANAGEMENT, - .access = HTTP_ACCESS_NONE, // it manages access by itself - .callback = web_client_api_request_v1_mgmt, - .allow_subpaths = 1 + .acl = HTTP_ACL_DYNCFG, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_config, + .allow_subpaths = 0 }, { diff --git a/src/web/api/web_api_v1.h b/src/web/api/web_api_v1.h index cf0efbd13..c102ac75c 100644 --- a/src/web/api/web_api_v1.h +++ b/src/web/api/web_api_v1.h @@ -5,43 +5,7 @@ #include "web_api.h" -struct web_client; - -CONTEXTS_V2_OPTIONS web_client_api_request_v2_context_options(char *o); -CONTEXTS_V2_ALERT_STATUS web_client_api_request_v2_alert_status(char *o); -void web_client_api_request_v2_contexts_options_to_buffer_json_array(BUFFER *wb, const char *key, CONTEXTS_V2_OPTIONS options); -void web_client_api_request_v2_contexts_alerts_status_to_buffer_json_array(BUFFER *wb, const char *key, CONTEXTS_V2_ALERT_STATUS options); - -RRDR_OPTIONS rrdr_options_parse(char *o); -RRDR_OPTIONS rrdr_options_parse_one(const char *o); - -void rrdr_options_to_buffer(BUFFER *wb, RRDR_OPTIONS options); -void rrdr_options_to_buffer_json_array(BUFFER *wb, const char *key, RRDR_OPTIONS options); -void web_client_api_request_v1_data_options_to_string(char *buf, size_t size, RRDR_OPTIONS options); - -uint32_t web_client_api_request_v1_data_format(char *name); -uint32_t web_client_api_request_v1_data_google_format(char *name); - -int web_client_api_request_v1_alarms(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_alarms_values(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_alarm_log(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_single_chart(RRDHOST *host, struct web_client *w, char *url, void callback(RRDSET *st, BUFFER *buf)); -int web_client_api_request_v1_alarm_variables(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_alarm_count(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_charts(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_chart(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_registry(RRDHOST *host, struct web_client *w, char *url); -int web_client_api_request_v1_info(RRDHOST *host, struct web_client *w, char *url); int web_client_api_request_v1(RRDHOST *host, struct web_client *w, char *url_path_endpoint); -int web_client_api_request_v1_info_fill_buffer(RRDHOST *host, BUFFER *wb); - -void web_client_api_v1_init(void); -void web_client_api_v1_management_init(void); - -void host_labels2json(RRDHOST *host, BUFFER *wb, const char *key); -void web_client_api_request_v1_info_summary_alarm_statuses(RRDHOST *host, BUFFER *wb, const char *key); - -void web_client_source2buffer(struct web_client *w, BUFFER *source); extern char *api_secret; diff --git a/src/web/api/web_api_v2.c b/src/web/api/web_api_v2.c index c62ed9ed3..f8e52a94b 100644 --- a/src/web/api/web_api_v2.c +++ b/src/web/api/web_api_v2.c @@ -1,604 +1,27 @@ // SPDX-License-Identifier: GPL-3.0-or-later #include "web_api_v2.h" -#include "../rtc/webrtc.h" - -static bool verify_agent_uuids(const char *machine_guid, const char *node_id, const char *claim_id) { - if(!machine_guid || !node_id || !claim_id) - return false; - - if(strcmp(machine_guid, localhost->machine_guid) != 0) - return false; - - char *agent_claim_id = get_agent_claimid(); - - bool not_verified = (!agent_claim_id || strcmp(claim_id, agent_claim_id) != 0); - freez(agent_claim_id); - - if(not_verified || !localhost->node_id) - return false; - - char buf[UUID_STR_LEN]; - uuid_unparse_lower(*localhost->node_id, buf); - - if(strcmp(node_id, buf) != 0) - return false; - - return true; -} - -int api_v2_bearer_protection(RRDHOST *host __maybe_unused, struct web_client *w __maybe_unused, char *url) { - char *machine_guid = NULL; - char *claim_id = NULL; - char *node_id = NULL; - bool protection = netdata_is_protected_by_bearer; - - while (url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if (!name || !*name) continue; - if (!value || !*value) continue; - - if(!strcmp(name, "bearer_protection")) { - if(!strcmp(value, "on") || !strcmp(value, "true") || !strcmp(value, "yes")) - protection = true; - else - protection = false; - } - else if(!strcmp(name, "machine_guid")) - machine_guid = value; - else if(!strcmp(name, "claim_id")) - claim_id = value; - else if(!strcmp(name, "node_id")) - node_id = value; - } - - if(!verify_agent_uuids(machine_guid, node_id, claim_id)) { - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "The request is missing or not matching local UUIDs"); - return HTTP_RESP_BAD_REQUEST; - } - - netdata_is_protected_by_bearer = protection; - - BUFFER *wb = w->response.data; - buffer_flush(wb); - buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); - buffer_json_member_add_boolean(wb, "bearer_protection", netdata_is_protected_by_bearer); - buffer_json_finalize(wb); - - return HTTP_RESP_OK; -} - -int api_v2_bearer_token(RRDHOST *host __maybe_unused, struct web_client *w __maybe_unused, char *url __maybe_unused) { - char *machine_guid = NULL; - char *claim_id = NULL; - char *node_id = NULL; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if (!name || !*name) continue; - if (!value || !*value) continue; - - if(!strcmp(name, "machine_guid")) - machine_guid = value; - else if(!strcmp(name, "claim_id")) - claim_id = value; - else if(!strcmp(name, "node_id")) - node_id = value; - } - - if(!verify_agent_uuids(machine_guid, node_id, claim_id)) { - buffer_flush(w->response.data); - buffer_strcat(w->response.data, "The request is missing or not matching local UUIDs"); - return HTTP_RESP_BAD_REQUEST; - } - - nd_uuid_t uuid; - time_t expires_s = bearer_create_token(&uuid, w); - - BUFFER *wb = w->response.data; - buffer_flush(wb); - buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT); - buffer_json_member_add_string(wb, "mg", localhost->machine_guid); - buffer_json_member_add_boolean(wb, "bearer_protection", netdata_is_protected_by_bearer); - buffer_json_member_add_uuid(wb, "token", &uuid); - buffer_json_member_add_time_t(wb, "expiration", expires_s); - buffer_json_finalize(wb); - - return HTTP_RESP_OK; -} - -static int web_client_api_request_v2_contexts_internal(RRDHOST *host __maybe_unused, struct web_client *w, char *url, CONTEXTS_V2_MODE mode) { - struct api_v2_contexts_request req = { 0 }; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "scope_nodes")) - req.scope_nodes = value; - else if(!strcmp(name, "nodes")) - req.nodes = value; - else if((mode & (CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_SEARCH | CONTEXTS_V2_ALERTS | CONTEXTS_V2_ALERT_TRANSITIONS)) && !strcmp(name, "scope_contexts")) - req.scope_contexts = value; - else if((mode & (CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_SEARCH | CONTEXTS_V2_ALERTS | CONTEXTS_V2_ALERT_TRANSITIONS)) && !strcmp(name, "contexts")) - req.contexts = value; - else if((mode & CONTEXTS_V2_SEARCH) && !strcmp(name, "q")) - req.q = value; - else if(!strcmp(name, "options")) - req.options = web_client_api_request_v2_context_options(value); - else if(!strcmp(name, "after")) - req.after = str2l(value); - else if(!strcmp(name, "before")) - req.before = str2l(value); - else if(!strcmp(name, "timeout")) - req.timeout_ms = str2l(value); - else if(mode & (CONTEXTS_V2_ALERTS | CONTEXTS_V2_ALERT_TRANSITIONS)) { - if (!strcmp(name, "alert")) - req.alerts.alert = value; - else if (!strcmp(name, "transition")) - req.alerts.transition = value; - else if(mode & CONTEXTS_V2_ALERTS) { - if (!strcmp(name, "status")) - req.alerts.status = web_client_api_request_v2_alert_status(value); - } - else if(mode & CONTEXTS_V2_ALERT_TRANSITIONS) { - if (!strcmp(name, "last")) - req.alerts.last = strtoul(value, NULL, 0); - else if(!strcmp(name, "context")) - req.contexts = value; - else if (!strcmp(name, "anchor_gi")) { - req.alerts.global_id_anchor = str2ull(value, NULL); - } - else { - for(int i = 0; i < ATF_TOTAL_ENTRIES ;i++) { - if(!strcmp(name, alert_transition_facets[i].query_param)) - req.alerts.facets[i] = value; - } - } - } - } - } - - if ((mode & CONTEXTS_V2_ALERT_TRANSITIONS) && !req.alerts.last) - req.alerts.last = 1; - - buffer_flush(w->response.data); - buffer_no_cacheable(w->response.data); - return rrdcontext_to_json_v2(w->response.data, &req, mode); -} - -static int web_client_api_request_v2_alert_transitions(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_ALERT_TRANSITIONS | CONTEXTS_V2_NODES); -} - -static int web_client_api_request_v2_alerts(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_ALERTS | CONTEXTS_V2_NODES); -} - -static int web_client_api_request_v2_functions(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_FUNCTIONS | CONTEXTS_V2_NODES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_VERSIONS); -} - -static int web_client_api_request_v2_versions(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_VERSIONS); -} - -static int web_client_api_request_v2_q(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_SEARCH | CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_NODES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_VERSIONS); -} - -static int web_client_api_request_v2_contexts(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_CONTEXTS | CONTEXTS_V2_NODES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_VERSIONS); -} - -static int web_client_api_request_v2_nodes(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_NODES | CONTEXTS_V2_NODES_INFO); -} - -static int web_client_api_request_v2_info(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_AGENTS | CONTEXTS_V2_AGENTS_INFO); -} - -static int web_client_api_request_v2_node_instances(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_v2_contexts_internal(host, w, url, CONTEXTS_V2_NODES | CONTEXTS_V2_NODE_INSTANCES | CONTEXTS_V2_AGENTS | CONTEXTS_V2_AGENTS_INFO | CONTEXTS_V2_VERSIONS); -} - -static int web_client_api_request_v2_weights(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return web_client_api_request_weights(host, w, url, WEIGHTS_METHOD_VALUE, WEIGHTS_FORMAT_MULTINODE, 2); -} - -static int web_client_api_request_v2_claim(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - return api_v2_claim(w, url); -} - -static int web_client_api_request_v2_alert_config(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - const char *config = NULL; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "config")) - config = value; - } - - buffer_flush(w->response.data); - - if(!config) { - w->response.data->content_type = CT_TEXT_PLAIN; - buffer_strcat(w->response.data, "A config hash ID is required. Add ?config=UUID query param"); - return HTTP_RESP_BAD_REQUEST; - } - - return contexts_v2_alert_config_to_json(w, config); -} - - -#define GROUP_BY_KEY_MAX_LENGTH 30 -static struct { - char group_by[GROUP_BY_KEY_MAX_LENGTH + 1]; - char aggregation[GROUP_BY_KEY_MAX_LENGTH + 1]; - char group_by_label[GROUP_BY_KEY_MAX_LENGTH + 1]; -} group_by_keys[MAX_QUERY_GROUP_BY_PASSES]; - -__attribute__((constructor)) void initialize_group_by_keys(void) { - for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { - snprintfz(group_by_keys[g].group_by, GROUP_BY_KEY_MAX_LENGTH, "group_by[%zu]", g); - snprintfz(group_by_keys[g].aggregation, GROUP_BY_KEY_MAX_LENGTH, "aggregation[%zu]", g); - snprintfz(group_by_keys[g].group_by_label, GROUP_BY_KEY_MAX_LENGTH, "group_by_label[%zu]", g); - } -} - -static int web_client_api_request_v2_data(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - usec_t received_ut = now_monotonic_usec(); - - int ret = HTTP_RESP_BAD_REQUEST; - - buffer_flush(w->response.data); - - char *google_version = "0.6", - *google_reqId = "0", - *google_sig = "0", - *google_out = "json", - *responseHandler = NULL, - *outFileName = NULL; - - time_t last_timestamp_in_data = 0, google_timestamp = 0; - - char *scope_nodes = NULL; - char *scope_contexts = NULL; - char *nodes = NULL; - char *contexts = NULL; - char *instances = NULL; - char *dimensions = NULL; - char *before_str = NULL; - char *after_str = NULL; - char *resampling_time_str = NULL; - char *points_str = NULL; - char *timeout_str = NULL; - char *labels = NULL; - char *alerts = NULL; - char *time_group_options = NULL; - char *tier_str = NULL; - size_t tier = 0; - RRDR_TIME_GROUPING time_group = RRDR_GROUPING_AVERAGE; - DATASOURCE_FORMAT format = DATASOURCE_JSON2; - RRDR_OPTIONS options = RRDR_OPTION_VIRTUAL_POINTS | RRDR_OPTION_JSON_WRAP | RRDR_OPTION_RETURN_JWAR; - - struct group_by_pass group_by[MAX_QUERY_GROUP_BY_PASSES] = { - { - .group_by = RRDR_GROUP_BY_DIMENSION, - .group_by_label = NULL, - .aggregation = RRDR_GROUP_BY_FUNCTION_AVERAGE, - }, - }; - - size_t group_by_idx = 0, group_by_label_idx = 0, aggregation_idx = 0; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "scope_nodes")) scope_nodes = value; - else if(!strcmp(name, "scope_contexts")) scope_contexts = value; - else if(!strcmp(name, "nodes")) nodes = value; - else if(!strcmp(name, "contexts")) contexts = value; - else if(!strcmp(name, "instances")) instances = value; - else if(!strcmp(name, "dimensions")) dimensions = value; - else if(!strcmp(name, "labels")) labels = value; - else if(!strcmp(name, "alerts")) alerts = value; - else if(!strcmp(name, "after")) after_str = value; - else if(!strcmp(name, "before")) before_str = value; - else if(!strcmp(name, "points")) points_str = value; - else if(!strcmp(name, "timeout")) timeout_str = value; - else if(!strcmp(name, "group_by")) { - group_by[group_by_idx++].group_by = group_by_parse(value); - if(group_by_idx >= MAX_QUERY_GROUP_BY_PASSES) - group_by_idx = MAX_QUERY_GROUP_BY_PASSES - 1; - } - else if(!strcmp(name, "group_by_label")) { - group_by[group_by_label_idx++].group_by_label = value; - if(group_by_label_idx >= MAX_QUERY_GROUP_BY_PASSES) - group_by_label_idx = MAX_QUERY_GROUP_BY_PASSES - 1; - } - else if(!strcmp(name, "aggregation")) { - group_by[aggregation_idx++].aggregation = group_by_aggregate_function_parse(value); - if(aggregation_idx >= MAX_QUERY_GROUP_BY_PASSES) - aggregation_idx = MAX_QUERY_GROUP_BY_PASSES - 1; - } - else if(!strcmp(name, "format")) format = web_client_api_request_v1_data_format(value); - else if(!strcmp(name, "options")) options |= rrdr_options_parse(value); - else if(!strcmp(name, "time_group")) time_group = time_grouping_parse(value, RRDR_GROUPING_AVERAGE); - else if(!strcmp(name, "time_group_options")) time_group_options = value; - else if(!strcmp(name, "time_resampling")) resampling_time_str = value; - else if(!strcmp(name, "tier")) tier_str = value; - else if(!strcmp(name, "callback")) responseHandler = value; - else if(!strcmp(name, "filename")) outFileName = value; - else if(!strcmp(name, "tqx")) { - // parse Google Visualization API options - // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source - char *tqx_name, *tqx_value; - - while(value) { - tqx_value = strsep_skip_consecutive_separators(&value, ";"); - if(!tqx_value || !*tqx_value) continue; - - tqx_name = strsep_skip_consecutive_separators(&tqx_value, ":"); - if(!tqx_name || !*tqx_name) continue; - if(!tqx_value || !*tqx_value) continue; - - if(!strcmp(tqx_name, "version")) - google_version = tqx_value; - else if(!strcmp(tqx_name, "reqId")) - google_reqId = tqx_value; - else if(!strcmp(tqx_name, "sig")) { - google_sig = tqx_value; - google_timestamp = strtoul(google_sig, NULL, 0); - } - else if(!strcmp(tqx_name, "out")) { - google_out = tqx_value; - format = web_client_api_request_v1_data_google_format(google_out); - } - else if(!strcmp(tqx_name, "responseHandler")) - responseHandler = tqx_value; - else if(!strcmp(tqx_name, "outFileName")) - outFileName = tqx_value; - } - } - else { - for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { - if(!strcmp(name, group_by_keys[g].group_by)) - group_by[g].group_by = group_by_parse(value); - else if(!strcmp(name, group_by_keys[g].group_by_label)) - group_by[g].group_by_label = value; - else if(!strcmp(name, group_by_keys[g].aggregation)) - group_by[g].aggregation = group_by_aggregate_function_parse(value); - } - } - } - - // validate the google parameters given - fix_google_param(google_out); - fix_google_param(google_sig); - fix_google_param(google_reqId); - fix_google_param(google_version); - fix_google_param(responseHandler); - fix_google_param(outFileName); - - for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { - if (group_by[g].group_by_label && *group_by[g].group_by_label) - group_by[g].group_by |= RRDR_GROUP_BY_LABEL; - } - - if(group_by[0].group_by == RRDR_GROUP_BY_NONE) - group_by[0].group_by = RRDR_GROUP_BY_DIMENSION; - - for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) { - if ((group_by[g].group_by & ~(RRDR_GROUP_BY_DIMENSION)) || (options & RRDR_OPTION_PERCENTAGE)) { - options |= RRDR_OPTION_ABSOLUTE; - break; - } - } - - if(options & RRDR_OPTION_DEBUG) - options &= ~RRDR_OPTION_MINIFY; - - if(tier_str && *tier_str) { - tier = str2ul(tier_str); - if(tier < storage_tiers) - options |= RRDR_OPTION_SELECTED_TIER; - else - tier = 0; - } - - time_t before = (before_str && *before_str)?str2l(before_str):0; - time_t after = (after_str && *after_str) ?str2l(after_str):-600; - size_t points = (points_str && *points_str)?str2u(points_str):0; - int timeout = (timeout_str && *timeout_str)?str2i(timeout_str): 0; - time_t resampling_time = (resampling_time_str && *resampling_time_str) ? str2l(resampling_time_str) : 0; - - QUERY_TARGET_REQUEST qtr = { - .version = 2, - .scope_nodes = scope_nodes, - .scope_contexts = scope_contexts, - .after = after, - .before = before, - .host = NULL, - .st = NULL, - .nodes = nodes, - .contexts = contexts, - .instances = instances, - .dimensions = dimensions, - .alerts = alerts, - .timeout_ms = timeout, - .points = points, - .format = format, - .options = options, - .time_group_method = time_group, - .time_group_options = time_group_options, - .resampling_time = resampling_time, - .tier = tier, - .chart_label_key = NULL, - .labels = labels, - .query_source = QUERY_SOURCE_API_DATA, - .priority = STORAGE_PRIORITY_NORMAL, - .received_ut = received_ut, - - .interrupt_callback = web_client_interrupt_callback, - .interrupt_callback_data = w, - - .transaction = &w->transaction, - }; - - for(size_t g = 0; g < MAX_QUERY_GROUP_BY_PASSES ;g++) - qtr.group_by[g] = group_by[g]; - - QUERY_TARGET *qt = query_target_create(&qtr); - ONEWAYALLOC *owa = NULL; - - if(!qt) { - buffer_sprintf(w->response.data, "Failed to prepare the query."); - ret = HTTP_RESP_INTERNAL_SERVER_ERROR; - goto cleanup; - } - - web_client_timeout_checkpoint_set(w, timeout); - if(web_client_timeout_checkpoint_and_check(w, NULL)) { - ret = w->response.code; - goto cleanup; - } - - if(outFileName && *outFileName) { - buffer_sprintf(w->response.header, "Content-Disposition: attachment; filename=\"%s\"\r\n", outFileName); - netdata_log_debug(D_WEB_CLIENT, "%llu: generating outfilename header: '%s'", w->id, outFileName); - } - - if(format == DATASOURCE_DATATABLE_JSONP) { - if(responseHandler == NULL) - responseHandler = "google.visualization.Query.setResponse"; - - netdata_log_debug(D_WEB_CLIENT_ACCESS, "%llu: GOOGLE JSON/JSONP: version = '%s', reqId = '%s', sig = '%s', out = '%s', responseHandler = '%s', outFileName = '%s'", - w->id, google_version, google_reqId, google_sig, google_out, responseHandler, outFileName - ); - - buffer_sprintf( - w->response.data, - "%s({version:'%s',reqId:'%s',status:'ok',sig:'%"PRId64"',table:", - responseHandler, - google_version, - google_reqId, - (int64_t)now_realtime_sec()); - } - else if(format == DATASOURCE_JSONP) { - if(responseHandler == NULL) - responseHandler = "callback"; - - buffer_strcat(w->response.data, responseHandler); - buffer_strcat(w->response.data, "("); - } - - owa = onewayalloc_create(0); - ret = data_query_execute(owa, w->response.data, qt, &last_timestamp_in_data); - - if(format == DATASOURCE_DATATABLE_JSONP) { - if(google_timestamp < last_timestamp_in_data) - buffer_strcat(w->response.data, "});"); - - else { - // the client already has the latest data - buffer_flush(w->response.data); - buffer_sprintf(w->response.data, - "%s({version:'%s',reqId:'%s',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});", - responseHandler, google_version, google_reqId); - } - } - else if(format == DATASOURCE_JSONP) - buffer_strcat(w->response.data, ");"); - - if(qt->internal.relative) - buffer_no_cacheable(w->response.data); - else - buffer_cacheable(w->response.data); - -cleanup: - query_target_release(qt); - onewayalloc_destroy(owa); - return ret; -} - -static int web_client_api_request_v2_webrtc(RRDHOST *host __maybe_unused, struct web_client *w, char *url __maybe_unused) { - return webrtc_new_connection(buffer_tostring(w->payload), w->response.data); -} - -static int web_client_api_request_v2_progress(RRDHOST *host __maybe_unused, struct web_client *w, char *url) { - char *transaction = NULL; - - while(url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if(!value || !*value) continue; - - char *name = strsep_skip_consecutive_separators(&value, "="); - if(!name || !*name) continue; - if(!value || !*value) continue; - - // name and value are now the parameters - // they are not null and not empty - - if(!strcmp(name, "transaction")) transaction = value; - } - - nd_uuid_t tr; - uuid_parse_flexi(transaction, tr); - - rrd_function_call_progresser(&tr); - - return web_api_v2_report_progress(&tr, w->response.data); -} +#include "v1/api_v1_calls.h" +#include "v2/api_v2_calls.h" +#include "v3/api_v3_calls.h" static struct web_api_command api_commands_v2[] = { +#if defined(ENABLE_API_v2) // time-series multi-node multi-instance data APIs { .api = "data", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_data, + .callback = api_v2_data, .allow_subpaths = 0 }, { .api = "weights", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_weights, + .callback = api_v2_weights, .allow_subpaths = 0 }, @@ -606,18 +29,18 @@ static struct web_api_command api_commands_v2[] = { { .api = "contexts", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_contexts, + .callback = api_v2_contexts, .allow_subpaths = 0 }, { // full text search .api = "q", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_METRICS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_q, + .callback = api_v2_q, .allow_subpaths = 0 }, @@ -625,25 +48,25 @@ static struct web_api_command api_commands_v2[] = { { .api = "alerts", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_alerts, + .callback = api_v2_alerts, .allow_subpaths = 0 }, { .api = "alert_transitions", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_alert_transitions, + .callback = api_v2_alert_transitions, .allow_subpaths = 0 }, { .api = "alert_config", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_ALERTS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_alert_config, + .callback = api_v2_alert_config, .allow_subpaths = 0 }, @@ -651,41 +74,41 @@ static struct web_api_command api_commands_v2[] = { { .api = "info", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NOCHECK, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_info, + .callback = api_v2_info, .allow_subpaths = 0 }, { .api = "nodes", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_nodes, + .callback = api_v2_nodes, .allow_subpaths = 0 }, { .api = "node_instances", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_node_instances, + .callback = api_v2_node_instances, .allow_subpaths = 0 }, { .api = "versions", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NODES, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_versions, + .callback = api_v2_versions, .allow_subpaths = 0 }, { .api = "progress", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NOCHECK, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_progress, + .callback = api_v2_progress, .allow_subpaths = 0 }, @@ -693,9 +116,9 @@ static struct web_api_command api_commands_v2[] = { { .api = "functions", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_FUNCTIONS, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_functions, + .callback = api_v2_functions, .allow_subpaths = 0 }, @@ -705,7 +128,7 @@ static struct web_api_command api_commands_v2[] = { .hash = 0, .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS, .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE, - .callback = web_client_api_request_v2_webrtc, + .callback = api_v2_webrtc, .allow_subpaths = 0 }, @@ -715,7 +138,7 @@ static struct web_api_command api_commands_v2[] = { .hash = 0, .acl = HTTP_ACL_NOCHECK, .access = HTTP_ACCESS_NONE, - .callback = web_client_api_request_v2_claim, + .callback = api_v2_claim, .allow_subpaths = 0 }, { @@ -731,17 +154,18 @@ static struct web_api_command api_commands_v2[] = { .hash = 0, .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS, .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE, - .callback = api_v2_bearer_token, + .callback = api_v2_bearer_get_token, .allow_subpaths = 0 }, +#endif // Netdata branding APIs { .api = "ilove.svg", .hash = 0, - .acl = HTTP_ACL_DASHBOARD, + .acl = HTTP_ACL_NOCHECK, .access = HTTP_ACCESS_ANONYMOUS_DATA, - .callback = web_client_api_request_v2_ilove, + .callback = api_v2_ilove, .allow_subpaths = 0 }, diff --git a/src/web/api/web_api_v3.c b/src/web/api/web_api_v3.c new file mode 100644 index 000000000..a1092471c --- /dev/null +++ b/src/web/api/web_api_v3.c @@ -0,0 +1,263 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "web_api_v3.h" +#include "v1/api_v1_calls.h" +#include "v2/api_v2_calls.h" +#include "v3/api_v3_calls.h" + +static struct web_api_command api_commands_v3[] = { + // time-series multi-node multi-instance data APIs + { + .api = "data", + .hash = 0, + .acl = HTTP_ACL_METRICS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_data, + .allow_subpaths = 0 + }, + // badges + { + .api = "badge.svg", + .hash = 0, + .acl = HTTP_ACL_BADGES, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_badge, + .allow_subpaths = 0 + }, + // scoring engine + { + .api = "weights", + .hash = 0, + .acl = HTTP_ACL_METRICS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_weights, + .allow_subpaths = 0 + }, + // exporting API + { + .api = "allmetrics", + .hash = 0, + .acl = HTTP_ACL_METRICS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_allmetrics, + .allow_subpaths = 0 + }, + + // time-series multi-node multi-instance metadata APIs + { + .api = "context", + .hash = 0, + .acl = HTTP_ACL_METRICS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_context, + .allow_subpaths = 0 + }, + { + .api = "contexts", + .hash = 0, + .acl = HTTP_ACL_METRICS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_contexts, + .allow_subpaths = 0 + }, + + // fulltext search + { + .api = "q", + .hash = 0, + .acl = HTTP_ACL_METRICS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_q, + .allow_subpaths = 0 + }, + + // multi-node multi-instance alerts APIs + { + .api = "alerts", + .hash = 0, + .acl = HTTP_ACL_ALERTS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_alerts, + .allow_subpaths = 0 + }, + { + .api = "alert_transitions", + .hash = 0, + .acl = HTTP_ACL_ALERTS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_alert_transitions, + .allow_subpaths = 0 + }, + { + .api = "alert_config", + .hash = 0, + .acl = HTTP_ACL_ALERTS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_alert_config, + .allow_subpaths = 0 + }, + { + .api = "variable", + .hash = 0, + .acl = HTTP_ACL_ALERTS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_variable, + .allow_subpaths = 0 + }, + + // agent information APIs + { + .api = "info", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_NONE, + .callback = api_v2_info, + .allow_subpaths = 0 + }, + { + .api = "nodes", + .hash = 0, + .acl = HTTP_ACL_NODES, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_nodes, + .allow_subpaths = 0 + }, + { + .api = "node_instances", + .hash = 0, + .acl = HTTP_ACL_NODES, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_node_instances, + .allow_subpaths = 0 + }, + { + .api = "versions", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_versions, + .allow_subpaths = 0 + }, + { + .api = "progress", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_progress, + .allow_subpaths = 0 + }, + + // functions APIs + { + .api = "function", + .hash = 0, + .acl = HTTP_ACL_FUNCTIONS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_function, + .allow_subpaths = 0 + }, + { + .api = "functions", + .hash = 0, + .acl = HTTP_ACL_FUNCTIONS, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v2_functions, + .allow_subpaths = 0 + }, + + // dyncfg APIs + { + .api = "config", + .hash = 0, + .acl = HTTP_ACL_DYNCFG, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v1_config, + .allow_subpaths = 0 + }, + + // settings APIs + { + .api = "settings", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_ANONYMOUS_DATA, + .callback = api_v3_settings, + .allow_subpaths = 0 + }, + + // WebRTC APIs + { + .api = "rtc_offer", + .hash = 0, + .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS, + .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE, + .callback = api_v2_webrtc, + .allow_subpaths = 0 + }, + + // management APIs + { + .api = "claim", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_NONE, + .callback = api_v3_claim, + .allow_subpaths = 0 + }, + { + .api = "bearer_protection", + .hash = 0, + .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS, + .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE | HTTP_ACCESS_VIEW_AGENT_CONFIG | HTTP_ACCESS_EDIT_AGENT_CONFIG, + .callback = api_v2_bearer_protection, + .allow_subpaths = 0 + }, + { + .api = "bearer_get_token", + .hash = 0, + .acl = HTTP_ACL_ACLK | ACL_DEV_OPEN_ACCESS, + .access = HTTP_ACCESS_SIGNED_ID | HTTP_ACCESS_SAME_SPACE, + .callback = api_v2_bearer_get_token, + .allow_subpaths = 0 + }, + { + .api = "me", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_NONE, + .callback = api_v3_me, + .allow_subpaths = 0 + }, + + // Netdata branding APIs + { + .api = "ilove.svg", + .hash = 0, + .acl = HTTP_ACL_NOCHECK, + .access = HTTP_ACCESS_NONE, + .callback = api_v2_ilove, + .allow_subpaths = 0 + }, + + {// terminator + .api = NULL, + .hash = 0, + .acl = HTTP_ACL_NONE, + .access = HTTP_ACCESS_NONE, + .callback = NULL, + .allow_subpaths = 0 + }, +}; + +inline int web_client_api_request_v3(RRDHOST *host, struct web_client *w, char *url_path_endpoint) { + static int initialized = 0; + + if(unlikely(initialized == 0)) { + initialized = 1; + + for(int i = 0; api_commands_v3[i].api ; i++) + api_commands_v3[i].hash = simple_hash(api_commands_v3[i].api); + } + + return web_client_api_request_vX(host, w, url_path_endpoint, api_commands_v3); +} diff --git a/src/web/api/web_api_v3.h b/src/web/api/web_api_v3.h new file mode 100644 index 000000000..32fa4cd1d --- /dev/null +++ b/src/web/api/web_api_v3.h @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_WEB_API_V3_H +#define NETDATA_WEB_API_V3_H + +#include "web_api.h" + +struct web_client; + +int web_client_api_request_v3(RRDHOST *host, struct web_client *w, char *url_path_endpoint); + +#endif //NETDATA_WEB_API_V3_H diff --git a/src/web/gui/.dashboard-v2-notice.md b/src/web/gui/.dashboard-v2-notice.md deleted file mode 100644 index 2eb4374ce..000000000 --- a/src/web/gui/.dashboard-v2-notice.md +++ /dev/null @@ -1,8 +0,0 @@ -# Do not edit any files in this directory! - -If you spot any errors or bugs in these files please open a bug report -at https://github.com/netdata/netdata/issues/new/choose. - -These files are maintained in a seprate private repository and copied -here when they are updated there, so any changes made in this directory -will eventually be overwritten. diff --git a/src/web/gui/README.md b/src/web/gui/README.md index 248cee4da..2eb9cfb15 100644 --- a/src/web/gui/README.md +++ b/src/web/gui/README.md @@ -1,163 +1,4 @@ # Legacy Agent dashboard -> ⚠️ You're checking the documentation for the legacy Agent dashboard. For the current version please check [Accessing Netdata Dashboards](/docs/dashboards-and-charts/README.md). - - -The local Netdata Agent dashboard is the heart of Netdata's performance troubleshooting toolkit. You've probably seen it -before: - -![The Netdata dashboard in -action](https://user-images.githubusercontent.com/1153921/101513938-fae28380-3939-11eb-9434-8ad86a39be62.gif) - -Learn more about how dashboards work and how they're populated using the `dashboards.js` file in our [web dashboards -overview](/src/web/README.md). - -By default, Netdata starts a web server for its dashboard at port `19999`. Open up your web browser of choice and -navigate to `http://NODE:19999`, replacing `NODE` with the IP address or hostname of your Agent. If installed on localhost, -you can access it through `http://localhost:19999`. - -Netdata uses an [internal, static-threaded web server](/src/web/server/README.md) to host the HTML, CSS, and JavaScript -files that make up the local Agent dashboard. You don't have to configure anything to access it, although you can adjust -[your settings](/src/web/server/README.md#other-netdataconf-web-section-options) in the `netdata.conf` file, or run Netdata -behind an [Nginx proxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md), and so on. - -## Navigating the local dashboard - -Beyond charts, the local dashboard can be broken down into three key areas: - -- [Navigating the local dashboard](#navigating-the-local-dashboard) - - [Sections](#sections) - - [Time \& date picker](#time--date-picker) - - [Metrics menus](#metrics-menus) - - [Cloud menus (Spaces, Rooms, and Visited nodes)](#cloud-menus-spaces-rooms-and-visited-nodes) -- [Customizing the local dashboard](#customizing-the-local-dashboard) -- [Custom dashboards](#custom-dashboards) - -![Annotated screenshot of the local Agent -dashboard](https://user-images.githubusercontent.com/1153921/101509403-f7e59400-3935-11eb-9abd-cbecfa3ee49a.png) - -### Sections - -Netdata is broken up into multiple **sections**, such as **System Overview**, -**CPU**, **Disk**, and more. Inside each section you'll find a number of charts, -broken down into [contexts](/src/web/README.md#contexts) and -[families](/src/web/README.md#families). - -An example of the **Memory** section on a Linux desktop system. - -![Screenshot of the Memory section of the Netdata -dashboard](https://user-images.githubusercontent.com/1153921/101508423-e354cc00-3934-11eb-9b33-3ad57a5988b4.png) - -All sections and their associated charts appear on a single page, so all you need to do to view different sections is -scroll up and down. But it's usually quicker to use the [menus](#metrics-menus). - -### Time & date picker - -The local dashboard features a time & date picker to help you visualize specific timeframes of historical metrics. The -picker chooses an appropriate default to always show per-second granularity based on the width of your browser's -viewport. - -![The time & date picker in the local Agent -dashboard](https://user-images.githubusercontent.com/1153921/101507784-2c585080-3934-11eb-9d6e-eff30b8553e4.png) - -Use the Quick Selector to show metrics from the last 5 minutes, 15 minutes, 30 minutes, 2 hours, 6 hours, or 12 hours. - -Beneath the Quick Selector is an input field and dropdown you use in combination to select a specific timeframe of -minutes, hours, days, or months. Enter a number and choose the appropriate unit of time. - -Use the calendar to select multiple days. Click on a date to begin the timeframe selection, then an ending date. - -Click **Apply** to re-render all visualizations with new metrics data, or **Clear** to restore the default timeframe. - -[Increase the metrics retention policy](/docs/netdata-agent/configuration/optimizing-metrics-database/change-metrics-storage.md) for your node to see more historical -timeframes. - -### Metrics menus - -**Metrics menus** appears on the right-hand side of the local Agent dashboard. Netdata generates a menu for each -section, and menus link to the section they're associated with. - -![A screenshot of metrics menus](https://user-images.githubusercontent.com/1153921/80834638-f08f2880-8ba5-11ea-99ae-f610b2885fd6.png) - -Most metrics menu items will contain several **submenu** entries, which represent any -[families](/src/web/README.md#families) from that section. Netdata automatically -generates these submenu entries. - -Here's a **Disks** menu with several submenu entries for each disk drive and -partition Netdata recognizes. - -![Screenshot of some metrics -submenus](https://user-images.githubusercontent.com/1153921/80834697-11577e00-8ba6-11ea-979c-92fd19cdb480.png) - -### Cloud menus (Spaces, Rooms, and Visited nodes) - -The dashboard also features a menu related to Netdata Cloud functionality. You can view your existing Spaces or create -new ones via the left vertical column of boxes. This menu also displays the name of your current Space, shows a list of -any Rooms you've added you your Space, and lists any notes you recently visited via their Agent dashboards. Click on -a Room's name to jump to the Netdata Cloud web interface. - -![A screenshot of the Cloud -menus](https://user-images.githubusercontent.com/1153921/80837210-3f8b8c80-8bab-11ea-9c75-128c2d823ef8.png) - -## Customizing the local dashboard - -Netdata stores information about individual charts in the `dashboard_info.js` -file. This file includes section and subsection headings, descriptions, colors, -titles, tooltips, and other information for Netdata to render on the dashboard. - -For example, here is how `dashboard_info.js` defines the **System Overview** -section. - -```javascript -netdataDashboard.menu = { - 'system': { - title: 'System Overview', - icon: '', - info: 'Overview of the key system metrics.' - }, -``` - -If you want to customize this information, you should avoid editing -`dashboard_info.js` directly. These changes are not persistent; Netdata will -overwrite the file when it's updated. Instead, you should create a new file with -your customizations. - -We created an example file at `dashboard_info_custom_example.js`. You can -copy this to a new file with a name of your choice in the `web/` directory. This -directory changes based on your operating system and installation method. If -you're on a Linux system, it should be at `/usr/share/netdata/web/`. - -```shell -cd /usr/share/netdata/web/ -sudo cp dashboard_info_custom_example.js your_dashboard_info_file.js -``` - -Edit the file with your customizations. For example: - -```javascript -customDashboard.menu = { - system: { - title: "Testing, testing, 1 2 3", - icon: '', - info: "This is overwritten info for the system overview section!" - } -}; -``` - -Finally, tell Netdata where you placed your customization file by replacing -`your_dashboard_info_file.js` below. - -```conf -[web] - custom dashboard_info.js = your_dashboard_info_file.js -``` - -Once you restart Netdata, refresh the dashboard to find your custom -configuration: - -![Screenshot of overwritten text from dashboard_info.js -file](https://user-images.githubusercontent.com/1153921/62798924-570e6c80-ba94-11e9-9578-869753bec39c.png) - -## Custom dashboards - -For information on creating custom dashboards from scratch, see the [custom dashboards](/src/web/gui/custom/README.md) guide. +> ⚠️ You're checking the documentation for the legacy Agent dashboard. +> For the current version, check [Accessing Netdata Dashboards](/docs/dashboards-and-charts/README.md). diff --git a/src/web/gui/bundle_dashboard_v1.py b/src/web/gui/bundle_dashboard_v1.py index 3fbe66330..9c6f4d682 100755 --- a/src/web/gui/bundle_dashboard_v1.py +++ b/src/web/gui/bundle_dashboard_v1.py @@ -17,15 +17,15 @@ BASEPATH = Path('v1') URLTEMPLATE = 'https://github.com/netdata/dashboard/releases/download/{0}/dashboard.tar.gz' CMAKETEMPLATE = ''' - install(FILES {0} COMPONENT netdata DESTINATION ${{WEB_DEST}}) - install(FILES {1} COMPONENT netdata DESTINATION ${{WEB_DEST}}/css) - install(FILES {2} COMPONENT netdata DESTINATION ${{WEB_DEST}}/fonts) - install(FILES {3} COMPONENT netdata DESTINATION ${{WEB_DEST}}/images) - install(FILES {4} COMPONENT netdata DESTINATION ${{WEB_DEST}}/lib) - install(FILES {5} COMPONENT netdata DESTINATION ${{WEB_DEST}}/static/css) - install(FILES {6} COMPONENT netdata DESTINATION ${{WEB_DEST}}/static/js) - install(FILES {7} COMPONENT netdata DESTINATION ${{WEB_DEST}}/static/media) - install(FILES web/gui/v1/index.html COMPONENT netdata DESTINATION ${WEB_DEST}/v1) + install(FILES {0} COMPONENT dashboard DESTINATION ${{WEB_DEST}}) + install(FILES {1} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/css) + install(FILES {2} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/fonts) + install(FILES {3} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/images) + install(FILES {4} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/lib) + install(FILES {5} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/static/css) + install(FILES {6} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/static/js) + install(FILES {7} COMPONENT dashboard DESTINATION ${{WEB_DEST}}/static/media) + install(FILES web/gui/v1/index.html COMPONENT dashboard DESTINATION ${WEB_DEST}/v1) ''' def copy_dashboard(tag): diff --git a/src/web/gui/bundle_dashboard_v2.py b/src/web/gui/bundle_dashboard_v2.py deleted file mode 100755 index 09ac6f998..000000000 --- a/src/web/gui/bundle_dashboard_v2.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright: © 2023 Netdata Inc. -# SPDX-License-Identifier: GPL-3.0-or-later -'''Bundle the v2 dashboard code into the agent repo. - - This is designed to be run as part of a GHA workflow, but will work fine outside of one.''' - -import os -import shutil -import subprocess - -from pathlib import Path - -os.chdir(Path(__file__).parent.absolute()) - -BASEDIR = 'v2' - -BASEPATH = Path(BASEDIR) - -TMPPATH = Path('tmp') - -URLSRC = 'https://app.netdata.cloud/agent.tar.gz' - -CMAKETEMPLATE = ''' - install(FILES {0} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2) - install(FILES {1} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static) - install(FILES {2} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static/email/img) - install(FILES {3} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static/img) - install(FILES {4} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static/img/logos/os) - install(FILES {5} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static/img/logos/services) - install(FILES {6} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static/img/mail) - install(FILES {7} COMPONENT netdata DESTINATION ${{WEB_DEST}}/v2/static/site/pages/holding-page-503) -''' - -def copy_dashboard(): - '''Fetch and bundle the dashboard code.''' - print('Preparing target directory') - shutil.rmtree(BASEPATH) - TMPPATH.mkdir() - print('::group::Fetching dashboard release tarball') - subprocess.check_call(f'curl -L -o agent.tar { URLSRC }', shell=True) - print('::endgroup::') - print('::group::Extracting dashboard release tarball') - subprocess.check_call(f"tar -xvf agent.tar -C { TMPPATH } --strip-components=1 --exclude='*.br' --exclude='*.gz'", shell=True) - print('::endgroup::') - print('Copying files') - (TMPPATH / 'agent' / BASEDIR).rename(BASEPATH) - (TMPPATH / 'agent' / 'index.html').rename(Path('./index.html')) - (TMPPATH / 'agent' / 'registry-access.html').rename('./registry-access.html') - (TMPPATH / 'agent' / 'registry-alert-redirect.html').rename('./registry-alert-redirect.html') - (TMPPATH / 'agent' / 'registry-hello.html').rename('./registry-hello.html') - shutil.copytree(TMPPATH / 'agent' / 'static', Path('./static'), dirs_exist_ok=True) - shutil.rmtree(TMPPATH) - print('Copying README.md') - BASEPATH.joinpath('README.md').symlink_to('../.dashboard-v2-notice.md') - print('Removing dashboard release tarball') - BASEPATH.joinpath('..', 'agent.tar').unlink() - - -def genfilelist(path): - '''Generate a list of files for the Makefile.''' - files = [f for f in path.iterdir() if f.is_file() and f.name != 'README.md'] - files = [Path(*f.parts[1:]) for f in files] - files.sort() - return '\n'.join([("src/web/gui/v2/" + str(f)) for f in files]) - - -def write_cmakefile(): - '''Write out the makefile for the dashboard code.''' - print('Generating cmake file') - output = CMAKETEMPLATE.format( - genfilelist(BASEPATH), - genfilelist(BASEPATH.joinpath('static')), - genfilelist(BASEPATH.joinpath('static', 'email', 'img')), - genfilelist(BASEPATH.joinpath('static', 'img')), - genfilelist(BASEPATH.joinpath('static', 'img', 'logos', 'os')), - genfilelist(BASEPATH.joinpath('static', 'img', 'logos', 'services')), - genfilelist(BASEPATH.joinpath('static', 'img', 'mail')), - genfilelist(BASEPATH.joinpath('static', 'site', 'pages', 'holding-page-503')), - ) - - BASEPATH.joinpath('dashboard_v2.cmake').write_text(output) - - -def list_changed_files(): - '''Create a list of changed files, and set it in an environment variable.''' - if 'GITHUB_ENV' in os.environ: - print('Generating file list for commit.') - subprocess.check_call('echo "COMMIT_FILES<> $GITHUB_ENV', shell=True) - subprocess.check_call('git status --porcelain=v1 --no-renames --untracked-files=all | rev | cut -d \' \' -f 1 | rev >> $GITHUB_ENV', shell=True) - subprocess.check_call('echo "EOF" >> $GITHUB_ENV', shell=True) - - -copy_dashboard() -write_cmakefile() -list_changed_files() diff --git a/src/web/gui/index.html b/src/web/gui/index.html deleted file mode 100644 index bad821a9d..000000000 --- a/src/web/gui/index.html +++ /dev/null @@ -1,245 +0,0 @@ -Netdata Agent Console

Welcome to Netdata

Loading latest Netdata UI...

We couldn't load the latest Netdata UI. You can try again
Or you can load the old single node dashboard or a local copy of Netdata UI
\ No newline at end of file diff --git a/src/web/gui/registry-access.html b/src/web/gui/registry-access.html deleted file mode 100644 index 75a403034..000000000 --- a/src/web/gui/registry-access.html +++ /dev/null @@ -1,73 +0,0 @@ -Netdata Registry \ No newline at end of file diff --git a/src/web/gui/registry-alert-redirect.html b/src/web/gui/registry-alert-redirect.html deleted file mode 100644 index 0bb20a9eb..000000000 --- a/src/web/gui/registry-alert-redirect.html +++ /dev/null @@ -1,152 +0,0 @@ -Netdata Agent Alert Redirect

Netdata Alert Notifications

Trying to find a Netdata Agent for this alert...
\ No newline at end of file diff --git a/src/web/gui/registry-hello.html b/src/web/gui/registry-hello.html deleted file mode 100644 index 7fba5662c..000000000 --- a/src/web/gui/registry-hello.html +++ /dev/null @@ -1,94 +0,0 @@ -Netdata Registry \ No newline at end of file diff --git a/src/web/gui/static/splash.css b/src/web/gui/static/splash.css deleted file mode 100644 index f20b6ac41..000000000 --- a/src/web/gui/static/splash.css +++ /dev/null @@ -1,171 +0,0 @@ -:root { - --main-bg: #080a0a; - --font-color: #b7c2c2; - --primary-green: #00ab44; - --column-gap: 8px; - --logo-color: #f1fff7; - --button-text-green: #00cd51; - --border-color: #536775; -} - -body { - margin: 0; - padding: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", - "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; - background: var(--main-bg); - color: var(--font-color); - font-weight: 200; - font-size: 14px; - line-height: 20px; -} -iframe.hidden { - display: none; -} -#agent-splash-screen a:link, -#agent-splash-screen a:visited, -#agent-splash-screen a:active { - font-size: 12px; - color: var(--primary-green); - font-weight: normal; -} -#agent-splash-screen .hero { - position: relative; - display: flex; - width: 500px; - margin: auto; - align-items: center; - justify-content: center; - flex-direction: column; - gap: calc(var(--column-gap) * 4); - text-align: center; - margin: 120px auto 32px; -} -#agent-splash-screen .logo-container { - position: relative; -} -#agent-splash-screen .logo-blur { - position: absolute; - width: 315px; - height: 315px; - left: -100%; - top: -100%; - filter: blur(30px); - pointer-events: none; -} -#agent-splash-screen .logo { - filter: drop-shadow(-6px -2px 20px rgba(255, 255, 255, 0.6)) blur(0.7px); -} - -#agent-splash-screen.loading .logo { - animation: glow 800ms linear infinite alternate; -} -#agent-splash-screen .headings { - display: flex; - flex-direction: column; - gap: calc(var(--column-gap) * 2); - height: 104px; -} -#agent-splash-screen .title { - font-size: 22px; - line-height: 26px; - font-weight: 200; - margin: 0; -} -#agent-splash-screen .subtitle { - font-size: 14px; - line-height: 20px; - margin: 0; -} -#agent-splash-screen .flex-center { - display: flex; - align-items: center; - justify-content: center; - gap: 2px; -} -#agent-splash-screen .flex-column { - flex-direction: column; -} -#agent-splash-screen a.button { - appearance: none; - border: none; - border-radius: 2px; - cursor: pointer; - text-decoration: none; - text-align: center; -} -#agent-splash-screen a.button svg { - width: 22px; - height: 16px; -} -#agent-splash-screen a.button.ghost { - background: transparent; - color: var(--button-text-green); - padding: 4px 6px; - font-size: 14px; - font-weight: 200; -} -#agent-splash-screen a.button.ghost:hover { - background: #00441b; -} - -#agent-splash-screen a.button.large { - background: transparent; - border: 1px solid var(--primary-green); - font-size: 18px; - padding: 12px; - color: var(--button-text-green); - width: 100%; - font-weight: 200; -} -#agent-splash-screen a.button.large:hover { - background: #00441b; -} -#agent-splash-screen .loading-message .subtitle { - display:none; -} -#agent-splash-screen.loading .loading-message .subtitle { - display:block; - height: 56px; -} -#agent-splash-screen .loading-message .flex-center { - display: none; -} -#agent-splash-screen.error .loading-message .flex-center { - display: flex; - margin: 8px auto; -} -#agent-splash-screen .loading-message table { - display: none; - border-collapse: collapse; - border: 1px solid var(--border-color); - color: var(--font-color); -} -#agent-splash-screen.table .loading-message table { - display: table; - margin: 8px auto; -} -#agent-splash-screen .dashboard-buttons { - width: 320px; - margin: auto; - gap: 24px; -} -#agent-splash-screen .terms { - position: absolute; - bottom: 40px; - left: 0; - right: 0; - margin: auto; -} -.green { - color: var(--primary-green); -} -@keyframes glow { - from { - filter: drop-shadow(-6px -2px 20px rgba(255, 255, 255, 0.9)) blur(0.9px); - } - to { - filter: drop-shadow(-6px -2px 20px rgba(255, 255, 255, 0.3)) blur(0.4px); - } -} diff --git a/src/web/gui/v1/dashboard_v1.cmake b/src/web/gui/v1/dashboard_v1.cmake index fd820d9e9..f1d40115e 100644 --- a/src/web/gui/v1/dashboard_v1.cmake +++ b/src/web/gui/v1/dashboard_v1.cmake @@ -22,19 +22,19 @@ src/web/gui/v1/robots.txt src/web/gui/v1/service-worker.js src/web/gui/v1/sitemap.xml src/web/gui/v1/tv-react.html -src/web/gui/v1/tv.html COMPONENT netdata DESTINATION ${WEB_DEST}) +src/web/gui/v1/tv.html COMPONENT dashboard DESTINATION ${WEB_DEST}) install(FILES src/web/gui/v1/css/bootstrap-3.3.7.css src/web/gui/v1/css/bootstrap-slate-flat-3.3.7.css src/web/gui/v1/css/bootstrap-slider-10.0.0.min.css src/web/gui/v1/css/bootstrap-theme-3.3.7.min.css src/web/gui/v1/css/bootstrap-toggle-2.2.2.min.css src/web/gui/v1/css/dashboard.css -src/web/gui/v1/css/dashboard.slate.css COMPONENT netdata DESTINATION ${WEB_DEST}/css) +src/web/gui/v1/css/dashboard.slate.css COMPONENT dashboard DESTINATION ${WEB_DEST}/css) install(FILES src/web/gui/v1/fonts/glyphicons-halflings-regular.eot src/web/gui/v1/fonts/glyphicons-halflings-regular.svg src/web/gui/v1/fonts/glyphicons-halflings-regular.ttf src/web/gui/v1/fonts/glyphicons-halflings-regular.woff -src/web/gui/v1/fonts/glyphicons-halflings-regular.woff2 COMPONENT netdata DESTINATION ${WEB_DEST}/fonts) +src/web/gui/v1/fonts/glyphicons-halflings-regular.woff2 COMPONENT dashboard DESTINATION ${WEB_DEST}/fonts) install(FILES src/web/gui/v1/images/alert-128-orange.png src/web/gui/v1/images/alert-128-red.png src/web/gui/v1/images/alert-multi-size-orange.ico @@ -84,7 +84,7 @@ src/web/gui/v1/images/overview.png src/web/gui/v1/images/packaging-beta-tag.svg src/web/gui/v1/images/post.png src/web/gui/v1/images/pricing.png -src/web/gui/v1/images/seo-performance-128.png COMPONENT netdata DESTINATION ${WEB_DEST}/images) +src/web/gui/v1/images/seo-performance-128.png COMPONENT dashboard DESTINATION ${WEB_DEST}/images) install(FILES src/web/gui/v1/lib/bootstrap-3.3.7.min.js src/web/gui/v1/lib/bootstrap-slider-10.0.0.min.js src/web/gui/v1/lib/bootstrap-table-1.11.0.min.js @@ -104,13 +104,13 @@ src/web/gui/v1/lib/jquery.sparkline-2.1.2.min.js src/web/gui/v1/lib/lz-string-1.4.4.min.js src/web/gui/v1/lib/pako-1.0.6.min.js src/web/gui/v1/lib/perfect-scrollbar-0.6.15.min.js -src/web/gui/v1/lib/tableExport-1.6.0.min.js COMPONENT netdata DESTINATION ${WEB_DEST}/lib) +src/web/gui/v1/lib/tableExport-1.6.0.min.js COMPONENT dashboard DESTINATION ${WEB_DEST}/lib) install(FILES src/web/gui/v1/static/css/2.c454aab8.chunk.css src/web/gui/v1/static/css/2.c454aab8.chunk.css.map src/web/gui/v1/static/css/4.a36e3b73.chunk.css src/web/gui/v1/static/css/4.a36e3b73.chunk.css.map src/web/gui/v1/static/css/main.53ba10f1.chunk.css -src/web/gui/v1/static/css/main.53ba10f1.chunk.css.map COMPONENT netdata DESTINATION ${WEB_DEST}/static/css) +src/web/gui/v1/static/css/main.53ba10f1.chunk.css.map COMPONENT dashboard DESTINATION ${WEB_DEST}/static/css) install(FILES src/web/gui/v1/static/js/10.a5cd7d0e.chunk.js src/web/gui/v1/static/js/10.a5cd7d0e.chunk.js.map src/web/gui/v1/static/js/2.62d105c5.chunk.js @@ -135,7 +135,7 @@ src/web/gui/v1/static/js/main.e248095a.chunk.js src/web/gui/v1/static/js/main.e248095a.chunk.js.LICENSE src/web/gui/v1/static/js/main.e248095a.chunk.js.map src/web/gui/v1/static/js/runtime-main.08abed8f.js -src/web/gui/v1/static/js/runtime-main.08abed8f.js.map COMPONENT netdata DESTINATION ${WEB_DEST}/static/js) +src/web/gui/v1/static/js/runtime-main.08abed8f.js.map COMPONENT dashboard DESTINATION ${WEB_DEST}/static/js) install(FILES src/web/gui/v1/static/media/ibm-plex-sans-latin-100.245539db.woff2 src/web/gui/v1/static/media/ibm-plex-sans-latin-100.9a582f3a.woff src/web/gui/v1/static/media/ibm-plex-sans-latin-100italic.1ea7c5d2.woff @@ -164,5 +164,5 @@ src/web/gui/v1/static/media/ibm-plex-sans-latin-700.b8809d61.woff src/web/gui/v1/static/media/ibm-plex-sans-latin-700.c9983d3d.woff2 src/web/gui/v1/static/media/ibm-plex-sans-latin-700italic.02954bee.woff2 src/web/gui/v1/static/media/ibm-plex-sans-latin-700italic.72e9af40.woff -src/web/gui/v1/static/media/material-icons.0509ab09.woff2 COMPONENT netdata DESTINATION ${WEB_DEST}/static/media) - install(FILES src/web/gui/v1/index.html COMPONENT netdata DESTINATION ${WEB_DEST}/v1) +src/web/gui/v1/static/media/material-icons.0509ab09.woff2 COMPONENT dashboard DESTINATION ${WEB_DEST}/static/media) + install(FILES src/web/gui/v1/index.html COMPONENT dashboard DESTINATION ${WEB_DEST}/v1) diff --git a/src/web/gui/v2/.well-known/assetlinks.json b/src/web/gui/v2/.well-known/assetlinks.json deleted file mode 100644 index 270af6689..000000000 --- a/src/web/gui/v2/.well-known/assetlinks.json +++ /dev/null @@ -1,11 +0,0 @@ -[ - { - "relation": ["delegate_permission/common.handle_all_urls"], - "target": { - "namespace": "android_app", - "package_name": "cloud.netdata.android", - "sha256_cert_fingerprints": - ["67:F4:89:2B:8D:A9:2D:CB:91:ED:A1:BD:42:04:90:28:05:4F:3E:81:04:7B:76:B6:0A:20:30:6C:90:38:08:90","1F:B8:9A:45:AD:83:76:DD:7E:A5:9A:07:82:4A:2F:99:3E:0D:EB:64:FA:50:76:59:65:3F:CC:38:7F:32:28:AA"] - } - } -] diff --git a/src/web/gui/v2/1220.01d6bbaab869c74f4437.chunk.js b/src/web/gui/v2/1220.01d6bbaab869c74f4437.chunk.js deleted file mode 100644 index fdd0ef57e..000000000 --- a/src/web/gui/v2/1220.01d6bbaab869c74f4437.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="abaaead6-1221-4463-a772-6fda591382c6",e._sentryDebugIdIdentifier="sentry-dbid-abaaead6-1221-4463-a772-6fda591382c6")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[1220],{51220:(e,t,s)=>{s.d(t,{Te:()=>h});var n=s(96540),i=s(40961),o=s(57530);const l="undefined"!==typeof document?n.useLayoutEffect:n.useEffect;function r(e){const t=n.useReducer((()=>({})),{})[1],s={...e,onChange:(s,n)=>{var o;n?(0,i.flushSync)(t):t(),null==(o=e.onChange)||o.call(e,s,n)}},[r]=n.useState((()=>new o.YV(s)));return r.setOptions(s),n.useEffect((()=>r._didMount()),[]),l((()=>r._willUpdate())),r}function h(e){return r({observeElementRect:o.T6,observeElementOffset:o.AO,scrollToFn:o.Ox,...e})}},57530:(e,t,s)=>{function n(e,t,s){let n,i=s.initialDeps??[];return()=>{var o,l,r,h;let a;s.key&&(null==(o=s.debug)?void 0:o.call(s))&&(a=Date.now());const d=e();if(!(d.length!==i.length||d.some(((e,t)=>i[t]!==e))))return n;let c;if(i=d,s.key&&(null==(l=s.debug)?void 0:l.call(s))&&(c=Date.now()),n=t(...d),s.key&&(null==(r=s.debug)?void 0:r.call(s))){const e=Math.round(100*(Date.now()-a))/100,t=Math.round(100*(Date.now()-c))/100,n=t/16,i=(e,t)=>{for(e=String(e);e.lengthm,vp:()=>r,Ox:()=>f,AO:()=>c,T6:()=>h});const o=(e,t)=>{let s;return function(...n){clearTimeout(s),s=setTimeout((()=>e.apply(this,n)),t)}},l=e=>e,r=e=>{const t=Math.max(e.startIndex-e.overscan,0),s=Math.min(e.endIndex+e.overscan,e.count-1),n=[];for(let i=t;i<=s;i++)n.push(i);return n},h=(e,t)=>{const s=e.scrollElement;if(!s)return;const n=e=>{const{width:s,height:n}=e;t({width:Math.round(s),height:Math.round(n)})};if(n(s.getBoundingClientRect()),"undefined"===typeof ResizeObserver)return()=>{};const i=new ResizeObserver((e=>{const t=e[0];if(null==t?void 0:t.borderBoxSize){const e=t.borderBoxSize[0];if(e)return void n({width:e.inlineSize,height:e.blockSize})}n(s.getBoundingClientRect())}));return i.observe(s,{box:"border-box"}),()=>{i.unobserve(s)}},a={passive:!0},d="undefined"==typeof window||"onscrollend"in window,c=(e,t)=>{const s=e.scrollElement;if(!s)return;let n=0;const i=d?()=>{}:o((()=>{t(n,!1)}),e.options.isScrollingResetDelay),l=o=>()=>{n=s[e.options.horizontal?"scrollLeft":"scrollTop"],i(),t(n,o)},r=l(!0),h=l(!1);return h(),s.addEventListener("scroll",r,a),s.addEventListener("scrollend",h,a),()=>{s.removeEventListener("scroll",r),s.removeEventListener("scrollend",h)}},u=(e,t,s)=>{if(null==t?void 0:t.borderBoxSize){const e=t.borderBoxSize[0];if(e){return Math.round(e[s.options.horizontal?"inlineSize":"blockSize"])}}return Math.round(e.getBoundingClientRect()[s.options.horizontal?"width":"height"])},f=(e,{adjustments:t=0,behavior:s},n)=>{var i,o;const l=e+t;null==(o=null==(i=n.scrollElement)?void 0:i.scrollTo)||o.call(i,{[n.options.horizontal?"left":"top"]:l,behavior:s})};class m{constructor(e){this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache=new Map,this.observer=(()=>{let e=null;const t=()=>e||("undefined"!==typeof ResizeObserver?e=new ResizeObserver((e=>{e.forEach((e=>{this._measureElement(e.target,e)}))})):null);return{disconnect:()=>{var e;return null==(e=t())?void 0:e.disconnect()},observe:e=>{var s;return null==(s=t())?void 0:s.observe(e,{box:"border-box"})},unobserve:e=>{var s;return null==(s=t())?void 0:s.unobserve(e)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach((([t,s])=>{"undefined"===typeof s&&delete e[t]})),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:l,rangeExtractor:r,onChange:()=>{},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,...e}},this.notify=(e,t)=>{var s,n;const{startIndex:i,endIndex:o}=this.range??{startIndex:void 0,endIndex:void 0},l=this.calculateRange();(e||i!==(null==l?void 0:l.startIndex)||o!==(null==l?void 0:l.endIndex))&&(null==(n=(s=this.options).onChange)||n.call(s,this,t))},this.cleanup=()=>{this.unsubs.filter(Boolean).forEach((e=>e())),this.unsubs=[],this.scrollElement=null},this._didMount=()=>(this.measureElementCache.forEach(this.observer.observe),()=>{this.observer.disconnect(),this.cleanup()}),this._willUpdate=()=>{const e=this.options.getScrollElement();this.scrollElement!==e&&(this.cleanup(),this.scrollElement=e,this._scrollToOffset(this.scrollOffset,{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,(e=>{this.scrollRect=e,this.notify(!1,!1)}))),this.unsubs.push(this.options.observeElementOffset(this,((e,t)=>{this.scrollAdjustments=0,this.scrollDirection=t?this.scrollOffsetthis.scrollRect[this.options.horizontal?"width":"height"],this.getMeasurementOptions=n((()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey]),((e,t,s,n)=>(this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:s,getItemKey:n})),{key:!1}),this.getFurthestMeasurement=(e,t)=>{const s=new Map,n=new Map;for(let i=t-1;i>=0;i--){const t=e[i];if(s.has(t.lane))continue;const o=n.get(t.lane);if(null==o||t.end>o.end?n.set(t.lane,t):t.ende.end===t.end?e.index-t.index:e.end-t.end))[0]:void 0},this.getMeasurements=n((()=>[this.getMeasurementOptions(),this.itemSizeCache]),(({count:e,paddingStart:t,scrollMargin:s,getItemKey:n},i)=>{const o=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,o);for(let r=o;rthis.options.debug}),this.calculateRange=n((()=>[this.getMeasurements(),this.getSize(),this.scrollOffset]),((e,t,s)=>this.range=e.length>0&&t>0?function({measurements:e,outerSize:t,scrollOffset:s}){const n=e.length-1,i=t=>e[t].start,o=g(0,n,i,s);let l=o;for(;lthis.options.debug}),this.getIndexes=n((()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count]),((e,t,s,n)=>null===t?[]:e({startIndex:t.startIndex,endIndex:t.endIndex,overscan:s,count:n})),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const t=this.options.indexAttribute,s=e.getAttribute(t);return s?parseInt(s,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this._measureElement=(e,t)=>{const s=this.measurementsCache[this.indexFromElement(e)];if(!s||!e.isConnected)return void this.measureElementCache.forEach(((t,s)=>{t===e&&(this.observer.unobserve(e),this.measureElementCache.delete(s))}));const n=this.measureElementCache.get(s.key);n!==e&&(n&&this.observer.unobserve(n),this.observer.observe(e),this.measureElementCache.set(s.key,e));const i=this.options.measureElement(e,t,this);this.resizeItem(s,i)},this.resizeItem=(e,t)=>{const s=t-(this.itemSizeCache.get(e.key)??e.size);0!==s&&((void 0!==this.shouldAdjustScrollPositionOnItemSizeChange?this.shouldAdjustScrollPositionOnItemSizeChange(e,s,this):e.start{e&&this._measureElement(e,void 0)},this.getVirtualItems=n((()=>[this.getIndexes(),this.getMeasurements()]),((e,t)=>{const s=[];for(let n=0,i=e.length;nthis.options.debug}),this.getVirtualItemForOffset=e=>{const t=this.getMeasurements();return i(t[g(0,t.length-1,(e=>i(t[e]).start),e)])},this.getOffsetForAlignment=(e,t)=>{const s=this.getSize();"auto"===t&&(t=e<=this.scrollOffset?"start":e>=this.scrollOffset+s?"end":"start"),"start"===t||("end"===t?e-=s:"center"===t&&(e-=s/2));const n=this.options.horizontal?"scrollWidth":"scrollHeight",i=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[n]:this.scrollElement[n]:0)-this.getSize();return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=(e,t="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));const s=i(this.getMeasurements()[e]);if("auto"===t)if(s.end>=this.scrollOffset+this.getSize()-this.options.scrollPaddingEnd)t="end";else{if(!(s.start<=this.scrollOffset+this.options.scrollPaddingStart))return[this.scrollOffset,t];t="start"}const n="end"===t?s.end+this.options.scrollPaddingEnd:s.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(n,t),t]},this.isDynamicMode=()=>this.measureElementCache.size>0,this.cancelScrollToIndex=()=>{null!==this.scrollToIndexTimeoutId&&(clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(e,{align:t="start",behavior:s}={})=>{this.cancelScrollToIndex(),"smooth"===s&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(e,t),{adjustments:void 0,behavior:s})},this.scrollToIndex=(e,{align:t="auto",behavior:s}={})=>{e=Math.max(0,Math.min(e,this.options.count-1)),this.cancelScrollToIndex(),"smooth"===s&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const[n,i]=this.getOffsetForIndex(e,t);this._scrollToOffset(n,{adjustments:void 0,behavior:s}),"smooth"!==s&&this.isDynamicMode()&&(this.scrollToIndexTimeoutId=setTimeout((()=>{this.scrollToIndexTimeoutId=null;if(this.measureElementCache.has(this.options.getItemKey(e))){const[o]=this.getOffsetForIndex(e,i);t=o,n=this.scrollOffset,Math.abs(t-n)<1||this.scrollToIndex(e,{align:i,behavior:s})}else this.scrollToIndex(e,{align:i,behavior:s});var t,n})))},this.scrollBy=(e,{behavior:t}={})=>{this.cancelScrollToIndex(),"smooth"===t&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.scrollOffset+e,{adjustments:void 0,behavior:t})},this.getTotalSize=()=>{var e;const t=this.getMeasurements();let s;return s=0===t.length?this.options.paddingStart:1===this.options.lanes?(null==(e=t[t.length-1])?void 0:e.end)??0:Math.max(...t.slice(-this.options.lanes).map((e=>e.end))),s-this.options.scrollMargin+this.options.paddingEnd},this._scrollToOffset=(e,{adjustments:t,behavior:s})=>{this.options.scrollToFn(e,{behavior:s,adjustments:t},this)},this.measure=()=>{var e,t;this.itemSizeCache=new Map,null==(t=(e=this.options).onChange)||t.call(e,this,!1)},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset="function"===typeof this.options.initialOffset?this.options.initialOffset():this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((e=>{this.itemSizeCache.set(e.key,e.size)})),this.notify(!1,!1)}}const g=(e,t,s,n)=>{for(;e<=t;){const i=(e+t)/2|0,o=s(i);if(on))return i;t=i-1}}return e>0?e-1:0}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js b/src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js deleted file mode 100644 index 50a4a0f3e..000000000 --- a/src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 1396.56f70d7c659ac0b694cd.chunk.js.LICENSE.txt */ -!function(){try{var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="9850ca16-d701-4640-8fc6-db4d0992573b",t._sentryDebugIdIdentifier="sentry-dbid-9850ca16-d701-4640-8fc6-db4d0992573b")}catch(t){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[1396],{40955:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(80754),r(84636),r(39506),r(57165),function(){var t=o,e=t.lib.BlockCipher,r=t.algo,i=[],n=[],s=[],c=[],a=[],h=[],f=[],l=[],u=[],d=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var r=0,o=0;for(e=0;e<256;e++){var p=o^o<<1^o<<2^o<<3^o<<4;p=p>>>8^255&p^99,i[r]=p,n[p]=r;var v=t[r],_=t[v],y=t[_],g=257*t[p]^16843008*p;s[r]=g<<24|g>>>8,c[r]=g<<16|g>>>16,a[r]=g<<8|g>>>24,h[r]=g,g=16843009*y^65537*_^257*v^16843008*r,f[p]=g<<24|g>>>8,l[p]=g<<16|g>>>16,u[p]=g<<8|g>>>24,d[p]=g,r?(r=v^t[t[t[y^v]]],o^=t[t[o]]):r=o=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],v=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(h=i[h>>>24]<<24|i[h>>>16&255]<<16|i[h>>>8&255]<<8|i[255&h]):(h=i[(h=h<<8|h>>>24)>>>24]<<24|i[h>>>16&255]<<16|i[h>>>8&255]<<8|i[255&h],h^=p[s/r|0]<<24),o[s]=o[s-r]^h);for(var c=this._invKeySchedule=[],a=0;a>>24]]^l[i[h>>>16&255]]^u[i[h>>>8&255]]^d[i[255&h]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,c,a,h,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,f,l,u,d,n),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],f=t[e+1]^r[1],l=t[e+2]^r[2],u=t[e+3]^r[3],d=4,p=1;p>>24]^n[f>>>16&255]^o[l>>>8&255]^s[255&u]^r[d++],_=i[f>>>24]^n[l>>>16&255]^o[u>>>8&255]^s[255&h]^r[d++],y=i[l>>>24]^n[u>>>16&255]^o[h>>>8&255]^s[255&f]^r[d++],g=i[u>>>24]^n[h>>>16&255]^o[f>>>8&255]^s[255&l]^r[d++];h=v,f=_,l=y,u=g}v=(c[h>>>24]<<24|c[f>>>16&255]<<16|c[l>>>8&255]<<8|c[255&u])^r[d++],_=(c[f>>>24]<<24|c[l>>>16&255]<<16|c[u>>>8&255]<<8|c[255&h])^r[d++],y=(c[l>>>24]<<24|c[u>>>16&255]<<16|c[h>>>8&255]<<8|c[255&f])^r[d++],g=(c[u>>>24]<<24|c[h>>>16&255]<<16|c[f>>>8&255]<<8|c[255&l])^r[d++],t[e]=v,t[e+1]=_,t[e+2]=y,t[e+3]=g},keySize:8});t.AES=e._createHelper(v)}(),o.AES)}()},43128:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(80754),r(84636),r(39506),r(57165),function(){var t=o,e=t.lib.BlockCipher,r=t.algo;const i=16,n=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var c={pbox:[],sbox:[]};function a(t,e){let r=e>>24&255,i=e>>16&255,n=e>>8&255,o=255&e,s=t.sbox[0][r]+t.sbox[1][i];return s^=t.sbox[2][n],s+=t.sbox[3][o],s}function h(t,e,r){let n,o=e,s=r;for(let c=0;c1;--c)o^=t.pbox[c],s=a(t,o)^s,n=o,o=s,s=n;return n=o,o=s,s=n,s^=t.pbox[1],o^=t.pbox[0],{left:o,right:s}}function l(t,e,r){for(let i=0;i<4;i++){t.sbox[i]=[];for(let e=0;e<256;e++)t.sbox[i][e]=s[i][e]}let o=0;for(let s=0;s=r&&(o=0);let c=0,a=0,f=0;for(let n=0;n>>2];t.sigBytes-=e}},v=(r.BlockCipher=f.extend({cfg:f.cfg.extend({mode:d,padding:p}),reset:function(){var t;f.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),r.CipherParams=i.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),_=(e.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?n.create([1398893684,1701076831]).concat(r).concat(e):e).toString(a)},parse:function(t){var e,r=a.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=n.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),v.create({ciphertext:r,salt:e})}},y=r.SerializableCipher=i.extend({cfg:i.extend({format:_}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),g=(e.kdf={}).OpenSSL={execute:function(t,e,r,i,o){if(i||(i=n.random(8)),o)s=h.create({keySize:e+r,hasher:o}).compute(t,i);else var s=h.create({keySize:e+r}).compute(t,i);var c=n.create(s.words.slice(e),4*r);return s.sigBytes=4*e,v.create({key:s,iv:c,salt:i})}},B=r.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:g}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize,i.salt,i.hasher);i.iv=n.iv;var o=y.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt,i.hasher);return i.iv=n.iv,y.decrypt.call(this,t,e,n.key,i)}})}()))}()},19021:function(t,e,r){t.exports=function(){var t=t||function(t,e){var i;if("undefined"!==typeof window&&window.crypto&&(i=window.crypto),"undefined"!==typeof self&&self.crypto&&(i=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(i=globalThis.crypto),!i&&"undefined"!==typeof window&&window.msCrypto&&(i=window.msCrypto),!i&&"undefined"!==typeof r.g&&r.g.crypto&&(i=r.g.crypto),!i)try{i=r(50477)}catch(_){}var n=function(){if(i){if("function"===typeof i.getRandomValues)try{return i.getRandomValues(new Uint32Array(1))[0]}catch(_){}if("function"===typeof i.randomBytes)try{return i.randomBytes(4).readInt32LE()}catch(_){}}throw new Error("Native crypto module could not be used to get secure random number.")},o=Object.create||function(){function t(){}return function(e){var r;return t.prototype=e,r=new t,t.prototype=null,r}}(),s={},c=s.lib={},a=c.Base={extend:function(t){var e=o(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},h=c.WordArray=a.extend({init:function(t,r){t=this.words=t||[],this.sigBytes=r!=e?r:4*t.length},toString:function(t){return(t||l).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(var c=0;c>>2]=r[c>>>2];return this.sigBytes+=n,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=a.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new h.init(r,e/2)}},u=f.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new h.init(r,e)}},d=f.Utf8={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return u.parse(unescape(encodeURIComponent(t)))}},p=c.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new h.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=d.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r,i=this._data,n=i.words,o=i.sigBytes,s=this.blockSize,c=o/(4*s),a=(c=e?t.ceil(c):t.max((0|c)-this._minBufferSize,0))*s,f=t.min(4*a,o);if(a){for(var l=0;l>>6-s%4*2;n[o>>>2]|=c<<24-o%4*8,o++}return e.create(n,o)}t.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var o=0;o>>6-s%4*2;n[o>>>2]|=c<<24-o%4*8,o++}return e.create(n,o)}t.enc.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var r=t.words,i=t.sigBytes,n=e?this._safe_map:this._map;t.clamp();for(var o=[],s=0;s>>2]>>>24-s%4*8&255)<<16|(r[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|r[s+2>>>2]>>>24-(s+2)%4*8&255,a=0;a<4&&s+.75*a>>6*(3-a)&63));var h=n.charAt(64);if(h)for(;o.length%4;)o.push(h);return o.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,o=this._reverseMap;if(!o){o=this._reverseMap=[];for(var s=0;s>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var r=t.length,i=[],n=0;n>>1]|=t.charCodeAt(n)<<16-n%2*16;return e.create(i,2*r)}},r.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(s))}return n.join("")},parse:function(t){for(var r=t.length,n=[],o=0;o>>1]|=i(t.charCodeAt(o)<<16-o%2*16);return e.create(n,2*r)}}}(),n.enc.Utf16)}()},39506:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(45471),r(51025),function(){var t=o,e=t.lib,r=e.Base,i=e.WordArray,n=t.algo,s=n.MD5,c=n.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:s,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r,n=this.cfg,o=n.hasher.create(),s=i.create(),c=s.words,a=n.keySize,h=n.iterations;c.lengthn&&(e=t.finalize(e)),e.clamp();for(var o=this._oKey=e.clone(),s=this._iKey=e.clone(),c=o.words,a=s.words,h=0;h>>2]|=t[n]<<24-n%4*8;e.call(this,i,r)}else e.apply(this,arguments)};r.prototype=t}}(),n.lib.WordArray)}()},84636:function(t,e,r){!function(e,i){var n;t.exports=(n=r(19021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,c=[];!function(){for(var e=0;e<64;e++)c[e]=4294967296*t.abs(t.sin(e+1))|0}();var a=s.MD5=o.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],a=t[e+1],d=t[e+2],p=t[e+3],v=t[e+4],_=t[e+5],y=t[e+6],g=t[e+7],B=t[e+8],w=t[e+9],k=t[e+10],x=t[e+11],b=t[e+12],S=t[e+13],m=t[e+14],A=t[e+15],H=o[0],z=o[1],C=o[2],R=o[3];H=h(H,z,C,R,s,7,c[0]),R=h(R,H,z,C,a,12,c[1]),C=h(C,R,H,z,d,17,c[2]),z=h(z,C,R,H,p,22,c[3]),H=h(H,z,C,R,v,7,c[4]),R=h(R,H,z,C,_,12,c[5]),C=h(C,R,H,z,y,17,c[6]),z=h(z,C,R,H,g,22,c[7]),H=h(H,z,C,R,B,7,c[8]),R=h(R,H,z,C,w,12,c[9]),C=h(C,R,H,z,k,17,c[10]),z=h(z,C,R,H,x,22,c[11]),H=h(H,z,C,R,b,7,c[12]),R=h(R,H,z,C,S,12,c[13]),C=h(C,R,H,z,m,17,c[14]),H=f(H,z=h(z,C,R,H,A,22,c[15]),C,R,a,5,c[16]),R=f(R,H,z,C,y,9,c[17]),C=f(C,R,H,z,x,14,c[18]),z=f(z,C,R,H,s,20,c[19]),H=f(H,z,C,R,_,5,c[20]),R=f(R,H,z,C,k,9,c[21]),C=f(C,R,H,z,A,14,c[22]),z=f(z,C,R,H,v,20,c[23]),H=f(H,z,C,R,w,5,c[24]),R=f(R,H,z,C,m,9,c[25]),C=f(C,R,H,z,p,14,c[26]),z=f(z,C,R,H,B,20,c[27]),H=f(H,z,C,R,S,5,c[28]),R=f(R,H,z,C,d,9,c[29]),C=f(C,R,H,z,g,14,c[30]),H=l(H,z=f(z,C,R,H,b,20,c[31]),C,R,_,4,c[32]),R=l(R,H,z,C,B,11,c[33]),C=l(C,R,H,z,x,16,c[34]),z=l(z,C,R,H,m,23,c[35]),H=l(H,z,C,R,a,4,c[36]),R=l(R,H,z,C,v,11,c[37]),C=l(C,R,H,z,g,16,c[38]),z=l(z,C,R,H,k,23,c[39]),H=l(H,z,C,R,S,4,c[40]),R=l(R,H,z,C,s,11,c[41]),C=l(C,R,H,z,p,16,c[42]),z=l(z,C,R,H,y,23,c[43]),H=l(H,z,C,R,w,4,c[44]),R=l(R,H,z,C,b,11,c[45]),C=l(C,R,H,z,A,16,c[46]),H=u(H,z=l(z,C,R,H,d,23,c[47]),C,R,s,6,c[48]),R=u(R,H,z,C,g,10,c[49]),C=u(C,R,H,z,m,15,c[50]),z=u(z,C,R,H,_,21,c[51]),H=u(H,z,C,R,b,6,c[52]),R=u(R,H,z,C,p,10,c[53]),C=u(C,R,H,z,k,15,c[54]),z=u(z,C,R,H,a,21,c[55]),H=u(H,z,C,R,B,6,c[56]),R=u(R,H,z,C,A,10,c[57]),C=u(C,R,H,z,y,15,c[58]),z=u(z,C,R,H,S,21,c[59]),H=u(H,z,C,R,v,6,c[60]),R=u(R,H,z,C,x,10,c[61]),C=u(C,R,H,z,d,15,c[62]),z=u(z,C,R,H,w,21,c[63]),o[0]=o[0]+H|0,o[1]=o[1]+z|0,o[2]=o[2]+C|0,o[3]=o[3]+R|0},_doFinalize:function(){var e=this._data,r=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;r[n>>>5]|=128<<24-n%32;var o=t.floor(i/4294967296),s=i;r[15+(n+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e.sigBytes=4*(r.length+1),this._process();for(var c=this._hash,a=c.words,h=0;h<4;h++){var f=a[h];a[h]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return c},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});function h(t,e,r,i,n,o,s){var c=t+(e&r|~e&i)+n+s;return(c<>>32-o)+e}function f(t,e,r,i,n,o,s){var c=t+(e&i|r&~i)+n+s;return(c<>>32-o)+e}function l(t,e,r,i,n,o,s){var c=t+(e^r^i)+n+s;return(c<>>32-o)+e}function u(t,e,r,i,n,o,s){var c=t+(r^(e|~i))+n+s;return(c<>>32-o)+e}e.MD5=o._createHelper(a),e.HmacMD5=o._createHmacHelper(a)}(Math),n.MD5)}()},82169:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(57165),o.mode.CFB=function(){var t=o.lib.BlockCipherMode.extend();function e(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}function r(t){return 0===(t[0]=e(t[0]))&&(t[1]=e(t[1])),t}var i=t.Encryptor=t.extend({processBlock:function(t,e){var i=this._cipher,n=i.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),r(s);var c=s.slice(0);i.encryptBlock(c,0);for(var a=0;a>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},o.pad.Ansix923)}()},54905:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(57165),o.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(o.lib.WordArray.random(i-1)).concat(o.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},o.pad.Iso10126)}()},10482:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(57165),o.pad.Iso97971={pad:function(t,e){t.concat(o.lib.WordArray.create([2147483648],1)),o.pad.ZeroPadding.pad(t,e)},unpad:function(t){o.pad.ZeroPadding.unpad(t),t.sigBytes--}},o.pad.Iso97971)}()},58124:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(57165),o.pad.NoPadding={pad:function(){},unpad:function(){}},o.pad.NoPadding)}()},52155:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(57165),o.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;r>=0;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},o.pad.ZeroPadding)}()},70019:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(63009),r(51025),function(){var t=o,e=t.lib,r=e.Base,i=e.WordArray,n=t.algo,s=n.SHA256,c=n.HMAC,a=n.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:s,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=c.create(r.hasher,t),o=i.create(),s=i.create([1]),a=o.words,h=s.words,f=r.keySize,l=r.iterations;a.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var n=0;n<4;n++)a.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],c=o[1],h=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=h>>>16|4294901760&f,u=f<<16|65535&h;for(i[0]^=h,i[1]^=l,i[2]^=f,i[3]^=u,i[4]^=h,i[5]^=l,i[6]^=f,i[7]^=u,n=0;n<4;n++)a.call(this)}},_doProcessBlock:function(t,e){var r=this._X;a.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function a(){for(var t=this._X,e=this._C,r=0;r<8;r++)n[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var i=t[r]+e[r],o=65535&i,c=i>>>16,a=((o*o>>>17)+o*c>>>15)+c*c,h=((4294901760&i)*i|0)+((65535&i)*i|0);s[r]=a^h}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=e._createHelper(c)}(),o.RabbitLegacy)}()},96298:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(80754),r(84636),r(39506),r(57165),function(){var t=o,e=t.lib.StreamCipher,r=t.algo,i=[],n=[],s=[],c=r.Rabbit=e.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=0;r<4;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(this._b=0,r=0;r<4;r++)a.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],h=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),f=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=h>>>16|4294901760&f,u=f<<16|65535&h;for(n[0]^=h,n[1]^=l,n[2]^=f,n[3]^=u,n[4]^=h,n[5]^=l,n[6]^=f,n[7]^=u,r=0;r<4;r++)a.call(this)}},_doProcessBlock:function(t,e){var r=this._X;a.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function a(){for(var t=this._X,e=this._C,r=0;r<8;r++)n[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var i=t[r]+e[r],o=65535&i,c=i>>>16,a=((o*o>>>17)+o*c>>>15)+c*c,h=((4294901760&i)*i|0)+((65535&i)*i|0);s[r]=a^h}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=e._createHelper(c)}(),o.Rabbit)}()},77193:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(80754),r(84636),r(39506),r(57165),function(){var t=o,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,c=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+c)%256;var a=i[n];i[n]=i[o],i[o]=a}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var s=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)n.call(this)}});t.RC4Drop=e._createHelper(s)}(),o.RC4)}()},78056:function(t,e,r){!function(e,i){var n;t.exports=(n=r(19021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,c=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),a=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),h=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),f=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),l=i.create([0,1518500249,1859775393,2400959708,2840853838]),u=i.create([1352829926,1548603684,1836072691,2053994217,0]),d=s.RIPEMD160=o.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,d,w,k,x,b,S,m,A,H,z=this._hash.words,C=l.words,R=u.words,E=c.words,D=a.words,M=h.words,P=f.words;for(x=o=z[0],b=s=z[1],S=d=z[2],m=w=z[3],A=k=z[4],r=0;r<80;r+=1)H=o+t[e+E[r]]|0,H+=r<16?p(s,d,w)+C[0]:r<32?v(s,d,w)+C[1]:r<48?_(s,d,w)+C[2]:r<64?y(s,d,w)+C[3]:g(s,d,w)+C[4],H=(H=B(H|=0,M[r]))+k|0,o=k,k=w,w=B(d,10),d=s,s=H,H=x+t[e+D[r]]|0,H+=r<16?g(b,S,m)+R[0]:r<32?y(b,S,m)+R[1]:r<48?_(b,S,m)+R[2]:r<64?v(b,S,m)+R[3]:p(b,S,m)+R[4],H=(H=B(H|=0,P[r]))+A|0,x=A,A=m,m=B(S,10),S=b,b=H;H=z[1]+d+m|0,z[1]=z[2]+w+A|0,z[2]=z[3]+k+x|0,z[3]=z[4]+o+b|0,z[4]=z[0]+s+S|0,z[0]=H},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,r){return t^e^r}function v(t,e,r){return t&e|~t&r}function _(t,e,r){return(t|~e)^r}function y(t,e,r){return t&r|e&~r}function g(t,e,r){return t^(e|~r)}function B(t,e){return t<>>32-e}e.RIPEMD160=o._createHelper(d),e.HmacRIPEMD160=o._createHmacHelper(d)}(Math),n.RIPEMD160)}()},45471:function(t,e,r){!function(e,i){var n;t.exports=(n=r(19021),function(){var t=n,e=t.lib,r=e.WordArray,i=e.Hasher,o=t.algo,s=[],c=o.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],c=r[3],a=r[4],h=0;h<80;h++){if(h<16)s[h]=0|t[e+h];else{var f=s[h-3]^s[h-8]^s[h-14]^s[h-16];s[h]=f<<1|f>>>31}var l=(i<<5|i>>>27)+a+s[h];l+=h<20?1518500249+(n&o|~n&c):h<40?1859775393+(n^o^c):h<60?(n&o|n&c|o&c)-1894007588:(n^o^c)-899497514,a=c,c=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+c|0,r[4]=r[4]+a|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(i+64>>>9<<4)]=Math.floor(r/4294967296),e[15+(i+64>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA1=i._createHelper(c),t.HmacSHA1=i._createHmacHelper(c)}(),n.SHA1)}()},36308:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(63009),function(){var t=o,e=t.lib.WordArray,r=t.algo,i=r.SHA256,n=r.SHA224=i.extend({_doReset:function(){this._hash=new e.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=i._doFinalize.call(this);return t.sigBytes-=4,t}});t.SHA224=i._createHelper(n),t.HmacSHA224=i._createHmacHelper(n)}(),o.SHA224)}()},63009:function(t,e,r){!function(e,i){var n;t.exports=(n=r(19021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,c=[],a=[];!function(){function e(e){for(var r=t.sqrt(e),i=2;i<=r;i++)if(!(e%i))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var i=2,n=0;n<64;)e(i)&&(n<8&&(c[n]=r(t.pow(i,.5))),a[n]=r(t.pow(i,1/3)),n++),i++}();var h=[],f=s.SHA256=o.extend({_doReset:function(){this._hash=new i.init(c.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],f=r[5],l=r[6],u=r[7],d=0;d<64;d++){if(d<16)h[d]=0|t[e+d];else{var p=h[d-15],v=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,_=h[d-2],y=(_<<15|_>>>17)^(_<<13|_>>>19)^_>>>10;h[d]=v+h[d-7]+y+h[d-16]}var g=i&n^i&o^n&o,B=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),w=u+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&f^~c&l)+a[d]+h[d];u=l,l=f,f=c,c=s+w|0,s=o,o=n,n=i,i=w+(B+g)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+f|0,r[6]=r[6]+l|0,r[7]=r[7]+u|0},_doFinalize:function(){var e=this._data,r=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;return r[n>>>5]|=128<<24-n%32,r[14+(n+64>>>9<<4)]=t.floor(i/4294967296),r[15+(n+64>>>9<<4)]=i,e.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=o._createHelper(f),e.HmacSHA256=o._createHmacHelper(f)}(Math),n.SHA256)}()},45953:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(43240),function(t){var e=o,r=e.lib,i=r.WordArray,n=r.Hasher,s=e.x64.Word,c=e.algo,a=[],h=[],f=[];!function(){for(var t=1,e=0,r=0;r<24;r++){a[t+5*e]=(r+1)*(r+2)/2%64;var i=(2*t+3*e)%5;t=e%5,e=i}for(t=0;t<5;t++)for(e=0;e<5;e++)h[t+5*e]=e+(2*t+3*e)%5*5;for(var n=1,o=0;o<24;o++){for(var c=0,l=0,u=0;u<7;u++){if(1&n){var d=(1<>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(z=r[n]).high^=s,z.low^=o}for(var c=0;c<24;c++){for(var u=0;u<5;u++){for(var d=0,p=0,v=0;v<5;v++)d^=(z=r[u+5*v]).high,p^=z.low;var _=l[u];_.high=d,_.low=p}for(u=0;u<5;u++){var y=l[(u+4)%5],g=l[(u+1)%5],B=g.high,w=g.low;for(d=y.high^(B<<1|w>>>31),p=y.low^(w<<1|B>>>31),v=0;v<5;v++)(z=r[u+5*v]).high^=d,z.low^=p}for(var k=1;k<25;k++){var x=(z=r[k]).high,b=z.low,S=a[k];S<32?(d=x<>>32-S,p=b<>>32-S):(d=b<>>64-S,p=x<>>64-S);var m=l[h[k]];m.high=d,m.low=p}var A=l[0],H=r[0];for(A.high=H.high,A.low=H.low,u=0;u<5;u++)for(v=0;v<5;v++){var z=r[k=u+5*v],C=l[k],R=l[(u+1)%5+5*v],E=l[(u+2)%5+5*v];z.high=C.high^~R.high&E.high,z.low=C.low^~R.low&E.low}z=r[0];var D=f[c];z.high^=D.high,z.low^=D.low}},_doFinalize:function(){var e=this._data,r=e.words,n=(this._nDataBytes,8*e.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(t.ceil((n+1)/o)*o>>>5)-1]|=128,e.sigBytes=4*r.length,this._process();for(var s=this._state,c=this.cfg.outputLength/8,a=c/8,h=[],f=0;f>>24)|4278255360&(u<<24|u>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),h.push(d),h.push(u)}return new i.init(h,c)},clone:function(){for(var t=n.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});e.SHA3=n._createHelper(u),e.HmacSHA3=n._createHmacHelper(u)}(Math),o.SHA3)}()},89557:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(43240),r(81380),function(){var t=o,e=t.x64,r=e.Word,i=e.WordArray,n=t.algo,s=n.SHA512,c=n.SHA384=s.extend({_doReset:function(){this._hash=new i.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var t=s._doFinalize.call(this);return t.sigBytes-=16,t}});t.SHA384=s._createHelper(c),t.HmacSHA384=s._createHmacHelper(c)}(),o.SHA384)}()},81380:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(43240),function(){var t=o,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,s=t.algo;function c(){return i.create.apply(i,arguments)}var a=[c(1116352408,3609767458),c(1899447441,602891725),c(3049323471,3964484399),c(3921009573,2173295548),c(961987163,4081628472),c(1508970993,3053834265),c(2453635748,2937671579),c(2870763221,3664609560),c(3624381080,2734883394),c(310598401,1164996542),c(607225278,1323610764),c(1426881987,3590304994),c(1925078388,4068182383),c(2162078206,991336113),c(2614888103,633803317),c(3248222580,3479774868),c(3835390401,2666613458),c(4022224774,944711139),c(264347078,2341262773),c(604807628,2007800933),c(770255983,1495990901),c(1249150122,1856431235),c(1555081692,3175218132),c(1996064986,2198950837),c(2554220882,3999719339),c(2821834349,766784016),c(2952996808,2566594879),c(3210313671,3203337956),c(3336571891,1034457026),c(3584528711,2466948901),c(113926993,3758326383),c(338241895,168717936),c(666307205,1188179964),c(773529912,1546045734),c(1294757372,1522805485),c(1396182291,2643833823),c(1695183700,2343527390),c(1986661051,1014477480),c(2177026350,1206759142),c(2456956037,344077627),c(2730485921,1290863460),c(2820302411,3158454273),c(3259730800,3505952657),c(3345764771,106217008),c(3516065817,3606008344),c(3600352804,1432725776),c(4094571909,1467031594),c(275423344,851169720),c(430227734,3100823752),c(506948616,1363258195),c(659060556,3750685593),c(883997877,3785050280),c(958139571,3318307427),c(1322822218,3812723403),c(1537002063,2003034995),c(1747873779,3602036899),c(1955562222,1575990012),c(2024104815,1125592928),c(2227730452,2716904306),c(2361852424,442776044),c(2428436474,593698344),c(2756734187,3733110249),c(3204031479,2999351573),c(3329325298,3815920427),c(3391569614,3928383900),c(3515267271,566280711),c(3940187606,3454069534),c(4118630271,4000239992),c(116418474,1914138554),c(174292421,2731055270),c(289380356,3203993006),c(460393269,320620315),c(685471733,587496836),c(852142971,1086792851),c(1017036298,365543100),c(1126000580,2618297676),c(1288033470,3409855158),c(1501505948,4234509866),c(1607167915,987167468),c(1816402316,1246189591)],h=[];!function(){for(var t=0;t<80;t++)h[t]=c()}();var f=s.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],f=r[5],l=r[6],u=r[7],d=i.high,p=i.low,v=n.high,_=n.low,y=o.high,g=o.low,B=s.high,w=s.low,k=c.high,x=c.low,b=f.high,S=f.low,m=l.high,A=l.low,H=u.high,z=u.low,C=d,R=p,E=v,D=_,M=y,P=g,F=B,W=w,I=k,O=x,U=b,K=S,X=m,L=A,T=H,j=z,N=0;N<80;N++){var Z,q,G=h[N];if(N<16)q=G.high=0|t[e+2*N],Z=G.low=0|t[e+2*N+1];else{var V=h[N-15],Y=V.high,J=V.low,Q=(Y>>>1|J<<31)^(Y>>>8|J<<24)^Y>>>7,$=(J>>>1|Y<<31)^(J>>>8|Y<<24)^(J>>>7|Y<<25),tt=h[N-2],et=tt.high,rt=tt.low,it=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,nt=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),ot=h[N-7],st=ot.high,ct=ot.low,at=h[N-16],ht=at.high,ft=at.low;q=(q=(q=Q+st+((Z=$+ct)>>>0<$>>>0?1:0))+it+((Z+=nt)>>>0>>0?1:0))+ht+((Z+=ft)>>>0>>0?1:0),G.high=q,G.low=Z}var lt,ut=I&U^~I&X,dt=O&K^~O&L,pt=C&E^C&M^E&M,vt=R&D^R&P^D&P,_t=(C>>>28|R<<4)^(C<<30|R>>>2)^(C<<25|R>>>7),yt=(R>>>28|C<<4)^(R<<30|C>>>2)^(R<<25|C>>>7),gt=(I>>>14|O<<18)^(I>>>18|O<<14)^(I<<23|O>>>9),Bt=(O>>>14|I<<18)^(O>>>18|I<<14)^(O<<23|I>>>9),wt=a[N],kt=wt.high,xt=wt.low,bt=T+gt+((lt=j+Bt)>>>0>>0?1:0),St=yt+vt;T=X,j=L,X=U,L=K,U=I,K=O,I=F+(bt=(bt=(bt=bt+ut+((lt+=dt)>>>0
>>0?1:0))+kt+((lt+=xt)>>>0>>0?1:0))+q+((lt+=Z)>>>0>>0?1:0))+((O=W+lt|0)>>>0>>0?1:0)|0,F=M,W=P,M=E,P=D,E=C,D=R,C=bt+(_t+pt+(St>>>0>>0?1:0))+((R=lt+St|0)>>>0>>0?1:0)|0}p=i.low=p+R,i.high=d+C+(p>>>0>>0?1:0),_=n.low=_+D,n.high=v+E+(_>>>0>>0?1:0),g=o.low=g+P,o.high=y+M+(g>>>0

>>0?1:0),w=s.low=w+W,s.high=B+F+(w>>>0>>0?1:0),x=c.low=x+O,c.high=k+I+(x>>>0>>0?1:0),S=f.low=S+K,f.high=b+U+(S>>>0>>0?1:0),A=l.low=A+L,l.high=m+X+(A>>>0>>0?1:0),z=u.low=z+j,u.high=H+T+(z>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(i+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(i+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(f),t.HmacSHA512=e._createHmacHelper(f)}(),o.SHA512)}()},7628:function(t,e,r){!function(e,i,n){var o;t.exports=(o=r(19021),r(80754),r(84636),r(39506),r(57165),function(){var t=o,e=t.lib,r=e.WordArray,i=e.BlockCipher,n=t.algo,s=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],c=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],a=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],h=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],f=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],l=n.DES=i.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=s[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var h=n[o]=[],f=a[o];for(r=0;r<24;r++)h[r/6|0]|=e[(c[r]-1+f)%28]<<31-r%6,h[4+(r/6|0)]|=e[28+(c[r+24]-1+f)%28]<<31-r%6;for(h[0]=h[0]<<1|h[0]>>>31,r=1;r<7;r++)h[r]=h[r]>>>4*(r-1)+3;h[7]=h[7]<<5|h[7]>>>27}var l=this._invSubKeys=[];for(r=0;r<16;r++)l[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],u.call(this,4,252645135),u.call(this,16,65535),d.call(this,2,858993459),d.call(this,8,16711935),u.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=h[a][((s^n[a])&f[a])>>>0];this._lBlock=s,this._rBlock=o^c}var l=this._lBlock;this._lBlock=this._rBlock,this._rBlock=l,u.call(this,1,1431655765),d.call(this,8,16711935),d.call(this,2,858993459),u.call(this,16,65535),u.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function u(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<192.");var e=t.slice(0,2),i=t.length<4?t.slice(0,2):t.slice(2,4),n=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=l.createEncryptor(r.create(e)),this._des2=l.createEncryptor(r.create(i)),this._des3=l.createEncryptor(r.create(n))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=i._createHelper(p)}(),o.TripleDES)}()},43240:function(t,e,r){!function(e,i){var n;t.exports=(n=r(19021),function(t){var e=n,r=e.lib,i=r.Base,o=r.WordArray,s=e.x64={};s.Word=i.extend({init:function(t,e){this.high=t,this.low=e}}),s.WordArray=i.extend({init:function(e,r){e=this.words=e||[],this.sigBytes=r!=t?r:8*e.length},toX32:function(){for(var t=this.words,e=t.length,r=[],i=0;i{n.d(t,{A:()=>l});var r=n(58168),a=n(96540),i=n(50876);const o=e=>(0,a.forwardRef)(((t,n)=>{let{callback:o,feature:c,isStart:l,isSuccess:s,isFailure:d,eventReason:g,payload:m={},...u}=t;const{sendLog:h,isReady:p}=(0,i.A)(),k=(0,a.useCallback)((()=>{const e=u[o],t={feature:c,isStart:l,isSuccess:s,isFailure:d,eventReason:g,...m,...u["data-ga"]?{dataGa:u["data-ga"]}:{},...u.dataGa?{dataGa:u.dataGa}:{},...u["data-track"]?{dataTrack:u["data-track"]}:{},...u.label?{label:u.label}:{}};"function"==typeof e&&e(),h(t,!0)}),[o,h,p,m,u]),x=(0,a.useMemo)((()=>({...u,[o]:k})),[u,o,k]);return a.createElement(e,(0,r.A)({ref:n},x))}));var c=n(67276);const l=e=>(0,a.forwardRef)(((t,n)=>{let{payload:i={},...l}=t;const s=o(e);return a.createElement(s,(0,r.A)({},l,{ref:n,callback:"onClick",payload:{...i,action:c.o1.buttonClicked}}))}))},21828:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(96540),a=n(83199);const i=e=>{let{theme:t}=e;const n="default"==t?"grey185":"grey45";return t="dark"==t?a.DarkTheme:a.DefaultTheme,r.createElement(a.Flex,{height:"1px",width:"100%",background:(0,a.getColor)(["neutral",n])({theme:t})})}},84541:(e,t,n)=>{n.d(t,{A:()=>S});var r=n(58168),a=n(96540),i=n(45463),o=n(83199);const c=(0,n(8711).default)(o.Flex).attrs((e=>({flex:{grow:"1",shrink:"0"},...e}))).withConfig({displayName:"panel__Panel",componentId:"sc-4zlw7c-0"})(["",";",";"],(e=>{let{order:t}=e;return t&&"order: ".concat(t,";")}),(e=>{let{bgGradient:t}=e;return t&&"background: linear-gradient(34.14deg, #536775 -26.52%, #2F3A42 53.66%);\n"}));var l=n(17208);const s=()=>a.createElement(o.Flex,{alignItems:"center",column:!0,padding:[0,0,18,0]},a.createElement(l.oi,null));n(41393),n(81454);const d=[{icon:"rocket",title:"Rapid Deployment, Instant Insights",text:"One-command installation, automatic metric discovery, and intuitive out-of-the-box dashboards for every single metric."},{icon:"qualityOfServiceSolid",title:"Advanced Monitoring, Made Accessible",text:"Experience real-time monitoring with 1-second granularity and anomaly detection across 800+ integrations."},{icon:"firewallSolid",title:"On-Prem Data Storage, Transparent Pricing",text:"Unlimited metrics, Infinite scale, Zero hidden costs. Decentralized architecture ensures maximum data security."}];n(3064),n(98992),n(72577),n(62953);var g=n(18061),m=n(26655);const u=()=>m.A.get("https://us-east1-netdata-analytics-bi.cloudfunctions.net/netdata_public_metrics_website"),h=e=>{let{downScale:t,...n}=e;const o=(0,i.A)("(min-width: 992px)");return(c=o?t[0]:t[1],e=>{let{children:t,...n}=e;return a.createElement(c,(0,r.A)({color:"bright"},n),t)})(n);var c};var p=n(12897),k=n.n(p),x=n(55042),b=n.n(x),w=new(k())({id:"cloudStatistics",use:"cloudStatistics-usage",viewBox:"0 0 194 146",content:''});b().add(w);const f=w,E=e=>a.createElement(o.Flex,(0,r.A)({as:"svg",height:f.height,width:f.width,viewBox:f.viewBox},e),a.createElement("use",{xlinkHref:"#".concat(f.id)})),v=()=>{const[e]=(0,g.A)((()=>({fetch:u})),[]),{nodesOnline:t,githubStars:n,dockerHubPulls:r}=(0,a.useMemo)((()=>{var t,n;return Array.isArray(e)?{nodesOnline:"1,265,463",githubStars:null===(t=e.find((e=>{let{key:t}=e;return"GitHub Stars"===t})))||void 0===t?void 0:t.value,dockerHubPulls:null===(n=e.find((e=>{let{key:t}=e;return"DockerHub Pulls"===t})))||void 0===n?void 0:n.value}:{}}),[e]);return a.createElement(o.Flex,{column:!0,gap:6},a.createElement(E,{height:"160px",padding:[0,0,4,0]}),a.createElement(o.Flex,{column:!0,gap:3},a.createElement(h,{downScale:[o.TextBigger,o.TextBigger],color:"bright",textAlign:"center"},a.createElement(h,{downScale:[o.TextBigger,o.TextBigger],color:t?"primaryHighlight":"bright",textAlign:"center",strong:!0},t||"..."),a.createElement(o.Box,{as:"span",margin:[0,0,0,3]},"Nodes Online")),a.createElement(h,{downScale:[o.TextBigger,o.TextBigger],color:"bright",textAlign:"center"},a.createElement(h,{downScale:[o.TextBigger,o.TextBigger],color:n?"primaryHighlight":"bright",textAlign:"center",strong:!0},n||"..."),a.createElement(o.Box,{as:"span",margin:[0,0,0,3]},"GitHub Stars")),a.createElement(h,{downScale:[o.TextBigger,o.TextBigger],color:"bright",textAlign:"center"},a.createElement(h,{downScale:[o.TextBigger,o.TextBigger],color:r?"primaryHighlight":"bright",textAlign:"center",strong:!0},r||"..."),a.createElement(o.Box,{as:"span",margin:[0,0,0,3]},"DockerHub Pulls"))))},y=e=>{let{icon:t,title:n}=e;const r=(0,i.A)("(min-width: 475px)");return a.createElement(o.Flex,{gap:4,alignItems:"center"},r&&a.createElement(o.Flex,{background:"transparent",justifyContent:"center",alignItems:"center",height:"56px",width:"56px",round:64,border:{side:"all",color:"secondaryColor"}},a.createElement(o.Icon,{name:t,height:"24px",width:"24px",color:"secondaryColor"})),a.createElement(o.Flex,{column:!0,justifyContent:"start",alignItems:"start",gap:2},a.createElement(o.TextBig,{color:"bright",strong:!0},n)))};var A=n(21828);const M=()=>a.createElement(o.Flex,{column:!0,padding:[16,4,12],width:{max:"500px"},margin:[0,"auto"],gap:14},a.createElement(v,null),a.createElement(o.Flex,{column:!0,gap:8,padding:[0,10]},d.map(((e,t)=>a.createElement(y,(0,r.A)({key:t},e))))),a.createElement(o.Flex,{column:!0,gap:6,alignItems:"center"},a.createElement(A.A,null),a.createElement(o.Flex,{column:!0,gap:4,alignItems:"center"},a.createElement(l.go,{theme:"dark"}),a.createElement(o.TextSmall,{textAlign:"center",color:"bright"},"Netdata is a member of the Cloud Native Computing Foundation (CNCF), and is one of the most starred projects in the CNCF landscape.")))),S=e=>{let{children:t,...n}=e;const l=(0,i.A)("(min-width: 998px)");return a.createElement(o.Flex,(0,r.A)({height:{min:"100vh"},flexWrap:!0},n),!window.envSettings.onprem&&a.createElement(c,{background:(0,o.getColor)(["neutral","grey25"])({theme:o.DarkTheme}),order:l?0:1,width:l?{base:"34%"}:{max:"100%"}},a.createElement(M,null)),a.createElement(c,{background:"mainBackground",order:l?1:0,width:l?{base:"66%"}:{max:"100%"}},a.createElement(o.Flex,{background:"transparent",column:!0,gap:8,padding:[12,4],width:{max:"500px"},margin:[0,"auto"]},a.createElement(s,null),t)))}},11418:(e,t,n)=>{n.r(t),n.d(t,{MagicLinkSent:()=>p,default:()=>k});n(62953),n(3296),n(27208),n(48408);var r=n(96540),a=n(8711),i=n(47767),o=n(83199),c=n(55337),l=n(84541),s=n(17182),d=n(11604),g=n(92155),m=n(63314);const u=(0,a.default)(o.Text).attrs({role:"button"}).withConfig({displayName:"magicLinkSent__ButtonText",componentId:"sc-ua6kmo-0"})(["cursor:pointer;"]),h=(0,g.A)(u),p=()=>{const{searchParams:e}=new URL(window.location.href),t=null===e||void 0===e?void 0:e.get("email"),{search:n,state:a={}}=(0,i.zy)(),{email:c}=a||{},g=t||c,u=window.location.hash,p=(0,d.Js)(),k=(0,r.useCallback)((()=>{const e=encodeURIComponent((0,s.V)("/sign-in".concat(n),u)),t=encodeURIComponent((0,s.V)("/sign-up/verify".concat(n),u));p({email:g,redirectURI:e,registerURI:t,resend:!0})}),[g]);return r.createElement(m.Ay,{feature:"MagicLinkSent",email:g},r.createElement(l.A,{"data-testid":"magicLinkSent"},r.createElement(o.H1,{textAlign:"center"},"Check your email!"),r.createElement(o.Flex,{column:!0,padding:[0,0,8,0],gap:8,justifyContent:"between",alignItems:"center"},r.createElement(o.Flex,{column:!0,gap:1,alignItems:"center"},r.createElement(o.TextBig,{textAlign:"center"},"We have sent an email to ",r.createElement(o.TextBig,{strong:!0},!!g&&g),"."),r.createElement(o.TextBig,{textAlign:"center"},"Please find this email (check your spam folder too) and click the button there to continue.")),r.createElement(o.Text,{textAlign:"center"},"Didn't receive it?"," ",r.createElement(h,{onClick:k,color:"primary","data-ga":"magicLikSent::click-resent::check-email-view"},"Click here to resend it.")))))},k=(0,c.g)(p,"light")},17182:(e,t,n)=>{n.d(t,{R:()=>o,V:()=>i});var r=n(38819);const a=["expires_at","error_code","error_msg_key","error_msg"],i=(e,t)=>{const n=(0,r.yq)(a),i=t.includes("join-callback")?decodeURIComponent(n):n;return"".concat(window.location.origin).concat(e,"#").concat(i)},o=(e,t)=>{const{search:n,hash:r}=window.location,a=encodeURIComponent(i("/sign-in".concat(n).concat(n.length?"&":"?","oauth=").concat(e,"&"),r)),o=encodeURIComponent(i("/sign-up/verify".concat(n).concat(n.length?"&":"?","oauth=").concat(e,"&"),r));return"/api/v2/auth/account/".concat(e,"?redirect_uri=").concat(a,"®ister_uri=").concat(o).concat(t?"&is_unverified_registration=true":"")}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/1782.d82eb301aa81b380dd0c.chunk.js b/src/web/gui/v2/1782.d82eb301aa81b380dd0c.chunk.js deleted file mode 100644 index 46438f433..000000000 --- a/src/web/gui/v2/1782.d82eb301aa81b380dd0c.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="915cff30-b3e0-4d43-9fb7-29cb723a3367",e._sentryDebugIdIdentifier="sentry-dbid-915cff30-b3e0-4d43-9fb7-29cb723a3367")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[1782],{1782:(e,n,t)=>{t.r(n),t.d(n,{default:()=>b});var a=t(96540),o=t(5396),l=t(65566),d=t(83199),r=t(4659),s=t(50876);const c=()=>{const{sendButtonClickedLog:e}=(0,s.A)(),n=(0,a.useCallback)((()=>{window.open("https://www.netdata.cloud/secure-foss-agent/","_blank","noopener,noreferrer"),e({feature:"AgentBannerContactUs"})}),[e]);return a.createElement(d.Flex,{width:"100%",justifyContent:"center",alignItems:"center"},a.createElement(d.Text,null,"Your Agents are open by default. Secure them easily with"," ",a.createElement(r.A,{onClick:n,testId:"agent-banner-contact-link"},"Netdata Enterprise Agent"),"."))};var f=t(75542),i=t(63314),u=t(37618);const b=()=>{const{id:e}=(0,f.A)(),n=(0,a.useCallback)((()=>"dismissed-agent-banner-".concat(e)),[e]),{dismissed:t,onClose:d}=(0,l.A)({getLocalStorageKey:n,logKey:"AgentBannerDismiss"});return u.Ay&&!t?a.createElement(i.Ay,{feature:"AgentBanner"},a.createElement(o.A,{testId:"agent-banner",width:"100%",background:"successSemi",onClose:d,tooltipProps:{align:"top"},zIndex:20},a.createElement(c,null))):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/1839.a4196d2a87ac0fdd9f34.chunk.js b/src/web/gui/v2/1839.a4196d2a87ac0fdd9f34.chunk.js deleted file mode 100644 index fed71e9fc..000000000 --- a/src/web/gui/v2/1839.a4196d2a87ac0fdd9f34.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ef034845-b41b-4f78-8c45-36f3bd8c8152",e._sentryDebugIdIdentifier="sentry-dbid-ef034845-b41b-4f78-8c45-36f3bd8c8152")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[1839],{41839:(e,t,n)=>{n.r(t),n.d(t,{default:()=>u});var l=n(96540),a=n(83199),o=n(99904),r=n(47731),d=n(92155),i=n(63314);const c=(0,n(8711).default)(a.ModalContent).attrs((e=>{let{isMobile:t}=e;return{width:t?{base:"95vw"}:{}}})).withConfig({displayName:"styled__StyledModalContent",componentId:"sc-1vfmaif-0"})([""]),s=(0,d.A)(a.Button),u=()=>{const e=(0,r.J)(),{isModalVisible:t,trialEndsAt:n,onClose:d}=(0,o.A)();return t?l.createElement(a.Modal,{backdropProps:{backdropBlur:!0}},l.createElement(i.Ay,{feature:"BumpedWarningModal"},l.createElement(c,{isMobile:e},l.createElement(a.ModalHeader,null,l.createElement(a.Flex,{gap:2,alignItems:"center"},l.createElement(a.Icon,{name:"netdataPress",color:"text"}),l.createElement(a.H4,null,"Welcome to Netdata!"))),l.createElement(a.ModalBody,null,l.createElement(a.Flex,{column:!0,gap:4,width:{max:120},padding:[0,0,4,0]},l.createElement(a.TextBigger,null,"Welcome to your Business trial!"),l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.TextBigger,{lineHeight:1.5},"We are happy to inform you that we upgraded your account to Netdata Business, for free, until ",l.createElement(a.TextBigger,{strong:!0},n),"."),l.createElement(a.TextBigger,{lineHeight:1.5},"Explore all the Business features and keep enjoying the best of Netdata!")))),l.createElement(a.ModalFooter,null,l.createElement(a.Flex,{gap:4,justifyContent:"end",padding:[1,2]},l.createElement(s,{feature:"BumpedWarningModalClose",label:"OK",textTransform:"uppercase",flavour:"hollow",icon:"thumb_up",onClick:d})))))):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/185.42bab351ba68de7ca4aa.chunk.js b/src/web/gui/v2/185.42bab351ba68de7ca4aa.chunk.js deleted file mode 100644 index 6f2926191..000000000 --- a/src/web/gui/v2/185.42bab351ba68de7ca4aa.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d40cbb04-6538-4d72-8288-fa96fe4b50e8",e._sentryDebugIdIdentifier="sentry-dbid-d40cbb04-6538-4d72-8288-fa96fe4b50e8")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[185],{51719:(e,n,l)=>{l.d(n,{A:()=>i});var t=l(58168),a=l(96540),r=l(83199),d=l(54856),o=l(3914);const i=e=>{const n=(0,o.dg)();return a.createElement(r.Flex,(0,t.A)({gap:2,alignItems:"center"},e),a.createElement(r.Icon,{size:"small",color:"warning",name:"warning_triangle"}),a.createElement(r.Text,null,"This feature is only available to paid plans"),n?null:a.createElement(d.A,null))}},70185:(e,n,l)=>{l.r(n),l.d(n,{default:()=>u});var t=l(96540),a=l(83199),r=l(8910),d=l(3914),o=l(87860),i=l(37618),f=l(70895),s=l(51719),c=l(63314);const u=()=>{const e=(0,d.vt)(),n=(0,i.ES)(e)?i.gB:"",{hasPermission:l}=(0,f.j)({edit:!0});return(0,o.A)({spaceId:e,id:n,pollingInterval:63e3}),t.createElement(c.Ay,{feature:"SettingsConfigurations"},t.createElement(a.Flex,{height:"100%",column:!0,gap:4},t.createElement(a.Flex,{gap:3,alignItems:"center"},t.createElement(a.H3,null,"Configurations"),l?null:t.createElement(s.A,null)),t.createElement(r.default,null)))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/1876.e610906417b961290730.chunk.js b/src/web/gui/v2/1876.e610906417b961290730.chunk.js deleted file mode 100644 index b545b042a..000000000 --- a/src/web/gui/v2/1876.e610906417b961290730.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},d=(new Error).stack;d&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[d]="58cd7e74-4be7-447d-9061-c9c4d9d78755",e._sentryDebugIdIdentifier="sentry-dbid-58cd7e74-4be7-447d-9061-c9c4d9d78755")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[1876],{41876:(e,d,n)=>{n.r(d),n.d(d,{default:()=>u});n(9391);var t=n(96540),l=n(11604),o=n(50876),f=n(28738);const u=()=>{const{sendLog:e,isReady:d}=(0,o.A)(),n=(0,l.So)(),u=(0,t.useCallback)((()=>{e({feature:"SignUpThankYou"}).finally((()=>{n()}))}),[n,d]);return(0,t.useEffect)((()=>{let e=!0,n=null;return d?u():n=setTimeout((()=>{e&&u()}),1e3),()=>{e=!1,n&&(clearTimeout(n),n=null)}}),[d]),t.createElement(f.A,{title:"Welcome to Netdata!"})}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/195.4cdbea6af54d14a95949.chunk.js b/src/web/gui/v2/195.4cdbea6af54d14a95949.chunk.js deleted file mode 100644 index 478a5f7a7..000000000 --- a/src/web/gui/v2/195.4cdbea6af54d14a95949.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="e74218ad-2906-4523-9997-f0ed6afc09dc",e._sentryDebugIdIdentifier="sentry-dbid-e74218ad-2906-4523-9997-f0ed6afc09dc")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[195],{52919:(e,t,a)=>{a.d(t,{D7:()=>r,Jp:()=>d,NT:()=>u,N_:()=>h,iS:()=>i,vE:()=>c,v_:()=>o,xI:()=>s,z6:()=>m});var l=a(8711),n=a(83199);const o=l.default.img.withConfig({displayName:"styled__Illustration",componentId:"sc-1yhntgl-0"})(["margin:0 auto;"]),r=(0,l.default)(n.Text).withConfig({displayName:"styled__StyledText",componentId:"sc-1yhntgl-1"})(["display:block;"]),d=l.default.div.withConfig({displayName:"styled__TextHeader",componentId:"sc-1yhntgl-2"})(["margin-bottom:",";font-weight:700;"],(0,n.getSizeBy)(2)),s=l.default.div.withConfig({displayName:"styled__StaticCheckmarks",componentId:"sc-1yhntgl-3"})(["margin-top:",";margin-bottom:",";"],(0,n.getSizeBy)(2),(0,n.getSizeBy)(5)),i=l.default.div.withConfig({displayName:"styled__CheckmarkLine",componentId:"sc-1yhntgl-4"})(["display:flex;align-items:center;"]),c=(0,l.default)(n.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-1yhntgl-5"})(["margin-right:4px;height:18px;> use{fill:",";}"],(0,n.getColor)("primary")),u=(0,l.default)(c).withConfig({displayName:"styled__HelpIcon",componentId:"sc-1yhntgl-6"})(["vertical-align:middle;"]),m=l.default.div.withConfig({displayName:"styled__LearnMoreSection",componentId:"sc-1yhntgl-7"})(["margin-top:",";"],(0,n.getSizeBy)(4)),h=l.default.a.withConfig({displayName:"styled__Link",componentId:"sc-1yhntgl-8"})(["text-decoration:underline;color:",";&:visited{color:",";}"],(0,n.getColor)("success"),(0,n.getColor)("success"))},10195:(e,t,a)=>{a.r(t),a.d(t,{default:()=>B});a(62953);var l=a(96540),n=a(83199),o=a(87659),r=a(35304),d=a(21591),s=a(47767),i=a(15327),c=a(74618),u=a(45765),m=a(78969),h=a(69765),b=a(3914),g=a(67544),f=a(49667),y=a(8018),p=a(52919);const E=e=>{let{onClose:t}=e;const a=(0,s.Zp)(),[o,r]=(0,l.useState)(!1),[d,E]=(0,l.useState)(""),{id:w,slug:v}=(0,b.ap)(),A=(0,h.ID)(),C=(0,h.QW)(),D=(0,l.useCallback)((e=>{let{slug:l}=e;t(),a("/spaces/".concat(v,"/rooms/").concat(C,"/dashboards/").concat(l))}),[v,C]),x=(0,g.Dn)(w,A,{onSuccess:D}),T=(0,l.useCallback)((()=>x({name:d})),[d]),k=d.length>0;return l.createElement(i.GO,{onClose:t},l.createElement(c.z,{onClose:t,title:"New Dashboard"},l.createElement(n.Button,{label:"Add",icon:"plus",onClick:T,"data-testid":"addNewDashboardModal-add-button"})),l.createElement(u.U,null,"Create new Dashboard"),l.createElement(i.Yv,null,l.createElement(y.A,{value:d,label:"Name",onChange:e=>{E(e.target.value)},isValid:o,setIsValid:r,isDirty:k,instantFeedback:"all",onKeyDown:e=>e.keyCode===m.I7&&o&&T,"data-testid":"addNewDashboardModal-dashboardName-input",containerStyles:{flex:{grow:0,shrink:0},margin:[0,0,4,0]}}),l.createElement(p.D7,null,l.createElement(p.Jp,null,"What can you do with Dashboards?"),"Combine all the metrics that matter to you, from all the nodes that matter to you, into one clean interface that helps you visually detect anomalies as they\u2019re happening. Building a new dashboard will only take a few minutes, and the metrics are always real-time."),l.createElement(p.xI,null,l.createElement(p.iS,null,l.createElement(p.vE,{name:"check"}),l.createElement(n.Text,null,"Add charts from your infrastructure")),l.createElement(p.iS,null,l.createElement(p.vE,{name:"check"}),l.createElement(n.Text,null,"Group information in a meaningful way")),l.createElement(p.z6,null,l.createElement(p.NT,{name:"help"}),l.createElement(n.Text,null,"Learn more about Dashboards")," ",l.createElement(p.N_,{href:"https://learn.netdata.cloud/docs/cloud/visualize/dashboards",target:"_blank",rel:"noopener noreferrer"},"In our documentation"))),l.createElement(p.v_,{src:f.$})))};var w=a(28738),v=a(63950),A=a.n(v),C=(a(41393),a(8159),a(98992),a(81454),a(37550),a(73865));const D=e=>{let{handleOpenAddDashboardModal:t,hasPermissionToAddDashboard:a,hasPermissionToDeleteDashboard:n,refetch:o}=e;const r=(0,h.XA)("name"),s=(0,g.Ts)(),i=(0,d.q)(),{hasLimitations:c,maxDashboards:u}=(0,C.A)(),m=async(e,t)=>{const a=(Array.isArray(e)?e:[e]).map((e=>{let{id:t}=e;return t}));await s({ids:a},{onSuccess:()=>t.resetRowSelection()}),o()},b=(0,l.useMemo)((()=>({delete:{confirmLabel:"Yes, delete",confirmationMessage:e=>l.createElement(l.Fragment,null,"You are about to delete ",l.createElement("strong",null,e.name)," from ",l.createElement("strong",null,r),".",l.createElement("br",null),"Are you sure you want to continue?"),confirmationTitle:e=>"Delete ".concat(e.name),declineLabel:"Cancel",handleAction:m,tooltipText:"Delete dashboard",isVisible:n}})),[n]),f=(0,l.useMemo)((()=>({addEntry:{handleAction:t,isVisible:a,tooltipText:"Create dashboard",disabledTooltipText:"Your plan does not allow you to create more than ".concat(u," dashboards."),disabled:c&&i.length>=u},delete:{confirmLabel:"Yes, delete",confirmationMessage:(e,t)=>l.createElement(l.Fragment,null,"You are about to delete"," ",l.createElement("strong",null,t.length>1?"".concat(t.length," dashboards"):t[0].name)," ","from ",l.createElement("strong",null,r),".",l.createElement("br",null),"Are you sure you want to continue?"),confirmationTitle:()=>"Delete",disabledTooltipText:"Delete is disabled because you haven't selected dashboards",declineLabel:"Cancel",handleAction:m,tooltipText:"Delete dashboards",isVisible:n}})));return{rowActions:n?b:[],bulkActions:[a,n].some(Boolean)?f:[]}};var x=a(68980),T=a(29217);const k=e=>{const t=new Date(e),[,a,l,n]=t.toDateString().split(" ");return"".concat(a," ").concat(l,", ").concat(n)};var _=a(4659);const S=e=>{let{name:t}=e;return l.createElement(n.Flex,{width:"300px",column:!0,gap:1},l.createElement(n.Text,{strong:!0},"Locked!"),l.createElement(n.Text,null,"The dashboard ",l.createElement(n.Text,{strong:!0},t)," is locked."),l.createElement(n.Text,null,"Your plan is limited to 1 dashboard. You can delete some dashboards or upgrade your plan for no limitations."))},I=e=>{var t;let{getValue:a,row:o}=e;const r="notAvailable"==(null===o||void 0===o||null===(t=o.original)||void 0===t?void 0:t.state),d=a();return r?l.createElement(T.A,{content:l.createElement(S,{name:d}),align:"bottom",isBasic:!0},l.createElement(n.Flex,{alignItems:"center"},l.createElement(n.Text,null,d),l.createElement(n.Icon,{name:"padlock",height:"12px",color:"text"}))):l.createElement(_.A,{as:"Link",to:o.original.slug},d)};var N=a(46741);const L=e=>{let{refetch:t,handleOpenAddDashboardModal:a}=e;const[,o]=(0,l.useState)(),r=(0,d.q)(),s=(0,x.Sf)(r),i=(0,N.JT)("dashboard:Create"),c=(0,N.JT)("dashboard:Delete"),u=(0,l.useMemo)((()=>[{id:"name",accessorKey:"name",header:"Name",cell:I},{id:"updatedAt",accessorKey:"updatedAt",header:"Last modified",cell:e=>{let{getValue:t}=e;return l.createElement(n.TextSmall,null,k(t()))},sortingFn:"datetime"},{id:"createdAt",accessorKey:"createdAt",header:"Created",cell:e=>{let{getValue:t}=e;return l.createElement(n.TextSmall,null,k(t()))},sortingFn:"datetime"}]),[]),{rowActions:m,bulkActions:h}=D({dashboards:s,handleOpenAddDashboardModal:a,hasPermissionToAddDashboard:i,hasPermissionToDeleteDashboard:c,refetch:t});return{rowActions:m,bulkActions:h,data:s,enableSelection:c,columns:u,enableSorting:!0,globalFilterFn:(0,l.useCallback)(((e,t,a)=>{var l,n,o,r,d,s,i;const c=null===a||void 0===a||null===(l=a.toLowerCase)||void 0===l?void 0:l.call(a),u=null===(n=e.getValue("name"))||void 0===n||null===(o=n.toLowerCase)||void 0===o?void 0:o.call(n),m="".concat(null===(r=k(e.getValue("updatedAt")))||void 0===r||null===(d=r.toLowerCase)||void 0===d?void 0:d.call(r)),h="".concat(null===(s=k(e.getValue("createdAt")))||void 0===s||null===(i=s.toLowerCase)||void 0===i?void 0:i.call(s));return u.includes(c)||m.includes(c)||h.includes(c)}),[]),setGlobalFilter:o}},F=[{id:"updatedAt",desc:!0}],M=e=>{let{refetch:t=A(),handleOpenAddDashboardModal:a}=e;const{enableSelection:o,columns:r,data:d,rowActions:s,bulkActions:i,enableSorting:c,globalFilterFn:u,setGlobalFilter:m}=L({refetch:t,handleOpenAddDashboardModal:a});return l.createElement(n.Table,{rowActions:s,enableSelection:o,data:d,dataColumns:r,bulkActions:i,enableSorting:c,globalFilterFn:u,onSearch:m,testPrefixCallback:e=>e.name,sortBy:F,title:"Dashboards"})};var V=a(63314);const B=()=>{const e=(0,r.A)(),[t,,a,s]=(0,o.A)(!1);return(0,d.RQ)()?l.createElement(V.Ay,{feature:"DashboardOverview"},l.createElement(n.Flex,{position:"relative",width:"100%",height:"100%",flex:"1",column:!0,padding:[3,3,0],overflow:"hidden"},l.createElement(M,{refetch:e,handleOpenAddDashboardModal:a}),t&&l.createElement(E,{onClose:s}))):l.createElement(w.A,{title:"Loading dashboards..."})}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/2007.b33ce2b4b736228fd681.chunk.js b/src/web/gui/v2/2007.b33ce2b4b736228fd681.chunk.js deleted file mode 100644 index c08dc41d1..000000000 --- a/src/web/gui/v2/2007.b33ce2b4b736228fd681.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5ee71555-9d61-4693-bbdd-297fb8bf64e8",e._sentryDebugIdIdentifier="sentry-dbid-5ee71555-9d61-4693-bbdd-297fb8bf64e8")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[2007],{62007:(e,n,l)=>{l.r(n),l.d(n,{default:()=>u});var d=l(96540),t=l(22292),f=(l(62953),l(83199)),o=l(19673);const b=()=>{const{loaded:e,value:n}=(0,o.JN)(),l=[n.class,...n.trialEndsAt?["(Trial)"]:[]].join(" ");return e&&l.length?d.createElement(f.Flex,null,d.createElement(f.Pill,null,l)):null},u=()=>(0,t.uW)("isAnonymous")?null:d.createElement(b,null)}}]); \ No newline at end of file diff --git a/src/web/gui/v2/252.40edc9b0f6da1422f40b.chunk.js b/src/web/gui/v2/252.40edc9b0f6da1422f40b.chunk.js deleted file mode 100644 index 6883dbbe3..000000000 --- a/src/web/gui/v2/252.40edc9b0f6da1422f40b.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7da4450f-4e60-469b-a9f3-7fd9037f778a",e._sentryDebugIdIdentifier="sentry-dbid-7da4450f-4e60-469b-a9f3-7fd9037f778a")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[252],{11726:(e,n,t)=>{t.r(n),t.d(n,{default:()=>b});t(62953);var o=t(96540),r=t(39225),a=t(45467),l=t(83199),i=t(29217),c=t(8239),s=t(28738),u=t(57605),d=t(70895),f=t(51719);const p=(0,r.A)((()=>Promise.all([t.e(7144),t.e(7857),t.e(1220),t.e(749),t.e(9473),t.e(9292),t.e(8910),t.e(4140)]).then(t.bind(t,8910))),"Configuration"),b=()=>{const[e,n]=(0,c.OD)(),{node:t}=e||{},{openItems:r}=(0,c.IP)(),b=(0,u.A)(),{hasPermission:m}=(0,d.j)({edit:!0});(0,a.A)((()=>{b(!!e)}),[!!e]);const g=(0,o.useCallback)((()=>{n(null)}),[n]),v=(0,o.useCallback)((()=>{r.length||g()}),[r,g]);return e?o.createElement(l.Modal,{backdropProps:{backdropBlur:!0},onEsc:v},o.createElement(l.ModalContent,{width:"90vw",height:"90vh"},o.createElement(l.ModalHeader,{justifyContent:"between",padding:[4],round:!0},o.createElement(l.Flex,{gap:3,alignItems:"center"},o.createElement(l.H4,null,t.name),m?null:o.createElement(f.A,null)),o.createElement(i.A,{align:"bottom",content:"Close window",zIndex:7050},o.createElement(l.Flex,null,o.createElement(l.ModalCloseButton,{onClose:g,testId:"assistant-modal-close-button"})))),o.createElement(l.ModalBody,{height:"calc(100% - 55px)",overflow:{vertical:"auto"}},o.createElement(o.Suspense,{fallback:o.createElement(s.A,{title:"Loading configuration..."})},o.createElement(p,{node:t,inModal:!0}))))):null}},54856:(e,n,t)=>{t.d(n,{A:()=>u});var o=t(58168),r=t(96540),a=t(84976),l=t(83199),i=t(4659),c=t(46741),s=t(27994);const u=function(){let{containerProps:e={},...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=(0,c.JT)("billing:ReadAll"),{url:u}=(0,s.A)();return u?r.createElement(l.Flex,(0,o.A)({background:"sideBarMini",border:{side:"all",color:"border"},padding:[1,2],round:!0},e),r.createElement(i.A,(0,o.A)({align:"bottom",as:a.N_,boxProps:{as:l.Flex},color:"text",Component:l.TextMicro,content:t?"Upgrade your plan in order to use this feature":"You have no permissions to manage billing",disabled:!t,hoverColor:"textFocus",showToolTip:!0,strong:!0,to:u},n),"Upgrade now!")):null}},51719:(e,n,t)=>{t.d(n,{A:()=>c});var o=t(58168),r=t(96540),a=t(83199),l=t(54856),i=t(3914);const c=e=>{const n=(0,i.dg)();return r.createElement(a.Flex,(0,o.A)({gap:2,alignItems:"center"},e),r.createElement(a.Icon,{size:"small",color:"warning",name:"warning_triangle"}),r.createElement(a.Text,null,"This feature is only available to paid plans"),n?null:r.createElement(l.A,null))}},84428:(e,n,t)=>{var o=t(78227)("iterator"),r=!1;try{var a=0,l={next:function(){return{done:!!a++}},return:function(){r=!0}};l[o]=function(){return this},Array.from(l,(function(){throw 2}))}catch(i){}e.exports=function(e,n){try{if(!n&&!r)return!1}catch(i){return!1}var t=!1;try{var a={};a[o]=function(){return{next:function(){return{done:t=!0}}}},e(a)}catch(i){}return t}},87290:(e,n,t)=>{var o=t(50516),r=t(19088);e.exports=!o&&!r&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,n,t)=>{var o=t(24475),r=t(44576);e.exports="process"===r(o.process)},10916:(e,n,t)=>{var o=t(24475),r=t(80550),a=t(94901),l=t(92796),i=t(33706),c=t(78227),s=t(87290),u=t(50516),d=t(96395),f=t(77388),p=r&&r.prototype,b=c("species"),m=!1,g=a(o.PromiseRejectionEvent),v=l("Promise",(function(){var e=i(r),n=e!==String(r);if(!n&&66===f)return!0;if(d&&(!p.catch||!p.finally))return!0;if(!f||f<51||!/native code/.test(e)){var t=new r((function(e){e(1)})),o=function(e){e((function(){}),(function(){}))};if((t.constructor={})[b]=o,!(m=t.then((function(){}))instanceof o))return!0}return!n&&(s||u)&&!g}));e.exports={CONSTRUCTOR:v,REJECTION_EVENT:g,SUBCLASSING:m}},90537:(e,n,t)=>{var o=t(80550),r=t(84428),a=t(10916).CONSTRUCTOR;e.exports=a||!r((function(e){o.all(e).then(void 0,(function(){}))}))},96167:(e,n,t)=>{var o=t(46518),r=t(69565),a=t(79306),l=t(36043),i=t(1103),c=t(72652);o({target:"Promise",stat:!0,forced:t(90537)},{allSettled:function(e){var n=this,t=l.f(n),o=t.resolve,s=t.reject,u=i((function(){var t=a(n.resolve),l=[],i=0,s=1;c(e,(function(e){var a=i++,c=!1;s++,r(t,n,e).then((function(e){c||(c=!0,l[a]={status:"fulfilled",value:e},--s||o(l))}),(function(e){c||(c=!0,l[a]={status:"rejected",reason:e},--s||o(l))}))})),--s||o(l)}));return u.error&&s(u.value),t.promise}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3104.3b70865e21a81a616af3.chunk.js b/src/web/gui/v2/3104.3b70865e21a81a616af3.chunk.js deleted file mode 100644 index ca5e9f24d..000000000 --- a/src/web/gui/v2/3104.3b70865e21a81a616af3.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="1df98f68-5fbc-4150-8079-c9894daf86c8",e._sentryDebugIdIdentifier="sentry-dbid-1df98f68-5fbc-4150-8079-c9894daf86c8")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3104],{3104:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Ke});var n=a(96540),o=a(11128),r=(a(14905),a(98992),a(8872),a(62953),a(47762));const l=(e,t)=>t?e[t]:e;var i=a(99739),s=a(67990),d=a(83199),c=a(12897),m=a.n(c),h=a(55042),u=a.n(h),p=new(m())({id:"notCapableNodes",use:"notCapableNodes-usage",viewBox:"0 0 231 230",content:''});u().add(p);const L=p,f=()=>n.createElement(d.Flex,{width:"100%",justifyContent:"center",alignItems:"center",gap:3},n.createElement("svg",{viewBox:L.viewBox,height:"222px"},n.createElement("use",{xlinkHref:"#".concat(L.id)})),n.createElement(d.TextBig,{strong:!0},"Your nodes are either offline or not configured for ML"));var g=a(4659);const y=()=>n.createElement(d.Flex,{height:10.5,width:{min:10.5},background:"warningText",justifyContent:"center",alignItems:"center",round:"50%",sx:{borderRadius:"50%"}},n.createElement(d.Icon,{color:"warningBackground",name:"informationPress"})),v=e=>{let{to:t,children:a}=e;return n.createElement(g.A,{Component:d.Text,href:t,target:"_blank",rel:"noopener noreferrer"},a)},E=()=>n.createElement(d.Flex,{column:!0,gap:1},n.createElement(d.Text,{strong:!0,color:"textDescription"},"Not Configured Nodes"),n.createElement(d.Text,{color:"textDescription"},"Learn how to configure your nodes"," ",n.createElement(v,{to:"https://learn.netdata.cloud/docs/cloud/insights/anomaly-advisor#enable-ml-on-netdata-agent"},"to support anomaly advisor"),".")),M=()=>n.createElement(d.Flex,{column:!0,gap:1},n.createElement(d.Text,{strong:!0,color:"textDescription"},"Not Capable Nodes"),n.createElement(d.Text,{color:"textDescription"},"All nodes need to be updated to a version higher than"," ",n.createElement(d.Text,{strong:!0,color:"textDescription"},"1.32"),". Learn how to"," ",n.createElement(v,{to:"https://learn.netdata.cloud/docs/agent/packaging/installer/update"},"update to the latest Netdata version"),".")),b=()=>n.createElement(d.Box,{round:!0,background:"elementBackground",padding:[4]},n.createElement(d.Flex,{gap:4,alignItems:"start"},n.createElement(y,null),n.createElement(d.Flex,{gap:4,column:!0},n.createElement(E,null),n.createElement(M,null)))),A=()=>n.createElement(d.Flex,{column:!0,width:"100%",height:"100%",justifyContent:"start",padding:[8,4]},n.createElement(d.Flex,{column:!0,gap:8},n.createElement(f,null),n.createElement(b,null)));var w=a(58168),x=a(3705),C=a(83084),k=a(69765),I=a(23931),Z=a(3914),D=a(16579),_=a(81416),H=a(27467),T=a(99292),z=a(79304),B=(a(9920),a(41393),a(3949),a(81454),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(45387)),N=a(61427),S=a(21290),F=a(93658);const V=e=>Math.floor(e/1e3),R=()=>{const[e,t]=(0,_.yD)(),{localeTimeString:a}=(0,S.$j)(),[o,r,l]=(0,n.useMemo)((()=>{const n=V(e),o=V(t);return[(0,F.getDateDiff)(n,o),a(e,{secs:!0}),a(t,{secs:!0})]}),[e,t]);return e&&t?n.createElement(d.Flex,{gap:1,alignItems:"baseline"},n.createElement(d.TextMicro,{strong:!0,color:"textLite"},n.createElement(d.TextSmall,{strong:!0,color:"textLite"},r," \u2192 ",l," \u2022")," ","Duration: ",o)):null};var G=a(8711);const O=(0,G.keyframes)(["from{transform:translate(412px,0);}"]),U=G.default.g.withConfig({displayName:"skeleton__Animated",componentId:"sc-gwkfye-0"})(["animation:",";"],(e=>{let{animate:t}=e;return t?(0,G.css)([""," 1s linear infinite"],O):""})),j=e=>{let{animate:t=!1}=e;return n.createElement("svg",{width:"1140",height:"80",viewBox:"0 0 1140 80",fill:"none",xmlns:"http://www.w3.org/2000/svg"},n.createElement("mask",{id:"mask0_467_73096",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"0",y:"0",width:"1140",height:"80"},n.createElement("rect",{width:"1140",height:"80",fill:"#C4C4C4"})),n.createElement("g",{mask:"url(#mask0_467_73096)"},n.createElement(U,{animate:t},n.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M-374 70L-401 78H-192.5H14H25.5H212L180 70L157 55L144 70L105 11L69.5 70H41L17.8524 76.8586L-8 73L-39 38L-62 71L-85.5 61.5L-100.5 73L-114.5 61.5L-146 41L-168 70L-192.5 78L-235 70L-258 55L-271 70L-310 11L-327.75 40.5L-345.5 70H-374Z",fill:"#8F9EAA"}),n.createElement("path",{d:"M-401 78L-401.142 77.5206L-401 78.5V78ZM-374 70V69.5H-374.073L-374.142 69.5206L-374 70ZM212 78V78.5L212.121 77.5149L212 78ZM180 70L179.727 70.4188L179.797 70.4647L179.879 70.4851L180 70ZM157 55L157.273 54.5812L156.908 54.3429L156.622 54.6725L157 55ZM144 70L143.583 70.2757L143.946 70.8254L144.378 70.3275L144 70ZM105 11L105.417 10.7243L104.98 10.0632L104.572 10.7422L105 11ZM69.5 70V70.5H69.7827L69.9284 70.2578L69.5 70ZM41 70V69.5H40.9275L40.8579 69.5206L41 70ZM17.8524 76.8586L17.7785 77.3531L17.8882 77.3694L17.9944 77.338L17.8524 76.8586ZM-8 73L-8.3743 73.3315L-8.25369 73.4677L-8.07382 73.4945L-8 73ZM-39 38L-38.6257 37.6685L-39.0469 37.1929L-39.4102 37.7141L-39 38ZM-62 71L-62.1874 71.4636L-61.8178 71.613L-61.5898 71.2859L-62 71ZM-85.5 61.5L-85.3126 61.0365L-85.5775 60.9294L-85.8042 61.1032L-85.5 61.5ZM-100.5 73L-100.817 73.3864L-100.511 73.6383L-100.196 73.3968L-100.5 73ZM-114.5 61.5L-114.183 61.1137L-114.204 61.0961L-114.227 61.0809L-114.5 61.5ZM-146 41L-145.727 40.5809L-146.117 40.3272L-146.398 40.6978L-146 41ZM-168 70L-167.845 70.4753L-167.696 70.4268L-167.602 70.3022L-168 70ZM-235 70L-235.273 70.4188L-235.19 70.473L-235.092 70.4914L-235 70ZM-258 55L-257.727 54.5812L-258.092 54.3429L-258.378 54.6725L-258 55ZM-271 70L-271.417 70.2757L-271.054 70.8254L-270.622 70.3275L-271 70ZM-310 11L-309.583 10.7243L-310.02 10.0632L-310.428 10.7422L-310 11ZM-345.5 70V70.5H-345.217L-345.072 70.2578L-345.5 70ZM-400.858 78.4794L-373.858 70.4794L-374.142 69.5206L-401.142 77.5206L-400.858 78.4794ZM-192.5 77.5H-401V78.5H-192.5V77.5ZM14 77.5H-192.5V78.5H14V77.5ZM14 78.5H25.5V77.5H14V78.5ZM25.5 78.5H212V77.5H25.5V78.5ZM212.121 77.5149L180.121 69.5149L179.879 70.4851L211.879 78.4851L212.121 77.5149ZM180.273 69.5812L157.273 54.5812L156.727 55.4188L179.727 70.4188L180.273 69.5812ZM156.622 54.6725L143.622 69.6725L144.378 70.3275L157.378 55.3275L156.622 54.6725ZM144.417 69.7243L105.417 10.7243L104.583 11.2757L143.583 70.2757L144.417 69.7243ZM104.572 10.7422L69.0716 69.7422L69.9284 70.2578L105.428 11.2578L104.572 10.7422ZM69.5 69.5H41V70.5H69.5V69.5ZM40.8579 69.5206L17.7103 76.3792L17.9944 77.338L41.1421 70.4794L40.8579 69.5206ZM-8.07382 73.4945L17.7785 77.3531L17.9262 76.364L-7.92618 72.5055L-8.07382 73.4945ZM-39.3743 38.3315L-8.3743 73.3315L-7.6257 72.6685L-38.6257 37.6685L-39.3743 38.3315ZM-61.5898 71.2859L-38.5898 38.2859L-39.4102 37.7141L-62.4102 70.7141L-61.5898 71.2859ZM-85.6874 61.9636L-62.1874 71.4636L-61.8126 70.5364L-85.3126 61.0365L-85.6874 61.9636ZM-100.196 73.3968L-85.1958 61.8968L-85.8042 61.1032L-100.804 72.6032L-100.196 73.3968ZM-114.817 61.8864L-100.817 73.3864L-100.183 72.6136L-114.183 61.1137L-114.817 61.8864ZM-146.273 41.4191L-114.773 61.9191L-114.227 61.0809L-145.727 40.5809L-146.273 41.4191ZM-167.602 70.3022L-145.602 41.3022L-146.398 40.6978L-168.398 69.6978L-167.602 70.3022ZM-192.345 78.4753L-167.845 70.4753L-168.155 69.5247L-192.655 77.5247L-192.345 78.4753ZM-235.092 70.4914L-192.592 78.4914L-192.408 77.5086L-234.908 69.5086L-235.092 70.4914ZM-258.273 55.4188L-235.273 70.4188L-234.727 69.5812L-257.727 54.5812L-258.273 55.4188ZM-270.622 70.3275L-257.622 55.3275L-258.378 54.6725L-271.378 69.6725L-270.622 70.3275ZM-310.417 11.2757L-271.417 70.2757L-270.583 69.7243L-309.583 10.7243L-310.417 11.2757ZM-327.322 40.7578L-309.572 11.2578L-310.428 10.7422L-328.178 40.2422L-327.322 40.7578ZM-345.072 70.2578L-327.322 40.7578L-328.178 40.2422L-345.928 69.7422L-345.072 70.2578ZM-374 70.5H-345.5V69.5H-374V70.5Z",fill:"#CFD5DA"})),n.createElement("mask",{id:"mask1_467_73096",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"52",y:"0",width:"1140",height:"80"},n.createElement("rect",{x:"52",width:"1140",height:"80",fill:"#C4C4C4"})),n.createElement("g",{mask:"url(#mask1_467_73096)"},n.createElement("rect",{x:"55.5",y:"-1.5",width:"1140",height:"80",fill:"#CFD5DA",fillOpacity:"0.25",stroke:"#8F9EAA",strokeDasharray:"2 5"}),n.createElement("rect",{x:"55",width:"86",height:"3",fill:"#CFD5DA"}))))};a(9391);var K=new(m())({id:"error-state",use:"error-state-usage",viewBox:"0 0 199 79",content:''});u().add(K);const Y=K;var P=a(50876),q=a(63314);const J=()=>n.createElement("svg",{viewBox:Y.viewBox,width:"197"},n.createElement("use",{xlinkHref:"#".concat(Y.id)})),W=(0,G.default)(d.Button).withConfig({displayName:"errorView__RetryButton",componentId:"sc-1n9qb8k-0"})(["white-space:normal !important;align-items:flex-start !important;width:230px !important;font-size:12px !important;font-weight:normal !important;& > *{align-items:start !important;margin:0 !important;padding:0 !important;}"]),X=e=>{let{onRetry:t}=e;const{sendLog:a,isReady:o}=(0,P.A)(),r=(0,n.useCallback)((()=>{a({feature:"AnomalyAdvisor",description:"Retry"}).finally((()=>{"function"==typeof t&&t()}))}),[o]);return n.createElement(q.DL,{feature:"AnomalyAdvisor"},n.createElement(d.Flex,{column:!0,alignItems:"center",width:"100%"},n.createElement(J,null),n.createElement(d.TextSmall,{margin:[1,0,0],color:"textDescription"},"Something went wrong."),n.createElement(W,{margin:[2,0,0],padding:[0],onClick:r,icon:"reload",flavour:"borderless",label:"Retry fetching anomalies for the same timeframe",height:"initial",width:"initial"})))},$=e=>{let{error:t,loading:a,hasData:o}=e;return t?n.createElement(d.TextSmall,null,"No data"===t?"No data for this period. Try highlighting an other area.":t.errorMessage||"Something went wrong"):a?n.createElement(d.TextSmall,null,"Searching for anomalies..."):o?n.createElement(d.TextSmall,{color:"textDescription"},"Anomalous metrics in the selected timeframe sorted from most anomalous to least."):n.createElement(d.TextSmall,null,"You haven't highlighted any timeframe yet.")},Q=(0,n.forwardRef)(((e,t)=>{let{error:a,loading:o,hasData:r,onRetry:l,totalDimensionsCount:i,...s}=e;return n.createElement(d.Flex,(0,w.A)({ref:t,column:!0,gap:2,padding:[4],background:"sideBar"},s),n.createElement(d.Flex,{gap:1,alignItems:"baseline"},n.createElement(d.H4,null,i?"".concat(i," "):"","Anomalous metrics"),n.createElement(R,null)),n.createElement($,{hasData:r,loading:o,error:a}),a?n.createElement(X,{onRetry:l}):n.createElement(j,{animate:o}))})),ee=(0,n.forwardRef)(((e,t)=>{const a=(0,o.w7)({extraKey:"anomalies",merge:!1,scoped:!0}),{loaded:r,loading:l,error:i,totalDimensionsCount:s}=(0,N.G9)({nodeIds:a,flavour:"anomaly"}),{sendLog:d,isReady:c}=(0,P.A)(),m=(0,n.useRef)();return(0,n.useEffect)((()=>{null!==m&&void 0!==m&&m.current||!c||!r||(d({feature:"AnomalyAdvisor",...!i&&r?{isSuccess:!0}:{},...i?{isFailue:!0}:{},...r?{totalDimensionsCount:s}:{}}),m.current=!0)}),[l,r,i,d,c]),n.createElement(Q,(0,w.A)({ref:t,loading:l,error:i,hasData:r,totalDimensionsCount:s},e))})),te={"anomaly_detection.anomaly_rate":{name:"Anomaly Rate",info:"This is the percentage of metrics that are anomalous."},"anomaly_detection.dimensions":{name:"Count of Anomalous Metrics",info:"Variance in the amount of anomalous metrics over time could indicate unexpected behavior that merits investigation."},"anomaly_detection.detector_events":{name:"Anomaly Events Detected ",info:"An anomaly event is a period of time when a node has persistently elevated anomaly rates across all metrics. This may indicate unexpected behavior that merits investigation."}},ae={"Anomaly advisor":{showAR:!1,name:"Anomaly advisor",info:n.createElement(d.Flex,{column:!0,gap:2},n.createElement(d.TextSmall,{color:"sectionDescription"},"Machine Learning powered automated anomaly detection running at the edge."),n.createElement(d.TextSmall,{color:"sectionDescription"},"Use this page as a starting point to explore potential anomalies. Learn more on"," ",n.createElement(g.A,{Component:d.TextSmall,href:"https://learn.netdata.cloud/docs/cloud/insights/anomaly-advisor",target:"_blank",rel:"noopener noreferrer"},"how to")," ","use Anomaly Advisor."),n.createElement(d.Flex,{gap:1,alignItems:"center"},n.createElement(d.Icon,{name:"highlightArea",color:"sectionDescription",size:"small"}),n.createElement(d.TextSmall,{color:"sectionDescription"},"Highlight a time-frame of interest to explore potential anomalies.")))},"Anomalous metrics":{info:n.createElement(ee,null)}},ne=Object.keys(te),oe=function(e,t){let{os:a,extraKey:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o={};const{menuGroups:r,subMenus:l,menuGroupChartIds:i}=((e,t)=>{const a={},n={},o={};return ne.forEach(((e,a)=>{t[e]={chartId:e,id:"Anomaly advisor",subMenuId:e,priority:-(a+1)}})),e.forEach(((e,a)=>{t[e]={chartId:e,id:"Anomalous metrics",subMenuId:e,priority:a+1}})),[...ne,...e].forEach((e=>{const r=t[e],l="".concat(r.id,"|").concat(r.subMenuId);n[l]||(n[l]=[]),a[r.id]||(a[r.id]=new Set),o[r.id]||(o[r.id]=[]),r.chartId&&(n[l].push(r.chartId),o[r.id].push(r.chartId)),l&&a[r.id].add(l)})),{chartMenus:t,menuGroups:a,subMenus:n,menuGroupChartIds:o}})(e,o),s={},d=Object.keys(r).reduce(((e,t)=>{const a=i[t],l=[...r[t]],s=o[a[0]];return e[t]={...s,...ae[t],level:0,id:t,subMenuIds:l,subMenuChartIds:a,link:"".concat((0,z.A)("menu_".concat(t))),size:24,forceVisibility:!0,arFlavour:"anomaly",extraKey:n},e}),{}),c=Object.keys(l).reduce(((e,t)=>{const a=l[t];if(!a.length)return e;const r=o[a[0]],{id:i}=d[r.id],[s,c]=r.chartId.split("::"),m=te[r.chartId];return e[t]={...r,name:c?"".concat(s," > ").concat(c):s,...m,level:1,id:t,menuGroupId:i,chartIds:a,link:"".concat((0,z.A)("menu_".concat(r.id,"_submenu_").concat(r.subMenuId))),size:24,forceVisibility:!0,arFlavour:"anomaly",showAR:!m,extraKey:n},e}),{}),m=Object.keys(r),h={},u=m.reduce(((e,t)=>{const n=d[t];return h[n.id]=!0,[...e,{...n,sticky:!0},...d[t].subMenuIds.reduce(((e,n)=>[...e,{...c[n],sticky:!0},...c[n].chartIds.map((e=>{const r=o[e];if(r)return s[e]=(0,B.Ay)({...r,id:e,context:e},{menuId:t,subMenuId:n,sectionInfo:c[n].info},{os:a}),{...s[e],level:2,size:365,menuKey:d[t].id,forceVisibility:!0}}))]),[])]}),[]);return o=null,{stickyIds:h,allElements:u,menuGroupIds:m,menuGroupById:d,subMenuById:c,menuItemAttributesById:s}};var re=a(79566),le=a(72253),ie=a(56489),se=a(67602),de=a(44741),ce=a(10952),me=a(12412);const he=e=>{let{id:t,...a}=e;return n.createElement(de.k,(0,w.A)({id:t},a),n.createElement(ce._,{id:t}),n.createElement(me.G,{id:t}))},ue=(0,n.memo)(he);var pe=a(31438),Le=a(80925),fe=a(36196),ge=(a(3064),a(72577),a(28973)),ye=a(13752),ve=a(92815),Ee=a(72582),Me=a(540),be=new(m())({id:"dashboard_add_chart",use:"dashboard_add_chart-usage",viewBox:"0 0 24 24",content:''});u().add(be);const Ae=be;var we=a(6504),xe=a(22332),Ce=a(46741);const ke=e=>{const{handleOpenModal:t}=(0,Me.A)("addToDashboardModal"),a=(0,xe.useChart)(),o=()=>{const e=a.getAttribute("id");t("",{chartId:e})},r=(0,Ce.JT)("dashboard:Update");return(0,n.useLayoutEffect)((()=>a.onKeyChange(["Alt","Shift","KeyD"],r?o:()=>{})),[r]),n.createElement(we.Button,(0,w.A)({icon:n.createElement(we.default,{svg:Ae,size:"16px"}),onClick:r?o:()=>{},title:r?"Add to dashboard":"You need to be logged in to create your custom dashboards and use this chart in them","data-testid":"chartHeaderToolbox-addDashboard",disabled:!r},e))},Ie=(0,n.memo)(ke);var Ze=a(83465);const De=(e,t)=>e&&e.getRoot().getChildren().find((e=>e.match({id:"anomalies-".concat(t)}))),_e=e=>t=>"overview-page::".concat(e.getAttribute("id"),"::").concat(t),He=e=>{let{id:t,...a}=e;const o=(0,k.ID)(),{height:r=0,...l}=(0,pe.aA)(t),i=(0,Le.e)(),{sendLog:s,isReady:d}=(0,P.A)(),c=(0,n.useMemo)((()=>{const e=De(i,o),a=Object.keys(te);let n=e.getNode({id:t});if(n)return n;const[s,d]=t.split("::");return n=i.makeChart({attributes:{contextScope:[s],height:(0,Ze.Oq)(e,t,r+260),id:t,roomId:o,selectedDimensions:d?[d]:[],groupBy:a.includes(t)?["node"]:["dimension"],...l},makeTrack:_e}),e.appendChild(n),n}),[i,o,t]);return(0,n.useEffect)((()=>{c&&d&&"function"===typeof s&&c.updateAttribute("logOptions",{sendLog:s,payload:{feature:"AnomalyAdvisor"}})}),[c,s,d]),n.createElement(fe.A,(0,w.A)({margin:[0,0,2],chart:c,"data-chartid":t,"data-track":c.track("container"),height:"300px",width:"100%"},a))},Te=n.memo(He,((e,t)=>e.id===t.id)),ze=e=>{let{id:t,subMenuId:a,...o}=e;return n.createElement(Te,(0,w.A)({id:t,role:"graphics-object","aria-roledescription":"chart","data-submenuid":a},o))},Be=(0,n.memo)(ze);var Ne=a(74258),Se=a(37031),Fe=a(6551);const Ve=e=>{let{id:t}=e;return n.createElement(Ne.t,{gap:0,id:t},n.createElement(Se.t,{id:t,margin:[1,0,0]}),n.createElement(Fe.X,{id:t}))},Re=(0,n.memo)(Ve),Ge=e=>{switch(e.level){case 0:return ue;case 1:return Re;case 2:return Be;default:return null}},Oe=e=>{let{onChartNameChange:t,initialChartName:a,dashboardOptions:o,linkToGo:r,contextToGo:l,...i}=e;const[s,,,d]=(0,se.A)("addToDashboardModal"),{setActiveMenuGroupId:c,setActiveSubMenuId:m}=(0,re.A)({onChartNameChange:t,initialChartName:a,linkToGo:r,contextToGo:l});return n.createElement(D.H,i,n.createElement(le.A,{onActiveMenuGroupId:c,onActiveSubMenuId:m,getComponent:Ge,dashboardOptions:o,initialChartName:a,checkVisibility:()=>!0}),s&&n.createElement(ie.A,{onClose:d}))},Ue=["alerts","info","config"],je=e=>{let{nodeIds:t}=e;const a=(0,Z.vt)(),o=(0,k.ID)(),[r,l,i,,s,d]=(0,_.Ay)(a,o,t),c=!l.length||!!s,m=(0,I.yO)(o,i),[h,{width:u}]=(0,x.A)(),[p,{height:L}]=(0,x.A)(),f=(0,n.useMemo)((()=>Math.ceil((L+32)/4)),[L]);((e,t,a)=>{let{width:o,host:r}=a;if(!r)throw"No host provided";const l=(0,Le.e)();(0,n.useMemo)((()=>{if(!l||!e)return;let a=De(l,e);return a?void 0:(a=l.makeContainer({attributes:{id:"anomalies-".concat(e),roomId:e,host:r,overlays:{proceeded:{type:"proceeded"}},nodesScope:t,containerWidth:o,toolboxElements:[Ee.default,ye.default,ve.default,Ie]}}),l.appendChild(a),(0,ge.unregister)((0,Ze.ml)(l,a)))}),[l,r,e,t]),(0,n.useEffect)((()=>{if(!l||!e)return;let a=De(l,e);a&&a.getNodes().forEach((e=>{e.updateAttribute("nodesScope",t),e.getAttribute("active")&&"chart"===e.type&&e.trigger("fetch")}))}),[l,e,t]),(0,n.useEffect)((()=>()=>{if(!l||!e)return;let t=De(l,e);t&&t.destroy()}),[e])})(o,t,{host:(0,Z.dg)()?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(a,"/rooms/").concat(o),width:u});const[g,y]=(0,H.N9)("chartName",{key:o,extraKey:"anomalies",flavour:"val"}),[v,E]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{E(!!l.length)}),[l.length]),n.createElement(D.A,{getObject:m,ids:r,getMenu:oe,extraKey:"anomalies"},n.createElement(C.A,{ref:h,position:"relative",sidebar:n.createElement(T.Ay,{nodeIds:t,title:"Anomalies",initialChartName:g,hiddenTabs:Ue,flavour:"anomalies",loaded:!0,hasSearch:!1})},n.createElement(Oe,(0,w.A)({initialChartName:g,onChartNameChange:y,linkToGo:v&&(0,z.A)("menu_Anomalous metrics")},c&&{padding:[0,0,f,4]})),c&&n.createElement(ee,{ref:p,position:"absolute",bottom:0,right:0,left:0,zIndex:35,onRetry:d})))},Ke=()=>{const e=(0,o.w7)({extraKey:"anomalies",merge:!1,scoped:!0}),t=(0,s.CK)(),a=(0,s.nj)(),{predicting:d}=(e=>{const t=(0,r.BU)(),a=(0,r.Gt)(t);return(0,n.useMemo)((()=>a.reduce(((t,a)=>{const{capabilities:{ml:n}}=a;return null!==n&&void 0!==n&&n.enabled?t.predicting=[...t.predicting,l(a,e)]:t.incapable=[...t.incapable,l(a,e)],t}),{predicting:[],incapable:[]})),[t.length,e])})("id");if(a&&!t.length)return n.createElement(q.Ay,{feature:"Anomalies",mode:"NoNodesView"},n.createElement(i.A,null));const c=d.length>0;return a&&!c?n.createElement(q.Ay,{feature:"Anomalies",mode:"NoConfiguredNodesView"},n.createElement(A,null)):n.createElement(q.Ay,{feature:"Anomalies"},n.createElement(je,{nodeIds:e}))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3350.ae7151980981854dc3d1.chunk.js b/src/web/gui/v2/3350.ae7151980981854dc3d1.chunk.js deleted file mode 100644 index 499e4b03c..000000000 --- a/src/web/gui/v2/3350.ae7151980981854dc3d1.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="cba6d6ae-245a-4321-928f-6028dbaba19b",e._sentryDebugIdIdentifier="sentry-dbid-cba6d6ae-245a-4321-928f-6028dbaba19b")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3350],{92155:(e,t,a)=>{a.d(t,{A:()=>d});var n=a(58168),l=a(96540),r=a(50876);const o=e=>(0,l.forwardRef)(((t,a)=>{let{callback:o,feature:c,isStart:d,isSuccess:u,isFailure:i,eventReason:s,payload:f={},...b}=t;const{sendLog:g,isReady:m}=(0,r.A)(),y=(0,l.useCallback)((()=>{const e=b[o],t={feature:c,isStart:d,isSuccess:u,isFailure:i,eventReason:s,...f,...b["data-ga"]?{dataGa:b["data-ga"]}:{},...b.dataGa?{dataGa:b.dataGa}:{},...b["data-track"]?{dataTrack:b["data-track"]}:{},...b.label?{label:b.label}:{}};"function"==typeof e&&e(),g(t,!0)}),[o,g,m,f,b]),p=(0,l.useMemo)((()=>({...b,[o]:y})),[b,o,y]);return l.createElement(e,(0,n.A)({ref:a},p))}));var c=a(67276);const d=e=>(0,l.forwardRef)(((t,a)=>{let{payload:r={},...d}=t;const u=o(e);return l.createElement(u,(0,n.A)({},d,{ref:a,callback:"onClick",payload:{...r,action:c.o1.buttonClicked}}))}))},73350:(e,t,a)=>{a.r(t),a.d(t,{Trust:()=>f,default:()=>b});a(9391),a(25440),a(3064),a(98992),a(72577),a(62953);var n=a(96540),l=a(86663),r=a(83199),o=a(11604),c=a(28738),d=a(92155),u=a(50876),i=a(63314);const s=(0,d.A)(r.Button),f=()=>{const[e,t]=(0,n.useMemo)((()=>{const{search:e}=window.location,{redirect_uri:t,agent_uri:a}=l.parse(e);return[t,a]})),[a,d]=(0,n.useState)(),[f,b,g]=(0,o.LC)(),[m,y]=(0,o.Yr)({},[f]),{sendLog:p,isReady:w}=(0,u.A)();return(0,n.useEffect)((()=>{let a=!0,n=null;const l=m.find((e=>e.url===t));return l?p({feature:"TrustUrl",description:"Redirect due to trusted url"}).finally((()=>{location.replace("/api/v1/auth/account/origins/".concat(l.id,"/redirect?redirect_uri=").concat(encodeURIComponent(e),"&agent_uri=").concat(encodeURIComponent(t)))})):n=setTimeout((()=>{a&&d(!0)}),1e3),()=>{a=!1,n&&(clearTimeout(n),n=null)}}),[e,t,m,w]),a?n.createElement(i.Ay,{feature:"TrustUrl"},n.createElement(r.Layer,{full:!0},n.createElement(r.Flex,{"data-testid":"trust",alignItems:"center",justifyContent:"center",column:!0,width:"100%",height:"100%",background:"mainBackground",gap:4},n.createElement(c.m,{animate:g}),n.createElement(r.Text,{textAlign:"center"},"Do you trust ",n.createElement(r.Text,{strong:!0},t),"?"),n.createElement(r.Flex,{column:!0,gap:2,alignItems:"center"},n.createElement(r.TextBig,null,"Authorizing this URL will allow it to request your Netdata data."),n.createElement(r.Flex,{gap:2},n.createElement(s,{flavour:"borderless",onClick:()=>window.location.replace(decodeURIComponent(e)),disabled:y||g,"data-ga":"url-authorization::click-cancel-button",feature:"TrustUrl",payload:{label:"Cancel"}},"Cancel"),n.createElement(s,{onClick:()=>b(t),disabled:y||g,isLoading:y||g,"data-ga":"url-authorization::click-yes-button",feature:"TrustUrl",payload:{label:"Yes"}},"Yes")))))):n.createElement(c.A,null)},b=f}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3455.f9ca876de57244386773.chunk.js b/src/web/gui/v2/3455.f9ca876de57244386773.chunk.js deleted file mode 100644 index 63ff93101..000000000 --- a/src/web/gui/v2/3455.f9ca876de57244386773.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 3455.f9ca876de57244386773.chunk.js.LICENSE.txt */ -!function(){try{var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="d0f4bcf8-a615-49cc-81ac-0d7754d8311f",t._sentryDebugIdIdentifier="sentry-dbid-d0f4bcf8-a615-49cc-81ac-0d7754d8311f")}catch(t){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3455],{18595:(t,e)=>{"use strict";var i="windows",s=[],n="f17a",o="M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z";e.mw={prefix:"fab",iconName:i,icon:[448,512,s,n,o]},e.tQ=e.mw},62672:(t,e)=>{"use strict";var i=[128683,"cancel"],s="f05e",n="M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z";e.mw={prefix:"fas",iconName:"ban",icon:[512,512,i,s,n]},e.Df=e.mw},485:(t,e)=>{"use strict";var i="battery-half",s=["battery-3"],n="f242",o="M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm208 96H96V320H288V192z";e.mw={prefix:"fas",iconName:i,icon:[576,512,s,n,o]},e.W6=e.mw},78536:(t,e)=>{"use strict";var i="bell",s=[128276,61602],n="f0f3",o="M224 0c-17.7 0-32 14.3-32 32V51.2C119 66 64 130.6 64 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416H416c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z";e.mw={prefix:"fas",iconName:i,icon:[448,512,s,n,o]},e.z$=e.mw},84994:(t,e)=>{"use strict";var i="bolt",s=[9889,"zap"],n="f0e7",o="M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288H175.5L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7H272.5L349.4 44.6z";e.mw={prefix:"fas",iconName:i,icon:[448,512,s,n,o]},e.zm=e.mw},7521:(t,e)=>{"use strict";var i="bookmark",s=[128278,61591],n="f02e",o="M0 48V487.7C0 501.1 10.9 512 24.3 512c5 0 9.9-1.5 14-4.4L192 400 345.7 507.6c4.1 2.9 9 4.4 14 4.4c13.4 0 24.3-10.9 24.3-24.3V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48z";e.mw={prefix:"fas",iconName:i,icon:[384,512,s,n,o]},e.G0=e.mw},13765:(t,e)=>{"use strict";var i="brain",s=[129504],n="f5dc",o="M184 0c30.9 0 56 25.1 56 56V456c0 30.9-25.1 56-56 56c-28.9 0-52.7-21.9-55.7-50.1c-5.2 1.4-10.7 2.1-16.3 2.1c-35.3 0-64-28.7-64-64c0-7.4 1.3-14.6 3.6-21.2C21.4 367.4 0 338.2 0 304c0-31.9 18.7-59.5 45.8-72.3C37.1 220.8 32 207 32 192c0-30.7 21.6-56.3 50.4-62.6C80.8 123.9 80 118 80 112c0-29.9 20.6-55.1 48.3-62.1C131.3 21.9 155.1 0 184 0zM328 0c28.9 0 52.6 21.9 55.7 49.9c27.8 7 48.3 32.1 48.3 62.1c0 6-.8 11.9-2.4 17.4c28.8 6.2 50.4 31.9 50.4 62.6c0 15-5.1 28.8-13.8 39.7C493.3 244.5 512 272.1 512 304c0 34.2-21.4 63.4-51.6 74.8c2.3 6.6 3.6 13.8 3.6 21.2c0 35.3-28.7 64-64 64c-5.6 0-11.1-.7-16.3-2.1c-3 28.2-26.8 50.1-55.7 50.1c-30.9 0-56-25.1-56-56V56c0-30.9 25.1-56 56-56z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.GQ=e.mw},66600:(t,e)=>{"use strict";var i="chart-bar",s=["bar-chart"],n="f080",o="M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32s14.3-32 32-32z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.$F=e.mw},54399:(t,e)=>{"use strict";var i="chart-line",s=["line-chart"],n="f201",o="M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.gK=e.mw},46943:(t,e)=>{"use strict";var i="circle-notch",s=[],n="f1ce",o="M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.s4=e.mw},1871:(t,e)=>{"use strict";var i="clock",s=[128339,"clock-four"],n="f017",o="M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.a$=e.mw},75904:(t,e)=>{"use strict";var i="cloud",s=[9729],n="f0c2",o="M0 336c0 79.5 64.5 144 144 144H512c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z";e.mw={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.jB=e.mw},76229:(t,e,i)=>{"use strict";var s=i(8185);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.Ub=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},93847:(t,e)=>{"use strict";var i="comments",s=[128490,61670],n="f086",o="M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2 0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.3-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9l0 0 0 0-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z";e.mw={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.q9=e.mw},37048:(t,e)=>{"use strict";var i="database",s=[],n="f1c0",o="M448 80v48c0 44.2-100.3 80-224 80S0 172.2 0 128V80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6V288c0 44.2-100.3 80-224 80S0 332.2 0 288V186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6V432c0 44.2-100.3 80-224 80S0 476.2 0 432V346.1z";e.mw={prefix:"fas",iconName:i,icon:[448,512,s,n,o]},e.he=e.mw},64850:(t,e)=>{"use strict";var i="dragon",s=[128009],n="f6d5",o="M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4L294.4 28.8c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0H416h32 16c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8c0 26.5-21.5 48-48 48H538.5c-17 0-33.3-6.7-45.3-18.7L480 160H448v21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1C640 462.9 590.9 512 530.2 512H496 432 32.3c-3.3 0-6.6-.4-9.6-1.4C13.5 507.8 6 501 2.4 492.1C1 488.7 .2 485.2 0 481.4c-.2-3.7 .3-7.3 1.3-10.7c2.8-9.2 9.6-16.7 18.6-20.4c3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1c0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1V181.5v-57zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3v.6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9c0 13.3 10.7 24 24 24c10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87V227c0 32.8 8.4 64.8 24 93H112c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9s-1.5-14.1 3.8-18.8L130.9 116.5z";e.mw={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.dX=e.mw},55345:(t,e)=>{"use strict";var i="envelope",s=[128386,9993,61443],n="f0e0",o="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.y_=e.mw},49205:(t,e,i)=>{"use strict";var s=i(46534);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e._q=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},35532:(t,e)=>{"use strict";var i="exclamation",s=[10069,10071,61738],n="M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V320c0 17.7 14.3 32 32 32s32-14.3 32-32V64zM32 480a40 40 0 1 0 0-80 40 40 0 1 0 0 80z";e.mw={prefix:"fas",iconName:i,icon:[64,512,s,"21",n]},e.bx=e.mw},900:(t,e)=>{"use strict";var i=[128065],s="f06e",n="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z";e.mw={prefix:"fas",iconName:"eye",icon:[576,512,i,s,n]},e.pS=e.mw},93360:(t,e,i)=>{"use strict";var s=i(96488);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.h8=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},96488:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="file-lines",s=[128441,128462,61686,"file-alt","file-text"],n="f15c",o="M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM112 256H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z";e.definition={prefix:"fas",iconName:i,icon:[384,512,s,n,o]},e.faFileLines=e.definition,e.prefix="fas",e.iconName=i,e.width=384,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},22294:(t,e)=>{"use strict";var i="flask",s=[],n="f0c3",o="M288 0H160 128C110.3 0 96 14.3 96 32s14.3 32 32 32V196.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512H378.6c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288zM192 196.8V64h64V196.8c0 23.7 6.6 46.9 19 67.1L309.5 320h-171L173 263.9c12.4-20.2 19-43.4 19-67.1z";e.mw={prefix:"fas",iconName:i,icon:[448,512,s,n,o]},e.rI=e.mw},22017:(t,e)=>{"use strict";var i="folder-open",s=[128194,128449,61717],n="f07c",o="M88.7 223.8L0 375.8V96C0 60.7 28.7 32 64 32H181.5c17 0 33.3 6.7 45.3 18.7l26.5 26.5c12 12 28.3 18.7 45.3 18.7H416c35.3 0 64 28.7 64 64v32H144c-22.8 0-43.8 12.1-55.3 31.8zm27.6 16.1C122.1 230 132.6 224 144 224H544c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-112 192C453.9 474 443.4 480 432 480H32c-11.5 0-22-6.1-27.7-16.1s-5.7-22.2 .1-32.1l112-192z";e.mw={prefix:"fas",iconName:i,icon:[576,512,s,n,o]},e.Uj=e.mw},44822:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="gauge-high",s=[62461,"tachometer-alt","tachometer-alt-fast"],n="f625",o="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faGaugeHigh=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},8185:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="gears",s=["cogs"],n="f085",o="M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8h-.7c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z";e.definition={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.faGears=e.definition,e.prefix="fas",e.iconName=i,e.width=640,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},27064:(t,e)=>{"use strict";var i="globe",s=[127760],n="f0ac",o="M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.Bw=e.mw},98726:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="hard-drive",s=[128436,"hdd"],n="f0a0",o="M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V280.4c-17-15.2-39.4-24.4-64-24.4H64c-24.6 0-47 9.2-64 24.4V96zM64 288H448c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V352c0-35.3 28.7-64 64-64zM320 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faHardDrive=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},78613:(t,e,i)=>{"use strict";var s=i(98726);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.MB=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},41776:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="heart-pulse",s=["heartbeat"],n="f21e",o="M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4h87c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31H476.3c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240h-132c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9H16c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9v-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1v5.8c0 16.9-2.8 33.5-8.3 49.1z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faHeartPulse=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},55573:(t,e,i)=>{"use strict";var s=i(41776);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e._g=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},13808:(t,e)=>{"use strict";var i="laptop-code",s=[],n="f5fc",o="M64 96c0-35.3 28.7-64 64-64H512c35.3 0 64 28.7 64 64V352H512V96H128V352H64V96zM0 403.2C0 392.6 8.6 384 19.2 384H620.8c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8H76.8C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z";e.mw={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.fP=e.mw},12333:(t,e)=>{"use strict";var i="leaf",s=[],n="f06c",o="M272 96c-78.6 0-145.1 51.5-167.7 122.5c33.6-17 71.5-26.5 111.7-26.5h88c8.8 0 16 7.2 16 16s-7.2 16-16 16H288 216s0 0 0 0c-16.6 0-32.7 1.9-48.3 5.4c-25.9 5.9-49.9 16.4-71.4 30.7c0 0 0 0 0 0C38.3 298.8 0 364.9 0 440v16c0 13.3 10.7 24 24 24s24-10.7 24-24V440c0-48.7 20.7-92.5 53.8-123.2C121.6 392.3 190.3 448 272 448l1 0c132.1-.7 239-130.9 239-291.4c0-42.6-7.5-83.1-21.1-119.6c-2.6-6.9-12.7-6.6-16.2-.1C455.9 72.1 418.7 96 376 96L272 96z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.YH=e.mw},90501:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="list-check",s=["tasks"],n="f0ae",o="M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faListCheck=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},36697:(t,e)=>{"use strict";var i="mask",s=[],n="f6fa",o="M288 64C64 64 0 160 0 272S80 448 176 448h8.4c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4H400c96 0 176-64 176-176s-64-208-288-208zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z";e.mw={prefix:"fas",iconName:i,icon:[576,512,s,n,o]},e.KI=e.mw},82367:(t,e)=>{"use strict";var i="microchip",s=[],n="f2db",o="M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64c-35.3 0-64 28.7-64 64H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64c0 35.3 28.7 64 64 64v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448c35.3 0 64-28.7 64-64h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448V280h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448V176h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448c0-35.3-28.7-64-64-64V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H280V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H176V24zM160 128H352c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32zm192 32H160V352H352V160z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.YS=e.mw},86443:(t,e)=>{"use strict";var i="puzzle-piece",s=[129513],n="f12e",o="M192 104.8c0-9.2-5.8-17.3-13.2-22.8C167.2 73.3 160 61.3 160 48c0-26.5 28.7-48 64-48s64 21.5 64 48c0 13.3-7.2 25.3-18.8 34c-7.4 5.5-13.2 13.6-13.2 22.8c0 12.8 10.4 23.2 23.2 23.2H336c26.5 0 48 21.5 48 48v56.8c0 12.8 10.4 23.2 23.2 23.2c9.2 0 17.3-5.8 22.8-13.2c8.7-11.6 20.7-18.8 34-18.8c26.5 0 48 28.7 48 64s-21.5 64-48 64c-13.3 0-25.3-7.2-34-18.8c-5.5-7.4-13.6-13.2-22.8-13.2c-12.8 0-23.2 10.4-23.2 23.2V464c0 26.5-21.5 48-48 48H279.2c-12.8 0-23.2-10.4-23.2-23.2c0-9.2 5.8-17.3 13.2-22.8c11.6-8.7 18.8-20.7 18.8-34c0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34c7.4 5.5 13.2 13.6 13.2 22.8c0 12.8-10.4 23.2-23.2 23.2H48c-26.5 0-48-21.5-48-48V343.2C0 330.4 10.4 320 23.2 320c9.2 0 17.3 5.8 22.8 13.2C54.7 344.8 66.7 352 80 352c26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8C40.5 250.2 32.4 256 23.2 256C10.4 256 0 245.6 0 232.8V176c0-26.5 21.5-48 48-48H168.8c12.8 0 23.2-10.4 23.2-23.2z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e._X=e.mw},80058:(t,e,i)=>{"use strict";var s=i(61260);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.fK=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},46534:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="right-left",s=["exchange-alt"],n="f362",o="M32 96l320 0V32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160L32 160c-17.7 0-32-14.3-32-32s14.3-32 32-32zM480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32H160v64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96c-6-6-9.4-14.1-9.4-22.6s3.4-16.6 9.4-22.6l96-96c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 64H480z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faRightLeft=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},35074:(t,e)=>{"use strict";var i="server",s=[],n="f233",o="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.D6=e.mw},66248:(t,e)=>{"use strict";var i="shield",s=[128737,"shield-blank"],n="f132",o="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z";e.mw={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.V2=e.mw},83697:(t,e,i)=>{"use strict";var s=i(7876);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.im=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},7876:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="shield-halved",s=["shield-alt"],n="f3ed",o="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faShieldHalved=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},61260:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="shuffle",s=[128256,"random"],n="f074",o="M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160H352c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96h32V64c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V416H352c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8h32V320c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faShuffle=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},45386:(t,e)=>{"use strict";var i="sitemap",s=[],n="f0e8",o="M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48h-8v40H464c30.9 0 56 25.1 56 56v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-4.4-3.6-8-8-8H312v40h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V280H112c-4.4 0-8 3.6-8 8v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-30.9 25.1-56 56-56H264V192h-8c-26.5 0-48-21.5-48-48V80z";e.mw={prefix:"fas",iconName:i,icon:[576,512,s,n,o]},e.FF=e.mw},85713:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="table-cells-large",s=["th-large"],n="f009",o="M448 96V224H288V96H448zm0 192V416H288V288H448zM224 224H64V96H224V224zM64 288H224V416H64V288zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z";e.definition={prefix:"fas",iconName:i,icon:[512,512,s,n,o]},e.faTableCellsLarge=e.definition,e.prefix="fas",e.iconName=i,e.width=512,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},54416:(t,e,i)=>{"use strict";var s=i(44822);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.xi=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},1705:(t,e)=>{"use strict";var i=[127991],s="f02b",n="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z";e.mw={prefix:"fas",iconName:"tag",icon:[448,512,i,s,n]},e._2=e.mw},38055:(t,e,i)=>{"use strict";var s=i(90501);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.Ag=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},72950:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="temperature-half",s=[127777,"temperature-2","thermometer-2","thermometer-half"],n="f2c9",o="M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V208c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z";e.definition={prefix:"fas",iconName:i,icon:[320,512,s,n,o]},e.faTemperatureHalf=e.definition,e.prefix="fas",e.iconName=i,e.width=320,e.height=512,e.ligatures=s,e.unicode=n,e.svgPathData=o,e.aliases=s},59582:(t,e,i)=>{"use strict";var s=i(85713);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.l9=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},25436:(t,e,i)=>{"use strict";var s=i(72950);e.mw={prefix:s.prefix,iconName:s.iconName,icon:[s.width,s.height,s.aliases,s.unicode,s.svgPathData]},e.Ro=e.mw,s.prefix,s.iconName,s.width,s.height,s.aliases,s.unicode,s.svgPathData,s.aliases},42469:(t,e)=>{"use strict";var i="user",s=[128100,62144],n="f007",o="M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z";e.mw={prefix:"fas",iconName:i,icon:[448,512,s,n,o]},e.X4=e.mw},39281:(t,e)=>{"use strict";var i="users",s=[],n="f0c0",o="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z";e.mw={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.gd=e.mw},54264:(t,e)=>{"use strict";var i="wifi",s=["wifi-3","wifi-strong"],n="f1eb",o="M54.2 202.9C123.2 136.7 216.8 96 320 96s196.8 40.7 265.8 106.9c12.8 12.2 33 11.8 45.2-.9s11.8-33-.9-45.2C549.7 79.5 440.4 32 320 32S90.3 79.5 9.8 156.7C-2.9 169-3.3 189.2 8.9 202s32.5 13.2 45.2 .9zM320 256c56.8 0 108.6 21.1 148.2 56c13.3 11.7 33.5 10.4 45.2-2.8s10.4-33.5-2.8-45.2C459.8 219.2 393 192 320 192s-139.8 27.2-190.5 72c-13.3 11.7-14.5 31.9-2.8 45.2s31.9 14.5 45.2 2.8c39.5-34.9 91.3-56 148.2-56zm64 160a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z";e.mw={prefix:"fas",iconName:i,icon:[640,512,s,n,o]},e.Bw=e.mw},87133:t=>{t.exports=function(t,e,i){return t===t&&(void 0!==i&&(t=t<=i?t:i),void 0!==e&&(t=t>=e?t:e)),t}},54128:(t,e,i)=>{var s=i(31800),n=/^\s+/;t.exports=function(t){return t?t.slice(0,s(t)+1).replace(n,""):t}},55765:(t,e,i)=>{var s=i(38859),n=i(15325),o=i(29905),a=i(19219),r=i(44517),c=i(84247);t.exports=function(t,e,i){var h=-1,l=n,d=t.length,u=!0,f=[],g=f;if(i)u=!1,l=o;else if(d>=200){var p=e?null:r(t);if(p)return c(p);u=!1,l=a,g=new s}else g=e?[]:f;t:for(;++h{var s=i(76545),n=i(63950),o=i(84247),a=s&&1/o(new s([,-0]))[1]==1/0?function(t){return new s(t)}:n;t.exports=a},31800:t=>{var e=/\s/;t.exports=function(t){for(var i=t.length;i--&&e.test(t.charAt(i)););return i}},78659:(t,e,i)=>{var s=i(87133),n=i(99374);t.exports=function(t,e,i){return void 0===i&&(i=e,e=void 0),void 0!==i&&(i=(i=n(i))===i?i:0),void 0!==e&&(e=(e=n(e))===e?e:0),s(n(t),e,i)}},62193:(t,e,i)=>{var s=i(88984),n=i(5861),o=i(72428),a=i(56449),r=i(64894),c=i(3656),h=i(55527),l=i(37167),d=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(r(t)&&(a(t)||"string"==typeof t||"function"==typeof t.splice||c(t)||l(t)||o(t)))return!t.length;var e=n(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(h(t))return!s(t).length;for(var i in t)if(d.call(t,i))return!1;return!0}},99374:(t,e,i)=>{var s=i(54128),n=i(23805),o=i(44394),a=/^[-+]0x[0-9a-f]+$/i,r=/^0b[01]+$/i,c=/^0o[0-7]+$/i,h=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=s(t);var i=r.test(t);return i||c.test(t)?h(t.slice(2),i?2:8):a.test(t)?NaN:+t}},21283:(t,e,i)=>{var s=i(83120),n=i(69302),o=i(55765),a=i(83693),r=i(68090),c=n((function(t){var e=r(t);return e="function"==typeof e?e:void 0,o(s(t,1,a,!0),void 0,e)}));t.exports=c},92677:function(t,e,i){!function(t,e){"use strict";function i(t){return t*Math.PI/180}function s(t,e,i){return t>i?i:t=0||(n[i]=t[i]);return n}function f(t){var i=t.renderLabel,s=t.labelProps,n=i(s);if("string"===typeof n||"number"===typeof n){s.dataEntry,s.dataIndex;var o=u(s,["dataEntry","dataIndex"]);return e.createElement("text",Object.assign({dominantBaseline:"central"},o),n)}return e.isValidElement(n)?n:null}function g(t){var e=1e14;return Math.round((t+Number.EPSILON)*e)/e}function p(t){var e=t.labelPosition,i=t.lineWidth,s=g(t.labelHorizontalShift);return 0===s?"middle":e>100?s>0?"start":"end":e<100-i?s>0?"end":"start":"middle"}function m(t,e){return t.map((function(t,i){var s,r=null!=(s=c(e.segmentsShift,i))?s:0,h=n(e.radius,e.labelPosition)+r,l=a(o(t.startAngle,t.degrees),h),d=l.dx,u=l.dy;return{x:e.center[0],y:e.center[1],dx:d,dy:u,textAnchor:p({labelPosition:e.labelPosition,lineWidth:e.lineWidth,labelHorizontalShift:d}),dataEntry:t,dataIndex:i,style:c(e.labelStyle,i)}}))}function x(t,i){var s=i.label;if(s)return m(t,i).map((function(t,i){return e.createElement(f,{key:"label-"+(t.dataEntry.key||i),renderLabel:s,labelProps:t})}))}var b=function(t,e,i,s,n){var o=n-s;if(0===o)return[];var a=i*Math.cos(s)+t,r=i*Math.sin(s)+e,c=i*Math.cos(n)+t,h=i*Math.sin(n)+e;return[["M",a,r],["A",i,i,0,Math.abs(o)<=Math.PI?"0":"1",o<0?"0":"1",c,h]]};function v(t,e,n,o,a){var r=s(o,-359.999,359.999);return b(t,e,a,i(n),i(n+r)).map((function(t){return t.join(" ")})).join(" ")}function _(t){var s,c,h=t.cx,l=t.cy,d=t.lengthAngle,f=t.lineWidth,g=t.radius,p=t.shift,m=void 0===p?0:p,x=t.reveal,b=t.rounded,_=t.startAngle,y=t.title,w=u(t,["cx","cy","lengthAngle","lineWidth","radius","shift","reveal","rounded","startAngle","title"]),M=g-f/2,k=a(o(_,d),m),S=v(h+k.dx,l+k.dy,_,d,M);if(r(x)){var C=i(M)*d;c=(s=Math.abs(C))-n(s,x)}return e.createElement("path",Object.assign({d:S,fill:"none",strokeWidth:f,strokeDasharray:s,strokeDashoffset:c,strokeLinecap:b?"round":void 0},w),y&&e.createElement("title",null,y))}function y(t,e,i){var s="stroke-dashoffset "+t+"ms "+e;return i&&i.transition&&(s=s+","+i.transition),{transition:s}}function w(t){return t.animate&&!r(t.reveal)?100:t.reveal}function M(t,e){return t&&function(i){t(i,e)}}function k(t,i,s){var o=null!=s?s:w(i),a=i.radius,r=i.center,h=r[0],l=r[1],d=n(a,i.lineWidth),u=t.map((function(t,s){var n=c(i.segmentsStyle,s);return e.createElement(_,{cx:h,cy:l,key:t.key||s,lengthAngle:t.degrees,lineWidth:d,radius:a,rounded:i.rounded,reveal:o,shift:c(i.segmentsShift,s),startAngle:t.startAngle,title:t.title,style:Object.assign({},n,i.animate&&y(i.animationDuration,i.animationEasing,n)),stroke:t.color,tabIndex:i.segmentsTabIndex,onBlur:M(i.onBlur,s),onClick:M(i.onClick,s),onFocus:M(i.onFocus,s),onKeyDown:M(i.onKeyDown,s),onMouseOver:M(i.onMouseOver,s),onMouseOut:M(i.onMouseOut,s)})}));return i.background&&u.unshift(e.createElement(_,{cx:h,cy:l,key:"bg",lengthAngle:i.lengthAngle,lineWidth:d,radius:a,rounded:i.rounded,startAngle:i.startAngle,stroke:i.background})),u}var S={animationDuration:500,animationEasing:"ease-out",center:[50,50],data:[],labelPosition:50,lengthAngle:360,lineWidth:100,paddingAngle:0,radius:50,startAngle:0,viewBoxSize:[100,100]};function C(t){var i=h(t,S),s=e.useState(i.animate?0:null),n=s[0],o=s[1];e.useEffect((function(){i.animate&&o(null)}),[]);var a=d(i);return e.createElement("svg",{viewBox:"0 0 "+i.viewBoxSize[0]+" "+i.viewBoxSize[1],width:"100%",height:"100%",className:i.className,style:i.style},k(a,i,n),x(a,i),i.children)}t.PieChart=C,t.pieChartDefaultProps=S}(e,i(96540))},62709:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>c});var s=i(12897),n=i.n(s),o=i(55042),a=i.n(o),r=new(n())({id:"alarm_bell",use:"alarm_bell-usage",viewBox:"0 0 12 14",content:''});a().add(r);const c=r},2386:(t,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>c});var s=i(12897),n=i.n(s),o=i(55042),a=i.n(o),r=new(n())({id:"settings_h",use:"settings_h-usage",viewBox:"0 0 14 14",content:''});a().add(r);const c=r},24074:(t,e,i)=>{"use strict";var s=i(69565),n=i(28551),o=i(2360),a=i(55966),r=i(56279),c=i(91181),h=i(97751),l=i(53982),d=i(62529),u=h("Promise"),f="AsyncFromSyncIterator",g=c.set,p=c.getterFor(f),m=function(t,e,i){var s=t.done;u.resolve(t.value).then((function(t){e(d(t,s))}),i)},x=function(t){t.type=f,g(this,t)};x.prototype=r(o(l),{next:function(){var t=p(this);return new u((function(e,i){var o=n(s(t.next,t.iterator));m(o,e,i)}))},return:function(){var t=p(this).iterator;return new u((function(e,i){var o=a(t,"return");if(void 0===o)return e(d(void 0,!0));var r=n(s(o,t));m(r,e,i)}))}}),t.exports=x},84428:(t,e,i)=>{"use strict";var s=i(78227)("iterator"),n=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){n=!0}};a[s]=function(){return this},Array.from(a,(function(){throw 2}))}catch(r){}t.exports=function(t,e){try{if(!e&&!n)return!1}catch(r){return!1}var i=!1;try{var o={};o[s]=function(){return{next:function(){return{done:i=!0}}}},t(o)}catch(r){}return i}},87290:(t,e,i)=>{"use strict";var s=i(50516),n=i(19088);t.exports=!s&&!n&&"object"==typeof window&&"object"==typeof document},50516:t=>{"use strict";t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(t,e,i)=>{"use strict";var s=i(24475),n=i(44576);t.exports="process"===n(s.process)},50133:(t,e,i)=>{"use strict";var s=i(69565),n=i(94901),o=i(28551),a=i(1767),r=i(50851),c=i(55966),h=i(78227),l=i(24074),d=h("asyncIterator");t.exports=function(t){var e,i=o(t),h=!0,u=c(i,d);return n(u)||(u=r(i),h=!1),void 0!==u?e=s(u,i):(e=i,h=!0),o(e),a(h?e:new l(a(e)))}},48646:(t,e,i)=>{"use strict";var s=i(69565),n=i(28551),o=i(1767),a=i(50851);t.exports=function(t,e){e&&"string"===typeof t||n(t);var i=a(t);return o(n(void 0!==i?s(i,t):t))}},10916:(t,e,i)=>{"use strict";var s=i(24475),n=i(80550),o=i(94901),a=i(92796),r=i(33706),c=i(78227),h=i(87290),l=i(50516),d=i(96395),u=i(77388),f=n&&n.prototype,g=c("species"),p=!1,m=o(s.PromiseRejectionEvent),x=a("Promise",(function(){var t=r(n),e=t!==String(n);if(!e&&66===u)return!0;if(d&&(!f.catch||!f.finally))return!0;if(!u||u<51||!/native code/.test(t)){var i=new n((function(t){t(1)})),s=function(t){t((function(){}),(function(){}))};if((i.constructor={})[g]=s,!(p=i.then((function(){}))instanceof s))return!0}return!e&&(h||l)&&!m}));t.exports={CONSTRUCTOR:x,REJECTION_EVENT:m,SUBCLASSING:p}},90537:(t,e,i)=>{"use strict";var s=i(80550),n=i(84428),o=i(10916).CONSTRUCTOR;t.exports=o||!n((function(t){s.all(t).then(void 0,(function(){}))}))},30237:(t,e,i)=>{"use strict";i(6469)("flatMap")},96167:(t,e,i)=>{"use strict";var s=i(46518),n=i(69565),o=i(79306),a=i(36043),r=i(1103),c=i(72652);s({target:"Promise",stat:!0,forced:i(90537)},{allSettled:function(t){var e=this,i=a.f(e),s=i.resolve,h=i.reject,l=r((function(){var i=o(e.resolve),a=[],r=0,h=1;c(t,(function(t){var o=r++,c=!1;h++,n(i,e,t).then((function(t){c||(c=!0,a[o]={status:"fulfilled",value:t},--h||s(a))}),(function(t){c||(c=!0,a[o]={status:"rejected",reason:t},--h||s(a))}))})),--h||s(a)}));return l.error&&h(l.value),i.promise}})},32679:(t,e,i)=>{"use strict";var s=i(46518),n=i(69565),o=i(79306),a=i(28551),r=i(20034),c=i(1767),h=i(92059),l=i(62529),d=i(50133),u=i(20772),f=i(96395),g=h((function(t){var e=this,i=e.iterator,s=e.mapper;return new t((function(o,c){var h=function(t){e.done=!0,c(t)},f=function(t){u(i,h,t,h)},g=function(){try{t.resolve(a(n(e.next,i))).then((function(i){try{if(a(i).done)e.done=!0,o(l(void 0,!0));else{var n=i.value;try{var c=s(n,e.counter++),u=function(t){try{e.inner=d(t),p()}catch(i){f(i)}};r(c)?t.resolve(c).then(u,f):u(c)}catch(g){f(g)}}}catch(m){h(m)}}),h)}catch(c){h(c)}},p=function(){var i=e.inner;if(i)try{t.resolve(a(n(i.next,i.iterator))).then((function(t){try{a(t).done?(e.inner=null,g()):o(l(t.value,!1))}catch(i){f(i)}}),f)}catch(s){f(s)}else g()};p()}))}));s({target:"AsyncIterator",proto:!0,real:!0,forced:f},{flatMap:function(t){return a(this),o(t),new g(c(this),{mapper:t,inner:null})}})},30670:(t,e,i)=>{"use strict";var s=i(46518),n=i(69565),o=i(79306),a=i(28551),r=i(1767),c=i(48646),h=i(19462),l=i(9539),d=i(96395),u=h((function(){for(var t,e,i=this.iterator,s=this.mapper;;){if(e=this.inner)try{if(!(t=a(n(e.next,e.iterator))).done)return t.value;this.inner=null}catch(o){l(i,"throw",o)}if(t=a(n(this.next,i)),this.done=!!t.done)return;try{this.inner=c(s(t.value,this.counter++),!1)}catch(o){l(i,"throw",o)}}}));s({target:"Iterator",proto:!0,real:!0,forced:d},{flatMap:function(t){return a(this),o(t),new u(r(this),{mapper:t,inner:null})}})},66118:(t,e,i)=>{"use strict";i.d(e,{A6:()=>D,E8:()=>ke,FN:()=>xe,Hg:()=>bt,No:()=>pe,PP:()=>Ue,Qw:()=>h,UA:()=>si,ZT:()=>L,ij:()=>T,kc:()=>qe,m_:()=>We,s$:()=>ze,t1:()=>oe});var s=i(12020);class n{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=s.r.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var o=new n;const a="transparent",r={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const n=(0,s.c)(t||a),o=n.valid&&(0,s.c)(e||a);return o&&o.valid?o.mix(n,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class c{constructor(t,e,i,n){const o=e[i];n=(0,s.a)([t.to,n,o,t.from]);const a=(0,s.a)([t.from,o,n]);this._active=!0,this._fn=t.fn||r[t.type||typeof a],this._easing=s.e[t.easing]||s.e.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const n=this._target[this._prop],o=i-this._start,a=this._duration-o;this._start=i,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=(0,s.a)([t.to,e,n,t.from]),this._from=(0,s.a)([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let s=0;s{const o=t[n];if(!(0,s.i)(o))return;const a={};for(const t of e)a[t]=o[t];((0,s.b)(o.properties)&&o.properties||[n]).forEach((t=>{t!==n&&i.has(t)||i.set(t,a)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let n=0;n{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const h=o[r];if("$"===h.charAt(0))continue;if("options"===h){s.push(...this._animateOptions(t,e));continue}const l=e[h];let d=n[h];const u=i.get(h);if(d){if(u&&d.active()){d.update(u,l,a);continue}d.cancel()}u&&u.duration?(n[h]=d=new c(u,t,h,l),s.push(d)):t[h]=l}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(o.add(this._chart,i),!0):void 0}}function l(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function d(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function m(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,c=o.axis,h=a.axis,l=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let f=0;fi[t].axis===e)).shift()}function b(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const v=t=>"reset"===t||"none"===t,_=(t,e)=>e?t:Object.assign({},t);class y{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=f(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&b(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),n=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,o=e.xAxisID=(0,s.v)(i.xAxisID,x(t,"x")),a=e.yAxisID=(0,s.v)(i.yAxisID,x(t,"y")),r=e.rAxisID=(0,s.v)(i.rAxisID,x(t,"r")),c=e.indexAxis,h=e.iAxisID=n(c,o,a,r),l=e.vAxisID=n(c,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&(0,s.u)(this._data,this),t._stacked&&b(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if((0,s.i)(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=n,i._sorted=!0,l=n;else{l=(0,s.b)(n[t])?this.parseArrayData(i,n,t,e):(0,s.i)(n[t])?this.parseObjectData(i,n,t,e):this.parsePrimitiveData(i,n,t,e);const o=()=>null===h[r]||u&&h[r]t&&!e.hidden&&e._stacked&&{keys:d(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:l,max:u}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let f,g;function p(){g=n[f];const e=g[r.axis];return!(0,s.g)(g[t.axis])||l>e||u=0;--f)if(!p()){this.updateRangeFromParsed(h,t,g,c);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let n,o,a;for(n=0,o=e.length;n=0&&tthis.getContext(i,n,e)),d);return g.$shared&&(g.$shared=c,o[a]=Object.freeze(_(g,c))),g}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const c=new h(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||v(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){v(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!v(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[a,r,c]of this._syncList)this[a](r,c);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;at-e)))}return t._cache.$bar}(e,t.type);let n,o,a,r,c=e._length;const h=()=>{32767!==a&&-32768!==a&&((0,s.h)(r)&&(c=Math.min(c,Math.abs(a-r)||c)),r=a)};for(n=0,o=i.length;nMath.abs(r)&&(c=r,h=a),e[i.axis]=h,e._custom={barStart:c,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,n):e[i.axis]=i.parse(t,n),e}function k(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,c=[];let h,l,d,u;for(h=i,l=i+s;ht.x,i="left",s="right"):(e=t.baset.controller.options.grouped)),o=i.options.stacked,a=[],r=t=>{const i=t.controller.getParsed(e),n=i&&i[t.vScale.axis];if((0,s.k)(n)||isNaN(n))return!0};for(const s of n)if((void 0===e||!r(s))&&((!1===o||-1===a.indexOf(s.stack)||void 0===o&&void 0===s.stack)&&a.push(s.stack),s.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(x-=u/2);const t=e.getPixelForDecimal(0),o=e.getPixelForDecimal(1),h=Math.min(t,o),g=Math.max(t,o);x=Math.max(Math.min(x,g),h),d=x+u,i&&!l&&(c._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(x))}if(x===e.getPixelForValue(r)){const t=(0,s.s)(u)*e.getLineWidthForValue(r)/2;x+=t,u-=t}return{size:u,base:x,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=(0,s.v)(n.maxBarThickness,1/0);let r,c;if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,h="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t0&&this.getParsed(e-1);for(let y=0;y=b){g.skip=!0;continue}const v=this.getParsed(y),w=(0,s.k)(v[f]),M=g[u]=a.getPixelForValue(v[u],y),k=g[f]=o||w?r.getBasePixel():r.getPixelForValue(c?this.applyStack(r,v,c):v[f],y);g.skip=isNaN(M)||isNaN(k)||w,g.stop=y>0&&Math.abs(v[u]-_[u])>m,p&&(g.parsed=v,g.raw=h.data[y]),d&&(g.options=l||this.resolveDataElementOptions(y,i.active?"active":n)),x||this.updateElement(i,y,g,n),_=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}function A(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class H{static override(t){Object.assign(H.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return A()}parse(){return A()}format(){return A()}add(){return A()}diff(){return A()}startOf(){return A()}endOf(){return A()}}var T={_date:H};function I(t,e,i,n){const{controller:o,data:a,_sorted:r}=t,c=o._cachedMeta.iScale;if(c&&e===c.axis&&"r"!==e&&r&&a.length){const t=c._reversePixels?s.A:s.B;if(!n)return t(a,e,i);if(o._sharedOptions){const s=a[0],n="function"===typeof s.getRange&&s.getRange(e);if(n){const s=t(a,e,i-n),o=t(a,e,i+n);return{lo:s.lo,hi:o.hi}}}}return{lo:0,hi:a.length-1}}function E(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let r=0,c=o.length;r{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:c}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var j={evaluateInteractionItems:E,modes:{index(t,e,i,n){const o=(0,s.z)(e,t),a=i.axis||"x",r=i.includeInvisible||!1,c=i.intersect?V(t,o,a,n,r):R(t,o,a,!1,n,r),h=[];return c.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=c[0].index,i=t.data[e];i&&!i.skip&&h.push({element:i,datasetIndex:t.index,index:e})})),h):[]},dataset(t,e,i,n){const o=(0,s.z)(e,t),a=i.axis||"xy",r=i.includeInvisible||!1;let c=i.intersect?V(t,o,a,n,r):R(t,o,a,!1,n,r);if(c.length>0){const e=c[0].datasetIndex,i=t.getDatasetMeta(e).data;c=[];for(let t=0;tV(t,(0,s.z)(e,t),i.axis||"xy",n,i.includeInvisible||!1),nearest(t,e,i,n){const o=(0,s.z)(e,t),a=i.axis||"xy",r=i.includeInvisible||!1;return R(t,o,a,i.intersect,n,r)},x:(t,e,i,n)=>N(t,(0,s.z)(e,t),"x",i.intersect,n),y:(t,e,i,n)=>N(t,(0,s.z)(e,t),"y",i.intersect,n)}};const B=["left","top","right","bottom"];function W(t,e){return t.filter((t=>t.pos===e))}function $(t,e){return t.filter((t=>-1===B.indexOf(t.pos)&&t.box.axis===e))}function Y(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function U(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!B.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function G(t,e,i,s){const n=[];let o,a,r,c,h,l;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Y(W(e,"left"),!0),n=Y(W(e,"right")),o=Y(W(e,"top"),!0),a=Y(W(e,"bottom")),r=$(e,"x"),c=$(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(c).concat(a).concat(r),chartArea:W(e,"chartArea"),vertical:s.concat(n).concat(c),horizontal:o.concat(a).concat(r)}}(t.boxes),h=c.vertical,l=c.horizontal;(0,s.F)(t.boxes,(t=>{"function"===typeof t.beforeLayout&&t.beforeLayout()}));const d=h.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,u=Object.freeze({outerWidth:e,outerHeight:i,padding:o,availableWidth:a,availableHeight:r,vBoxMaxWidth:a/2/d,hBoxMaxHeight:r/2}),f=Object.assign({},o);Q(f,(0,s.E)(n));const g=Object.assign({maxPadding:f,w:a,h:r,x:o.left,y:o.top},o),p=U(h.concat(l),u);G(c.fullSize,g,u,p),G(h,g,u,p),G(l,g,u,p)&&G(h,g,u,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),J(c.leftAndTop,g,u,p),g.x+=g.w,g.y+=g.h,J(c.rightAndBottom,g,u,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},(0,s.F)(c.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class et{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class it extends et{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const st="$chartjs",nt={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},ot=t=>null===t||""===t;const at=!!s.K&&{passive:!0};function rt(t,e,i){t&&t.canvas&&t.canvas.removeEventListener(e,i,at)}function ct(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function ht(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ct(i.addedNodes,s),e=e&&!ct(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function lt(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ct(i.removedNodes,s),e=e&&!ct(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const dt=new Map;let ut=0;function ft(){const t=window.devicePixelRatio;t!==ut&&(ut=t,dt.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function gt(t,e,i){const n=t.canvas,o=n&&(0,s.I)(n);if(!o)return;const a=(0,s.L)(((t,e)=>{const s=o.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||a(i,s)}));return r.observe(o),function(t,e){dt.size||window.addEventListener("resize",ft),dt.set(t,e)}(t,a),r}function pt(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){dt.delete(t),dt.size||window.removeEventListener("resize",ft)}(t)}function mt(t,e,i){const n=t.canvas,o=(0,s.L)((e=>{null!==t.ctx&&i(function(t,e){const i=nt[t.type]||t.type,{x:n,y:o}=(0,s.z)(t,e);return{type:i,chart:e,native:t,x:void 0!==n?n:null,y:void 0!==o?o:null}}(e,t))}),t);return function(t,e,i){t&&t.addEventListener(e,i,at)}(n,e,o),o}class xt extends et{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,n=t.getAttribute("height"),o=t.getAttribute("width");if(t[st]={initial:{height:n,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",ot(o)){const e=(0,s.J)(t,"width");void 0!==e&&(t.width=e)}if(ot(n))if(""===t.style.height)t.height=t.width/(e||2);else{const e=(0,s.J)(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[st])return!1;const i=e[st].initial;["height","width"].forEach((t=>{const n=i[t];(0,s.k)(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[st],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:ht,detach:lt,resize:gt}[e]||mt;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:pt,detach:pt,resize:pt}[e]||rt)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return(0,s.G)(t,e,i,n)}isAttached(t){const e=(0,s.I)(t);return!(!e||!e.isConnected)}}class bt{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return(0,s.x)(this.x)&&(0,s.x)(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function vt(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;no)return t}return Math.max(o,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-c)/(r-1)):null;for(_t(e,l,d,(0,s.k)(n)?0:c-n,c),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,wt=(t,e)=>Math.min(e||t,t);function Mt(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function St(t){return t.drawTicks?t.tickLength:0}function Ct(t,e){if(!t.display)return 0;const i=(0,s.a0)(t.font,e),n=(0,s.E)(t.padding);return((0,s.b)(t.text)?t.text.length:1)*i.lineHeight+n.height}function Pt(t,e,i){let n=(0,s.a1)(t);return(i&&"right"!==e||!i&&"right"===e)&&(n=(t=>"left"===t?"right":"right"===t?"left":t)(n)),n}class zt extends bt{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:n}=this;return t=(0,s.O)(t,Number.POSITIVE_INFINITY),e=(0,s.O)(e,Number.NEGATIVE_INFINITY),i=(0,s.O)(i,Number.POSITIVE_INFINITY),n=(0,s.O)(n,Number.NEGATIVE_INFINITY),{min:(0,s.O)(t,i),max:(0,s.O)(e,n),minDefined:(0,s.g)(t),maxDefined:(0,s.g)(e)}}getMinMax(t){let e,{min:i,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();if(o&&a)return{min:i,max:n};const r=this.getMatchingVisibleMetas();for(let s=0,c=r.length;sn?n:i,n=o&&i>n?i:n,{min:(0,s.O)(i,(0,s.O)(n,i)),max:(0,s.O)(n,(0,s.O)(i,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){(0,s.Q)(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=(0,s.R)(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const c=r=o||i<=1||!this.isHorizontal())return void(this.labelRotation=n);const l=this._getLabelSizes(),d=l.widest.width,u=l.highest.height,f=(0,s.S)(this.chart.width-d,0,this.maxWidth);a=t.offset?this.maxWidth/i:f/(i-1),d+6>a&&(a=f/(i-(t.offset?.5:1)),r=this.maxHeight-St(t.grid)-e.padding-Ct(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),h=(0,s.U)(Math.min(Math.asin((0,s.S)((l.highest.height+6)/a,-1,1)),Math.asin((0,s.S)(r/c,-1,1))-Math.asin((0,s.S)(u/c,-1,1)))),h=Math.max(n,Math.min(o,h))),this.labelRotation=h}afterCalculateLabelRotation(){(0,s.Q)(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){(0,s.Q)(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){const a=Ct(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=St(o)+a):(t.height=this.maxHeight,t.width=St(o)+a),i.display&&this.ticks.length){const{first:e,last:n,widest:o,highest:a}=this._getLabelSizes(),c=2*i.padding,h=(0,s.t)(this.labelRotation),l=Math.cos(h),d=Math.sin(h);if(r){const e=i.mirror?0:d*o.width+l*a.height;t.height=Math.min(this.maxHeight,t.height+e+c)}else{const e=i.mirror?0:l*o.width+d*a.height;t.width=Math.min(this.maxWidth,t.width+e+c)}this._calculatePadding(e,n,d,l)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,c="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let l=0,d=0;r?c?(l=s*t.width,d=i*e.height):(l=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?l=t.width:"inner"!==n&&(l=t.width/2,d=e.width/2),this.paddingLeft=Math.max((l-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){(0,s.Q)(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:a[t]||0,height:r[t]||0});return{first:k(0),last:k(e-1),widest:k(w),highest:k(M),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return(0,s.W)(this._alignToPixels?(0,s.X)(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&tr*n?r/i:c/n:c*n0}_computeGridLineItems(t){const e=this.axis,i=this.chart,n=this.options,{grid:o,position:a,border:r}=n,c=o.offset,h=this.isHorizontal(),l=this.ticks.length+(c?1:0),d=St(o),u=[],f=r.setContext(this.getContext()),g=f.display?f.width:0,p=g/2,m=function(t){return(0,s.X)(i,t,g)};let x,b,v,_,y,w,M,k,S,C,P,z;if("top"===a)x=m(this.bottom),w=this.bottom-d,k=x-p,C=m(t.top)+p,z=t.bottom;else if("bottom"===a)x=m(this.top),C=t.top,z=m(t.bottom)-p,w=x+p,k=this.top+d;else if("left"===a)x=m(this.right),y=this.right-d,M=x-p,S=m(t.left)+p,P=t.right;else if("right"===a)x=m(this.left),S=t.left,P=m(t.right)-p,y=x+p,M=this.left+d;else if("x"===e){if("center"===a)x=m((t.top+t.bottom)/2+.5);else if((0,s.i)(a)){const t=Object.keys(a)[0],e=a[t];x=m(this.chart.scales[t].getPixelForValue(e))}C=t.top,z=t.bottom,w=x+p,k=w+d}else if("y"===e){if("center"===a)x=m((t.left+t.right)/2);else if((0,s.i)(a)){const t=Object.keys(a)[0],e=a[t];x=m(this.chart.scales[t].getPixelForValue(e))}y=x-p,M=y-d,S=t.left,P=t.right}const O=(0,s.v)(n.ticks.maxTicksLimit,l),D=Math.max(1,Math.ceil(l/O));for(b=0;b0&&(a-=n/2)}u={left:a,top:o,width:n+e.width,height:i+e.height,color:t.backdropColor}}m.push({label:_,font:S,textOffset:z,options:{rotation:p,color:i,strokeColor:c,strokeWidth:l,textAlign:f,textBaseline:O,translation:[y,w],backdrop:u}})}return m}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-(0,s.t)(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,c;return"left"===e?s?(c=this.right+n,"near"===i?r="left":"center"===i?(r="center",c+=a/2):(r="right",c+=a)):(c=this.right-o,"near"===i?r="right":"center"===i?(r="center",c-=a/2):(r="left",c=this.left)):"right"===e?s?(c=this.left+n,"near"===i?r="right":"center"===i?(r="center",c-=a/2):(r="left",c-=a)):(c=this.left+o,"near"===i?r="left":"center"===i?(r="center",c+=a/2):(r="right",c=this.right)):r="right",{textAlign:r,x:c}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const n=i.split("."),o=n.pop(),a=[t].concat(n).join("."),r=e[i].split("."),c=r.pop(),h=r.join(".");s.d.route(a,o,h,c)}))}(e,t.defaultRoutes);t.descriptors&&s.d.describe(e,t.descriptors)}(t,a,i),this.override&&s.d.override(t.id,t.overrides)),a}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,n=this.scope;i in e&&delete e[i],n&&i in s.d[n]&&(delete s.d[n][i],this.override&&delete s.a3[i])}}class Dt{constructor(){this.controllers=new Ot(y,"datasets",!0),this.elements=new Ot(bt,"elements"),this.plugins=new Ot(Object,"plugins"),this.scales=new Ot(zt,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const n=i||this._getRegistryForType(e);i||n.isForType(e)||n===this.plugins&&e.id?this._exec(t,n,e):(0,s.F)(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const n=(0,s.a5)(t);(0,s.Q)(i["before"+n],[],i),e[t](i),(0,s.Q)(i["after"+n],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Ht(t,e){return e||!1!==t?!0===t?{}:t:null}function Tt(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function It(t,e){const i=s.d.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Et(t){if("x"===t||"y"===t||"r"===t)return t}function Vt(t,...e){if(Et(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&Et(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function Ft(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function Rt(t,e){const i=s.a3[t.type]||{scales:{}},n=e.scales||{},o=It(t.type,e),a=Object.create(null);return Object.keys(n).forEach((e=>{const r=n[e];if(!(0,s.i)(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const c=Vt(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return Ft(t,"x",i[0])||Ft(t,"y",i[0])}return{}}(e,t),s.d.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(c,o),l=i.scales||{};a[e]=(0,s.ab)(Object.create(null),[{axis:c},r,l[c],l[h]])})),t.data.datasets.forEach((i=>{const o=i.type||t.type,r=i.indexAxis||It(o,e),c=(s.a3[o]||{}).scales||{};Object.keys(c).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,r),o=i[e+"AxisID"]||e;a[o]=a[o]||Object.create(null),(0,s.ab)(a[o],[{axis:e},n[o],c[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];(0,s.ab)(e,[s.d.scales[e.type],s.d.scale])})),a}function Nt(t){const e=t.options||(t.options={});e.plugins=(0,s.v)(e.plugins,{}),e.scales=Rt(t,e)}function jt(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const Bt=new Map,Wt=new Set;function $t(t,e){let i=Bt.get(t);return i||(i=e(),Bt.set(t,i),Wt.add(i)),i}const Yt=(t,e,i)=>{const n=(0,s.f)(e,i);void 0!==n&&t.add(n)};class Ut{constructor(t){this._config=function(t){return(t=t||{}).data=jt(t.data),Nt(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=jt(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Nt(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return $t(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return $t(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return $t(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return $t(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:n,type:o}=this,a=this._cachedScopes(t,i),r=a.get(e);if(r)return r;const c=new Set;e.forEach((e=>{t&&(c.add(t),e.forEach((e=>Yt(c,t,e)))),e.forEach((t=>Yt(c,n,t))),e.forEach((t=>Yt(c,s.a3[o]||{},t))),e.forEach((t=>Yt(c,s.d,t))),e.forEach((t=>Yt(c,s.a6,t)))}));const h=Array.from(c);return 0===h.length&&h.push(Object.create(null)),Wt.has(e)&&a.set(e,h),h}chartOptionScopes(){const{options:t,type:e}=this;return[t,s.a3[e]||{},s.d.datasets[e]||{},{type:e},s.d,s.a6]}resolveNamedOptions(t,e,i,n=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=Xt(this._resolverCache,t,n);let c=a;if(function(t,e){const{isScriptable:i,isIndexable:n}=(0,s.aa)(t);for(const o of e){const e=i(o),a=n(o),r=(a||e)&&t[o];if(e&&((0,s.a7)(r)||Qt(r))||a&&(0,s.b)(r))return!0}return!1}(a,e)){o.$shared=!1,i=(0,s.a7)(i)?i():i;const e=this.createResolver(t,i,r);c=(0,s.a8)(a,i,e)}for(const s of e)o[s]=c[s];return o}createResolver(t,e,i=[""],n){const{resolver:o}=Xt(this._resolverCache,t,i);return(0,s.i)(e)?(0,s.a8)(o,e,void 0,n):o}}function Xt(t,e,i){let n=t.get(e);n||(n=new Map,t.set(e,n));const o=i.join();let a=n.get(o);if(!a){a={resolver:(0,s.a9)(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},n.set(o,a)}return a}const Qt=t=>(0,s.i)(t)&&Object.getOwnPropertyNames(t).some((e=>(0,s.a7)(t[e])));const qt=["top","bottom","left","right","chartArea"];function Kt(t,e){return"top"===t||"bottom"===t||-1===qt.indexOf(t)&&"x"===e}function Gt(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function Zt(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),(0,s.Q)(i&&i.onComplete,[t],e)}function Jt(t){const e=t.chart,i=e.options.animation;(0,s.Q)(i&&i.onProgress,[t],e)}function te(t){return(0,s.M)()&&"string"===typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const ee={},ie=t=>{const e=te(t);return Object.values(ee).filter((t=>t.canvas===e)).pop()};function se(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}function ne(t,e,i){return t.options.clip?t[i]:e[i]}class oe{static defaults=s.d;static instances=ee;static overrides=s.a3;static registry=Lt;static version="4.4.2";static getChart=ie;static register(...t){Lt.add(...t),ae()}static unregister(...t){Lt.remove(...t),ae()}constructor(t,e){const i=this.config=new Ut(e),n=te(t),a=ie(n);if(a)throw new Error("Canvas is already in use. Chart with ID '"+a.id+"' must be destroyed before the canvas with ID '"+a.canvas.id+"' can be reused.");const r=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||function(t){return!(0,s.M)()||"undefined"!==typeof OffscreenCanvas&&t instanceof OffscreenCanvas?it:xt}(n)),this.platform.updateConfig(i);const c=this.platform.acquireContext(n,r.aspectRatio),h=c&&c.canvas,l=h&&h.height,d=h&&h.width;this.id=(0,s.ac)(),this.ctx=c,this.canvas=h,this.width=d,this.height=l,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new At,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=(0,s.ad)((t=>this.update(t)),r.resizeDelay||0),this._dataChanges=[],ee[this.id]=this,c&&h?(o.listen(this,"complete",Zt),o.listen(this,"progress",Jt),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return(0,s.k)(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Lt}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():(0,s.ae)(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return(0,s.af)(this.canvas,this.ctx),this}stop(){return o.stop(this),this}resize(t,e){o.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,n=this.canvas,o=i.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=i.devicePixelRatio||this.platform.getDevicePixelRatio(),c=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,(0,s.ae)(this,r,!0)&&(this.notifyPlugins("resize",{size:a}),(0,s.Q)(i.onResize,[this,a],this),this.attached&&this._doResize(c)&&this.render())}ensureScalesHaveIDs(){const t=this.options.scales||{};(0,s.F)(t,((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,n=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let o=[];e&&(o=o.concat(Object.keys(e).map((t=>{const i=e[t],s=Vt(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),(0,s.F)(o,(e=>{const o=e.options,a=o.id,r=Vt(a,o),c=(0,s.v)(o.type,e.dtype);void 0!==o.position&&Kt(o.position,r)===Kt(e.dposition)||(o.position=e.dposition),n[a]=!0;let h=null;if(a in i&&i[a].type===c)h=i[a];else{h=new(Lt.getScale(c))({id:a,type:c,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(o,t)})),(0,s.F)(n,((t,e)=>{t||delete i[e]})),(0,s.F)(i,(t=>{tt.configure(this,t,t.options),tt.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,n;for(this._removeUnreferencedMetasets(),i=0,n=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let s=0,h=this.data.datasets.length;s{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Gt("z","_idx"));const{_active:r,_lastEvent:c}=this;c?this._eventHandler(c,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){(0,s.F)(this.scales,(t=>{tt.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);(0,s.ag)(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){se(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),n=i(0);for(let o=1;ot.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;tt.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],(0,s.F)(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,n=!i.disabled,o=function(t,e){const{xScale:i,yScale:s}=t;return i&&s?{left:ne(i,e,"left"),right:ne(i,e,"right"),top:ne(s,e,"top"),bottom:ne(s,e,"bottom")}:e}(t,this.chartArea),a={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",a)&&(n&&(0,s.Y)(e,{left:!1===i.left?0:o.left-i.left,right:!1===i.right?this.width:o.right+i.right,top:!1===i.top?0:o.top-i.top,bottom:!1===i.bottom?this.height:o.bottom+i.bottom}),t.controller.draw(),n&&(0,s.$)(e),a.cancelable=!1,this.notifyPlugins("afterDatasetDraw",a))}isPointInArea(t){return(0,s.C)(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=j.modes[e];return"function"===typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=(0,s.j)(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"===typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const n=i?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);(0,s.h)(e)?(o.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),a.update(o,{visible:i}),this.update((e=>e.datasetIndex===t?n:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),o.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},n=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};(0,s.F)(this.options.events,(t=>i(t,n)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){(0,s.F)(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},(0,s.F)(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!(0,s.ah)(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,i,a),c=(0,s.ai)(t),h=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,c);i&&(this._lastEvent=null,(0,s.Q)(o.onHover,[t,r,this],this),c&&(0,s.Q)(o.onClick,[t,r,this],this));const l=!(0,s.ah)(r,n);return(l||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=h,l}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function ae(){return(0,s.F)(oe.instances,(t=>t._plugins.invalidate()))}function re(t,e,i=e){t.lineCap=(0,s.v)(i.borderCapStyle,e.borderCapStyle),t.setLineDash((0,s.v)(i.borderDash,e.borderDash)),t.lineDashOffset=(0,s.v)(i.borderDashOffset,e.borderDashOffset),t.lineJoin=(0,s.v)(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=(0,s.v)(i.borderWidth,e.borderWidth),t.strokeStyle=(0,s.v)(i.borderColor,e.borderColor)}function ce(t,e,i){t.lineTo(i.x,i.y)}function he(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,c=Math.max(n,a),h=Math.min(o,r),l=nr&&o>r;return{count:s,start:c,loop:e.loop,ilen:h(a+(h?r-t:t))%o,v=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(c&&(d=n[b(0)],t.moveTo(d.x,d.y)),l=0;l<=r;++l){if(d=n[b(l)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(x*m+e)/++x):(v(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}v()}function ue(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!t._decimated&&!t._loop&&!e.tension&&"monotone"!==e.cubicInterpolationMode&&!e.stepped&&!i?de:le}const fe="function"===typeof Path2D;function ge(t,e,i,s){fe&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),re(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=ue(e);for(const r of n)re(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class pe extends bt{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const n=i.spanGaps?this._loop:this._fullLoop;(0,s.al)(this._points,i,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=(0,s.am)(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,n=t[e],o=this.points,a=(0,s.an)(this,{property:e,start:n,end:n});if(!a.length)return;const r=[],c=function(t){return t.stepped?s.ao:t.tension||"monotone"===t.cubicInterpolationMode?s.ap:s.aq}(i);let h,l;for(h=0,l=a.length;h{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Ce extends bt{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=(0,s.Q)(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,n=(0,s.a0)(i.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:c}=Se(i,o);let h,l;e.font=n.string,this.isHorizontal()?(h=this.maxWidth,l=this._fitRows(a,o,r,c)+10):(l=this.maxHeight,h=this._fitCols(a,n,r,c)+10),this.width=Math.min(h,t.maxWidth||this.maxWidth),this.height=Math.min(l,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],c=this.lineWidths=[0],h=s+a;let l=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||c[c.length-1]+g+2*a>o)&&(l+=h,c[c.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},c[c.length-1]+=g+a})),l}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],c=this.columnSizes=[],h=o-t;let l=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!==typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!==typeof e.text&&(s=Pe(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(l+=d+a,c.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),l+=d,c.push({width:d,height:u}),l}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:n},rtl:o}}=this,a=(0,s.az)(o,this.left,this.width);if(this.isHorizontal()){let o=0,r=(0,s.a2)(i,this.left+n,this.right-this.lineWidths[o]);for(const c of e)o!==c.row&&(o=c.row,r=(0,s.a2)(i,this.left+n,this.right-this.lineWidths[o])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(r),c.width),r+=c.width+n}else{let o=0,r=(0,s.a2)(i,this.top+t+n,this.bottom-this.columnSizes[o].height);for(const c of e)c.col!==o&&(o=c.col,r=(0,s.a2)(i,this.top+t+n,this.bottom-this.columnSizes[o].height)),c.top=r,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),r+=c.height+n}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;(0,s.Y)(t,this),this._draw(),(0,s.$)(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:n}=this,{align:o,labels:a}=t,r=s.d.color,c=(0,s.az)(t.rtl,this.left,this.width),h=(0,s.a0)(a.font),{padding:l}=a,d=h.size,u=d/2;let f;this.drawTitle(),n.textAlign=c.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=Se(a,d),x=this.isHorizontal(),b=this._computeTitleHeight();f=x?{x:(0,s.a2)(o,this.left+l,this.right-i[0]),y:this.top+l+b,line:0}:{x:this.left+l,y:(0,s.a2)(o,this.top+b+l,this.bottom-e[0].height),line:0},(0,s.aA)(this.ctx,t.textDirection);const v=m+l;this.legendItems.forEach(((_,y)=>{n.strokeStyle=_.fontColor,n.fillStyle=_.fontColor;const w=n.measureText(_.text).width,M=c.textAlign(_.textAlign||(_.textAlign=a.textAlign)),k=g+u+w;let S=f.x,C=f.y;c.setWidth(this.width),x?y>0&&S+k+l>this.right&&(C=f.y+=v,f.line++,S=f.x=(0,s.a2)(o,this.left+l,this.right-i[f.line])):y>0&&C+v>this.bottom&&(S=f.x=S+e[f.line].width+l,f.line++,C=f.y=(0,s.a2)(o,this.top+b+l,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();const o=(0,s.v)(i.lineWidth,1);if(n.fillStyle=(0,s.v)(i.fillStyle,r),n.lineCap=(0,s.v)(i.lineCap,"butt"),n.lineDashOffset=(0,s.v)(i.lineDashOffset,0),n.lineJoin=(0,s.v)(i.lineJoin,"miter"),n.lineWidth=o,n.strokeStyle=(0,s.v)(i.strokeStyle,r),n.setLineDash((0,s.v)(i.lineDash,[])),a.usePointStyle){const r={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:o},h=c.xPlus(t,g/2),l=e+u;(0,s.aD)(n,r,h,l,a.pointStyleWidth&&g)}else{const a=e+Math.max((d-p)/2,0),r=c.leftForLtr(t,g),h=(0,s.aw)(i.borderRadius);n.beginPath(),Object.values(h).some((t=>0!==t))?(0,s.au)(n,{x:r,y:a,w:g,h:p,radius:h}):n.rect(r,a,g,p),n.fill(),0!==o&&n.stroke()}n.restore()}(c.x(S),C,_),S=(0,s.aB)(M,S+g+u,x?S+k:this.right,t.rtl),function(t,e,i){(0,s.Z)(n,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:c.textAlign(i.textAlign)})}(c.x(S),C,_),x)f.x+=k+l;else if("string"!==typeof _.text){const t=h.lineHeight;f.y+=Pe(_,t)+l}else f.y+=v})),(0,s.aC)(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=(0,s.a0)(e.font),n=(0,s.E)(e.padding);if(!e.display)return;const o=(0,s.az)(t.rtl,this.left,this.width),a=this.ctx,r=e.position,c=i.size/2,h=n.top+c;let l,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),l=this.top+h,d=(0,s.a2)(t.align,d,this.right-u);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);l=h+(0,s.a2)(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const f=(0,s.a2)(r,d,d+u);a.textAlign=o.textAlign((0,s.a1)(r)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=i.string,(0,s.Z)(a,e.text,f,l,i)}_computeTitleHeight(){const t=this.options.title,e=(0,s.a0)(t.font),i=(0,s.E)(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,n,o;if((0,s.aj)(t,this.left,this.right)&&(0,s.aj)(e,this.top,this.bottom))for(o=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:n,textAlign:o,color:a,useBorderRadius:r,borderRadius:c}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const h=t.controller.getStyle(i?0:void 0),l=(0,s.E)(h.borderWidth);return{text:e[t.index].label,fillStyle:h.backgroundColor,fontColor:a,hidden:!t.visible,lineCap:h.borderCapStyle,lineDash:h.borderDash,lineDashOffset:h.borderDashOffset,lineJoin:h.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:h.borderColor,pointStyle:n||h.pointStyle,rotation:h.rotation,textAlign:o||h.textAlign,borderRadius:r&&(c||h.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};new WeakMap;const Oe={average(t){if(!t.length)return!1;let e,i,s=new Set,n=0,o=0;for(e=0,i=t.length;et+e))/s.size,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,n,o,a=e.x,r=e.y,c=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i-1?t.split("\n"):t}function Ae(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function He(t,e){const i=t.chart.ctx,{body:n,footer:o,title:a}=t,{boxWidth:r,boxHeight:c}=e,h=(0,s.a0)(e.bodyFont),l=(0,s.a0)(e.titleFont),d=(0,s.a0)(e.footerFont),u=a.length,f=o.length,g=n.length,p=(0,s.E)(e.padding);let m=p.height,x=0,b=n.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,u&&(m+=u*l.lineHeight+(u-1)*e.titleSpacing+e.titleMarginBottom),b){m+=g*(e.displayColors?Math.max(c,h.lineHeight):h.lineHeight)+(b-g)*h.lineHeight+(b-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*d.lineHeight+(f-1)*e.footerSpacing);let v=0;const _=function(t){x=Math.max(x,i.measureText(t).width+v)};return i.save(),i.font=l.string,(0,s.F)(t.title,_),i.font=h.string,(0,s.F)(t.beforeBody.concat(t.afterBody),_),v=e.displayColors?r+2+e.boxPadding:0,(0,s.F)(n,(t=>{(0,s.F)(t.before,_),(0,s.F)(t.lines,_),(0,s.F)(t.after,_)})),v=0,i.font=d.string,(0,s.F)(t.footer,_),i.restore(),x+=p.width,{width:x,height:m}}function Te(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:c}}=t;let h="center";return"center"===s?h=n<=(r+c)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Ie(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Te(t,e,i,s),yAlign:s}}function Ee(t,e,i,n){const{caretSize:o,caretPadding:a,cornerRadius:r}=t,{xAlign:c,yAlign:h}=i,l=o+a,{topLeft:d,topRight:u,bottomLeft:f,bottomRight:g}=(0,s.aw)(r);let p=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,c);const m=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,h,l);return"center"===h?"left"===c?p+=l:"right"===c&&(p-=l):"left"===c?p-=Math.max(d,f)+o:"right"===c&&(p+=Math.max(u,g)+o),{x:(0,s.S)(p,0,n.width-e.width),y:(0,s.S)(m,0,n.height-e.height)}}function Ve(t,e,i){const n=(0,s.E)(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-n.right:t.x+n.left}function Fe(t){return De([],Le(t))}function Re(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Ne={beforeTitle:s.aF,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},s=Re(i,t);De(e.before,Le(je(s,"beforeLabel",this,t))),De(e.lines,je(s,"label",this,t)),De(e.after,Le(je(s,"afterLabel",this,t))),n.push(e)})),n}getAfterBody(t,e){return Fe(je(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=je(i,"beforeFooter",this,t),n=je(i,"footer",this,t),o=je(i,"afterFooter",this,t);let a=[];return a=De(a,Le(s)),a=De(a,Le(n)),a=De(a,Le(o)),a}_createItems(t){const e=this._active,i=this.chart.data,n=[],o=[],a=[];let r,c,h=[];for(r=0,c=e.length;rt.filter(e,s,n,i)))),t.itemSort&&(h=h.sort(((e,s)=>t.itemSort(e,s,i)))),(0,s.F)(h,(e=>{const i=Re(t.callbacks,e);n.push(je(i,"labelColor",this,e)),o.push(je(i,"labelPointStyle",this,e)),a.push(je(i,"labelTextColor",this,e))})),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=h,h}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Oe[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=He(this,i),a=Object.assign({},t,e),r=Ie(this.chart,i,a),c=Ee(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:c.x,y:c.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=i,{topLeft:c,topRight:h,bottomLeft:l,bottomRight:d}=(0,s.aw)(r),{x:u,y:f}=t,{width:g,height:p}=e;let m,x,b,v,_,y;return"center"===o?(_=f+p/2,"left"===n?(m=u,x=m-a,v=_+a,y=_-a):(m=u+g,x=m+a,v=_-a,y=_+a),b=m):(x="left"===n?u+Math.max(c,l)+a:"right"===n?u+g-Math.max(h,d)-a:this.caretX,"top"===o?(v=f,_=v-a,m=x-a,b=x+a):(v=f+p,_=v+a,m=x+a,b=x-a),y=v),{x1:m,x2:x,x3:b,y1:v,y2:_,y3:y}}drawTitle(t,e,i){const n=this.title,o=n.length;let a,r,c;if(o){const h=(0,s.az)(i.rtl,this.x,this.width);for(t.x=Ve(this,i.titleAlign,i),e.textAlign=h.textAlign(i.titleAlign),e.textBaseline="middle",a=(0,s.a0)(i.titleFont),r=i.titleSpacing,e.fillStyle=i.titleColor,e.font=a.string,c=0;c0!==t))?(t.beginPath(),t.fillStyle=o.multiKeyBackground,(0,s.au)(t,{x:e,y:g,w:h,h:c,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),(0,s.au)(t,{x:i,y:g+1,w:h-2,h:c-2,radius:r}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(e,g,h,c),t.strokeRect(e,g,h,c),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,c-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:c,boxWidth:h,boxPadding:l}=i,d=(0,s.a0)(i.bodyFont);let u=d.lineHeight,f=0;const g=(0,s.az)(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a);let x,b,v,_,y,w,M;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=Ve(this,m,i),e.fillStyle=i.bodyColor,(0,s.F)(this.beforeBody,p),f=r&&"right"!==m?"center"===a?h/2+l:h+2+l:0,_=0,w=n.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Oe[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=He(this,t),a=Object.assign({},i,this._size),r=Ie(e,t,a),c=Ee(t,a,r,e);s._to===c.x&&n._to===c.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,c))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const a=(0,s.E)(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=i,this.drawBackground(o,t,n,e),(0,s.aA)(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),(0,s.aC)(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,n=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),o=!(0,s.ah)(i,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,i),r=this._positionChanged(a,t),c=e||!(0,s.ah)(a,o)||r;return c&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),c}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Oe[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var We={id:"tooltip",_element:Be,positioners:Oe,afterInit(t,e,i){i&&(t.tooltip=new Be({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Ne},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};function $e(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"===typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function Ye(t){const e=this.getLabels();return t>=0&&tnull===t?null:(0,s.S)(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:$e(i,t,(0,s.v)(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let o=t;o<=e;o++)s.push({value:o});return s}getLabelForValue(t){return Ye.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!==typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Xe(t,e,{horizontal:i,minRotation:n}){const o=(0,s.t)(n),a=(i?Math.sin(o):Math.cos(o))||.001,r=.75*e*(""+t).length;return Math.min(e/a,r)}class Qe extends zt{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return(0,s.k)(t)||("number"===typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:n,max:o}=this;const a=t=>n=e?n:t,r=t=>o=i?o:t;if(t){const t=(0,s.s)(n),e=(0,s.s)(o);t<0&&e<0?r(0):t>0&&e>0&&a(0)}if(n===o){let e=0===o?1:Math.abs(.05*o);r(o+e),t||a(n-e)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:c,count:h,maxTicks:l,maxDigits:d,includeBounds:u}=t,f=o||1,g=l-1,{min:p,max:m}=e,x=!(0,s.k)(a),b=!(0,s.k)(r),v=!(0,s.k)(h),_=(m-p)/(d+1);let y,w,M,k,S=(0,s.aH)((m-p)/g/f)*f;if(S<1e-14&&!x&&!b)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=(0,s.aH)(k*S/g/f)*f),(0,s.k)(c)||(y=Math.pow(10,c),S=Math.ceil(S*y)/y),"ticks"===n?(w=Math.floor(p/S)*S,M=Math.ceil(m/S)*S):(w=p,M=m),x&&b&&o&&(0,s.aI)((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,l)),S=(r-a)/k,w=a,M=r):v?(w=x?a:w,M=b?r:M,k=h-1,S=(M-w)/k):(k=(M-w)/S,k=(0,s.aJ)(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const C=Math.max((0,s.aK)(S),(0,s.aK)(w));y=Math.pow(10,(0,s.k)(c)?C:c),w=Math.round(w*y)/y,M=Math.round(M*y)/y;let P=0;for(x&&(u&&w!==a?(i.push({value:a}),wr)break;i.push({value:t})}return b&&u&&M!==r?i.length&&(0,s.aJ)(i[i.length-1].value,r,Xe(r,_,t))?i[i.length-1].value=r:i.push({value:r}):b&&M!==r||i.push({value:M}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&(0,s.aG)(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return(0,s.o)(t,this.chart.options.locale,this.options.ticks.format)}}class qe extends Qe{static id="linear";static defaults={ticks:{callback:s.aL.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=(0,s.g)(t)?t:0,this.max=(0,s.g)(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=(0,s.t)(this.options.ticks.minRotation),n=(t?Math.sin(i):Math.cos(i))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}s.aL.formatters.logarithmic;s.aL.formatters.numeric;const Ke={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Ge=Object.keys(Ke);function Ze(t,e){return t-e}function Je(t,e){if((0,s.k)(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:a}=t._parseOpts;let r=e;return"function"===typeof n&&(r=n(r)),(0,s.g)(r)||(r="string"===typeof n?i.parse(r,n):i.parse(r)),null===r?null:(o&&(r="week"!==o||!(0,s.x)(a)&&!0!==a?i.startOf(r,o):i.startOf(r,"isoWeek",a)),+r)}function ti(t,e,i,s){const n=Ge.length;for(let o=Ge.indexOf(t);o=e?i[n]:i[o]]=!0}}else t[e]=!0}function ii(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[c].major=!0);return e}(t,s,n,i):s}class si extends zt{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),n=this._adapter=new T._date(t.adapters.date);n.init(e),(0,s.ab)(i.displayFormats,n.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Je(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:n,max:o,minDefined:a,maxDefined:r}=this.getUserBounds();function c(t){a||isNaN(t.min)||(n=Math.min(n,t.min)),r||isNaN(t.max)||(o=Math.max(o,t.max))}a&&r||(c(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||c(this.getMinMax(!1))),n=(0,s.g)(n)&&!isNaN(n)?n:+e.startOf(Date.now(),i),o=(0,s.g)(o)&&!isNaN(o)?o:+e.endOf(Date.now(),i)+1,this.min=Math.min(n,o-1),this.max=Math.max(n+1,o)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,n="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&n.length&&(this.min=this._userMin||n[0],this.max=this._userMax||n[n.length-1]);const o=this.min,a=this.max,r=(0,s.aO)(n,o,a);return this._unit=e.unit||(i.autoSkip?ti(e.minUnit,this.min,this.max,this._getLabelCapacity(o)):function(t,e,i,s,n){for(let o=Ge.length-1;o>=Ge.indexOf(i);o--){const i=Ge[o];if(Ke[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return Ge[i?Ge.indexOf(i):0]}(this,r.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=Ge.indexOf(t)+1,i=Ge.length;e+t.value)))}initOffsets(t=[]){let e,i,n=0,o=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),n=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),o=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;n=(0,s.S)(n,0,a),o=(0,s.S)(o,0,a),this._offsets={start:n,end:o,factor:1/(n+1+o)}}_generate(){const t=this._adapter,e=this.min,i=this.max,n=this.options,o=n.time,a=o.unit||ti(o.minUnit,e,i,this._getLabelCapacity(e)),r=(0,s.v)(n.ticks.stepSize,1),c="week"===a&&o.isoWeekday,h=(0,s.x)(c)||!0===c,l={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",c)),f=+t.startOf(f,h?"day":a),t.diff(i,e,a)>1e5*r)throw new Error(e+" and "+i+" are too far apart with stepSize of "+r+" "+a);const g="data"===n.ticks.source&&this.getDataTimestamps();for(d=f,u=0;d+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,n){const o=this.options,a=o.ticks.callback;if(a)return(0,s.Q)(a,[t,e,i],this);const r=o.time.displayFormats,c=this._unit,h=this._majorUnit,l=c&&r[c],d=h&&r[h],u=i[e],f=h&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:l))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t{"use strict";function s(t){return t+.5|0}i.d(e,{$:()=>ke,A:()=>Vt,B:()=>Et,C:()=>we,D:()=>Pt,E:()=>Fe,F:()=>X,G:()=>vi,H:()=>ft,I:()=>di,J:()=>wi,K:()=>yi,L:()=>$t,M:()=>li,N:()=>_t,O:()=>B,P:()=>ct,Q:()=>U,R:()=>je,S:()=>At,T:()=>ht,U:()=>St,V:()=>me,W:()=>Ht,X:()=>be,Y:()=>Me,Z:()=>Oe,_:()=>Bt,a:()=>Ne,a0:()=>Re,a1:()=>Ut,a2:()=>Xt,a3:()=>le,a4:()=>Z,a5:()=>st,a6:()=>de,a7:()=>ot,a8:()=>$e,a9:()=>We,aA:()=>Oi,aB:()=>Qt,aC:()=>Di,aD:()=>ye,aE:()=>zt,aF:()=>E,aG:()=>Mt,aH:()=>vt,aI:()=>wt,aJ:()=>bt,aK:()=>Ct,aL:()=>he,aM:()=>mt,aN:()=>xe,aO:()=>Ft,aP:()=>It,aa:()=>Ye,ab:()=>J,ac:()=>V,ad:()=>Yt,ae:()=>_i,af:()=>ve,ag:()=>at,ah:()=>Q,ai:()=>rt,aj:()=>Tt,ak:()=>Ie,al:()=>hi,am:()=>Ii,an:()=>Ti,ao:()=>ki,ap:()=>Si,aq:()=>Mi,ar:()=>Se,as:()=>Ce,at:()=>_e,au:()=>De,av:()=>Ee,aw:()=>Ve,ax:()=>Hi,ay:()=>Dt,az:()=>zi,b:()=>R,b3:()=>ut,b4:()=>gt,b5:()=>pt,c:()=>ie,d:()=>pe,e:()=>te,f:()=>it,g:()=>j,h:()=>nt,i:()=>N,j:()=>Be,k:()=>F,l:()=>Nt,m:()=>$,n:()=>Y,o:()=>re,p:()=>Lt,q:()=>qt,r:()=>Wt,s:()=>xt,t:()=>kt,u:()=>jt,v:()=>W,w:()=>Kt,x:()=>yt,y:()=>ii,z:()=>xi});const n=(t,e,i)=>Math.max(Math.min(t,i),e);function o(t){return n(s(2.55*t),0,255)}function a(t){return n(s(255*t),0,255)}function r(t){return n(s(t/2.55)/100,0,1)}function c(t){return n(s(100*t),0,100)}const h={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l=[..."0123456789ABCDEF"],d=t=>l[15&t],u=t=>l[(240&t)>>4]+l[15&t],f=t=>(240&t)>>4===(15&t);function g(t){var e=(t=>f(t.r)&&f(t.g)&&f(t.b)&&f(t.a))(t)?d:u;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const p=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function m(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function x(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function b(t,e,i){const s=m(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function v(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,c,h;return n!==o&&(h=n-o,c=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),C.transparent=[0,0,0,0]);const e=C[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const z=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const O=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,D=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function L(t,e,i){if(t){let s=v(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=y(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function A(t,e){return t?Object.assign(e||{},t):t}function H(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=a(t[3]))):(e=A(t,{r:0,g:0,b:0,a:1})).a=a(e.a),e}function T(t){return"r"===t.charAt(0)?function(t){const e=z.exec(t);let i,s,a,r=255;if(e){if(e[7]!==i){const t=+e[7];r=e[8]?o(t):n(255*t,0,255)}return i=+e[1],s=+e[3],a=+e[5],i=255&(e[2]?o(i):n(i,0,255)),s=255&(e[4]?o(s):n(s,0,255)),a=255&(e[6]?o(a):n(a,0,255)),{r:i,g:s,b:a,a:r}}}(t):M(t)}class I{constructor(t){if(t instanceof I)return t;const e=typeof t;let i;"object"===e?i=H(t):"string"===e&&(i=function(t){var e,i=t.length;return"#"===t[0]&&(4===i||5===i?e={r:255&17*h[t[1]],g:255&17*h[t[2]],b:255&17*h[t[3]],a:5===i?17*h[t[4]]:255}:7!==i&&9!==i||(e={r:h[t[1]]<<4|h[t[2]],g:h[t[3]]<<4|h[t[4]],b:h[t[5]]<<4|h[t[6]],a:9===i?h[t[7]]<<4|h[t[8]]:255})),e}(t)||P(t)||T(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=A(this._rgb);return t&&(t.a=r(t.a)),t}set rgb(t){this._rgb=H(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${r(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?g(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=v(t),i=e[0],s=c(e[1]),n=c(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${r(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,c=((a*r===-1?a:(a+r)/(1+a*r))+1)/2;n=1-c,i.r=255&c*i.r+n*s.r+.5,i.g=255&c*i.g+n*s.g+.5,i.b=255&c*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=D(r(t.r)),n=D(r(t.g)),o=D(r(t.b));return{r:a(O(s+i*(D(r(e.r))-s))),g:a(O(n+i*(D(r(e.g))-n))),b:a(O(o+i*(D(r(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new I(this.rgb)}alpha(t){return this._rgb.a=a(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=s(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return L(this._rgb,2,t),this}darken(t){return L(this._rgb,2,-t),this}saturate(t){return L(this._rgb,1,t),this}desaturate(t){return L(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=v(t);i[0]=w(i[0]+e),i=y(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function E(){}const V=(()=>{let t=0;return()=>t++})();function F(t){return null===t||"undefined"===typeof t}function R(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function N(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function j(t){return("number"===typeof t||t instanceof Number)&&isFinite(+t)}function B(t,e){return j(t)?t:e}function W(t,e){return"undefined"===typeof t?e:t}const $=(t,e)=>"string"===typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,Y=(t,e)=>"string"===typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function U(t,e,i){if(t&&"function"===typeof t.call)return t.apply(i,e)}function X(t,e,i,s){let n,o,a;if(R(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;nt,x:t=>t.x,y:t=>t.y};function it(t,e){const i=et[e]||(et[e]=function(t){const e=function(t){const e=t.split("."),i=[];let s="";for(const n of e)s+=n,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function st(t){return t.charAt(0).toUpperCase()+t.slice(1)}const nt=t=>"undefined"!==typeof t,ot=t=>"function"===typeof t,at=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function rt(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const ct=Math.PI,ht=2*ct,lt=ht+ct,dt=Number.POSITIVE_INFINITY,ut=ct/180,ft=ct/2,gt=ct/4,pt=2*ct/3,mt=Math.log10,xt=Math.sign;function bt(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function yt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function wt(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function Mt(t,e,i){let s,n,o;for(s=0,n=t.length;sc&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function It(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const Et=(t,e,i,s)=>It(t,i,s?s=>{const n=t[s][e];return nt[s][e]It(t,i,(s=>t[s][e]>=i));function Ft(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+st(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"===typeof t[i]&&t[i](...e)})),n}})})))}function jt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(Rt.forEach((e=>{delete t[e]})),delete t._chartjs)}function Bt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const Wt="undefined"===typeof window?function(t){return t()}:window.requestAnimationFrame;function $t(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,Wt.call(window,(()=>{s=!1,t.apply(e,i)})))}}function Yt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const Ut=t=>"start"===t?"left":"end"===t?"right":"center",Xt=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,Qt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function qt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,c=a.axis,{min:h,max:l,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=At(Math.min(Et(r,c,h).lo,i?s:Et(e,c,a.getPixelForValue(h)).lo),0,s-1)),o=u?At(Math.max(Et(r,a.axis,l,!0).hi+1,i?0:Et(e,c,a.getPixelForValue(l),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function Kt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}const Gt=t=>0===t||1===t,Zt=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*ht/i),Jt=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*ht/i)+1,te={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*ft),easeOutSine:t=>Math.sin(t*ft),easeInOutSine:t=>-.5*(Math.cos(ct*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Gt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Gt(t)?t:Zt(t,.075,.3),easeOutElastic:t=>Gt(t)?t:Jt(t,.075,.3),easeInOutElastic(t){const e=.1125;return Gt(t)?t:t<.5?.5*Zt(2*t,e,.45):.5+.5*Jt(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-te.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*te.easeInBounce(2*t):.5*te.easeOutBounce(2*t-1)+.5};function ee(t){if(t&&"object"===typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function ie(t){return ee(t)?t:new I(t)}function se(t){return ee(t)?t:new I(t).saturate(.5).darken(.1).hexString()}const ne=["x","y","borderWidth","radius","tension"],oe=["color","borderColor","backgroundColor"];const ae=new Map;function re(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=ae.get(i);return s||(s=new Intl.NumberFormat(t,e),ae.set(i,s)),s}(e,i).format(t)}const ce={values:t=>R(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=mt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),c={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(c,this.options.ticks.format),re(t,s,c)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(mt(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?ce.numeric.call(this,t,e,i):""}};var he={formatters:ce};const le=Object.create(null),de=Object.create(null);function ue(t,e){if(!e)return t;const i=e.split(".");for(let s=0,n=i.length;st.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>se(e.backgroundColor),this.hoverBorderColor=(t,e)=>se(e.borderColor),this.hoverColor=(t,e)=>se(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return fe(this,t,e)}get(t){return ue(this,t)}describe(t,e){return fe(de,t,e)}override(t,e){return fe(le,t,e)}route(t,e,i,s){const n=ue(this,t),o=ue(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return N(t)?Object.assign({},e,t):W(t,e)},set(t){this[a]=t}}})}apply(t){t.forEach((t=>t(this)))}}var pe=new ge({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:oe},numbers:{type:"number",properties:ne}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:he.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function me(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function xe(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let c,h,l,d,u;for(c=0;ci.length){for(c=0;c0&&t.stroke()}}function we(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let c,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),F(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),c=0;c+t||0;function Ie(t,e){const i={},s=N(e),n=s?Object.keys(e):e,o=N(t)?s?i=>W(t[i],t[e[i]]):e=>t[e]:()=>t;for(const a of n)i[a]=Te(o(a));return i}function Ee(t){return Ie(t,{top:"y",right:"x",bottom:"y",left:"x"})}function Ve(t){return Ie(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Fe(t){const e=Ee(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Re(t,e){t=t||{},e=e||pe.font;let i=W(t.size,e.size);"string"===typeof i&&(i=parseInt(i,10));let s=W(t.style,e.style);s&&!(""+s).match(Ae)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:W(t.family,e.family),lineHeight:He(W(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:W(t.weight,e.weight),string:""};return n.string=function(t){return!t||F(t.size)||F(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n}function Ne(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;ni&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Be(t,e){return Object.assign(Object.create(t),e)}function We(t,e=[""],i,s,n=(()=>t[0])){const o=i||t;"undefined"===typeof s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>We([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),"undefined"!==typeof n)return Xe(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];ot(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let c=e(o,a||s);r.delete(t),Xe(t,c)&&(c=Ze(n._scopes,n,t,c));return c}(e,r,t,i));R(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if("undefined"!==typeof o.index&&s(t))return e[o.index%e.length];if(N(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const c of i){const i=Ze(s,n,t,c);e.push($e(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Xe(e,r)&&(r=$e(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:ot(i)?i:()=>i,isIndexable:ot(s)?s:()=>s}}const Ue=(t,e)=>t?t+st(e):e,Xe=(t,e)=>N(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function qe(t,e,i){return ot(t)?t(e,i):t}const Ke=(t,e)=>!0===t?e:"string"===typeof t?it(e,t):void 0;function Ge(t,e,i,s,n){for(const o of e){const e=Ke(i,o);if(e){t.add(e);const o=qe(e._fallback,i,n);if("undefined"!==typeof o&&o!==i&&o!==s)return o}else if(!1===e&&"undefined"!==typeof s&&i!==s)return null}return!1}function Ze(t,e,i,s){const n=e._rootScopes,o=qe(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let c=Je(r,a,i,o||i,s);return null!==c&&(("undefined"===typeof o||o===i||(c=Je(r,a,o,c,s),null!==c))&&We(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(R(n)&&N(i))return i;return n||{}}(e,i,s))))}function Je(t,e,i,s,n){for(;i;)i=Ge(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if("undefined"!==typeof e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,c,h,l;for(r=0,c=s;re"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=zt(o,n),c=zt(a,o);let h=r/(r+c),l=c/(r+c);h=isNaN(h)?0:h,l=isNaN(l)?0:l;const d=s*h,u=s*l;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,c,h=ni(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;ot.ownerDocument.defaultView.getComputedStyle(t,null);const gi=["top","right","bottom","left"];function pi(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=gi[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const mi=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function xi(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=fi(i),o="border-box"===n.boxSizing,a=pi(n,"padding"),r=pi(n,"border","width"),{x:c,y:h,box:l}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,c=!1;if(mi(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,c=!0}return{x:a,y:r,box:c}}(t,i),d=a.left+(l&&r.left),u=a.top+(l&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((c-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const bi=t=>Math.round(10*t)/10;function vi(t,e,i,s){const n=fi(t),o=pi(n,"margin"),a=ui(n.maxWidth,t,"clientWidth")||dt,r=ui(n.maxHeight,t,"clientHeight")||dt,c=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=di(t);if(o){const t=o.getBoundingClientRect(),a=fi(o),r=pi(a,"border","width"),c=pi(a,"padding");e=t.width-c.width-r.width,i=t.height-c.height-r.height,s=ui(a.maxWidth,o,"clientWidth"),n=ui(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||dt,maxHeight:n||dt}}(t,e,i);let{width:h,height:l}=c;if("content-box"===n.boxSizing){const t=pi(n,"border","width"),e=pi(n,"padding");h-=e.width+t.width,l-=e.height+t.height}h=Math.max(0,h-o.width),l=Math.max(0,s?h/s:l-o.height),h=bi(Math.min(h,a,c.maxWidth)),l=bi(Math.min(l,r,c.maxHeight)),h&&!l&&(l=bi(h/2));return(void 0!==e||void 0!==i)&&s&&c.height&&l>c.height&&(l=c.height,h=bi(Math.floor(l*s))),{width:h,height:l}}function _i(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const yi=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};li()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(e){}return t}();function wi(t,e){const i=function(t,e){return fi(t).getPropertyValue(e)}(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function Mi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function ki(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function Si(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=Mi(t,n,i),r=Mi(n,o,i),c=Mi(o,e,i),h=Mi(a,r,i),l=Mi(r,c,i);return Mi(h,l,i)}const Ci=function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}},Pi=function(){return{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}};function zi(t,e,i){return t?Ci(e,i):Pi()}function Oi(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Di(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:Lt,compare:Ot,normalize:Dt}:{between:Tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ai({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i===0,style:n}}function Hi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:c,normalize:h}=Li(s),{start:l,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),c=e.length;let h,l,{start:d,end:u,loop:f}=t;if(f){for(d+=c,u+=c,h=0,l=c;hb||c(n,x,p)&&0!==r(n,x),y=()=>!b||0===r(o,p)||c(o,x,p);for(let w=l,M=l;w<=d;++w)m=e[w%a],m.skip||(p=h(m[s]),p!==x&&(b=c(p,n,o),null===v&&_()&&(v=0===r(p,n)?w:M),null!==v&&y()&&(g.push(Ai({start:v,end:w,loop:u,count:a,style:f})),v=null),M=w,x=p));return null!==v&&g.push(Ai({start:v,end:d,loop:u,count:a,style:f})),g}function Ti(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Ei(t,[{start:a,end:r,loop:o}],i,e);return Ei(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,c=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?c.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,c.skip&&(e=a)),c=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r{"use strict";i.d(e,{t1:()=>d,yP:()=>f});var s=i(96540),n=i(66118);const o="label";function a(t,e){"function"===typeof t?t(e):t&&(t.current=e)}function r(t,e){t.labels=e}function c(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o;const s=[];t.datasets=e.map((e=>{const n=t.datasets.find((t=>t[i]===e[i]));return n&&e.data&&!s.includes(n)?(s.push(n),Object.assign(n,e),n):{...e}}))}function h(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o;const i={labels:[],datasets:[]};return r(i,t.labels),c(i,t.datasets,e),i}function l(t,e){const{height:i=150,width:o=300,redraw:l=!1,datasetIdKey:d,type:u,data:f,options:g,plugins:p=[],fallbackContent:m,updateMode:x,...b}=t,v=(0,s.useRef)(null),_=(0,s.useRef)(),y=()=>{v.current&&(_.current=new n.t1(v.current,{type:u,data:h(f,d),options:g&&{...g},plugins:p}),a(e,_.current))},w=()=>{a(e,null),_.current&&(_.current.destroy(),_.current=null)};return(0,s.useEffect)((()=>{!l&&_.current&&g&&function(t,e){const i=t.options;i&&e&&Object.assign(i,e)}(_.current,g)}),[l,g]),(0,s.useEffect)((()=>{!l&&_.current&&r(_.current.config.data,f.labels)}),[l,f.labels]),(0,s.useEffect)((()=>{!l&&_.current&&f.datasets&&c(_.current.config.data,f.datasets,d)}),[l,f.datasets]),(0,s.useEffect)((()=>{_.current&&(l?(w(),setTimeout(y)):_.current.update(x))}),[l,g,f.labels,f.datasets,x]),(0,s.useEffect)((()=>{_.current&&(w(),setTimeout(y))}),[u]),(0,s.useEffect)((()=>(y(),()=>w())),[]),s.createElement("canvas",Object.assign({ref:v,role:"img",height:i,width:o},b),m)}const d=(0,s.forwardRef)(l);function u(t,e){return n.t1.register(e),(0,s.forwardRef)(((e,i)=>s.createElement(d,Object.assign({},e,{ref:i,type:t}))))}const f=u("bar",n.A6)}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3455.f9ca876de57244386773.chunk.js.LICENSE.txt b/src/web/gui/v2/3455.f9ca876de57244386773.chunk.js.LICENSE.txt deleted file mode 100644 index ebc73ef35..000000000 --- a/src/web/gui/v2/3455.f9ca876de57244386773.chunk.js.LICENSE.txt +++ /dev/null @@ -1,13 +0,0 @@ -/*! - * @kurkle/color v0.3.2 - * https://github.com/kurkle/color#readme - * (c) 2023 Jukka Kurkela - * Released under the MIT License - */ - -/*! - * Chart.js v4.4.2 - * https://www.chartjs.org - * (c) 2024 Chart.js Contributors - * Released under the MIT License - */ diff --git a/src/web/gui/v2/3621.01ee70ee9c311ac163d9.chunk.js b/src/web/gui/v2/3621.01ee70ee9c311ac163d9.chunk.js deleted file mode 100644 index 4779ee524..000000000 --- a/src/web/gui/v2/3621.01ee70ee9c311ac163d9.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="faad78fd-e5f3-4fb9-b6d3-062efb04f31c",e._sentryDebugIdIdentifier="sentry-dbid-faad78fd-e5f3-4fb9-b6d3-062efb04f31c")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3621],{63621:(e,t,n)=>{n.r(t),n.d(t,{default:()=>U});n(30067),n(93518),n(25440),n(3064),n(41393),n(98992),n(72577),n(81454),n(62953);var r=n(96540),o=n(47767),a=n(86663),s=n(26655),i=n(78969),c=n(22292),d=n(63129),u=n(71835),l=n(76201),f=n(3914),g=n(69418);const w=()=>{const e=(0,c.uW)("id"),t=(0,c.uW)("name"),n=(0,c.uW)("email"),o=(0,c.uW)("createdAt"),a=(0,c.uW)("verifiedEmail"),s=(0,c.uW)("avatarUrl"),i=(0,f.UV)("loaded"),d=(0,f.UV)("ids"),[,u,l]=(0,g.A)();(0,r.useEffect)((()=>{e&&i&&!u&&(e=>{let{avatar:t,createdAt:n,email:r,id:o,name:a,spacesCount:s,verifiedEmail:i,maxNodesCount:c}=e;if(!window.envSettings.tracking)return;if(r&&r.includes("@netdata.msdc.co"))return;if(o&&"00000000-0000-0000-0000-000000000000"===o)return;if(r&&r.includes("anonymous@netdata.cloud"))return;const d=new Date,u=d.toISOString(),l=new Date(n),f=Math.floor((d-l)/864e5);var g;window.dataLayer&&(window.dataLayer.push({event:"UserInfoAvailable",user_id:o,userIdentifier:o,userName:a,userEmail:r,userAccountCreatedAt:n,userAccountCreatedDaysAgo:f,userAvatarURL:t,userEmailVerified:i,spacesCount:s}),null!==(g=window.posthog)&&void 0!==g&&g.__loaded&&(window.posthog.identify(o),window.posthog.people.set({email:r||"unknown email",name:a,netdata_cloud_account_created_at:n,netdata_cloud_account_created_days_ago:f,spacesCount:s,maxNodesCount:c}),window.posthog.register({netdata_cloud_account_created_days_ago:f,...window.localNetdataRegistry?{...window.localNetdataRegistry.pg?{netdata_registry_person_guid:window.localNetdataRegistry.pg}:{},...window.localNetdataRegistry.mg?{netdata_registry_machine_guid:window.localNetdataRegistry.mg}:{}}:{}}),window.posthog.register_once({event_source:"cloud",netdata_cloud_account_created_at:n,netdata_cloud_account_email:r||"unknown email",netdata_cloud_account_id:o,netdata_cloud_signed_in_at:u})))})({avatar:s,createdAt:o,email:n,id:e,name:t,spacesCount:d.length,verifiedEmail:a,maxNodesCount:l})}),[e,i,u]),(0,r.useEffect)((()=>{var e;if(null!==(e=window.posthog)&&void 0!==e&&e.__loaded)try{window.posthog.onFeatureFlags((function(){window.posthog.isFeatureEnabled&&window.posthog.isFeatureEnabled("user-age-less-than-7d")&&window.posthog.startSessionRecording()}))}catch(t){}}),[])},p=()=>{var e;if(null===(e=window.posthog)||void 0===e||!e.__loaded)return;const t=(new Date).toISOString();window.posthog.register_once({event_source:"cloud",posthog_first_seen_at:t,posthog_first_distinct_id:"get_distinct_id"in window.posthog&&window.posthog.get_distinct_id()})},m=()=>(0,r.useEffect)(p,[]);var h=n(87337),y=n(9224),v=n(91069),_=n(48388),E=n(37618),b=n(33829),A=n(67276),N=n(38819),C=n(80158),S=n(79731),k=n(50876);const R=()=>{const e=(0,r.useRef)(),[,t]=(0,u.A)(),{error_msg_key:n,error_msg:o}=(0,N.PP)(),{sendLog:a}=(0,k.A)();(0,r.useEffect)((()=>{if(n&&e.current!=n){e.current=n;const r=o?(0,C.Zr)(decodeURIComponent(o)):void 0,s=(0,S.o)(n,r);t({header:"Error",text:s}),a({feature:"url-hash-error",isFailure:!0,errorMsgKey:n,message:s})}}),[e.current,n,o,t,a])},I=e=>{let{errorRetry:t,token:n,redirectUri:o}=e;const s=a.parseUrl(decodeURIComponent(t)),{url:i,query:c}=s,{redirect_uri:d}=c,u=(0,r.useRef)(!1);return u.current||(u.current=!0,window.location="".concat(i,"?token=").concat(n,"&redirect_uri=").concat(d||o)),null},U=()=>{const e=(0,c.uW)("isLoaded"),t=(0,c.uW)("isAnonymous");(0,l.A)(),m(),w(),(0,r.useEffect)((()=>{if(!E.Ay){const e=window.localStorage.getItem(A.lO.visitor);if(e)window.envSettings.visitor=e;else{const e=(0,b.A)();window.localStorage.setItem(A.lO.visitor,e),window.envSettings.visitor=e}}}),[]),(0,r.useEffect)((()=>{sessionStorage.getItem(A.yq.session)||sessionStorage.setItem(A.yq.session,(0,b.A)())}),[]),R();const n=(0,o.RQ)("/sign-in/mobile-app/*"),f=(0,o.RQ)("/sign-in/*"),g=(0,o.RQ)("/sign-up/*"),p=!!f||!!g,N=(()=>{const[,e]=(0,u.A)(),t=(0,h.KF)();return(0,r.useCallback)((function(){let{origin:n,id:r,name:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!n)return;const a=decodeURIComponent(r),c=decodeURIComponent(n);(0,y.ys)(r).then((n=>{let{data:r=[]}=n;return t(a,c,o),r.length?s.A.get(i._9).then((e=>{let{data:t}=e;return Promise.any(t.map((e=>s.A.get((0,v.t)({spaceId:e.id})).then((t=>{let{data:n}=t;return Promise.any(n.map((t=>(0,d.uQ)({roomId:t.id,spaceId:e.id}).then((n=>{let{nodes:o}=n;const a=o.find((e=>{let{id:t}=e;return r.includes(t)}));if(!a)throw new Error("can't find matching node");const{protocol:s,host:i}=window.location;return"".concat(s,"//").concat(i,"/spaces/").concat(e.slug,"/rooms/").concat(t.slug,"/nodes/").concat(a.id)})))))})))))})).catch((()=>{})):(0,y.iY)(a).then((t=>{let{data:n}=t;const{claimed:r}=n;throw e(r?{errorMsgKey:"ErrForbidden",errorMessage:"You tried to access this Node on Netdata and you don't have access to it. Please contact your Space admin to give you access to it."}:{errorMsgKey:"ErrForbidden",errorMessage:"This Node isn't connected to Netdata. Please connect it, if you have permission for it, or contact your Space admin."}),"no access"}))})).then((e=>{e&&setTimeout(location.assign(e))})).catch((()=>{}))}),[])})(),C=(0,_.A)();if(!e||C.isFetching||C.hasAccess&&!p||n)return null;const{pathname:S,search:k,hash:U}=window.location,{error_retry:D,token:x}=a.parse(U),{cloudRoute:T,redirect_uri:P,...F}=a.parse(k);if(!t&&D)return r.createElement(I,{errorRetry:D,token:x,redirectUri:P});if(!t&&p){if(T){const e=T.includes("join-callback")?decodeURI(T):T,t=Array.isArray(e)?e[0]:e;return r.createElement(o.C5,{replace:!0,to:t})}return P?(N(F),window.location.replace(decodeURIComponent(P)),null):r.createElement(o.C5,{replace:!0,to:"/spaces"})}if(E.Ay)return null;if(t&&!p){const e=U.includes("join-callback")?U:encodeURIComponent(U),t="".concat(k).concat(k?"&":"?","cloudRoute=").concat(S);return r.createElement(o.C5,{replace:!0,to:{pathname:"/sign-in",search:t,hash:e}})}return null}},87337:(e,t,n)=>{n.d(t,{xN:()=>p,vS:()=>f,YN:()=>m,KF:()=>w,iw:()=>l,rE:()=>g});n(17333),n(3064),n(41393),n(14905),n(98992),n(54520),n(72577),n(81454),n(8872),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215),n(62953);var r=n(96540),o=n(47444),a=n(47767),s=n(22292);const i=(0,o.Iz)({key:"visitedNodes",default:()=>[]});var c=n(47762),d=n(9224);const u=(0,o.K0)({key:"visitedNodeIdsValue",get:e=>t=>{let{get:n}=t;return n(i(e)).map((e=>{let{id:t}=e;return t}))}}),l=()=>{const e=(0,s.NJ)(),t=(0,o.vc)(i(e)),n=(0,o.Zs)((e=>{let{set:t}=e;return e=>{t(c.gl,{values:e.reduce(((e,t)=>({...e,[t.id]:{...t,loaded:!0}})),{}),merge:!0})}}),[]);return(0,r.useEffect)((()=>{n(t)}),[t]),(0,o.vc)(u(e))},f=e=>{const t=(0,s.NJ)(),n=(0,o.vc)(i(t)),a=(0,r.useMemo)((()=>e?n.filter((t=>t.name.toUpperCase().includes(e.toUpperCase()))):n),[n,e]);return(0,r.useMemo)((()=>a.map((e=>e.id))),[a])},g=()=>(0,o.Zs)((e=>{let{snapshot:t,set:n}=e;return async(e,r)=>{const o=await t.getPromise((0,s.Dm)("id")),{urls:a,name:u}=await t.getPromise((0,c.GN)({id:e})),l=a.filter((e=>e!==r));n((0,c.GN)({id:e,key:"urls"}),l),l.length||n(i(o),(t=>t.filter((t=>t.id!==e))));try{await(l.length?(0,d.Bz)(o,e,u,l):(0,d.sm)(o,[e])),(0,d.UL)(o,e).catch((()=>{}))}catch(f){n((0,c.GN)({id:e,key:"urls"}),a)}}}),[]),w=()=>{const{pathname:e}=(0,a.zy)(),t=(0,s.NJ)(),n=p({autoFetch:!1});return(0,o.Zs)((e=>{let{snapshot:t,set:r}=e;return async(e,o,a)=>{if(await t.getPromise((0,s.Dm)("isAnonymous")))return;const u=await t.getPromise((0,s.Dm)("id")),{urls:l,name:f}=await t.getPromise((0,c.GN)({id:e}));let g=o?[o,...l]:l;g=[...new Set([window.location.href,...g])];const w=g.length!==l.length;try{r((0,c.GN)({id:e,key:"urls"}),g),r(i(u),(t=>{const n=t.find((t=>t.id===e)),r=t.filter((t=>t.id!==e));return n?[{...n,accessCount:n.accessCount+1,lastAccessTime:(new Date).toISOString()},...r]:[{accessCount:1,id:e,lastAccessTime:(new Date).toISOString(),urls:g,name:a},...r]})),w&&await(0,d.Bz)(u,e,a||f,g),n(),await(0,d.UL)(u,e)}catch(p){r((0,c.GN)({id:e,key:"urls"}),l)}}}),[n,e,t])},p=function(){let{autoFetch:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t,isAnonymous:n}=(0,s.uW)(),[,a]=(0,o.L4)(i(t)),[c,u]=(0,r.useState)(0),l=(0,r.useCallback)((()=>{u((e=>e+1))}),[u]);return(0,r.useEffect)((()=>{if(t&&(e||c))if(n){const e=(window.visitedNodes||[]).sort(((e,t)=>new Date(t.lastAccessTime)-new Date(e.lastAccessTime)));a(e)}else(0,d.uQ)(t).then((e=>{if(!e)return;const{data:{results:t}}=e,n=t.sort(((e,t)=>new Date(t.lastAccessTime)-new Date(e.lastAccessTime)));a(n)}))}),[e,c,t,n]),l},m=()=>{const e=(0,s.NJ)(),t=i(e);return(0,o.Zs)((e=>{let{snapshot:n,set:r}=e;return async e=>{const o=(await n.getPromise((0,c.th)(e))).map((e=>e.machineGUID)),a=await n.getPromise(t),s=a.filter((e=>!o.includes(e.id)));s.length!==a.length&&r(t,s)}}),[e])}},84428:(e,t,n)=>{var r=n(78227)("iterator"),o=!1;try{var a=0,s={next:function(){return{done:!!a++}},return:function(){o=!0}};s[r]=function(){return this},Array.from(s,(function(){throw 2}))}catch(i){}e.exports=function(e,t){try{if(!t&&!o)return!1}catch(i){return!1}var n=!1;try{var a={};a[r]=function(){return{next:function(){return{done:n=!0}}}},e(a)}catch(i){}return n}},87290:(e,t,n)=>{var r=n(50516),o=n(19088);e.exports=!r&&!o&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,t,n)=>{var r=n(24475),o=n(44576);e.exports="process"===o(r.process)},16193:(e,t,n)=>{var r=n(79504),o=Error,a=r("".replace),s=String(new o("zxcasd").stack),i=/\n\s*at [^:]*:[^\n]*/,c=i.test(s);e.exports=function(e,t){if(c&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=a(e,i,"");return e}},80747:(e,t,n)=>{var r=n(66699),o=n(16193),a=n(24659),s=Error.captureStackTrace;e.exports=function(e,t,n,i){a&&(s?s(e,t):r(e,"stack",o(n,i)))}},24659:(e,t,n)=>{var r=n(79039),o=n(6980);e.exports=!r((function(){var e=new Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},77584:(e,t,n)=>{var r=n(20034),o=n(66699);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},32603:(e,t,n)=>{var r=n(655);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},10916:(e,t,n)=>{var r=n(24475),o=n(80550),a=n(94901),s=n(92796),i=n(33706),c=n(78227),d=n(87290),u=n(50516),l=n(96395),f=n(77388),g=o&&o.prototype,w=c("species"),p=!1,m=a(r.PromiseRejectionEvent),h=s("Promise",(function(){var e=i(o),t=e!==String(o);if(!t&&66===f)return!0;if(l&&(!g.catch||!g.finally))return!0;if(!f||f<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};if((n.constructor={})[w]=r,!(p=n.then((function(){}))instanceof r))return!0}return!t&&(d||u)&&!m}));e.exports={CONSTRUCTOR:h,REJECTION_EVENT:m,SUBCLASSING:p}},90537:(e,t,n)=>{var r=n(80550),o=n(84428),a=n(10916).CONSTRUCTOR;e.exports=a||!o((function(e){r.all(e).then(void 0,(function(){}))}))},17145:(e,t,n)=>{var r=n(46518),o=n(1625),a=n(42787),s=n(52967),i=n(77740),c=n(2360),d=n(66699),u=n(6980),l=n(77584),f=n(80747),g=n(72652),w=n(32603),p=n(78227)("toStringTag"),m=Error,h=[].push,y=function(e,t){var n,r=o(v,this);s?n=s(new m,r?a(this):v):(n=r?this:c(v),d(n,p,"Error")),void 0!==t&&d(n,"message",w(t)),f(n,y,n.stack,1),arguments.length>2&&l(n,arguments[2]);var i=[];return g(e,h,{that:i}),d(n,"errors",i),n};s?s(y,m):i(y,m,{name:!0});var v=y.prototype=c(m.prototype,{constructor:u(1,y),message:u(1,""),name:u(1,"AggregateError")});r({global:!0,constructor:!0,arity:2},{AggregateError:y})},30067:(e,t,n)=>{n(17145)},93518:(e,t,n)=>{var r=n(46518),o=n(69565),a=n(79306),s=n(97751),i=n(36043),c=n(1103),d=n(72652),u=n(90537),l="No one promise resolved";r({target:"Promise",stat:!0,forced:u},{any:function(e){var t=this,n=s("AggregateError"),r=i.f(t),u=r.resolve,f=r.reject,g=c((function(){var r=a(t.resolve),s=[],i=0,c=1,g=!1;d(e,(function(e){var a=i++,d=!1;c++,o(r,t,e).then((function(e){d||g||(g=!0,u(e))}),(function(e){d||g||(d=!0,s[a]=e,--c||f(new n(s,l)))}))})),--c||f(new n(s,l))}));return g.error&&f(g.value),r.promise}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3624.bfeb1fdc3057ba82ddac.chunk.js b/src/web/gui/v2/3624.bfeb1fdc3057ba82ddac.chunk.js deleted file mode 100644 index 8ac2ae235..000000000 --- a/src/web/gui/v2/3624.bfeb1fdc3057ba82ddac.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="62ed62e8-38ee-4913-9bf3-d1a56caff2f2",e._sentryDebugIdIdentifier="sentry-dbid-62ed62e8-38ee-4913-9bf3-d1a56caff2f2")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3624],{83624:(e,t,n)=>{function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){a=!0,s=e},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw s}}}}n.r(t),n.d(t,{Compression:()=>ie,PostHog:()=>$r,SurveyQuestionType:()=>Sr,SurveyType:()=>wr,default:()=>Or,posthog:()=>Or});var v={DEBUG:!1,LIB_VERSION:"1.130.1"},g=Array.isArray,_=Object.prototype,m=_.hasOwnProperty,y=_.toString,b=g||function(e){return"[object Array]"===y.call(e)},k=function(e){return"function"==typeof e},w=function(e){return e===Object(e)&&!b(e)},S=function(e){if(w(e)){for(var t in e)if(m.call(e,t))return!1;return!0}return!1},F=function(e){return void 0===e},E=function(e){return"[object String]"==y.call(e)},R=function(e){return null===e},x=function(e){return F(e)||R(e)},P=function(e){return"[object Number]"==y.call(e)},I=function(e){return"[object Boolean]"===y.call(e)},C=function(e){return e instanceof FormData},T="undefined"!=typeof window?window:void 0,$="undefined"!=typeof globalThis?globalThis:T,M=Array.prototype,O=M.forEach,q=M.indexOf,A=null==$?void 0:$.navigator,L=null==$?void 0:$.document,D=null==$?void 0:$.location,B=null==$?void 0:$.fetch,N=null!=$&&$.XMLHttpRequest&&"withCredentials"in new $.XMLHttpRequest?$.XMLHttpRequest:void 0,H=null==$?void 0:$.AbortController,j=null==A?void 0:A.userAgent,U=null!=T?T:{},W="[PostHog.js]",z={_log:function(e){if(T&&(v.DEBUG||U.POSTHOG_DEBUG)&&!F(T.console)&&T.console){for(var t=("__rrweb_original__"in T.console[e]?T.console[e].__rrweb_original__:T.console[e]),n=arguments.length,i=new Array(n>1?n-1:0),r=1;r1?t-1:0),i=1;i0&&(t[n]=e)})),t};var ie,re=function(){function e(t){return t&&(t.preventDefault=e.preventDefault,t.stopPropagation=e.stopPropagation),t}return e.preventDefault=function(){this.returnValue=!1},e.stopPropagation=function(){this.cancelBubble=!0},function(t,n,i,r,s){if(t)if(t.addEventListener&&!r)t.addEventListener(n,i,!!s);else{var o="on"+n,a=t[o];t[o]=function(t,n,i){return function(r){if(r=r||e(null==T?void 0:T.event)){var s,o=!0;k(i)&&(s=i(r));var a=n.call(t,r);return!1!==s&&!1!==a||(o=!1),o}}}(t,i,a)}else z.error("No valid element provided to register_event")}}();function se(e,t){var n=function(){if(!L)return t("document not found");var n=L.createElement("script");n.type="text/javascript",n.src=e,n.onload=function(e){return t(void 0,e)},n.onerror=function(e){return t(e)};var i,r=L.querySelectorAll("body > script");r.length>0?null===(i=r[0].parentNode)||void 0===i||i.insertBefore(n,r[0]):L.body.appendChild(n)};null!=L&&L.body?n():null==L||L.addEventListener("DOMContentLoaded",n)}!function(e){e.GZipJS="gzip-js",e.Base64="base64"}(ie||(ie={}));var oe="$people_distinct_id",ae="__alias",ue="__timers",le="$autocapture_disabled_server_side",ce="$heatmaps_enabled_server_side",de="$session_recording_enabled_server_side",he="$console_log_recording_enabled_server_side",fe="$session_recording_network_payload_capture",pe="$session_recording_canvas_recording",ve="$replay_sample_rate",ge="$replay_minimum_duration",_e="$sesid",me="$session_is_sampled",ye="$enabled_feature_flags",be="$early_access_features",ke="$stored_person_properties",we="$stored_group_properties",Se="$surveys",Fe="$flag_call_reported",Ee="$user_state",Re="$client_session_props",xe="$capture_rate_limit",Pe="$initial_campaign_params",Ie="$initial_referrer_info",Ce="$epp",Te=[oe,ae,"__cmpns",ue,de,ce,_e,ye,Ee,be,we,ke,Se,Fe,Re,xe,Pe,Ie,Ce],$e="$active_feature_flags",Me="$override_feature_flags",Oe="$feature_flag_payloads",qe=function(e){var t,n={},i=p(K(e||{}));try{for(i.s();!(t=i.n()).done;){var r=c(t.value,2),s=r[0],o=r[1];o&&(n[s]=o)}}catch(e){i.e(e)}finally{i.f()}return n},Ae=function(){function e(t){o(this,e),this.instance=t,this._override_warning=!1,this.featureFlagEventHandlers=[],this.reloadFeatureFlagsQueued=!1,this.reloadFeatureFlagsInAction=!1}return u(e,[{key:"getFlags",value:function(){return Object.keys(this.getFlagVariants())}},{key:"getFlagVariants",value:function(){var e=this.instance.get_property(ye),t=this.instance.get_property(Me);if(!t)return e||{};for(var n=Y({},e),i=Object.keys(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{};if(this.instance.decideEndpointWasHit||this.getFlags()&&this.getFlags().length>0){var n,i=this.getFlagVariants()[e],r="".concat(i),s=this.instance.get_property(Fe)||{};return!t.send_event&&"send_event"in t||e in s&&s[e].includes(r)||(b(s[e])?s[e].push(r):s[e]=[r],null===(n=this.instance.persistence)||void 0===n||n.register(l({},Fe,s)),this.instance.capture("$feature_flag_called",{$feature_flag:e,$feature_flag_response:i})),i}z.warn('getFeatureFlag for key "'+e+"\" failed. Feature flags didn't load in time.")}},{key:"getFeatureFlagPayload",value:function(e){return this.getFlagPayloads()[e]}},{key:"isFeatureEnabled",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.instance.decideEndpointWasHit||this.getFlags()&&this.getFlags().length>0)return!!this.getFeatureFlag(e,t);z.warn('isFeatureEnabled for key "'+e+"\" failed. Feature flags didn't load in time.")}},{key:"addFeatureFlagsHandler",value:function(e){this.featureFlagEventHandlers.push(e)}},{key:"removeFeatureFlagsHandler",value:function(e){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((function(t){return t!==e}))}},{key:"receivedFeatureFlags",value:function(e,t){if(this.instance.persistence){this.instance.decideEndpointWasHit=!0;var n=this.getFlagVariants(),i=this.getFlagPayloads();!function(e,t){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=e.featureFlags,a=e.featureFlagPayloads;if(o)if(b(o)){var u,c={};if(o)for(var d=0;d1&&void 0!==arguments[1]&&arguments[1],i=this.instance.get_property(be);if(i&&!n)return e(i);this.instance._send_request({transport:"XHR",url:this.instance.requestRouter.endpointFor("api","/api/early_access_features/?token=".concat(this.instance.config.token)),method:"GET",callback:function(n){var i;if(n.json){var r=n.json.earlyAccessFeatures;return null===(i=t.instance.persistence)||void 0===i||i.register(l({},be,r)),e(r)}}})}},{key:"_prepareFeatureFlagsForCallbacks",value:function(){var e=this.getFlags(),t=this.getFlagVariants();return{flags:e.filter((function(e){return t[e]})),flagVariants:Object.keys(t).filter((function(e){return t[e]})).reduce((function(e,n){return e[n]=t[n],e}),{})}}},{key:"_fireFeatureFlagsCallbacks",value:function(e){var t=this._prepareFeatureFlagsForCallbacks(),n=t.flags,i=t.flagVariants;this.featureFlagEventHandlers.forEach((function(t){return t(n,i,{errorsLoading:e})}))}},{key:"setPersonPropertiesForFlags",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.instance.get_property(ke)||{};this.instance.register(l({},ke,r(r({},n),e))),t&&this.instance.reloadFeatureFlags()}},{key:"resetPersonPropertiesForFlags",value:function(){this.instance.unregister(ke)}},{key:"setGroupPropertiesForFlags",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.instance.get_property(we)||{};0!==Object.keys(n).length&&Object.keys(n).forEach((function(t){n[t]=r(r({},n[t]),e[t]),delete e[t]})),this.instance.register(l({},we,r(r({},n),e))),t&&this.instance.reloadFeatureFlags()}},{key:"resetGroupPropertiesForFlags",value:function(e){if(e){var t=this.instance.get_property(we)||{};this.instance.register(l({},we,r(r({},t),{},l({},e,{}))))}else this.instance.unregister(we)}}]),e}();Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),Number.isInteger||(Number.isInteger=function(e){return P(e)&&isFinite(e)&&Math.floor(e)===e});var Le="0123456789abcdef",De=function(){function e(t){if(o(this,e),this.bytes=t,16!==t.length)throw new TypeError("not 128-bit length")}return u(e,[{key:"toString",value:function(){for(var e="",t=0;t>>4)+Le.charAt(15&this.bytes[t]),3!==t&&5!==t&&7!==t&&9!==t||(e+="-");if(36!==e.length)throw new Error("Invalid UUIDv7 was generated");return e}},{key:"clone",value:function(){return new e(this.bytes.slice(0))}},{key:"equals",value:function(e){return 0===this.compareTo(e)}},{key:"compareTo",value:function(e){for(var t=0;t<16;t++){var n=this.bytes[t]-e.bytes[t];if(0!==n)return Math.sign(n)}return 0}}],[{key:"fromFieldsV7",value:function(t,n,i,r){if(!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(i)||!Number.isInteger(r)||t<0||n<0||i<0||r<0||t>0xffffffffffff||n>4095||i>1073741823||r>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=t/Math.pow(2,40),s[1]=t/Math.pow(2,32),s[2]=t/Math.pow(2,24),s[3]=t/Math.pow(2,16),s[4]=t/Math.pow(2,8),s[5]=t,s[6]=112|n>>>8,s[7]=n,s[8]=128|i>>>24,s[9]=i>>>16,s[10]=i>>>8,s[11]=i,s[12]=r>>>24,s[13]=r>>>16,s[14]=r>>>8,s[15]=r,new e(s)}}]),e}(),Be=function(){function e(){o(this,e),l(this,"timestamp",0),l(this,"counter",0),l(this,"random",new je)}return u(e,[{key:"generate",value:function(){var e=this.generateOrAbort();if(F(e)){this.timestamp=0;var t=this.generateOrAbort();if(F(t))throw new Error("Could not generate UUID after timestamp reset");return t}return e}},{key:"generateOrAbort",value:function(){var e=Date.now();if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+1e4>this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return De.fromFieldsV7(this.timestamp,Math.trunc(this.counter/Math.pow(2,30)),this.counter&Math.pow(2,30)-1,this.random.nextUint32())}},{key:"resetCounter",value:function(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}}]),e}(),Ne=function(e){if("undefined"!=typeof UUIDV7_DENY_WEAK_RNG&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var t=0;t=this.buffer.length&&(Ne(this.buffer),this.cursor=0),this.buffer[this.cursor++]}}]),e}(),Ue=function(){return We().toString()},We=function(){return(He||(He=new Be)).generate()},ze="",Ge=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i;var Ve,Qe={is_supported:function(){return!!L},error:function(e){z.error("cookieStore error: "+e)},get:function(e){if(L){try{for(var t=e+"=",n=L.cookie.split(";").filter((function(e){return e.length})),i=0;i1&&void 0!==arguments[1]?arguments[1]:L;if(ze)return ze;if(!t)return"";if(["localhost","127.0.0.1"].includes(e))return"";for(var n=e.split("."),i=Math.min(n.length,8),r="dmn_chk_"+Ue(),s=new RegExp("(^|;)\\s*"+r+"=1");!ze&&i--;){var o=n.slice(i).join("."),a=r+"=1;domain=."+o;t.cookie=a,s.test(t.cookie)&&(t.cookie=a+";expires=Thu, 01 Jan 1970 00:00:00 GMT",ze=o)}return ze}(e);if(!n){var i=function(e){var t=e.match(Ge);return t?t[0]:""}(e);i!==n&&z.info("Warning: cookie subdomain discovery mismatch",i,n),n=i}return n?"; domain=."+n:""}return""}(L.location.hostname,i);if(n){var u=new Date;u.setTime(u.getTime()+24*n*60*60*1e3),s="; expires="+u.toUTCString()}r&&(o="; secure");var l=e+"="+encodeURIComponent(JSON.stringify(t))+s+"; SameSite=Lax; path=/"+a+o;return l.length>3686.4&&z.warn("cookieStore warning: large cookie, len="+l.length),L.cookie=l,l}catch(e){return}},remove:function(e,t){try{Qe.set(e,"",-1,t)}catch(e){return}}},Je=null,Ye={is_supported:function(){if(!R(Je))return Je;var e=!0;if(F(T))e=!1;else try{var t="__mplssupport__";Ye.set(t,"xyz"),'"xyz"'!==Ye.get(t)&&(e=!1),Ye.remove(t)}catch(t){e=!1}return e||z.error("localStorage unsupported; falling back to cookie store"),Je=e,e},error:function(e){z.error("localStorage error: "+e)},get:function(e){try{return null==T?void 0:T.localStorage.getItem(e)}catch(e){Ye.error(e)}return null},parse:function(e){try{return JSON.parse(Ye.get(e))||{}}catch(e){}return null},set:function(e,t){try{null==T||T.localStorage.setItem(e,JSON.stringify(t))}catch(e){Ye.error(e)}},remove:function(e){try{null==T||T.localStorage.removeItem(e)}catch(e){Ye.error(e)}}},Xe=["distinct_id",_e,me,Ce],Ke=r(r({},Ye),{},{parse:function(e){try{var t={};try{t=Qe.parse(e)||{}}catch(e){}var n=Y(t,JSON.parse(Ye.get(e)||"{}"));return Ye.set(e,n),n}catch(e){}return null},set:function(e,t,n,i,r){try{Ye.set(e,t);var s={};Xe.forEach((function(e){t[e]&&(s[e]=t[e])})),Object.keys(s).length&&Qe.set(e,s,n,i,r)}catch(e){Ye.error(e)}},remove:function(e,t){try{null==T||T.localStorage.removeItem(e),Qe.remove(e,t)}catch(e){Ye.error(e)}}}),Ze={},et={is_supported:function(){return!0},error:function(e){z.error("memoryStorage error: "+e)},get:function(e){return Ze[e]||null},parse:function(e){return Ze[e]||null},set:function(e,t){Ze[e]=t},remove:function(e){delete Ze[e]}},tt=null,nt={is_supported:function(){if(!R(tt))return tt;if(tt=!0,F(T))tt=!1;else try{var e="__support__";nt.set(e,"xyz"),'"xyz"'!==nt.get(e)&&(tt=!1),nt.remove(e)}catch(e){tt=!1}return tt},error:function(e){z.error("sessionStorage error: ",e)},get:function(e){try{return null==T?void 0:T.sessionStorage.getItem(e)}catch(e){nt.error(e)}return null},parse:function(e){try{return JSON.parse(nt.get(e))||null}catch(e){}return null},set:function(e,t){try{null==T||T.sessionStorage.setItem(e,JSON.stringify(t))}catch(e){nt.error(e)}},remove:function(e){try{null==T||T.sessionStorage.removeItem(e)}catch(e){nt.error(e)}}},it=["localhost","127.0.0.1"],rt=function(e){var t=null==L?void 0:L.createElement("a");return F(t)?null:(t.href=e,t)},st=function(e,t){for(var n,i=((e.split("#")[0]||"").split("?")[1]||"").split("&"),r=0;r=3&&(t=F(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+lt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+lt+")","i"),function(e){if(e&&e[2]){var t=[e[2],e[3],e[4]||"0"];return[lt,t.join(".")]}return[lt,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,function(e){var t=["Mac OS X",""];if(e&&e[1]){var n=[e[1],e[2],e[3]||"0"];t[1]=n.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[kt,""]],[/Linux|debian/i,["Linux",""]]],en=function(e){return Qt.test(e)?Tt:Vt.test(e)?$t:Gt.test(e)?Mt:new RegExp(Bt,"i").test(e)?Bt:new RegExp("("+Lt+"|WPDesktop)","i").test(e)?Lt:/iPad/.test(e)?ht:/iPod/.test(e)?"iPod Touch":/iPhone/.test(e)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(e)?pt:Jt.test(e)?gt:/(kobo)\s(ereader|touch)/i.test(e)?"Kobo":new RegExp(Dt,"i").test(e)?Dt:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(e)||/(kf[a-z]+)( bui|\)).+silk\//i.test(e)?"Kindle Fire":/(Android|ZTE)/i.test(e)?!new RegExp(at).test(e)||/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(e)?/pixel[\daxl ]{1,6}/i.test(e)&&!/pixel c/i.test(e)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(e)||/lmy47v/i.test(e)&&!/QTAQZ3/i.test(e)?lt:dt:lt:new RegExp("(pda|"+at+")","i").test(e)?Ht:new RegExp(ct,"i").test(e)&&!new RegExp(ct+" pc","i").test(e)?jt:""},tn="https?://(.*)",nn=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gclid","gad_source","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","mc_cid","igshid","ttclid"],rn={campaignParams:function(e){var t=nn.concat(e||[]),n={};return J(t,(function(e){var t=L?st(L.URL,e):"";t.length&&(n[e]=t)})),n},searchEngine:function(){var e=null==L?void 0:L.referrer;return e?0===e.search(tn+"google.([^/?]*)")?"google":0===e.search(tn+"bing.com")?"bing":0===e.search(tn+"yahoo.com")?"yahoo":0===e.search(tn+"duckduckgo.com")?"duckduckgo":null:null},searchInfo:function(){var e=rn.searchEngine(),t="yahoo"!=e?"q":"p",n={};if(!R(e)){n.$search_engine=e;var i=L?st(L.referrer,t):"";i.length&&(n.ph_keyword=i)}return n},browser:Xt,browserVersion:function(e,t){var n=Xt(e,t),i=Kt[n];if(F(i))return null;for(var r=0;r1e3?j.substring(0,997)+"...":j,$browser_version:rn.browserVersion(j,navigator.vendor),$browser_language:rn.browserLanguage(),$screen_height:null==T?void 0:T.screen.height,$screen_width:null==T?void 0:T.screen.width,$viewport_height:null==T?void 0:T.innerHeight,$viewport_width:null==T?void 0:T.innerWidth,$lib:"web",$lib_version:v.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Z()/1e3})},people_properties:function(){if(!j)return{};var e=c(rn.os(j),2),t=e[0],n=e[1];return Y(ne({$os:t,$os_version:n,$browser:rn.browser(j,navigator.vendor)}),{$browser_version:rn.browserVersion(j,navigator.vendor)})}},sn=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],on=function(){function e(t){o(this,e),this.config=t,this.props={},this.campaign_params_saved=!1,this.name=function(e){var t="";return e.token&&(t=e.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),e.persistence_name?"ph_"+e.persistence_name:"ph_"+t+"_posthog"}(t),this.storage=this.buildStorage(t),this.load(),this.update_config(t,t),this.save()}return u(e,[{key:"buildStorage",value:function(e){-1===sn.indexOf(e.persistence.toLowerCase())&&(z.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var t=e.persistence.toLowerCase();return"localstorage"===t&&Ye.is_supported()?Ye:"localstorage+cookie"===t&&Ke.is_supported()?Ke:"sessionstorage"===t&&nt.is_supported()?nt:"memory"===t?et:"cookie"===t?Qe:Ke.is_supported()?Ke:Qe}},{key:"properties",value:function(){var e={};return J(this.props,(function(t,n){if(n===ye&&w(t))for(var i=Object.keys(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{};o(this,e),l(this,"bucketSize",100),l(this,"refillRate",10),l(this,"mutationBuckets",{}),l(this,"loggedTracker",{}),l(this,"refillBuckets",(function(){Object.keys(r.mutationBuckets).forEach((function(e){r.mutationBuckets[e]=r.mutationBuckets[e]+r.refillRate,r.mutationBuckets[e]>=r.bucketSize&&delete r.mutationBuckets[e]}))})),l(this,"getNodeOrRelevantParent",(function(e){var t=r.rrweb.mirror.getNode(e);if("svg"!==(null==t?void 0:t.nodeName)&&t instanceof Element){var n=t.closest("svg");if(n)return[r.rrweb.mirror.getId(n),n]}return[e,t]})),l(this,"numberOfChanges",(function(e){var t,n,i,r,s,o,a,u;return(null!==(t=null===(n=e.removes)||void 0===n?void 0:n.length)&&void 0!==t?t:0)+(null!==(i=null===(r=e.attributes)||void 0===r?void 0:r.length)&&void 0!==i?i:0)+(null!==(s=null===(o=e.texts)||void 0===o?void 0:o.length)&&void 0!==s?s:0)+(null!==(a=null===(u=e.adds)||void 0===u?void 0:u.length)&&void 0!==a?a:0)})),l(this,"throttleMutations",(function(e){if(3!==e.type||0!==e.data.source)return e;var t=e.data,n=r.numberOfChanges(t);t.attributes&&(t.attributes=t.attributes.filter((function(e){var t,n,i,s=c(r.getNodeOrRelevantParent(e.id),2),o=s[0],a=s[1];return 0!==r.mutationBuckets[o]&&(r.mutationBuckets[o]=null!==(t=r.mutationBuckets[o])&&void 0!==t?t:r.bucketSize,r.mutationBuckets[o]=Math.max(r.mutationBuckets[o]-1,0),0===r.mutationBuckets[o]&&(r.loggedTracker[o]||(r.loggedTracker[o]=!0,null===(n=(i=r.options).onBlockedNode)||void 0===n||n.call(i,o,a))),e)})));var i=r.numberOfChanges(t);return 0!==i||n===i?e:void 0})),this.rrweb=t,this.options=s,this.refillRate=null!==(n=this.options.refillRate)&&void 0!==n?n:this.refillRate,this.bucketSize=null!==(i=this.options.bucketSize)&&void 0!==i?i:this.bucketSize,setInterval((function(){r.refillBuckets()}),1e3)})),cn=function(e){return e[e.DomContentLoaded=0]="DomContentLoaded",e[e.Load=1]="Load",e[e.FullSnapshot=2]="FullSnapshot",e[e.IncrementalSnapshot=3]="IncrementalSnapshot",e[e.Meta=4]="Meta",e[e.Custom=5]="Custom",e[e.Plugin=6]="Plugin",e}(cn||{});function dn(e){return e?V(e).split(/\s+/):[]}function hn(e){var t="";switch(s(e.className)){case"string":t=e.className;break;case"object":t=("baseVal"in e.className?e.className.baseVal:null)||e.getAttribute("class")||"";break;default:t=""}return dn(t)}function fn(e){return x(e)?null:V(e).split(/(\s+)/).filter((function(e){return Cn(e)})).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function pn(e){var t="";return wn(e)&&!Sn(e)&&e.childNodes&&e.childNodes.length&&J(e.childNodes,(function(e){var n;_n(e)&&e.textContent&&(t+=null!==(n=fn(e.textContent))&&void 0!==n?n:"")})),V(t)}function vn(e){return!!e&&1===e.nodeType}function gn(e,t){return!!e&&!!e.tagName&&e.tagName.toLowerCase()===t.toLowerCase()}function _n(e){return!!e&&3===e.nodeType}function mn(e){return!!e&&11===e.nodeType}var yn=["a","button","form","input","select","textarea","label"];function bn(e){var t=e.parentNode;return!(!t||!vn(t))&&t}function kn(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;if(!T||!e||gn(e,"html")||!vn(e))return!1;if(null!=n&&n.url_allowlist){var o=T.location.href,a=n.url_allowlist;if(a&&!a.some((function(e){return o.match(e)})))return!1}if(null!=n&&n.dom_event_allowlist){var u=n.dom_event_allowlist;if(u&&!u.some((function(e){return t.type===e})))return!1}for(var l=!1,c=[e],d=!0,h=e;h.parentNode&&!gn(h,"body");)if(mn(h.parentNode))c.push(h.parentNode.host),h=h.parentNode.host;else{if(!(d=bn(h)))break;if(i||yn.indexOf(d.tagName.toLowerCase())>-1)l=!0;else{var f=T.getComputedStyle(d);f&&"pointer"===f.getPropertyValue("cursor")&&(l=!0)}c.push(d),h=d}if(!function(e,t){var n=null==t?void 0:t.element_allowlist;if(F(n))return!0;var i,r=p(e);try{var o=function(){var e=i.value;if(n.some((function(t){return e.tagName.toLowerCase()===t})))return{v:!0}};for(r.s();!(i=r.n()).done;){var a=o();if("object"===s(a))return a.v}}catch(e){r.e(e)}finally{r.f()}return!1}(c,n))return!1;if(!function(e,t){var n=null==t?void 0:t.css_selector_allowlist;if(F(n))return!0;var i,r=p(e);try{var o=function(){var e=i.value;if(n.some((function(t){return e.matches(t)})))return{v:!0}};for(r.s();!(i=r.n()).done;){var a=o();if("object"===s(a))return a.v}}catch(e){r.e(e)}finally{r.f()}return!1}(c,n))return!1;var v=T.getComputedStyle(e);if(v&&"pointer"===v.getPropertyValue("cursor")&&"click"===t.type)return!0;var g=e.tagName.toLowerCase();switch(g){case"html":return!1;case"form":return(r||["submit"]).indexOf(t.type)>=0;case"input":case"select":case"textarea":return(r||["change","click"]).indexOf(t.type)>=0;default:return l?(r||["click"]).indexOf(t.type)>=0:(r||["click"]).indexOf(t.type)>=0&&(yn.indexOf(g)>-1||"true"===e.getAttribute("contenteditable"))}}function wn(e){for(var t=e;t.parentNode&&!gn(t,"body");t=t.parentNode){var n=hn(t);if(X(n,"ph-sensitive")||X(n,"ph-no-capture"))return!1}if(X(hn(e),"ph-include"))return!0;var i=e.type||"";if(E(i))switch(i.toLowerCase()){case"hidden":case"password":return!1}var r=e.name||e.id||"";return!E(r)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(r.replace(/[^a-zA-Z0-9]/g,""))}function Sn(e){return!!(gn(e,"input")&&!["button","checkbox","submit","reset"].includes(e.type)||gn(e,"select")||gn(e,"textarea")||"true"===e.getAttribute("contenteditable"))}var Fn="(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11})",En=new RegExp("^(?:".concat(Fn,")$")),Rn=new RegExp(Fn),xn="\\d{3}-?\\d{2}-?\\d{4}",Pn=new RegExp("^(".concat(xn,")$")),In=new RegExp("(".concat(xn,")"));function Cn(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(x(e))return!1;if(E(e)){if(e=V(e),(t?En:Rn).test((e||"").replace(/[- ]/g,"")))return!1;if((t?Pn:In).test(e))return!1}return!0}function Tn(e){var t=pn(e);return Cn(t="".concat(t," ").concat($n(e)).trim())?t:""}function $n(e){var t="";return e&&e.childNodes&&e.childNodes.length&&J(e.childNodes,(function(e){var n;if(e&&"span"===(null===(n=e.tagName)||void 0===n?void 0:n.toLowerCase()))try{var i=pn(e);t="".concat(t," ").concat(i).trim(),e.childNodes&&e.childNodes.length&&(t="".concat(t," ").concat($n(e)).trim())}catch(e){z.error(e)}})),t}function Mn(e){return function(e){var t=e.map((function(e){var t,n,i="";if(e.tag_name&&(i+=e.tag_name),e.attr_class){e.attr_class.sort();var s,o=p(e.attr_class);try{for(o.s();!(s=o.n()).done;){var a=s.value;i+=".".concat(a.replace(/"/g,""))}}catch(e){o.e(e)}finally{o.f()}}var u=r(r(r(r({},e.text?{text:e.text}:{}),{},{"nth-child":null!==(t=e.nth_child)&&void 0!==t?t:0,"nth-of-type":null!==(n=e.nth_of_type)&&void 0!==n?n:0},e.href?{href:e.href}:{}),e.attr_id?{attr_id:e.attr_id}:{}),e.attributes),l={};return K(u).sort((function(e,t){var n=c(e,1)[0],i=c(t,1)[0];return n.localeCompare(i)})).forEach((function(e){var t=c(e,2),n=t[0],i=t[1];return l[On(n.toString())]=On(i.toString())})),(i+=":")+K(u).map((function(e){var t=c(e,2),n=t[0],i=t[1];return"".concat(n,'="').concat(i,'"')})).join("")}));return t.join(";")}(function(e){return e.map((function(e){var t,n,i={text:null===(t=e.$el_text)||void 0===t?void 0:t.slice(0,400),tag_name:e.tag_name,href:null===(n=e.attr__href)||void 0===n?void 0:n.slice(0,2048),attr_class:qn(e),attr_id:e.attr__id,nth_child:e.nth_child,nth_of_type:e.nth_of_type,attributes:{}};return K(e).filter((function(e){return 0===c(e,1)[0].indexOf("attr__")})).forEach((function(e){var t=c(e,2),n=t[0],r=t[1];return i.attributes[n]=r})),i}))}(e))}function On(e){return e.replace(/"|\\"/g,'\\"')}function qn(e){var t=e.attr__class;return t?b(t)?t:dn(t):void 0}var An="[SessionRecording]",Ln={initiatorTypes:["audio","beacon","body","css","early-hint","embed","fetch","frame","iframe","icon","image","img","input","link","navigation","object","ping","script","track","video","xmlhttprequest"],maskRequestFn:function(e){return e},recordHeaders:!1,recordBody:!1,recordInitialRequests:!1,recordPerformance:!1,performanceEntryTypeToObserve:["first-input","navigation","paint","resource"],payloadSizeLimitBytes:1e6},Dn=["authorization","x-forwarded-for","authorization","cookie","set-cookie","x-api-key","x-real-ip","remote-addr","forwarded","proxy-authorization","x-csrf-token","x-csrftoken","x-xsrf-token"],Bn=["password","secret","passwd","api_key","apikey","auth","credentials","mysql_pwd","privatekey","private_key","token"],Nn=["/s/","/e/","/i/"];function Hn(e,t,n,i){if(x(e))return e;var r=(null==t?void 0:t["content-length"])||function(e){return new Blob([e]).size}(e);return E(r)&&(r=parseInt(r)),r>n?An+" ".concat(i," body too large to record (").concat(r," bytes)"):e}function jn(e,t){if(x(e))return e;var n=e;return Cn(n,!1)||(n=An+" "+t+" body redacted"),J(Bn,(function(e){var i,r;null!==(i=n)&&void 0!==i&&i.length&&-1!==(null===(r=n)||void 0===r?void 0:r.indexOf(e))&&(n=An+" "+t+" body redacted as might contain: "+e)})),n}var Un="__ph_opt_in_out_";function Wn(e,t){Kn(!0,e,t)}function zn(e,t){Kn(!1,e,t)}function Gn(e,t){return"1"===Xn(e,t)}function Vn(e,t){return!!function(e){if(e&&e.respectDnt){var t=e&&e.window||T,n=null==t?void 0:t.navigator,i=!1;return J([null==n?void 0:n.doNotTrack,n.msDoNotTrack,t.doNotTrack],(function(e){X([!0,1,"1","yes"],e)&&(i=!0)})),i}return!1}(t)||"0"===Xn(e,t)}function Qn(e,t){Jn(t=t||{}).remove(Yn(e,t),!!t.crossSubdomainCookie)}function Jn(e){return"localStorage"===(e=e||{}).persistenceType?Ye:"localStorage+cookie"===e.persistenceType?Ke:Qe}function Yn(e,t){return((t=t||{}).persistencePrefix||Un)+e}function Xn(e,t){return Jn(t).get(Yn(e,t))}function Kn(e,t,n){E(t)&&t.length?(Jn(n=n||{}).set(Yn(t,n),e?1:0,P(n.cookieExpiration)?n.cookieExpiration:null,n.crossSubdomainCookie,n.secureCookie),n.capture&&e&&n.capture(n.captureEventName||"$opt_in",n.captureProperties||{},{send_instantly:!0})):z.error("gdpr."+(e?"optIn":"optOut")+" called with an invalid token")}function Zn(e){var t=!1;try{var n=e.config.token,i=e.config.respect_dnt,r=e.config.opt_out_capturing_persistence_type,s=e.config.opt_out_capturing_cookie_prefix||void 0,o=e.config.window;n&&(t=Vn(n,{respectDnt:i,persistenceType:r,persistencePrefix:s,window:o}))}catch(e){z.error("Unexpected error when checking capturing opt-out status: "+e)}return t}var ei,ti=3e5,ni=ti;!function(e){e[e.Mutation=0]="Mutation",e[e.MouseMove=1]="MouseMove",e[e.MouseInteraction=2]="MouseInteraction",e[e.Scroll=3]="Scroll",e[e.ViewportResize=4]="ViewportResize",e[e.Input=5]="Input",e[e.TouchMove=6]="TouchMove",e[e.MediaInteraction=7]="MediaInteraction",e[e.StyleSheetRule=8]="StyleSheetRule",e[e.CanvasMutation=9]="CanvasMutation",e[e.Font=10]="Font",e[e.Log=11]="Log",e[e.Drag=12]="Drag",e[e.StyleDeclaration=13]="StyleDeclaration",e[e.Selection=14]="Selection",e[e.AdoptedStyleSheet=15]="AdoptedStyleSheet"}(ei||(ei={}));var ii=[ei.MouseMove,ei.MouseInteraction,ei.Scroll,ei.ViewportResize,ei.Input,ei.TouchMove,ei.MediaInteraction,ei.Drag],ri=function(e){return{rrwebMethod:e,enqueuedAt:Date.now(),attempt:1}},si="[SessionRecording]",oi=function(){function e(t){var n=this;if(o(this,e),l(this,"queuedRRWebEvents",[]),l(this,"isIdle",!1),l(this,"_linkedFlagSeen",!1),l(this,"_lastActivityTimestamp",Date.now()),l(this,"windowId",null),l(this,"sessionId",null),l(this,"_linkedFlag",null),l(this,"_forceAllowLocalhostNetworkCapture",!1),l(this,"_samplingSessionListener",null),this.instance=t,this._captureStarted=!1,this._endpoint="/s/",this.stopRrweb=void 0,this.receivedDecide=!1,null==T||T.addEventListener("beforeunload",(function(){n._flushBuffer()})),null==T||T.addEventListener("offline",(function(){n._tryAddCustomEvent("browser offline",{})})),null==T||T.addEventListener("online",(function(){n._tryAddCustomEvent("browser online",{})})),null==T||T.addEventListener("visibilitychange",(function(){if(null!=L&&L.visibilityState){var e="window "+L.visibilityState;n._tryAddCustomEvent(e,{})}})),!this.instance.sessionManager)throw z.error(si+" started without valid sessionManager"),new Error(si+" started without valid sessionManager. This is a bug.");this.buffer=this.clearBuffer(),this._setupSampling()}return u(e,[{key:"rrwebRecord",get:function(){var e;return null==U||null===(e=U.rrweb)||void 0===e?void 0:e.record}},{key:"started",get:function(){return this._captureStarted}},{key:"sessionManager",get:function(){if(!this.instance.sessionManager)throw z.error(si+" started without valid sessionManager"),new Error(si+" started without valid sessionManager. This is a bug.");return this.instance.sessionManager}},{key:"isSampled",get:function(){var e=this.instance.get_property(me);return I(e)?e:null}},{key:"sessionDuration",get:function(){var e,t,n=null===(e=this.buffer)||void 0===e?void 0:e.data[(null===(t=this.buffer)||void 0===t?void 0:t.data.length)-1],i=this.sessionManager.checkAndGetSessionAndWindowId(!0).sessionStartTimestamp;return n?n.timestamp-i:null}},{key:"isRecordingEnabled",get:function(){var e=!!this.instance.get_property(de),t=!this.instance.config.disable_session_recording;return T&&e&&t}},{key:"isConsoleLogCaptureEnabled",get:function(){var e=!!this.instance.get_property(he),t=this.instance.config.enable_recording_console_log;return null!=t?t:e}},{key:"canvasRecording",get:function(){var e=this.instance.get_property(pe);return e&&e.fps&&e.quality?{enabled:e.enabled,fps:e.fps,quality:e.quality}:void 0}},{key:"networkPayloadCapture",get:function(){var e,t,n=this.instance.get_property(fe),i={recordHeaders:null===(e=this.instance.config.session_recording)||void 0===e?void 0:e.recordHeaders,recordBody:null===(t=this.instance.config.session_recording)||void 0===t?void 0:t.recordBody},r=(null==i?void 0:i.recordHeaders)||(null==n?void 0:n.recordHeaders),s=(null==i?void 0:i.recordBody)||(null==n?void 0:n.recordBody),o=this.instance.config.capture_performance||(null==n?void 0:n.capturePerformance);return r||s||o?{recordHeaders:r,recordBody:s,recordPerformance:o}:void 0}},{key:"sampleRate",get:function(){var e=this.instance.get_property(ve);return P(e)?e:null}},{key:"minimumDuration",get:function(){var e=this.instance.get_property(ge);return P(e)?e:null}},{key:"status",get:function(){return this.receivedDecide?this.isRecordingEnabled?x(this._linkedFlag)||this._linkedFlagSeen?I(this.isSampled)?this.isSampled?"sampled":"disabled":"active":"buffering":"disabled":"buffering"}},{key:"startIfEnabledOrStop",value:function(){this.isRecordingEnabled?(this._startCapture(),z.info(si+" started")):(this.stopRecording(),this.clearBuffer())}},{key:"stopRecording",value:function(){this._captureStarted&&this.stopRrweb&&(this.stopRrweb(),this.stopRrweb=void 0,this._captureStarted=!1,z.info(si+" stopped"))}},{key:"makeSamplingDecision",value:function(e){var t,n=this.sessionId!==e,i=this.sampleRate;if(P(i)){var r,s=this.isSampled,o=n||!I(s);!(r=o?Math.random()1&&void 0!==arguments[1]?arguments[1]:"log";null===(t=this.instance.sessionRecording)||void 0===t||t.onRRwebEmit({type:6,data:{plugin:"rrweb/console@1",payload:{level:n,trace:[],payload:[JSON.stringify(e)]}},timestamp:Z()})}},{key:"_startCapture",value:function(){var e=this;F(Object.assign)||this._captureStarted||this.instance.config.disable_session_recording||Zn(this.instance)||(this._captureStarted=!0,this.sessionManager.checkAndGetSessionAndWindowId(),this.rrwebRecord?this._onScriptLoaded():se(this.instance.requestRouter.endpointFor("assets","/static/recorder.js?v=".concat(v.LIB_VERSION)),(function(t){if(t)return z.error(si+" could not load recorder.js",t);e._onScriptLoaded()})))}},{key:"isInteractiveEvent",value:function(e){var t;return 3===e.type&&-1!==ii.indexOf(null===(t=e.data)||void 0===t?void 0:t.source)}},{key:"_updateWindowAndSessionIds",value:function(e){var t=this.isInteractiveEvent(e);t||this.isIdle||e.timestamp-this._lastActivityTimestamp>ni&&(this.isIdle=!0,this._tryAddCustomEvent("sessionIdle",{reason:"user inactivity",timeSinceLastActive:e.timestamp-this._lastActivityTimestamp,threshold:ni}));var n=!1;if(t&&(this._lastActivityTimestamp=e.timestamp,this.isIdle&&(this.isIdle=!1,this._tryAddCustomEvent("sessionNoLongerIdle",{reason:"user activity",type:e.type}),n=!0)),!this.isIdle){var i=this.sessionManager.checkAndGetSessionAndWindowId(!t,e.timestamp),r=i.windowId,s=i.sessionId,o=this.sessionId!==s,a=this.windowId!==r;this.windowId=r,this.sessionId=s,(n||-1===[an,un].indexOf(e.type)&&(a||o))&&this._tryTakeFullSnapshot()}}},{key:"_tryRRWebMethod",value:function(e){try{return e.rrwebMethod(),!0}catch(r){return this.queuedRRWebEvents.length<10?this.queuedRRWebEvents.push({enqueuedAt:e.enqueuedAt||Date.now(),attempt:e.attempt++,rrwebMethod:e.rrwebMethod}):z.warn(si+" could not emit queued rrweb event.",r,e),!1}}},{key:"_tryAddCustomEvent",value:function(e,t){var n=this;return this._tryRRWebMethod(ri((function(){return n.rrwebRecord.addCustomEvent(e,t)})))}},{key:"_tryTakeFullSnapshot",value:function(){var e=this;return this._tryRRWebMethod(ri((function(){return e.rrwebRecord.takeFullSnapshot()})))}},{key:"_onScriptLoaded",value:function(){for(var e,t=this,n={blockClass:"ph-no-capture",blockSelector:void 0,ignoreClass:"ph-ignore-input",maskTextClass:"ph-mask",maskTextSelector:void 0,maskTextFn:void 0,maskAllInputs:!0,maskInputOptions:{},maskInputFn:void 0,slimDOMOptions:{},collectFonts:!1,inlineStylesheet:!0,recordCrossOriginIframes:!1},i=this.instance.config.session_recording,s=0,o=Object.entries(i||{});s10&&(t.data.payload.payload=t.data.payload.payload.slice(0,10),t.data.payload.payload.push("...[truncated]"));for(var n=[],i=0;i2e3?n.push(t.data.payload.payload[i].slice(0,2e3)+"...[truncated]"):n.push(t.data.payload.payload[i]);return t.data.payload.payload=n,e}return e}(n),r=JSON.stringify(i).length;if(this._updateWindowAndSessionIds(i),!this.isIdle||i.type===cn.Custom){var s={$snapshot_bytes:r,$snapshot_data:i,$session_id:this.sessionId,$window_id:this.windowId};"disabled"!==this.status?this._captureSnapshotBuffered(s):this.clearBuffer()}}}}},{key:"_pageViewFallBack",value:function(){if(!this.instance.config.capture_pageview&&T){var e=this._maskUrl(T.location.href);this._lastHref!==e&&(this._tryAddCustomEvent("$url_changed",{href:e}),this._lastHref=e)}}},{key:"_processQueuedEvents",value:function(){var e=this;if(this.queuedRRWebEvents.length){var t=d(this.queuedRRWebEvents);this.queuedRRWebEvents=[],t.forEach((function(n){Date.now()-n.enqueuedAt>2e3?e._tryAddCustomEvent("rrwebQueueTimeout",{enqueuedAt:n.enqueuedAt,attempt:n.attempt,queueLength:t.length}):e._tryRRWebMethod(n)&&e._tryAddCustomEvent("rrwebQueueSuccess",{enqueuedAt:n.enqueuedAt,attempt:n.attempt,queueLength:t.length})}))}}},{key:"_maskUrl",value:function(e){var t=this.instance.config.session_recording;if(t.maskNetworkRequestFn){var n,i={url:e};return null===(n=i=t.maskNetworkRequestFn(i))||void 0===n?void 0:n.url}return e}},{key:"clearBuffer",value:function(){return this.buffer=void 0,{size:0,data:[],sessionId:this.sessionId,windowId:this.windowId}}},{key:"_flushBuffer",value:function(){var e=this;this.flushBufferTimer&&(clearTimeout(this.flushBufferTimer),this.flushBufferTimer=void 0);var t=this.minimumDuration,n=this.sessionDuration,i=P(n)&&n>=0,r=P(t)&&i&&n943718.4||this.buffer.sessionId&&this.buffer.sessionId!==this.sessionId)&&(this.buffer=this._flushBuffer()),R(this.buffer.sessionId)&&!R(this.sessionId)&&(this.buffer.sessionId=this.sessionId,this.buffer.windowId=this.windowId),this.buffer.size+=e.$snapshot_bytes,this.buffer.data.push(e.$snapshot_data),this.flushBufferTimer||(this.flushBufferTimer=setTimeout((function(){n._flushBuffer()}),2e3))}},{key:"_captureSnapshot",value:function(e){this.instance.capture("$snapshot",e,{_url:this.instance.requestRouter.endpointFor("api",this._endpoint),_noTruncate:!0,_batchKey:"recordings",_noHeatmaps:!0})}}]),e}(),ai=function(){function e(t){o(this,e),this.instance=t,this.instance.decideEndpointWasHit=this.instance._hasBootstrappedFeatureFlags()}return u(e,[{key:"call",value:function(){var e=this,t={token:this.instance.config.token,distinct_id:this.instance.get_distinct_id(),groups:this.instance.getGroups(),person_properties:this.instance.get_property(ke),group_properties:this.instance.get_property(we),disable_flags:this.instance.config.advanced_disable_feature_flags||this.instance.config.advanced_disable_feature_flags_on_first_load||void 0};this.instance._send_request({method:"POST",url:this.instance.requestRouter.endpointFor("api","/decide/?v=3"),data:t,compression:this.instance.config.disable_compression?void 0:ie.Base64,timeout:this.instance.config.feature_flag_request_timeout_ms,callback:function(t){return e.parseDecideResponse(t.json)}})}},{key:"parseDecideResponse",value:function(e){var t=this;this.instance.featureFlags.setReloadingPaused(!1),this.instance.featureFlags._startReloadTimer();var n=!e;if(this.instance.config.advanced_disable_feature_flags_on_first_load||this.instance.config.advanced_disable_feature_flags||this.instance.featureFlags.receivedFeatureFlags(null!=e?e:{},n),n)z.error("Failed to fetch feature flags from PostHog.");else{if(!L||!L.body)return z.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((function(){t.parseDecideResponse(e)}),500);this.instance._afterDecideResponse(e);var i=null==T?void 0:T.extendPostHogWithExceptionAutoCapture;if(e.autocaptureExceptions&&e.autocaptureExceptions&&F(i)&&se(this.instance.requestRouter.endpointFor("assets","/static/exception-autocapture.js"),(function(n){if(n)return z.error("Could not load exception autocapture script",n);T.extendPostHogWithExceptionAutocapture(t.instance,e)})),e.siteApps)if(this.instance.config.opt_in_site_apps){var r,s=p(e.siteApps);try{var o=function(){var e=r.value,n=e.id,i=e.url,s=t.instance.requestRouter.endpointFor("api",i);U["__$$ph_site_app_".concat(n)]=t.instance,se(s,(function(e){e&&z.error("Error while initializing PostHog app with config id ".concat(n),e)}))};for(s.s();!(r=s.n()).done;)o()}catch(e){s.e(e)}finally{s.f()}}else e.siteApps.length>0&&z.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}]),e}(),ui=null!=T&&T.location?ot(T.location.hash,"__posthog")||ot(location.hash,"state"):null,li="_postHogToolbarParams",ci=function(){function e(t){o(this,e),l(this,"_toolbarScriptLoaded",!1),this.instance=t}return u(e,[{key:"maybeLoadToolbar",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(!T||!L)return!1;n=null!==(e=n)&&void 0!==e?e:T.location,r=null!==(t=r)&&void 0!==t?t:T.history;try{if(!i){try{T.localStorage.setItem("test","test"),T.localStorage.removeItem("test")}catch(e){return!1}i=null==T?void 0:T.localStorage}var s,o=ui||ot(n.hash,"__posthog")||ot(n.hash,"state"),a=o?ee((function(){return JSON.parse(atob(decodeURIComponent(o)))}))||ee((function(){return JSON.parse(decodeURIComponent(o))})):null;return a&&"ph_authorize"===a.action?((s=a).source="url",s&&Object.keys(s).length>0&&(a.desiredHash?n.hash=a.desiredHash:r?r.replaceState("",L.title,n.pathname+n.search):n.hash="")):((s=JSON.parse(i.getItem(li)||"{}")).source="localstorage",delete s.userIntent),!(!s.token||this.instance.config.token!==s.token)&&(this.loadToolbar(s),!0)}catch(e){return!1}}},{key:"_callLoadToolbar",value:function(e){(U.ph_load_toolbar||U.ph_load_editor)(e,this.instance)}},{key:"loadToolbar",value:function(e){var t=this;if(!T||T.localStorage.getItem(li)&&this._toolbarScriptLoaded)return!1;var n="custom"===this.instance.requestRouter.region&&this.instance.config.advanced_disable_toolbar_metrics,i=r(r({token:this.instance.config.token},e),{},{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(T.localStorage.setItem(li,JSON.stringify(r(r({},i),{},{source:void 0}))),this._toolbarScriptLoaded)this._callLoadToolbar(i);else{this._toolbarScriptLoaded=!0;var s=3e5,o=Math.floor(Date.now()/s)*s;se(this.instance.requestRouter.endpointFor("assets","/static/toolbar.js?t=".concat(o)),(function(e){if(e)return z.error("Failed to load toolbar",e),void(t._toolbarScriptLoaded=!1);t._callLoadToolbar(i)})),re(T,"turbolinks:load",(function(){t._toolbarScriptLoaded=!1,t.loadToolbar(i)}))}return!0}},{key:"_loadEditor",value:function(e){return this.loadToolbar(e)}},{key:"maybeLoadEditor",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return this.maybeLoadToolbar(e,t,n)}}]),e}(),di=function(){function e(t){o(this,e),l(this,"isPaused",!0),l(this,"queue",[]),l(this,"flushTimeoutMs",3e3),this.sendRequest=t}return u(e,[{key:"enqueue",value:function(e){this.queue.push(e),this.flushTimeout||this.setFlushTimeout()}},{key:"unload",value:function(){var e=this;this.clearFlushTimeout();var t=this.queue.length>0?this.formatQueue():{},n=Object.values(t);[].concat(d(n.filter((function(e){return 0===e.url.indexOf("/e")}))),d(n.filter((function(e){return 0!==e.url.indexOf("/e")})))).map((function(t){e.sendRequest(r(r({},t),{},{transport:"sendBeacon"}))}))}},{key:"enable",value:function(){this.isPaused=!1,this.setFlushTimeout()}},{key:"setFlushTimeout",value:function(){var e=this;this.isPaused||(this.flushTimeout=setTimeout((function(){if(e.clearFlushTimeout(),e.queue.length>0){var t=e.formatQueue(),n=function(n){var i=t[n],r=(new Date).getTime();i.data&&b(i.data)&&J(i.data,(function(e){e.offset=Math.abs(e.timestamp-r),delete e.timestamp})),e.sendRequest(i)};for(var i in t)n(i)}}),this.flushTimeoutMs))}},{key:"clearFlushTimeout",value:function(){clearTimeout(this.flushTimeout),this.flushTimeout=void 0}},{key:"formatQueue",value:function(){var e={};return J(this.queue,(function(t){var n,i=t,s=(i?i.batchKey:null)||i.url;F(e[s])&&(e[s]=r(r({},i),{},{data:[]})),null===(n=e[s].data)||void 0===n||n.push(i.data)})),this.queue=[],e}}]),e}(),hi=Uint8Array,fi=Uint16Array,pi=Uint32Array,vi=new hi([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gi=new hi([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),_i=new hi([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),mi=function(e,t){for(var n=new fi(31),i=0;i<31;++i)n[i]=t+=1<>>1|(21845&Fi)<<1;Ei=(61680&(Ei=(52428&Ei)>>>2|(13107&Ei)<<2))>>>4|(3855&Ei)<<4,Si[Fi]=((65280&Ei)>>>8|(255&Ei)<<8)>>>1}var Ri=function(e,t,n){for(var i=e.length,r=0,s=new fi(t);r>>u]=l}else for(o=new fi(i),r=0;r>>15-e[r];return o},xi=new hi(288);for(Fi=0;Fi<144;++Fi)xi[Fi]=8;for(Fi=144;Fi<256;++Fi)xi[Fi]=9;for(Fi=256;Fi<280;++Fi)xi[Fi]=7;for(Fi=280;Fi<288;++Fi)xi[Fi]=8;var Pi=new hi(32);for(Fi=0;Fi<32;++Fi)Pi[Fi]=5;var Ii=Ri(xi,9,0),Ci=Ri(Pi,5,0),Ti=function(e){return(e/8|0)+(7&e&&1)},$i=function(e,t,n){(null==t||t<0)&&(t=0),(null==n||n>e.length)&&(n=e.length);var i=new(e instanceof fi?fi:e instanceof pi?pi:hi)(n-t);return i.set(e.subarray(t,n)),i},Mi=function(e,t,n){n<<=7&t;var i=t/8|0;e[i]|=n,e[i+1]|=n>>>8},Oi=function(e,t,n){n<<=7&t;var i=t/8|0;e[i]|=n,e[i+1]|=n>>>8,e[i+2]|=n>>>16},qi=function(e,t){for(var n=[],i=0;ih&&(h=s[i].s);var f=new fi(h+1),p=Ai(n[c-1],f,0);if(p>t){i=0;var v=0,g=p-t,_=1<t))break;v+=_-(1<>>=g;v>0;){var y=s[i].s;f[y]=0&&v;--i){var b=s[i].s;f[b]==t&&(--f[b],++v)}p=t}return[new hi(f),p]},Ai=function e(t,n,i){return-1==t.s?Math.max(e(t.l,n,i+1),e(t.r,n,i+1)):n[t.s]=i},Li=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new fi(++t),i=0,r=e[0],s=1,o=function(e){n[i++]=e},a=1;a<=t;++a)if(e[a]==r&&a!=t)++s;else{if(!r&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(r),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(r);s=1,r=e[a]}return[n.subarray(0,i),t]},Di=function(e,t){for(var n=0,i=0;i>>8,e[r+2]=255^e[r],e[r+3]=255^e[r+1];for(var s=0;s4&&!R[_i[P-1]];--P);var I,C,T,$,M=l+5<<3,O=Di(r,xi)+Di(s,Pi)+o,q=Di(r,h)+Di(s,v)+o+14+3*P+Di(S,R)+(2*S[16]+3*S[17]+7*S[18]);if(M<=O&&M<=q)return Bi(t,c,e.subarray(u,u+l));if(Mi(t,c,1+(q15&&(Mi(t,c,B[F]>>>5&127),c+=B[F]>>>12)}}}else I=Ii,C=xi,T=Ci,$=Pi;for(F=0;F255){N=i[F]>>>18&31,Oi(t,c,I[N+257]),c+=C[N+257],N>7&&(Mi(t,c,i[F]>>>23&31),c+=vi[N]);var H=31&i[F];Oi(t,c,T[H]),c+=$[H],H>3&&(Oi(t,c,i[F]>>>5&8191),c+=gi[H])}else Oi(t,c,I[i[F]]),c+=C[i[F]];return Oi(t,c,I[256]),c+C[256]},Hi=new pi([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),ji=new hi(0),Ui=function(){for(var e=new pi(256),t=0;t<256;++t){for(var n=t,i=9;--i;)n=(1&n&&3988292384)^n>>>1;e[t]=n}return e}(),Wi=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8};function zi(e,t){void 0===t&&(t={});var n=function(){var e=4294967295;return{p:function(t){for(var n=e,i=0;i>>8;e=n},d:function(){return 4294967295^e}}}(),i=e.length;n.p(e);var r,s=function(e,t,n,i,r){return function(e,t,n,i,r,s){var o=e.length,a=new hi(i+o+5*(1+Math.floor(o/7e3))+r),u=a.subarray(i,a.length-r),l=0;if(!t||o<8)for(var c=0;c<=o;c+=65535){var d=c+65535;d>>13,p=8191&h,v=(1<7e3||R>24576)&&$>423){l=Ni(e,u,0,k,w,S,E,R,P,c-P,l),R=F=E=0,P=c;for(var M=0;M<286;++M)w[M]=0;for(M=0;M<30;++M)S[M]=0}var O=2,q=0,A=p,L=C-T&32767;if($>2&&I==b(c-L))for(var D=Math.min(f,$)-1,B=Math.min(32767,c),N=Math.min(258,$);L<=B&&--A&&C!=T;){if(e[c+O]==e[c+O-L]){for(var H=0;HO){if(O=H,q=L,H>D)break;var j=Math.min(L,H-2),U=0;for(M=0;MU&&(U=z,T=W)}}}L+=(C=T)-(T=g[C])+32768&32767}if(q){k[R++]=268435456|ki[O]<<18|wi[q];var G=31&ki[O],V=31&wi[q];E+=vi[G]+gi[V],++w[257+G],++S[V],x=c+O,++F}else k[R++]=e[c],++w[e[c]]}}l=Ni(e,u,s,k,w,S,E,R,P,c-P,l),s||(l=Bi(u,l,ji))}return $i(a,0,i+Ti(l)+r)}(e,null==t.level?6:t.level,null==t.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(e.length)))):12+t.mem,n,i,!r)}(e,t,10+((r=t).filename&&r.filename.length+1||0),8),o=s.length;return function(e,t){var n=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:9==t.level?2:0,e[9]=3,0!=t.mtime&&Wi(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),n){e[3]=8;for(var i=0;i<=n.length;++i)e[i+10]=n.charCodeAt(i)}}(s,t),Wi(s,o-8,n.d()),Wi(s,o-4,i),s}var Gi,Vi=!!N||!!B,Qi="text/plain",Ji=function(e,t){var n=c(e.split("?"),2),i=n[0],s=n[1],o=r({},t);null==s||s.split("&").forEach((function(e){var t=c(e.split("="),1)[0];delete o[t]}));var a=function(e){var t,n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"&",r=[];return J(e,(function(e,i){F(e)||F(i)||"undefined"===i||(t=encodeURIComponent(function(e){return e instanceof File}(e)?e.name:e.toString()),n=encodeURIComponent(i),r[r.length]=n+"="+t)})),r.join(i)}(o);return a=a?(s?s+"&":"")+a:s,"".concat(i,"?").concat(a)},Yi=function(e){return"data="+encodeURIComponent("string"==typeof e?e:JSON.stringify(e))},Xi=function(e){var t=e.data,n=e.compression;if(t){if(n===ie.GZipJS){var i=zi(function(e,t){var n=e.length;if("undefined"!=typeof TextEncoder)return(new TextEncoder).encode(e);for(var i=new hi(e.length+(e.length>>>1)),r=0,s=function(e){i[r++]=e},o=0;oi.length){var a=new hi(r+8+(n-o<<1));a.set(i),i=a}var u=e.charCodeAt(o);u<128?s(u):u<2048?(s(192|u>>>6),s(128|63&u)):u>55295&&u<57344?(s(240|(u=65536+(1047552&u)|1023&e.charCodeAt(++o))>>>18),s(128|u>>>12&63),s(128|u>>>6&63),s(128|63&u)):(s(224|u>>>12),s(128|u>>>6&63),s(128|63&u))}return $i(i,0,r)}(JSON.stringify(t)),{mtime:0});return{contentType:Qi,body:new Blob([i],{type:Qi})}}if(n===ie.Base64){var r=function(e){var t,n,i,r,s,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a=0,u=0,l="",c=[];if(!e)return e;e=function(e){var t,n,i,r,s="";for(t=n=0,i=(e=(e+"").replace(/\r\n/g,"\n").replace(/\r/g,"\n")).length,r=0;r127&&o<2048?String.fromCharCode(o>>6|192,63&o|128):String.fromCharCode(o>>12|224,o>>6&63|128,63&o|128),R(a)||(n>t&&(s+=e.substring(t,n)),s+=a,t=n=r+1)}return n>t&&(s+=e.substring(t,e.length)),s}(e);do{t=(s=e.charCodeAt(a++)<<16|e.charCodeAt(a++)<<8|e.charCodeAt(a++))>>18&63,n=s>>12&63,i=s>>6&63,r=63&s,c[u++]=o.charAt(t)+o.charAt(n)+o.charAt(i)+o.charAt(r)}while(a=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}(e,Ki);P(n)&&n>0&&(i.url=Ji(i.url,{retry_count:n})),this.instance._send_request(r(r({},i),{},{callback:function(e){var s;200!==e.statusCode&&(e.statusCode<400||e.statusCode>=500)&&(null!=n?n:0)<10?t.enqueue(r({},i)):null===(s=i.callback)||void 0===s||s.call(i,e)}}))}},{key:"enqueue",value:function(e){var t=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=t+1;var n=function(e){var t=3e3*Math.pow(2,e),n=t/2,i=Math.min(18e5,t),r=(Math.random()-.5)*(i-n);return Math.ceil(i+r)}(t),i=Date.now()+n;this.queue.push({retryAt:i,requestOptions:e});var r="Enqueued failed request for retry in ".concat(n);navigator.onLine||(r+=" (Browser is offline)"),z.warn(r),this.isPolling||(this.isPolling=!0,this.poll())}},{key:"poll",value:function(){var e=this;this.poller&&clearTimeout(this.poller),this.poller=setTimeout((function(){e.areWeOnline&&e.queue.length>0&&e.flush(),e.poll()}),this.pollIntervalMs)}},{key:"flush",value:function(){var e=Date.now(),t=[],n=this.queue.filter((function(n){return n.retryAt0){var i,r=p(n);try{for(r.s();!(i=r.n()).done;){var s=i.value.requestOptions;this.retriableRequest(s)}}catch(e){r.e(e)}finally{r.f()}}}},{key:"unload",value:function(){this.poller&&(clearTimeout(this.poller),this.poller=void 0);var e,t=p(this.queue);try{for(t.s();!(e=t.n()).done;){var n=e.value.requestOptions;try{this.instance._send_request(r(r({},n),{},{transport:"sendBeacon"}))}catch(e){z.error(e)}}}catch(e){t.e(e)}finally{t.f()}this.queue=[]}}]),e}(),er=1800,tr=function(){function e(t,n,i,r){o(this,e),l(this,"_sessionIdChangedHandlers",[]),this.config=t,this.persistence=n,this._windowId=void 0,this._sessionId=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this._sessionIdGenerator=i||Ue,this._windowIdGenerator=r||Ue;var s=t.persistence_name||t.token,a=t.session_idle_timeout_seconds||er;if(P(a)?a>er?z.warn("session_idle_timeout_seconds cannot be greater than 30 minutes. Using 30 minutes instead."):a<60&&z.warn("session_idle_timeout_seconds cannot be less than 60 seconds. Using 60 seconds instead."):(z.warn("session_idle_timeout_seconds must be a number. Defaulting to 30 minutes."),a=er),this._sessionTimeoutMs=1e3*Math.min(Math.max(a,60),er),this._window_id_storage_key="ph_"+s+"_window_id",this._primary_window_exists_storage_key="ph_"+s+"_primary_window_exists",this._canUseSessionStorage()){var u=nt.parse(this._window_id_storage_key),c=nt.parse(this._primary_window_exists_storage_key);u&&!c?this._windowId=u:nt.remove(this._window_id_storage_key),nt.set(this._primary_window_exists_storage_key,!0)}this._listenToReloadWindow()}return u(e,[{key:"onSessionId",value:function(e){var t=this;return F(this._sessionIdChangedHandlers)&&(this._sessionIdChangedHandlers=[]),this._sessionIdChangedHandlers.push(e),this._sessionId&&e(this._sessionId,this._windowId),function(){t._sessionIdChangedHandlers=t._sessionIdChangedHandlers.filter((function(t){return t!==e}))}}},{key:"_canUseSessionStorage",value:function(){return"memory"!==this.config.persistence&&!this.persistence.disabled&&nt.is_supported()}},{key:"_setWindowId",value:function(e){e!==this._windowId&&(this._windowId=e,this._canUseSessionStorage()&&nt.set(this._window_id_storage_key,e))}},{key:"_getWindowId",value:function(){return this._windowId?this._windowId:this._canUseSessionStorage()?nt.parse(this._window_id_storage_key):null}},{key:"_setSessionId",value:function(e,t,n){e===this._sessionId&&t===this._sessionActivityTimestamp&&n===this._sessionStartTimestamp||(this._sessionStartTimestamp=n,this._sessionActivityTimestamp=t,this._sessionId=e,this.persistence.register(l({},_e,[t,e,n])))}},{key:"_getSessionId",value:function(){if(this._sessionId&&this._sessionActivityTimestamp&&this._sessionStartTimestamp)return[this._sessionActivityTimestamp,this._sessionId,this._sessionStartTimestamp];var e=this.persistence.props[_e];return b(e)&&2===e.length&&e.push(e[0]),e||[0,null,0]}},{key:"resetSessionId",value:function(){this._setSessionId(null,null,null)}},{key:"_listenToReloadWindow",value:function(){var e=this;null==T||T.addEventListener("beforeunload",(function(){e._canUseSessionStorage()&&nt.remove(e._primary_window_exists_storage_key)}))}},{key:"checkAndGetSessionAndWindowId",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:null)||(new Date).getTime(),n=c(this._getSessionId(),3),i=n[0],r=n[1],s=n[2],o=this._getWindowId(),a=s&&s>0&&Math.abs(t-s)>864e5,u=!1,l=!r,d=!e&&Math.abs(t-i)>this._sessionTimeoutMs;l||d||a?(r=this._sessionIdGenerator(),o=this._windowIdGenerator(),z.info("[SessionId] new session ID generated",{sessionId:r,windowId:o,changeReason:{noSessionId:l,activityTimeout:d,sessionPastMaximumLength:a}}),s=t,u=!0):o||(o=this._windowIdGenerator(),u=!0);var h=0===i||!e||a?t:i,f=0===s?(new Date).getTime():s;return this._setWindowId(o),this._setSessionId(r,h,f),u&&this._sessionIdChangedHandlers.forEach((function(e){return e(r,o)})),{sessionId:r,windowId:o,sessionStartTimestamp:f}}}]),e}();!function(e){e.US="us",e.EU="eu",e.CUSTOM="custom"}(Gi||(Gi={}));var nr="i.posthog.com",ir=function(){function e(t){o(this,e),l(this,"_regionCache",{}),this.instance=t}return u(e,[{key:"apiHost",get:function(){return this.instance.config.api_host.trim().replace(/\/$/,"")}},{key:"uiHost",get:function(){var e;return null===(e=this.instance.config.ui_host)||void 0===e?void 0:e.replace(/\/$/,"")}},{key:"region",get:function(){return this._regionCache[this.apiHost]||(/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?this._regionCache[this.apiHost]=Gi.US:/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?this._regionCache[this.apiHost]=Gi.EU:this._regionCache[this.apiHost]=Gi.CUSTOM),this._regionCache[this.apiHost]}},{key:"endpointFor",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(t&&(t="/"===t[0]?t:"/".concat(t)),"ui"===e)return(this.uiHost||this.apiHost.replace(".".concat(nr),".posthog.com"))+t;if(this.region===Gi.CUSTOM)return this.apiHost+t;var n=nr+t;switch(e){case"assets":return"https://".concat(this.region,"-assets.").concat(n);case"api":return"https://".concat(this.region,".").concat(n)}}}]),e}(),rr=u((function e(t,n,i,r){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:["error"];o(this,e),this.name="posthog-js",this.setupOnce=function(e){e((function(e){var o,a,u,l,c;if("*"!==s&&!s.includes(e.level)||!t.__loaded)return e;e.tags||(e.tags={});var d=t.requestRouter.endpointFor("ui","/project/".concat(t.config.token,"/person/").concat(t.get_distinct_id()));e.tags["PostHog Person URL"]=d,t.sessionRecordingStarted()&&(e.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var h=(null===(o=e.exception)||void 0===o?void 0:o.values)||[],f={$exception_message:(null===(a=h[0])||void 0===a?void 0:a.value)||e.message,$exception_type:null===(u=h[0])||void 0===u?void 0:u.type,$exception_personURL:d,$sentry_event_id:e.event_id,$sentry_exception:e.exception,$sentry_exception_message:(null===(l=h[0])||void 0===l?void 0:l.value)||e.message,$sentry_exception_type:null===(c=h[0])||void 0===c?void 0:c.type,$sentry_tags:e.tags,$level:e.level};return n&&i&&(f.$sentry_url=(r||"https://sentry.io/organizations/")+n+"/issues/?project="+i+"&query="+e.event_id),t.capture("$exception",f),e}))}}));var sr=function(){function e(t){o(this,e),this._instance=t}return u(e,[{key:"doPageView",value:function(){var e,t=this._previousScrollProperties();return this._currentPath=null!==(e=null==T?void 0:T.location.pathname)&&void 0!==e?e:"",this._instance.scrollManager.resetContext(),t}},{key:"doPageLeave",value:function(){return this._previousScrollProperties()}},{key:"_previousScrollProperties",value:function(){var e=this._currentPath,t=this._instance.scrollManager.getContext();if(!e||!t)return{};var n=t.maxScrollHeight,i=t.lastScrollY,r=t.maxScrollY,s=t.maxContentHeight,o=t.lastContentY,a=t.maxContentY;return F(n)||F(i)||F(r)||F(s)||F(o)||F(a)?{}:(n=Math.ceil(n),i=Math.ceil(i),r=Math.ceil(r),s=Math.ceil(s),o=Math.ceil(o),a=Math.ceil(a),{$prev_pageview_pathname:e,$prev_pageview_last_scroll:i,$prev_pageview_last_scroll_percentage:n<=1?1:or(i/n,0,1),$prev_pageview_max_scroll:r,$prev_pageview_max_scroll_percentage:n<=1?1:or(r/n,0,1),$prev_pageview_last_content:o,$prev_pageview_last_content_percentage:s<=1?1:or(o/s,0,1),$prev_pageview_max_content:a,$prev_pageview_max_content_percentage:s<=1?1:or(a/s,0,1)})}}]),e}();function or(e,t,n){return Math.max(t,Math.min(e,n))}var ar={icontains:function(e){return!!T&&T.location.href.toLowerCase().indexOf(e.toLowerCase())>-1},regex:function(e){return!!T&&function(e,t){return!!function(e){try{new RegExp(e)}catch(e){return!1}return!0}(t)&&new RegExp(t).test(e)}(T.location.href,e)},exact:function(e){return(null==T?void 0:T.location.href)===e}},ur=function(){function e(t){o(this,e),this.instance=t}return u(e,[{key:"afterDecideResponse",value:function(e){this._decideServerResponse=!!e.surveys,this.loadIfEnabled()}},{key:"loadIfEnabled",value:function(){var e=this,t=null==U?void 0:U.extendPostHogWithSurveys;this.instance.config.disable_surveys||!this._decideServerResponse||t||se(this.instance.requestRouter.endpointFor("assets","/static/surveys.js"),(function(t){if(t)return z.error("Could not load surveys script",t);U.extendPostHogWithSurveys(e.instance)}))}},{key:"getSurveys",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.instance.config.disable_surveys)return e([]);var i=this.instance.get_property(Se);if(i&&!n)return e(i);this.instance._send_request({url:this.instance.requestRouter.endpointFor("api","/api/surveys/?token=".concat(this.instance.config.token)),method:"GET",transport:"XHR",callback:function(n){var i;if(200!==n.statusCode||!n.json)return e([]);var r=n.json.surveys||[];return null===(i=t.instance.persistence)||void 0===i||i.register(l({},Se,r)),e(r)}})}},{key:"getActiveMatchingSurveys",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.getSurveys((function(n){var i=n.filter((function(e){return!(!e.start_date||e.end_date)})).filter((function(e){var t,n,i,r;if(!e.conditions)return!0;var s=null===(t=e.conditions)||void 0===t||!t.url||ar[null!==(n=null===(i=e.conditions)||void 0===i?void 0:i.urlMatchType)&&void 0!==n?n:"icontains"](e.conditions.url),o=null===(r=e.conditions)||void 0===r||!r.selector||(null==L?void 0:L.querySelector(e.conditions.selector));return s&&o})).filter((function(e){if(!e.linked_flag_key&&!e.targeting_flag_key)return!0;var n=!e.linked_flag_key||t.instance.featureFlags.isFeatureEnabled(e.linked_flag_key),i=!e.targeting_flag_key||t.instance.featureFlags.isFeatureEnabled(e.targeting_flag_key);return n&&i}));return e(i)}),n)}}]),e}(),lr=function(){function e(t){var n,i,r=this;o(this,e),l(this,"serverLimits",{}),l(this,"lastEventRateLimited",!1),l(this,"checkForLimiting",(function(e){var t=e.text;if(t&&t.length)try{(JSON.parse(t).quota_limited||[]).forEach((function(e){z.info("[RateLimiter] ".concat(e||"events"," is quota limited.")),r.serverLimits[e]=(new Date).getTime()+6e4}))}catch(e){return void z.warn('[RateLimiter] could not rate limit - continuing. Error: "'.concat(null==e?void 0:e.message,'"'),{text:t})}})),this.instance=t,this.captureEventsPerSecond=(null===(n=t.config.rate_limiting)||void 0===n?void 0:n.events_per_second)||10,this.captureEventsBurstLimit=Math.max((null===(i=t.config.rate_limiting)||void 0===i?void 0:i.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond),this.lastEventRateLimited=this.isCaptureClientSideRateLimited(!0)}return u(e,[{key:"isCaptureClientSideRateLimited",value:function(){var e,t,n,i=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=(new Date).getTime(),s=null!==(e=null===(t=this.instance.persistence)||void 0===t?void 0:t.get_property(xe))&&void 0!==e?e:{tokens:this.captureEventsBurstLimit,last:r};s.tokens+=(r-s.last)/1e3*this.captureEventsPerSecond,s.last=r,s.tokens>this.captureEventsBurstLimit&&(s.tokens=this.captureEventsBurstLimit);var o=s.tokens<1;return o||i||(s.tokens=Math.max(0,s.tokens-1)),!o||this.lastEventRateLimited||i||this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited. Config is set to ".concat(this.captureEventsPerSecond," events per second and ").concat(this.captureEventsBurstLimit," events burst limit.")},{skip_client_rate_limiting:!0}),this.lastEventRateLimited=o,null===(n=this.instance.persistence)||void 0===n||n.set_property(xe,s),o}},{key:"isServerRateLimited",value:function(e){var t=this.serverLimits[e||"events"]||!1;return!1!==t&&(new Date).getTime()e?t.slice(0,e)+"...":t}var wr,Sr,Fr=function(){function e(t){o(this,e),l(this,"_initialized",!1),l(this,"_isDisabledServerSide",null),l(this,"rageclicks",new pr),l(this,"_elementsChainAsString",!1),this.instance=t}return u(e,[{key:"config",get:function(){var e,t=w(this.instance.config.autocapture)?this.instance.config.autocapture:{};return t.url_allowlist=null===(e=t.url_allowlist)||void 0===e?void 0:e.map((function(e){return new RegExp(e)})),t}},{key:"_addDomEventHandlers",value:function(){var e=this;if(this.isBrowserSupported()){if(T&&L){var t=function(t){t=t||(null==T?void 0:T.event);try{e._captureEvent(t)}catch(e){z.error("Failed to capture event",e)}},n=function(t){t=t||(null==T?void 0:T.event),e._captureEvent(t,br)};re(L,"submit",t,!1,!0),re(L,"change",t,!1,!0),re(L,"click",t,!1,!0),this.config.capture_copied_text&&(re(L,"copy",n,!1,!0),re(L,"cut",n,!1,!0))}}else z.info("Disabling Automatic Event Collection because this browser is not supported")}},{key:"startIfEnabled",value:function(){this.isEnabled&&!this._initialized&&(this._addDomEventHandlers(),this._initialized=!0)}},{key:"afterDecideResponse",value:function(e){e.elementsChainAsString&&(this._elementsChainAsString=e.elementsChainAsString),this.instance.persistence&&this.instance.persistence.register(l({},le,!!e.autocapture_opt_out)),this._isDisabledServerSide=!!e.autocapture_opt_out,this.startIfEnabled()}},{key:"isEnabled",get:function(){var e,t,n=null===(e=this.instance.persistence)||void 0===e?void 0:e.props[le],i=this._isDisabledServerSide;if(R(i)&&!I(n)&&!this.instance.config.advanced_disable_decide)return!1;var r=null!==(t=this._isDisabledServerSide)&&void 0!==t?t:!!n;return!!this.instance.config.autocapture&&!r}},{key:"_previousElementSibling",value:function(e){if(e.previousElementSibling)return e.previousElementSibling;var t=e;do{t=t.previousSibling}while(t&&!vn(t));return t}},{key:"_getAugmentPropertiesFromElement",value:function(e){if(!wn(e))return{};var t={};return J(e.attributes,(function(e){if(e.name&&0===e.name.indexOf("data-ph-capture-attribute")){var n=e.name.replace("data-ph-capture-attribute-",""),i=e.value;n&&i&&Cn(i)&&(t[n]=i)}})),t}},{key:"_getPropertiesFromElement",value:function(e,t,n){var i,r=e.tagName.toLowerCase(),s={tag_name:r};yn.indexOf(r)>-1&&!n&&("a"===r.toLowerCase()||"button"===r.toLowerCase()?s.$el_text=kr(1024,Tn(e)):s.$el_text=kr(1024,pn(e)));var o=hn(e);o.length>0&&(s.classes=o.filter((function(e){return""!==e})));var a=null===(i=this.config)||void 0===i?void 0:i.element_attribute_ignorelist;J(e.attributes,(function(n){var i;if((!Sn(e)||-1!==["name","id","class","aria-label"].indexOf(n.name))&&(null==a||!a.includes(n.name))&&!t&&Cn(n.value)&&(i=n.name,!E(i)||"_ngcontent"!==i.substring(0,10)&&"_nghost"!==i.substring(0,7))){var r=n.value;"class"===n.name&&(r=dn(r).join(" ")),s["attr__"+n.name]=kr(1024,r)}}));for(var u=1,l=1,c=e;c=this._previousElementSibling(c);)u++,c.tagName===e.tagName&&l++;return s.nth_child=u,s.nth_of_type=l,s}},{key:"_getDefaultProperties",value:function(e){return{$event_type:e,$ce_version:1}}},{key:"_getEventTarget",value:function(e){return F(e.target)?e.srcElement||null:null!==(t=e.target)&&void 0!==t&&t.shadowRoot?e.composedPath()[0]||null:e.target||null;var t}},{key:"_captureEvent",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"$autocapture";if(this.isEnabled){var i,r=this._getEventTarget(e);_n(r)&&(r=r.parentNode||null),"$autocapture"===n&&"click"===e.type&&e instanceof MouseEvent&&this.instance.config.rageclick&&null!==(i=this.rageclicks)&&void 0!==i&&i.isRageClick(e.clientX,e.clientY,(new Date).getTime())&&this._captureEvent(e,"$rageclick");var s=n===br;if(r&&kn(r,e,this.config,s,s?["copy","cut"]:void 0)){for(var o,a,u=[r],l=r;l.parentNode&&!gn(l,"body");)mn(l.parentNode)?(u.push(l.parentNode.host),l=l.parentNode.host):(u.push(l.parentNode),l=l.parentNode);var c,d=[],h={},f=!1;if(J(u,(function(e){var n=wn(e);"a"===e.tagName.toLowerCase()&&(c=e.getAttribute("href"),c=n&&Cn(c)&&c),X(hn(e),"ph-no-capture")&&(f=!0),d.push(t._getPropertiesFromElement(e,t.instance.config.mask_all_element_attributes,t.instance.config.mask_all_text));var i=t._getAugmentPropertiesFromElement(e);Y(h,i)})),this.instance.config.mask_all_text||("a"===r.tagName.toLowerCase()||"button"===r.tagName.toLowerCase()?d[0].$el_text=Tn(r):d[0].$el_text=pn(r)),c&&(d[0].attr__href=c),f)return!1;var p=Y(this._getDefaultProperties(e.type),this._elementsChainAsString?{$elements_chain:Mn(d)}:{$elements:d},null!==(o=d[0])&&void 0!==o&&o.$el_text?{$el_text:null===(a=d[0])||void 0===a?void 0:a.$el_text}:{},h);if(n===br){var v,g=fn(null==T||null===(v=T.getSelection())||void 0===v?void 0:v.toString()),_=e.type||"clipboard";if(!g)return!1;p.$selected_content=g,p.$copy_type=_}return this.instance.capture(n,p),!0}}}},{key:"isBrowserSupported",value:function(){return k(null==L?void 0:L.querySelectorAll)}}]),e}(),Er={},Rr=function(){},xr="posthog",Pr=!Vi&&-1===(null==j?void 0:j.indexOf("MSIE"))&&-1===(null==j?void 0:j.indexOf("Mozilla")),Ir=function(){var e,t,n;return{api_host:"https://us.i.posthog.com",api_transport:"XHR",ui_host:null,token:"",autocapture:!0,rageclick:!0,cross_subdomain_cookie:(t=null==L?void 0:L.location,n=null==t?void 0:t.hostname,!!E(n)&&"herokuapp.com"!==n.split(".").slice(-2).join(".")),persistence:"localStorage+cookie",persistence_name:"",loaded:Rr,store_google:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageview:!0,capture_pageleave:!0,debug:D&&E(null==D?void 0:D.search)&&-1!==D.search.indexOf("__posthog_debug=true")||!1,verbose:!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_surveys:!1,enable_recording_console_log:void 0,secure_cookie:"https:"===(null==T||null===(e=T.location)||void 0===e?void 0:e.protocol),ip:!0,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},inapp_protocol:"//",inapp_link_new_window:!1,request_batching:!0,properties_string_max_length:65535,session_recording:{},mask_all_element_attributes:!1,mask_all_text:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,on_request_error:function(e){var t="Bad HTTP status: "+e.statusCode+" "+e.text;z.error(t)},get_device_id:function(e){return e},_onCapture:Rr,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:"always"}},Cr=function(e){var t={};F(e.process_person)||(t.person_profiles=e.process_person),F(e.xhr_headers)||(t.request_headers=e.xhr_headers),F(e.cookie_name)||(t.persistence_name=e.cookie_name),F(e.disable_cookie)||(t.disable_persistence=e.disable_cookie);var n=Y({},t,e);return b(e.property_blacklist)&&(F(e.property_denylist)?n.property_denylist=e.property_blacklist:b(e.property_denylist)?n.property_denylist=[].concat(d(e.property_blacklist),d(e.property_denylist)):z.error("Invalid value for property_denylist config: "+e.property_denylist)),n},Tr=function(){function e(){o(this,e),l(this,"__forceAllowLocalhost",!1)}return u(e,[{key:"_forceAllowLocalhost",get:function(){return this.__forceAllowLocalhost},set:function(e){z.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}]),e}(),$r=function(){function e(){var t=this;o(this,e),l(this,"webPerformance",new Tr),l(this,"_debugEventEmitter",new yr),this.config=Ir(),this.decideEndpointWasHit=!1,this.SentryIntegration=rr,this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.featureFlags=new Ae(this),this.toolbar=new ci(this),this.scrollManager=new mr(this),this.pageViewManager=new sr(this),this.surveys=new ur(this),this.rateLimiter=new lr(this),this.requestRouter=new ir(this),this.people={set:function(e,n,i){var r=E(e)?l({},e,n):e;t.setPersonProperties(r),null==i||i({})},set_once:function(e,n,i){var r=E(e)?l({},e,n):e;t.setPersonProperties(void 0,r),null==i||i({})}},this.on("eventCaptured",(function(e){return z.info("send",e)}))}return u(e,[{key:"init",value:function(t,n,i){if(i&&i!==xr){var r,s=null!==(r=Er[i])&&void 0!==r?r:new e;return s._init(t,n,i),Er[i]=s,Er[xr][i]=s,s}return this._init(t,n,i)}},{key:"_init",value:function(e){var t,n,i=this,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;if(F(e)||function(e){return E(e)&&0===e.trim().length}(e))return z.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return z.warn("You have already initialized PostHog! Re-initializing is a no-op"),this;if(this.__loaded=!0,this.config={},this._triggered_notifs=[],this.set_config(Y({},Ir(),Cr(s),{name:o,token:e})),this.compression=s.disable_compression?void 0:ie.Base64,this.persistence=new on(this.config),this.sessionPersistence="sessionStorage"===this.config.persistence?this.persistence:new on(r(r({},this.config),{},{persistence:"sessionStorage"})),this._requestQueue=new di((function(e){return i._send_request(e)})),this._retryQueue=new Zi(this),this.__request_queue=[],this.sessionManager=new tr(this.config,this.persistence),this.sessionPropsManager=new dr(this.sessionManager,this.persistence),this.sessionRecording=new oi(this),this.sessionRecording.startIfEnabledOrStop(),this.config.disable_scroll_properties||this.scrollManager.startMeasuringScrollPosition(),this.autocapture=new Fr(this),this.autocapture.startIfEnabled(),this.surveys.loadIfEnabled(),this.heatmaps=new _r(this),this.heatmaps.startIfEnabled(),v.DEBUG=v.DEBUG||this.config.debug,this._gdpr_init(),void 0!==(null===(t=s.bootstrap)||void 0===t?void 0:t.distinctID)){var a,u,l=this.config.get_device_id(Ue()),c=null!==(a=s.bootstrap)&&void 0!==a&&a.isIdentifiedID?l:s.bootstrap.distinctID;this.persistence.set_property(Ee,null!==(u=s.bootstrap)&&void 0!==u&&u.isIdentifiedID?"identified":"anonymous"),this.register({distinct_id:s.bootstrap.distinctID,$device_id:c})}if(this._hasBootstrappedFeatureFlags()){var d,h,f=Object.keys((null===(d=s.bootstrap)||void 0===d?void 0:d.featureFlags)||{}).filter((function(e){var t,n;return!(null===(t=s.bootstrap)||void 0===t||null===(n=t.featureFlags)||void 0===n||!n[e])})).reduce((function(e,t){var n,i;return e[t]=(null===(n=s.bootstrap)||void 0===n||null===(i=n.featureFlags)||void 0===i?void 0:i[t])||!1,e}),{}),p=Object.keys((null===(h=s.bootstrap)||void 0===h?void 0:h.featureFlagPayloads)||{}).filter((function(e){return f[e]})).reduce((function(e,t){var n,i,r,o;return null!==(n=s.bootstrap)&&void 0!==n&&null!==(i=n.featureFlagPayloads)&&void 0!==i&&i[t]&&(e[t]=null===(r=s.bootstrap)||void 0===r||null===(o=r.featureFlagPayloads)||void 0===o?void 0:o[t]),e}),{});this.featureFlags.receivedFeatureFlags({featureFlags:f,featureFlagPayloads:p})}if(!this.get_distinct_id()){var g=this.config.get_device_id(Ue());this.register_once({distinct_id:g,$device_id:g},""),this.persistence.set_property(Ee,"anonymous")}return null==T||null===(n=T.addEventListener)||void 0===n||n.call(T,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this)),this.toolbar.maybeLoadToolbar(),s.segment?function(e,t){var n=e.config.segment;if(!n)return t();!function(e,t){var n=e.config.segment;if(!n)return t();var i=function(n){var i=function(){return n.anonymousId()||Ue()};e.config.get_device_id=i,n.id()&&(e.register({distinct_id:n.id(),$device_id:i()}),e.persistence.set_property(Ee,"identified")),t()},r=n.user();"then"in r&&k(r.then)?r.then((function(e){return i(e)})):i(r)}(e,(function(){n.register(function(e){Promise&&Promise.resolve||z.warn("This browser does not have Promise support, and can not use the segment integration");var t=function(t,n){var i;if(!n)return t;t.event.userId||t.event.anonymousId===e.get_distinct_id()||e.reset(),t.event.userId&&t.event.userId!==e.get_distinct_id()&&(e.register({distinct_id:t.event.userId}),e.reloadFeatureFlags());var r=e._calculate_event_properties(n,null!==(i=t.event.properties)&&void 0!==i?i:{});return t.event.properties=Object.assign({},r,t.event.properties),t};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:function(){return!0},load:function(){return Promise.resolve()},track:function(e){return t(e,e.event.event)},page:function(e){return t(e,"$pageview")},identify:function(e){return t(e,"$identify")},screen:function(e){return t(e,"$screen")}}}(e)).then((function(){t()}))}))}(this,(function(){return i._loaded()})):this._loaded(),k(this.config._onCapture)&&this.on("eventCaptured",(function(e){return i.config._onCapture(e.event,e)})),this}},{key:"_afterDecideResponse",value:function(e){var t,n,i,r,s;this.compression=void 0,e.supportedCompression&&!this.config.disable_compression&&(this.compression=X(e.supportedCompression,ie.GZipJS)?ie.GZipJS:X(e.supportedCompression,ie.Base64)?ie.Base64:void 0),null!==(t=e.analytics)&&void 0!==t&&t.endpoint&&(this.analyticsDefaultEndpoint=e.analytics.endpoint),null===(n=this.sessionRecording)||void 0===n||n.afterDecideResponse(e),null===(i=this.autocapture)||void 0===i||i.afterDecideResponse(e),null===(r=this.heatmaps)||void 0===r||r.afterDecideResponse(e),null===(s=this.surveys)||void 0===s||s.afterDecideResponse(e)}},{key:"_loaded",value:function(){var e=this,t=this.config.advanced_disable_decide;t||this.featureFlags.setReloadingPaused(!0);try{this.config.loaded(this)}catch(e){z.critical("`loaded` function failed",e)}this._start_queue_if_opted_in(),this.config.capture_pageview&&setTimeout((function(){L&&e.capture("$pageview",{title:L.title},{send_instantly:!0})}),1),t||(new ai(this).call(),this.featureFlags.resetRequestQueue())}},{key:"_start_queue_if_opted_in",value:function(){var e;this.has_opted_out_capturing()||this.config.request_batching&&(null===(e=this._requestQueue)||void 0===e||e.enable())}},{key:"_dom_loaded",value:function(){var e=this;this.has_opted_out_capturing()||Q(this.__request_queue,(function(t){return e._send_retriable_request(t)})),this.__request_queue=[],this._start_queue_if_opted_in()}},{key:"_handle_unload",value:function(){var e,t;this.config.request_batching?(this.config.capture_pageview&&this.config.capture_pageleave&&this.capture("$pageleave"),null===(e=this._requestQueue)||void 0===e||e.unload(),null===(t=this._retryQueue)||void 0===t||t.unload()):this.config.capture_pageview&&this.config.capture_pageleave&&this.capture("$pageleave",null,{transport:"sendBeacon"})}},{key:"_send_request",value:function(e){var t=this;this.__loaded&&(Pr?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)||(e.transport=e.transport||this.config.api_transport,e.url=Ji(e.url,{ip:this.config.ip?1:0}),e.headers=this.config.request_headers,e.compression="best-available"===e.compression?this.compression:e.compression,function(e){var t=r({},e);t.timeout=t.timeout||6e4,t.url=Ji(t.url,{_:(new Date).getTime().toString(),ver:v.LIB_VERSION,compression:t.compression}),"sendBeacon"===t.transport&&null!=A&&A.sendBeacon?function(e){var t=Ji(e.url,{beacon:"1"});try{var n,i=null!==(n=Xi(e))&&void 0!==n?n:{},r=i.contentType,s=i.body,o="string"==typeof s?new Blob([s],{type:r}):s;A.sendBeacon(t,o)}catch(e){}}(t):"fetch"===t.transport&&B?function(e){var t,n,i=null!==(t=Xi(e))&&void 0!==t?t:{},r=i.contentType,s=i.body,o=new Headers;J(o,(function(e,t){o.append(t,e)})),r&&o.append("Content-Type",r);var a=e.url,u=null;if(H){var l=new H;u={signal:l.signal,timeout:setTimeout((function(){return l.abort()}),e.timeout)}}B(a,{method:(null==e?void 0:e.method)||"GET",headers:o,keepalive:"POST"===e.method,body:s,signal:null===(n=u)||void 0===n?void 0:n.signal}).then((function(t){return t.text().then((function(n){var i,r={statusCode:t.status,text:n};if(200===t.status)try{r.json=JSON.parse(n)}catch(e){z.error(e)}null===(i=e.callback)||void 0===i||i.call(e,r)}))})).catch((function(t){var n;z.error(t),null===(n=e.callback)||void 0===n||n.call(e,{statusCode:0,text:t})})).finally((function(){return u?clearTimeout(u.timeout):null}))}(t):N||!L?function(e){var t,n=new N;n.open(e.method||"GET",e.url,!0);var i=null!==(t=Xi(e))&&void 0!==t?t:{},r=i.contentType,s=i.body;J(e.headers,(function(e,t){n.setRequestHeader(t,e)})),r&&n.setRequestHeader("Content-Type",r),e.timeout&&(n.timeout=e.timeout),n.withCredentials=!0,n.onreadystatechange=function(){if(4===n.readyState){var t,i={statusCode:n.status,text:n.responseText};if(200===n.status)try{i.json=JSON.parse(n.responseText)}catch(e){}null===(t=e.callback)||void 0===t||t.call(e,i)}},n.send(s)}(t):function(e){var t;if(L){var n=L.createElement("script");n.type="text/javascript",n.async=!0,n.defer=!0,n.src=e.url;var i=L.getElementsByTagName("script")[0];null===(t=i.parentNode)||void 0===t||t.insertBefore(n,i)}}(t)}(r(r({},e),{},{callback:function(n){var i,r,s;t.rateLimiter.checkForLimiting(n),n.statusCode>=400&&(null===(r=(s=t.config).on_request_error)||void 0===r||r.call(s,n)),null===(i=e.callback)||void 0===i||i.call(e,n)}}))))}},{key:"_send_retriable_request",value:function(e){this._retryQueue?this._retryQueue.retriableRequest(e):this._send_request(e)}},{key:"_execute_array",value:function(e){var t,n=this,i=[],r=[],s=[];Q(e,(function(e){e&&(t=e[0],b(t)?s.push(e):k(e)?e.call(n):b(e)&&"alias"===t?i.push(e):b(e)&&-1!==t.indexOf("capture")&&k(n[t])?s.push(e):r.push(e))}));var o=function(e,t){Q(e,(function(e){if(b(e[0])){var n=t;J(e,(function(e){n=n[e[0]].apply(n,e.slice(1))}))}else this[e[0]].apply(this,e.slice(1))}),t)};o(i,this),o(r,this),o(s,this)}},{key:"_hasBootstrappedFeatureFlags",value:function(){var e,t;return(null===(e=this.config.bootstrap)||void 0===e?void 0:e.featureFlags)&&Object.keys(null===(t=this.config.bootstrap)||void 0===t?void 0:t.featureFlags).length>0||!1}},{key:"push",value:function(e){this._execute_array([e])}},{key:"capture",value:function(e,t,n){var i;if(!(this.__loaded&&this.persistence&&this.sessionPersistence&&this._requestQueue))return z.uninitializedWarning("posthog.capture");if(!Zn(this))if(null!=n&&n.skip_client_rate_limiting||!this.rateLimiter.isCaptureClientSideRateLimited())if(!F(e)&&E(e)){if(!j||this.config.opt_out_useragent_filter||!fr(j,this.config.custom_blocked_useragents)){this.sessionPersistence.update_search_keyword(),this.config.store_google&&(this.sessionPersistence.update_campaign_params(),this.persistence.set_initial_campaign_params()),this.config.save_referrer&&(this.sessionPersistence.update_referrer_info(),this.persistence.set_initial_referrer_info());var s={uuid:Ue(),event:e,properties:this._calculate_event_properties(e,t||{})};if(null==n||!n._noHeatmaps){var o,a=null===(o=this.heatmaps)||void 0===o?void 0:o.getAndClearBuffer();a&&(s.properties.$heatmap_data=a)}(null==n?void 0:n.$set)&&(s.$set=null==n?void 0:n.$set);var u=this._calculate_set_once_properties(null==n?void 0:n.$set_once);u&&(s.$set_once=u),(s=function(e,t){return n=e,i=function(e){return E(e)&&!R(t)?e.slice(0,t):e},r=new Set,function e(t,n){return t!==Object(t)?i?i(t):t:r.has(t)?void 0:(r.add(t),b(t)?(s=[],Q(t,(function(t){s.push(e(t))}))):(s={},J(t,(function(t,n){r.has(t)||(s[n]=e(t,n))}))),s);var s}(n);var n,i,r}(s,null!=n&&n._noTruncate?null:this.config.properties_string_max_length)).timestamp=(null==n?void 0:n.timestamp)||new Date,F(null==n?void 0:n.timestamp)||(s.properties.$event_time_override_provided=!0,s.properties.$event_time_override_system_time=new Date);var l=r(r({},s.properties.$set),s.$set);S(l)||this.setPersonPropertiesForFlags(l),this._debugEventEmitter.emit("eventCaptured",s);var c={method:"POST",url:null!==(i=null==n?void 0:n._url)&&void 0!==i?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),data:s,compression:"best-available",batchKey:null==n?void 0:n._batchKey};return!this.config.request_batching||n&&(null==n||!n._batchKey)||null!=n&&n.send_instantly?this._send_retriable_request(c):this._requestQueue.enqueue(c),s}}else z.error("No event name provided to posthog.capture");else z.critical("This capture call is ignored due to client rate limiting.")}},{key:"_addCaptureHook",value:function(e){this.on("eventCaptured",(function(t){return e(t.event)}))}},{key:"_calculate_event_properties",value:function(e,t){if(!this.persistence||!this.sessionPersistence)return t;var n=this.persistence.remove_event_timer(e),i=r({},t);if(i.token=this.config.token,"$snapshot"===e){var s=r(r({},this.persistence.properties()),this.sessionPersistence.properties());return i.distinct_id=s.distinct_id,i}var o=rn.properties();if(this.sessionManager){var a=this.sessionManager.checkAndGetSessionAndWindowId(),u=a.sessionId,l=a.windowId;i.$session_id=u,i.$window_id=l}if(this.requestRouter.region===Gi.CUSTOM&&(i.$lib_custom_api_host=this.config.api_host),this.sessionPropsManager&&this.config.__preview_send_client_session_params&&("$pageview"===e||"$pageleave"===e||"$autocapture"===e)){var c=this.sessionPropsManager.getSessionProps();i=Y(i,c)}if(!this.config.disable_scroll_properties){var d={};"$pageview"===e?d=this.pageViewManager.doPageView():"$pageleave"===e&&(d=this.pageViewManager.doPageLeave()),i=Y(i,d)}if("$pageview"===e&&L&&(i.title=L.title),!F(n)){var h=(new Date).getTime()-n;i.$duration=parseFloat((h/1e3).toFixed(3))}j&&this.config.opt_out_useragent_filter&&(i.$browser_type=fr(j,this.config.custom_blocked_useragents)?"bot":"browser"),(i=Y({},o,this.persistence.properties(),this.sessionPersistence.properties(),i)).$is_identified=this._isIdentified(),b(this.config.property_denylist)?J(this.config.property_denylist,(function(e){delete i[e]})):z.error("Invalid value for property_denylist config: "+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var f=this.config.sanitize_properties;return f&&(i=f(i,e)),i.$process_person_profile=this._hasPersonProcessing(),i}},{key:"_calculate_set_once_properties",value:function(e){if(!this.persistence||!this._hasPersonProcessing())return e;var t=Y({},this.persistence.get_initial_props(),e||{});return S(t)?void 0:t}},{key:"register",value:function(e,t){var n;null===(n=this.persistence)||void 0===n||n.register(e,t)}},{key:"register_once",value:function(e,t,n){var i;null===(i=this.persistence)||void 0===i||i.register_once(e,t,n)}},{key:"register_for_session",value:function(e){var t;null===(t=this.sessionPersistence)||void 0===t||t.register(e)}},{key:"unregister",value:function(e){var t;null===(t=this.persistence)||void 0===t||t.unregister(e)}},{key:"unregister_for_session",value:function(e){var t;null===(t=this.sessionPersistence)||void 0===t||t.unregister(e)}},{key:"_register_single",value:function(e,t){this.register(l({},e,t))}},{key:"getFeatureFlag",value:function(e,t){return this.featureFlags.getFeatureFlag(e,t)}},{key:"getFeatureFlagPayload",value:function(e){var t=this.featureFlags.getFeatureFlagPayload(e);try{return JSON.parse(t)}catch(e){return t}}},{key:"isFeatureEnabled",value:function(e,t){return this.featureFlags.isFeatureEnabled(e,t)}},{key:"reloadFeatureFlags",value:function(){this.featureFlags.reloadFeatureFlags()}},{key:"updateEarlyAccessFeatureEnrollment",value:function(e,t){this.featureFlags.updateEarlyAccessFeatureEnrollment(e,t)}},{key:"getEarlyAccessFeatures",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.featureFlags.getEarlyAccessFeatures(e,t)}},{key:"on",value:function(e,t){return this._debugEventEmitter.on(e,t)}},{key:"onFeatureFlags",value:function(e){return this.featureFlags.onFeatureFlags(e)}},{key:"onSessionId",value:function(e){var t,n;return null!==(t=null===(n=this.sessionManager)||void 0===n?void 0:n.onSessionId(e))&&void 0!==t?t:function(){}}},{key:"getSurveys",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.surveys.getSurveys(e,t)}},{key:"getActiveMatchingSurveys",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.surveys.getActiveMatchingSurveys(e,t)}},{key:"identify",value:function(e,t,n){if(!this.__loaded||!this.persistence)return z.uninitializedWarning("posthog.identify");if(P(e)&&(e=e.toString(),z.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),e){if(["distinct_id","distinctid"].includes(e.toLowerCase()))z.critical('The string "'.concat(e,'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'));else if(this._requirePersonProcessing("posthog.identify")){var i=this.get_distinct_id();if(this.register({$user_id:e}),!this.get_property("$device_id")){var r=i;this.register_once({$had_persisted_distinct_id:!0,$device_id:r},"")}e!==i&&e!==this.get_property(ae)&&(this.unregister(ae),this.register({distinct_id:e}));var s="anonymous"===(this.persistence.get_property(Ee)||"anonymous");e!==i&&s?(this.persistence.set_property(Ee,"identified"),this.setPersonPropertiesForFlags(t||{},!1),this.capture("$identify",{distinct_id:e,$anon_distinct_id:i},{$set:t||{},$set_once:n||{}}),this.featureFlags.setAnonymousDistinctId(i)):(t||n)&&this.setPersonProperties(t,n),e!==i&&(this.reloadFeatureFlags(),this.unregister(Fe))}}else z.error("Unique user id has not been set in posthog.identify")}},{key:"setPersonProperties",value:function(e,t){(e||t)&&this._requirePersonProcessing("posthog.setPersonProperties")&&(this.setPersonPropertiesForFlags(e||{}),this.capture("$set",{$set:e||{},$set_once:t||{}}))}},{key:"group",value:function(e,t,n){if(e&&t){if(this._requirePersonProcessing("posthog.group")){var i=this.getGroups();i[e]!==t&&this.resetGroupPropertiesForFlags(e),this.register({$groups:r(r({},i),{},l({},e,t))}),n&&(this.capture("$groupidentify",{$group_type:e,$group_key:t,$group_set:n}),this.setGroupPropertiesForFlags(l({},e,n))),i[e]===t||n||this.reloadFeatureFlags()}}else z.error("posthog.group requires a group type and group key")}},{key:"resetGroups",value:function(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}},{key:"setPersonPropertiesForFlags",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this._requirePersonProcessing("posthog.setPersonPropertiesForFlags")&&this.featureFlags.setPersonPropertiesForFlags(e,t)}},{key:"resetPersonPropertiesForFlags",value:function(){this.featureFlags.resetPersonPropertiesForFlags()}},{key:"setGroupPropertiesForFlags",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this._requirePersonProcessing("posthog.setGroupPropertiesForFlags")&&this.featureFlags.setGroupPropertiesForFlags(e,t)}},{key:"resetGroupPropertiesForFlags",value:function(e){this.featureFlags.resetGroupPropertiesForFlags(e)}},{key:"reset",value:function(e){var t,n,i,r;if(!this.__loaded)return z.uninitializedWarning("posthog.reset");var s=this.get_property("$device_id");null===(t=this.persistence)||void 0===t||t.clear(),null===(n=this.sessionPersistence)||void 0===n||n.clear(),null===(i=this.persistence)||void 0===i||i.set_property(Ee,"anonymous"),null===(r=this.sessionManager)||void 0===r||r.resetSessionId();var o=this.config.get_device_id(Ue());this.register_once({distinct_id:o,$device_id:e?o:s},"")}},{key:"get_distinct_id",value:function(){return this.get_property("distinct_id")}},{key:"getGroups",value:function(){return this.get_property("$groups")||{}}},{key:"get_session_id",value:function(){var e,t;return null!==(e=null===(t=this.sessionManager)||void 0===t?void 0:t.checkAndGetSessionAndWindowId(!0).sessionId)&&void 0!==e?e:""}},{key:"get_session_replay_url",value:function(e){if(!this.sessionManager)return"";var t=this.sessionManager.checkAndGetSessionAndWindowId(!0),n=t.sessionId,i=t.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/".concat(this.config.token,"/replay/").concat(n));if(null!=e&&e.withTimestamp&&i){var s,o=null!==(s=e.timestampLookBack)&&void 0!==s?s:10;if(!i)return r;var a=Math.max(Math.floor(((new Date).getTime()-i)/1e3)-o,0);r+="?t=".concat(a)}return r}},{key:"alias",value:function(e,t){return e===this.get_property(oe)?(z.critical("Attempting to create alias for existing People user - aborting."),-2):this._requirePersonProcessing("posthog.alias")?(F(t)&&(t=this.get_distinct_id()),e!==t?(this._register_single(ae,e),this.capture("$create_alias",{alias:e,distinct_id:t})):(z.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}},{key:"set_config",value:function(e){var t,n,i,s,o=r({},this.config);w(e)&&(Y(this.config,Cr(e)),null===(t=this.persistence)||void 0===t||t.update_config(this.config,o),this.sessionPersistence="sessionStorage"===this.config.persistence?this.persistence:new on(r(r({},this.config),{},{persistence:"sessionStorage"})),Ye.is_supported()&&"true"===Ye.get("ph_debug")&&(this.config.debug=!0),this.config.debug&&(v.DEBUG=!0),null===(n=this.sessionRecording)||void 0===n||n.startIfEnabledOrStop(),null===(i=this.autocapture)||void 0===i||i.startIfEnabled(),null===(s=this.heatmaps)||void 0===s||s.startIfEnabled(),this.surveys.loadIfEnabled())}},{key:"startSessionRecording",value:function(e){if(null!=e&&e.sampling){var t,n,i=null===(t=this.sessionManager)||void 0===t?void 0:t.checkAndGetSessionAndWindowId();null===(n=this.persistence)||void 0===n||n.register(l({},me,!0)),z.info("Session recording started with sampling override for session: ",null==i?void 0:i.sessionId)}this.set_config({disable_session_recording:!1})}},{key:"stopSessionRecording",value:function(){this.set_config({disable_session_recording:!0})}},{key:"sessionRecordingStarted",value:function(){var e;return!(null===(e=this.sessionRecording)||void 0===e||!e.started)}},{key:"loadToolbar",value:function(e){return this.toolbar.loadToolbar(e)}},{key:"get_property",value:function(e){var t;return null===(t=this.persistence)||void 0===t?void 0:t.props[e]}},{key:"getSessionProperty",value:function(e){var t;return null===(t=this.sessionPersistence)||void 0===t?void 0:t.props[e]}},{key:"toString",value:function(){var e,t=null!==(e=this.config.name)&&void 0!==e?e:xr;return t!==xr&&(t=xr+"."+t),t}},{key:"_isIdentified",value:function(){var e,t;return"identified"===(null===(e=this.persistence)||void 0===e?void 0:e.get_property(Ee))||"identified"===(null===(t=this.sessionPersistence)||void 0===t?void 0:t.get_property(Ee))}},{key:"_hasPersonProcessing",value:function(){var e,t,n,i;return!("never"===this.config.person_profiles||"identified_only"===this.config.person_profiles&&!this._isIdentified()&&S(this.getGroups())&&(null===(e=this.persistence)||void 0===e||null===(t=e.props)||void 0===t||!t[ae])&&(null===(n=this.persistence)||void 0===n||null===(i=n.props)||void 0===i||!i[Ce]))}},{key:"_requirePersonProcessing",value:function(e){return"never"===this.config.person_profiles?(z.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this._register_single(Ce,!0),!0)}},{key:"_gdpr_init",value:function(){"localStorage"===this.config.opt_out_capturing_persistence_type&&Ye.is_supported()&&(!this.has_opted_in_capturing()&&this.has_opted_in_capturing({persistence_type:"cookie"})&&this.opt_in_capturing({enable_persistence:!1}),!this.has_opted_out_capturing()&&this.has_opted_out_capturing({persistence_type:"cookie"})&&this.opt_out_capturing({clear_persistence:!1}),this.clear_opt_in_out_capturing({persistence_type:"cookie",enable_persistence:!1})),this.has_opted_out_capturing()?this._gdpr_update_persistence({clear_persistence:!0}):this.has_opted_in_capturing()||!this.config.opt_out_capturing_by_default&&!Qe.get("ph_optout")||(Qe.remove("ph_optout"),this.opt_out_capturing({clear_persistence:this.config.opt_out_persistence_by_default}))}},{key:"_gdpr_update_persistence",value:function(e){var t,n,i,r,s;if(e&&e.clear_persistence)i=!0;else{if(!e||!e.enable_persistence)return;i=!1}this.config.disable_persistence||(null===(t=this.persistence)||void 0===t?void 0:t.disabled)===i||null===(r=this.persistence)||void 0===r||r.set_disabled(i),this.config.disable_persistence||(null===(n=this.sessionPersistence)||void 0===n?void 0:n.disabled)===i||null===(s=this.sessionPersistence)||void 0===s||s.set_disabled(i)}},{key:"_gdpr_call_func",value:function(e,t){return t=Y({capture:this.capture.bind(this),persistence_type:this.config.opt_out_capturing_persistence_type,cookie_prefix:this.config.opt_out_capturing_cookie_prefix,cookie_expiration:this.config.cookie_expiration,cross_subdomain_cookie:this.config.cross_subdomain_cookie,secure_cookie:this.config.secure_cookie},t||{}),Ye.is_supported()||"localStorage"!==t.persistence_type||(t.persistence_type="cookie"),e(this.config.token,{capture:t.capture,captureEventName:t.capture_event_name,captureProperties:t.capture_properties,persistenceType:t.persistence_type,persistencePrefix:t.cookie_prefix,cookieExpiration:t.cookie_expiration,crossSubdomainCookie:t.cross_subdomain_cookie,secureCookie:t.secure_cookie})}},{key:"opt_in_capturing",value:function(e){e=Y({enable_persistence:!0},e||{}),this._gdpr_call_func(Wn,e),this._gdpr_update_persistence(e)}},{key:"opt_out_capturing",value:function(e){var t=Y({clear_persistence:!0},e||{});this._gdpr_call_func(zn,t),this._gdpr_update_persistence(t)}},{key:"has_opted_in_capturing",value:function(e){return this._gdpr_call_func(Gn,e)}},{key:"has_opted_out_capturing",value:function(e){return this._gdpr_call_func(Vn,e)}},{key:"clear_opt_in_out_capturing",value:function(e){var t=Y({enable_persistence:!0},null!=e?e:{});this._gdpr_call_func(Qn,t),this._gdpr_update_persistence(t)}},{key:"debug",value:function(e){!1===e?(null==T||T.console.log("You've disabled debug mode."),localStorage&&localStorage.removeItem("ph_debug"),this.set_config({debug:!1})):(null==T||T.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),localStorage&&localStorage.setItem("ph_debug","true"),this.set_config({debug:!0}))}}]),e}();!function(e,t){for(var n=0;n{o.r(t),o.d(t,{default:()=>l});var i=o(8711),n=o(83199);const r=(0,i.css)(['html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:inherit;}body{font-size:14px;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif;min-height:100vh;scroll-behavior:smooth;text-rendering:optimizespeed;scrollbar-gutter:stable both-edges;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}body{-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch;}body > iframe:not([src$="statuspage.io/embed/frame"]){display:none;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none;}table{border-collapse:collapse;border-spacing:0;th,tr{vertical-align:middle;}th{font-weight:bold;}}*{box-sizing:inherit;-webkit-font-smoothing:antialiased;font-weight:inherit;text-rendering:optimizelegibility;-webkit-appearance:none;border-width:0px;border-style:initial;border-color:initial;border-image:initial;margin:0px;outline:0px;padding:0px;text-decoration:none;}*,*::before,*::after{box-sizing:border-box;}input[type="button" i],input[type="submit" i],input[type="reset" i],input[type="file" i]::-webkit-file-upload-button,button{border-color:transparent;border-style:none;border-width:0;padding:0;}a{color:',";&:hover{text-decoration:underline;color:",";}&:visited{color:",";}}b{font-weight:bold;}i{font-style:italic;}code{font-family:monospace;}::-webkit-scrollbar{height:8px;width:8px;}",""],(e=>e.theme.colors.link),(e=>e.theme.colors.linkHover),(e=>e.theme.colors.link),(e=>e.isScreenSmall&&"\n ::-webkit-scrollbar {\n width: 0px !important;\n height: 0px !important;\n background: transparent !important; /* make scrollbar transparent */\n }\n ")),l=(0,i.createGlobalStyle)([""," ",""],r,n.webkitVisibleScrollbar)}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3750.4ad02f036f2a7c520b1c.chunk.js b/src/web/gui/v2/3750.4ad02f036f2a7c520b1c.chunk.js deleted file mode 100644 index df5cf24f0..000000000 --- a/src/web/gui/v2/3750.4ad02f036f2a7c520b1c.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7b7f67f5-e18c-474a-965d-53b795758a0e",e._sentryDebugIdIdentifier="sentry-dbid-7b7f67f5-e18c-474a-965d-53b795758a0e")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3750],{63750:(e,t,l)=>{l.r(t),l.d(t,{default:()=>_});l(9391),l(41393),l(81454),l(62953);var n=l(96540),a=l(63950),o=l.n(a),r=l(83199),c=l(47731),d=l(71835),s=l(92155),i=l(63314),u=l(32089),m=(l(17333),l(3064),l(14905),l(98992),l(54520),l(72577),l(8872),l(8711));const g=(0,m.default)(r.MenuDropdown).attrs((e=>({background:"transparent",hideShadow:!0,height:{max:"300px"},width:{max:"600px"},overflow:"auto",padding:[2],...e}))).withConfig({displayName:"styled__CheckboxesContainer",componentId:"sc-8uj6na-0"})([""]),f=e=>{let{index:t,item:l,onItemClick:a}=e;const{group:o,label:c,value:d,node:s={}}=l,{selected:i,disabled:u}=s,m=o&&t>0?[3,0,1,0]:[1,0];return n.createElement(r.Flex,{padding:m},o?n.createElement(r.Flex,{gap:2,alignItems:"center"},n.createElement(r.Icon,{name:o.iconName,size:"small"}),n.createElement(r.Text,{color:o.textColor||"textFocus"},o.label)):n.createElement(r.Flex,null,n.createElement(r.Checkbox,{checked:i,disabled:u,onChange:e=>{u||a({value:d,label:c,checked:e})},label:c,value:d,labelPosition:"right"})))};var p=l(47193);const b={live:{iconName:"connectivityStatusLive",label:"Live",textColor:"primary"},offline:{iconName:"connectivityStatusOffline",label:"Offline",textColor:"textFocus"},stale:{iconName:"connectivityStatusStale",label:"Stale",textColor:"textFocus"}},E=(e,t)=>{var l;return t&&Object.keys(t)&&null!==(l=t[e])&&void 0!==l&&l.length?[{group:b[e]},...t[e]]:[]},v=e=>{let{selectedNodes:t,setSelectedNodes:l,activeNodesLimit:a=0}=e;const{nodes:o}=(0,p.A)(),[r,c]=(0,n.useState)([]),d=(0,n.useCallback)((e=>{let{value:n,label:a,checked:o}=e;o&&!t.find((e=>e.value==n))?l((e=>[...e,{value:n,label:a}])):!o&&t.find((e=>e.value==n))&&l((e=>e.filter((e=>e.value!=n))))}),[t]);return(0,n.useEffect)((()=>{o&&c(((e,t,l)=>{const n=e.reduce(((e,n)=>{const a={...n},o=n.isLive?"live":n.isOffline?"offline":"stale";t.find((e=>{let{value:t}=e;return t==n.id}))?a.selected=!0:l==t.length&&(a.disabled=!0);const r={label:n.name,value:n.id,node:a};return e[o]?e[o]=[...e[o],r]:e[o]=[r],e}),{});return[...E("live",n),...E("offline",n),...E("stale",n)]})(o,t,a))}),[o,t]),n.createElement(g,{items:r,Item:f,onItemClick:d,searchMargin:[0,0,4,0],hasSearch:!0})};var x=l(6586),h=l(28738),y=l(58168);const N=e=>{let{isTitle:t,value:l,selectedNodes:a,setSelectedNodes:c=o(),children:d}=e;const s=(0,n.useCallback)((()=>{t||c((e=>e.filter((e=>e.value!=l))))}),[t,l,a,c]),i={gap:1,height:"18px",alignItems:"center",padding:[0,2],margin:[0,0,2,0],round:!0,...t?{}:{background:"nodeBadgeBackground"}};return n.createElement(r.Flex,i,!t&&n.createElement(r.Icon,{name:"x",size:"small",onClick:s,color:"text",cursor:"pointer"}),d)},S=e=>{let{selectedNodes:t,setSelectedNodes:l}=e;return t.length?n.createElement(r.Flex,{flexWrap:!0,gap:2},n.createElement(N,{isTitle:!0},n.createElement(r.TextBig,null,"Selected Nodes:")),t.map((e=>{let{label:a,...o}=e;return n.createElement(N,(0,y.A)({key:o.value,selectedNodes:t,setSelectedNodes:l},o),n.createElement(r.TextSmall,{color:"text"},a))}))):null};var k=l(12602),w=l(73865);const C=e=>{let{selectedNodes:t,setSelectedNodes:l,loading:a,error:o}=e;const{loaded:c,currentPlan:d,maxNodes:s}=(0,w.A)();return n.createElement(r.Flex,{column:!0,gap:4},a&&c?n.createElement(h.A,{height:"280px",title:"Saving selection..."}):n.createElement(n.Fragment,null,n.createElement(r.Flex,{column:!0,margin:[3,0,0,0],gap:4},n.createElement(r.TextBig,null,"Your current"," ",n.createElement(r.TextBig,{strong:!0},d.class," (",d.version,")")," ","plan does not allow more than ",n.createElement(r.TextBig,{strong:!0},s," active nodes"),"."),n.createElement(r.TextBig,null,"To proceed, select the ",n.createElement(r.TextBig,{strong:!0},s," Nodes")," that you wish to keep active. Any Nodes beyond this limit will be deactivated."),o&&n.createElement(r.Flex,{gap:2,alignItems:"center"},n.createElement(r.Icon,{name:"warning_triangle",size:"medium",color:"warning"}),n.createElement(r.TextBig,null,"For some reason, we coudn't save your selection. Please retry."))),n.createElement(u.A,null),n.createElement(v,{selectedNodes:t,setSelectedNodes:l,activeNodesLimit:s}),n.createElement(u.A,null),n.createElement(r.Flex,{column:!0,gap:4},n.createElement(S,{selectedNodes:t,setSelectedNodes:l}),n.createElement(r.TextBig,null,"Remember, you can"," ",n.createElement(k.A,null,n.createElement(r.TextBig,{color:"primary"},"upgrade your space back to the Business plan"))," ","for unlimited access at any time."),n.createElement(r.TextBig,null,"The node selection isn't a commitment, you can modify the active Nodes any time on the"," ",n.createElement(x.A,null,n.createElement(r.TextBig,{color:"primary"},"Space Settings page")),"."))))},I=(0,m.default)(r.ModalContent).attrs((e=>{let{isMobile:t}=e;return{width:t?{base:"95vw"}:{base:150}}})).withConfig({displayName:"styled__PreferredNodesModalContent",componentId:"sc-1v8zr4l-0"})([""]);var A=l(47762),T=l(29848),B=l(87659);const F=(0,s.A)(r.Button),_=e=>{let{onSuccessfulSave:t=o()}=e;const l=(0,T.ly)(),a=(0,c.J)(),[s,u]=(0,d.A)(),m=(0,A.je)(),[g,f]=(0,n.useState)([]),[p,b]=(0,n.useState)(),[E,,v,x]=(0,B.A)(),h=(0,n.useCallback)((()=>{v(),m(g.map((e=>{let{value:t}=e;return t}))).then((()=>{s({header:"Success",text:"You selection was successfully saved"}),t(),l()})).catch((()=>{b(!0),u({header:"Error",text:"Selection failed to be saved"})})).finally((()=>{x()}))}),[g,m]);return n.createElement(r.Modal,{backdropProps:{backdropBlur:!0}},n.createElement(i.Ay,{feature:"PreferredNodesModal"},n.createElement(I,{isMobile:a},n.createElement(r.ModalHeader,null,n.createElement(r.Flex,{gap:2,alignItems:"center"},n.createElement(r.Icon,{name:"netdataPress",color:"text"}),n.createElement(r.H4,null,"Required Action"))),n.createElement(r.ModalBody,null,n.createElement(C,{selectedNodes:g,setSelectedNodes:f,loading:E,error:p})),!E&&n.createElement(r.ModalFooter,null,n.createElement(r.Flex,{gap:4,justifyContent:"end",padding:[1,2]},n.createElement(F,{feature:"SavePreferredNodes",label:"Save",onClick:h,disabled:E||!g.length,payload:{selectedNodes:g.map((e=>{let{value:t}=e;return t})).join(",")}}))))))}},47193:(e,t,l)=>{l.d(t,{A:()=>s});l(62953);var n=l(69765),a=l(67990),o=l(87860),r=l(3914),c=l(47762),d=l(87659);const s=function(){let{polling:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t=""}=(0,n.pr)(),l=(0,a.gr)(t,"ids"),s=(0,a.gr)(t,"loaded"),i=(0,c.Gt)(l),u=(0,r.vt)(),[m,,,g]=(0,d.A)();return(0,o.A)({id:t,spaceId:u,polling:e}),{areDefaultRoomNodesLoaded:s,nodes:i,isClaimNodeModalOpen:m,closeClaimNodeModal:g}}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3843.89070793921be1288bb5.css b/src/web/gui/v2/3843.89070793921be1288bb5.css deleted file mode 100644 index e5d02668f..000000000 --- a/src/web/gui/v2/3843.89070793921be1288bb5.css +++ /dev/null @@ -1,2 +0,0 @@ -.default .dygraph-axis-label{color:#35414a}.dark .dygraph-axis-label{color:#fff}.dygraph-label-rotate-right{text-align:center;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg)}.dygraph-annotation{position:absolute;z-index:10;overflow:hidden;border:1px solid} - diff --git a/src/web/gui/v2/3843.ffbb6f614ba4f7b77570.chunk.js b/src/web/gui/v2/3843.ffbb6f614ba4f7b77570.chunk.js deleted file mode 100644 index b444666ff..000000000 --- a/src/web/gui/v2/3843.ffbb6f614ba4f7b77570.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="79eb8fed-e1a0-4523-ab23-55a2de3ad85e",e._sentryDebugIdIdentifier="sentry-dbid-79eb8fed-e1a0-4523-ab23-55a2de3ad85e")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3843,7170],{79304:(e,t,n)=>{n.d(t,{A:()=>s});n(25440);const s=e=>(e||"").replace(/[\s:()./]/g,"_")},17170:(e,t,n)=>{n.d(t,{A:()=>a});n(62953),n(3296),n(27208),n(48408);var s=n(37618);const a=()=>{if(s.Ay)return null;const{origin:e,searchParams:t}=new URL(window.location.href),n=null===t||void 0===t?void 0:t.get("labra_subscription_id"),a=null===t||void 0===t?void 0:t.get("aws_customer_id"),o=null===t||void 0===t?void 0:t.get("aws_product_id");return n&&a&&o?"".concat(e,"/api/v2/billing/labra/spaces?customer_id=").concat(a,"&marketplace=aws&product_id=").concat(o,"&subscription_id=").concat(n):null}},61658:(e,t,n)=>{n.d(t,{O:()=>a});const s={ErrNoChartExist:"ErrNoChartExist"},a=function(e){return!!(arguments.length>1&&void 0!==arguments[1]?arguments[1]:s)[e]}},1239:(e,t,n)=>{var s;n.d(t,{ei:()=>a});const a=(null===(s=window.envSettings)||void 0===s?void 0:s.onprem)||!1},42629:(e,t,n)=>{n.d(t,{Oq:()=>c,sd:()=>o,tr:()=>d,zA:()=>l});var s=n(78659),a=n.n(s);const o=e=>Math.round(10*e)/10,r=e=>{const{gutter:t,containerWidth:n,gridTracks:s}=e;return(n-t*(s-1))/s};function i(e,t,n){return Number.isFinite(e)?o(t*e+Math.max(0,e-1)*n):e}function c(e,t,n,s,a,c){const{gutter:l,rowHeight:d}=e,h=r(e),u={};return c?(u.width=i(c.width,h,l),u.height=i(c.height,d,l),u.top=o((d+l)*c.top),u.left=o((h+l)*c.left)):(u.width=i(s,h,l),u.height=i(a,d,l),u.top=o((d+l)*n),u.left=o((h+l)*t)),u}function l(e,t,n,s){const{gutter:i,gridTracks:c,rowHeight:l,maxRows:d}=e,h=r(e);let u=o((n-i)/(h+i)),p=o((t-i)/(l+i));return u=a()(u,0,c-s.width),p=a()(p,0,d-s.height),{left:u,top:p}}const d=(e,t,n,s)=>{const{gutter:i,maxRows:c,gridTracks:l,rowHeight:d}=e,h=r(e);let u=o((t+i)/(h+i)),p=o((n+i)/(d+i));return u=a()(a()(u,s.minWidth||3,l-s.left),0,l),p=a()(a()(p,s.minHeight||2,c-s.top),0,c),{width:u,height:p}}},34604:(e,t,n)=>{n.d(t,{A:()=>c});var s=n(58168),a=n(96540),o=n(8711),r=n(83199);const i=o.default.div.withConfig({displayName:"container__Div",componentId:"sc-tikmd7-0"})(["position:relative;"]),c=(0,a.forwardRef)(((e,t)=>{let{onRemove:n,children:o,...c}=e;return a.createElement(i,(0,s.A)({},c,{ref:t}),a.createElement(r.Icon,{name:"x",size:"small",onClick:n}),o)}))},75233:(e,t,n)=>{n.d(t,{A:()=>p});var s=n(58168),a=(n(3064),n(41393),n(98992),n(72577),n(81454),n(62953),n(96540)),o=n(40961),r=n(43375),i=n(45467),c=n(34604),l=n(44554),d=n(42629),h=n(13692);const u={sideEffects(e){let{active:t}=e;t.node.animate([{opacity:0},{opacity:1}],{easing:"ease-in",duration:250})}},p=e=>{let{rootId:t,items:n,onRemove:p,Item:m,containerWidth:g=800,rowHeight:f=40,gridTracks:b=12,gutter:y=4,allowOverlap:v=!1,compactType:_="vertical",maxRows:w=3e5,Container:k=c.A,onDragEnd:T,containerId:S,itemProps:M,rearrangeable:x=!0}=e;const C=(0,a.useRef)(),[P,B]=(0,a.useState)((()=>(0,l.oE)((0,l.Su)(n),_,b)));(0,i.A)((()=>{B((0,l.oE)((0,l.Su)(n),_,b))}),[b]);const[q,I]=(0,a.useState)(null),[L,A]=(0,a.useState)(null),E=(0,a.useRef)(null),{active:D}=(0,r.fF)();(0,r.E5)((0,a.useMemo)((()=>({onDragStart:e=>{let{active:t}=e;const{itemContainerId:n}=t.data.current;n===S&&(I(P),A(P))},onDragMove:e=>{let{active:t,over:n}=e;A((e=>{const{isResizer:s,isContainer:a,itemId:o,itemContainerId:r}=t.data.current;if(a||r!==S)return e;const{initial:i,translated:c}=t.rect.current;let h=e;const u=(0,l.GN)(h,o);if(!u)return e;const p=null===n||void 0===n?void 0:n.id;if(s){if(!p)return e;const t=n.rect.width+(0,d.sd)(c.right-i.right),s=n.rect.height+(0,d.sd)(c.bottom-i.bottom);let{width:a,height:o}=(0,d.tr)({gutter:y,maxRows:w,gridTracks:b,rowHeight:f,containerWidth:g},t,s,u);return u.width===a&&u.height===o?e:(u.width=a,u.height=o,h=h.map((e=>e.id===u.id?{...u,width:a,height:o}:e)),h=(0,l.oE)(h,_,b),E.current=u,h)}if(!x)return e;const m=C.current.getBoundingClientRect();let{left:k,top:T}=(0,d.zA)({gutter:y,maxRows:w,gridTracks:b,rowHeight:f,containerWidth:g},c.top-m.top,c.left-m.left,u);return u.top===T&&u.left===k?e:(h=(0,l.Pe)(h,u,k,T,!0,!1,_,b,v),h=(0,l.oE)(h,_,b),E.current=u,h)}))},onDragEnd:e=>{let{active:t,over:n}=e;const{isResizer:s,isContainer:a,itemContainerId:o}=t.data.current;if(a||o!==S)return void A(null);const r=null===n||void 0===n?void 0:n.id;if(s)return L&&B(L),A(null),void T(L,E.current);null!==r?(L&&B(L),A(null),T(L,E.current)):A(null)},onDragCancel:()=>{q&&B(q),E.current=null,I(null),A(null)}})),[L]));const N=(0,l.Hp)(L||P),R=N*f+(N-1)*y+"px";return a.createElement(k,{ref:C,style:{width:g,height:R}},(L||P).map(((e,n)=>a.createElement(h.A,(0,s.A)({key:e.id},e,{index:n,containerId:S,Item:m,onRemove:p,draggable:!0,containerWidth:g,rowHeight:f,gridTracks:b,gutter:y,transformed:null!==L?L[n]:null,draggableProps:e,itemProps:M,rootId:t})))),(0,o.createPortal)(a.createElement(r.Hd,{adjustScale:!1,dropAnimation:u,zIndex:9999},D&&D.data.current.rootId===t&&D.data.current.isItem?(e=>{const n=L||P;if(!n)return null;const o=n.find((t=>t.id===e.itemId));return o?a.createElement(h.A,(0,s.A)({rootId:t},o,{containerId:e.itemContainerId,Item:m,onRemove:p,draggable:!0,containerWidth:g,rowHeight:f,gridTracks:b,gutter:y,dragOverlay:!0,itemProps:M})):null})(D.data.current):null),document.body))}},13692:(e,t,n)=>{n.d(t,{A:()=>d});var s=n(58168),a=n(96540),o=n(8711),r=n(83199),i=n(43375),c=n(42629);const l=(0,o.default)(r.IconButton).attrs({icon:"resize_handler",padding:[0],position:"absolute",bottom:0,right:0,hoverColor:"textDescription",width:"14px",height:"14px"}).withConfig({displayName:"item__ResizeButton",componentId:"sc-1g5beux-0"})(["&&{cursor:nwse-resize;}"]),d=e=>{let{draggable:t,id:n,containerId:o,index:d,onRemove:h,itemProps:u,Item:p,top:m,left:g,width:f,height:b,containerWidth:y,rowHeight:v,gridTracks:_,gutter:w,transformed:k,draggableProps:T,dragOverlay:S,containerDragOverlay:M,rootId:x,containerDndProps:C}=e;const{setNodeRef:P}=(0,i.zM)({id:S||M?"dragOverlay-".concat(x,"-").concat(n):"".concat(x,"-").concat(n),disabled:!t||S||M,data:{isItem:!0,itemId:n,itemContainerId:o,rootId:x,...C}}),{attributes:B,isDragging:q,listeners:I,setNodeRef:L,setActivatorNodeRef:A}=(0,i.PM)({id:S||M?"dragOverlay-".concat(x,"-").concat(n):"".concat(x,"-").concat(n),disabled:!t||S||M,data:{isItem:!0,itemId:n,itemContainerId:o,...T,itemProps:u,rootId:x}}),E=(0,i.PM)({id:S||M?"dragOverlay-".concat(x,"-").concat(n,"-resizeHandle"):"".concat(x,"-").concat(n,"-resizeHandle"),disabled:S||M,data:{isResizer:!0,itemId:n,itemContainerId:o,rootId:x}}),D=(0,c.Oq)({containerWidth:y,rowHeight:v,gridTracks:_,gutter:w},g,m,f,b,k),N=S?{width:"".concat(D.width,"px"),height:"".concat(D.height,"px"),boxShadow:"\n 0 0 0 1px rgba(63, 63, 68, 0.05),\n -1px 0 15px 0 rgba(34, 33, 81, 0.01),\n 0px 15px 15px 0 rgba(34, 33, 81, 0.25)\n "}:{transition:q||E.isDragging?"":"top 100ms ease, left 100ms ease, width 100ms ease, height 100ms ease",position:"absolute",width:"".concat(D.width/y*100,"%"),height:"".concat(D.height,"px"),left:"".concat(D.left/y*100,"%"),top:"".concat(D.top,"px")};return a.createElement(p,(0,s.A)({},u,{containerId:o,ref:(0,r.mergeRefs)(L,P),dragging:q,resizing:E.isDragging,handleProps:S||M||!t?void 0:{ref:A},index:d,style:N,onRemove:h,id:n,attributes:B,listeners:I,resizeHandle:a.createElement(l,(0,s.A)({ref:E.setNodeRef},E.attributes,E.listeners)),dragOverlay:S||M}))}},38257:(e,t,n)=>{n.d(t,{A:()=>r});n(62953);var s=n(96540),a=n(43375);const o={vertical:{start:"top",end:"bottom",mouse:"clientY",clientDimension:"clientHeight",scrollDimension:"scrollHeight",scrollStart:"scrollTop"},horizontal:{start:"left",end:"right",mouse:"clientX",clientDimension:"clientWidth",scrollDimension:"scrollWidth",scrollStart:"scrollLeft"}},r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"vertical";const{start:t,end:n,mouse:r,clientDimension:i,scrollDimension:c,scrollStart:l}=o[e]||o.vertical,{active:d}=(0,a.fF)(),h=(0,s.useRef)(null),[u,p]=(0,s.useState)(null);return(0,s.useEffect)((()=>{if(!u)return;const e=h.current;if(!e)return;const t=setInterval((()=>{e[l]+=5*u}),5);return()=>clearInterval(t)}),[u,h.current]),(0,s.useEffect)((()=>{const e=e=>{const s=h.current;if(!d||!s)return;if(!(s[c]>s[i]))return;const a=s.getBoundingClientRect(),o=e[r],l=oa[n]-100?1:null;p((e=>l!==e?l:e))};return d?window.addEventListener("mousemove",e):(window.removeEventListener("mousemove",e),p(null)),()=>{window.removeEventListener("mousemove",e),p(null)}}),[d,h.current]),h}},18202:(e,t,n)=>{n.d(t,{A:()=>s});const s=e=>{let{contextScope:t,nodesScope:n,aggregationMethod:s,groupBy:a,groupByLabel:o,postAggregationMethod:r,postGroupBy:i,postGroupByLabel:c,groupingMethod:l,groupingTime:d,chartType:h,chartLibrary:u,selectedDimensions:p,selectedLabels:m,selectedNodes:g,selectedInstances:f,sparkline:b,selectedLegendDimensions:y,showingInfo:v,dimensionsSortBy:_,instancesSortBy:w,nodesSortBy:k,groupBySortBy:T,labelsSortBy:S,dimensionsSort:M,nodesExpanded:x,groupByExpanded:C,labelsExpanded:P,expanded:B,staticZones:q,overlays:I,title:L,description:A,showPostAggregations:E,desiredUnits:D}=e;return{contextScope:t,nodesScope:n,aggregationMethod:s,groupBy:a,groupByLabel:o,postAggregationMethod:r,postGroupBy:i,postGroupByLabel:c,groupingMethod:l,groupingTime:d,chartType:h,chartLibrary:u,selectedDimensions:p,selectedLabels:m,selectedNodes:g,selectedInstances:f,sparkline:b,selectedLegendDimensions:y,showingInfo:v,dimensionsSortBy:_,instancesSortBy:w,nodesSortBy:k,groupBySortBy:T,labelsSortBy:S,dimensionsSort:M,nodesExpanded:x,groupByExpanded:C,labelsExpanded:P,expanded:B,staticZones:q,overlays:I,title:L,description:A,showPostAggregations:E,desiredUnits:D}}},64125:(e,t,n)=>{n.d(t,{A:()=>M});var s=n(58168),a=(n(41393),n(81454),n(62953),n(96540)),o=n(83199),r=n(18202),i=n(87659),c=n(2386),l=n(6504),d=n(22332),h=n(18925),u=n(40933),p=n(44644),m=(n(3064),n(98992),n(72577),n(92155));const g={room:"space_new",space:"spaces_v2",personal:"user"},f=[{icon:g.personal,value:"personal",label:"Personal"},{icon:g.room,value:"room",label:"Room"},{icon:g.space,value:"space",label:"Space"}],b=(0,m.A)(o.Button),y=e=>{let{onSubmit:t,onClose:n}=e;const[s,r]=(0,a.useState)(""),[i,c]=(0,a.useState)("personal");return a.createElement(o.Modal,{onClickOutside:n,onEsc:n},a.createElement(o.ModalContent,{background:"dropdown"},a.createElement(o.ModalHeader,null,"Create a new settings snapshot",a.createElement(o.ModalCloseButton,{testId:"close-button",onClose:n})),a.createElement(o.ModalBody,null,a.createElement(o.Flex,{column:!0,width:80,gap:3},a.createElement(o.TextInput,{"data-testid":"name",label:"Name",onChange:e=>{let{target:t}=e;return r(t.value)},value:s}),a.createElement(o.Flex,{column:!0,gap:1},a.createElement(o.TextSmall,{strong:!0},"Scope"),a.createElement(o.Select,{options:f,value:f.find((e=>e.value===i)),onChange:e=>{let{value:t}=e;return c(t)},styles:{minWidth:"80px"}})))),a.createElement(o.ModalFooter,null,a.createElement(b,{disabled:""===s.trim(),label:"Create",onClick:()=>t({name:s,scope:i}),"data-testid":"btn-create",payload:{description:"Modal - Create Settings"}}))))},v={color:"textLite",margin:[0,1,0,0],width:"14px",height:"14px"},_=e=>{let{openForm:t,close:n}=e;return a.createElement(o.Flex,{padding:[2,1],border:{side:"top"},justifyContent:"center"},a.createElement(o.Button,{small:!0,icon:"save",onClick:()=>{t(),n()},"data-ga":"user-settings::click-create",title:"Create a new setting with your changes"},"Add new setting"))},w=e=>{let{id:t,close:n}=e;const s=(0,d.useChart)(),i=(0,h.xS)(t,{onSuccess:n});return a.createElement(o.IconButton,{icon:"save",iconColor:"textLite",onClick:e=>{e.stopPropagation(),i({value:(0,r.A)(s.getAttributes())})},"data-ga":"user-settings::click-update",neutral:!0,padding:[0],title:"Update this setting with your changes"})},k=e=>{let{id:t,close:n}=e;const s=(0,h.z2)(t,{onSuccess:n});return a.createElement(o.IconButton,{icon:"trashcan",iconColor:"textLite",onClick:e=>{e.stopPropagation(),s()},"data-ga":"user-settings::click-delete",neutral:!0,padding:[0],title:"Delete this setting"})},T=e=>{let{item:{value:t,label:n,icon:r,disabled:i,onClick:c,...l},value:d,onItemClick:h,index:u,style:p,close:m,...g}=e;const f=d===t;return a.createElement(o.MenuItemContainer,(0,s.A)({"data-index":u,"aria-selected":f,disabled:i,selected:f,onClick:e=>{c&&c(e),h(t)}},l,g,{style:p,alignItems:"center",justifyContent:"between",padding:[1],overflow:"hidden"}),a.createElement(o.Flex,{alignItems:"center"},r,a.createElement(o.TextSmall,{whiteSpace:"normal",wordBreak:"break-word"},n)),a.createElement(o.Flex,{alignItems:"center",gap:.5},a.createElement(w,{id:t,close:m}),a.createElement(k,{id:t,close:m})))},S=e=>{let{disabled:t}=e;const n=(0,d.useChart)(),m=(0,u._)({params:{type:["chart"],entity:n.getAttribute("contextScope")}}),[f,b]=(0,p.WY)({type:"chart",entity:n.getAttribute("contextScope")[0]}),w=(0,a.useCallback)((e=>(f===e&&n.resetPristine(),b(e))),[n,f,b]),k=((e,t)=>(0,a.useMemo)((()=>t.map((t=>({value:t.id,label:t.name,icon:a.createElement(o.Icon,(0,s.A)({name:g[t.scope]||g.personal},v)),"data-track":e.track("setting-".concat(t.scope))})))),[e,t]))(n,m),[S,,M,x]=(0,i.A)(),C=(0,h.yK)({onSuccess:()=>{x(),close()}});return a.createElement(a.Fragment,null,a.createElement(o.Menu,{value:f,items:k,dropProps:{align:{top:"bottom",right:"right"},"data-toolbox":n.getId()},dropdownProps:{width:"200px"},onChange:w,"data-track":n.track("user-settings"),Item:T,Footer:e=>a.createElement(_,(0,s.A)({},e,{openForm:M}))},a.createElement(l.Button,{icon:a.createElement(l.default,{svg:c.default,size:"16px"}),title:"User settings",disabled:t,"data-testid":"chartHeaderToolbox-addSettings"})),S&&a.createElement(y,{onSubmit:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return C({type:"chart",entity:n.getId(),path:"/",...e,value:(0,r.A)(n.getAttributes())})},onClose:x}))},M=(0,a.memo)(S)},83465:(e,t,n)=>{n.d(t,{Oq:()=>a,Q:()=>o,bP:()=>r,ml:()=>s});n(25440);const s=(e,t)=>e.on("sizeChanged",((e,n,s)=>{if(e.getParent()!==t)return;const a=e.getAttribute("id"),o=t.getAttribute("host"),r="chart_height.".concat(o,"/").concat(a);localStorage.setItem(r,n);const i="chart_width.".concat(o,"/").concat(a);localStorage.setItem(i,s)})),a=(e,t,n)=>{const s=e.getAttribute("host"),a="chart_height.".concat(s,"/").concat(t),o=localStorage.getItem(a);return o?/px/.test(o)?parseInt(o.replace("px",""),10):parseInt(o,10):n},o=e=>{null!==e&&void 0!==e&&e.id&&localStorage.setItem("chart_layout/".concat(e.id),JSON.stringify(e))},r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=localStorage.getItem("chart_layout/".concat(e));try{let e=JSON.parse(s);return e?(e=(e=>{let{i:t,id:n=t,x:s,left:a=s,y:o,top:r=o,w:i,width:c=i,h:l,height:d=l}=e;return{id:n,width:c,height:d,left:a,top:r}})(e),{...n,...t,...e}):{...n,...t}}catch(a){return{...n,...t}}}},75793:(e,t,n)=>{n.d(t,{A:()=>c});var s=n(58168),a=(n(62953),n(96540)),o=n(83199),r=n(80158),i=n(29217);const c=e=>{let{text:t,TextComponent:n=o.Text,...c}=e;const[l,d]=(0,a.useState)(""),[h,u]=(0,a.useState)();return(0,a.useEffect)((()=>{if(!h)return;const e=h.offsetWidth;let n=0;for(;h.scrollWidth>e;)h.textContent=(0,r.P3)(h.textContent,n),n+=1;h.textContent!==t&&d(t)}),[t,h]),a.createElement(i.A,{content:l?t:"",align:"bottom",isBasic:!0},a.createElement(n,(0,s.A)({truncate:!0,ref:u},c),t))}},98496:(e,t,n)=>{n.d(t,{A:()=>u});var s=n(58168),a=n(96540),o=n(83199),r=n(12897),i=n.n(r),c=n(55042),l=n.n(c),d=new(i())({id:"partialFailureSvg",use:"partialFailureSvg-usage",viewBox:"0 0 348 348",content:''});l().add(d);const h=d,u=e=>{let{title:t,children:n,...r}=e;return a.createElement(o.Flex,{alignItems:"center",justifyContent:"center",flex:!0,gap:8},a.createElement("svg",{id:"partial_failure",width:"288px",height:"234px"},a.createElement("use",{xlinkHref:"#".concat(h.id)})),a.createElement(o.Flex,(0,s.A)({column:!0,width:{max:125},gap:2},r),a.createElement(o.H3,null,t),n))}},9683:(e,t,n)=>{n.d(t,{A:()=>o});var s=n(96540),a=n(83199);const o=e=>{let{width:t=443,height:n=249,videoId:o,...r}=e;return s.createElement(a.Flex,r,s.createElement(a.Box,{className:"video-responsive"},s.createElement("iframe",{width:t,height:n,src:"https://www.youtube.com/embed/".concat(o),frameBorder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,title:"Embedded youtube"})))}},41198:(e,t,n)=>{n.r(t),n.d(t,{SettingsContainer:()=>Tr,default:()=>Mr});n(62953),n(3296),n(27208),n(48408);var s=n(96540),a=n(39225),o=n(47767),r=n(97054),i=n(56820),c=n(46741),l=n(69765),d=n(47444),h=n(63129);var u=n(87860),p=(n(9920),n(41393),n(14905),n(98992),n(3949),n(81454),n(8872),n(99090)),m=n(64118),g=n(45860),f=n(11988),b=n(51074),y=n(94355);var v=n(29662),_=n(3914),w=n(87633),k=n(66294),T=n(56359),S=n(14994);var M=n(28738),x=n(68831),C=n(58168),P=n(83199),B=n(38257),q=n(92138),I=n(54621),L=n(11128);const A=e=>{let{error:t,testPrefix:n,onClick:s,flavour:a,value:o}=e;return{"data-testid":n?"".concat(n,"-").concat(a):a,flavour:a,...s&&{onClick:s},text:t?"-":"".concat(o)}},E=e=>{let{critical:t,warning:n,error:a,testPrefix:o,...r}=e;const i=A({error:a,testPrefix:o,flavour:t?"error":"disabledError",value:t}),c=A({error:a,testPrefix:o,flavour:n?"warning":"disabledWarning",value:n});return s.createElement(P.Flex,r,s.createElement(P.MasterCard,{"data-testid":"alertsMastercard",pillLeft:i,pillRight:c,size:"small"}))},D=e=>{let{id:t,testPrefix:n,...a}=e;const o=(0,f.Xt)(t),{critical:r,warning:i}=(0,m.AO)(o);return s.createElement(E,(0,C.A)({"data-testid":"alerts",testPrefix:n,critical:r,warning:i},a))},N=e=>{let{critical:t,warning:n,error:a}=e;return s.createElement(D,{critical:t,"data-testid":"tabAlerts",error:a,testPrefix:"tabAlerts-alert",warning:n,margin:[0,0,0,1]})},R=e=>{let{nodeId:t}=e;const n=(0,f.Xt)(t),{critical:a,warning:o}=(0,m.AO)(n);return s.createElement(N,{critical:a,warning:o})},F=()=>{const e=(0,L.w7)({emptyIfAll:!1}),t=(0,f.YS)(e),n=(0,b.s)("error"),{critical:a,warning:o}=(0,m.AO)(t);return s.createElement(N,{critical:a,warning:o,error:n})},U={warning:"warning",critical:"error"},z=e=>{let{alertId:t}=e;const n=(0,m.JL)(t,"status");return U[n]?s.createElement(P.Flex,{alignSelf:"center",margin:[0,0,0,2],round:1,background:U[n],width:2,height:2}):null};n(17333),n(54520);var O=n(23630);const H=()=>{const e=(0,b.s)("error"),t=(0,b.s)("updatedAt");return s.createElement(O.A,{error:e,updatedAt:t,text:"Alerts and Notifications"})};var V=n(37618);const Q=()=>{const e=(0,l.r9)(),t=(0,c.JT)("dashboard:ReadAll"),n=(e=>(0,s.useMemo)((()=>({home:{id:"home",title:"Home",icon:"room_home",path:"".concat(e,"/home"),dataGa:"view-picker::click-view-home::global-view",testId:"viewPicker-home",tooltip:"A dashboard metrics from all your nodes"},overview:{id:"overview",title:"Metrics",icon:"room_overview",path:"".concat(e,"/overview"),dataGa:"view-picker::click-view-overview::global-view",testId:"viewPicker-overview",tooltip:"System, containers, VMs and application metrics"},nodes:{id:"nodes",title:"Nodes",icon:"nodes_hollow",path:"".concat(e,"/nodes"),dataGa:"view-picker::click-view-nodes::global-view",testId:"viewPicker-nodes",tooltip:"An index of your nodes with alert status and key metrics"},...!window.envSettings.isAgent&&!window.envSettings.onprem&&{k8s:{id:"k8s",title:"K8s",icon:"serviceKubernetes",path:"".concat(e,"/kubernetes"),dataGa:"view-picker::click-view-kubernetes::global-view",testId:"viewPicker-kubernetes",tooltip:"Kubernetes clusters and container metrics"}},top:{id:"top",title:"Top",icon:"top",path:"".concat(e,"/top"),dataGa:"view-picker::click-view-fn::global-overview",testId:"viewPicker-fn",tooltip:"Top processes, containers, VMs, services, queries and system components"},logs:{id:"logs",title:"Logs",icon:"logs",path:"".concat(e,"/logs"),dataGa:"view-picker::click-view-logs::global-overview",testId:"viewPicker-logs",tooltip:"System and application logs"},dashboards:{id:"dashboards",title:"Dashboards",icon:"dashboard",path:"".concat(e,"/dashboards"),dataGa:"view-picker::click-view-dashboard::global-view",testId:"viewPicker-customDashboards",tooltip:"Your custom dashboards",droppable:!0,droppableProps:{dropArea:!0,dropinDashboards:!0}},dashboard:{id:"dashboard",title:"Dashboard",icon:"dashboard",path:"".concat(e,"/dashboard"),dataGa:"view-picker::click-view-dashboard::global-view",testId:"viewPicker-customDashboard",tooltip:"Your local custom dashboard",droppable:!0,droppableProps:{dropArea:!0,dashboardId:V.LA}},alerts:{id:"alerts",title:"Alerts",icon:"alarm",path:"".concat(e,"/alerts"),dataGa:"view-picker::click-view-alerts::global-view",testId:"viewPicker-alerts",tooltip:s.createElement(H,null),children:s.createElement(F,null)},ar:{id:"ar",title:"Anomalies",icon:"anomaliesLens",path:"".concat(e,"/anomalies"),dataGa:"view-picker::click-view-anomalies::global-view",testId:"viewPicker-anomalies",tooltip:"Anomaly Advisor - ML powered anomaly detection"},events:{id:"events",title:"Events",icon:"feed",path:"".concat(e,"/events"),dataGa:"view-picker::click-view-feed::mn-overview",testId:"viewPicker-feed",tooltip:"Activity feed"}})),[e]))(e),a=(0,_.dg)();var o,r;return[(0,s.useMemo)((()=>[!a&&n.home,n.nodes,n.overview,n.top,n.logs,!window.envSettings.isAgent&&!window.envSettings.onprem&&n.k8s,!a&&t&&n.dashboards,a&&t&&n.dashboard,n.alerts,n.ar,n.events].filter(Boolean)),[e,a]),(o=e,r=!a,(0,s.useMemo)((()=>({["".concat(o,"/overview")]:!0,["".concat(o,"/home")]:!0,["".concat(o,"/nodes")]:!0,["".concat(o,"/dashboards")]:!0,["".concat(o,"/dashboard")]:!0,["".concat(o,"/alerts")]:!0,["".concat(o,"/anomalies")]:!0,["".concat(o,"/top")]:!0,["".concat(o,"/logs")]:!0,["".concat(o,"/events")]:!0})),[o,r]))]};var j=n(8711),G=n(43375),W=n(47731),K=n(29217);const Z=(0,j.keyframes)(["0%{transform:translateY(-5px) scale(1);}25%{transform:translateY(-10px) scale(0.7);}50%{transform:translateY(-5px) scale(1);}75%{transform:translateY(0) scale(1.3);}100%{transform:translateY(-5px) scale(1);}"]),Y=(0,j.default)(P.Icon).attrs({name:"long_arrow_up",color:"successText"}).withConfig({displayName:"tabLink__DropHereIcon",componentId:"sc-1h4dha1-0"})(["animation:"," 1s ease-in infinite;"],Z),J=e=>e?"text":"textDescription",X=(0,s.forwardRef)(((e,t)=>{let{id:n,to:a,params:r,exact:i,icon:c,title:l,fixed:d,dataGa:h,testId:u,children:p,type:m,tooltip:g,showBorderLeft:f,droppable:b,droppableProps:y={},...v}=e;const{setNodeRef:_,active:w}=(0,G.zM)({id:"droppable-tab-".concat(n),disabled:!b,data:y}),k=(0,o.RQ)({end:i,path:a}),T=(0,o.Zp)(),S=(0,W.J)(),M=!!k,x="nodes"!==m||M,B=(0,s.useCallback)((()=>{if(M)return;const e="".concat(a).concat(r?"/".concat(r):"");T(e)}),[a,M,r]),q=b&&w&&w.data.current.dashboardable,I=(0,s.useRef)();return s.createElement(P.NavigationTab,(0,C.A)({ref:(0,P.mergeRefs)(_,t,I),fixed:d,active:M,showBorderLeft:f,icon:s.createElement(P.Icon,{name:c,size:"small"}),onActivate:B,"data-ga":h,"data-testid":u,"aria-selected":M,tooltip:g||l},q&&{rootProps:{background:"successSemi",cursor:"alias"}},v),!S&&!!l&&s.createElement(K.A,{content:g||l,align:g?"bottom":"top",isBasic:!0},s.createElement(P.TextSmall,{alignSelf:"center",color:J(M),whiteSpace:"nowrap"},l)),I.current&&q&&s.createElement(P.Drop,{target:I.current,align:{top:"bottom"},stretch:!1,hideShadow:!0,zIndex:1},s.createElement(Y,null)),x&&p)})),$=X,ee=()=>{const{active:e}=(0,G.fF)(),t=(0,c.JT)("dashboard:Create"),n=(0,_.dg)();return t&&e&&!n?s.createElement($,{to:"",id:"plus",icon:"plus",fixed:!0,droppable:!0,droppableProps:{dropArea:!0,dashboardId:"new"},testid:"roomDropdownMenu-roomOptions",disabled:!t||n}):null},te=(0,s.forwardRef)(((e,t)=>{let{title:n,path:a,children:o,index:r,...i}=e;return s.createElement($,(0,C.A)({ref:t,showBorderLeft:0===r,exact:!0,to:a,title:n,"data-testid":"navigation-dynamicTab-".concat(n),index:r},i),o)})),ne=e=>{let{staticPaths:t}=e;const[n,a,r]=(e=>{const t=(0,o.Zp)(),n=(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/:type/*"),a=(0,I._F)(),r=(0,I.xK)(),i=(0,I.NU)(),c=n?n.pathnameBase:"/spaces",{pathname:l}=(0,o.zy)(),d=(0,q.A)(e[l]&&l,!0),h=(0,s.useCallback)(((e,n)=>{if(!n)return r(e);const s=a[e-1],o=a[e+1],i=(n,s)=>{const a="".concat(n).concat(s?"/".concat(s):"");t(a),r(e)};return d?i(d):s?i(s.path,s.params):o?i(o.path,o.params):i(c)}),[a,r,c,d]);return[(0,s.useMemo)((()=>a.map((e=>({...e,children:e.id&&"nodes"===e.type?s.createElement(R,{nodeId:e.id}):"alerts"===e.type?s.createElement(z,{alertId:e.id}):null})))),[a]),(e,t)=>{-1===e&&-1===t||i({sourceIndex:e,destinationIndex:t})},h]})(t),i=(0,B.A)("horizontal");return s.createElement(P.BaseDraggableTabs,{onDragEnd:a,onTabClose:r,items:n,Item:te,ref:i})},se=(0,s.memo)((()=>{const[e,t]=Q();return s.createElement(P.NavigationTabs,null,e.map(((e,t)=>{let{id:n,icon:a,title:o,path:r,...i}=e;return s.createElement($,(0,C.A)({exact:!0,fixed:!0,to:r,icon:a,title:o,id:n,key:"".concat(n,"-").concat(t)},i))})),s.createElement(P.TabSeparator,null),s.createElement(ne,{staticPaths:t}),s.createElement(ee,null))})),ae=se;var oe=n(67990),re=n(99739),ie=n(63314),ce=n(3705),le=n(83084),de=n(47762),he=n(16579),ue=n(27467),pe=n(99292),me=n(71847),ge=n(87659),fe=n(78062),be=n(38413),ye=n(82265),ve=n(1522);const _e=(0,d.K0)({key:"roomSettings",get:e=>{let{id:t,key:n}=e;return e=>{let{get:s}=e;const a=s((0,ye.A)(t));return n?a[n]:a}},set:e=>{let{id:t,key:n}=e;return(e,s)=>{let{set:a}=e;a((0,ye.A)(t),(e=>n?{...e,[n]:s}:s))}}}),we=(e,t)=>(0,d.vc)(_e({id:e,key:t})),ke=(e,t)=>{const n=we(e,t),s=function(e){let{key:t,shouldPersist:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=(0,d.lZ)(_e({id:e,key:t})),a=(0,ve.DH)(e);return(0,d.Zs)((o=>{let{snapshot:r}=o;return async o=>{if(s(o),!n)return;const i=await r.getPromise(_e({id:e}));try{await a({settings:{...i,...t?{[t]:o}:o}})}catch(c){s(t?i[t]:i)}}}),[e,t,a])}(e,{key:t});return[n,s]};var Te=n(15327),Se=n(74618),Me=n(45765),xe=n(18061),Ce=n(21204),Pe=n(69388),Be=n(23931);const qe=()=>{},Ie=e=>{let{roomId:t,id:n,onRemove:a=qe}=e;const o=(0,l.wz)(t,"name"),r=(0,Ce.e6)(t,n,"title"),i=(0,Ce.gV)(t),[c,,d,h]=(0,ge.A)();return s.createElement(s.Fragment,null,s.createElement(P.Button,{danger:!0,flavour:"hollow",onClick:d,label:"Delete metric","data-testid":"remove-metric"}),c&&s.createElement(P.ConfirmationDialog,{"data-ga":"remove-metric-dialog","data-testid":"removeMetricDialog",handleConfirm:async()=>{await i(n),a()},handleDecline:h,message:s.createElement(s.Fragment,null,"You are about to remove ",s.createElement("strong",null,r)," metric.",s.createElement("br",null),"Are you sure you want to continue?"),title:"Remove metric from ".concat(o)}))},Le=e=>{let{link:t,children:n}=e;return s.createElement(P.Flex,{as:"a",target:"_blank",href:t,gap:1,alignItems:"end"},s.createElement(P.TextNano,{textDecoration:"undeline"},n),s.createElement(P.Icon,{color:"text",name:"question",width:"16px",height:"16px"}))},Ae=e=>{let{title:t,help:n,link:a,disclaimer:o,children:r,...i}=e;return s.createElement(P.Flex,(0,C.A)({gap:1,column:!0},i),s.createElement(P.Flex,{justifyContent:"between",alignItems:"baseline"},s.createElement(P.Text,{as:"label",margin:[0]},t),n&&s.createElement(Le,{link:a},n)),r,o&&s.createElement(P.TextSmall,null,o))};var Ee=n(26655),De=n(78969);const Ne={value:"all",label:"All"},Re=e=>{let{dimensions:t,units:n}=e;return{dimensions:t?[Ne,...t.map((e=>{let{id:t,name:n}=e;return{value:t,label:n}}))]:[Ne],units:n}},Fe=e=>{let{isNew:t}=e;return s.createElement(P.Flex,{as:"span",gap:1},"Manage room",s.createElement(P.TextBig,{color:"textLite"},"/"),s.createElement(P.TextBig,{color:"textLite"},t?"Add":"Edit"," Metric"))},Ue=e=>{let{spaceId:t,roomId:n,id:a,onClose:o,...r}=e;const i="new"===a,c=(0,Ce.uB)(n,a),l=(0,Ce.XH)(n,{shouldPersist:!1}),d=(0,Ce.e6)(n,a),h=(0,s.useRef)(d),{title:u,context:p,dimensions:m=[]}=d,g=()=>{l(a,h.current),o()};(0,s.useEffect)((()=>{i&&c()}),[]);const f=(0,L.w7)({extraKey:"nodesView",merge:!1,scoped:!0}),b=(0,Pe.A)(n,f,{spaceId:t});if(b)throw b;const y=(0,Be.OL)(n),v=(0,s.useMemo)((()=>y.map((e=>({value:e,label:e})))),[y]),_=(0,Be._0)(n),w=(0,s.useMemo)((()=>p&&{value:p,label:p}),[p]),[{dimensions:k,units:T},S]=(0,xe.A)((()=>({enabled:!!p,fetch:()=>((e,t,n)=>Ee.A.get("".concat(De.P8,"/spaces/").concat(e,"/rooms/").concat(t,"/contexts/").concat(encodeURIComponent(n)),{transform:Re}))(t,n,p),initialValue:{dimensions:[],units:""}})),[t,n,p]),M=(0,s.useCallback)((e=>{let{value:t}=e;l(a,"context",t),l(a,"dimensions",[]),l(a,"title",t)}),[a]),x=(0,s.useMemo)((()=>k?1===k.length||m.length===k.length-1||0===m.length?[Ne]:m.map((e=>{let{id:t,name:n}=e;return{value:t,label:n}})):[Ne]),[m,k]),B=(0,s.useCallback)((e=>{const t=e.filter((e=>{let{value:t}=e;return t!==Ne.value})),n=(0===e.length||t.length!==e.length&&0!==m.length||t.length===k.length-1?[]:t).map((e=>{let{value:t,label:n}=e;return{id:t,name:n}}));l(a,"dimensions",n)}),[a,m,k]),q=(0,Ce.tQ)(n),I=(0,s.useCallback)((()=>q({...d,id:a,enableAllDimensions:0===m.length,unit:T}).then(o)),[d]),A=(0,s.useCallback)((e=>{let{target:{value:t}}=e;t.length<=30&&l(a,"title",t)}),[a]),E=!u||!p||S||!_;return s.createElement(Te.GO,(0,C.A)({onClose:g},r),s.createElement(Se.z,{onClose:g,title:s.createElement(Fe,{isNew:i})},s.createElement(P.Button,{label:"Save",onClick:I,disabled:E})),s.createElement(Me.U,null,i?"Add a new metric (column)":"Edit metric"),s.createElement(Te.Yv,null,s.createElement(P.Flex,{gap:6,column:!0},s.createElement(Ae,{title:"Context",help:"What is a context?",link:"https://learn.netdata.cloud/docs/data-collection/chart-dimensions-contexts-and-families#context","data-testid":"manageMetrics-context"},s.createElement(P.Select,{options:v,value:w,onChange:M,isLoading:!_,"data-testid":"manageMetrics-contextSelect"})),s.createElement(Ae,{title:"Metric Title","data-testid":"manageMetrics-title"},s.createElement(P.TextInput,{name:"title",placeholder:"Type name",value:u,onChange:A})),s.createElement(Ae,{title:"Dimensions",help:"What is a dimension?",link:"https://learn.netdata.cloud/docs/data-collection/chart-dimensions-contexts-and-families#dimension",disclaimer:x[0]===Ne&&"The returned value is the sum of all selected dimensions.","data-testid":"manageMetrics-dimensions"},s.createElement(P.Select,{isMulti:!0,options:k,value:x,onChange:B,isLoading:S,isDisabled:!w,"data-testid":"manageMetrics-dimensionSelect"})),!i&&s.createElement(P.Flex,{justifyContent:"end"},s.createElement(Ie,{roomId:n,id:a,onRemove:o})))))},ze=e=>{let{isOpen:t,onClose:n,onEdit:a,roomId:o,targetRef:r}=e;const[i,c]=(0,Ce.tY)(o);if(!r.current||!t)return null;const l=e=>{a(e),n()};return s.createElement(P.Drop,{align:{top:"bottom",right:"right"},animation:!0,background:"dropdown",column:!0,margin:[.5,0,0],overflow:{vertical:"auto"},padding:[3],round:!0,width:70,close:n,"data-testid":"metricsMenu",onClickOutside:n,onEsc:n,target:r.current},i.map((e=>s.createElement(P.Flex,{"data-testid":"metricsMenu-metric-".concat(e.title),key:e.id,justifyContent:"between",alignItems:"center",padding:[1,0]},s.createElement(P.Checkbox,{checked:!e.hidden,"data-testid":"metricsMenu-metricCheckbox",label:e.title,onChange:()=>c(e.id,"hidden",!e.hidden)}),s.createElement(P.IconButton,{"data-testid":"metricsMenu-editMetric",flavour:"borderless",icon:"pencilSolid",padding:[0],onClick:()=>l(e.id),width:"10px",height:"10px"})))),s.createElement(P.Button,{"data-testid":"metricsMenu-addMetricButton",label:"Add new metric",icon:"plus",onClick:()=>l("new"),small:!0,alignSelf:"end"}))},Oe=e=>{let{spaceId:t,roomId:n}=e;const[a,,o,r]=(0,ge.A)(),[i,c]=(0,s.useState)(null),l=(0,s.useRef)();return s.createElement(s.Fragment,null,s.createElement(P.Button,{"data-ga":"metric-setting::click-metric-setting::hm-nodes","data-testid":"metricSettings-button",flavour:"hollow",icon:"gear",neutral:!0,onClick:o,ref:l,label:"Metrics",small:!0}),s.createElement(ze,{isOpen:a,onClose:r,onEdit:c,roomId:n,targetRef:l}),i&&s.createElement(Ue,{"data-testid":"metricsManagement",spaceId:t,roomId:n,id:i,onClose:()=>c(null)}))};var He=n(667),Ve=n(92155);const Qe=()=>(0,me.H)("grouping","click-grouping","hm-nodes"),je=(0,Ve.A)(fe.A),Ge=[{icon:"node",label:"Node status",value:"nodeStatus","data-ga":"grouping::click-grouping-node-status::hm-nodes"},{icon:"alarm_bell",label:"Alert status",value:"alertStatus","data-ga":"grouping::click-grouping-status::hm-nodes"}],We=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),[n,,a,o]=(0,ge.A)(),{onIntegrationsClick:r}=(0,He.A)(),[i,c]=ke(t,"groupMode"),d=(0,s.useMemo)((()=>Ge.find((e=>e.value===i))||Ge[0]),[i]),h=(0,s.useCallback)((e=>{let{value:t}=e;return c(t)}),[c]);return s.createElement(P.Flex,{alignItems:"center","data-testid":"agentsHead-actions",flexWrap:!1,gap:3},s.createElement(P.Select,{label:"Group by",onChange:h,onMenuOpen:Qe,options:Ge,styles:{size:"tiny"},value:d}),s.createElement(Oe,{roomId:t,spaceId:e}),s.createElement(P.Button,{icon:"integrations",flavour:"hollow",onClick:r,small:!0},"Integrations"),n&&s.createElement(be.A,{onClose:o}),s.createElement(je,{"data-ga":"add-nodes::click-add-nodes::hm-nodes","data-testid":"agentsHead-addNode",icon:"nodes_hollow",label:"Add Nodes",onClick:a,small:!0}))},Ke=()=>s.createElement(P.Flex,{width:"100%",justifyContent:"end",background:"mainBackground",padding:[2]},s.createElement(We,null));n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215);var Ze=n(79304),Ye=n(25950);const Je=function(e,t){let{getGrouping:n,extraKey:s}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a={};const{menuGroups:o}=((e,t)=>{let{getNode:n,getGrouping:s,nodeMenus:a}=t;const o={};return e.forEach((e=>{const t=n(e);if(!t)return;const{name:o,priority:r,icon:i}=s(t);a[e]={...t,groupId:o,subMenuId:e,priority:r,groupIcon:i}})),[...e].sort(((e,t)=>{var n,s,o,r;return(null===(n=a[e])||void 0===n?void 0:n.priority)-(null===(s=a[t])||void 0===s?void 0:s.priority)||((null===(o=a[e])||void 0===o?void 0:o.name)||"").localeCompare((null===(r=a[t])||void 0===r?void 0:r.name)||"",void 0,{sensitivity:"accent",ignorePunctuation:!0})})).forEach((e=>{const t=a[e];if(!t)return;const n="".concat(t.groupId,"|").concat(t.subMenuId);o[t.groupId]||(o[t.groupId]=new Set),n&&o[t.groupId].add(t.id)})),{menuGroups:o}})(e,{getNode:t,getGrouping:n,nodeMenus:a}),r={},i=Object.keys(o).reduce(((e,t)=>{const n=[...o[t]],i=a[n[0]];return e[t]={level:0,name:i.groupId,id:t,subMenuIds:n,link:"".concat((0,Ze.A)("menu_".concat(t))),size:24,forceVisibility:!0,icon:i.groupIcon,extraKey:s},n.forEach((e=>{var n,o,i,c;const l=a[e];r[e]={...l,level:1,id:e,menuGroupId:t,link:"".concat((0,Ze.A)("menu_".concat(t,"_submenu_").concat(e))),size:24,forceVisibility:!0,icon:(null===(n=Ye.u[null===(o=l.os)||void 0===o?void 0:o.nm])||void 0===n?void 0:n.iconName)||(null===(i=Ye.U[null===(c=l.os)||void 0===c?void 0:c.id])||void 0===i?void 0:i.iconName)||"os",extraKey:s}})),e}),{}),c=Object.keys(o);let l=-1;const d=c.reduce(((e,t)=>{l+=1;return[...e,{...i[t],sticky:!0},...i[t].subMenuIds.reduce(((e,t)=>{l+=1;return[...e,r[t]]}),[])]}),[]);return a=null,{stickyIds:{},allElements:d,menuGroupIds:c,menuGroupById:i,subMenuById:r}},Xe="clear",$e="warning",et="critical",tt="unreachable";var nt=n(82432);const st={alertStatus:{[et]:1,[$e]:2,[Xe]:3,[tt]:4},nodeStatus:{Live:1,Stale:2,Offline:3}},at={nodeStatus:e=>(0,nt.GM)(e.state),alertStatus:e=>(0,nt.vt)(e)};var ot=n(79566),rt=n(72253),it=n(44741),ct=n(10952),lt=n(12412);const dt=e=>{let{id:t,...n}=e;return s.createElement(it.k,(0,C.A)({id:t},n),s.createElement(ct._,{id:t}),s.createElement(lt.G,{id:t}))},ht=(0,s.memo)(dt);var ut=n(50466),pt=n(28146),mt=n(42402),gt=n(74379),ft=n(4959);const bt=e=>{let{connectivity:t,id:n,name:a,...o}=e;const r=(0,c.JT)("node:Delete"),i=!(0,l.XA)().untouchable,[d,,h,u]=(0,ge.A)(),[p,,m,g]=(0,ge.A)();return s.createElement(ft.SS,(0,C.A)({alignSelf:"end",gap:1,"data-testid":"node-actions"},o),i&&s.createElement(s.Fragment,null,s.createElement(pt.A,{badge:"actionRemove","data-testid":"remove-node-action"},s.createElement(ft.d0,{"data-ga":"nodes-table-row::click-remove-node::nodes-view",onClick:m})),p&&s.createElement(gt.Ay,{ids:[n],name:a,onClose:g})),r&&"Offline"===t&&s.createElement(s.Fragment,null,s.createElement(pt.A,{badge:"actionObsolete","data-testid":"obsolete-node-action"},s.createElement(ft.AS,{"data-ga":"nodes-table-row::click-obsolete-node::nodes-view",onClick:h})),d&&s.createElement(mt.Ay,{ids:[n],name:a,onClose:u})))};var yt=n(37019);const vt=e=>{let{instanceType:t,name:n,providerType:a,...o}=e;return s.createElement(pt.A,(0,C.A)({badge:"cloudInfo","data-testid":"node-cloud-info",nodeName:n},o),s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.Icon,{color:"textDescription","data-testid":"node-cloud-info-icon",name:"ipNetworking",width:"18px",height:"18px"}),s.createElement(P.TextSmall,{color:"textDescription","data-testid":"node-cloud-info-text"},(0,nt.ws)(a)," \u2022 ",(0,nt.ws)(t))))},_t=e=>{let{connectivity:t,name:n,...a}=e;return s.createElement(pt.A,(0,C.A)({badge:"connectivity",connectivityState:t,"data-testid":"node-connectivity",nodeName:n},a),s.createElement(P.Icon,{name:"connectivityStatus".concat(t),width:"18px",height:"18px"}))},wt=e=>{let{onClick:t,...n}=e;return s.createElement(pt.A,(0,C.A)({badge:"info","data-testid":"node-info-cta"},n),s.createElement(P.Icon,{color:"textDescription",cursor:"pointer",height:"18px",width:"18px",name:"information",onClick:t}))},kt=e=>{let{name:t,...n}=e;return s.createElement(pt.A,(0,C.A)({badge:"k8s","data-testid":"node-kubernetes",nodeName:t},n),s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.Icon,{color:"textDescription","data-testid":"node-kubernetes-icon",name:"serviceKubernetes",width:"18px",height:"18px"}),s.createElement(P.TextSmall,{color:"textDescription","data-testid":"node-kubernetes-text"},"k8s")))},Tt=e=>{let{kernelName:t,kernelVersion:n,name:a,...o}=e;return s.createElement(pt.A,(0,C.A)({badge:"kernel","data-testid":"node-kernel",nodeName:a},o),s.createElement(P.TextSmall,{color:"textDescription"},(0,nt.Ud)(t,n)))};var St=n(88494),Mt=n(63119);const xt=e=>{var t,n;let{architecture:a,cpuFrequency:o,cpus:r,diskSpace:i,memory:c,name:l,os:d,osName:h,...u}=e;return s.createElement(pt.A,(0,C.A)({badge:"systemInfo","data-testid":"node-system-info",nodeName:l},u),s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.Icon,{color:"textDescription","data-testid":"node-system-info-icon",name:(null===(t=Ye.u[h])||void 0===t?void 0:t.iconName)||(null===(n=Ye.U[d])||void 0===n?void 0:n.iconName)||"os",width:"16px",height:"16px"}),s.createElement(P.TextSmall,{color:"textDescription","data-testid":"node-system-info-text"},(0,nt.ws)(h)," \u2022 ",(0,nt.O)(o)," \u2022"," ",(0,nt.ws)(r,1===r?"Core":"Cores")," \u2022 ",(0,nt.ws)(a)," ","\u2022 ",(0,nt.ws)((0,nt.RI)(c),"RAM")," \u2022"," ",(0,nt.ws)((0,nt.RI)(i),"HD"))))},Ct=e=>{let{container:t,name:n,virtualization:a,...o}=e;const r=(0,nt.Pg)(t,a);return s.createElement(pt.A,(0,C.A)({badge:"type","data-testid":"node-type",nodeName:n,nodeType:r.label},o),s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.Icon,{color:"textDescription","data-testid":"node-type-icon",name:r.icon,height:r.iconSize,width:r.iconSize}),s.createElement(P.TextSmall,{color:"textDescription","data-testid":"node-type-text"},r.label)))};var Pt=n(33195);const Bt=e=>{let{health:t={}}=e;const{silencingState:n}=t.alerts||{},{state:a}=n||{};return"NONE"!=a?s.createElement(s.Fragment,null,s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(P.Flex,null,s.createElement(Pt.A,{flavour:"node",silencing:n}))):null};var qt=n(47130);const It=(0,qt.A)((0,Ve.A)(P.Button)),Lt=e=>{let{id:t}=e;const n=(0,o.Zp)(),a=(0,_.bq)(),r=(0,s.useCallback)((()=>{const e={nodeId:t};n("/spaces/".concat(a,"/settings/notifications#notificationsActiveTab=1&silencingRulePrefill=").concat(JSON.stringify(e)))}),[]);return s.createElement(It,{feature:"SilencingNode",payload:{nodeId:""},tooltip:"Create a new silencing rule for this node",flavour:"hollow",icon:"alarm_off",iconWidth:"12px",tiny:!0,onClick:r})};var At=n(55905),Et=n(80925);n(3064),n(72577);const Dt=(e,t)=>e&&e.getRoot().getChildren().find((e=>e.match({id:"nodes-".concat(t)})));var Nt=n(36196);const Rt=e=>{let{id:t,roomId:n,nodeId:a,context:o,dimensions:r}=e;const i=(0,Et.e)(),c=(0,s.useMemo)((()=>{const e=Dt(i,n),s=[t,a,o].join("-");if(!e)return null;let c=e.getNode({id:s});return c?(c.updateAttribute("selectedDimensions",r.map((e=>e.name))),c):(c=i.makeChart({attributes:{id:s,nodesScope:[a],contextScope:[o],pixelsPerPoint:20,selectedDimensions:r.map((e=>e.name))}}),e.appendChild(c),c)}),[o,t,a,n,i]);return c?s.createElement(Nt.A,{chart:c,hasHeader:!1,hasFooter:!1,hasFilters:!1,height:100}):null},Ft=(0,s.memo)(Rt);var Ut=n(75793);const zt=e=>{let{id:t,context:n,nodeId:a,isLive:o,hidden:r,title:i,dimensions:c}=e;const d=(0,l.ID)();return r||!o?null:s.createElement(P.Flex,{column:!0,"data-testid":"metrics-chart-".concat(n),flex:"grow",basis:"174px"},s.createElement(Ut.A,{text:i||n,TextComponent:P.TextSmall,color:"textDescription",margin:[1,0,1,2],as:"div"}),s.createElement(Ft,{id:t,context:n,nodeId:a,roomId:d,dimensions:c}))};var Ot=n(8239),Ht=n(50876);const Vt=e=>{var t;let{node:n}=e;const[,a]=(0,Ot.OD)(),{sendButtonClickedLog:o}=(0,Ht.A)(),r=null===(t=n.capabilities)||void 0===t||null===(t=t.dyncfg)||void 0===t?void 0:t.enabled,i=(0,s.useCallback)((()=>{a({node:n}),o({feature:"DyncnfNode",description:"Configure node",nodeId:null===n||void 0===n?void 0:n.id,nodeName:null===n||void 0===n?void 0:n.name})}),[a,o]),c=(0,s.useMemo)((()=>({name:"gear",size:"small",color:"text",cursor:"pointer",onClick:i})),[i]);return n.isLive&&r?s.createElement(s.Fragment,null,s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(pt.A,{content:"Configure this node"},s.createElement(P.Flex,null,s.createElement(P.Icon,c)))):null},Qt=e=>{var t,n;let{id:a,name:o,hw:r,os:i,ni:c,capabilities:d,container:h,updateSeverity:u,labels:p,isLive:m,state:g,version:f,extraKey:b,isPreferred:y,health:v}=e;const w=(0,_.dg)(),k=(0,l.ID)(),T=null===(t=d.funcs)||void 0===t?void 0:t.enabled,S=null===(n=d.ml)||void 0===n?void 0:n.enabled,M=(0,nt.GM)(g),{_cloud_instance_type:x,_cloud_provider_type:B}=p||{},q="true"===(null===p||void 0===p?void 0:p._is_k8s_node),I=!(0,nt.Po)(x)||!(0,nt.Po)(B),L=(0,ue.Fw)("sidebarTab",{flavour:"val",extraKey:b}),A=(0,ue.Fw)("sidebarOpen",{flavour:"bool"}),E=(0,ue.Fw)("sidebarNodeId",{flavour:"val",extraKey:b}),D=(0,s.useCallback)((e=>{A(!0),L(e),E(a)}),[a]),N=(0,s.useCallback)((()=>D("alerts")),[D]),R=(0,s.useCallback)((()=>D("info")),[D]),F=(0,ut.Id)(),U=(0,Ce.Vw)(k);return s.createElement(P.Flex,{"data-testid":"nodeRow-".concat(o),"data-submenuid":a,padding:[1],column:!0,gap:1,round:!0},s.createElement(P.Flex,{alignItems:"center","data-testid":"nodeRow-basic-info",gap:2,height:{min:6}},s.createElement(_t,{connectivity:M,"data-testid":"nodeRow-connectivity-".concat(M.toLowerCase()),name:o}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(Mt.A,{"data-testid":"nodeRow-name",id:a,name:o,isLive:m,state:g,isPreferred:y}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(wt,{onClick:R,"data-testid":"nodeRow-more-info-cta"}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(yt.A,{id:a,isLive:m,"data-testid":"nodeRow-alerts",name:o,onClick:N}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(St.A,{badge:"ml","data-testid":"nodeRow-machine-learning-status",enabled:S,name:o},s.createElement(P.Icon,{name:"anomaliesLens",size:"small",color:"text"})),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(St.A,{badge:"fn","data-testid":"nodeRow-fn-status",enabled:T,name:o,onClick:()=>F(a)},s.createElement(P.Icon,{name:"functions",size:"small",color:"text"})),u&&s.createElement(s.Fragment,null,s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(At.A,{name:o,os:i.id,container:h,warningLevel:u,labels:p,version:f,text:u,"data-testid":"nodeRow-needs-update"})),s.createElement(Vt,{node:{id:a,name:o,isLive:m,ni:c,capabilities:d}}),s.createElement(bt,{"data-testid":"nodeRow-node-actions",id:a,name:o,connectivity:M}),w?null:s.createElement(s.Fragment,null,s.createElement(Bt,{health:v}),s.createElement(Lt,{id:a}))),s.createElement(P.Flex,{alignItems:"center","data-testid":"nodeRow-detailed-info",gap:2},s.createElement(xt,{architecture:r.architecture,cpuFrequency:r.cpuFrequency,cpus:r.cpus,"data-testid":"nodeRow-system-info",diskSpace:r.diskSpace,memory:r.memory,name:o,osName:i.nm,os:i.id}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),!(null===i||void 0===i||!i.kernel)&&s.createElement(Tt,{"data-testid":"nodeRow-kernel",kernelName:i.kernel.nm,kernelVersion:i.kernel.v,name:o}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),q&&s.createElement(s.Fragment,null,s.createElement(kt,{"data-testid":"nodeRow-kubernetes",name:o}),s.createElement(ft.K,{"data-testid":"nodeRow-separator"})),s.createElement(Ct,{container:r.container,"data-testid":"nodeRow-type",name:o,virtualization:r.virtualization}),I&&s.createElement(s.Fragment,null,s.createElement(ft.K,{"data-testid":"nodeRow-separator"}),s.createElement(vt,{"data-testid":"nodeRow-cloud-info",instanceType:x,name:o,providerType:B}))),y&&!(null===U||void 0===U||!U.length)&&s.createElement(P.Flex,{"data-testid":"nodeRow-charts",gap:1},U.map((e=>s.createElement(zt,(0,C.A)({key:e.id},e,{nodeId:a,isLive:m}))))))},jt=e=>{switch(e.level){case 0:return ht;case 1:return Qt;default:return null}},Gt=e=>{let{onChartNameChange:t,initialChartName:n,dashboardOptions:a,linkToGo:o,contextToGo:r,...i}=e;const{setActiveMenuGroupId:c,setActiveSubMenuId:l}=(0,ot.A)({onChartNameChange:t,initialChartName:n,linkToGo:o,contextToGo:r});return s.createElement(he.H,i,s.createElement(rt.A,{onActiveMenuGroupId:c,onActiveSubMenuId:l,getComponent:jt,dashboardOptions:a,initialChartName:n,checkVisibility:()=>!0}))},Wt=["config"],Kt=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),n=(()=>{const e=(0,l.ID)();let t=we(e,"groupMode")||"nodeStatus";const n=at[t]||at.nodeStatus;return(0,s.useCallback)((e=>{var s;const a=n(e);return{name:a,priority:at[t]?null===st||void 0===st||null===(s=st[t])||void 0===s?void 0:s[a]:st.nodeStatus,icon:"nodeStatus"===t?"connectivityStatus".concat(a):null}}),[t])})(),a=(0,L.w7)({extraKey:"nodesView",merge:!1,scoped:!0}),o=(0,de.Y7)(),[r,{width:i}]=(0,ce.A)();!function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{host:n,width:a}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,Et.e)(),r=(0,s.useRef)();(0,s.useMemo)((()=>{if(!o)return;let s=Dt(o,e);s&&s.destroy(),s=o.makeContainer({attributes:{host:n,enabledXAxis:!1,id:"nodes-".concat(e),hasToolbox:!1,height:"75px",groupingMethod:"average",groupBy:["dimension"],aggregationMethod:"avg",legend:!1,axisLabelFontSize:7,yAxisLabelWidth:20,hasYlabel:!1,nodesScope:t,containerWidth:a}}),r.current=s,o.appendChild(s)}),[e]),(0,s.useMemo)((()=>{r.current&&(r.current.setAttribute("containerWidth",a),r.current.getNodes().forEach((e=>e.updateAttribute("containerWidth",a))))}),[r.current,a]),(0,s.useLayoutEffect)((()=>()=>r.current&&r.current.destroy()),[])}(t,a,{host:(0,_.dg)()?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(e,"/rooms/").concat(t),width:i});const[c,d]=(0,ue.N9)("nodeIdToGo",{key:t,extraKey:"nodesView",flavour:"val"});return s.createElement(he.A,{getObject:o,ids:a,getMenu:Je,getGrouping:n,deps:[n],extraKey:"nodesView"},s.createElement(le.A,{ref:r,position:"relative",sidebar:s.createElement(pe.Ay,{hiddenTabs:Wt,nodeIds:a,title:"Nodes",initialChartName:c,flavour:"nodesView",loaded:!0,hasSearch:!1})},s.createElement(Ke,null),s.createElement(Gt,{initialChartName:c,onChartNameChange:d})))},Zt=()=>{const e=(0,l.ID)(),t=(0,oe.CK)();return(0,oe.gr)(e,"loaded")&&!t.length?s.createElement(ie.Ay,{feature:"NodesView",mode:"NoNodesView"},s.createElement(re.A,null)):s.createElement(ie.Ay,{feature:"NodesView"},s.createElement(Kt,null))};var Yt=n(76777),Jt=n(4659),Xt=n(32089),$t=n(6586),en=n(12602);const tn=()=>s.createElement(P.Flex,{padding:[6],round:1,width:"600px",background:"modalInfoBackground"},s.createElement(P.Box,{margin:[0,4,0,0]},s.createElement(P.Box,{as:P.Icon,width:10,height:10,name:"nodes_update"})),s.createElement(P.Flex,{column:!0,gap:2},s.createElement(P.Text,{strong:!0},"Couldn't find the chart you were looking for? "),s.createElement(P.Text,{color:"textDescription"},"Netdata has zero-configuration auto-detection for most applications and systems, this is achieved using collectors. If you miss some specific chart please check our"," ",s.createElement(Jt.A,{href:"https://learn.netdata.cloud/docs/agent/collectors",target:"_blank","data-ga":"chart-area::click-link-collectors::charts-view"},"list of collectors")," ","to see if any additional step is needed."))),nn=()=>s.createElement(P.Flex,{width:"100%",column:!0,gap:6,margin:[8,0,0,0]},s.createElement(Xt.A,null),s.createElement(P.Flex,{gap:1,alignItems:"center",justifyContent:"center",padding:[2],background:"successSemi"},s.createElement(en.A,null,s.createElement(P.Text,{color:"primary"},"Upgrade to Business for unlimited access")),s.createElement(P.Text,null,"or"),s.createElement($t.A,null,s.createElement(P.Text,{color:"primary"},"review your Space active Nodes")))),sn=e=>{let{noPreferredNodesError:t}=e;return s.createElement(P.Flex,{column:!0,justifyContent:"center",alignItems:"center",alignSelf:"center",margin:[30,0,0]},s.createElement(P.Flex,{column:!0,justifyContent:"center",alignItems:"center",width:"300px",margin:[0,0,6]},s.createElement(P.H3,{margin:[0,0,4]},"No charts to display"),s.createElement(P.Text,{color:"textDescription",textAlign:"center"},"Double-check your search or filters and dates and try again with different conditions.")),s.createElement(tn,null),t&&s.createElement(nn,null))};var an=n(9683),on=n(77173),rn=n(58205);const cn=()=>{const e=(0,l.ID)(),t=(0,c.JT)("node:Create");return s.createElement(le.A,{column:!1,"data-testid":"noNodesViewPage",gap:12,padding:[6]},s.createElement(P.Flex,{column:!0,gap:5,flex:{shrink:0,grow:0},"data-testid":"noKubernetesView-videoSection"},s.createElement(an.A,{"data-testid":"noNodesView-onboardingVideo",height:350,width:850,videoId:De.BX[0]}),s.createElement(an.A,{"data-testid":"noNodesView-onboardingVideo",height:350,width:850,videoId:De.BX[1]})),s.createElement(P.Flex,{column:!0,gap:4},s.createElement(P.Box,{border:{side:"bottom",color:"borderSecondary"}},s.createElement(P.Box,{margin:[0,0,2,0]},s.createElement(Jt.A,{href:"https://learn.netdata.cloud/guides/monitor/kubernetes-k8s-netdata",target:"_blank",rel:"noopener noreferrer","data-ga":"k8s-tab::click-link-guides::kubernetes-overview-and-visualizations"},s.createElement(P.TextBig,{color:"primary"},"Kubernetes monitoring with Netdata: Overview and visualizations"))),s.createElement(P.Box,{margin:[0,0,2,0]},s.createElement(Jt.A,{href:"https://learn.netdata.cloud/docs/cloud/visualize/kubernetes",target:"_blank",rel:"noopener noreferrer","data-ga":"k8s-tab::click-link-guides::kubernetes-visualizations"},s.createElement(P.TextBig,{color:"primary"},"Kubernetes visualizations")))),s.createElement(P.Flex,{column:!0,gap:4},t?s.createElement(on.A,{integrationId:rn.v2,rooms:[e]}):s.createElement(re.S,null))))};var ln=n(45467),dn=n(61427);const hn=j.default.div.withConfig({displayName:"selections__Separator",componentId:"sc-1cc7y18-0"})(["width:1px;height:",";background:",";"],(0,P.getSizeBy)(2.5),(0,P.getColor)("borderSecondary")),un=[{label:"Volume",value:"volume"},{label:"KS2",value:"ks2"}],pn=[{label:"Average",value:"average"},{label:"Median",value:"median"},{label:"Min",value:"min"},{label:"Max",value:"max"},{label:"Stddev",value:"stddev"}],mn=[{label:"Metrics",value:""},{label:"Anomaly Rate",value:"anomaly-bit"}],gn=()=>s.createElement(P.Flex,{column:!0,gap:1,alignItems:"center",width:"220px"},s.createElement(P.TextMicro,null,"Choose the algorithm you want to be used to identify correlations across metrics:"),s.createElement(P.TextMicro,null,s.createElement(P.TextMicro,{strong:!0},"KS2:")," A statistical test comparing the distribution of the highlighted window to the baseline."),s.createElement(P.TextMicro,null,s.createElement(P.TextMicro,{strong:!0},"Volume:")," Percentage change in averages between highlighted window and baseline.")),fn=()=>s.createElement(P.Flex,{column:!0,gap:1,alignItems:"center",width:"220px"},s.createElement(P.TextMicro,null,"What aggregation function do you want to apply when aggregating multiple datapoints for metric correlations.")),bn=()=>s.createElement(P.Flex,{column:!0,gap:1,alignItems:"center",width:"220px"},s.createElement(P.TextMicro,null,"Do you want to find correlations over the metric values or the anomaly rates of each metric.")),yn=e=>{let{runGetWeights:t,nodeIds:n,flavour:a}=e;const{method:o,options:r,group:i}=(0,dn.G9)({nodeIds:n,flavour:a}),c=null!==r&&void 0!==r&&r.includes(mn[1].value)?mn[1].value:"",l=(0,s.useCallback)((e=>n=>{let{value:s}=n;s="options"!==e?s:s?[s]:[];t({method:o,options:[r],group:i,[e]:s})}),[o,r,i]),d=(0,s.useMemo)((()=>({method:un.find((e=>e.value===o)),group:pn.find((e=>e.value===i)),option:mn.find((e=>e.value===c))})),[o,i,c]);return i?s.createElement(P.Flex,{gap:2},s.createElement(P.Flex,{gap:1,alignItems:"center"},s.createElement(P.TextSmall,{color:"textLite"},"Method:"),s.createElement(P.Select,{options:un,value:d.method,onChange:l("method")}),s.createElement(K.A,{isBasic:!0,plain:!0,content:gn,align:"bottom"},s.createElement(P.Icon,{name:"information",color:"textDescription",size:"small"}))),s.createElement(hn,null),s.createElement(P.Flex,{gap:1,alignItems:"center"},s.createElement(P.TextSmall,{color:"textLite"},"Aggregation:"),s.createElement(P.Select,{options:pn,value:d.group,onChange:l("group")}),s.createElement(K.A,{isBasic:!0,plain:!0,content:fn,align:"bottom"},s.createElement(P.Icon,{name:"information",color:"textDescription",size:"small"}))),s.createElement(hn,null),s.createElement(P.Flex,{gap:1,alignItems:"center"},s.createElement(P.TextSmall,{color:"textLite"},"Data:"),s.createElement(P.Select,{options:mn,value:d.option,onChange:l("options")}),s.createElement(K.A,{isBasic:!0,plain:!0,content:bn,align:"bottom"},s.createElement(P.Icon,{name:"information",color:"textDescription",size:"small"}))),s.createElement(hn,null)):null};var vn=n(21290);const _n=e=>{let{highlightAfter:t,highlightBefore:n,baseline:a}=e;const{localeDateString:o,localeTimeString:r}=(0,vn.$j)(),i=new Date(t),c=new Date(n),l=new Date(a),d=new Date(t),h=Math.round((n-t)/1e3),u=Math.round((t-a)/1e3),p=(0,ue.rI)("highlight");return s.createElement(P.Flex,{gap:4,alignItems:"center"},s.createElement(P.Flex,{gap:2},s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.TextSmall,{color:"textLite"},"Selected area:"),s.createElement(P.TextSmall,{color:"textLite"},"Reference baseline:")),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.TextSmall,{"data-testid":"metricCorrelation-selectedArea"},o(i,{long:!1}),","," ",r(i),"\xa0->\xa0",o(c,{long:!1}),","," ",r(c)),s.createElement(P.TextSmall,{"data-testid":"metricCorrelation-referenceBaseline"},o(l,{long:!1}),","," ",r(l),"\xa0->\xa0",o(d,{long:!1}),","," ",r(d))),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.TextSmall,{color:"textLite"},"Duration:"),s.createElement(P.TextSmall,{color:"textLite"},"Duration:")),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.TextSmall,{"data-testid":"metricCorrelation-selecteArea-duration"},h,"\xa0secs"),s.createElement(P.TextSmall,{"data-testid":"metricCorrelation-referenceBaseline-duration"},u,"\xa0secs"))),s.createElement(K.A,{content:"Clear selection",align:"bottom",isBasic:!0},s.createElement(P.Button,{neutral:!0,flavour:"borderless",icon:"trashcan",onClick:()=>{p({after:null,before:null})},"data-ga":"metric-correlation::click-delete::charts-view","data-testid":"metricCorrelation-delete"})))},wn=(0,Ve.A)(P.Button),kn=(0,j.default)(P.Button).withConfig({displayName:"correlation__LogoButton",componentId:"sc-15d72m3-0"})(["&&{pointer-events:none;}"]),Tn=(0,j.default)(P.Button).withConfig({displayName:"correlation__CloseButton",componentId:"sc-15d72m3-1"})(["position:absolute !important;top:-3px;right:-3px;"]),Sn=(0,Ve.A)(Tn),Mn=(0,j.default)(P.Button).attrs({padding:[0],margin:[0,0,0,1.5],width:"auto"}).withConfig({displayName:"correlation__StyledButton",componentId:"sc-15d72m3-2"})(["height:16px !important;> span{margin:0 !important;}"]),xn=e=>{let{flavour:t}=e;const n=(0,_.vt)(),a=(0,l.ID)(),o=(0,de.nl)(),r=(0,s.useMemo)((()=>o?[o]:[]),[o]),i=(0,L.w7)({extraKey:"nodesView",merge:!1,scoped:!0}),c="singleNode"===t?r:i,[d,h]=(0,s.useState)(!1),[u,p]=(0,s.useState)(),{threshold:m,totalDimensionsCount:g,dimensionsCount:f,loaded:b,loading:y,getWeights:v,resetWeights:w}=(0,dn.Yy)({nodeIds:c,flavour:t},n,a),{method:k,options:T,group:S}=(0,dn.G9)({nodeIds:c,flavour:t}),{after:M,before:x}=(0,ue.rW)("highlight"),C=M-4*(x-M),B=!!M;(0,s.useEffect)((()=>{if(b){let e="default-result";if(S){const t=null!==T&&void 0!==T&&T.includes("anomaly-bit")?"anomaly-bit":"metrics";e="default-result-".concat(k,"-").concat(S,"-").concat(t)}return(0,me.H)("metrics-correlation",e,"charts-view",f.toString())}}),[b]),(0,ln.A)((()=>{M&&h(!0)}),[M]);const q=(0,ue.rI)("correlation"),I=(0,ue.rI)("threshold"),A=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};h(!1),p(),v({highlightAfter:M,highlightBefore:x,baselineAfter:C,baselineBefore:M,method:k,options:T,group:S,nodeIds:c,...e}).then((()=>I(dn.UG)))},E=!B||y;return(0,ln.A)((()=>{b&&d&&B&&A()}),[b,B,d]),s.createElement(P.Flex,{round:2,background:"elementBackground",padding:[2,6,2,2],alignItems:"center",justifyContent:"between",flex:!0,"data-testid":"correlation",position:"relative",height:{min:"64px"},gap:2},B?b?s.createElement(ie._0,{feature:"MetricCorrelations",totalDimensionsCount:g,dimensionsCount:f},s.createElement(P.Flex,{"data-testid":"metricCorrelation-resultsContainer",column:!0,width:"100%"},s.createElement(P.Flex,{justifyContent:"between",alignItems:"center",gap:1},s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.Icon,{name:"correlation",color:"primary",width:"16px",height:"16px"}),s.createElement(P.TextSmall,null,"Analysed"," ",s.createElement(P.TextSmall,{color:"primary","data-testid":"metricCorrelation-resultsAnalyzed"},g)," ","and found"," ",s.createElement(P.TextSmall,{color:"primary","data-testid":"metricCorrelation-resultsFound"},f)," ","correlated metrics."),s.createElement(K.A,{content:"Clear results"},s.createElement(Mn,{flavour:"borderless",neutral:!0,disabled:y||!b&&!B,onClick:()=>{I(dn.UG),w(),(0,me.H)("metrics-correlation","click-delete","charts-view","".concat(b?"finish":"start"))},"data-testid":"metricCorrelation-clear",small:!0,icon:"reload"}))),s.createElement(yn,{runGetWeights:A,nodeIds:c,flavour:t})),s.createElement(P.Flex,{width:"100%"},s.createElement(P.Flex,{alignItems:"center",gap:3,margin:[0,2,0,5],width:"100%"},s.createElement(P.TextNano,{whiteSpace:"nowrap",color:"textDescription"},"Show less"),s.createElement(P.InputRange,{"data-testid":"metricCorrelation-resultsSlider",min:0,max:1,onChange:e=>I(e.target.value.toString()),onClick:()=>(0,me.H)("metric-correlation","click-slider","charts-view"),step:.01,value:m}),s.createElement(P.TextNano,{whiteSpace:"nowrap",color:"textDescription"},"Show more")),s.createElement(s.Fragment,null,s.createElement(K.A,{content:"Give us your feedback! Was it useful?",align:"bottom",enterDelay:200,showArrow:!0,activateOn:"hover"},s.createElement(P.Flex,null,s.createElement(P.Button,{flavour:"+"===u?"hollow":"borderless",disabled:u,icon:"thumb_up",onClick:()=>p("+"),"data-ga":"metric-correlation::click-thumbs-up::charts-view","data-testid":"metricCorrelation-thumbsUp",small:!0}),s.createElement(P.Button,{flavour:"-"===u?"hollow":"borderless",disabled:u,icon:"thumb_down",onClick:()=>p("-"),"data-ga":"metric-correlation::click-thumbs-down::charts-view","data-testid":"metricCorrelation-thumbsDown",small:!0}))))))):s.createElement(P.Flex,{alignItems:"center","data-testid":"correlationView-timePeriod-container",gap:4},s.createElement(kn,{icon:"logo_s",isLoading:y}),y?s.createElement(P.H5,{"data-testid":"metricCorrelation-loadingCalculation"},"Calculating metric correlations..."):s.createElement(_n,{highlightAfter:M,highlightBefore:x,baseline:C})):s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.Icon,{name:"correlation",color:"primary"}),s.createElement(P.Text,null,"Select a timeframe on any chart and find correlated metrics. Visit documentation"),s.createElement("a",{href:"https://learn.netdata.cloud/docs/cloud/insights/metric-correlations",target:"_blank",rel:"noreferrer"},s.createElement(P.Icon,{name:"nav_arrow_goto",color:"primary",width:"12px",height:"12px"}))),s.createElement(P.Flex,{alignItems:"center"},(!b||y)&&s.createElement(K.A,{content:E?"Select an area of interest on any chart":"Click to find correlated metrics for the selected area",align:"bottom",enterDelay:200,showArrow:!0,activateOn:"hover"},s.createElement(wn,{label:y?"Loading...":"Find correlations",isLoading:!1,onClick:A,disabled:E,flavour:"hollow","data-ga":"metric-correlation::click-find-correlation::charts-view","data-testid":"metricCorrelation-find",small:!0,margin:[0,2,0,0],feature:"MetricCorrelations"})),s.createElement(K.A,{content:"Close",align:"bottom"},s.createElement(Sn,{neutral:!0,flavour:"borderless",onClick:()=>{q(!1),I(dn.UG),w(),(0,me.H)("metrics-correlation","click-close","charts-view","".concat(b?"finish":"start"))},"data-ga":"metric-correlation::click-close::charts-view","data-testid":"metricCorrelation-close",icon:"x",feature:"MetricCorrelations"}))))},Cn=(0,Ve.A)(P.Button),Pn=()=>{const e=(0,ue.rI)("correlation");return s.createElement(K.A,{content:()=>s.createElement(P.Box,null,s.createElement("strong",null,"Troubleshoot with Metric Correlations"),s.createElement("br",null),s.createElement("br",null),"Metric correlations will help you identify potential root causes for an observed issue.",s.createElement("br",null),"It will automatically analyse all available metrics for irregular behavior for the same timeframe."),align:"bottom",activateOn:"hover",isBasic:!0},s.createElement(Cn,{width:"118px",flavour:"hollow",label:"Metric Correlations",onClick:()=>{e(!0)},"data-ga":"metrics-correlation::click-metric-correlations::charts-view","data-testid":"run-correlation",small:!0,feature:"MetricCorrelations",isStart:!0}))};var Bn=n(45463);const qn=j.default.div.withConfig({displayName:"styled__Separator",componentId:"sc-1fhfk7c-0"})(["background:",";height:20px;width:1px;"],(0,P.getColor)("border")),In=e=>{var t,n;let{flavour:a}=e;const o=(0,de.nl)(),r=(0,f.Xt)(o),{critical:i,warning:c}=(0,m.AO)(r),l=(0,ue.Fw)("sidebarTab",{flavour:"val",extraKey:a}),d=(0,ue.Fw)("sidebarOpen",{flavour:"bool"}),h=(0,s.useCallback)((e=>{d(!0),l(e)}),[]),{hw:u={},cpus:p,isLive:g,name:b,os:y={},state:v,updateSeverity:_,labels:w,version:k,health:T}=(0,de.xY)(o),{silencingState:S}=(null===T||void 0===T?void 0:T.alerts)||{},M={dataTestId:"singleNode",isLive:g},x=(0,nt.t3)({count:i,type:"critical",...M}),C=(0,nt.t3)({count:c,type:"warning",...M}),B=(0,nt.GM)(v),q=(0,nt.Pg)(u.container,u.virtualization),I=(0,Bn.A)("(min-width: 1760px)");return s.createElement(P.Flex,{alignItems:"center",background:"panelBg",border:{side:"all",color:"border"},"data-testid":"singleNode-badges-container",flex:!1,gap:1,padding:[1,2],round:1},s.createElement(P.TextSmall,{"data-testid":"singleNode-".concat(b),strong:!0},b),s.createElement(pt.A,{badge:"info","data-testid":"singleNode-nodeInfo-cta"},s.createElement(P.IconButton,{flavour:"borderless",cursor:"pointer",onClick:()=>h("info"),icon:"information",iconColor:"nodeBadgeColor",tiny:!0,width:"18px",height:"18px"})),s.createElement(qn,{"data-testid":"singleNode-separator"}),s.createElement(pt.A,{badge:"alerts",nodeName:b},s.createElement(P.AlertMasterCard,{onClick:x.text||C.text?()=>h("alerts"):null,pillLeft:x,pillRight:C})),_&&s.createElement(At.A,{"data-testid":"singleNode-update-cta",name:b,os:y.id,container:u.container,warningLevel:_,labels:w,version:k,text:_}),s.createElement(qn,{"data-testid":"singleNode-separator"}),s.createElement(pt.A,{badge:"connectivity",connectivityState:B,"data-testid":"singleNode-connectivityStateInfo",nodeName:b},s.createElement(P.Pill,{flavour:"neutral",hollow:!0},B)),s.createElement(pt.A,{badge:"type","data-testid":"singleNode-nodeTypeInfo",nodeName:b,nodeType:q.label},s.createElement(P.Pill,{flavour:"neutral",hollow:!0,icon:q.icon},q.label)),I&&s.createElement(pt.A,{badge:"systemInfo","data-testid":"singleNode-systemInfo",nodeName:b},s.createElement(P.Pill,{flavour:"neutral",hollow:!0,icon:(null===(t=Ye.u[y.nm])||void 0===t?void 0:t.iconName)||(null===(n=Ye.U[y.id])||void 0===n?void 0:n.iconName)||"os"},(0,nt.O)(u.cpuFrequency)," (",p," ",1===u.cpus?"Core":"Cores",") -"," ",(0,nt.RI)(u.memory)," RAM - ",(0,nt.RI)(u.diskSpace))),s.createElement(Pt.A,{flavour:"node",silencing:S}))},Ln=()=>{const{onIntegrationsClick:e}=(0,He.A)();return s.createElement(s.Fragment,null,s.createElement(P.Button,{icon:"integrations",flavour:"hollow",onClick:e,small:!0,label:"Integrations","data-ga":"integrations::click-integrations::charts-view","data-testid":"btn-show-integrations"}))};const An={singleNode:In,default:n(90535).A},En=(0,s.memo)((e=>{let{flavour:t,...n}=e;const a=(0,ue.rW)("correlation"),o=An[t]||An.default;return s.createElement(P.Flex,{alignItems:!a&&"center",background:"mainBackground",column:a,"data-testid":"overview-header",gap:2,justifyContent:a?"start":"between",padding:[2,2,2,4],width:"100%"},a?s.createElement(xn,{flavour:t}):s.createElement(s.Fragment,null,!!o&&s.createElement(o,(0,C.A)({},n,{flavour:t})),s.createElement(P.Flex,{gap:2},s.createElement(Ln,null),s.createElement(Pn,null))))})),Dn=En;var Nn=n(56489),Rn=n(67602),Fn=n(83465),Un=n(31438),zn=n(55309),On=n(59090),Hn=n(13271),Vn=n(35243),Qn=n(75233);const jn=e=>t=>"overview-page::".concat(e.getAttribute("id"),"::").concat(t),Gn=(0,s.forwardRef)(((e,t)=>{let{style:n,id:a,menuChartAttributes:o,resizeHandle:r,handleProps:i,listeners:c,dragging:d,dragOverlay:h,...u}=e;const p=(0,l.ID)(),m=(0,Et.e)(),g=(0,Vn.N)(),f=(0,s.useMemo)((()=>{if(!g)return null;let e=g.getChildren().find((e=>e.match({id:h?"dragOverlay-".concat(a):a})));if(!e){const t=(e=>{let{chartId:t,...n}=e;return{contextScope:[t],...n}})(o);e=m.makeChart({attributes:{...t,roomId:p,id:h?"dragOverlay-".concat(a):a},makeTrack:jn,toolboxProps:{drag:{...i,...c}}}),g.appendChild(e)}return e}),[p,a,g]);(0,s.useLayoutEffect)((()=>{f&&f.updateAttributes({toolboxProps:{drag:{...i,...c,dragging:d}}})}),[f,d]);return(0,Be.GR)(o.chartId)&&f?s.createElement("div",{key:g.getId(),ref:t,style:n},s.createElement(Nt.A,{chart:f,"data-track":f.track("container"),"data-chartid":h?"dragOverlay-".concat(a):a,height:n.height,width:"100%"})):null})),Wn=(0,Un.BK)(Gn),Kn=(e,t)=>(e.layout||console.warn(t,"has no layout set, default values will be used."),(0,Fn.bP)(t,e.layout,{left:0,top:0,width:3,height:5,id:e.id,chartId:e.chartId,minWidth:1,minHeight:1,static:!1,dashboardable:!0})),Zn=(0,s.memo)((e=>{let{id:t,ids:n,containerWidth:a,...o}=e;const r=(0,Un.dd)(n,Kn),{filteredChartsCount:i}=(0,Hn.Ad)(),c=(0,Un.yO)(t),[l,d]=(0,s.useState)((()=>r)),h=(0,s.useMemo)((()=>l.filter((e=>{if(!e)return!1;const t=c(e.chartId);return t.visible&&!t.filteredOut&&!t.hidden}))),[n,l,i]),u=(0,Bn.A)("(max-width: 767px)");return n.length?s.createElement(Qn.A,(0,C.A)({compactType:"horizontal",rootId:t,containerId:t,onDragEnd:(e,t)=>{(0,Fn.Q)(t),d(e)},items:h,containerWidth:a-(u?16:26),gridTracks:u?1:12},o,{Item:Wn,rearrangeable:!1})):null}),((e,t)=>e.ids===t.ids&&e.containerWidth===t.containerWidth)),Yn=(0,zn.HB)(Zn,(e=>({ids:(null===e||void 0===e?void 0:e.headIds)||[]}))),Jn=(0,On.A)(Zn,(e=>({ids:(null===e||void 0===e?void 0:e.headIds)||[]}))),Xn=e=>{let{id:t,isActiveSticky:n,containerWidth:a,...o}=e;return s.createElement(it.k,(0,C.A)({id:t},o),s.createElement(ct._,{id:t,tiny:n,hasTooltip:n}),!n&&s.createElement(lt.G,{id:t,isActiveSticky:n}),!n&&s.createElement(Yn,{id:t,tiny:n,containerWidth:a}))},$n=(0,s.memo)(Xn);var es=n(44644);const ts=[],ns=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{selectedDimensions:e.dimensions?Object.keys(e.dimensions):ts,selectedInstances:e.instances?Object.keys(e.instances):ts,selectedNodes:e.nodes?Object.keys(e.nodes):ts,weight:e.weight}},ss=(0,s.forwardRef)(((e,t)=>{let{style:n,handleProps:a,attributes:o,listeners:r,dragging:i,dragOverlay:c,id:d,resizeHandle:h,onRemove:u,...p}=e;const m=(0,l.ID)(),g=(0,Vn.N)(),f=(0,Un.aA)(d),b=(0,Et.e)(),{sendLog:y,isReady:v}=(0,Ht.A)(),_=(0,es.CS)({type:"chart",entity:d}),w=(0,s.useMemo)((()=>{if(!g)return null;let e=g.getNode({id:c?"dragOverlay-".concat(d):d});return e||(e=b.makeChart({attributes:{contextScope:[d],id:c?"dragOverlay-".concat(d):d,roomId:m,expandable:!1,...f,toolboxProps:{drag:{...a,...r,...o}}},makeTrack:jn}),g.appendChild(e),e)}),[g,m,d,c]);(0,s.useLayoutEffect)((()=>{w&&v&&"function"===typeof y&&w.updateAttribute("logOptions",{sendLog:y,payload:{feature:"Overview"}})}),[w,y,v]);const{weight:k,selectedDimensions:T,selectedInstances:S,selectedNodes:M}=(0,Un.uy)(d,ns);return(0,ln.A)((()=>{w&&k&&(w.updateAttributes({selectedDimensions:T,selectedInstances:S,selectedNodes:M}),w.trigger("fetch"))}),[w,m,d,k,T.length,S.length,M.length]),(0,ln.A)((()=>{w&&_&&(w.updateAttributes(_),w.trigger("fetch"))}),[w,m,d,_]),(0,s.useLayoutEffect)((()=>{w&&n&&(w.updateAttributes({height:n.height,width:n.width}),w.trigger("resize"))}),[w,n.height,n.width]),(0,ln.A)((()=>{w&&w.updateAttributes({toolboxProps:{drag:{...a,...r,...o,dragging:i}}})}),[w,i]),w?s.createElement(P.Box,{key:g&&g.getId(),ref:t,style:n},s.createElement(Nt.A,(0,C.A)({chart:w,"data-chartid":c?"dragOverlay-".concat(d):d,"data-track":w.track("container"),height:n.height,width:"100%"},p)),h):null})),as=s.memo(ss,((e,t)=>e.id===t.id&&e.style===t.style)),os=function(){let{id:e,layout:t={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,Fn.bP)(e,t,{left:0,top:0,width:12,height:9,id:e,chartId:e,...t,minWidth:12,maxWidth:12,minHeight:4,static:!1,dashboardable:!0})},rs=e=>{let{id:t,subMenuId:n,containerWidth:a,...o}=e;const r=(0,Un.aA)(t,os),[i,c]=(0,s.useState)((()=>[r])),l=(0,Bn.A)("(max-width: 767px)");return s.createElement(Qn.A,(0,C.A)({rootId:t,containerId:t,onDragEnd:(e,t)=>{(0,Fn.Q)(t),c(e)},items:i,containerWidth:a-(l?16:26)},o,{Item:(0,s.forwardRef)(((e,t)=>{let{id:a,...o}=e;return s.createElement(as,(0,C.A)({key:a,id:a,role:"graphics-object","aria-roledescription":"chart","data-submenuid":n,ref:t},o))})),rearrangeable:!1}))},is=(0,s.memo)(rs);var cs=n(74258),ls=n(37031);const ds=e=>{let{id:t,isActiveSticky:n}=e;return s.createElement(cs.t,{gap:0,id:t},s.createElement(ls.t,{id:t,margin:[1,0,0],hasTooltip:n}),!n&&s.createElement(Jn,{id:t}))},hs=(0,s.memo)(ds),us=e=>{let{id:t}=e;const n=(0,l.ID)(),a=(0,Et.e)(),o=(0,Un.yO)(),{subMenuChartIds:r}=(0,zn.Ee)(t),i=(0,Vn.N)(),c=(0,s.useMemo)((()=>{const[e]=r;let s=i.getChildren().find((e=>e.match({id:t})));if(s)return s;const c=r.map((e=>({value:e,label:o(e).context})));return s=a.makeChart({attributes:{id:"custom-k8s-map-".concat(t),contextScope:[e],roomId:n,composite:!0,chartLibrary:"groupBoxes",groupBy:["label"],groupByLabel:["k8s_namespace","k8s_pod_name"],aggregationMethod:"avg",eliminateZeroDimensions:!1,contextItems:c,toolboxElements:[]},makeTrack:jn}),i.appendChild(s),s}),[t,i]);return s.createElement(Nt.A,{key:i.getId(),margin:[0,0,2],chart:c,"data-chartid":t,"data-track":c.track("container")})},ps=e=>{let{id:t,...n}=e;return s.createElement(it.k,{id:t,padding:[6,0,0]},s.createElement(ct._,{id:t}),s.createElement(lt.G,{id:t,padding:[2,0,0]}),s.createElement(us,(0,C.A)({id:t},n)))},ms={k8s:(0,s.memo)(ps)},gs=e=>{if(ms[e.flavour])return ms[e.flavour];switch(e.level){case 0:return $n;case 1:return hs;case 2:return is;default:return null}},fs=e=>{let{onChartNameChange:t,initialChartName:n,dashboardOptions:a,linkToGo:o,contextToGo:r,containerWidth:i}=e;const[c,,,l]=(0,Rn.A)("addToDashboardModal"),{setActiveMenuGroupId:d,setActiveSubMenuId:h}=(0,ot.A)({onChartNameChange:t,initialChartName:n,linkToGo:o,contextToGo:r});return s.createElement(he.H,null,s.createElement(rt.A,{onActiveMenuGroupId:d,onActiveSubMenuId:h,getComponent:gs,dashboardOptions:a,initialChartName:n,containerWidth:i}),c&&s.createElement(Nn.A,{onClose:l}))},bs=(0,s.memo)((()=>{const[e,t]=(0,m.KB)(),n=(0,Et.e)(),a=!!e&&!!n&&n.getNode({id:e.context}),o=()=>{if(t(null),null===e||void 0===e||!e.context||!a)return;const n={...a.getAttribute("overlays")};delete n.alert,a.updateAttribute("overlays",n),history.replaceState({},"")};(0,s.useEffect)((()=>o),[]);const r=(0,l.ID)(),i=(0,Be.R7)((null===e||void 0===e?void 0:e.context)&&r,null===e||void 0===e?void 0:e.context);if(!e||null===i||void 0===i||!i.loaded)return null;const{firstEntry:c}=i;return s.createElement(P.Layer,{backdrop:!1,position:"top",margin:[26,0,0],padding:[26,0,0]},s.createElement(P.Flex,{background:"tooltip",padding:[1,2],gap:2},s.createElement(P.TextSmall,null,"Showing alert in ",s.createElement(P.TextSmall,{strong:!0},e.instance)," on"," ",s.createElement(P.TextSmall,{strong:!0},new Date(1e3*e.lastStatusChange).toLocaleString()),!c&&" doesn't exist on the node anymore",!!c&&c>e.lastStatusChange&&" exceeds agent data retention settings"),s.createElement(P.Flex,{flex:!1},s.createElement(P.Icon,{name:"x",color:"tooltipText",onClick:o,size:"small"}))))})),ys=bs,vs={NoChartsView:sn,NoNodesView:re.A,sidebar:{title:"Filters",hiddenTabs:["info"],Component:pe.Ay,props:{}},dashboardOptions:{},loadingMessage:"Loading charts...",Header:Dn},_s={overview:{...vs,sidebar:{...vs.sidebar,title:"Overview"},feature:"Overview"},k8s:{...vs,NoChartsView:cn,NoNodesView:cn,sidebar:{...vs.sidebar,title:"Kubernetes"},loadingMessage:"Loading k8s charts...",feature:"Kubernetes"},singleNode:{...vs,sidebar:{...vs.sidebar,title:"Single Node",hiddenTabs:["filters"],props:{showCollapsed:!0}},feature:"SingleNode"}},ws=()=>((0,Yt.A)(),null),ks=(0,s.memo)((e=>{let{flavour:t="overview",invalidationKey:n,nodeIds:a,loaded:r,getChart:i,chartIds:c,areChartsIdsEmpty:l,showNoChartsView:d,showNoNodesView:h,initializing:u,chartName:p,setChartName:m,chartsLoaded:g,widthRef:f,containerWidth:b,nodesKey:y,blurred:v,blurProps:_={},BlurredContent:w,noPreferredNodesError:k}=e;const{dashboardOptions:T,NoChartsView:S,NoNodesView:x,sidebar:P,loadingMessage:B,Header:q,feature:I="Overview"}=_s[t],{state:L}=(0,o.zy)();return h?s.createElement(ie.Ay,{feature:I,mode:"NoNodesView"},s.createElement(x,null)):u?s.createElement(M.A,{title:"Please wait while charts are being initialized.",body:"Thank you for your patience!"}):r?s.createElement(ie.Ay,{feature:I},s.createElement(he.A,{key:n,getObject:i,ids:c,linkToGo:null===L||void 0===L?void 0:L.chartName,extraKey:t,deps:[y]},s.createElement(ws,null),s.createElement(ys,null),s.createElement(le.A,{ref:f,sidebar:s.createElement(P.Component,(0,C.A)({nodeIds:a,title:P.title,initialChartName:p,hiddenTabs:P.hiddenTabs,flavour:t,loaded:g},P.props)),blurred:v,blurProps:_,BlurredContent:w},s.createElement(q,{flavour:t}),g||k?d||l?s.createElement(S,{noPreferredNodesError:k}):s.createElement(fs,{dashboardOptions:T,initialChartName:p,onChartNameChange:m,linkToGo:null===L||void 0===L?void 0:L.chartName,contextToGo:null===L||void 0===L?void 0:L.contextToGo,containerWidth:b}):s.createElement(M.A,{title:B})))):s.createElement(M.A,{title:B})})),Ts=ks;var Ss=n(87337),Ms=n(85686);const xs=e=>t=>{const n=(0,_.vt)(),a=(0,de.nl)(),o=(0,de.xY)(a,"isLive"),r=(0,de.xY)(a,"name"),i=(0,de.xY)(a,"isPreferred");(0,I.ZB)({title:r,id:a,destination:a});const c=(0,de.BQ)(a,n),l=(0,Ss.KF)();(0,s.useEffect)((()=>{if(!o)return;if("hasValue"!==c.state)return;const{contents:e}=c;null!==e&&void 0!==e&&e.uid&&r&&l(e.uid,null,r)}),[c,o,r]);const d=(0,s.useMemo)((()=>[a]),[a]);return s.createElement(e,(0,C.A)({flavour:"singleNode",nodeIds:d,blurred:!i,blurProps:{value:"12px"},BlurredContent:Ms.A},t))};var Cs=n(61658),Ps=n(52768);var Bs=n(28973),qs=n(13752),Is=n(92815),Ls=n(72582),As=n(60247),Es=n(64125),Ds=n(6504),Ns=n(22332),Rs=n(62709);const Fs=(0,j.default)(P.Icon).withConfig({displayName:"styled__StyledAlertDot",componentId:"sc-12w0ym-0"})(["position:absolute;top:0;right:-1px;width:6px;height:6px;"]);var Us=n(14125);const zs={events:{extraKey:"feedFilters",page:"events",alertNamesKey:"alert_names",period:{after:-n(79897).d_,before:0}},alerts:{extraKey:"alerts",page:"alerts",alertNamesKey:"alertNames"}},Os=function(){let{flavour:e="events"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=(0,l.ID)(),n=(0,o.Zp)(),[a,i]=(0,r.Ay)(),[,c]=(0,m.kJ)(),[,d]=(0,m.DV)(),[,h]=(0,ue.N9)(),{extraKey:u,page:p,alertNamesKey:g,period:f}=(0,s.useMemo)((()=>zs[e]||zs.events),[e]),b=(0,s.useMemo)((()=>({defaultValue:[],key:t,extraKey:u,flavour:"arr",merge:!1})),[t,u]),[,y]=(0,ue.N9)("alertContexts",b),[,v]=(0,ue.N9)(g,b),[,_]=(0,ue.N9)("chart_names",b),w=(0,s.useCallback)((e=>{let{name:t}=e;c(1),d({alertName:t,nodeId:null}),n("/spaces/".concat(a,"/rooms/").concat(i,"/alerts"),{replace:!0})}),[n,a,i,c,d]),k=(0,s.useCallback)((e=>{let{context:t,name:s,instance:o}=e;f&&h(f),t&&y([t]),s&&v([s]),o&&_([o]),n("/spaces/".concat(a,"/rooms/").concat(i,"/").concat(p))}),[n,p,f,a,i,h,y,v,_]);return{goToAlerts:k,goToAlertConfigurations:w}};var Hs=n(90204);const Vs=(0,qt.A)((e=>{let{alertName:t,close:n,tooltip:a,...o}=e;const{setSelectedTab:r}=(0,Hs.A)(),{goToAlerts:i}=Os({flavour:"alerts"}),{sendLog:c}=(0,Ht.A)(),l=(0,s.useCallback)((e=>{e.stopPropagation(),c({feature:"MetricsChartManageAlerts",description:"Show alert",alertName:t}),r(0),n(),i({name:t})}),[r,i,n,c]);return s.createElement(P.IconButton,(0,C.A)({icon:"goToNode",iconColor:"textLite",onClick:l,neutral:!0,padding:[0],width:"16px",height:"16px"},o))})),Qs=(0,qt.A)((e=>{let{alertName:t,nodes:n,close:a,tooltip:o,...r}=e;const{goToEdit:i}=(0,Us.q)({alertName:t,nodes:n}),{sendLog:c}=(0,Ht.A)(),l=(0,s.useCallback)((e=>{e.stopPropagation(),c({feature:"MetricsChartManageAlerts",description:"Edit alert",alertName:t}),i(),a()}),[a,i,c]);return s.createElement(P.IconButton,(0,C.A)({icon:"pencilOutline",iconColor:"textLite",onClick:l,neutral:!0,padding:[0],width:"12px",height:"12px"},r))})),js=e=>{let{item:{value:t,label:n,alerts:a={},nodes:o,disabled:r,onClick:i,...c},index:l,style:d,close:h,onItemClick:u,...p}=e;const{cl:m=0,cr:g=0,wr:f=0}=a,b=!!f||!!g,y={text:g,flavour:g?"error":"disabledError"},v={text:f,flavour:f?"warning":"disabledWarning"},_={text:m,flavour:m?"clear":"disabledClear"};return s.createElement(P.MenuItemContainer,(0,C.A)({"data-index":l,disabled:r,onClick:e=>{i&&i(e)}},c,p,{style:d,alignItems:"center",justifyContent:"between",gap:2,padding:[1,2],overflow:"hidden",cursor:"default"}),s.createElement(P.Flex,{width:{max:"180px"},alignItems:"center"},s.createElement(Ut.A,{text:n,TextComponent:P.Text})),s.createElement(P.Flex,{alignItems:"center",gap:1},s.createElement(P.MasterCard,{pillLeft:y,pillRight:v,pillEnd:_}),s.createElement(Vs,{alertName:t,close:h,tooltip:b?"Show in active alerts":"",tooltipProps:{align:"bottom"},disabled:!b}),s.createElement(Qs,{alertName:t,nodes:o,close:h,tooltip:"Edit this alert configuration",tooltipProps:{align:"bottom"}})))};var Gs=n(26688),Ws=n(94390);const Ks=()=>{const e=(0,Gs.A)(),[,t]=(0,Ot.QH)();return(0,s.useCallback)((n=>{let{context:s}=n;const a={format_version:1,rules:[{config:{match:{on:s}}}]};t(e({template:Ws.Sd,formData:a}))}),[e,t])},Zs=(0,Ve.A)((0,qt.A)(P.Button)),Ys=e=>{let{contexts:t=[],close:n}=e;const a=(0,Ns.useChart)(),i=a.getId(),c=null===t||void 0===t?void 0:t[0],l=a.getAttribute("nodes"),{setSelectedTab:d}=(0,Hs.A)(),[h,u]=(0,r.Ay)(),{goToAlerts:p}=Os({flavour:"alerts"}),m=Ks(),g=(0,L.u7)({extraKey:Ws.q4}),f=(0,o.Zp)(),b=(0,s.useMemo)((()=>c?"View the active alerts for ".concat(c," context"):"View the active alerts for this context"),[c]),y=(0,s.useCallback)((()=>{c&&(d(0),n(),p({context:c}))}),[c,p,d,h,u,f,n]),v=(0,s.useCallback)((()=>{c&&(m({context:c}),f("/spaces/".concat(h,"/settings/configurations"),{replace:!0,state:{isAlert:!0}}),g(Object.values(l).map((e=>{let{nd:t}=e;return t}))),n())}),[m,g,c,l,f,h,n]);return s.createElement(P.Flex,{gap:2,padding:[2],border:{side:"top"},justifyContent:"center"},s.createElement(Zs,{feature:"MetricsChartManageAlerts",label:"Go to alerts",small:!0,flavour:"hollow",icon:"goToNode",onClick:y,tooltip:b,tooltipProps:{align:"bottom"},payload:{chartId:i},disabled:!c}),s.createElement(Zs,{feature:"MetricsChartManageAlerts",label:"Add alert",small:!0,icon:"plus",onClick:v,tooltip:"Start adding a new alert on ".concat(c," context"),tooltipProps:{align:"bottom"},payload:{chartId:i},disabled:!c}))},Js=()=>{const e=(0,Ns.useChart)(),{items:t,status:n}=(e=>{const[t,n]=(0,s.useState)([]),[a,o]=(0,s.useState)([]),[r,i]=(0,s.useState)();return(0,s.useEffect)((()=>{const t=()=>{const t=e.getAttribute("alerts"),s=Object.values(t||{}),a=Object.keys(e.getAttribute("nodes")||{});n(s),o(a);for(let e=0;e<=s.length;e++){const{wr:t=0,cr:n=0}=s[e]||{};if(n>0){i("error");break}if(t>0){i("warning");break}}};return e&&e.on("successFetch",t),()=>{e&&e.off("successFetch",t)}}),[e,n,i]),{items:(0,s.useMemo)((()=>[...t.map((e=>{let{nm:t,cl:n,wr:s,cr:o}=e;return{value:t,label:t,alerts:{cl:n,wr:s,cr:o},nodes:a}}))]),[t]),status:r}})(e),a=e.getAttribute("contextScope");return e?s.createElement(s.Fragment,null,s.createElement(P.Menu,{dropProps:{align:{top:"bottom",right:"right"},"data-toolbox":e.getId()},dropdownProps:{width:"360px"},Item:js,items:t,Footer:e=>{let{close:t}=e;return s.createElement(Ys,{contexts:a,close:t})}},s.createElement(P.Flex,{alignItems:"center",position:"relative"},n?s.createElement(Fs,{name:"dot",color:n}):null,s.createElement(Ds.Button,{icon:s.createElement(Ds.default,{svg:Rs.default,size:"16px"}),title:"Manage alerts","data-testid":"chartHeaderToolbox-manageAlerts"})))):null};var Xs=n(93155);var $s=n(98496);const ea={ErrAllNodesFailed:"You do not have permissions to request charts metadata.",default:"Something went wrong during the request of charts metadata."},ta=function(){let{error:e=""}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return s.createElement($s.A,{title:"Failed to request contexts"},s.createElement(P.TextBig,null,ea[e]||ea.default))},na={default:{shouldHide:()=>!1},k8s:{shouldHide:e=>{let{context:t}=e;return!t.includes("k8s")}}},sa=[],aa="ErrNoPreferredNodeRequested",oa=e=>(0,s.memo)((t=>{let{flavour:n="overview",nodeIds:a=sa,...r}=t;const i=(0,_.vt)(),c=(0,l.ID)();let d=(0,L.w7)({extraKey:n,merge:!1,scoped:!0});d=a.length?a:d;const h=(0,oe.nj)(),u=(0,Be._0)(c),{state:p}=(0,o.zy)(),g=(0,Be.R7)(c),f=(0,de.TG)(d),b=(0,Pe.A)(c,d,{spaceId:i}),{contexts:y,metadata:v,loaded:w,dimensionsCount:k}=(0,dn.Yy)({nodeIds:d,flavour:n},i,c),[,T]=(()=>{const{state:e={}}=(0,o.zy)(),{alertId:t=null}=e||{},[n,a]=(0,m.KB)(),r=t||(null===n||void 0===n?void 0:n.id),i=(0,m.JL)(r);(0,m.yk)(i.id),(0,s.useEffect)((()=>{(i.fullyLoaded||i.id)&&a({...i,formattedLastStatusChangeValue:(0,Ps.m3)(i.lastStatusChangeValue,i.units),linkToGo:"chart_".concat((0,Ze.A)(i.context))})}),[i.id,i.fullyLoaded]);const c=null!==n&&void 0!==n&&n.id?"chart_".concat((0,Ze.A)(n.context)):null;return[i.id,c]})(),S=a?a.join():n,M=(0,_.dg)(),[x,{width:P}]=(0,ce.A)();((e,t,n)=>{let{width:a,host:r}=n;if(!r)throw"No host provided";const i=(0,Et.e)(),c=(0,s.useRef)(),l=(0,Be.aZ)(e,"error"),[{correlation:d},h]=(0,ue.N9)(),{state:u,pathname:p}=(0,o.zy)(),m=(0,Vn.G)(),g=(0,Be.jI)(e),f=(0,Be.DQ)(e);(0,s.useLayoutEffect)((()=>{if(!e||!i||l)return;let n=i.getRoot().getChildren().find((e=>e.match({id:p})));if(!n)return n=i.makeContainer({attributes:{id:p,roomId:e,host:r,navigation:d?"highlight":"pan",overlays:{proceeded:{type:"proceeded"}},composite:!0,nodesScope:t,hasCorrelation:!0,versions:g,containerWidth:a,toolboxElements:[...Xs.Dm?[Js]:[],Ls.default,qs.default,Is.default,Es.A,As.A]}}),i.appendChild(n),m(p),c.current=n,(0,Bs.unregister)(i.on("correlation",((e,t)=>{t&&h({correlation:!0})})),n.onAttributeChange("versions",f));m(p)}),[e,l,p]),(0,s.useMemo)((()=>{c.current&&(c.current.setAttribute("containerWidth",a),c.current.getNodes().forEach((e=>e.updateAttribute("containerWidth",a))))}),[c.current,a]),(0,ln.A)((()=>{c.current&&c.current.getNodes().forEach((e=>{e.updateAttribute("nodesScope",t),e.getAttribute("active")&&"chart"===e.type&&e.fetch()}))}),[c.current,t]),(0,s.useEffect)((()=>{c.current&&c.current.getApplicableNodes({syncHighlight:!0}).forEach((e=>{e.updateAttribute("navigation",d?"highlight":"pan")}))}),[c.current,d]),(0,s.useEffect)((()=>()=>c.current&&c.current.destroy()),[]),(0,s.useEffect)((()=>{if(!c.current)return;if(!u||!u.context)return;const{context:e,chartId:t,nodeId:n}=u,s=c.current.getNode({id:e});s&&s.updateAttributes({selectedInstances:["".concat(t,"@").concat(n)],selectedNodes:[n]});const a=t&&n&&c.current.on("chartLoaded",(s=>{const o=s.getAttribute("id");e===o&&(s.updateAttributes({selectedInstances:["".concat(t,"@").concat(n)],selectedNodes:[n]}),a())}));return()=>u&&(0,Bs.unregister)(a)}),[c.current,u])})(c,d,{host:M?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(i,"/rooms/").concat(c),width:P});const B=(0,Be.OL)(c),I=(0,Be.rx)(c),A=w?v:g,E=na[n]||na.default,D=(0,Be.bo)(c),N=(0,q.A)(D),R=(0,Hn.rq)(w?y:B,g,c,{...E,force:w||D!==N,cacheKey:"".concat(n,"-").concat(k,"-").concat(S)}),F=(0,Be.yO)(c,v),U=(0,q.A)(b,!0),z=R<1,[O,H]=(0,ue.N9)("chartName",{key:c,extraKey:S,flavour:"val"});(0,s.useEffect)((()=>{c&&H(T||(null===p||void 0===p?void 0:p.chartName)||O)}),[c,T]);const V=(0,Vn.N)(),Q=Object.keys(A).length<1&&u||d.length&&!f.length,j=(0,oe.CK)(),G=(null===I||void 0===I?void 0:I.errorMsgKey)==aa;if(!Q&&!1!==U&&b&&"No data for this period"!==b&&b!==aa&&!Object.keys(A).length)return s.createElement(ta,{error:b});const W=!!c&&h&&(!!V||G);return s.createElement(e,(0,C.A)({nodeIds:f,loaded:W,getChart:F,areChartsIdsEmpty:z,showNoNodesView:h&&!j.length,showNoChartsView:Q,initializing:b&&(0,Cs.O)(b),chartName:O,setChartName:H,chartsLoaded:u&&!!P,invalidationKey:c,flavour:n,chartIds:w?y:B,widthRef:x,containerWidth:P,nodesKey:S,noPreferredNodesError:G},r))}));var ra=n(45894);var ia=n(31604);const ca=(0,a.A)((()=>n.e(6760).then(n.bind(n,96760))),"Contents"),la=()=>{const[e,t]=(0,ia.A$)();return e?s.createElement(s.Suspense,{fallback:""},s.createElement(ca,{id:e,onClose:()=>t(null)})):null},da=e=>{let{title:t,icon:n,iconColor:a,...o}=e;return s.createElement(P.Flex,(0,C.A)({alignItems:"center",gap:2},o),n&&s.createElement(P.Icon,(0,C.A)({name:n},a?{color:a}:{})),s.createElement(P.TextBig,null,t))},ha=e=>{let{titleProps:t,children:n,...a}=e;const o={padding:[4],gap:4,background:"panelBg",...t?{column:!0}:{}};return s.createElement(P.Flex,(0,C.A)({},o,a),t?s.createElement(da,t):null,n)},ua=e=>function(){let{title:t="",headerInfo:n,containerProps:a={},TitleComponent:o=P.TextBigger,...r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return s.createElement(P.Flex,(0,C.A)({column:!0,gap:2,alignItems:"center",justifyContent:"center"},a),t&&s.createElement(P.Flex,{gap:2,alignItems:"center"},s.createElement(o,null,t),n),s.createElement(e,r))},pa=ua((e=>{let{number:t=0,NumberComponent:n=P.TextHuge}=e;return s.createElement(n,{strong:!0},t)})),ma=e=>{const t=e.reduce(((e,t)=>{let{value:n}=t;return e+n}),0);return e.map((e=>({...e,width:"".concat(Math.floor(e.value/t*100),"%")})))},ga=function(){let{data:e=[],testId:t="",numberIndicatorProps:n={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return s.createElement(P.Flex,{width:"100%",column:!0,gap:2},s.createElement(P.Flex,{justifyContent:"around"},e.map((e=>{let{label:t,value:a}=e;return s.createElement(pa,(0,C.A)({key:"".concat(t,"-").concat(a),title:t,number:a},n))}))),s.createElement(P.ProgressBar,{background:"borderSecondary",border:"none",containerWidth:"100%","data-testid":t,height:2,value:ma(e.filter((e=>{let{omit:t}=e;return!t})))}))},fa=ua((e=>{let{total:t,count:n,live:a,offline:o,stale:r,unseen:i,...c}=e;const l=(0,s.useMemo)((()=>[...[{label:"Live",value:a,color:"success"},{label:"Offline",value:o,color:"offline"},{label:"Stale",value:r,color:"stale"}],...i?[{label:"Unseen",value:i,color:"unseen"}]:[]]),[a,o,r,i]);return s.createElement(P.Flex,{width:"100%",column:!0,alignItems:"center",gap:4},s.createElement(P.Flex,{gap:2,alignItems:"baseline"},s.createElement(P.TextHuge,(0,C.A)({strong:!0},c),n||"-"),"-"!=n&&t!=n&&s.createElement(P.Text,null,"of ",t)),s.createElement(ga,{data:l,numberIndicatorProps:{TitleComponent:P.TextBig,NumberComponent:P.TextBigger}}))})),ba=e=>{const t=(0,oe.CK)(),n=t.length,a=(0,L.eO)({keepAll:!1}),o=(0,s.useMemo)((()=>a.reduce(((e,t)=>{let{isLive:n,isOffline:s,isUnseen:a,state:o}=t;return{live:n?e.live+1:e.live,offline:s?e.offline+1:e.offline,stale:"stale"==o?e.stale+1:e.stale,unseen:a?e.unseen+1:e.unseen}}),{live:0,offline:0,stale:0,unseen:0})),[a]),r=(0,s.useMemo)((()=>{const e=(null===a||void 0===a?void 0:a.length)||"-";return{total:n,count:e,title:a&&n!=e?"Selected nodes":"Total nodes",...o}}),[t,a]);return s.createElement(fa,(0,C.A)({},r,e))};var ya=n(92677);const va=(0,j.default)(P.TextSmall).withConfig({displayName:"pieChartLabels__StyledText",componentId:"sc-3919ls-0"})(["display:flex;align-items:center;cursor:",";&:hover{opacity:",";}"],(e=>{let{onClick:t}=e;return t?"pointer":"auto"}),(e=>{let{onClick:t}=e;return t?"0.7":"1"})),_a=(0,s.memo)((e=>{let{title:t,value:n,color:a,onClick:o=null}=e;return s.createElement(P.Flex,{alignItems:"center",justifyContent:"between",width:"100%",gap:4,flex:{grow:1,shrink:0}},s.createElement(P.Flex,{gap:1},s.createElement(P.Flex,{width:"4px",height:"16px",background:a}),s.createElement(va,{whiteSpace:"nowrap",onClick:o},t,o&&s.createElement(P.Icon,{color:"textLite",margin:[0,0,0,1],name:"nav_arrow_goto",height:"10px",width:"10px"}))),s.createElement(P.Text,{strong:!0},null!==n&&void 0!==n?n:"-"))})),wa=e=>{let{data:t}=e;return s.createElement(P.Flex,{column:!0,alignItems:"start",justifyContent:"center",gap:5},t.map(((e,t)=>{let{title:n,value:a,color:o,onClick:r}=e;return s.createElement(_a,{key:"".concat(n,"-").concat(a,"-").concat(t),title:n,value:a,color:o,onClick:r})})))},ka=e=>{let{data:t,theme:n}=e;return t.map((e=>({...e,color:(0,P.getColor)(e.color)({theme:n})})))},Ta=e=>{let{chartData:t=[],lineWidth:n=15,animate:a=!0,label:o,hasData:r}=e;const i=(0,s.useContext)(j.ThemeContext);return s.createElement(P.Flex,{gap:4,margin:[0,4],height:{min:"70px",max:"130px"},alignItems:"center"},s.createElement(P.Flex,{height:"70px",flex:{grow:1,shrink:1}},r?s.createElement(ya.PieChart,{label:()=>o,labelStyle:{fontSize:"34px",fontWeight:700,lineHeight:"38px",fill:(0,P.getColor)("textDescription")({theme:i})},labelPosition:0,data:ka({data:t,theme:i}),lineWidth:n,animate:a}):s.createElement(P.Icon,{color:"border",name:"pie_chart_skeleton",width:"70px",height:"70px",alignSelf:"center"})),s.createElement(wa,{data:t}))};var Sa=n(23452);const Ma=ua((e=>s.createElement(P.Flex,{gap:2,justifyContent:"between",padding:[2,0,0,0]},s.createElement(Ta,e)))),xa=e=>{const t=(0,Sa.QD)({extraKey:"alerts"}),{critical:n,warning:a}=(t||[]).reduce(((e,t)=>{let{status:n}=t;return{...e,[n]:e[n]+1}}),{critical:0,warning:0}),o=(0,Ps.x7)(),r=(0,s.useMemo)((()=>({chartData:[{title:"Critical",value:n,color:"errorText",onClick:()=>o("critical")},{title:"Warning",value:a,color:"warningText",onClick:()=>o("warning")}],hasData:!!t,label:null===t||void 0===t?void 0:t.length})),[n,a,o]);return s.createElement(Ma,(0,C.A)({title:"Active alerts"},r,e))},Ca=()=>s.createElement(P.Flex,{column:!0,gap:4,basis:"205px"},s.createElement(ba,null),s.createElement(Xt.A,null),s.createElement(xa,null));var Pa=n(63950),Ba=n.n(Pa),qa=n(35119),Ia=n(80158);const La=e=>{let{label:t,color:n}=e;return s.createElement(P.Flex,{height:"32px",gap:1,alignItems:"center"},s.createElement(P.Flex,{width:"12px",height:"12px",background:n}),s.createElement(P.Text,null,(0,Ia.Zr)(t)))},Aa=e=>{let{colorBy:t}=e;const n=Object.entries(qa.Cc[null===t||void 0===t?void 0:t.value]||{}),a=qa.Ug[null===t||void 0===t?void 0:t.value]||{};return n.length?s.createElement(P.Flex,{gap:2},n.map((e=>{let[t,n]=e;return s.createElement(La,{key:t,label:a[t]||t,color:n})}))):null},Ea=e=>{let{groupBy:t,setGroupBy:n=Ba(),colorBy:a,setColorBy:o=Ba(),onAddNode:r}=e;return s.createElement(P.Flex,{alignItems:"end",justifyContent:"between"},s.createElement(P.Flex,{gap:3,alignItems:"end"},s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.Text,null,"Group by"),s.createElement(P.Select,{options:qa.XJ,value:t,onChange:n})),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.Text,null,"Color by"),s.createElement(P.Select,{options:qa.Hn,value:a,onChange:o})),s.createElement(Aa,{colorBy:a})),s.createElement(fe.A,{flavour:"borderless",icon:"add_node",iconColor:"text",onClick:r}))},Da=(0,j.default)(P.Box).withConfig({displayName:"styled__PolygonContainer",componentId:"sc-9bx1cv-0"})(["width:22px;position:relative;aspect-ratio:1;background-color:",";cursor:",";opacity:",";clip-path:polygon( 93.56% 74.55%,50.52% 100%,6.96% 75.45%,6.44% 25.45%,49.48% 0%,93.04% 24.55%,93.56% 74.55% );"],(e=>{let{background:t}=e;return(0,P.getColor)(t||"offline")}),(e=>{let{onClick:t}=e;return t?"pointer":"default"}),(e=>{let{isDisabled:t}=e;return t?"0.5":"1"})),Na=(0,j.default)(P.Box).withConfig({displayName:"styled__PolygonInner",componentId:"sc-9bx1cv-1"})(["width:18px;position:absolute;top:2px;left:2px;aspect-ratio:1;background-color:",";opacity:",";clip-path:polygon( 93.56% 74.55%,50.52% 100%,6.96% 75.45%,6.44% 25.45%,49.48% 0%,93.04% 24.55%,93.56% 74.55% );"],(e=>{let{background:t}=e;return(0,P.getColor)(t||"offline")}),(e=>{let{isDisabled:t}=e;return t?"0.5":"1"})),Ra=(0,j.default)(P.Icon).withConfig({displayName:"styled__AddNodeIcon",componentId:"sc-9bx1cv-2"})(["position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);"]),Fa=(0,j.default)(P.Box).withConfig({displayName:"styled__Groups",componentId:"sc-9bx1cv-3"})(["width:100%;display:grid;grid-template-columns:repeat(2,1fr);gap:16px;"]),Ua=(0,j.default)(P.Flex).withConfig({displayName:"styled__NodeContainer",componentId:"sc-9bx1cv-4"})(["opacity:",";"],(e=>{let{isActive:t}=e;return t?"1":".3"})),za=(0,qt.A)((e=>{let{children:t,innerProps:n={},containerProps:a={},...o}=e;return s.createElement(Ua,(0,C.A)({margin:[0,0,.5,0]},o),s.createElement(Da,a,s.createElement(Na,n,t)))})),Oa=e=>{let{type:t,onClick:n}=e;const a=(0,l.XA)(),o=(0,_.dg)(),r=(0,c.JT)("node:Create"),i=(0,s.useMemo)((()=>({background:"success",isDisabled:!r,...r?{onClick:()=>n({type:t})}:{}})),[r]),d=r?"Add node":o?"You are viewing your local node, connect to cloud and connect multiple nodes to view at once":"Only admin users can add nodes to ".concat(a.name);return s.createElement(s.Fragment,null,s.createElement(za,{containerProps:i,innerProps:{background:"panelBg"},tooltip:d,isActive:!0},s.createElement(Ra,{name:"plus",color:"success"})))},Ha=za;var Va=n(33931);const Qa=e=>{var t,n;let{architecture:a,cpuFrequency:o,cpus:r,diskSpace:i,memory:c,os:l,osName:d}=e;const h=[(0,nt.O)(o),(0,nt.ws)(r,1===r?"Core":"Cores"),(0,nt.ws)(a),(0,nt.ws)((0,nt.RI)(c),"RAM"),(0,nt.ws)((0,nt.RI)(i),"HD")];return s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.Flex,{gap:1},s.createElement(P.Icon,{"data-testid":"node-system-info-icon",name:(null===(t=Ye.u[d])||void 0===t?void 0:t.iconName)||(null===(n=Ye.U[l])||void 0===n?void 0:n.iconName)||"os",width:"16px",height:"16px",color:"text"}),s.createElement(P.Flex,null,(0,nt.ws)(d))),h.map(((e,t)=>s.createElement(P.Text,{key:t},"\u2022 ",e))))};var ja=n(89879);const Ga=e=>{let{isStable:t}=e;const n=t?{icon:"checkmark_s",color:"primary",borderColor:"primary"}:{icon:"warning_triangle",color:"stale",borderColor:"stale"};return s.createElement(P.Pill,(0,C.A)({hollow:!0},n),t?"Stable":"Unstable")},Wa=function(){let{id:e,name:t,state:n,hw:a,os:o,isStable:r,setActiveNodes:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const c=(0,ia.c8)(),{nodes:l}=c||{},d=null===l||void 0===l?void 0:l[e];return(0,s.useEffect)((()=>{if("function"==typeof i){const{children:t,parents:n}=d||{},s=d?[...[...n,...t].map((e=>{let{id:t}=e;return t}))||[],e]:[e];i({isHover:!0,nodes:s})}return()=>{"function"==typeof i&&i(qa.vd)}}),[e,d]),s.createElement(P.Flex,{column:!0,gap:3,width:{min:40},background:"mainBackground",padding:[2,4]},s.createElement(P.TextBig,{strong:!0},t),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.Text,null,"Status"),s.createElement(P.Flex,null,s.createElement(Va.A,{state:n}))),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.Text,null,"Connection"),s.createElement(P.Flex,null,s.createElement(Ga,{isStable:r}))),s.createElement(P.Flex,{column:!0,gap:1},s.createElement(P.Text,null,"Alerts"),s.createElement(D,{id:e})),s.createElement(Xt.A,{color:"textLite"}),s.createElement(Qa,{architecture:a.architecture,cpuFrequency:a.cpuFrequency,cpus:a.cpus,"data-testid":"nodeRow-system-info",diskSpace:a.diskSpace,memory:a.memory,name:t,osName:o.nm,os:o.id}),s.createElement(Xt.A,{color:"textLite"}),s.createElement(ja.A,{id:e}))};n(8159),n(37550);const Ka=function(){var e;let{colorBy:t={},node:n={},isStable:a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{value:o}=t,r=qa.AZ[o],i=(0,f.Xt)(n.id),{critical:c,warning:l}=(0,m.AO)(i),d=qa.Cc[o];let h=d[null===r||void 0===r||null===(e=r(n))||void 0===e||null===(e=e.group)||void 0===e?void 0:e.toLowerCase()];if(o==qa.w9.stability.value){h=d[a?"stable":"unstable"]}return{borderColor:(0,s.useMemo)((()=>(e=>{let{critical:t,warning:n}=e;return t?"error":n?"warning":null})({critical:c,warning:l})||h),[h,c,l]),background:h}},Za=e=>{let{colorBy:t,stability:n={},setActiveNodes:a,...o}=e;const{isStable:r}=n[o.id]||{},{borderColor:i,background:c}=Ka({colorBy:t,node:o,isStable:r}),[,l]=(0,ia.A$)(),d=(0,s.useCallback)((()=>l(o.id)),[o.id,l]);return s.createElement(Ha,(0,C.A)({containerProps:{background:i,onClick:d},innerProps:{background:c},tooltip:s.createElement(Wa,(0,C.A)({isStable:r,setActiveNodes:a},o))},o))};var Ya=n(49389);const Ja=(0,s.memo)((e=>{let{nodes:t=[],type:n,stability:a={},groupBy:o,colorBy:r,onAddNode:i,...c}=e;const[l,d]=(0,s.useState)(qa.vd),{isHover:h,nodes:u}=l,p=null===o||void 0===o?void 0:o.canAddNodes;return s.createElement(P.Flex,(0,C.A)({flexWrap:!0},c),t.map((e=>s.createElement(Za,(0,C.A)({key:e.id,colorBy:r,stability:a,isActive:!h||u.includes(e.id),setActiveNodes:d},e)))),p?s.createElement(Oa,{type:n,onClick:i}):null)})),Xa=(e=>t=>{var n;let{title:a,...o}=t;return a?s.createElement(P.Flex,{column:!0,gap:2},s.createElement(P.Flex,{justifyContent:"between",border:{side:"bottom",color:"border"}},s.createElement(P.TextBig,{strong:!0},a),null!==(n=o.nodes)&&void 0!==n&&n.length?s.createElement(P.TextBig,null,"".concat(o.nodes.length," ").concat((0,Ya.su)(o.nodes.length))):null),s.createElement(e,o)):s.createElement(e,o)})(($a=Ja,e=>{const{stability:t}=(0,ia.SW)();return s.createElement($a,(0,C.A)({stability:t},e))}));var $a;const eo=e=>t=>{const n=qa.AZ[e],s=(0,qa.Hl)(e);return t.reduce(((e,t)=>{const{group:a="unknown",type:o}=n(t);return e[a]?e[a].nodes=[...e[a].nodes,t]:e[a]={title:s(a),type:o,nodes:[t]},e}),{})},to={os:eo("os"),version:eo("version"),status:eo("status"),technology:eo("technology"),replication:eo("replication"),cloudProvider:eo("cloudProvider"),cloudRegion:eo("cloudRegion"),instanceType:eo("instanceType"),none:e=>({none:{nodes:e}})},no=e=>{var t;let{value:n}=e;const s=(0,L.eO)({keepAll:!1});return null===(t=to[n])||void 0===t?void 0:t.call(to,s)},so=()=>s.createElement(P.Flex,null,s.createElement(P.TextBig,null,"No nodes found")),ao=e=>{let{groupBy:t,colorBy:n,onAddNode:a}=e;const o=no(t);if(!o)return s.createElement(so,null);const r=Object.values(o);if(!r.length)return s.createElement(so,null);if((null===t||void 0===t?void 0:t.value)==qa.nv.value){const{nodes:e}=r[0];return s.createElement(Xa,{nodes:e,groupBy:t,colorBy:n,onAddNode:a})}const i=1==r.length?P.Flex:Fa;return s.createElement(i,null,r.map((e=>{let{title:o,type:r,nodes:i}=e;return s.createElement(Xa,{key:o,title:o,type:r,nodes:i,groupBy:t,colorBy:n,onAddNode:a,margin:[0,0,2,0]})})))},oo=()=>{const[e,t]=(0,s.useState)(qa.nv),[n,a]=(0,s.useState)(qa.jZ),[o,r]=(0,s.useState)(),i=(0,s.useCallback)((e=>{r(e)}),[r]),c=(0,s.useCallback)((()=>r()),[r]);return s.createElement(P.Flex,{column:!0,gap:4,basis:"calc(100% - 410px)"},s.createElement(Ea,{groupBy:e,setGroupBy:t,colorBy:n,setColorBy:a,onAddNode:i}),s.createElement(P.Flex,{height:{max:150},overflow:{vertical:"auto"}},s.createElement(ao,{groupBy:e,colorBy:n,onAddNode:i})),o&&s.createElement(be.A,{nodeType:null===o||void 0===o?void 0:o.type,onClose:c}))},ro=e=>s.createElement(ha,(0,C.A)({width:"100%",alignItems:"center",justiFyContent:"center"},e)),io=()=>{const{loaded:e,totalChildren:t,totalParents:n,totalStandalone:a}=(0,ia.c8)(),o=(0,s.useMemo)((()=>[{label:"Parents",value:n,color:["blue","indigo"]},{label:"Children",value:t,color:["purple","lilac"]},{label:"Standalone",value:a,color:["yellow","yellow120"]}]),[t,n]);return e?s.createElement(ga,{numberIndicatorProps:{TitleComponent:P.Text},data:o}):s.createElement(ro,{height:"58px"})},co=()=>s.createElement(P.Flex,{column:!0,gap:1,alignItems:"center",width:"220px","data-testid":"nodesByDataReplication-information-text",overflow:"hidden"},s.createElement(P.TextMicro,null,s.createElement(P.TextMicro,{strong:!0},"None:")," The node's data are only on the node itself. Lose the node, lose the data!"),s.createElement(P.TextMicro,null,s.createElement(P.TextMicro,{strong:!0},"Single:")," The node's metrics are replicated to one parent. The parent can trigger alerts for the child."),s.createElement(P.TextMicro,null,s.createElement(P.TextMicro,{strong:!0},"Multi:")," Same as dual replication, but with the metrics replicated to more than one parent. Each parent in the hierarchy can trigger alerts for its children."),s.createElement(P.TextMicro,{margin:[2,0]},"Aim to have most of your nodes with at least a dual replication and your critical ones with a multiple one.")),lo=()=>s.createElement(K.A,{isBasic:!0,plain:!0,content:co,align:"bottom"},s.createElement(P.Icon,{name:"information",color:"textDescription",size:"small"})),ho=ua((()=>{const e=(0,ia.c8)(),{loaded:t,replicationFactor:n}=e||{},a=(0,s.useMemo)((()=>[{label:"None",value:(null===n||void 0===n?void 0:n.r_1)||0,color:qa.q5.r_1},{label:"Single",value:(null===n||void 0===n?void 0:n.r_2)||0,color:qa.q5.r_2},{label:"Multi",value:(null===n||void 0===n?void 0:n["r_*"])||0,color:qa.q5["r_*"]}]),[n]);return t?s.createElement(ga,{data:a}):s.createElement(ro,{height:"74px"})})),uo=()=>s.createElement(ho,{title:"Data Replication",headerInfo:s.createElement(lo,null)}),po=()=>s.createElement(P.Flex,{column:!0,gap:4,basis:"205px"},s.createElement(io,null),s.createElement(Xt.A,null),s.createElement(uo,null)),mo=()=>s.createElement(ha,null,s.createElement(Ca,null),s.createElement(Xt.A,{vertical:!0}),s.createElement(oo,null),s.createElement(Xt.A,{vertical:!0}),s.createElement(po,null));var go=n(66118),fo=n(44731);go.t1.register(go.PP,go.kc,go.A6,go.E8,go.m_,go.s$);const bo={borderWidth:0,maxBarThickness:15,minBarLength:0},yo=function(){let{alertsStats:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=(0,s.useContext)(j.ThemeContext),{hosts:n}=(null===e||void 0===e?void 0:e.nodes)||{},a={animation:!1,maintainAspectRatio:!1,plugins:{legend:{display:!1}},responsive:!0,scales:{x:{stacked:!0,grid:{color:(0,P.getColor)("borderSecondary")({theme:t})},afterSetDimensions:e=>{e.maxHeight=50},ticks:{precision:0,callback:(e,t)=>{let n=o.labels[t];if(!n)return;let s=0;for(;(null===(a=n)||void 0===a?void 0:a.length)>20;){var a;n=(0,Ia.P3)(n,s),s+=1}return n}}},y:{stacked:!0,grid:{color:(0,P.getColor)("borderSecondary")({theme:t})},afterSetDimensions:e=>{e.maxWidth=50}}}},o=(0,s.useMemo)((()=>{if(!n)return{datasets:[],labels:[]};const[e,t]=Object.entries(n).sort(((e,t)=>t[1].total-e[1].total)).reduce(((e,t)=>{let[n,{critical:s,warning:a}]=t;return e[0].push(n),e[1].critical?e[1].critical=[...e[1].critical,s]:e[1].critical=[s],e[1].warning?e[1].warning=[...e[1].warning,a]:e[1].warning=[a],e}),[[],{}]);return{datasets:Object.entries(t).map((e=>{let[t,n]=e;return{...bo,backgroundColor:"critical"==t?"#DB162F":"#FF9700",data:n,label:t}})),labels:e}}),[n]);return o.datasets?s.createElement(P.Flex,{width:"100%",height:40},s.createElement(fo.yP,{data:o,options:a})):null},vo=e=>{let{alertsStats:t}=e;const{nodes:n}=t||{},{critical:a,warning:o,total:r}=n||{},i=(0,s.useMemo)((()=>[{label:"Warning",value:o,color:["yellow","yellow80"]},{label:"Critical",value:a,color:["red","red100"]},{label:"Total",value:r,color:["purple","lilacFocus"],omit:!0}]),[a,o,r]);return n?s.createElement(ga,{data:i}):null},_o=[{id:"name",accessorKey:"name",header:"Alert name",fullWidth:!0,cell:e=>{let{getValue:t,row:n}=e;const a=t(),{goToAlerts:o}=Os(),r=(0,s.useCallback)((e=>{var t;e.preventDefault(),o({name:a,instance:null===n||void 0===n||null===(t=n.original)||void 0===t?void 0:t.chart})}),[o]);return s.createElement(K.A,{content:"Go to events tab. Timeframe will be set to the last 24 hours.",isBasic:!0},s.createElement(P.Box,null,s.createElement(Jt.A,{onClick:r},a)))}},{id:"chart",name:"chart",fullWidth:!0,header:"Instance"},{id:"occurrences",name:"occurrences",header:"Occurrences"},{id:"duration",name:"duration",header:"Duration (seconds)"}],wo=function(){let{data:e=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.length?s.createElement(P.Flex,{height:{max:50},overflow:{vertical:"auto"}},s.createElement(P.Table,{data:e,dataColumns:_o,sortBy:[{id:"occurrences",desc:!0}],enableResizing:!0})):null},ko={title:"Nodes with the most alerts in the last 24h"},To=e=>{const t=(0,ia.jg)();return t.loaded?s.createElement(ha,(0,C.A)({titleProps:ko},e),s.createElement(yo,{alertsStats:t}),s.createElement(vo,{alertsStats:t}),s.createElement(P.Flex,{column:!0,gap:4},s.createElement(P.TextBig,null,"Top alerts in the last 24 h"),s.createElement(wo,{data:null===t||void 0===t?void 0:t.alerts}))):s.createElement(ro,null)};var So=n(51913),Mo=n(1239);const xo={title:"Netdata Assistant",icon:"netdataAssistant",iconColor:"success"},Co=e=>{const[,t]=(0,So.MY)();return Mo.ei?null:s.createElement(ha,(0,C.A)({titleProps:xo},e),s.createElement(P.Text,null,"Need help? Ask the Netdata Assistant!"),s.createElement(P.Button,{flavour:"hollow",onClick:t},"Start conversation"))},Po=["","k","m","B","T","P","E"],Bo=e=>{if(!e)return 0;const t=Math.log10(Math.abs(e))/3|0;if(!t)return e;const n=Po[t];return(e/Math.pow(10,3*t)).toFixed(1)+n},qo={title:"Metrics collected",justifyContent:"center"},Io=e=>{const{metricsCollected:t=0}=(0,ia.P9)();return s.createElement(ha,(0,C.A)({titleProps:qo},e),s.createElement(P.Flex,{width:"100%",justifyContent:"center"},s.createElement(P.TextHuge,{strong:!0},Bo(t))))},Lo={title:"Charts visualized",justifyContent:"center"},Ao=e=>{const t=(0,l.ID)(),n=(0,Be.R7)(t),a=Object.keys(n||{}).length;return s.createElement(ha,(0,C.A)({titleProps:Lo},e),s.createElement(P.Flex,{width:"100%",justifyContent:"center"},s.createElement(P.TextHuge,{strong:!0},Bo(a))))},Eo={title:"Alerts configured",justifyContent:"center"},Do=e=>{const t=(0,m.oU)();return s.createElement(ha,(0,C.A)({titleProps:Eo},e),s.createElement(P.Flex,{width:"100%",justifyContent:"center"},s.createElement(P.TextHuge,{strong:!0},Bo((null===t||void 0===t?void 0:t.length)||0))))};go.t1.register(go.PP,go.kc,go.A6,go.E8,go.m_,go.s$);const No=function(){let{dataRetention:e=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=(0,s.useContext)(j.ThemeContext),n={animation:!1,maintainAspectRatio:!1,plugins:{legend:{display:!1}},responsive:!0,scales:{x:{stacked:!0,grid:{color:(0,P.getColor)("borderSecondary")({theme:t})},afterSetDimensions:e=>{e.maxHeight=50},ticks:{precision:0,callback:(e,t)=>{let n=a.labels[t];if(!n)return;let s=0;for(;(null===(o=n)||void 0===o?void 0:o.length)>20;){var o;n=(0,Ia.P3)(n,s),s+=1}return n}}},y:{stacked:!0,grid:{color:(0,P.getColor)("borderSecondary")({theme:t})},afterSetDimensions:e=>{e.maxWidth=50}}}},a=(0,s.useMemo)((()=>{if(null===e||void 0===e||!e.length)return{datasets:[],labels:[]};const{values:t,labels:n}=e.reduce(((e,t)=>{let{label:n,value:s}=t;return e.labels.push(n),e.values.push(s),e}),{values:[],labels:[]});return{datasets:[{borderWidth:0,maxBarThickness:10,backgroundColor:"#0A81AB",minBarLength:0,data:t,label:"Nodes"}],labels:n}}),[e]);return a.datasets?s.createElement(P.Flex,{width:"100%",height:"100%"},s.createElement(fo.yP,{data:a,options:n})):null},Ro={title:"Data retention per Nodes"},Fo=e=>{const{dataRetention:t}=(0,ia.P9)();return s.createElement(ha,(0,C.A)({titleProps:Ro},e),s.createElement(No,{dataRetention:t}))},Uo=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),n=(0,L.w7)({extraKey:"nodesView",merge:!1,scoped:!0});(0,Pe.A)(t,n,{spaceId:e})};var zo=n(60177);const Oo=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),n=(0,ia.N3)();(0,p.A)((()=>({enabled:!(!e||!t),force:!0,fetch:()=>(0,h.hn)(e,t),onReceive:e=>{let{data:t}=e;return n({...zo.jf,loaded:!0,...t})},onFail:e=>n({...zo.jf,loaded:!0,error:e}),pollingOptions:{pollingInterval:588e3}})),[e,t])},Ho=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),n=(0,ia.s6)();(0,p.A)((()=>({enabled:!(!e||!t),force:!0,fetch:()=>(0,h.uP)(e,t),onReceive:e=>{let{data:t}=e;return n({...zo.Ml,loaded:!0,...t})},onFail:e=>n({...zo.Ml,loaded:!0,error:e}),pollingOptions:{pollingInterval:588e3}})),[e,t])},Vo=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),n=(0,L.w7)({extraKey:"home",merge:!1,scoped:!0}),s=(0,ia.kf)();(0,p.A)((()=>({enabled:!(!e||!t),force:!0,fetch:()=>(0,h.TM)(e,t,n),onReceive:e=>{let{data:t}=e;return s({...zo.ul,loaded:!0,...t})},onFail:e=>s({...zo.ul,loaded:!0,error:e}),pollingOptions:{pollingInterval:588e3}})),[e,t])},Qo=()=>{const e=(0,_.vt)(),t=(0,l.ID)(),n=(0,L.w7)({extraKey:"home",merge:!1,scoped:!0}),s=(0,ia.xs)();(0,p.A)((()=>({enabled:!(!e||!t),force:!0,fetch:()=>(0,h.jt)(e,t,n),onReceive:e=>{let{data:t}=e;return s({...zo.ve,loaded:!0,...t})},onFail:e=>s({...zo.ve,loaded:!0,error:e}),pollingOptions:{pollingInterval:588e3}})),[e,t])},jo=()=>(Uo(),Oo(),Ho(),Vo(),Qo(),null),Go=()=>{const e=(0,oe.CK)(),t=(0,oe.nj)();return t?t&&!e.length?s.createElement(ie.Ay,{feature:"Home",mode:"NoNodesView"},s.createElement(re.A,null)):s.createElement(ie.Ay,{feature:"Home"},s.createElement(jo,null),s.createElement(le.A,{height:"calc(100% - 32px)",sidebar:s.createElement(la,null),gap:4,padding:[4],overflow:"auto"},s.createElement(mo,null),s.createElement(P.Flex,{gap:4},s.createElement(To,{width:"60%"}),s.createElement(P.Flex,{column:!0,gap:4,height:"100%",width:"calc(40% - 16px)"},s.createElement(Co,{column:!0}),s.createElement(P.Flex,{gap:4},s.createElement(Io,{flex:{grow:"1",shrink:"0"}}),s.createElement(Ao,{flex:{grow:"1",shrink:"0"}}),s.createElement(Do,{flex:{grow:"1",shrink:"0"}})),s.createElement(Fo,{flex:"grow"}))))):s.createElement(M.A,{title:"Loading room stats..."})};var Wo=n(24266);const Ko=()=>{const e=(0,Et.e)(),t=(()=>{const e=(0,_.bq)(),t=(0,l.QW)();return"/spaces/".concat(e,"/rooms/").concat(t,"/overview")})(),n=(0,o.Zp)();(0,s.useEffect)((()=>{if(e)return(0,Bs.unregister)(e.on("goToLink",((e,s)=>{var a;let o=location.pathname;return e&&e.getParent().getAttribute("roomId")&&(o=e.getParent().getId(),o=/^\/spaces/.test(o)?o:t),n(o,s?{state:{chartName:s},replace:!0}:{state:{contextToGo:null===e||void 0===e||null===(a=e.getAttribute("contextScope"))||void 0===a?void 0:a[0]},replace:!0})})))}),[e,t])},Zo=()=>(Ko(),null);var Yo=n(53285),Jo=n(69418),Xo=n(29848),$o=n(17170);const er=(0,a.A)((()=>Promise.all([n.e(6121),n.e(6323),n.e(4958)]).then(n.bind(n,52577))),"ManageSpaceRoute"),tr=(0,a.A)((()=>n.e(7436).then(n.bind(n,57436))),"Trial"),nr=(0,a.A)((()=>n.e(9912).then(n.bind(n,9912))),"PreferredNodesModal"),sr=(0,a.A)((()=>Promise.resolve().then(n.bind(n,57419))),"JoinSpace"),ar=(0,a.A)((()=>n.e(7959).then(n.bind(n,7959))),"NoSpaceAccess"),or=(0,a.A)((()=>n.e(3968).then(n.bind(n,73968))),"AlertView"),rr=(0,a.A)((()=>n.e(3104).then(n.bind(n,3104))),"Anomalies"),ir=(0,a.A)((()=>n.e(8059).then(n.bind(n,88059))),"AlertsSmartboard"),cr=(0,a.A)((()=>n.e(195).then(n.bind(n,10195))),"DashboardsOverview"),lr=(0,a.A)((()=>Promise.all([n.e(6008),n.e(785)]).then(n.bind(n,40785))),"DashboardView"),dr=(0,a.A)((()=>Promise.all([n.e(6121),n.e(5709),n.e(7340)]).then(n.bind(n,97340))),"FunctionsView"),hr=(0,a.A)((()=>Promise.all([n.e(7208),n.e(6323),n.e(7304)]).then(n.bind(n,7304))),"Integrations"),ur=(0,a.A)((()=>Promise.all([n.e(6008),n.e(7332)]).then(n.bind(n,47332))),"DropInDashboard"),pr=(0,a.A)((()=>n.e(6944).then(n.bind(n,6944))),"Aws"),{demoSlug:mr,demoDefaultRoomViews:gr,defaultRoomView:fr,integrationsView:br}=x.A,yr=xs(oa(Ts)),vr=oa(Ts),_r=(0,s.memo)((()=>{const[e,t]=(0,r.Ay)(),n=mr===e?gr[t]||gr.default:V.Ay&&e===V.z0&&t===V.gB?V.kG:fr;return s.createElement(s.Suspense,{fallback:s.createElement(M.A,{title:"Loading..."})},s.createElement(s.Suspense,{fallback:""},s.createElement(ur,null)),s.createElement(o.BV,null,s.createElement(o.qh,{path:"nodes/:nodeId",element:s.createElement(yr,null)}),s.createElement(o.qh,{path:"nodes",element:s.createElement(Zt,null)}),s.createElement(o.qh,{path:"home",element:s.createElement(Go,null)}),s.createElement(o.qh,{path:"overview",element:s.createElement(vr,null)}),s.createElement(o.qh,{path:"alerts/:alertId",element:s.createElement(or,null)}),s.createElement(o.qh,{path:"alerts",element:s.createElement(ir,null)}),s.createElement(o.qh,{path:"alarms/:alertId",element:s.createElement(or,null)}),s.createElement(o.qh,{path:"alarms",element:s.createElement(o.C5,{replace:!0,to:"/spaces/".concat(e,"/rooms/").concat(t,"/alerts")})}),s.createElement(o.qh,{path:"functions",element:s.createElement(o.C5,{replace:!0,to:"/spaces/".concat(e,"/rooms/").concat(t,"/top")})}),s.createElement(o.qh,{path:"dashboard",element:s.createElement(lr,{customDashboardId:V.LA})}),s.createElement(o.qh,{path:"dashboards/:dashboardSlug",element:s.createElement(lr,null)}),s.createElement(o.qh,{path:"dashboards",element:s.createElement(cr,null)}),s.createElement(o.qh,{path:"kubernetes",element:s.createElement(vr,{flavour:"k8s"})}),s.createElement(o.qh,{path:"anomalies",element:s.createElement(rr,null)}),s.createElement(o.qh,{path:"top",element:s.createElement(dr,{key:"fn",flavour:"fn"})}),s.createElement(o.qh,{path:"logs",element:s.createElement(dr,{key:"logs",flavour:"logs"})}),s.createElement(o.qh,{path:"events",element:s.createElement(dr,{key:"feed",flavour:"feed"})}),s.createElement(o.qh,{path:"/",element:s.createElement(o.C5,{replace:!0,to:"/spaces/".concat(e,"/rooms/").concat(t,"/").concat(n)})})))})),wr=()=>{const e=(0,o.Zp)(),[t,n]=(0,r.Ay)(),[a,i]=(0,Jo.A)(),c=(0,_.vt)(),w=(0,l.ID)(),[k,T]=(0,s.useState)(!0),[S,x]=(0,Xo.pp)(),C=(0,$o.A)();return((e,t)=>{const n=(0,d.Zs)((n=>{let{snapshot:s,set:a}=n;return async()=>{await s.getPromise((0,l.LS)({id:t,key:"fullyLoaded"}))||(0,h.K8)(e,t).then((t=>{let{data:n}=t;return a((0,l.If)(n.id),{...n,spaceId:e,fullyLoaded:!0,loaded:!0})}))}}),[e,t]);(0,s.useEffect)((()=>{e&&t&&n()}),[e,t])})(c,w),(0,u.A)({spaceId:c,id:w,pollingInterval:63e3}),function(e,t){let{polling:n=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=(0,d.Zs)((e=>{let{set:n}=e;return function(){let{data:e=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n((0,b.t)({id:t,key:"ids"}),e.map((e=>e.id))),n((0,b.t)({id:t,key:"loaded"}),!0),n((0,b.t)({id:t,key:"updatedAt"}),(new Date).toISOString()),n((0,b.t)({id:t,key:"error"}),null),e.forEach((e=>{n((0,m.SB)({id:e.id}),(t=>({...t,loaded:!0,...e})))}));const s=e.reduce(((e,t)=>{let{id:n,nodeId:s}=t;return e[s]=[...e[s]||[],n],e}),{});n(f.l3,s)}}),[e,t]),a=(0,d.Zs)((e=>{let{set:n}=e;return e=>{n((0,b.t)({id:t,key:"error"}),(0,y.A)(e))}}));(0,p.A)((()=>({enabled:!!e&&!!t,polling:n,fetch:()=>(0,g.l1)(e,t),onFail:a,onReceive:s,force:!0})),[e,t])}(c,w),(0,v.A)(c,w),function(e,t){let{types:n,entities:a,paths:o,names:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=(0,d.Zs)((s=>{let{set:i}=s;return async()=>{(0,ra.Uc)(e,t,{types:n,entities:a,paths:o,names:r}).then((n=>{let{data:s}=n;return i((0,es.Mg)({spaceId:e,roomId:t}),s)}))}}));(0,s.useEffect)((()=>{e&&t&&i()}),[e,t,n,a,o,r])}(c,w),(0,s.useEffect)((()=>{let s=!0,o=null;return o=setTimeout((()=>{s&&(a&&!C&&e("/spaces/".concat(t,"/rooms/").concat(n,"/").concat(br),{replace:!0}),T(!1))}),1e3),()=>{s=!1,o&&(clearTimeout(o),o=null)}}),[a,C]),(0,s.useEffect)((()=>{x(k||!w||i)}),[k,w,i]),C?s.createElement(s.Suspense,{fallback:""},s.createElement(pr,{subCallback:C})):S?s.createElement(M.A,{title:"Loading room..."}):s.createElement(_r,null)},kr=(0,Wo.Xc)((0,s.memo)((()=>{const{isIntegrationsPath:e}=(0,Jo.Q)(),t=(0,Xo.Hs)(),n=(0,c.JT)("space:Read"),a=(0,c.JT)("room:Read");return n?s.createElement(s.Fragment,null,!t&&!e&&s.createElement(ae,null),s.createElement(s.Suspense,{fallback:s.createElement(M.A,{title:"Loading your space..."})},s.createElement(o.BV,null,s.createElement(o.qh,{path:"spaces/:spaceSlug/join-space",element:s.createElement(sr,null)}),s.createElement(o.qh,{path:"spaces/:spaceSlug/no-rooms",element:s.createElement(ar,{reason:"noRooms"})}),s.createElement(o.qh,{path:"spaces/:spaceSlug/settings/*",element:s.createElement(Tr,null)}),s.createElement(o.qh,{path:"spaces/:spaceSlug/rooms/:roomSlug/".concat(br),element:s.createElement(hr,null)}),s.createElement(o.qh,{path:"spaces/:spaceSlug/rooms/:roomSlug/*",element:a?s.createElement(wr,null):s.createElement(ar,{reason:"noRoomPermission"})})))):s.createElement(ar,{reason:"noSpacePermission"})}))),Tr=()=>((0,r.KI)(),s.createElement(er,null)),Sr=()=>{const e=(0,_.vt)();return(0,w.A)(e),(0,k.A)(e),(e=>{const t=(0,d.Zs)((t=>{let{set:n}=t;return function(){let{data:{results:t}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n((0,T.S)({id:e}),t)}})),n=(0,d.Zs)((t=>{let{set:n}=t;return t=>n((0,T.S)({id:e,key:"error"}),t)})),s=(0,S.sC)(e,"loaded"),a=(0,c.JT)("alert:ReadAll");(0,p.A)((()=>({enabled:a&&!!e&&s,fetch:()=>(0,g.C2)(e),onFail:n,onReceive:t,pollingOptions:{pollingInterval:15e4}})),[e,!!s])})(e),null},Mr=(0,Wo.Xc)((()=>{const e=(0,_.vt)();return(0,i.Ay)(),(0,s.useEffect)((()=>{const e=new URL(window.location.href).searchParams.get("join_callback");e&&(window.location.href=e)}),[]),e?s.createElement(s.Fragment,null,s.createElement(Sr,null),s.createElement(Yo.A,{permission:"space:Read"},(t=>t?s.createElement(s.Fragment,null,s.createElement(o.BV,null,s.createElement(o.qh,{path:"/*",element:s.createElement(Zo,null)})),s.createElement(s.Suspense,{fallback:s.createElement(M.A,{title:"Loading your space..."})},s.createElement(kr,null)),s.createElement(s.Suspense,{fallback:""},s.createElement(tr,null)),s.createElement(s.Suspense,{fallback:""},s.createElement(nr,null))):s.createElement(ar,{key:e,reason:"noSpacePermission"})))):null}))},90204:(e,t,n)=>{n.d(t,{A:()=>i});n(62953);var s=n(96540),a=n(47444),o=n(96935),r=n(64118);const i=()=>{const[e,t]=(0,a.L4)(o.J7),n=(0,r.ud)(),i=(0,s.useCallback)((s=>{s===e&&n(),t(s)}),[e,t]);return{selectedTab:e,setSelectedTab:t,handleTabChange:i}}},33195:(e,t,n)=>{n.d(t,{A:()=>u});n(41393),n(81454),n(62953);var s=n(96540),a=n(47767),o=n(83199),r=n(29217),i=n(97054),c=n(37171);const l={SCHEDULED:{icon:"scheduled",tooltip:"scheduled to be silenced"},SILENCED:{icon:"alarm_off",tooltip:"silenced"}},d=(h=o.Pill,e=>{let{tooltip:t,...n}=e;return s.createElement(r.A,{align:"bottom",content:t},s.createElement(o.Box,null,s.createElement(h,n)))});var h;const u=e=>{let{silencing:t,flavour:n="alert"}=e;const[o]=(0,i.Ay)(),r=(0,a.Zp)(),{state:h,rules:u=[]}=t||{},p=u.map((e=>{let{id:t}=e;return t})),m=(0,c.z)(),g=(0,s.useMemo)((()=>{var e;return null===(e=l[h])||void 0===e?void 0:e.icon}),[h]),f=(0,s.useCallback)((()=>{m(p),r("/spaces/".concat(o,"/settings/notifications#notificationsActiveTab=1"))}),[r,m,p]),b=(0,s.useMemo)((()=>{var e,t,n;return{alert:{tooltip:"This alert is ".concat(null===(e=l[h])||void 0===e?void 0:e.tooltip)},node:{tooltip:"This node is ".concat(null===(t=l[h])||void 0===t?void 0:t.tooltip)},room:{tooltip:"This room is ".concat(null===(n=l[h])||void 0===n?void 0:n.tooltip)}}}),[g]),y=(0,s.useMemo)((()=>({icon:g,...u.length?{onClick:f}:{},flavour:"neutral",children:h,...b[n]||{}})),[g,h]);return h&&"NONE"!=h?s.createElement(d,y):"-"}},12412:(e,t,n)=>{n.d(t,{G:()=>r});var s=n(58168),a=n(96540),o=n(92230);const r=(0,n(55309).HB)((e=>e.children?a.createElement(o.A,(0,s.A)({as:"p",role:"document"},e)):null),(e=>{let{info:t}=e;return{children:t}}))},10952:(e,t,n)=>{n.d(t,{_:()=>d});var s=n(58168),a=n(96540),o=n(83199),r=n(29217),i=n(55309),c=n(12412);const l=(0,a.forwardRef)(((e,t)=>{let{name:n,tiny:r,...i}=e;const c=r?o.Text:o.H3;return"string"===typeof n?a.createElement(c,(0,s.A)({strong:!0},i,{ref:t}),n):n||null})),d=(0,i.HB)((e=>{let{hasTooltip:t,hasInfo:n,...s}=e;return t&&n?a.createElement(r.A,{content:a.createElement(c.G,{id:s.id}),isBasic:!0},a.createElement(l,s)):a.createElement(l,s)}),(e=>{let{name:t,info:n}=e;return{name:t,hasInfo:!!n}}))},44741:(e,t,n)=>{n.d(t,{k:()=>r});var s=n(58168),a=n(96540),o=n(83199);const r=(0,a.forwardRef)(((e,t)=>{let{id:n,...r}=e;return a.createElement(o.Flex,(0,s.A)({column:!0,"data-menuid":n,ref:t},r))}))},6551:(e,t,n)=>{n.d(t,{X:()=>i});var s=n(58168),a=n(96540),o=n(59090),r=n(92230);const i=(0,o.A)((e=>e.children?a.createElement(r.A,(0,s.A)({as:"p",role:"document"},e)):null),(e=>{let{info:t}=e;return{children:t}}))},37031:(e,t,n)=>{n.d(t,{t:()=>d});var s=n(58168),a=n(96540),o=n(83199),r=n(29217),i=n(59090),c=n(6551);const l=(0,a.forwardRef)(((e,t)=>{let{name:n,...r}=e;return"string"===typeof n?a.createElement(o.Text,(0,s.A)({strong:!0,ref:t},r),n):n||null})),d=(0,i.A)((e=>{let{hasTooltip:t,hasInfo:n,...s}=e;return t&&n?a.createElement(r.A,{content:a.createElement(c.X,{id:s.id}),isBasic:!0},a.createElement(l,s)):a.createElement(l,s)}),(e=>{let{name:t,info:n}=e;return{name:t,hasInfo:!!n}}))},74258:(e,t,n)=>{n.d(t,{t:()=>c});var s=n(58168),a=n(96540),o=n(83199),r=n(59090);const i=function(){let{link:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e},c=(0,a.forwardRef)(((e,t)=>{let{id:n,...c}=e;const l=(0,r.jR)(n,i);return a.createElement(o.Flex,(0,s.A)({column:!0,gap:2,id:l,"data-submenuid":n,ref:t},c))}))},4967:(e,t,n)=>{n.d(t,{A:()=>Qe,L:()=>Ve});n(14905),n(98992),n(8872),n(62953);var s=n(81395);const a="The amount of traffic transferred by the network interface.",o='The number of packets transferred by the network interface. Received multicast counter is commonly calculated at the device level (unlike received) and therefore may include packets which did not reach the host.',r="

The number of errors encountered by the network interface.

Inbound - bad packets received on this interface. It includes dropped packets due to invalid length, CRC, frame alignment, and other errors. Outbound - transmit problems. It includes frames transmission errors due to loss of carrier, FIFO underrun/underflow, heartbeat, late collisions, and other problems.

",i="

The number of FIFO errors encountered by the network interface.

Inbound - packets dropped because they did not fit into buffers provided by the host, e.g. packets larger than MTU or next buffer in the ring was not available for a scatter transfer. Outbound - frame transmission errors due to device FIFO underrun/underflow. This condition occurs when the device begins transmission of a frame but is unable to deliver the entire frame to the transmitter in time for transmission.

",c='

The number of packets that have been dropped at the network interface level.

Inbound - packets received but not processed, e.g. due to softnet backlog overflow, bad/unintended VLAN tags, unknown or unregistered protocols, IPv6 frames when the server is not configured for IPv6. Outbound - packets dropped on their way to transmission, e.g. due to lack of resources.

',l="The number of correctly transferred compressed packets by the network interface. These counters are only meaningful for interfaces which support packet compression (e.g. CSLIP, PPP).",d='

The number of errors encountered by the network interface.

Frames - aggregated counter for dropped packets due to invalid length, FIFO overflow, CRC, and frame alignment errors. Collisions - collisions during packet transmissions. Carrier - aggregated counter for frame transmission errors due to excessive collisions, loss of carrier, device FIFO underrun/underflow, Heartbeat/SQE Test errors, and late collisions.

',h='

The interface\'s latest or current duplex that the network adapter negotiated with the device it is connected to.

Unknown - the duplex mode can not be determined. Half duplex - the communication is one direction at a time. Full duplex - the interface is able to send and receive data simultaneously.

',u='

The current operational state of the interface.

Unknown - the state can not be determined. NotPresent - the interface has missing (typically, hardware) components. Down - the interface is unable to transfer data on L1, e.g. ethernet is not plugged or interface is administratively down. LowerLayerDown - the interface is down due to state of lower-layer interface(s). Testing - the interface is in testing mode, e.g. cable test. It can\u2019t be used for normal traffic until tests complete. Dormant - the interface is L1 up, but waiting for an external event, e.g. for a protocol to establish. Up - the interface is ready to pass packets and can be used.

',p="The current physical link state of the interface.",m='The interface\'s latest or current speed that the network adapter negotiated with the device it is connected to. This does not give the max supported speed of the NIC.',g='The interface\'s currently configured Maximum transmission unit (MTU) value. MTU is the size of the largest protocol data unit that can be communicated in a single network layer transaction.',f=' This chart is provided by the eBPF plugin.',b='Number of times a function that starts a process is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per application.'+f,y='Number of times a function that starts a thread is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per application.'+f,v='Number of times a function that responsible for closing tasks is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per application.'+f,_='Number of times a function that responsible for releasing tasks is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per application.'+f,w='Number of errors to create a new task. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per application.'+f,k='Number of calls for internal functions on the Linux kernel responsible to open files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per application.'+f,T='Number of failed calls for internal functions on the Linux kernel responsible to open files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per application.'+f,S='Number of calls for internal functions on the Linux kernel responsible to close files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per application.'+f,M='Number of failed calls for internal functions on the Linux kernel responsible to close files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per application.'+f,x='Percentage of file accesses that were present in the directory cache. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per application.'+f,C='Number of times a file is accessed inside directory cache. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per application.'+f,P='Number of times a file is accessed in the file system, because it is not present inside the directory cache. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per application.'+f,B='Number of times a file was not found on the file system. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per application.'+f,q='Number of successful calls to VFS writer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,I='Number of successful calls to VFS reader function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,L='Number of failed calls to VFS writer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,A='Number of failed calls to VFS reader function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,E='Total of bytes successfully written using the VFS writer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,D='Total of bytes successfully read using the VFS reader function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,N='Number of calls to VFS unlinker function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,R='Number of calls to VFS syncer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,F='Number of failed calls to VFS syncer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,U='Number of calls to VFS opener function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,z='Number of failed calls to VFS opener function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,O='Number of calls to VFS creator function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,H='Number of failed calls to VFS creator function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per application.'+f,V='Number of failed calls to swap reader function. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows swap per application.'+f,Q='Number of failed calls to swap writer function. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows swap per application.'+f,j='The ratio shows the percentage of data accessed directly in memory. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache hit per application.'+f,G='Number of modified pages in Linux page cache. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache hit per application.'+f,W='Number of access to data in Linux page cache. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache hit per application.'+f,K='Number of access to data was not present in Linux page cache. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache misses per application.'+f,Z='Number of calls to shmget. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per application.'+f,Y='Number of calls to shmat. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per application.'+f,J='Number of calls to shmctl. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per application.'+f,X='Number of calls to shmdt. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per application.'+f,$='Number of calls to IPV4 TCP function responsible for starting connections. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows outbound connections per application.'+f,ee='Number of calls to IPV6 TCP function responsible for starting connections. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows outbound connections per application.'+f,te='Total bytes sent with TCP or UDP internal functions. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows bandwidth per application.'+f,ne='Total bytes received with TCP or UDP internal functions. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows bandwidth per application.'+f,se='Number of calls to TCP functions responsible to send data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows TCP calls per application.'+f,ae='Number of calls to TCP functions responsible to receive data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows TCP calls per application.'+f,oe='Number of times a TCP packet was retransmitted. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows TCP calls per application.'+f,re='Number of calls to UDP functions responsible to send data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows UDP calls per application.'+f,ie='Number of calls to UDP functions responsible to receive data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows UDP calls per application.'+f,ce="Total CPU utilization within the configured or system-wide (if not set) limits. When the CPU utilization of a cgroup exceeds the limit for the configured period, the tasks belonging to its hierarchy will be throttled and are not allowed to run again until the next period.",le='Total CPU utilization within the system-wide CPU resources (all cores). The amount of time spent by tasks of the cgroup in user and kernel modes.',de="The percentage of runnable periods when tasks in a cgroup have been throttled. The tasks have not been allowed to run because they have exhausted all of the available time as specified by their CPU quota.",he="The total time duration for which tasks in a cgroup have been throttled. When an application has used its allotted CPU quota for a given period, it gets throttled until the next period.",ue="

The weight of each group living in the same hierarchy, that translates into the amount of CPU it is expected to get. The percentage of CPU assigned to the cgroup is the value of shares divided by the sum of all shares in all cgroups in the same level.

For example, tasks in two cgroups that have cpu.shares set to 100 will receive equal CPU time, but tasks in a cgroup that has cpu.shares set to 200 receive twice the CPU time of tasks in a cgroup where cpu.shares is set to 100.

",pe="Total CPU utilization per core within the system-wide CPU resources.",me='CPU Pressure Stall Information. Some indicates the share of time in which at least some tasks are stalled on CPU. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',ge="The amount of time some processes have been waiting for CPU time.",fe='CPU Pressure Stall Information. Full indicates the share of time in which all non-idle tasks are stalled on CPU resource simultaneously. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',be="The amount of time all non-idle processes have been stalled due to CPU congestion.",ye="RAM utilization within the configured or system-wide (if not set) limits. When the RAM utilization of a cgroup exceeds the limit, OOM killer will start killing the tasks belonging to the cgroup.",ve="RAM usage within the configured or system-wide (if not set) limits. When the RAM usage of a cgroup exceeds the limit, OOM killer will start killing the tasks belonging to the cgroup.",_e="The amount of used RAM and swap memory.",we='Memory usage statistics. The individual metrics are described in the memory.stat section for cgroup-v1 and cgroup-v2.',ke="The number of memory usage hits limits.",Te="Dirty is the amount of memory waiting to be written to disk. Writeback is how much memory is actively being written to disk.",Se="

Memory accounting statistics.

In - a page is accounted as either mapped anon page (RSS) or cache page (Page Cache) to the cgroup. Out - a page is unaccounted from the cgroup.

",Me='

Memory page fault statistics.

Pgfault - all page faults. Swap - major page faults.

',xe='Memory Pressure Stall Information. Some indicates the share of time in which at least some tasks are stalled on memory. In this state the CPU is still doing productive work. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',Ce="The amount of time some processes have been waiting due to memory congestion.",Pe='Memory Pressure Stall Information. Full indicates the share of time in which all non-idle tasks are stalled on memory resource simultaneously. In this state actual CPU cycles are going to waste, and a workload that spends extended time in this state is considered to be thrashing. This has severe impact on performance. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',Be="The amount of time all non-idle processes have been stalled due to memory congestion.",qe="The amount of data transferred to and from specific devices as seen by the CFQ scheduler. It is not updated when the CFQ scheduler is operating on a request queue.",Ie="The number of I/O operations performed on specific devices as seen by the CFQ scheduler.",Le="The number of requests queued for I/O operations.",Ae="The number of BIOS requests merged into requests for I/O operations.",Ee="The amount of data transferred to and from specific devices as seen by the throttling policy.",De="The number of processes currently in the cgroup.",Ne="The number of I/O operations performed on specific devices as seen by the throttling policy.",Re='I/O Pressure Stall Information. Some indicates the share of time in which at least some tasks are stalled on I/O. In this state the CPU is still doing productive work. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',Fe="The amount of time some processes have been waiting due to I/O congestion.",Ue='I/O Pressure Stall Information. Full line indicates the share of time in which all non-idle tasks are stalled on I/O resource simultaneously. In this state actual CPU cycles are going to waste, and a workload that spends extended time in this state is considered to be thrashing. This has severe impact on performance. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',ze="The amount of time all non-idle processes have been stalled due to I/O congestion.",Oe={"system.cpu":{aggregationMethod:"avg",info:()=>'Total CPU utilization (all cores). 100% here means there is no CPU idle time at all. You can get per core usage at the CPUs section and per application usage at the Applications Monitoring section.',valueRange:[0,100],en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",urlOptions:[],chartLibrary:"gauge",valueRange:[0,100],title:"Average CPU per Node",colors:s.default[0],layout:{left:3.4,top:0,width:2.6,height:5}},{groupBy:["node"],aggregationMethod:"sum",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top Nodes by CPU",layout:{left:3.4,top:5,width:2.6,height:5}}]},"system.load":{mainheads:[{aggregationMethod:"avg",chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,selectedDimensions:["load1"],title:"Average System Load (1 min)",colors:s.default[0],layout:{left:10.3,top:5,width:1.7,height:5}}],aggregationMethod:"avg",info:'Current system load, i.e. the number of processes using CPU or waiting for system resources (usually CPU and disk). The 3 metrics refer to 1, 5 and 15 minute averages. The system calculates this once every 5 seconds. For more information check this wikipedia article.',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["load1"]},"system.cpu_some_pressure":{aggregationMethod:"avg",mainheads:[{aggregationMethod:"avg",selectedDimensions:["some 10"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Average CPU Pressure (10 sec, some)",colors:s.default[0],layout:{left:1.7,top:5,width:1.7,height:5}}],info:'CPU Pressure Stall Information. Some indicates the share of time in which at least some tasks are stalled on CPU. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',en:{instance:{one:"system",other:"systems"}}},"system.cpu_some_pressure_stall_time":{info:"The amount of time some processes have been waiting for CPU time.",en:{instance:{one:"system",other:"systems"}}},"system.memory_some_pressure":{aggregationMethod:"avg",info:'Memory Pressure Stall Information. Some indicates the share of time in which at least some tasks are stalled on memory. In this state the CPU is still doing productive work. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',en:{instance:{one:"system",other:"systems"}}},"system.memory_some_pressure_stall_time":{info:"The amount of time some processes have been waiting due to memory congestion.",en:{instance:{one:"system",other:"systems"}}},"system.memory_full_pressure":{aggregationMethod:"avg",mainheads:[{aggregationMethod:"avg",selectedDimensions:["full 10"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Average Memory Pressure (10 sec, full)",colors:s.default[0],layout:{left:8.6,top:5,width:1.7,height:5}}],info:'Memory Pressure Stall Information. Full indicates the share of time in which all non-idle tasks are stalled on memory resource simultaneously. In this state actual CPU cycles are going to waste, and a workload that spends extended time in this state is considered to be thrashing. This has severe impact on performance. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',en:{instance:{one:"system",other:"systems"}}},"system.memory_full_pressure_stall_time":{info:"The amount of time all non-idle processes have been stalled due to memory congestion.",en:{instance:{one:"system",other:"systems"}}},"system.io_some_pressure":{aggregationMethod:"avg",info:'I/O Pressure Stall Information. Some indicates the share of time in which at least some tasks are stalled on I/O. In this state the CPU is still doing productive work. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',en:{instance:{one:"system",other:"systems"}}},"system.io_some_pressure_stall_time":{info:"The amount of time some processes have been waiting due to I/O congestion.",en:{instance:{one:"system",other:"systems"}}},"system.io_full_pressure":{aggregationMethod:"avg",mainheads:[{aggregationMethod:"avg",selectedDimensions:["full 10"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Average Disk I/O Pressure (10 sec, full)",colors:s.default[0],layout:{left:0,top:5,width:1.7,height:5}}],info:'I/O Pressure Stall Information. Full line indicates the share of time in which all non-idle tasks are stalled on I/O resource simultaneously. In this state actual CPU cycles are going to waste, and a workload that spends extended time in this state is considered to be thrashing. This has severe impact on performance. The ratios are tracked as recent trends over 10-, 60-, and 300-second windows.',en:{instance:{one:"system",other:"systems"}}},"system.io_full_pressure_stall_time":{info:"The amount of time all non-idle processes have been stalled due to I/O congestion.",en:{instance:{one:"system",other:"systems"}}},"system.io":{info:e=>{let{os:t}=e;var n='Total Disk I/O, for all physical disks. You can get detailed information about each disk at the Disks section and per application Disk usage at the Applications Monitoring section.';return"linux"===t?n+" Physical are all the disks that are listed in /sys/block, but do not exist in /sys/devices/virtual/block.":n},en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["in"],title:"Total Disk Reads",layout:{left:1.7,top:0,width:1.7,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["out"],title:"Total Disk Writes",layout:{left:0,top:0,width:1.7,height:5}}]},"system.pgpgio":{info:"Memory paged from/to disk. This is usually the total disk I/O of the system.",en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["in"],title:"Total Pages read from Disk",hiddenWhen:"system.io",layout:{left:1.6,top:0,width:1.6,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["out"],title:"Total Pages written to Disk",hiddenWhen:"system.io",layout:{left:1.6,top:0,width:1.6,height:5}}]},"system.swapio":{info:"

System swap I/O.

In - pages the system has swapped in from disk to RAM. Out - pages the system has swapped out from RAM to disk.",en:{instance:{one:"system",other:"systems"}}},"system.pgfaults":{info:'Total page faults. Major page faults indicates that the system is using its swap. You can find which applications use the swap at the Applications Monitoring section.',en:{instance:{one:"system",other:"systems"}}},"system.entropy":{aggregationMethod:"min",colors:s.default[5],info:'Entropy, is a pool of random numbers (/dev/random) that is mainly used in cryptography. If the pool of entropy gets empty, processes requiring random numbers may run a lot slower (it depends on the interface each program uses), waiting for the pool to be replenished. Ideally a system with high entropy demands should have a hardware device for that purpose (TPM is one such device). There are also several software-only options you may install, like haveged, although these are generally useful only in servers.',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["entropy"]},"system.clock_sync_state":{info:'

The system clock synchronization state as provided by the ntp_adjtime() system call. An unsynchronized clock may be the result of synchronization issues by the NTP daemon or a hardware clock fault. It can take several minutes (usually up to 17) before NTP daemon selects a server to synchronize with.

State map: 0 - not synchronized, 1 - synchronized.

',en:{instance:{one:"system",other:"systems"}}},"system.clock_status":{info:'

The kernel code can operate in various modes and with various features enabled or disabled, as selected by the ntp_adjtime() system call. The system clock status shows the value of the time_status variable in the kernel. The bits of the variable are used to control these functions and record error conditions as they exist.

UNSYNC - set/cleared by the caller to indicate clock unsynchronized (e.g., when no peers are reachable). This flag is usually controlled by an application program, but the operating system may also set it. CLOCKERR - set/cleared by the external hardware clock driver to indicate hardware fault.

Status map: 0 - bit unset, 1 - bit set.

',en:{instance:{one:"system",other:"systems"}}},"system.clock_sync_offset":{aggregationMethod:"avg",info:'A typical NTP client regularly polls one or more NTP servers. The client must compute its time offset and round-trip delay. Time offset is the difference in absolute time between the two clocks.',en:{instance:{one:"system",other:"systems"}}},"system.forks":{colors:s.default[6],info:"The number of new processes created.",en:{instance:{one:"system",other:"systems"}}},"system.intr":{colors:s.default[1],info:'Total number of CPU interrupts. Check system.interrupts that gives more detail about each interrupt and also the CPUs section where interrupts are analyzed per CPU core.',en:{instance:{one:"system",other:"systems"}}},"system.interrupts":{info:'CPU interrupts in detail. At the CPUs section, interrupts are analyzed per CPU core. The last column in /proc/interrupts provides an interrupt description or the device name that registered the handler for that interrupt.',en:{instance:{one:"system",other:"systems"}}},"system.hardirq_latency":{aggregationMethod:"avg",info:'Total time spent servicing hardware interrupts. Based on the eBPF hardirqs from BCC tools.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.softirqs":{info:'

Total number of software interrupts in the system. At the CPUs section, softirqs are analyzed per CPU core.

HI - high priority tasklets. TIMER - tasklets related to timer interrupts. NET_TX, NET_RX - used for network transmit and receive processing. BLOCK - handles block I/O completion events. IRQ_POLL - used by the IO subsystem to increase performance (a NAPI like approach for block devices). TASKLET - handles regular tasklets. SCHED - used by the scheduler to perform load-balancing and other scheduling tasks. HRTIMER - used for high-resolution timers. RCU - performs read-copy-update (RCU) processing.

',en:{instance:{one:"system",other:"systems"}}},"system.softnet_stat":{en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["processed"]},"system.softirq_latency":{aggregationMethod:"avg",info:'Total time spent servicing software interrupts. Based on the eBPF softirqs from BCC tools.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.processes":{info:"

System processes.

Running - running or ready to run (runnable). Blocked - currently blocked, waiting for I/O to complete.

",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["blocked"]},"system.processes_state":{info:"

The number of processes in different states.

Running - Process using the CPU at a particular moment. Sleeping (uninterruptible) - Process will wake when a waited-upon resource becomes available or after a time-out occurs during that wait. Mostly used by device drivers waiting for disk or network I/O. Sleeping (interruptible) - Process is waiting either for a particular time slot or for a particular event to occur. Zombie - Process that has completed its execution, released the system resources, but its entry is not removed from the process table. Usually occurs in child processes when the parent process still needs to read its child\u2019s exit status. A process that stays a zombie for a long time is generally an error and causes system PID space leak. Stopped - Process is suspended from proceeding further due to STOP or TSTP signals. In this state, a process will not do anything (not even terminate) until it receives a CONT signal.

",en:{instance:{one:"system",other:"systems"}}},"system.active_processes":{info:"The total number of processes in the system.",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["active"]},"system.ctxt":{info:'Context Switches, is the switching of the CPU from one process, task or thread to another. If there are many processes or threads willing to execute and very few CPU cores available to handle them, the system is making more context switching to balance the CPU resources among them. The whole process is computationally intensive. The more the context switches, the slower the system gets.',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["switches"]},"system.idlejitter":{aggregationMethod:"max",info:"Idle jitter is calculated by netdata. A thread is spawned that requests to sleep for a few microseconds. When the system wakes it up, it measures how many microseconds have passed. The difference between the requested and the actual duration of the sleep, is the idle jitter. This number is useful in real-time environments, where CPU jitter can affect the quality of the service (like VoIP media gateways).",en:{instance:{one:"system",other:"systems"}},heatmapType:"default"},"system.net":{info:e=>{let{os:t}=e;var n="Total bandwidth of all physical network interfaces. This does not include lo, VPNs, network bridges, IFB devices, bond interfaces, etc. Only the bandwidth of physical network interfaces is aggregated.";return"linux"===t?n+" Physical are all the network interfaces that are listed in /proc/net/dev, but do not exist in /sys/devices/virtual/net.":n},en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Network Inbound",layout:{left:8.6,top:0,width:1.7,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Network Outbound",layout:{left:10.3,top:0,width:1.7,height:5}}]},"system.ip":{info:"Total IP traffic in the system.",en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total IP Traffic In",hiddenWhen:"system.net",layout:{left:7.2,top:0,width:1.6,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total IP Traffic Out",hiddenWhen:"system.net",layout:{left:8.8,top:0,width:1.6,height:5}}]},"system.ipv4":{info:"Total IPv4 Traffic.",en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total IPv4 Traffic In",hiddenWhen:["system.net","system.ip"],layout:{left:7.2,top:0,width:1.6,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total IPv4 Traffic Out",hiddenWhen:["system.net","system.ip"],layout:{left:8.8,top:0,width:1.6,height:5}}]},"system.ipv6":{info:"Total IPv6 Traffic.",en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total IPv6 Traffic In",hiddenWhen:["system.net","system.ip","system.ipv4"],layout:{left:7.2,top:0,width:1.6,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total IPv6 Traffic Out",hiddenWhen:["system.net","system.ip","system.ipv4"],layout:{left:8.8,top:0,width:1.6,height:5}}]},"system.ram":{info:"System Random Access Memory (i.e. physical memory) usage.",en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",selectedDimensions:["used","buffers","active","wired"],colors:s.default[10],title:"Average Used RAM per Node",valueRange:[0,100],layout:{left:6,top:0,width:2.6,height:5}},{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["node"],urlOptions:["percentage"],selectedDimensions:["used","buffers","active","wired"],valueRange:[0,100],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top Nodes by Used RAM",layout:{left:6,top:5,width:2.6,height:5}}]},"system.swap":{info:"System swap memory usage. Swap space is used when the amount of physical memory (RAM) is full. When the system needs more memory resources and the RAM is full, inactive pages in memory are moved to the swap space (usually a disk, a disk partition or a file).",en:{instance:{one:"system",other:"systems"}}},"system.swapcalls":{info:'Number of calls to functions used to manipulate swap data. Netdata shows swap metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.ipc_semaphores":{info:"Number of allocated System V IPC semaphores. The system-wide limit on the number of semaphores in all semaphore sets is specified in /proc/sys/kernel/sem file (2nd field).",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["semaphores"]},"system.ipc_semaphore_arrays":{info:"Number of used System V IPC semaphore arrays (sets). Semaphores support semaphore sets where each one is a counting semaphore. So when an application requests semaphores, the kernel releases them in sets. The system-wide limit on the maximum number of semaphore sets is specified in /proc/sys/kernel/sem file (4th field).",en:{instance:{one:"system",other:"systems"}}},"system.shared_memory_segments":{info:"Number of allocated System V IPC memory segments. The system-wide maximum number of shared memory segments that can be created is specified in /proc/sys/kernel/shmmni file.",en:{instance:{one:"system",other:"systems"}}},"system.shared_memory_bytes":{info:"Amount of memory currently used by System V IPC memory segments. The run-time limit on the maximum shared memory segment size that can be created is specified in /proc/sys/kernel/shmmax file.",en:{instance:{one:"system",other:"systems"}}},"system.shared_memory_calls":{info:'Number of calls to syscalls responsible to manipulate shared memories. Netdata shows shared memory metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.message_queue_messages":{info:"Number of messages that are currently present in System V IPC message queues.",en:{instance:{one:"system",other:"systems"}}},"system.message_queue_bytes":{info:"Amount of memory currently used by messages in System V IPC message queues.",en:{instance:{one:"system",other:"systems"}}},"system.uptime":{aggregationMethod:"min",info:"The amount of time the system has been running, including time spent in suspend.",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["uptime"]},"system.process_thread":{title:"Task creation",info:'Number of times a function that starts a process or thread is called. Netdata shows process metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.exit":{title:"Exit monitoring",info:'Number of times a function responsible to close a process or thread is called. Netdata shows process metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.task_error":{title:"Task error",info:'Number of times a function that starts a process or thread failed. Netdata shows process metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"system.process_status":{title:"Task status",info:'Difference between the number of calls to functions that close a task and release a task.'+f,en:{instance:{one:"system",other:"systems"}}},"cpu.cpu":{aggregationMethod:"avg",valueRange:[0,100],en:{instance:{one:"cpu core",other:"cpu cores"}},mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average CPU Core Utilization",valueRange:[0,100],layout:{left:0,top:5,width:3,height:5}},{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top CPU Core Utilisation Stats",layout:{left:0,top:0,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top CPU Cores by Utilisation",layout:{left:0,top:10,width:3,height:5}}]},"cpu.interrupts":{en:{instance:{one:"cpu core",other:"cpu cores"}},mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average CPU Core Interrupts",layout:{left:3,top:5,width:3,height:5}},{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",title:"Top CPU Core Interrupt Types",layout:{left:3,top:0,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top CPU Cores by Interrupts",layout:{left:3,top:10,width:3,height:5}}]},"cpu.softirqs":{en:{instance:{one:"cpu core",other:"cpu cores"}},mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average CPU Core Softirqs",layout:{left:6,top:5,width:3,height:5}},{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top CPU Core Softirq Types",layout:{left:6,top:0,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top CPU Cores by Softirqs",layout:{left:6,top:10,width:3,height:5}}]},"cpu.softnet_stat":{en:{instance:{one:"cpu core",other:"cpu cores"}},dimensionsOnNonDimensionGrouping:["processed"],mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average CPU Core Softnets",layout:{left:9,top:5,width:3,height:5}},{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",title:"Top CPU Core Softnet Stats",layout:{left:9,top:0,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top CPU Cores by Softnets",layout:{left:9,top:10,width:3,height:5}}]},"cpu.core_throttling":{en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Max CPU Core Throttling",layout:{left:0,top:5,width:3,height:5}}],info:"The number of adjustments made to the clock speed of the CPU based on it's core temperature."},"cpu.package_throttling":{info:"The number of adjustments made to the clock speed of the CPU based on it's package (chip) temperature.",en:{instance:{one:"system",other:"systems"}}},"cpufreq.cpufreq":{info:"The frequency measures the number of cycles your CPU executes per second.",en:{instance:{one:"cpu core",other:"cpu cores"}}},"cpuidle.cpuidle":{info:"The percentage of time spent in C-states.",en:{instance:{one:"cpu core",other:"cpu cores"}}},"cpuidle.cpu_cstate_residency_time":{aggregationMethod:"avg",en:{instance:{one:"cpu core",other:"cpu cores"}}},"mem.ksm":{info:"

Memory pages merging statistics. A high ratio of Sharing to Shared indicates good sharing, but a high ratio of Unshared to Sharing indicates wasted effort.

Shared - used shared pages. Unshared - memory no longer shared (pages are unique but repeatedly checked for merging). Sharing - memory currently shared (how many more sites are sharing the pages, i.e. how much saved). Volatile - volatile pages (changing too fast to be placed in a tree).

",en:{instance:{one:"system",other:"systems"}}},"mem.ksm_savings":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Saved",selectedDimensions:["savings"],colors:s.default[0],layout:{left:0,top:5,width:3,height:5}}],info:"

The amount of memory saved by KSM.

Savings - saved memory. Offered - memory marked as mergeable.

",en:{instance:{one:"system",other:"systems"}}},"mem.ksm_ratios":{aggregationMethod:"avg",heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Savings",colors:s.default[0],valueRange:[0,100],layout:{left:3,top:5,width:3,height:5}}],info:"The effectiveness of KSM. This is the percentage of the mergeable pages that are currently merged.",en:{instance:{one:"system",other:"systems"}}},"mem.zram_usage":{info:"ZRAM total RAM usage metrics. ZRAM uses some memory to store metadata about stored memory pages, thus introducing an overhead which is proportional to disk size. It excludes same-element-filled-pages since no memory is allocated for them.",en:{instance:{one:"system",other:"systems"}}},"mem.zram_savings":{info:"Displays original and compressed memory data sizes.",en:{instance:{one:"system",other:"systems"}}},"mem.zram_ratio":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Compression Ratio",selectedDimensions:["ratio"],colors:s.default[0],valueRange:[0,100],layout:{left:6,top:5,width:3,height:5}}],info:"Compression ratio, calculated as 100 * original_size / compressed_size. More means better compression and more RAM savings.",en:{instance:{one:"system",other:"systems"}}},"mem.zram_efficiency":{aggregationMethod:"avg",heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Efficiency",selectedDimensions:["percent"],colors:s.default[0],layout:{left:9,top:5,width:3,height:5}}],valueRange:[0,100],info:"Memory usage efficiency, calculated as 100 * compressed_size / total_mem_used.",en:{instance:{one:"system",other:"systems"}}},"mem.pgfaults":{family:"page faults",info:'

A page fault is a type of interrupt, called trap, raised by computer hardware when a running program accesses a memory page that is mapped into the virtual address space, but not actually loaded into main memory.

Minor - the page is loaded in memory at the time the fault is generated, but is not marked in the memory management unit as being loaded in memory. Major - generated when the system needs to load the memory page from disk or swap memory.

',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["major"]},"mem.directmaps":{family:"overview"},"mem.committed":{family:"overview",colors:s.default[3],info:"Committed Memory, is the sum of all memory which has been allocated by processes.",en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Committed Memory",layout:{left:3,top:0,width:3,height:5},colors:s.default[2]},{groupBy:["node"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top Nodes by Committed Memory",layout:{left:3,top:5,width:3,height:5}}]},"mem.real":{colors:s.default[3],info:"Total amount of real (physical) memory used.",en:{instance:{one:"system",other:"systems"}}},"mem.oom_kill":{family:"OOM kills",info:'The number of processes killed by Out of Memory Killer. The kernel\'s OOM killer is summoned when the system runs short of free memory and is unable to proceed without killing one or more processes. It tries to pick the process whose demise will free the most memory while causing the least misery for users of the system. This counter also includes processes within containers that have exceeded the memory limit.',en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Out of Memory Kills",colors:s.default[1],layout:{left:9,top:5,width:3,height:5}}]},"mem.numa":{info:"

NUMA balancing statistics.

Local - pages successfully allocated on this node, by a process on this node. Foreign - pages initially intended for this node that were allocated to another node instead. Interleave - interleave policy pages successfully allocated to this node. Other - pages allocated on this node, by a process on another node. PteUpdates - base pages that were marked for NUMA hinting faults. HugePteUpdates - transparent huge pages that were marked for NUMA hinting faults. In Combination with pte_updates the total address space that was marked can be calculated. HintFaults - NUMA hinting faults that were trapped. HintFaultsLocal - hinting faults that were to local nodes. In combination with HintFaults, the percentage of local versus remote faults can be calculated. A high percentage of local hinting faults indicates that the workload is closer to being converged. PagesMigrated - pages were migrated because they were misplaced. As migration is a copying operation, it contributes the largest part of the overhead created by NUMA balancing.

",en:{instance:{one:"system",other:"systems"}}},"mem.numa_nodes":{en:{instance:{one:"system",other:"systems"}}},"mem.available":{family:"overview",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"easypiechart",title:"Total Available Memory",layout:{left:0,top:0,width:3,height:5}},{groupBy:["node"],dimensionsSort:"valueAsc",chartLibrary:"bars",title:"Top Nodes by Least Available Memory",layout:{left:0,top:5,width:3,height:5}}],info:e=>{let{os:t}=e;return"freebsd"===t?"The amount of memory that can be used by user-space processes without causing swapping. Calculated as the sum of free, cached, and inactive memory.":"Available Memory is estimated by the kernel, as the amount of RAM that can be used by userspace processes, without causing swapping."},en:{instance:{one:"system",other:"systems"}}},"mem.writeback":{family:"writeback",info:"Dirty is the amount of memory waiting to be written to disk. Writeback is how much memory is actively being written to disk.",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["Dirty"]},"mem.kernel":{info:"

The total amount of memory being used by the kernel.

Slab - used by the kernel to cache data structures for its own use. KernelStack - allocated for each task done by the kernel. PageTables - dedicated to the lowest level of page tables (A page table is used to turn a virtual address into a physical memory address). VmallocUsed - being used as virtual address space. Percpu - allocated to the per-CPU allocator used to back per-CPU allocations (excludes the cost of metadata). When you create a per-CPU variable, each processor on the system gets its own copy of that variable.

",en:{instance:{one:"system",other:"systems"}}},"mem.slab":{info:'

Slab memory statistics.

Reclaimable - amount of memory which the kernel can reuse. Unreclaimable - can not be reused even when the kernel is lacking memory.

',en:{instance:{one:"system",other:"systems"}}},"mem.hugepages":{info:"Dedicated (or Direct) HugePages is memory reserved for applications configured to utilize huge pages. Hugepages are used memory, even if there are free hugepages available.",en:{instance:{one:"system",other:"systems"}}},"mem.transparent_hugepages":{info:"Transparent HugePages (THP) is backing virtual memory with huge pages, supporting automatic promotion and demotion of page sizes. It works for all applications for anonymous memory mappings and tmpfs/shmem.",en:{instance:{one:"system",other:"systems"}}},"mem.hwcorrupt":{info:'The amount of memory with physical corruption problems, identified by ECC and set aside by the kernel so it does not get used.',en:{instance:{one:"system",other:"systems"}}},"mem.edac_mc":{info:"The number of correctable (single-bit) ECC errors. These errors do not affect the normal operation of the system because they are still being corrected. Periodic correctable errors may indicate that one of the memory modules is slowly failing.",en:{instance:{one:"mem controller",other:"mem controllers"}}},"mem.edac_mc_errors":{info:"The number of correctable (single-bit) ECC errors. These errors do not affect the normal operation of the system because they are still being corrected. Periodic correctable errors may indicate that one of the memory modules is slowly failing.",en:{instance:{one:"mem controller",other:"mem controllers"}}},"mem.edac_mc_dimm":{info:"The number of uncorrectable (multi-bit) ECC errors. An uncorrectable error is a fatal issue that will typically lead to an OS crash.",en:{instance:{one:"mem module",other:"mem modules"}}},"mem.edac_mc_dimm_errors":{info:"The number of uncorrectable (multi-bit) ECC errors. An uncorrectable error is a fatal issue that will typically lead to an OS crash.",en:{instance:{one:"mem module",other:"mem modules"}}},"mem.pagetype_global":{info:"The amount of memory available in blocks of certain size.",en:{instance:{one:"system",other:"systems"}}},"mem.cachestat_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Page Cache Hit Ratio",colors:s.default[0],valueRange:[0,100],layout:{left:6,top:0,width:3,height:5}},{groupBy:["node"],chartLibrary:"bars",dimensionsSort:"valueAsc",title:"Top Nodes by Least Cache Hit Ratio",layout:{left:6,top:5,width:3,height:5}}],info:'The ratio shows the percentage of data accessed directly in memory. Netdata shows the ratio per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f,en:{instance:{one:"system",other:"systems"}}},"mem.cachestat_dirties":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Dirty Pages",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],info:'Number of modified pages in Linux page cache. Netdata shows the dity page application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"mem.cachestat_hits":{aggregationMethod:"avg",info:'Number of access to data in Linux page cache. Netdata shows the hits per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"mem.cachestat_misses":{aggregationMethod:"avg",info:'Number of access to data that was not present in Linux page cache. Netdata shows the missed access per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"mem.sync":{info:'Number of calls to syscalls that sync filesystem metadata or cached. This chart has a relationship with File systems and Linux Page Cache.'+f,en:{instance:{one:"system",other:"systems"}}},"mem.file_sync":{info:'Number of calls to syscalls responsible to transfer modified Linux page cache to disk. This chart has a relationship with File systems and Linux Page Cache.'+f,en:{instance:{one:"system",other:"systems"}}},"mem.memory_map":{info:'Number of calls to syscall responsible to the in-core copy of a file that was mapped. This chart has a relationship with File systems and Linux Page Cache.'+f,en:{instance:{one:"system",other:"systems"}}},"mem.file_segment":{info:'Number of calls to syscall responsible to sync file segments. This chart has a relationship with File systems and Linux Page Cache.'+f,en:{instance:{one:"system",other:"systems"}}},"filesystem.dc_hit_ratio":{aggregationMethod:"avg",info:'Percentage of file accesses that were present in the directory cache. Netdata shows directory cache metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"filesystem.dc_reference":{info:'Counters of file accesses. Reference is when there is a file access and the file is not present in the directory cache. Miss is when there is file access and the file is not found in the filesystem. Slow is when there is a file access and the file is present in the filesystem but not in the directory cache. Netdata shows directory cache metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"md.health":{family:"health",info:"Number of failed devices per MD array. Netdata retrieves this data from the [n/m] field of the md status line. It means that ideally the array would have n devices however, currently, m devices are in use. failed disks is n-m.",en:{instance:{one:"MD array",other:"MD arrays"}}},"md.disks":{family:"health",info:"Number of devices in use and in the down state. Netdata retrieves this data from the [n/m] field of the md status line. It means that ideally the array would have n devices however, currently, m devices are in use. inuse is m, down is n-m.",en:{instance:{one:"MD array",other:"MD arrays"}}},"md.status":{family:"activity",info:"Completion progress of the ongoing operation.",en:{instance:{one:"MD array",other:"MD arrays"}}},"md.expected_time_until_operation_finish":{family:"activity",info:"Estimated time to complete the ongoing operation. The time is only an approximation since the operation speed will vary according to other I/O demands.",en:{instance:{one:"MD array",other:"MD arrays"}}},"md.operation_speed":{family:"activity",info:"Speed of the ongoing operation. The system-wide rebuild speed limits are specified in /proc/sys/dev/raid/{speed_limit_min,speed_limit_max} files. These options are good for tweaking rebuilt process and may increase overall system load, cpu and memory usage.",en:{instance:{one:"MD array",other:"MD arrays"}}},"md.mismatch_cnt":{family:"errors",info:'When performing check and repair, and possibly when performing resync, md will count the number of errors that are found. A count of mismatches is recorded in the sysfs file md/mismatch_cnt. This value is the number of sectors that were re-written, or (for check) would have been re-written. It may be larger than the number of actual errors by a factor of the number of sectors in a page. Mismatches can not be interpreted very reliably on RAID1 or RAID10, especially when the device is used for swap. On a truly clean RAID5 or RAID6 array, any mismatches should indicate a hardware problem at some level - software issues should never cause such a mismatch. For details, see md(4).',en:{instance:{one:"MD array",other:"MD arrays"}}},"md.flush":{family:"flushes",info:'Number of flush counts per MD array. Based on the eBPF mdflush from BCC tools.',en:{instance:{one:"MD array",other:"MD arrays"}}},"ip.inerrors":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IP Inbound Errors",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"

The number of errors encountered during the reception of IP packets.

NoRoutes - packets that were dropped because there was no route to send them. Truncated - packets which is being discarded because the datagram frame didn't carry enough data. Checksum - packets that were dropped because they had wrong checksum.

",en:{instance:{one:"system",other:"systems"}}},"ip.mcast":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Multicast Traffic Received",layout:{left:9,top:5,width:3,height:5},colors:s.default[2]},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Multicast Traffic Sent",layout:{left:6,top:5,width:3,height:5},colors:s.default[1]}],info:"Total multicast traffic in the system.",en:{instance:{one:"system",other:"systems"}}},"ip.mcastpkts":{info:"Total transferred multicast packets in the system.",en:{instance:{one:"system",other:"systems"}}},"ip.bcast":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Broadcast Traffic Received",layout:{left:3,top:5,width:3,height:5},colors:s.default[2]},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Broadcast Traffic Sent",layout:{left:0,top:5,width:3,height:5},colors:s.default[1]}],info:"Total broadcast traffic in the system.",en:{instance:{one:"system",other:"systems"}}},"ip.bcastpkts":{info:"Total transferred broadcast packets in the system.",en:{instance:{one:"system",other:"systems"}}},"ip.ecnpkts":{info:"

Total number of received IP packets with ECN bits set in the system.

CEP - congestion encountered. NoECTP - non ECN-capable transport. ECTP0 and ECTP1 - ECN capable transport.

",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["NoECTP"]},"ip.inbound_conn":{info:'Number of calls to functions responsible for receiving connections.'+f,en:{instance:{one:"system",other:"systems"}}},"ip.tcp_outbound_conn":{info:'Number of calls to TCP functions responsible for starting connections. Netdata shows TCP outbound connections metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.tcp_functions":{info:'Number of calls to TCP functions responsible for exchanging data. Netdata shows TCP outbound connections metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.total_tcp_bandwidth":{heads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total TCP Bandwidth",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:'Total bytes sent and received with TCP internal functions. Netdata shows TCP bandwidth metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.tcp_error":{heads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"TCP Errors",colors:s.default[2],layout:{left:3,top:0,width:3,height:5}}],info:'Number of failed calls to TCP functions responsible for TCP bandwidth. Netdata shows TCP error per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.tcp_retransmit":{heads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"TCP Retransmits",colors:s.default[3],layout:{left:6,top:0,width:3,height:5}}],info:'Number of times a TCP packet was retransmitted. Netdata shows TCP retransmit per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.udp_functions":{info:'Number of calls to UDP functions responsible for exchanging data. Netdata shows TCP outbound connections metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.total_udp_bandwidth":{heads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total UDP Bandwidth",colors:s.default[4],layout:{left:9,top:0,width:3,height:5}}],info:'Total bytes sent and received with UDP internal functions. Netdata shows UDP bandwidth metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.udp_error":{info:'Number of failed calls to UDP functions responsible for UDP bandwidth. Netdata shows UDP error per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+'
',en:{instance:{one:"system",other:"systems"}}},"ip.tcpreorders":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"TCP Reorders",layout:{left:9,top:0,width:3,height:5}}],info:"

TCP prevents out-of-order packets by either sequencing them in the correct order or by requesting the retransmission of out-of-order packets.

Timestamp - detected re-ordering using the timestamp option. SACK - detected re-ordering using Selective Acknowledgment algorithm. FACK - detected re-ordering using Forward Acknowledgment algorithm. Reno - detected re-ordering using Fast Retransmit algorithm.

",en:{instance:{one:"system",other:"systems"}}},"ip.tcpofo":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"TCP Out-Of-Order Queue",layout:{left:6,top:0,width:3,height:5}}],info:"

TCP maintains an out-of-order queue to keep the out-of-order packets in the TCP communication.

InQueue - the TCP layer receives an out-of-order packet and has enough memory to queue it. Dropped - the TCP layer receives an out-of-order packet but does not have enough memory, so drops it. Merged - the received out-of-order packet has an overlay with the previous packet. The overlay part will be dropped. All these packets will also be counted into InQueue. Pruned - packets dropped from out-of-order queue because of socket buffer overrun.

",en:{instance:{one:"system",other:"systems"}}},"ip.tcpsyncookies":{info:'

SYN cookies are used to mitigate SYN flood.

Received - after sending a SYN cookie, it came back to us and passed the check. Sent - an application was not able to accept a connection fast enough, so the kernel could not store an entry in the queue for this connection. Instead of dropping it, it sent a SYN cookie to the client. Failed - the MSS decoded from the SYN cookie is invalid. When this counter is incremented, the received packet won\u2019t be treated as a SYN cookie.

',en:{instance:{one:"system",other:"systems"}}},"ip.tcpmemorypressures":{info:"The number of times a socket was put in memory pressure due to a non fatal memory allocation failure (the kernel attempts to work around this situation by reducing the send buffers, etc).",en:{instance:{one:"system",other:"systems"}}},"ip.tcpconnaborts":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"TCP Connection Aborts",layout:{left:3,top:0,width:3,height:5}}],info:"

TCP connection aborts.

BadData - happens while the connection is on FIN_WAIT1 and the kernel receives a packet with a sequence number beyond the last one for this connection - the kernel responds with RST (closes the connection). UserClosed - happens when the kernel receives data on an already closed connection and responds with RST. NoMemory - happens when there are too many orphaned sockets (not attached to an fd) and the kernel has to drop a connection - sometimes it will send an RST, sometimes it won't. Timeout - happens when a connection times out. Linger - happens when the kernel killed a socket that was already closed by the application and lingered around for long enough. Failed - happens when the kernel attempted to send an RST but failed because there was no memory available.

",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["timeouts"]},"ip.tcp_syn_queue":{info:"

The SYN queue of the kernel tracks TCP handshakes until connections get fully established. It overflows when too many incoming TCP connection requests hang in the half-open state and the server is not configured to fall back to SYN cookies. Overflows are usually caused by SYN flood DoS attacks.

Drops - number of connections dropped because the SYN queue was full and SYN cookies were disabled. Cookies - number of SYN cookies sent because the SYN queue was full.

",en:{instance:{one:"system",other:"systems"}}},"ip.tcp_accept_queue":{info:"

The accept queue of the kernel holds the fully established TCP connections, waiting to be handled by the listening application.

Overflows - the number of established connections that could not be handled because the receive queue of the listening application was full. Drops - number of incoming connections that could not be handled, including SYN floods, overflows, out of memory, security issues, no route to destination, reception of related ICMP messages, socket is broadcast or multicast.

",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["overflows"]},"ipv4.packets":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"easypiechart",title:"Total IPv4 Packets",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv4 Packets",layout:{left:0,top:5,width:3,height:5}}],info:'

IPv4 packets statistics for this host.

Received - packets received by the IP layer. This counter will be increased even if the packet is dropped later. Sent - packets sent via IP layer, for both single cast and multicast packets. This counter does not include any packets counted in Forwarded. Forwarded - input packets for which this host was not their final IP destination, as a result of which an attempt was made to find a route to forward them to that final destination. In hosts which do not act as IP Gateways, this counter will include only those packets which were Source-Routed and the Source-Route option processing was successful. Delivered - packets delivered to the upper layer protocols, e.g. TCP, UDP, ICMP, and so on.

',en:{instance:{one:"system",other:"systems"}}},"ipv4.fragsout":{info:'

IPv4 fragmentation statistics for this system.

OK - packets that have been successfully fragmented. Failed - packets that have been discarded because they needed to be fragmented but could not be, e.g. due to Don\'t Fragment (DF) flag was set. Created - fragments that have been generated as a result of fragmentation.

',en:{instance:{one:"system",other:"systems"}}},"ipv4.fragsin":{info:'

IPv4 reassembly statistics for this system.

OK - packets that have been successfully reassembled. Failed - failures detected by the IP reassembly algorithm. This is not necessarily a count of discarded IP fragments since some algorithms can lose track of the number of fragments by combining them as they are received. All - received IP fragments which needed to be reassembled.

',en:{instance:{one:"system",other:"systems"}}},"ipv4.errors":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total IPv4 Errors",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv4 Errors",layout:{left:3,top:5,width:3,height:5}}],info:"

The number of discarded IPv4 packets.

InDiscards, OutDiscards - inbound and outbound packets which were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. InHdrErrors - input packets that have been discarded due to errors in their IP headers, including bad checksums, version number mismatch, other format errors, time-to-live exceeded, errors discovered in processing their IP options, etc. OutNoRoutes - packets that have been discarded because no route could be found to transmit them to their destination. This includes any packets which a host cannot route because all of its default gateways are down. InAddrErrors - input packets that have been discarded due to invalid IP address or the destination IP address is not a local address and IP forwarding is not enabled. InUnknownProtos - input packets which were discarded because of an unknown or unsupported protocol.

",en:{instance:{one:"system",other:"systems"}}},"ipv4.icmp":{aggregationMethod:"sum",info:"

The number of transferred IPv4 ICMP messages.

Received, Sent - ICMP messages which the host received and attempted to send. Both these counters include errors.

",en:{instance:{one:"system",other:"systems"}}},"ipv4.icmp_errors":{info:"

The number of IPv4 ICMP errors.

InErrors - received ICMP messages but determined as having ICMP-specific errors, e.g. bad ICMP checksums, bad length, etc. OutErrors - ICMP messages which this host did not send due to problems discovered within ICMP such as a lack of buffers. This counter does not include errors discovered outside the ICMP layer such as the inability of IP to route the resultant datagram. InCsumErrors - received ICMP messages with bad checksum.

",en:{instance:{one:"system",other:"systems"}}},"ipv4.icmpmsg":{info:'The number of transferred IPv4 ICMP control messages.',en:{instance:{one:"system",other:"systems"}}},"ipv4.udppackets":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total IPv4 UDP Packets",colors:s.default[4],layout:{left:9,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv4 UDP Packets",layout:{left:9,top:5,width:3,height:5}}],info:"The number of transferred UDP packets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.udperrors":{info:"

The number of errors encountered during transferring UDP packets.

RcvbufErrors - receive buffer is full. SndbufErrors - send buffer is full, no kernel memory available, or the IP layer reported an error when trying to send the packet and no error queue has been setup. InErrors - that is an aggregated counter for all errors, excluding NoPorts. NoPorts - no application is listening at the destination port. InCsumErrors - a UDP checksum failure is detected. IgnoredMulti - ignored multicast packets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.udplite":{info:"The number of transferred UDP-Lite packets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.udplite_errors":{info:"

The number of errors encountered during transferring UDP-Lite packets.

RcvbufErrors - receive buffer is full. SndbufErrors - send buffer is full, no kernel memory available, or the IP layer reported an error when trying to send the packet and no error queue has been setup. InErrors - that is an aggregated counter for all errors, excluding NoPorts. NoPorts - no application is listening at the destination port. InCsumErrors - a UDP checksum failure is detected. IgnoredMulti - ignored multicast packets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.tcppackets":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total IPv4 TCP Packets",colors:s.default[3],layout:{left:6,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv4 TCP Packets",layout:{left:6,top:5,width:3,height:5}}],info:"

The number of packets transferred by the TCP layer.

Received - received packets, including those received in error, such as checksum error, invalid TCP header, and so on. Sent - sent packets, excluding the retransmitted packets. But it includes the SYN, ACK, and RST packets.

",en:{instance:{one:"system",other:"systems"}}},"ipv4.tcpsock":{info:"The number of TCP connections for which the current state is either ESTABLISHED or CLOSE-WAIT. This is a snapshot of the established connections at the time of measurement (i.e. a connection established and a connection disconnected within the same iteration will not affect this metric).",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["connections"]},"ipv4.tcpopens":{info:"

TCP connection statistics.

Active - number of outgoing TCP connections attempted by this host. Passive - number of incoming TCP connections accepted by this host.

",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["active"]},"ipv4.tcperrors":{info:"

TCP errors.

InErrs - TCP segments received in error (including header too small, checksum errors, sequence errors, bad packets - for both IPv4 and IPv6). InCsumErrors - TCP segments received with checksum errors (for both IPv4 and IPv6). RetransSegs - TCP segments retransmitted.

",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["all"]},"ipv4.tcphandshake":{info:"

TCP handshake statistics.

EstabResets - established connections resets (i.e. connections that made a direct transition from ESTABLISHED or CLOSE_WAIT to CLOSED). OutRsts - TCP segments sent, with the RST flag set (for both IPv4 and IPv6). AttemptFails - number of times TCP connections made a direct transition from either SYN_SENT or SYN_RECV to CLOSED, plus the number of times TCP connections made a direct transition from the SYN_RECV to LISTEN. SynRetrans - shows retries for new outbound TCP connections, which can indicate general connectivity issues or backlog on the remote host.

",en:{instance:{one:"system",other:"systems"}}},"ipv4.sockstat_sockets":{info:'The total number of used sockets for all address families in this system.',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["used"]},"ipv4.sockstat_tcp_sockets":{info:'

The number of TCP sockets in the system in certain states.

Alloc - in any TCP state. Orphan - no longer attached to a socket descriptor in any user processes, but for which the kernel is still required to maintain state in order to complete the transport protocol. InUse - in any TCP state, excluding TIME-WAIT and CLOSED. TimeWait - in the TIME-WAIT state.

',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["alloc"]},"ipv4.sockstat_tcp_mem":{info:"The amount of memory used by allocated TCP sockets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.sockstat_udp_sockets":{info:"The number of used UDP sockets.",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["inuse"]},"ipv4.sockstat_udp_mem":{info:"The amount of memory used by allocated UDP sockets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.sockstat_udplite_sockets":{info:"The number of used UDP-Lite sockets.",en:{instance:{one:"system",other:"systems"}}},"ipv4.sockstat_raw_sockets":{info:'The number of used raw sockets.',en:{instance:{one:"system",other:"systems"}}},"ipv4.sockstat_frag_sockets":{info:"The number of entries in hash tables that are used for packet reassembly.",en:{instance:{one:"system",other:"systems"}}},"ipv4.sockstat_frag_mem":{info:"The amount of memory used for packet reassembly.",en:{instance:{one:"system",other:"systems"}}},"ipv6.packets":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"easypiechart",title:"Total IPv6 Packets",colors:s.default[3],layout:{left:0,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv6 Packets",layout:{left:0,top:5,width:3,height:5}}],info:'

IPv6 packet statistics for this host.

Received - packets received by the IP layer. This counter will be increased even if the packet is dropped later. Sent - packets sent via IP layer, for both single cast and multicast packets. This counter does not include any packets counted in Forwarded. Forwarded - input packets for which this host was not their final IP destination, as a result of which an attempt was made to find a route to forward them to that final destination. In hosts which do not act as IP Gateways, this counter will include only those packets which were Source-Routed and the Source-Route option processing was successful. Delivers - packets delivered to the upper layer protocols, e.g. TCP, UDP, ICMP, and so on.

',en:{instance:{one:"system",other:"systems"}}},"ipv6.fragsout":{info:'

IPv6 fragmentation statistics for this system.

OK - packets that have been successfully fragmented. Failed - packets that have been discarded because they needed to be fragmented but could not be, e.g. due to Don\'t Fragment (DF) flag was set. All - fragments that have been generated as a result of fragmentation.

',en:{instance:{one:"system",other:"systems"}}},"ipv6.fragsin":{info:'

IPv6 reassembly statistics for this system.

OK - packets that have been successfully reassembled. Failed - failures detected by the IP reassembly algorithm. This is not necessarily a count of discarded IP fragments since some algorithms can lose track of the number of fragments by combining them as they are received. Timeout - reassembly timeouts detected. All - received IP fragments which needed to be reassembled.

',en:{instance:{one:"system",other:"systems"}}},"ipv6.errors":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total IPv6 Errors",colors:s.default[3],layout:{left:3,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv6 Errors",layout:{left:3,top:5,width:3,height:5}}],info:"

The number of discarded IPv6 packets.

InDiscards, OutDiscards - packets which were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. InHdrErrors - errors in IP headers, including bad checksums, version number mismatch, other format errors, time-to-live exceeded, etc. InAddrErrors - invalid IP address or the destination IP address is not a local address and IP forwarding is not enabled. InUnknownProtos - unknown or unsupported protocol. InTooBigErrors - the size exceeded the link MTU. InTruncatedPkts - packet frame did not carry enough data. InNoRoutes - no route could be found while forwarding. OutNoRoutes - no route could be found for packets generated by this host.

",en:{instance:{one:"system",other:"systems"}}},"ipv6.udppackets":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total IPv6 UDP Packets",colors:s.default[3],layout:{left:6,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv6 UDP Packets",layout:{left:6,top:5,width:3,height:5}}],info:"The number of transferred UDP packets.",en:{instance:{one:"system",other:"systems"}}},"ipv6.udperrors":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total IPv6 UDP Errors",colors:s.default[3],layout:{left:9,top:0,width:3,height:5}},{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"IPv6 UDP Errors",layout:{left:9,top:5,width:3,height:5}}],info:"

The number of errors encountered during transferring UDP packets.

RcvbufErrors - receive buffer is full. SndbufErrors - send buffer is full, no kernel memory available, or the IP layer reported an error when trying to send the packet and no error queue has been setup. InErrors - that is an aggregated counter for all errors, excluding NoPorts. NoPorts - no application is listening at the destination port. InCsumErrors - a UDP checksum failure is detected. IgnoredMulti - ignored multicast packets.",en:{instance:{one:"system",other:"systems"}}},"ipv6.udplitepackets":{info:"The number of transferred UDP-Lite packets.",en:{instance:{one:"system",other:"systems"}}},"ipv6.udpliteerrors":{info:"

The number of errors encountered during transferring UDP-Lite packets.

RcvbufErrors - receive buffer is full. SndbufErrors - send buffer is full, no kernel memory available, or the IP layer reported an error when trying to send the packet and no error queue has been setup. InErrors - that is an aggregated counter for all errors, excluding NoPorts. NoPorts - no application is listening at the destination port. InCsumErrors - a UDP checksum failure is detected.

",en:{instance:{one:"system",other:"systems"}}},"ipv6.mcast":{info:"Total IPv6 multicast traffic.",en:{instance:{one:"system",other:"systems"}}},"ipv6.bcast":{info:"Total IPv6 broadcast traffic.",en:{instance:{one:"system",other:"systems"}}},"ipv6.mcastpkts":{info:"Total transferred IPv6 multicast packets.",en:{instance:{one:"system",other:"systems"}}},"ipv6.icmp":{aggregationMethod:"sum",info:"

The number of transferred ICMPv6 messages.

Received, Sent - ICMP messages which the host received and attempted to send. Both these counters include errors.

",en:{instance:{one:"system",other:"systems"}}},"ipv6.icmpredir":{info:"The number of transferred ICMPv6 Redirect messages. These messages inform a host to update its routing information (to send packets on an alternative route).",en:{instance:{one:"system",other:"systems"}}},"ipv6.icmpechos":{info:"The number of ICMPv6 Echo messages.",en:{instance:{one:"system",other:"systems"}}},"ipv6.icmperrors":{info:'

The number of ICMPv6 errors and error messages.

InErrors, OutErrors - bad ICMP messages (bad ICMP checksums, bad length, etc.). InCsumErrors - wrong checksum.

',en:{instance:{one:"system",other:"systems"}}},"ipv6.groupmemb":{info:"

The number of transferred ICMPv6 Group Membership messages.

Multicast routers send Group Membership Query messages to learn which groups have members on each of their attached physical networks. Host computers respond by sending a Group Membership Report for each multicast group joined by the host. A host computer can also send a Group Membership Report when it joins a new multicast group. Group Membership Reduction messages are sent when a host computer leaves a multicast group.

",en:{instance:{one:"system",other:"systems"}}},"ipv6.icmprouter":{info:'

The number of transferred ICMPv6 Router Discovery messages.

Router Solicitations message is sent from a computer host to any routers on the local area network to request that they advertise their presence on the network. Router Advertisement message is sent by a router on the local area network to announce its IP address as available for routing.

',en:{instance:{one:"system",other:"systems"}}},"ipv6.icmpneighbor":{info:'

The number of transferred ICMPv6 Neighbour Discovery messages.

Neighbor Solicitations are used by nodes to determine the link layer address of a neighbor, or to verify that a neighbor is still reachable via a cached link layer address. Neighbor Advertisements are used by nodes to respond to a Neighbor Solicitation message.

',en:{instance:{one:"system",other:"systems"}}},"ipv6.icmpmldv2":{info:'The number of transferred ICMPv6 Multicast Listener Discovery (MLD) messages.',en:{instance:{one:"system",other:"systems"}}},"ipv6.icmptypes":{info:'The number of transferred ICMPv6 messages of certain types.',en:{instance:{one:"system",other:"systems"}}},"ipv6.ect":{info:"

Total number of received IPv6 packets with ECN bits set in the system.

CEP - congestion encountered. NoECTP - non ECN-capable transport. ECTP0 and ECTP1 - ECN capable transport.

",en:{instance:{one:"system",other:"systems"}}},"ipv6.sockstat6_tcp_sockets":{info:'The number of TCP sockets in any state, excluding TIME-WAIT and CLOSED.',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["inuse"]},"ipv6.sockstat6_udp_sockets":{info:"The number of used UDP sockets.",en:{instance:{one:"system",other:"systems"}}},"ipv6.sockstat6_udplite_sockets":{info:"The number of used UDP-Lite sockets.",en:{instance:{one:"system",other:"systems"}}},"ipv6.sockstat6_raw_sockets":{info:'The number of used raw sockets.',en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["inuse"]},"ipv6.sockstat6_frag_sockets":{info:"The number of entries in hash tables that are used for packet reassembly.",en:{instance:{one:"system",other:"systems"}}},"sctp.established":{aggregationMethod:"sum",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"SCTP Associations States",colors:s.default[0],layout:{left:4,top:0,width:4,height:5}}],info:"The number of associations for which the current state is either ESTABLISHED, SHUTDOWN-RECEIVED or SHUTDOWN-PENDING.",en:{instance:{one:"system",other:"systems"}}},"sctp.transitions":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total SCTP Transitions",colors:s.default[1],layout:{left:0,top:0,width:2,height:5}}],info:"

The number of times that associations have made a direct transition between states.

Active - from COOKIE-ECHOED to ESTABLISHED. The upper layer initiated the association attempt. Passive - from CLOSED to ESTABLISHED. The remote endpoint initiated the association attempt. Aborted - from any state to CLOSED using the primitive ABORT. Ungraceful termination of the association. Shutdown - from SHUTDOWN-SENT or SHUTDOWN-ACK-SENT to CLOSED. Graceful termination of the association.

",en:{instance:{one:"system",other:"systems"}}},"sctp.packets":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total SCTP Packets",colors:s.default[2],layout:{left:2,top:0,width:2,height:5}}],info:"

The number of transferred SCTP packets.

Received - includes duplicate packets. Sent - includes retransmitted DATA chunks.

",en:{instance:{one:"system",other:"systems"}}},"sctp.packet_errors":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total SCTP Packet Errors",colors:s.default[3],layout:{left:8,top:0,width:2,height:5}}],info:"

The number of errors encountered during receiving SCTP packets.

Invalid - packets for which the receiver was unable to identify an appropriate association. Checksum - packets with an invalid checksum.

",en:{instance:{one:"system",other:"systems"}}},"sctp.fragmentation":{aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total SCTP Fragmentation",colors:s.default[4],layout:{left:10,top:0,width:2,height:5}}],info:"

The number of fragmented and reassembled SCTP messages.

Reassembled - reassembled user messages, after conversion into DATA chunks. Fragmented - user messages that have to be fragmented because of the MTU.

",en:{instance:{one:"system",other:"systems"}}},"sctp.chunks":{aggregationMethod:"sum",info:"The number of transferred control, ordered, and unordered DATA chunks. Retransmissions and duplicates are not included.",en:{instance:{one:"system",other:"systems"}}},"netfilter.conntrack_sockets":{info:"The number of entries in the conntrack table.",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.conntrack_new":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Conntrack Connections Status",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"

Packet tracking statistics. New (since v4.9) and Ignore (since v5.10) are hardcoded to zeros in the latest kernel.

New - conntrack entries added which were not expected before. Ignore - packets seen which are already connected to a conntrack entry. Invalid - packets seen which can not be tracked.

",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.conntrack_changes":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Conntrack Changes",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}}],info:"

The number of changes in conntrack tables.

Inserted, Deleted - conntrack entries which were inserted or removed. Delete-list - conntrack entries which were put to dying list.

",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.conntrack_expect":{info:'

The number of events in the "expect" table. Connection tracking expectations are the mechanism used to "expect" RELATED connections to existing ones. An expectation is a connection that is expected to happen in a period of time.

Created, Deleted - conntrack entries which were inserted or removed. New - conntrack entries added after an expectation for them was already present.

',en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.conntrack_search":{info:"

Conntrack table lookup statistics.

Searched - conntrack table lookups performed. Restarted - conntrack table lookups which had to be restarted due to hashtable resizes. Found - conntrack table lookups which were successful.

",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.conntrack_errors":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Conntrack Errors",colors:s.default[2],layout:{left:6,top:0,width:3,height:5}}],info:"

Conntrack errors.

IcmpError - packets which could not be tracked due to error situation. InsertFailed - entries for which list insertion was attempted but failed (happens if the same entry is already present). Drop - packets dropped due to conntrack failure. Either new conntrack entry allocation failed, or protocol helper dropped the packet. EarlyDrop - dropped conntrack entries to make room for new ones, if maximum table size was reached.

",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.synproxy_syn_received":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total TCP SYN Received",colors:s.default[3],layout:{left:9,top:0,width:3,height:5}}],info:"The number of initial TCP SYN packets received from clients.",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.synproxy_conn_reopened":{info:"The number of reopened connections by new TCP SYN packets directly from the TIME-WAIT state.",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"netfilter.synproxy_cookies":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"SYN Proxy Cookie Stats",colors:s.default[4],layout:{left:0,top:5,width:3,height:5}}],info:"

SYNPROXY cookie statistics.

Valid, Invalid - result of cookie validation in TCP ACK packets received from clients. Retransmits - TCP SYN packets retransmitted to the server. It happens when the client repeats TCP ACK and the connection to the server is not yet established.

",en:{instance:{one:"firewall",other:"firewalls"}},aggregationMethod:"sum"},"app.cpu_utilization":{info:'The amount of time the CPU was busy executing code in user and kernel modes (all cores).',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],mainheads:[{groupBy:["label"],groupByLabel:["app_group"],chartLibrary:"bars",title:"Top Apps by CPU",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],en:{instance:{one:"application",other:"applications"}}},"app.cpu_guest_utilization":{info:"The amount of time spent running a virtual CPU for a guest operating system (all cores).",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.cpu_context_switches":{info:"The number of CPU context switches. Voluntary context switches occur when a process yields control of the CPU to another process. Nonvoluntary context switches occur when the kernel preempts a process and gives control of the CPU to another process.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],en:{instance:{one:"application",other:"applications"}}},"app.mem_usage":{info:"Resident Set Size (RSS) is the amount of physical memory that is currently being used by the processes. This includes the process's code, data, stack, and shared libraries.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",mainheads:[{groupBy:["label"],groupByLabel:["app_group"],chartLibrary:"bars",title:"Top Apps by Memory",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"application",other:"applications"}}},"app.mem_private_usage":{info:"The amount of used memory, excluding shared memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.mem_page_faults":{info:'The number of minor and major page faults.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.vmem_usage":{info:'The amount of allocated virtual memory. Check this article for more details.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.swap_usage":{info:"The amount of swapped-out virtual memory by anonymous private pages. This does not include shared swap memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.disk_physical_io":{info:"The amount of data that has been transferred to/from the storage layer. Actual physical disk I/O was required.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",mainheads:[{groupBy:["label"],groupByLabel:["app_group"],selectedDimensions:["reads"],chartLibrary:"bars",title:"Top Apps by Disk Reads",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}},{groupBy:["label"],groupByLabel:["app_group"],selectedDimensions:["writes"],chartLibrary:"bars",title:"Top Apps by Disk Writes",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],en:{instance:{one:"application",other:"applications"}}},"app.disk_logical_io":{info:"The amount of data that has been transferred to/from the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required (the read/write operation might have been satisfied from pagecache).",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.processes":{info:'The number of processes.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.threads":{info:'The number of threads.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],chartType:"stacked",en:{instance:{one:"application",other:"applications"}}},"app.fds_open_limit":{info:"Percentage of available file descriptors used.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["app_group"],en:{instance:{one:"application",other:"applications"}}},"app.fds_open":{info:"Number of file descriptors used.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],en:{instance:{one:"application",other:"applications"}}},"app.uptime":{info:"The period of time within which at least one process in the group has been running.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["app_group"],en:{instance:{one:"application",other:"applications"}}},"app.uptime_summary":{info:"The shorted, average and longest uptime among processes in the group.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["app_group"],en:{instance:{one:"application",other:"applications"}}},"usergroup.cpu_utilization":{info:'The amount of time the CPU was busy executing code in user and kernel modes (all cores).',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],mainheads:[{groupBy:["label"],groupByLabel:["user_group"],chartLibrary:"bars",title:"Top Groups by CPU",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],en:{instance:{one:"group",other:"groups"}}},"usergroup.cpu_guest_utilization":{info:"The amount of time spent running a virtual CPU for a guest operating system (all cores).",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.cpu_context_switches":{info:"The number of CPU context switches. Voluntary context switches occur when a process yields control of the CPU to another process. Nonvoluntary context switches occur when the kernel preempts a process and gives control of the CPU to another process.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],en:{instance:{one:"group",other:"groups"}}},"usergroup.mem_usage":{info:"Resident Set Size (RSS) is the amount of physical memory that is currently being used by the processes. This includes the process's code, data, stack, and shared libraries.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",mainheads:[{groupBy:["label"],groupByLabel:["user_group"],chartLibrary:"bars",title:"Top Groups by Memory",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"group",other:"groups"}}},"usergroup.mem_private_usage":{info:"The amount of used memory, excluding shared memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.mem_page_faults":{info:'The number of minor and major page faults.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.vmem_usage":{info:'The amount of allocated virtual memory. Check this article for more details.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.swap_usage":{info:"The amount of swapped-out virtual memory by anonymous private pages. This does not include shared swap memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.disk_physical_io":{info:"The amount of data that has been transferred to/from the storage layer. Actual physical disk I/O was required.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",mainheads:[{groupBy:["label"],groupByLabel:["user_group"],selectedDimensions:["reads"],chartLibrary:"bars",title:"Top Groups by Disk Reads",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}},{groupBy:["label"],groupByLabel:["user_group"],selectedDimensions:["writes"],chartLibrary:"bars",title:"Top Groups by Disk Writes",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],en:{instance:{one:"group",other:"groups"}}},"usergroup.disk_logical_io":{info:"The amount of data that has been transferred to/from the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required (the read/write operation might have been satisfied from pagecache).",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.processes":{info:'The number of processes.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.threads":{info:'The number of threads.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],chartType:"stacked",en:{instance:{one:"group",other:"groups"}}},"usergroup.fds_open_limit":{info:"Percentage of available file descriptors used.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user_group"],en:{instance:{one:"group",other:"groups"}}},"usergroup.fds_open":{info:"Number of file descriptors used.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user_group"],en:{instance:{one:"group",other:"groups"}}},"usergroup.uptime":{info:"The period of time within which at least one process in the group has been running.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user_group"],en:{instance:{one:"group",other:"groups"}}},"usergroup.uptime_summary":{info:"The shorted, average and longest uptime among processes in the group.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user_group"],en:{instance:{one:"group",other:"groups"}}},"user.cpu_utilization":{info:'The amount of time the CPU was busy executing code in user and kernel modes (all cores).',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],mainheads:[{groupBy:["label"],groupByLabel:["user"],chartLibrary:"bars",title:"Top Users by CPU",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],en:{instance:{one:"user",other:"users"}}},"user.cpu_guest_utilization":{info:"The amount of time spent running a virtual CPU for a guest operating system (all cores).",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.cpu_context_switches":{info:"The number of CPU context switches. Voluntary context switches occur when a process yields control of the CPU to another process. Nonvoluntary context switches occur when the kernel preempts a process and gives control of the CPU to another process.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],en:{instance:{one:"user",other:"users"}}},"user.mem_usage":{info:"Resident Set Size (RSS) is the amount of physical memory that is currently being used by the processes. This includes the process's code, data, stack, and shared libraries.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",mainheads:[{groupBy:["label"],groupByLabel:["user"],chartLibrary:"bars",title:"Top Users by Memory",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"user",other:"users"}}},"user.mem_private_usage":{info:"The amount of used memory, excluding shared memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.mem_page_faults":{info:'The number of minor and major page faults.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],en:{instance:{one:"user",other:"users"}}},"user.vmem_usage":{info:'The amount of allocated virtual memory. Check this article for more details.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.swap_usage":{info:"The amount of swapped-out virtual memory by anonymous private pages. This does not include shared swap memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.disk_physical_io":{info:"The amount of data that has been transferred to/from the storage layer. Actual physical disk I/O was required.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",mainheads:[{groupBy:["label"],groupByLabel:["user"],selectedDimensions:["reads"],chartLibrary:"bars",title:"Top Users by Disk Reads",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}},{groupBy:["label"],groupByLabel:["user"],selectedDimensions:["writes"],chartLibrary:"bars",title:"Top Users by Disk Writes",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],en:{instance:{one:"user",other:"users"}}},"user.disk_logical_io":{info:"The amount of data that has been transferred to/from the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required (the read/write operation might have been satisfied from pagecache).",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.processes":{info:'The number of processes.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.threads":{info:'The number of threads.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],chartType:"stacked",en:{instance:{one:"user",other:"users"}}},"user.fds_open_limit":{info:"Percentage of available file descriptors used.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user"],en:{instance:{one:"user",other:"users"}}},"user.fds_open":{info:"Number of file descriptors used.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["user"],en:{instance:{one:"user",other:"users"}}},"user.uptime":{info:"The period of time within which at least one process in the group has been running.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user"],en:{instance:{one:"user",other:"users"}}},"user.uptime_summary":{info:"The shorted, average and longest uptime among processes in the group.",aggregationMethod:"avg",groupBy:["label"],groupByLabel:["user"],en:{instance:{one:"user",other:"users"}}},"apps.cpu":{aggregationMethod:"avg",mainheads:[{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Average CPU per Application",layout:{left:0,top:0,width:2.4,height:5}}],info:"Total CPU utilization per application.",en:{instance:{one:"system",other:"systems"}}},"groups.cpu":{mainheads:[{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Average CPU per Group",layout:{left:0,top:0,width:2.4,height:5}}],info:"Total CPU utilization (all cores). It includes user, system and guest time.",en:{instance:{one:"system",other:"systems"}}},"users.cpu":{mainheads:[{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Average CPU per User",layout:{left:0,top:0,width:2.4,height:5}}],info:"Total CPU utilization (all cores). It includes user, system and guest time.",en:{instance:{one:"system",other:"systems"}}},"apps.cpu_user":{aggregationMethod:"avg",info:'The amount of time the CPU was busy executing code in user mode (all cores).',en:{instance:{one:"system",other:"systems"}}},"groups.cpu_user":{aggregationMethod:"avg",info:'The amount of time the CPU was busy executing code in user mode (all cores).',en:{instance:{one:"system",other:"systems"}}},"users.cpu_user":{aggregationMethod:"avg",info:'The amount of time the CPU was busy executing code in user mode (all cores).',en:{instance:{one:"system",other:"systems"}}},"apps.cpu_system":{aggregationMethod:"avg",info:'The amount of time the CPU was busy executing code in kernel mode (all cores).',en:{instance:{one:"system",other:"systems"}}},"groups.cpu_system":{aggregationMethod:"avg",info:'The amount of time the CPU was busy executing code in kernel mode (all cores).',en:{instance:{one:"system",other:"systems"}}},"users.cpu_system":{aggregationMethod:"avg",info:'The amount of time the CPU was busy executing code in kernel mode (all cores).',en:{instance:{one:"system",other:"systems"}}},"apps.cpu_guest":{aggregationMethod:"avg",info:"The amount of time spent running a virtual CPU for a guest operating system (all cores).",en:{instance:{one:"system",other:"systems"}}},"groups.cpu_guest":{aggregationMethod:"avg",info:"The amount of time spent running a virtual CPU for a guest operating system (all cores).",en:{instance:{one:"system",other:"systems"}}},"users.cpu_guest":{aggregationMethod:"avg",info:"The amount of time spent running a virtual CPU for a guest operating system (all cores).",en:{instance:{one:"system",other:"systems"}}},"apps.preads":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Disk reads per Application",layout:{left:4.8,top:0,width:2.4,height:5}}],info:"The amount of data that has been read from the storage layer. Actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"groups.preads":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Disk Reads per Group",layout:{left:4.8,top:0,width:2.4,height:5}}],info:"The amount of data that has been read from the storage layer. Actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"users.preads":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Disk Reads per User",layout:{left:4.8,top:0,width:2.4,height:5}}],info:"The amount of data that has been read from the storage layer. Actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"apps.pwrites":{mainheads:[{chartLibrary:"bars",title:"Total Disk Writes per Application",layout:{left:7.2,top:0,width:2.4,height:5}}],info:"The amount of data that has been written to the storage layer. Actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"groups.pwrites":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Disk Writes per Group",layout:{left:7.2,top:0,width:2.4,height:5}}],info:"The amount of data that has been written to the storage layer. Actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"users.pwrites":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Disk Writes per User",layout:{left:7.2,top:0,width:2.4,height:5}}],info:"The amount of data that has been written to the storage layer. Actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"apps.lreads":{info:"The amount of data that has been read from the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required (the read might have been satisfied from pagecache).",en:{instance:{one:"system",other:"systems"}}},"groups.lreads":{info:"The amount of data that has been read from the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required (the read might have been satisfied from pagecache).",en:{instance:{one:"system",other:"systems"}}},"users.lreads":{info:"The amount of data that has been read from the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required (the read might have been satisfied from pagecache).",en:{instance:{one:"system",other:"systems"}}},"apps.lwrites":{info:"The amount of data that has been written or shall be written to the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"groups.lwrites":{info:"The amount of data that has been written or shall be written to the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"users.lwrites":{info:"The amount of data that has been written or shall be written to the storage layer. It includes things such as terminal I/O and is unaffected by whether or not actual physical disk I/O was required.",en:{instance:{one:"system",other:"systems"}}},"apps.files":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Open Files per Application",layout:{left:9.6,top:0,width:2.4,height:5}}],info:"The number of open files and directories.",en:{instance:{one:"system",other:"systems"}}},"groups.files":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Open Files per Group",layout:{left:9.6,top:0,width:2.4,height:5}}],info:"The number of open files and directories.",en:{instance:{one:"system",other:"systems"}}},"users.files":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Open Files per User",layout:{left:9.6,top:0,width:2.4,height:5}}],info:"The number of open files and directories.",en:{instance:{one:"system",other:"systems"}}},"apps.mem":{info:"Real memory (RAM) used by applications. This does not include shared memory.",en:{instance:{one:"system",other:"systems"}}},"groups.mem":{info:"Real memory (RAM) used per user group. This does not include shared memory.",en:{instance:{one:"system",other:"systems"}}},"users.mem":{info:"Real memory (RAM) used per user. This does not include shared memory.",en:{instance:{one:"system",other:"systems"}}},"apps.rss":{info:"Applications Resident Set Size (RSS).",en:{instance:{one:"system",other:"systems"}},mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Memory per Application",layout:{left:2.4,top:0,width:2.4,height:5}}]},"groups.rss":{info:"Applications Resident Set Size (RSS) per user group.",en:{instance:{one:"system",other:"systems"}},mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Memory per Group",layout:{left:2.4,top:0,width:2.4,height:5}}]},"users.rss":{info:"Applications Resident Set Size (RSS) per user.",en:{instance:{one:"system",other:"systems"}},mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Memory per User",layout:{left:2.4,top:0,width:2.4,height:5}}]},"apps.vmem":{info:'Virtual memory allocated by applications. Check this article for more information.',en:{instance:{one:"system",other:"systems"}}},"groups.vmem":{info:'Virtual memory allocated per user group since the Netdata restart. Please check this article for more information.',en:{instance:{one:"system",other:"systems"}}},"users.vmem":{info:'Virtual memory allocated per user group since the Netdata restart. Please check this article for more information.',en:{instance:{one:"system",other:"systems"}}},"apps.minor_faults":{info:'The number of minor faults which have not required loading a memory page from the disk. Minor page faults occur when a process needs data that is in memory and is assigned to another process. They share memory pages between multiple processes \u2013 no additional data needs to be read from disk to memory.',en:{instance:{one:"system",other:"systems"}}},"groups.minor_faults":{info:'The number of minor faults which have not required loading a memory page from the disk. Minor page faults occur when a process needs data that is in memory and is assigned to another process. They share memory pages between multiple processes \u2013 no additional data needs to be read from disk to memory.',en:{instance:{one:"system",other:"systems"}}},"users.minor_faults":{info:'The number of minor faults which have not required loading a memory page from the disk. Minor page faults occur when a process needs data that is in memory and is assigned to another process. They share memory pages between multiple processes \u2013 no additional data needs to be read from disk to memory.',en:{instance:{one:"system",other:"systems"}}},"apps.threads":{info:'The number of threads.',en:{instance:{one:"system",other:"systems"}}},"groups.threads":{info:'The number of threads.',en:{instance:{one:"system",other:"systems"}}},"users.threads":{info:'The number of threads.',en:{instance:{one:"system",other:"systems"}}},"apps.processes":{info:'The number of processes.',en:{instance:{one:"system",other:"systems"}}},"groups.processes":{info:'The number of processes.',en:{instance:{one:"system",other:"systems"}}},"users.processes":{info:'The number of processes.',en:{instance:{one:"system",other:"systems"}}},"apps.uptime":{aggregationMethod:"min",info:"The period of time within which at least one process in the group has been running.",en:{instance:{one:"system",other:"systems"}}},"groups.uptime":{aggregationMethod:"min",info:"The period of time within which at least one process in the group has been running.",en:{instance:{one:"system",other:"systems"}}},"users.uptime":{aggregationMethod:"min",info:"The period of time within which at least one process in the group has been running.",en:{instance:{one:"system",other:"systems"}}},"apps.uptime_min":{info:"The shortest uptime among processes in the group.",en:{instance:{one:"system",other:"systems"}}},"groups.uptime_min":{info:"The shortest uptime among processes in the group.",en:{instance:{one:"system",other:"systems"}}},"users.uptime_min":{info:"The shortest uptime among processes in the group.",en:{instance:{one:"system",other:"systems"}}},"apps.uptime_avg":{info:"The average uptime of processes in the group.",en:{instance:{one:"system",other:"systems"}}},"groups.uptime_avg":{info:"The average uptime of processes in the group.",en:{instance:{one:"system",other:"systems"}}},"users.uptime_avg":{info:"The average uptime of processes in the group.",en:{instance:{one:"system",other:"systems"}}},"apps.uptime_max":{info:"The longest uptime among processes in the group.",en:{instance:{one:"system",other:"systems"}}},"groups.uptime_max":{info:"The longest uptime among processes in the group.",en:{instance:{one:"system",other:"systems"}}},"users.uptime_max":{info:"The longest uptime among processes in the group.",en:{instance:{one:"system",other:"systems"}}},"apps.pipes":{info:'The number of open pipes. A pipe is a unidirectional data channel that can be used for interprocess communication.',en:{instance:{one:"system",other:"systems"}}},"groups.pipes":{info:'The number of open pipes. A pipe is a unidirectional data channel that can be used for interprocess communication.',en:{instance:{one:"system",other:"systems"}}},"users.pipes":{info:'The number of open pipes. A pipe is a unidirectional data channel that can be used for interprocess communication.',en:{instance:{one:"system",other:"systems"}}},"apps.swap":{info:"The amount of swapped-out virtual memory by anonymous private pages. This does not include shared swap memory.",en:{instance:{one:"system",other:"systems"}}},"groups.swap":{info:"The amount of swapped-out virtual memory by anonymous private pages. This does not include shared swap memory.",en:{instance:{one:"system",other:"systems"}}},"users.swap":{info:"The amount of swapped-out virtual memory by anonymous private pages. This does not include shared swap memory.",en:{instance:{one:"system",other:"systems"}}},"apps.major_faults":{info:'The number of major faults which have required loading a memory page from the disk. Major page faults occur because of the absence of the required page from the RAM. They are expected when a process starts or needs to read in additional data and in these cases do not indicate a problem condition. However, a major page fault can also be the result of reading memory pages that have been written out to the swap file, which could indicate a memory shortage.',en:{instance:{one:"system",other:"systems"}}},"groups.major_faults":{info:'The number of major faults which have required loading a memory page from the disk. Major page faults occur because of the absence of the required page from the RAM. They are expected when a process starts or needs to read in additional data and in these cases do not indicate a problem condition. However, a major page fault can also be the result of reading memory pages that have been written out to the swap file, which could indicate a memory shortage.',en:{instance:{one:"system",other:"systems"}}},"users.major_faults":{info:'The number of major faults which have required loading a memory page from the disk. Major page faults occur because of the absence of the required page from the RAM. They are expected when a process starts or needs to read in additional data and in these cases do not indicate a problem condition. However, a major page fault can also be the result of reading memory pages that have been written out to the swap file, which could indicate a memory shortage.',en:{instance:{one:"system",other:"systems"}}},"apps.sockets":{info:"The number of open sockets. Sockets are a way to enable inter-process communication between programs running on a server, or between programs running on separate servers. This includes both network and UNIX sockets.",en:{instance:{one:"system",other:"systems"}}},"groups.sockets":{info:"The number of open sockets. Sockets are a way to enable inter-process communication between programs running on a server, or between programs running on separate servers. This includes both network and UNIX sockets.",en:{instance:{one:"system",other:"systems"}}},"users.sockets":{info:"The number of open sockets. Sockets are a way to enable inter-process communication between programs running on a server, or between programs running on separate servers. This includes both network and UNIX sockets.",en:{instance:{one:"system",other:"systems"}}},"app.ebpf_file_open":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls for internal functions on the Linux kernel responsible to open files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_file_open_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls for internal functions on the Linux kernel responsible to open files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_file_closed":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls for internal functions on the Linux kernel responsible to close files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_file_close_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls for internal functions on the Linux kernel responsible to close files. Netdata gives a summary for this chart in file access, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_unlink":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to VFS unlinker function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_write":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of successful calls to VFS writer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_write_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls to VFS writer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_read":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of successful calls to VFS reader function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_read_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls to VFS reader function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_write_bytes":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Total of bytes successfully written using the VFS writer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_read_bytes":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Total of bytes successfully written using the VFS reader function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_fsync":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to VFS syncer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_fsync_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls to VFS syncer function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_open":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to VFS opener function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_open_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls to VFS opener function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to VFS creator function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_vfs_create_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of failed calls to VFS creator function. Netdata gives a summary for this chart in Virtual File System, and when the integration is enabled, Netdata shows virtual file system per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_process_start":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a function that starts a process is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_thread_start":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a function that starts a thread is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_task_exit":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a function responsible for closing tasks is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_task_released":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a function responsible for releasing tasks is called. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_task_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of errors to create a new task. Netdata gives a summary for this chart in Process, and when the integration is enabled, Netdata shows process per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_tcp_v4_connection":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to IPV4 TCP function responsible for starting connections. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows outbound connections per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_tcp_v6_connection":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to IPV6 TCP function responsible for starting connections. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows outbound connections per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_sock_bytes_sent":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Total bytes sent with TCP or UDP internal functions. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows bandwidth per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_sock_bytes_received":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Total bytes received with TCP or UDP internal functions. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows bandwidth per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_tcp_sendmsg":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to TCP functions responsible to send data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows TCP calls per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_tcp_cleanup_rbuf":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to TCP functions responsible to receive data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows TCP calls per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_tcp_retransmit":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a TCP packet was retransmitted. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows TCP calls per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_udp_sendmsg":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to UDP functions responsible to send data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows UDP calls per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_udp_recvmsg":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to UDP functions responsible to receive data. Netdata gives a summary for this chart in Network Stack. When the integration is enabled, Netdata shows UDP calls per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_cachestat_hit_ratio":{groupBy:["label"],groupByLabel:["app_group"],aggregationMethod:"avg",info:'The ratio shows the percentage of data accessed directly in memory. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache hit per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_cachestat_dirty_pages":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of modified pages in Linux page cache. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache hit per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_cachestat_access":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of access to data in Linux page cache. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache hit per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_cachestat_misses":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of access to data was not present in Linux page cache. Netdata gives a summary for this chart in Memory, and when the integration is enabled, Netdata shows page cache misses per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_dc_hit":{aggregationMethod:"avg",groupBy:["label"],groupByLabel:["app_group"],info:'Percentage of file accesses that were present in the directory cache. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_dc_reference":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a file is accessed inside directory cache. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_dc_not_cache":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a file is accessed in the file system, because it is not present inside the directory cache. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_dc_not_found":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of times a file was not found on the file system. Netdata gives a summary for this chart in directory cache, and when the integration is enabled, Netdata shows directory cache per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_swap_readpage":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to swap reader function. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows swap metrics per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_call_swap_writepage":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to swap writer function. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows swap metrics per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_shmget_call":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to shmget. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_shmat_call":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to shmat. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_shmdt_call":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to shmdt. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"app.ebpf_shmctl_call":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["app_group"],info:'Number of calls to shmctl. Netdata gives a summary for this chart in System Overview, and when the integration is enabled, Netdata shows shared memory metrics per cgroup (systemd Services).'+f+'
',en:{instance:{one:"application",other:"applications"}}},"tc.qos":{info:"Network Interface traffic per QoS class",family:"traffic",en:{instance:{one:"interface",other:"interfaces"}},aggregationMethod:"sum",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Traffic per QoS Class",layout:{left:0,top:0,width:6,height:5}}]},"tc.qos_packets":{family:"packets",info:"Network Interface packets per QoS class",en:{instance:{one:"interface",other:"interfaces"}},aggregationMethod:"sum"},"tc.qos_dropped":{family:"drops",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Packets dropped per QoS Class",layout:{left:6,top:0,width:6,height:5}}],info:"Network Interface packets dropped per QoS class",en:{instance:{one:"interface",other:"interfaces"}},aggregationMethod:"sum"},"tc.qos_tokens":{family:"tokens",info:"Class Tokens.",en:{instance:{one:"interface",other:"interfaces"}}},"tc.qos_ctokens":{family:"tokens",info:"Class cTokens.",en:{instance:{one:"interface",other:"interfaces"}}},"net.net":{family:"traffic",aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Inbound",selectedDimensions:["received"],colors:s.default[0],valueRange:[0,null],layout:{left:0,top:0,width:3,height:5}},{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Outbound",selectedDimensions:["sent"],colors:s.default[1],valueRange:[0,null],layout:{left:3,top:0,width:3,height:5}}],info:a,en:{instance:{one:"interface",other:"interfaces"}}},"net.packets":{family:"packets",aggregationMethod:"sum",info:o,en:{instance:{one:"interface",other:"interfaces"}}},"net.errors":{family:"errors",aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Errors",colors:s.default[1],layout:{left:6,top:0,width:3,height:5}}],info:r,en:{instance:{one:"interface",other:"interfaces"}}},"net.fifo":{family:"errors",info:i,en:{instance:{one:"interface",other:"interfaces"}}},"net.drops":{family:"drops",aggregationMethod:"sum",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Drops",colors:s.default[2],layout:{left:9,top:0,width:3,height:5}}],info:c,en:{instance:{one:"interface",other:"interfaces"}}},"net.compressed":{family:"compression",info:l,en:{instance:{one:"interface",other:"interfaces"}}},"net.events":{family:"errors",info:d,en:{instance:{one:"interface",other:"interfaces"}}},"net.duplex":{family:"duplex",info:h,en:{instance:{one:"interface",other:"interfaces"}}},"net.operstate":{family:"state",info:u,en:{instance:{one:"interface",other:"interfaces"}}},"net.carrier":{family:"state",info:p,en:{instance:{one:"interface",other:"interfaces"}}},"net.speed":{family:"speed",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"gauge",title:"Maximum Network Speed",colors:s.default[3],layout:{left:0,top:5,width:3,height:5}}],info:m,en:{instance:{one:"interface",other:"interfaces"}}},"net.mtu":{family:"mtu",aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"easypiechart",title:"Minimum Network MTU",colors:s.default[4],layout:{left:3,top:5,width:3,height:5}}],info:g,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_net":{mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"easypiechart",title:"Total Network Inbound",selectedDimensions:["received"],colors:s.default[0],layout:{left:4,top:10,width:2,height:5}},{groupBy:["selected"],valueRange:[0,null],chartLibrary:"easypiechart",title:"Total Network Outbound",selectedDimensions:["sent"],colors:s.default[1],layout:{left:6,top:10,width:2,height:5}}],info:a,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_packets":{info:o,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_errors":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Errors",colors:s.default[1],layout:{left:15,top:0,width:3,height:5}}],info:r,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_fifo":{info:i,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_drops":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Drops",colors:s.default[2],layout:{left:9,top:0,width:3,height:5}}],info:c,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_compressed":{info:l,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_events":{info:d,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_duplex":{info:h,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_operstate":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Interface Operational States",layout:{left:10,top:10,width:2,height:5}}],info:u,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_carrier":{info:p,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_speed":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"gauge",title:"Maxinum Network Speed",colors:s.default[3],layout:{left:0,top:5,width:3,height:5}}],info:m,en:{instance:{one:"interface",other:"interfaces"}}},"cgroup.net_mtu":{mainheads:[{groupBy:["selected"],aggregationMethod:"min",groupingMethod:"min",chartLibrary:"easypiechart",title:"Minimum Network MTU",colors:s.default[4],layout:{left:8,top:10,width:2,height:5}}],info:g,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_net":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Inbound",selectedDimensions:["received"],colors:s.default[0],layout:{left:0,top:0,width:2,height:5}},{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Outbound",selectedDimensions:["sent"],colors:s.default[1],layout:{left:2,top:0,width:3,height:5}}],info:a,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_packets":{info:o,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_errors":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Errors",colors:s.default[1],layout:{left:6,top:0,width:2,height:5}}],info:r,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_fifo":{info:i,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_drops":{heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Drops",colors:s.default[2],layout:{left:8,top:0,width:2,height:5}}],info:c,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_compressed":{info:l,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_events":{info:d,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_operstate":{info:u,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_duplex":{info:h,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_carrier":{info:p,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_speed":{heads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"gauge",title:"Maxinum Network Speed",colors:s.default[3],layout:{left:10,top:5,width:2,height:5}}],info:m,en:{instance:{one:"interface",other:"interfaces"}}},"k8s.cgroup.net_mtu":{heads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"easypiechart",title:"Minimum Network MTU",colors:s.default[4],layout:{left:4,top:0,width:2,height:5}}],info:g,en:{instance:{one:"interface",other:"interfaces"}}},"docker.containers_state":{en:{instance:{one:"system",other:"systems"}}},"docker.container_state":{en:{instance:{one:"container",other:"containers"}},mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Docker Container States",layout:{left:0,top:0,width:3,height:5}}]},"docker.container_health_status":{en:{instance:{one:"container",other:"containers"}},mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Docker Container Health Status",layout:{left:3,top:0,width:3,height:5}}]},"docker.healthy_containers":{en:{instance:{one:"system",other:"systems"}}},"docker.unhealthy_containers":{en:{instance:{one:"system",other:"systems"}}},"docker.images":{en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,colors:s.default[6],title:"Total Docker Images",layout:{left:6,top:0,width:3,height:5}}]},"docker.images_size":{en:{instance:{one:"system",other:"systems"}},mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Total Images Size",layout:{left:9,top:0,width:3,height:5}}]},"wireless.link_quality":{family:"quality",aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Wireless Link Quality"}],info:"Overall quality of the link. May be based on the level of contention or interference, the bit or frame error rate, how good the received signal is, some timing synchronisation, or other hardware metric.",en:{instance:{one:"interface",other:"interfaces"}}},"wireless.signal_level":{family:"signal",aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Signal Level"}],info:'Received signal strength (RSSI).',en:{instance:{one:"interface",other:"interfaces"}}},"wireless.noise_level":{family:"noise",aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Noise Level"}],info:"Background noise level (when no packet is transmitted).",en:{instance:{one:"interface",other:"interfaces"}}},"wireless.discarded_packets":{family:"errors",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Discarded Packets"}],info:"

The number of discarded packets.

NWID - received packets with a different NWID or ESSID. Used to detect configuration problems or adjacent network existence (on the same frequency). Crypt - received packets that the hardware was unable to code/encode. This can be used to detect invalid encryption settings. Frag - received packets for which the hardware was not able to properly re-assemble the link layer fragments (most likely one was missing). Retry - packets that the hardware failed to deliver. Most MAC protocols will retry the packet a number of times before giving up. Misc - other packets lost in relation with specific wireless operations.

",en:{instance:{one:"interface",other:"interfaces"}}},"wireless.missed_beacons":{family:"errors",info:'The number of periodic beacons from the Cell or the Access Point have been missed. Beacons are sent at regular intervals to maintain the cell coordination, failure to receive them usually indicates that the card is out of range.',en:{instance:{one:"interface",other:"interfaces"}}},"ib.bytes":{info:"The amount of traffic transferred by the port."},"ib.packets":{info:"The number of packets transferred by the port."},"ib.errors":{info:"The number of errors encountered by the port."},"ib.hwerrors":{info:"The number of hardware errors encountered by the port."},"ib.hwpackets":{info:"The number of hardware packets transferred by the port."},"netfilter.sockets":{en:{instance:{one:"firewall",other:"firewalls"}},colors:s.default[7],heads:[]},"netfilter.new":{en:{instance:{one:"firewall",other:"firewalls"}},heads:[{groupBy:["selected"],chartLibrary:"gauge",title:"New Connections",selectedDimensions:["new"],colors:s.default[19]}]},"ipvs.sockets":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Created Connections",layout:{left:6,top:0,width:4,height:5},colors:s.default[12]}],info:"Total created connections for all services and their servers. To see the IPVS connection table, run ipvsadm -Lnc.",en:{instance:{one:"IPVS server",other:"IPVS servers"}}},"ipvs.packets":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Received Packets",layout:{left:9,top:0,width:2,height:5},colors:s.default[2]},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Sent Packets",layout:{left:12,top:0,width:2,height:5},colors:s.default[1]}],info:"Total transferred packets for all services and their servers.",en:{instance:{one:"IPVS server",other:"IPVS servers"}}},"ipvs.net":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Received Bandwidth",layout:{left:0,top:0,width:2,height:5},colors:s.default[2]},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Sent Bandwidth",layout:{left:3,top:0,width:2,height:5},colors:s.default[1]}],info:"Total network traffic for all services and their servers.",en:{instance:{one:"IPVS server",other:"IPVS servers"}}},"disk.util":{family:"utilization",aggregationMethod:"avg",colors:s.default[5],mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Utilization",colors:s.default[0],valueRange:[0,100],layout:{left:0,top:5,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",title:"Top Disks by Utilization",layout:{left:3,top:5,width:3,height:5}}],info:"Disk Utilization measures the amount of time the disk was busy with something. This is not related to its performance. 100% means that the system always had an outstanding operation on the disk. Keep in mind that depending on the underlying technology of the disk, 100% here may or may not be an indication of congestion.",en:{instance:{one:"disk",other:"disks"}}},"disk.busy":{family:"utilization",aggregationMethod:"avg",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Utilization",colors:s.default[0],valueRange:[0,100],layout:{left:6,top:10,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",title:"Top Disks by Busy Time",layout:{left:9,top:10,width:3,height:5}}],colors:s.default[4],info:"Disk Busy Time measures the amount of time the disk was busy with something.",en:{instance:{one:"disk",other:"disks"}}},"disk.backlog":{family:"utilization",aggregationMethod:"avg",mainheads:[{groupBy:["selected"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Average Disk Backlog",colors:s.default[12],layout:{left:6,top:5,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",title:"Top Disks by Backlog",layout:{left:9,top:5,width:3,height:5}}],colors:s.default[8],info:"Backlog is an indication of the duration of pending disk operations. On every I/O event the system is multiplying the time spent doing I/O since the last update of this field with the number of pending operations. While not accurate, this metric can provide an indication of the expected completion time of the operations in progress.",en:{instance:{one:"disk",other:"disks"}}},"disk.io":{family:"io",info:"The amount of data transferred to and from disk.",en:{instance:{one:"disk",other:"disks"}}},"disk_ext.io":{family:"io",info:"The amount of discarded data that are no longer in use by a mounted file system.",en:{instance:{one:"disk",other:"disks"}}},"disk.ops":{family:"iops",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Read IOPS",selectedDimensions:["reads"],colors:s.default[2],layout:{left:0,top:0,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",selectedDimensions:["reads"],title:"Top Disks by Read IOPS",layout:{left:3,top:0,width:3,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Write IOPS",selectedDimensions:["writes"],colors:s.default[1],layout:{left:6,top:0,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",selectedDimensions:["writes"],title:"Top Disks by Write IOPS",layout:{left:9,top:0,width:3,height:5}}],info:"Completed disk I/O operations. Keep in mind the number of operations requested might be higher, since the system is able to merge adjacent to each other (see merged operations chart).",en:{instance:{one:"disk",other:"disks"}},dimensionsOnNonDimensionGrouping:["reads"]},"disk_ext.ops":{family:"iops",info:"

The number (after merges) of completed discard/flush requests.

Discard commands inform disks which blocks of data are no longer considered to be in use and therefore can be erased internally. They are useful for solid-state drivers (SSDs) and thinly-provisioned storage. Discarding/trimming enables the SSD to handle garbage collection more efficiently, which would otherwise slow future write operations to the involved blocks down.

Flush operations transfer all modified in-core data (i.e., modified buffer cache pages) to the disk device so that all changed information can be retrieved even if the system crashes or is rebooted. Flush requests are executed by disks. Flush requests are not tracked for partitions. Before being merged, flush operations are counted as writes.

",en:{instance:{one:"disk",other:"disks"}}},"disk.qops":{family:"utilization",mainheads:[{groupBy:["selected"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Average Disk Current I/O Operations",colors:s.default[12],layout:{left:0,top:10,width:3,height:5}},{groupBy:["instance"],chartLibrary:"bars",title:"Top Disks by Current I/O Operations",layout:{left:3,top:10,width:3,height:5}}],info:"I/O operations currently in progress. This metric is a snapshot - it is not an average over the last interval.",en:{instance:{one:"disk",other:"disks"}}},"disk.iotime":{family:"iotime",aggregationMethod:"avg",info:"The sum of the duration of all completed I/O operations. This number can exceed the interval if the disk is able to execute I/O operations in parallel.",en:{instance:{one:"disk",other:"disks"}},dimensionsOnNonDimensionGrouping:["reads"]},"disk_ext.iotime":{family:"iotime",aggregationMethod:"avg",info:"The sum of the duration of all completed discard/flush operations. This number can exceed the interval if the disk is able to execute discard/flush operations in parallel.",en:{instance:{one:"disk",other:"disks"}},dimensionsOnNonDimensionGrouping:["reads"]},"disk.mops":{family:"iops",info:"The number of merged disk operations. The system is able to merge adjacent I/O operations, for example two 4KB reads can become one 8KB read before given to disk.",en:{instance:{one:"disk",other:"disks"}},dimensionsOnNonDimensionGrouping:["reads"]},"disk_ext.mops":{family:"iops",info:"The number of merged discard disk operations. Discard operations which are adjacent to each other may be merged for efficiency.",en:{instance:{one:"disk",other:"disks"}},dimensionsOnNonDimensionGrouping:["reads"]},"disk.svctm":{family:"iotime",aggregationMethod:"avg",info:"The average service time for completed I/O operations. This metric is calculated using the total busy time of the disk and the number of completed operations. If the disk is able to execute multiple parallel operations the reporting average service time will be misleading.",en:{instance:{one:"disk",other:"disks"}},dimensionsOnNonDimensionGrouping:["svctm"]},"disk.latency_io":{family:"latency",aggregationMethod:"avg",info:'Disk I/O latency is the time it takes for an I/O request to be completed. Disk chart has a relationship with Filesystem charts. This chart is based on the bio_tracepoints tool of the ebpf_exporter.'+f,en:{instance:{one:"disk",other:"disks"}}},"disk.avgsz":{family:"size",info:"The average I/O operation size.",en:{instance:{one:"disk",other:"disks"}}},"disk_ext.avgsz":{family:"size",info:"The average discard operation size.",en:{instance:{one:"disk",other:"disks"}}},"disk.await":{family:"iotime",aggregationMethod:"avg",info:"The average time for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.",en:{instance:{one:"disk",other:"disks"}}},"disk_ext.await":{family:"iowait",aggregationMethod:"avg",info:"The average time for discard/flush requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.",en:{instance:{one:"disk",other:"disks"}}},"disk.space":{family:"utilization",mainheads:[{chartLibrary:"d3pie",title:"Disk Space Usage",layout:{left:0,top:0,width:3,height:5}}],info:"Disk space utilization. reserved for root is automatically reserved by the system to prevent the root user from getting out of space.",en:{instance:{one:"mount",other:"mounts"}}},"disk.inodes":{family:"inodes",mainheads:[{chartLibrary:"d3pie",title:"Disk Files Usage",layout:{left:3,top:0,width:3,height:5}}],info:"Inodes (or index nodes) are filesystem objects (e.g. files and directories). On many types of file system implementations, the maximum number of inodes is fixed at filesystem creation, limiting the maximum number of files the filesystem can hold. It is possible for a device to run out of inodes. When this happens, new files cannot be created on the device, even though there may be free space available.",en:{instance:{one:"mount",other:"mounts"}}},"disk.bcache_hit_ratio":{family:"cache",aggregationMethod:"avg",info:"

Bcache (block cache) is a cache in the block layer of Linux kernel, which is used for accessing secondary storage devices. It allows one or more fast storage devices, such as flash-based solid-state drives (SSDs), to act as a cache for one or more slower storage devices, such as hard disk drives (HDDs).

Percentage of data requests that were fulfilled right from the block cache. Hits and misses are counted per individual IO as bcache sees them. A partial hit is counted as a miss.

",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache_rates":{family:"cache",aggregationMethod:"avg",info:"Throttling rates. To avoid congestions bcache tracks latency to the cache device, and gradually throttles traffic if the latency exceeds a threshold. If the writeback percentage is nonzero, bcache tries to keep around this percentage of the cache dirty by throttling background writeback and using a PD controller to smoothly adjust the rate.",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache_size":{family:"cache",info:"The amount of dirty data for this backing device in the cache.",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache_usage":{family:"cache",aggregationMethod:"avg",info:"The percentage of cache device which does not contain dirty data, and could potentially be used for writeback.",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache_cache_read_races":{family:"cache",info:"Read races happen when a bucket was reused and invalidated while data was being read from the cache. When this occurs the data is reread from the backing device. IO errors are decayed by the half life. If the decaying count reaches the limit, dirty data is written out and the cache is disabled.",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache":{family:"cache",info:"Hits and misses are counted per individual IO as bcache sees them; a partial hit is counted as a miss. Collisions happen when data was going to be inserted into the cache from a cache miss, but raced with a write and data was already present. Cache miss reads are rounded up to the readahead size, but without overlapping existing cache entries.",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache_bypass":{family:"cache",info:"Hits and misses for IO that is intended to skip the cache.",en:{instance:{one:"disk",other:"disks"}}},"disk.bcache_cache_alloc":{family:"cache",aggregationMethod:"avg",info:"

Working set size.

Unused is the percentage of the cache that does not contain any data. Dirty is the data that is modified in the cache but not yet written to the permanent storage. Clean data matches the data stored on the permanent storage. Metadata is bcache's metadata overhead.

",en:{instance:{one:"disk",other:"disks"}}},"nfs.net":{info:"The number of received UDP and TCP packets.",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total received packets"}],en:{instance:{one:"NFS client",other:"NFS clients"}}},"nfs.rpc":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"RPC Statistics"}],info:"

Remote Procedure Call (RPC) statistics.

Calls - all RPC calls. Retransmits - retransmitted calls. AuthRefresh - authentication refresh calls (validating credentials with the server).

",en:{instance:{one:"NFS client",other:"NFS clients"}}},"nfs.proc2":{info:'NFSv2 RPC calls. The individual metrics are described in RFC1094.',en:{instance:{one:"NFS client",other:"NFS clients"}}},"nfs.proc3":{info:'NFSv3 RPC calls. The individual metrics are described in RFC1813.',en:{instance:{one:"NFS client",other:"NFS clients"}}},"nfs.proc4":{info:'NFSv4 RPC calls. The individual metrics are described in RFC8881.',en:{instance:{one:"NFS client",other:"NFS clients"}}},"nfsd.readcache":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"NFS Reply Cache Statistics"}],info:"

Reply cache statistics. The reply cache keeps track of responses to recently performed non-idempotent transactions, and in case of a replay, the cached response is sent instead of attempting to perform the operation again.

Hits - client did not receive a reply and re-transmitted its request. This event is undesirable. Misses - an operation that requires caching (idempotent). Nocache - an operation that does not require caching (non-idempotent).",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.filehandles":{info:"

File handle statistics. File handles are small pieces of memory that keep track of what file is opened.

Stale - happen when a file handle references a location that has been recycled. This also occurs when the server loses connection and applications are still using files that are no longer accessible.",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.io":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"NFS IO Statistics"}],info:"The amount of data transferred to and from disk.",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.threads":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"NFS Daemon Threads"}],info:"The number of threads used by the NFS daemon.",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.readahead":{info:"

Read-ahead cache statistics. NFS read-ahead predictively requests blocks from a file in advance of I/O requests by the application. It is designed to improve client sequential read throughput.

10%-100% - histogram of depth the block was found. This means how far the cached block is from the original block that was first requested. Misses - not found in the read-ahead cache.

",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.net":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Network Packets received"}],info:"The number of received UDP and TCP packets.",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.rpc":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"RPC Statistics"}],info:"

Remote Procedure Call (RPC) statistics.

Calls - all RPC calls. BadAuth - bad authentication. It does not count if you try to mount from a machine that it's not in your exports file. BadFormat - other errors.

",en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.proc2":{info:'NFSv2 RPC calls. The individual metrics are described in RFC1094.',en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.proc3":{info:'NFSv3 RPC calls. The individual metrics are described in RFC1813.',en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.proc4":{info:'NFSv4 RPC calls. The individual metrics are described in RFC8881.',en:{instance:{one:"NFS server",other:"NFS servers"}}},"nfsd.proc4ops":{info:'NFSv4 RPC operations. The individual metrics are described in RFC8881.',en:{instance:{one:"NFS server",other:"NFS servers"}}},"zfs.arc_size":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Average ZFS ARC Size"}],info:"

The size of the ARC.

Arcsz - actual size. Target - target size that the ARC is attempting to maintain (adaptive). Min - minimum size limit. When the ARC is asked to shrink, it will stop shrinking at this value. Max - maximum size limit.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.l2_size":{info:"

The size of the L2ARC.

Actual - size of compressed data. Size - size of uncompressed data.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.reads":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Read Requests"}],info:"

The number of read requests.

ARC - all prefetch and demand requests. Demand - triggered by an application request. Prefetch - triggered by the prefetch mechanism, not directly from an application request. Metadata - metadata read requests. L2 - L2ARC read requests.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.bytes":{info:"The amount of data transferred to and from the L2ARC cache devices.",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.hits":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Hit Rate of ARC Read Requests"}],info:"

Hit rate of the ARC read requests.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.dhits":{aggregationMethod:"avg",info:"

Hit rate of the ARC data and metadata demand read requests. Demand requests are triggered by an application request.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.phits":{aggregationMethod:"avg",info:"

Hit rate of the ARC data and metadata prefetch read requests. Prefetch requests are triggered by the prefetch mechanism, not directly from an application request.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.mhits":{aggregationMethod:"avg",info:"

Hit rate of the ARC metadata read requests.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.l2hits":{aggregationMethod:"avg",info:"

Hit rate of the L2ARC lookups.

Hits - a data block was in the L2ARC cache and returned. Misses - a data block was not in the L2ARC cache. It will be read from the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.demand_data_hits":{aggregationMethod:"avg",info:"

Hit rate of the ARC data demand read requests. Demand requests are triggered by an application request.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.prefetch_data_hits":{aggregationMethod:"avg",info:"

Hit rate of the ARC data prefetch read requests. Prefetch requests are triggered by the prefetch mechanism, not directly from an application request.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.list_hits":{info:"MRU (most recently used) and MFU (most frequently used) cache list hits. MRU and MFU lists contain metadata for requested blocks which are cached. Ghost lists contain metadata of the evicted pages on disk.",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.arc_size_breakdown":{aggregationMethod:"avg",info:"The size of MRU (most recently used) and MFU (most frequently used) cache.",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.memory_ops":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Memory Operation Statistics"}],info:"

Memory operation statistics.

Direct - synchronous memory reclaim. Data is evicted from the ARC and free slabs reaped. Throttled - number of times that ZFS had to limit the ARC growth. A constant increasing of the this value can indicate excessive pressure to evict data from the ARC. Indirect - asynchronous memory reclaim. It reaps free slabs from the ARC cache.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.important_ops":{info:"

Eviction and insertion operation statistics.

EvictSkip - skipped data eviction operations. Deleted - old data is evicted (deleted) from the cache. MutexMiss - an attempt to get hash or data block mutex when it is locked during eviction. HashCollisions - occurs when two distinct data block numbers have the same hash value.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.actual_hits":{aggregationMethod:"avg",info:"

MRU and MFU cache hit rate.

Hits - a data block was in the ARC DRAM cache and returned. Misses - a data block was not in the ARC DRAM cache. It will be read from the L2ARC cache devices (if available and the data is cached on them) or the pool disks.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.hash_elements":{info:"

Data Virtual Address (DVA) hash table element statistics.

Current - current number of elements. Max - maximum number of elements seen.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfs.hash_chains":{info:"

Data Virtual Address (DVA) hash table chain statistics. A chain is formed when two or more distinct data block numbers have the same hash value.

Current - current number of chains. Max - longest length seen for a chain. If the value is high, performance may degrade as the hash locks are held longer while the chains are walked.

",en:{instance:{one:"ZFS system",other:"ZFS systems"}}},"zfspool.state":{info:'ZFS pool state. The overall health of a pool, as reported by zpool status, is determined by the aggregate state of all devices within the pool. For states description, see ZFS documentation.',en:{instance:{one:"ZFS pool",other:"ZFS pools"}}},"zfspool.pool_space_utilization":{info:"Percentage of pool space used.",aggregationMethod:"max",en:{instance:{one:"ZFS pool",other:"ZFS pools"}},mainheads:[{groupBy:["label"],groupByLabel:["pool"],aggregationMethod:"avg",chartLibrary:"bars",title:"Space Usage",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}]},"zfspool.pool_space_usage":{info:"The amount of available and used space in the pool.",en:{instance:{one:"ZFS pool",other:"ZFS pools"}},mainheads:[{groupBy:["label"],groupByLabel:["pool"],selectedDimensions:["free"],chartLibrary:"bars",title:"Space Free",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}]},"zfspool.pool_fragmentation":{info:"The amount of fragmentation in the pool. As the amount of space allocated increases, it becomes more difficult to locate free space. This may result in lower write performance compared to pools with more unfragmented free space.",aggregationMethod:"max",en:{instance:{one:"ZFS pool",other:"ZFS pools"}},mainheads:[{groupBy:["label"],groupByLabel:["pool"],aggregationMethod:"avg",chartLibrary:"bars",title:"Fragmentation",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}]},"zfspool.pool_health_state":{info:'ZFS pool health state. The overall health of a pool, as reported by zpool status, is determined by the aggregate state of all devices within the pool. For states description, see ZFS documentation.',en:{instance:{one:"ZFS pool",other:"ZFS pools"}},mainheads:[{groupBy:["dimension"],chartLibrary:"bars",title:"Health Status",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}]},"mysql.net":{info:"The amount of data sent to mysql clients (out) and received from mysql clients (in).",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.queries":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"No. of Slow Queries",selectedDimensions:["slow_queries"],colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:'The number of statements executed by the server.
  • queries counts the statements executed within stored SQL programs.
  • questions counts the statements sent to the mysql server by mysql clients.
  • slow queries counts the number of statements that took more than long_query_time seconds to be executed. For more information about slow queries check the mysql slow query log.
',en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.handlers":{info:'Usage of the internal handlers of mysql. This chart provides very good insights of what the mysql server is actually doing. (if the chart is not showing all these dimensions it is because they are zero - set Which dimensions to show? to All from the dashboard settings, to render even the zero values)
  • commit, the number of internal COMMIT statements.
  • delete, the number of times that rows have been deleted from tables.
  • prepare, a counter for the prepare phase of two-phase commit operations.
  • read first, the number of times the first entry in an index was read. A high value suggests that the server is doing a lot of full index scans; e.g. SELECT col1 FROM foo, with col1 indexed.
  • read key, the number of requests to read a row based on a key. If this value is high, it is a good indication that your tables are properly indexed for your queries.
  • read next, the number of requests to read the next row in key order. This value is incremented if you are querying an index column with a range constraint or if you are doing an index scan.
  • read prev, the number of requests to read the previous row in key order. This read method is mainly used to optimize ORDER BY ... DESC.
  • read rnd, the number of requests to read a row based on a fixed position. A high value indicates you are doing a lot of queries that require sorting of the result. You probably have a lot of queries that require MySQL to scan entire tables or you have joins that do not use keys properly.
  • read rnd next, the number of requests to read the next row in the data file. This value is high if you are doing a lot of table scans. Generally this suggests that your tables are not properly indexed or that your queries are not written to take advantage of the indexes you have.
  • rollback, the number of requests for a storage engine to perform a rollback operation.
  • savepoint, the number of requests for a storage engine to place a savepoint.
  • savepoint rollback, the number of requests for a storage engine to roll back to a savepoint.
  • update, the number of requests to update a row in a table.
  • write, the number of requests to insert a row in a table.
',en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.table_locks":{info:"MySQL table locks counters:
  • immediate, the number of times that a request for a table lock could be granted immediately.
  • waited, the number of times that a request for a table lock could not be granted immediately and a wait was needed. If this is high and you have performance problems, you should first optimize your queries, and then either split your table or tables or use replication.
",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_deadlocks":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Total No. of Deadlocks",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}}],info:'A deadlock happens when two or more transactions mutually hold and request for locks, creating a cycle of dependencies. For more information about how to minimize and handle deadlocks.',en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_cluster_status":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Galera Cluster Status",colors:s.default[2],layout:{left:6,top:0,width:3,height:5}}],info:"

Status of this cluster component.

Primary - primary group configuration, quorum present. Non-Primary - non-primary group configuration, quorum lost. Disconnected - not connected to group, retrying.

",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_cluster_state":{info:"

Membership state of this cluster component.

Undefined - undefined state. Joining - the node is attempting to join the cluster. Donor - the node has blocked itself while it sends a State Snapshot Transfer (SST) to bring a new node up to date with the cluster. Joined - the node has successfully joined the cluster. Synced - the node has established a connection with the cluster and synchronized its local databases with those of the cluster. Error - the node is not part of the cluster and does not replicate transactions. This state is provider-specific, check wsrep_local_state_comment variable for a description.

",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_cluster_weight":{info:"The value is counted as a sum of pc.weight of the nodes in the current Primary Component.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_connected":{info:"0 means that the node has not yet connected to any of the cluster components. This may be due to misconfiguration.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.open_transactions":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Open Transactions",colors:s.default[3],layout:{left:9,top:0,width:3,height:5}}],info:"The number of locally running transactions which have been registered inside the wsrep provider. This means transactions which have made operations which have caused write set population to happen. Transactions which are read only are not counted.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.table_open_cache_overflows":{info:"The number of overflows in the table open cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the table open cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.join_issues":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"MySQL Join Operation Issues",layout:{left:0,top:5,width:3,height:5}}],info:"The number of issues with joins on the MySQL server. Monitoring this metric can help identify potential performance issues related to joins.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.sort_issues":{info:"The number of issues with sorts on the MySQL server. Monitoring this metric can help identify potential performance issues related to sorting.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.tmp":{info:"The usage of temporary files on the MySQL server. Monitoring this metric can help identify potential performance issues related to temporary files.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.threads_created":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Number of MySQL threads",colors:s.default[4],layout:{left:0,top:5,width:3,height:5}}],info:"The number of threads that have been created on the MySQL server. Monitoring this metric can help identify potential performance issues related to thread creation.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.thread_cache_misses":{info:"The number of thread cache misses on the MySQL server. Monitoring this metric can help identify potential performance issues related to the thread cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_io":{info:"The I/O operations on the InnoDB storage engine on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB storage engine.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_io_ops":{info:"The number of I/O operations on the InnoDB storage engine on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB storage engine.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_io_pending_ops":{info:"The number of pending I/O operations on the InnoDB storage engine on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB storage engine.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_log":{info:"The usage of the InnoDB log on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB log.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_cur_row_lock":{info:"The number of current row locks on the InnoDB storage engine on the MySQL server. Monitoring this metric can help identify potential performance issues related to row locking on the InnoDB storage engine.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_rows":{info:"The number of rows on the InnoDB storage engine on the MySQL server. Monitoring this metric can help identify the usage patterns of the InnoDB storage engine and potential performance issues.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_buffer_pool_pages":{info:"The number of pages in the InnoDB buffer pool on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB buffer pool.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_buffer_pool_pages_flushed":{info:"The number of pages flushed from the InnoDB buffer pool on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB buffer pool.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_buffer_pool_bytes":{info:"The amount of memory used by the InnoDB buffer pool on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB buffer pool.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_buffer_pool_read_ahead":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"InnoDB Buffer Pool Read Ahead",colors:s.default[6],layout:{left:6,top:5,width:3,height:5}}],info:"The amount of read ahead performed by the InnoDB buffer pool on the MySQL server. Monitoring this metric can help identify potential performance issues related to read ahead on the InnoDB buffer.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_buffer_pool_read_ahead_rnd":{info:"The amount of random read ahead performed by the InnoDB buffer pool on the MySQL server. Monitoring this metric can help identify potential performance issues related to random read ahead on the InnoDB buffer pool.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_buffer_pool_ops":{info:"The number of operations on the InnoDB buffer pool on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB buffer pool.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.innodb_os_log":{info:"The usage of the InnoDB OS log on the MySQL server. Monitoring this metric can help identify potential performance issues related to the InnoDB OS log.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.files":{info:"The number of files opened by the MySQL server. Monitoring this metric can help identify potential performance issues related to file opening.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.files_rate":{info:"The rate of file opening by the MySQL server. Monitoring this metric can help identify potential performance issues related to file opening.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.opened_tables":{info:"The number of tables opened by the MySQL server. Monitoring this metric can help identify potential performance issues related to table opening.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.process_list_fetch_query_duration":{info:"The duration of queries in the process list on the MySQL server. Monitoring this metric can help identify potential performance issues related to queries in the process list.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.process_list_longest_query_duration":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"number",title:"Longest Query Duration",colors:s.default[7],layout:{left:9,top:5,width:3,height:5}}],info:"The duration of the longest query in the process list on the MySQL server. Monitoring this metric can help identify potential performance issues related to long running queries in the process list.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.qcache_ops":{info:"The number of operations on the query cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the query cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.qcache":{info:"The usage of the query cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the query cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.qcache_freemem":{info:"The amount of free memory in the query cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the query cache memory usage.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.qcache_memblocks":{info:"The number of memory blocks in the query cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the query cache memory usage.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_bytes":{info:"The number of bytes in the Galera cluster on the MySQL server. Monitoring this metric can help identify potential performance issues related to the Galera cluster.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_queue":{info:"The length of the Galera queue on the MySQL server. Monitoring this metric can help identify potential performance issues related to the Galera cluster.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_flow_control":{info:"The status of the flow control in the Galera cluster on the MySQL server. Monitoring this metric can help identify potential performance issues related to the Galera cluster.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_cluster_size":{info:"The size of the Galera cluster on the MySQL server. Monitoring this metric can help identify potential performance issues related to the Galera cluster.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_ready":{info:"The status of the Galera cluster on the MySQL server, indicating whether it is ready for write sets. Monitoring this metric can help identify potential performance issues related to the Galera cluster.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.galera_open_transactions":{info:"The number of open transactions in the Galera cluster on the MySQL server. Monitoring this metric can help identify potential performance issues related to the Galera cluster.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.key_blocks":{info:"The number of blocks in the key cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the key cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.binlog_cache":{info:"The usage of the binary log cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the binary log cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.binlog_stmt_cache":{info:"The usage of the binary log statement cache on the MySQL server. Monitoring this metric can help identify potential performance issues related to the binary log statement cache.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.slave_behind":{info:"The lag of the slave in the replication on the MySQL server. Monitoring this metric can help identify potential performance issues related to the replication process.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_cpu":{aggregationMethod:"avg",info:"The amount of CPU time used by each user on the MySQL server. Monitoring this metric can help identify potential performance issues related to CPU usage by users.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_rows":{info:"The number of rows accessed by each user on the MySQL server. Monitoring this metric can help identify potential performance issues related to user access to rows.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_commands":{info:"The number of commands executed by each user on the MySQL server. Monitoring this metric can help identify potential performance issues related to user commands.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_denied_commands":{info:"The number of denied commands for each user on the MySQL server. Monitoring this metric can help identify potential security issues related to user commands.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_binlog_written":{info:"The amount of data written to the binary log by each user on the MySQL server. Monitoring this metric can help identify potential performance issues related to the binary log.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_connections":{info:"The number of connections for each user on the MySQL server. Monitoring this metric can help identify potential performance issues related to user connections.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_lost_connections":{info:"The number of lost connections for each user on the MySQL server. Monitoring this metric can help identify potential performance issues related to user connections.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"mysql.userstats_denied_connections":{info:"The number of denied connections for each user on the MySQL server. Monitoring this metric can help identify potential security issues related to user connections.",en:{instance:{one:"MySQL server",other:"MySQL servers"}}},"ping.host_rtt":{aggregationMethod:"avg",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Host Latency",layout:{left:6,top:0,width:3,height:5}}],info:"Round-trip time (RTT) is the time it takes for a data packet to reach its destination and return back to its original source.",en:{instance:{one:"ping host",other:"ping hosts"}}},"ping.host_std_dev_rtt":{aggregationMethod:"avg",info:"Round-trip time (RTT) standard deviation. The average value of how far each RTT of a ping differs from the average RTT.",en:{instance:{one:"ping host",other:"ping hosts"}}},"ping.host_packet_loss":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"gauge",title:"Maximum Host Packet Loss",colors:s.default[1],valueRange:[0,100],layout:{left:9,top:0,width:3,height:5}}],info:"Packet loss occurs when one or more transmitted data packets do not reach their destination. Usually caused by data transfer errors, network congestion or firewall blocking. ICMP echo packets are often treated as lower priority by routers and target hosts, so ping test packet loss may not always translate to application packet loss.",en:{instance:{one:"ping host",other:"ping hosts"}}},"ping.host_packets":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Ping Packets Received",colors:s.default[2],valueRange:[0,null],layout:{left:0,top:0,width:3,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Ping Packets Sent",colors:s.default[1],valueRange:[0,null],layout:{left:3,top:0,width:3,height:5}}],info:"Number of ICMP messages sent and received. These counters should be equal if there is no packet loss.",en:{instance:{one:"ping host",other:"ping hosts"}}},"nvme.device_estimated_endurance_perc":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"gauge",title:"Lowest Endurance on device",valueRange:[0,100],colors:s.default[7],layout:{left:0,top:0,width:3,height:5}}],info:"NVM subsystem lifetime used based on the actual usage and the manufacturer's prediction of NVM life. A value of 100 indicates that the estimated endurance of the device has been consumed, but may not indicate a device failure. The value can be greater than 100 if you use the storage beyond its planned lifetime.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_available_spare_perc":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Available Spare Capacity",valueRange:[0,100],colors:s.default[7],layout:{left:3,top:0,width:3,height:5}}],info:"Remaining spare capacity that is available. SSDs provide a set of internal spare capacity, called spare blocks, that can be used to replace blocks that have reached their write operation limit. After all of the spare blocks have been used, the next block that reaches its limit causes the disk to fail.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_composite_temperature":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"number",title:"Maximum device Temperature",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The current composite temperature of the controller and namespace(s) associated with that controller. The manner in which this value is computed is implementation specific and may not represent the actual temperature of any physical point in the NVM subsystem.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_io_transferred_count":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total IO Transfer per device",colors:s.default[7],layout:{left:9,top:0,width:3,height:5}}],info:"The total amount of data read and written by the host.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_power_cycles_count":{info:"Power cycles reflect the number of times this host has been rebooted or the device has been woken up after sleep. A high number of power cycles does not affect the device's life expectancy.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_power_on_time":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"number",title:"Maximum Power On Time",colors:s.default[7],layout:{left:0,top:5,width:3,height:5}}],info:"Power-on time is the length of time the device is supplied with power.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_unsafe_shutdowns_count":{info:"The number of times a power outage occurred without a shutdown notification being sent. Depending on the NVMe device you are using, an unsafe shutdown can corrupt user data.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_critical_warnings_state":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"number",title:"Maximum No. of Critical / Warnings",colors:s.default[7],layout:{left:3,top:5,width:3,height:5}}],info:"

Critical warnings for the status of the controller. Status active if set to 1.

AvailableSpare - the available spare capacity is below the threshold. TempThreshold - the composite temperature is greater than or equal to an over temperature threshold or less than or equal to an under temperature threshold. NvmSubsystemReliability - the NVM subsystem reliability is degraded due to excessive media or internal errors. ReadOnly - media is placed in read-only mode. VolatileMemBackupFailed - the volatile memory backup device has failed. PersistentMemoryReadOnly - the Persistent Memory Region has become read-only or unreliable.

",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_media_errors_rate":{info:"The number of occurrences where the controller detected an unrecovered data integrity error. Errors such as uncorrectable ECC, CRC checksum failure, or LBA tag mismatch are included in this counter.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_error_log_entries_rate":{info:"The number of entries in the Error Information Log. By itself, an increase in the number of records is not an indicator of any failure condition.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_warning_composite_temperature_time":{info:"The time the device has been operating above the Warning Composite Temperature Threshold (WCTEMP) and below Critical Composite Temperature Threshold (CCTEMP).",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_critical_composite_temperature_time":{info:"The time the device has been operating above the Critical Composite Temperature Threshold (CCTEMP).",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_thermal_mgmt_temp1_transitions_rate":{info:"The number of times the controller has entered lower active power states or performed vendor-specific thermal management actions, minimizing performance impact, to attempt to lower the Composite Temperature due to the host-managed thermal management feature.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_thermal_mgmt_temp2_transitions_rate":{info:"The number of times the controller has entered lower active power states or performed vendor-specific thermal management actions, regardless of the impact on performance (e.g., heavy throttling), to attempt to lower the Combined Temperature due to the host-managed thermal management feature.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_thermal_mgmt_temp1_time":{info:"The amount of time the controller has entered lower active power states or performed vendor-specific thermal management actions, minimizing performance impact, to attempt to lower the Composite Temperature due to the host-managed thermal management feature.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"nvme.device_thermal_mgmt_temp2_time":{info:"The amount of time the controller has entered lower active power states or performed vendor-specific thermal management actions, regardless of the impact on performance (e.g., heavy throttling), to attempt to lower the Combined Temperature due to the host-managed thermal management feature.",en:{instance:{one:"NVMe disk",other:"NVMe disks"}},groupBy:["label"],groupByLabel:["device"]},"postfix.qemails":{info:"The qemails metric represents the number of emails currently in the queue in Postfix. This metric should be monitored to ensure that the queue is not growing too large, which can lead to delays in email delivery.",en:{instance:{one:"mail server",other:"mail servers"}}},"postfix.qsize":{info:"The qsize metric represents the total size of emails currently in the queue in Postfix. This metric should be monitored to ensure that the queue is not growing too large, which can lead to delays in email delivery.",en:{instance:{one:"mail server",other:"mail servers"}}},"postgres.connections_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average Connections Utilization",colors:s.default[14],layout:{left:0,top:0,width:2.5,height:5}}],info:"

A connection is an established line of communication between a client and the PostgreSQL server. Each connection adds to the load on the PostgreSQL server. To guard against running out of memory or overloading the database the max_connections parameter (default = 100) defines the maximum number of concurrent connections to the database server. A separate parameter, superuser_reserved_connections (default = 3), defines the quota for superuser connections (so that superusers can connect even if all other connection slots are blocked).


Total connection utilization across all databases. Utilization is measured as a percentage of (max_connections - superuser_reserved_connections). If the utilization is 100% no more new connections will be accepted (superuser connections will still be accepted if superuser quota is available).

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.connections_usage":{info:"

Connections usage across all databases. The maximum number of concurrent connections to the database server is (max_connections - superuser_reserved_connections). As a general rule, if you need more than 200 connections it is advisable to use connection pooling.

Available - new connections allowed. Used - connections currently in use.

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.connections_state_count":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Connection State Count",layout:{left:9,top:0,width:2.5,height:5}}],en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.transactions_duration":{aggregationMethod:"avg",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.queries_duration":{aggregationMethod:"avg",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top Queries by Duration",layout:{left:0,top:10,width:4.5,height:5}}],info:"Active queries duration histogram. The bins are specified as consecutive, non-overlapping intervals. The value is the number of observed active queries that fall into each interval.",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.checkpoints_rate":{info:'

Number of checkpoints that have been performed. Checkpoints are periodic maintenance operations the database performs to make sure that everything it\'s been caching in memory has been synchronized with the disk. Ideally checkpoints should be time-driven (scheduled) as opposed to load-driven (requested).

Scheduled - checkpoints triggered as per schedule when time elapsed from the previous checkpoint is greater than checkpoint_timeout. Requested - checkpoints triggered due to WAL updates reaching the max_wal_size before the checkpoint_timeout is reached.

',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.checkpoints_time":{info:"

Checkpoint timing information. An important indicator of how well checkpoint I/O is performing is the amount of time taken to sync files to disk.

Write - amount of time spent writing files to disk during checkpoint processing. Sync - amount of time spent synchronizing files to disk during checkpoint processing.

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.buffers_allocated_rate":{info:"Allocated and re-allocated buffers. If a backend process requests data it is either found in a block in shared buffer cache or the block has to be allocated (read from disk). The latter is counted as Allocated.",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.buffers_io_rate":{info:"

Amount of data flushed from memory to disk.

Checkpoint - buffers written during checkpoints. Backend - buffers written directly by a backend. It may happen that a dirty page is requested by a backend process. In this case the page is synced to disk before the page is returned to the client. BgWriter - buffers written by the background writer. PostgreSQL may clear pages with a low usage count in advance. The process scans for dirty pages with a low usage count so that they could be cleared if necessary. Buffers written by this process increment the counter.

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.bgwriter_halts_rate":{info:'Number of times the background writer stopped a cleaning scan because it had written too many buffers (exceeding the value of bgwriter_lru_maxpages).',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.buffers_backend_fsync_rate":{info:"Number of times a backend had to execute its own fsync call (normally the background writer handles those even when the backend does its own write). Any values above zero can indicate problems with storage when fsync queue is completely filled.",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.wal_io_rate":{info:"Write-Ahead Logging (WAL) ensures data integrity by ensuring that changes to data files (where tables and indexes reside) are written only after log records describing the changes have been flushed to permanent storage.",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.wal_files_count":{info:"

Number of WAL logs stored in the directory pg_wal under the data directory.

Written - generated log segments files. Recycled - old log segment files that are no longer needed. Renamed to become future segments in the numbered sequence to avoid the need to create new ones.

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.wal_archiving_files_count":{info:'

WAL archiving.

Ready - WAL files waiting to be archived. A non-zero value can indicate archive_command is in error, see Continuous Archiving and Point-in-Time Recovery. Done - WAL files successfully archived.',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.autovacuum_workers_count":{info:'PostgreSQL databases require periodic maintenance known as vacuuming. For many installations, it is sufficient to let vacuuming be performed by the autovacuum daemon. For more information see The Autovacuum Daemon.',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.txid_exhaustion_towards_autovacuum_perc":{aggregationMethod:"avg",info:'Percentage towards emergency autovacuum for one or more tables. A forced autovacuum will run once this value reaches 100%. For more information see Preventing Transaction ID Wraparound Failures.',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.txid_exhaustion_perc":{aggregationMethod:"avg",info:'Percentage towards transaction wraparound. A transaction wraparound may occur when this value reaches 100%. For more information see Preventing Transaction ID Wraparound Failures.',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.txid_exhaustion_oldest_txid_num":{info:'The oldest current transaction ID (XID). If for some reason autovacuum fails to clear old XIDs from a table, the system will begin to emit warning messages when the database\'s oldest XIDs reach eleven million transactions from the wraparound point. For more information see Preventing Transaction ID Wraparound Failures.',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:12,top:0,width:2.5,height:1.66}}],info:"The time elapsed since the Postgres process was started.",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.replication_app_wal_lag_size":{info:"

Replication WAL lag size.

SentLag - sent over the network. WriteLag - written to disk. FlushLag - flushed to disk. ReplayLag - replayed into the database.

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.replication_app_wal_lag_time":{info:"

Replication WAL lag time.

WriteLag - time elapsed between flushing recent WAL locally and receiving notification that the standby server has written it, but not yet flushed it or applied it. FlushLag - time elapsed between flushing recent WAL locally and receiving notification that the standby server has written and flushed it, but not yet applied it. ReplayLag - time elapsed between flushing recent WAL locally and receiving notification that the standby server has written, flushed and applied it.

",en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.replication_slot_files_count":{info:'

Replication slot files. For more information see Replication Slots.

WalKeep - WAL files retained by the replication slot. PgReplslotFiles - files present in pg_replslot.

',en:{instance:{one:"postgres server",other:"postgres servers"}}},"postgres.db_transactions_ratio":{aggregationMethod:"avg",info:"Percentage of committed/rollback transactions.",en:{instance:{one:"database",other:"databases"}}},"postgres.db_transactions_rate":{info:"

Number of transactions that have been performed

Committed - transactions that have been committed. All changes made by the committed transaction become visible to others and are guaranteed to be durable if a crash occurs. Rollback - transactions that have been rolled back. Rollback aborts the current transaction and causes all the updates made by the transaction to be discarded. Single queries that have failed outside the transactions are also accounted as rollbacks.

",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_connections_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["database"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Connections Utilization per Database",layout:{left:0,top:5,width:2.5,height:5}}],info:"Connection utilization per database. Utilization is measured as a percentage of CONNECTION LIMIT per database (if set) or max_connections (if CONNECTION LIMIT is not set).",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_connections_count":{info:"Number of current connections per database.",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_cache_io_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average Cache Miss Ratio",colors:s.default[1],layout:{left:6,top:0,width:2.5,height:5}},{groupBy:["label"],groupByLabel:["database"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Cache Miss Ratio per DB",layout:{left:6,top:5,width:2.5,height:5}}],info:'PostgreSQL uses a shared buffer cache to store frequently accessed data in memory, and avoid slower disk reads. If you are seeing performance issues, consider increasing the shared_buffers size or tuning effective_cache_size.',en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_io_rate":{info:"

Amount of data read from shared buffer cache or from disk.

Disk - data read from disk. Memory - data read from buffer cache (this only includes hits in the PostgreSQL buffer cache, not the operating system's file system cache).

",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_ops_fetched_rows_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Avg Fetched Row Ratio",colors:s.default[10],layout:{left:3,top:0,width:2,height:5}},{groupBy:["label"],groupByLabel:["database"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Fetched Row Ratio per DB",layout:{left:3,top:5,width:2,height:5}}],info:"The percentage of rows that contain data needed to execute the query, out of the total number of rows scanned. A high value indicates that the database is executing queries efficiently, while a low value indicates that the database is performing extra work by scanning a large number of rows that aren't required to process the query. Low values may be caused by missing indexes or inefficient queries.",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_ops_read_rows_rate":{info:"

Read queries throughput.

Returned - Total number of rows scanned by queries. This value indicates rows returned by the storage layer to be scanned, not rows returned to the client. Fetched - Subset of scanned rows (Returned) that contained data needed to execute the query.

",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_ops_write_rows_rate":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Rows Written per Database",layout:{left:9,top:5,width:2.5,height:5}}],info:"

Write queries throughput.

Inserted - number of rows inserted by queries. Deleted - number of rows deleted by queries. Updated - number of rows updated by queries.

",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_conflicts_rate":{info:'Number of queries canceled due to conflict with recovery on standby servers. To minimize query cancels caused by cleanup records consider configuring hot_standby_feedback.',en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_conflicts_reason_rate":{info:"

Statistics about queries canceled due to various types of conflicts on standby servers.

Tablespace - queries that have been canceled due to dropped tablespaces. Lock - queries that have been canceled due to lock timeouts. Snapshot - queries that have been canceled due to old snapshots. Bufferpin - queries that have been canceled due to pinned buffers. Deadlock - queries that have been canceled due to deadlocks.

",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_deadlocks_rate":{info:"Number of detected deadlocks. When a transaction cannot acquire the requested lock within a certain amount of time (configured by deadlock_timeout), it begins deadlock detection.",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_locks_held_count":{info:'Number of held locks. Some of these lock modes are acquired by PostgreSQL automatically before statement execution, while others are provided to be used by applications. All lock modes acquired in a transaction are held for the duration of the transaction. For lock modes details, see table-level locks.',en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_locks_awaited_count":{info:'Number of awaited locks. It indicates that some transaction is currently waiting to acquire a lock, which implies that some other transaction is holding a conflicting lock mode on the same lockable object. For lock modes details, see table-level locks.',en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_temp_files_created_rate":{info:"Number of temporary files created by queries. Complex queries may require more memory than is available (specified by work_mem). When this happens, Postgres reverts to using temporary files - they are actually stored on disk, but only exist for the duration of the request. After the request returns, the temporary files are deleted.",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_temp_files_io_rate":{info:"Amount of data written temporarily to disk to execute queries.",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.db_size":{mainheads:[{groupBy:["label"],groupByLabel:["database"],chartLibrary:"bars",title:"Database Sizes",dimensionsSort:"valueDesc",layout:{left:12,top:5,width:2.5,height:5}},{chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Total Database Size",layout:{left:12,top:3.33,width:2.5,height:1.66}}],info:"Actual on-disk usage of the database's data directory and any associated tablespaces.",en:{instance:{one:"database",other:"databases"}},groupBy:["label"],groupByLabel:["database"]},"postgres.databases_count":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Total Database count",layout:{left:12,top:1.66,width:2.5,height:1.66}}],info:"Count of databases per PostgreSQL server.",en:{instance:{one:"postgres server",other:"postgres servers"}}},"pgbouncer.client_connections_utilization":{aggregationMethod:"avg",info:"Client connections in use as percentage of max_client_conn (default 100)."},"pgbouncer.db_client_connections":{info:"

Client connections in different states.

Active - linked to server connection and can process queries. Waiting - have sent queries but have not yet got a server connection. CancelReq - have not forwarded query cancellations to the server yet.

"},"pgbouncer.db_server_connections":{info:"

Server connections in different states.

Active - linked to a client. Idle - unused and immediately usable for client queries. Used - have been idle for more than server_check_delay, so they need server_check_query to run on them before they can be used again. Tested - currently running either server_reset_query or server_check_query. Login - currently in the process of logging in.

"},"pgbouncer.db_server_connections_utilization":{aggregationMethod:"avg",info:"Server connections in use as percentage of max_db_connections (default 0 - unlimited). This considers the PgBouncer database that the client has connected to, not the PostgreSQL database of the outgoing connection."},"pgbouncer.db_clients_wait_time":{info:"Time spent by clients waiting for a server connection. This shows if the decrease in database performance from the client's point of view was due to exhaustion of the corresponding PgBouncer pool."},"pgbouncer.db_client_max_wait_time":{info:"Waiting time for the first (oldest) client in the queue. If this starts increasing, then the current pool of servers does not handle requests quickly enough."},"pgbouncer.db_transactions":{info:"SQL transactions pooled (proxied) by pgbouncer."},"pgbouncer.db_transactions_time":{info:"Time spent by pgbouncer when connected to PostgreSQL in a transaction, either idle in transaction or executing queries."},"pgbouncer.db_transaction_avg_time":{info:"Average transaction duration."},"pgbouncer.db_queries":{info:"SQL queries pooled (proxied) by pgbouncer."},"pgbouncer.db_queries_time":{info:"Time spent by pgbouncer when actively connected to PostgreSQL, executing queries."},"pgbouncer.db_query_avg_time":{info:"Average query duration."},"pgbouncer.db_network_io":{info:"

Network traffic received and sent by pgbouncer.

Received - received from clients. Sent - sent to servers.

"},"postgres.table_rows_dead_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average Dead Row Ratio",colors:s.default[10],layout:{left:12,top:10,width:2.5,height:5}}],info:"Percentage of dead rows. An increase in dead rows indicates a problem with VACUUM processes, which can slow down your queries.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_rows_count":{info:"

Number of rows. When you do an UPDATE or DELETE, the row is not actually physically deleted. For a DELETE, the database simply marks the row as unavailable for future transactions, and for UPDATE, under the hood it is a combined INSERT then DELETE, where the previous version of the row is marked unavailable.

Live - rows that currently in use and can be queried. Dead - deleted rows that will later be reused for new rows from INSERT or UPDATE.

",en:{instance:{one:"table",other:"tables"}}},"postgres.table_ops_rows_rate":{info:"Write queries throughput. If you see a large number of updated and deleted rows, keep an eye on the number of dead rows, as a high percentage of dead rows can slow down your queries.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_ops_rows_hot_ratio":{aggregationMethod:"avg",info:"Percentage of HOT (Heap Only Tuple) updated rows. HOT updates are much more efficient than ordinary updates: less write operations, less WAL writes, vacuum operation has less work to do, increased read efficiency (help to limit table and index bloat).",en:{instance:{one:"table",other:"tables"}}},"postgres.table_ops_rows_hot_rate":{info:"Number of HOT (Heap Only Tuple) updated rows.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_cache_io_ratio":{aggregationMethod:"avg",info:"Table cache inefficiency. Percentage of data read from disk. Lower is better.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_io_rate":{info:"

Amount of data read from shared buffer cache or from disk.

Disk - data read from disk. Memory - data read from buffer cache (this only includes hits in the PostgreSQL buffer cache, not the operating system's file system cache).

",en:{instance:{one:"table",other:"tables"}}},"postgres.table_index_cache_io_ratio":{aggregationMethod:"avg",info:"Table indexes cache inefficiency. Percentage of data read from disk. Lower is better.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_index_io_rate":{info:"

Amount of data read from all indexes from shared buffer cache or from disk.

Disk - data read from disk. Memory - data read from buffer cache (this only includes hits in the PostgreSQL buffer cache, not the operating system's file system cache).

",en:{instance:{one:"table",other:"tables"}}},"postgres.table_toast_cache_io_ratio":{aggregationMethod:"avg",info:"Table TOAST cache inefficiency. Percentage of data read from disk. Lower is better.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_toast_io_rate":{info:"

Amount of data read from TOAST table from shared buffer cache or from disk.

Disk - data read from disk. Memory - data read from buffer cache (this only includes hits in the PostgreSQL buffer cache, not the operating system's file system cache).

",en:{instance:{one:"table",other:"tables"}}},"postgres.table_toast_index_cache_io_ratio":{aggregationMethod:"avg",info:"Table TOAST indexes cache inefficiency. Percentage of data read from disk. Lower is better.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_toast_index_io_rate":{info:"

Amount of data read from this table's TOAST table indexes from shared buffer cache or from disk.

Disk - data read from disk. Memory - data read from buffer cache (this only includes hits in the PostgreSQL buffer cache, not the operating system's file system cache).

",en:{instance:{one:"table",other:"tables"}}},"postgres.table_scans_rate":{info:"

Number of scans initiated on this table. If you see that your database regularly performs more sequential scans over time, you can improve its performance by creating an index on data that is frequently accessed.

Index - relying on an index to point to the location of specific rows. Sequential - have to scan through each row of a table sequentially. Typically, take longer than index scans.

",en:{instance:{one:"table",other:"tables"}}},"postgres.table_scans_rows_rate":{info:"Number of live rows fetched by scans.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_autovacuum_since_time":{aggregationMethod:"min",info:"Time elapsed since this table was vacuumed by the autovacuum daemon.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_vacuum_since_time":{aggregationMethod:"min",info:"Time elapsed since this table was manually vacuumed (not counting VACUUM FULL).",en:{instance:{one:"table",other:"tables"}}},"postgres.table_autoanalyze_since_time":{aggregationMethod:"min",info:"Time elapsed this table was analyzed by the autovacuum daemon.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_analyze_since_time":{aggregationMethod:"min",info:"Time elapsed since this table was manually analyzed.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_null_columns":{info:"Number of table columns that contain only NULLs.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_total_size":{info:"Actual on-disk size of the table.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_bloat_size_perc":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average Table Bloat %",colors:s.default[1],layout:{left:9,top:10,width:2.5,height:5}}],info:"Estimated percentage of bloat in the table. It is normal for tables that are updated frequently to have a small to moderate amount of bloat.",en:{instance:{one:"table",other:"tables"}}},"postgres.table_bloat_size":{info:'Disk space that was used by the table and is available for reuse by the database but has not been reclaimed. Bloated tables require more disk storage and additional I/O that can slow down query execution. Running VACUUM regularly on a table that is updated frequently results in fast reuse of space occupied by expired rows, which prevents the table from growing too large.',en:{instance:{one:"table",other:"tables"}}},"postgres.index_size":{info:"Actual on-disk size of the index.",en:{instance:{one:"index",other:"indexes"}}},"postgres.index_bloat_size_perc":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average Index Bloat %",colors:s.default[1],layout:{left:9,top:10,width:2.5,height:5}}],info:"Estimated percentage of bloat in the index.",en:{instance:{one:"index",other:"indexes"}}},"postgres.index_bloat_size":{info:'Disk space that was used by the index and is available for reuse by the database but has not been reclaimed. Bloat slows down your database and eats up more storage than needed. To recover the space from indexes, recreate them using the REINDEX command.',en:{instance:{one:"index",other:"indexes"}}},"postgres.index_usage_status":{info:"An index is considered unused if no scans have been initiated on that index.",en:{instance:{one:"index",other:"indexes"}}},"puppet.jvm_heap":{info:"The jvm_heap metric represents the size of the Java Virtual Machine's heap memory in Puppet. This metric should be monitored to ensure that sufficient memory is allocated for Puppet to operate correctly."},"puppet.jvm_nonheap":{info:"The jvm_nonheap metric represents the size of the Java Virtual Machine's non-heap memory in Puppet. This metric should be monitored to ensure that sufficient memory is allocated for Puppet to operate correctly."},"puppet.cpu":{aggregationMethod:"avg",info:"The cpu metric represents the amount of CPU resources being used by Puppet. This metric should be monitored to ensure that the CPU is not being overutilized and to detect any potential performance issues."},"puppet.fd_open":{info:"The fd_open metric represents the number of open file descriptors in Puppet. This metric should be monitored to ensure that the system is not running out of available file descriptors, which can lead to performance issues."},"redis.ping_latency":{aggregationMethod:"avg",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Ping Latency",layout:{left:3,top:0,width:2,height:5}}],info:"The average time it takes from a client request to the server response. High latency could be caused slow commands, over utilized network links or a high backlog in the command queue.",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.commands":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Commands",layout:{left:0,top:0,width:2,height:5}}],info:"The Total number of commands processed per second. A significant or unexpected shift in this metric could indicate a problem worth investigating.",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.keyspace_lookup_hit_rate":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average Lookup Hit Rate",colors:s.default[0],layout:{left:6,top:0,width:2,height:5}}],info:"Lookup Hitrate = (Keyspace hits / (Keyspace hits + Keyspace misses))
Lower hitrates lead to higher latency, in normal conditions this value should be greater than 80%.",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.mem_fragmentation_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",valueRange:[0,100],chartLibrary:"gauge",title:"Max Memory Fragmentation Ratio",colors:s.default[1],layout:{left:9,top:0,width:2,height:5}}],info:"The ratio of memory allocated by the operating system to memory requested by Redis (used_memory_rss/used_memory).",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:12,top:0,width:2,height:2.5}}],en:{instance:{one:"redis server",other:"redis servers"}}},"redis.clients":{mainheads:[{chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Total Connected Clients",layout:{left:12,top:2.5,width:2,height:2.5}}],info:"The current state of clients connecting to or attempting to connect to Redis.",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.commands_calls":{info:"Total commands processed per second, by command type. Use this chart to identify most common commands being processed.",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.master_last_io_since_time":{aggregationMethod:"min",info:"Time in seconds since the last interaction between replica and primary. A long time interval without communication could indicate a problem on the primary Redis server or on the replica or in the link between them.",en:{instance:{one:"redis server",other:"redis servers"}}},"redis.master_link_down_since_time":{aggregationMethod:"min",info:"Time in seconds since the link between replica and primary went down. This metric is only available when the connection between a primary and its replica has been lost. Any non zero value for this metric is cause for alert.",en:{instance:{one:"redis server",other:"redis servers"}}},"cassandra.client_requests_rate":{info:"Client requests received per second. Consider whether your workload is read-heavy or write-heavy while choosing a compaction strategy."},"cassandra.client_request_read_latency_histogram":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Read latency (99th percentile)",selectedDimensions:["p99"],colors:s.default[12],layout:{left:7.5,top:0,width:2.25,height:5}}],info:"Histogram for read latency, with bins for 50th, 75th, 90th, 95th, 98th, 99th and 99.9th percentile latency values.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.client_request_write_latency_histogram":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Write latency (99th percentile)",selectedDimensions:["p99"],layout:{left:9.75,top:0,width:2.25,height:5}}],info:"Histogram for write latency, with bins for 50th, 75th, 90th, 95th, 98th, 99th and 99.9th percentile latency values.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.client_requests_latency":{aggregationMethod:"avg",info:"Total response latency summed over all requests received per second. Latency could be impacted by disk access, network latency or replication configuration.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.key_cache_hit_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Key Cache Hit Ratio",valueRange:[0,100],colors:s.default[2],layout:{left:4.5,top:0,width:3,height:5}}],info:"Key cache hit ratio indicates the efficiency of the key cache. If ratio is consistently < 80% consider increasing cache size.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.key_cache_hit_rate":{aggregationMethod:"avg",info:"Key cache hit rate measures the cache hits and misses per second.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.storage_live_disk_space_used":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Total Live Disk Space Used",layout:{left:2.25,top:0,width:2.25,height:5}}],info:"Amount of live disk space used. This does not include obsolete data waiting to be garbage collected.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.compaction_completed_tasks_rate":{info:"Compaction tasks completed per second.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.compaction_pending_tasks_count":{info:"Total compaction tasks in queue.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.thread_pool_active_tasks_count":{info:"Total tasks currently being processed.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.thread_pool_pending_tasks_count":{info:"Total tasks in queue awaiting a thread for processing.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.thread_pool_blocked_tasks_rate":{info:"Tasks that cannot be queued for processing yet.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.thread_pool_blocked_tasks_count":{info:"Total tasks that cannot yet be queued for processing.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.jvm_gc_rate":{info:"Rate of garbage collections.

ParNew - young-generation. cms (ConcurrentMarkSweep) - old-generation.

",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.jvm_gc_time":{aggregationMethod:"min",info:"Elapsed time of garbage collection.

ParNew - young-generation. cms (ConcurrentMarkSweep) - old-generation.

",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.client_requests_timeouts_rate":{info:"Requests which were not acknowledged within the configurable timeout window.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.client_requests_unavailables_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Unavailable exceptions",colors:s.default[1],layout:{left:0,top:0,width:2.25,height:5}}],info:"Requests for which the required number of nodes was unavailable.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.row_cache_hit_ratio":{aggregationMethod:"avg",info:"Row cache hit ratio indicates the efficiency of the row cache. If ratio is consistently < 80% consider increasing cache size.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.row_cache_hit_rate":{aggregationMethod:"avg",info:"Row cache hit rate measures the cache hits and misses per second.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.row_cache_utilization":{aggregationMethod:"avg",info:"The percentage of row cache memory currently in use. High utilization may indicate the need to increase cache size.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.row_cache_size":{info:"The size of the row cache in bytes. Adjusting this value can impact system performance.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.key_cache_utilization":{aggregationMethod:"avg",info:"The percentage of key cache memory currently in use. High utilization may indicate the need to increase cache size.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.key_cache_size":{info:"The size of the key cache in bytes. Adjusting this value can impact system performance.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.compaction_compacted_rate":{info:"The rate at which compactions are occurring in the system. If this rate is consistently high, it may indicate a need for more resources or a different compaction strategy.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.jvm_memory_used":{info:"The amount of memory used by the Cassandra JVM. High memory usage may indicate the need for additional resources or optimization.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.dropped_messages_rate":{info:"The rate at which messages are being dropped by the system. High rates may indicate a need for additional resources or a problem with the system.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"cassandra.client_requests_failures_rate":{info:"The rate at which client requests are failing. High rates may indicate a problem with the system or the need for additional resources.",en:{instance:{one:"cassandra server",other:"cassandra servers"}}},"clickhouse.connections":{info:"Active connections. TCP - connections to TCP server (clients with native interface), also included server-server distributed query connections. HTTP - connections to HTTP server. MyQSL - client connections using MySQL protocol. PostgreSQL - client connections using PostgreSQL protocol. InterServer - connections from other replicas to fetch parts."},"clickhouse.slow_reads":{info:"Number of reads from a file that were slow. This indicate system overload. Thresholds are controlled by read_backoff_* settings.",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"number",title:"Slow Reads",valueRange:[0,null],colors:s.default[3],layout:{left:9,top:0,width:3,height:4}}]},"clickhouse.read_backoff":{info:"Number of times the number of query processing threads was lowered due to slow reads."},"clickhouse.memory_usage":{info:"Total amount of memory allocated by the server.",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"gauge",title:"Memory Usage",valueRange:[0,null],colors:s.default[10],layout:{left:0,top:4,width:3,height:4}}]},"clickhouse.running_queries":{info:"Number of executing queries.",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"number",title:"Running Queries",valueRange:[0,null],colors:s.default[0],layout:{left:0,top:0,width:3,height:4}}]},"clickhouse.queries":{info:"Successful - queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries.",mainheads:[{groupBy:["dimension"],aggregationMethod:"sum",chartLibrary:"bars",title:"Queries/second",valueRange:[0,null],colors:s.default[0],layout:{left:3,top:0,width:3,height:4}}]},"clickhouse.select_queries":{info:"Successful - SELECT queries to be interpreted and potentially executed. May include internal queries initiated by ClickHouse itself. Does not count subqueries."},"clickhouse.select_queries":{info:"Successful - INSERT queries to be interpreted and potentially executed. May include internal queries initiated by ClickHouse itself. Does not count subqueries."},"clickhouse.queries_preempted":{info:"Number of queries that are stopped and waiting due to 'priority' setting."},"clickhouse.queries_memory_limit_exceeded":{info:"Number of times when memory limit exceeded for query."},"clickhouse.queries_latency":{info:"Total time of all queries.",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"number",title:"Queries Latency",valueRange:[0,null],colors:s.default[4],layout:{left:6,top:0,width:3,height:4}}]},"clickhouse.select_queries_latency":{info:"Total time of all SELECT queries."},"clickhouse.insert_queries_latency":{info:"Total time of all INSERT queries."},"clickhouse.io":{info:"Reads - number of bytes read from file descriptors. If the file is compressed, this will show the compressed data size. Writes - number of writes (write/pwrite) to a file descriptor. Does not include sockets.",mainheads:[{groupBy:["selected"],selectedDimensions:["reads"],chartLibrary:"easypiechart",title:"Read IO",valueRange:[0,null],colors:s.default[2],layout:{left:3,top:4,width:3,height:4}},{groupBy:["selected"],selectedDimensions:["writes"],chartLibrary:"easypiechart",title:"Write IO",valueRange:[0,null],colors:s.default[1],layout:{left:6,top:4,width:3,height:4}}]},"clickhouse.iops":{info:"Reads - number of reads (read/pread) from a file descriptor. Does not include sockets. Writes - number of writes (write/pwrite) to a file descriptor. Does not include sockets."},"clickhouse.io_errors":{info:"Read - number of times the read (read/pread) from a file descriptor have failed. Write - number of times the write (write/pwrite) to a file descriptor have failed.",mainheads:[{groupBy:["selected"],aggregationMethod:"sum",chartLibrary:"gauge",title:"IO Errors",valueRange:[0,null],colors:s.default[1],layout:{left:9,top:4,width:3,height:4}}]},"clickhouse.io_seeks":{info:"Number of times the 'lseek' function was called."},"clickhouse.io_file_opens":{info:"Number of files opened."},"clickhouse.replicated_parts_current_activity":{info:"Fetch - number of data parts being fetched from replica. Send - number of data parts being sent to replicas. Check - number of data parts checking for consistency."},"clickhouse.replicated_readonly_tables":{info:"Number of replicas skipped during INSERT into Distributed table due to replicas being read-only."},"clickhouse.replicated_data_loss":{info:"Number of times a data part that we wanted doesn't exist on any replica (even on replicas that are offline right now). That data parts are definitely lost. This is normal due to asynchronous replication (if quorum inserts were not enabled), when the replica on which the data part was written was failed and when it became online after fail it doesn't contain that data part."},"clickhouse.replicated_part_fetches":{info:"Successful - number of times a data part was downloaded from replica of a ReplicatedMergeTree table. Failed - number of times a data part was failed to download from replica of a ReplicatedMergeTree table."},"clickhouse.replicated_part_fetches_of_merged":{info:"Number of times data parts of ReplicatedMergeTree tables were successfully merged."},"clickhouse.replicated_part_merges":{info:"Number of times data parts of ReplicatedMergeTree tables were successfully merged."},"clickhouse.inserted_bytes":{info:"Number of bytes (uncompressed; for columns as they stored in memory) INSERTed to all tables."},"clickhouse.inserted_rows":{info:"Number of rows INSERTed to all tables."},"clickhouse.rejected_inserts":{info:"Number of times the INSERT of a block to a MergeTree table was rejected with 'Too many parts' exception due to high number of active data parts for partition."},"clickhouse.delayed_inserts":{info:"Number of times the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition."},"clickhouse.delayed_inserts_throttle_time":{info:"Total number of milliseconds spent while the INSERT of a block to a MergeTree table was throttled due to high number of active data parts for partition."},"clickhouse.selected_bytes":{info:"Number of bytes (uncompressed; for columns as they stored in memory) SELECTed from all tables."},"clickhouse.selected_rows":{info:"Number of rows SELECTed from all tables."},"clickhouse.selected_parts":{info:"Number of data parts selected to read from a MergeTree table."},"clickhouse.selected_ranges":{info:"Number of (non-adjacent) ranges in all data parts selected to read from a MergeTree table."},"clickhouse.selected_marks":{info:"Number of marks (index granules) selected to read from a MergeTree table."},"clickhouse.merges":{info:"Number of launched background merges."},"clickhouse.merges_latency":{info:"Total time spent for background merges."},"clickhouse.merged_uncompressed_bytes":{info:"Uncompressed bytes (for columns as they stored in memory) that was read for background merges. This is the number before merge."},"clickhouse.merged_rows":{info:"Rows read for background merges. This is the number of rows before merge."},"clickhouse.merge_tree_data_writer_inserted_rows":{info:"Uncompressed bytes (for columns as they stored in memory) INSERTed to MergeTree tables."},"clickhouse.merge_tree_data_writer_compressed_bytes":{info:"Bytes written to filesystem for data INSERTed to MergeTree tables."},"clickhouse.uncompressed_cache_requests":{info:"Hits - number of times a block of data has been found in the uncompressed cache (and decompression was avoided). Misses - number of times a block of data has not been found in the uncompressed cache (and required decompression)."},"clickhouse.mark_cache_requests":{info:"Hits - number of times an entry has been found in the mark cache, so we didn't have to load a mark file. Misses - number of times an entry has not been found in the mark cache, so we had to load a mark file in memory, which is a costly operation, adding to query latency."},"clickhouse.parts_count":{info:"Temporary - the part is generating now, it is not in data_parts list. PreActive - the part is in data_parts, but not used for SELECTs. Active - active data part, used by current and upcoming SELECTs. Deleting - not active data part with identity refcounter, it is deleting right now by a cleaner. DeleteOnDestroy - the part was moved to another disk and should be deleted in own destructor. Outdated - not active data part, but could be used by only current SELECTs, could be deleted after SELECTs finishes. Wide - wide parts. Compact - compact parts.",mainheads:[{groupBy:["dimension"],aggregationMethod:"sum",chartLibrary:"bars",title:"Parts",dimensionsSort:"valueDesc",valueRange:[0,null],layout:{left:6,top:8,width:3,height:4}}]},"clickhouse.distributed_connections":{info:"Number of connections to remote servers sending data that was INSERTed into Distributed tables. Both synchronous and asynchronous mode."},"clickhouse.distributed_connections_attempts":{info:"Total count of distributed connection attempts."},"clickhouse.distributed_connections_fail_retries":{info:"Total count when distributed connection fails with retry."},"clickhouse.distributed_connections_fail_exhausted_retries":{info:"Total count when distributed connection fails after all retries finished."},"clickhouse.distributed_files_to_insert":{info:"Number of pending files to process for asynchronous insertion into Distributed tables. Number of files for every shard is summed."},"clickhouse.distributed_rejected_inserts":{info:"Number of times the INSERT of a block to a Distributed table was rejected with 'Too many bytes' exception due to high number of pending bytes."},"clickhouse.distributed_delayed_inserts":{info:"Number of times the INSERT of a block to a Distributed table was throttled due to high number of pending bytes."},"clickhouse.distributed_delayed_inserts_latency":{info:"Total number of milliseconds spent while the INSERT of a block to a Distributed table was throttled due to high number of pending bytes."},"clickhouse.distributed_sync_insertion_timeout_exceeded":{info:"A timeout has exceeded while waiting for shards during synchronous insertion into a Distributed table (with 'distributed_foreground_insert' = 1)."},"clickhouse.distributed_async_insertions_failures":{info:"Number of failures for asynchronous insertion into a Distributed table (with 'distributed_foreground_insert' = 0)."},"clickhouse.uptime":{info:"The server uptime. It includes the time spent for server initialization before accepting connections.",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:9,top:8,width:3,height:4}}]},"clickhouse.disk_space_usage":{mainheads:[{groupBy:["label"],groupByLabel:["disk_name"],aggregationMethod:"sum",chartLibrary:"bars",title:"Free Disk Space",dimensionsSort:"valueAsc",valueRange:[0,null],layout:{left:0,top:8,width:3,height:4}}],en:{instance:{one:"disk",other:"disks"}}},"clickhouse.database_table_size":{en:{instance:{one:"table",other:"tables"}},mainheads:[{groupBy:["label"],groupByLabel:["database"],aggregationMethod:"sum",chartLibrary:"bars",title:"Database Size",dimensionsSort:"valueDesc",valueRange:[0,null],layout:{left:3,top:8,width:3,height:4}}]},"clickhouse.database_table_parts":{en:{instance:{one:"table",other:"tables"}}},"clickhouse.database_table_rows":{en:{instance:{one:"table",other:"tables"}}},"coredns.dns_request_count_total":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total DNS Requests",colors:s.default[12],layout:{left:0,top:0,width:2.5,height:5}}],info:"The total number of DNS requests handled by CoreDNS. This can be useful for understanding overall system load and potential bottlenecks.",en:{instance:{one:"coredns server",other:"coredns servers"}}},"coredns.dns_responses_count_total":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total DNS Responses",colors:s.default[2],layout:{left:6,top:0,width:2.5,height:5}}],info:"The total number of DNS responses sent by CoreDNS. This can be useful for understanding overall system load and potential bottlenecks.",en:{instance:{one:"coredns server",other:"coredns servers"}}},"coredns.dns_no_matching_zone_dropped_total":{info:"The total number of DNS requests dropped by CoreDNS because no matching zone was found. This can be useful for identifying potential configuration issues.",en:{instance:{one:"coredns server",other:"coredns servers"}}},"coredns.dns_panic_count_total":{info:"The total number of panics that occurred in CoreDNS. This can be useful for identifying potential issues or bugs in the system.",en:{instance:{one:"coredns server",other:"coredns servers"}}},"activemq.messages":{info:"The total number of messages in the broker. This can be useful for understanding overall system throughput.",en:{instance:{one:"broker",other:"brokers"}}},"activemq.unprocessed_messages":{info:"The total number of messages that have not been processed. If this number consistently increases, it may indicate a problem with consumer performance or a bottleneck in the system.",en:{instance:{one:"broker",other:"brokers"}}},"activemq.consumers":{info:"The number of active consumers connected to the broker. This can be useful for understanding overall system load and potential bottlenecks.",en:{instance:{one:"broker",other:"brokers"}}},"apache.connections":{colors:s.default[4],mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",valueRange:[0,null],title:"Total Apache Connections",colors:s.default[4]}],info:"The total number of connections to the Apache web server. This can be useful for understanding overall system load and potential bottlenecks.",en:{instance:{one:"web server",other:"web servers"}}},"apache.requests":{colors:s.default[0],mainheads:[{showPostAggregations:!0,postGroupBy:["selected"],chartLibrary:"easypiechart",valueRange:[0,null],title:"Total Apache Requests",colors:s.default[0]}],info:"The number of requests processed by the Apache web server. This can be useful for understanding overall system throughput and potential performance issues.",en:{instance:{one:"web server",other:"web servers"}}},"apache.net":{colors:s.default[3],mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Apache Bandwidth",valueRange:[0,null],colors:s.default[3]}],info:"The number of bytes transferred over the network by the Apache web server. This can be useful for understanding overall network usage and potential performance issues.",en:{instance:{one:"web server",other:"web servers"}}},"apache.workers":{mainheads:[{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",selectedDimensions:["busy"],chartLibrary:"gauge",title:"Maximum Apache Workers Utilization",valueRange:[0,100],colors:s.default[5]}],info:"The number of worker processes used by the Apache web server. This can be useful for understanding overall system performance and potential bottlenecks.",en:{instance:{one:"web server",other:"web servers"}}},"apache.bytesperreq":{colors:s.default[3],info:"The number of bytes transferred per second over the network by the Apache web server. This can be useful for understanding overall network performance and potential bottlenecks.",en:{instance:{one:"web server",other:"web servers"}}},"apache.reqpersec":{colors:s.default[4],info:"The number of requests processed per second by the Apache web server. This can be useful for understanding overall system performance and potential bottlenecks.",en:{instance:{one:"web server",other:"web servers"}}},"apache.bytespersec":{colors:s.default[6],info:"The number of bytes transferred per request by the Apache web server. This can be useful for understanding the efficiency of the server and identifying potential performance issues.",en:{instance:{one:"web server",other:"web servers"}}},"apache.uptime":{aggregationMethod:"min",info:"The amount of time that the Apache web server has been running. This can be useful for understanding the overall health and stability of the server.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.connections":{colors:s.default[4],mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Lighttpd Connections",colors:s.default[4]}],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.requests":{colors:s.default[0],mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Lighttpd Requests",colors:s.default[0]}],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.net":{colors:s.default[3],mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Lighttpd Bandwidth",colors:s.default[3]}],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.workers":{mainheads:[{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",selectedDimensions:["busy"],chartLibrary:"gauge",title:"Maximum Lighttpd Workers Utilization",colors:s.default[5]}],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.bytesperreq":{colors:s.default[3],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.reqpersec":{colors:s.default[4],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.bytespersec":{colors:s.default[6],en:{instance:{one:"web server",other:"web servers"}}},"lighttpd.uptime":{aggregationMethod:"min",info:"The uptime of the lighttpd server. Monitoring this metric can help identify if the server has been restarted or is experiencing issues with uptime.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.requests":{info:"The total number of requests received by the lighttpd server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.status_codes":{info:"The distribution of HTTP response codes returned by the lighttpd server. Monitoring this metric can help identify if there are issues with the server or the components interacting with it.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.traffic":{info:"The amount of traffic handled by the lighttpd server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.connections":{info:"The number of active connections to the lighttpd server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.connection_states":{info:"The distribution of connection states for the lighttpd server. Monitoring this metric can help identify if there are issues with the server or the components interacting with it.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.memory_usage":{info:"The memory usage of the lighttpd server. Monitoring this metric can help identify if the server is experiencing memory usage issues that may affect its performance.",en:{instance:{one:"web server",other:"web servers"}}},"lighttpd2.uptime":{info:"The uptime of the lighttpd server. Monitoring this metric can help identify if the server has been restarted or is experiencing issues with uptime.",en:{instance:{one:"web server",other:"web servers"}}},"logstash.jvm_threads":{info:"The number of threads currently being used by the Logstash JVM. Monitoring this metric can help identify if the JVM is experiencing threading issues that may affect its performance."},"logstash.jvm_mem_heap_used":{aggregationMethod:"avg",info:"The amount of memory currently being used by the Logstash JVM's heap. Monitoring this metric can help identify if the JVM is experiencing memory usage issues that may affect its performance."},"logstash.jvm_mem_pools_eden":{info:"The amount of memory currently being used by the Logstash JVM's Eden memory pool. Monitoring this metric can help identify if the JVM is experiencing memory usage issues that may affect its performance."},"logstash.jvm_mem_pools_survivor":{info:"The amount of memory currently being used by the Logstash JVM's Survivor memory pool. Monitoring this metric can help identify if the JVM is experiencing memory usage issues that may affect its performance."},"logstash.jvm_mem_pools_old":{info:"The amount of memory currently being used by the Logstash JVM's Old memory pool. Monitoring this metric can help identify if the JVM is experiencing memory usage issues that may affect its performance."},"logstash.jvm_gc_collector_count":{info:"The number of garbage collection operations performed by the Logstash JVM. Monitoring this metric can help identify if the JVM is experiencing performance issues related to garbage collection."},"logstash.jvm_gc_collector_time":{aggregationMethod:"min",info:"The total time spent on garbage collection operations by the Logstash JVM. Monitoring this metric can help identify if the JVM is experiencing performance issues related to garbage collection."},"logstash.open_file_descriptors":{info:"The number of open file descriptors used by Logstash. Monitoring this metric can help identify if Logstash is experiencing file descriptor usage issues that may affect its performance."},"logstash.event":{info:"The number of events processed by Logstash. Monitoring this metric can help identify the usage patterns of Logstash and potential performance issues."},"logstash.event_duration":{info:"The latencies of events processed by Logstash. High latencies may indicate performance issues with Logstash or the components interacting with it."},"logstash.uptime":{aggregationMethod:"min",info:"The uptime of the Logstash server. Monitoring this metric can help identify if the server has been restarted or is experiencing issues with uptime."},"logstash.pipeline_event":{info:"The number of events processed by the specified Logstash pipeline. Monitoring this metric can help identify the usage patterns of the pipeline and potential performance issues."},"mongodb.operations":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Operations",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"The total number of operations performed by the MongoDB server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.operations_latency":{aggregationMethod:"avg",info:"The latencies of operations performed by the MongoDB server. High latencies may indicate performance issues with the server or the components interacting with it.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.connections":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Connections",colors:s.default[0],layout:{left:3,top:0,width:3,height:5}}],info:"The total number of connections to the MongoDB server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.connections_rate":{info:"The rate of connections to the MongoDB server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.connections_state":{info:"The distribution of connection states for the MongoDB server. Monitoring this metric can help identify if there are issues with the server or the components interacting with it.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.network_io":{info:"The amount of network IO performed by the MongoDB server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.network_requests":{info:"The number of requests to the MongoDB server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.page_faults":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Page Faults",colors:s.default[0],layout:{left:9,top:0,width:3,height:5}}],info:"The number of page faults encountered by the MongoDB server. Monitoring this metric can help identify if the server is experiencing memory usage issues that may affect its performance.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.tcmalloc_generic":{info:"The usage of the TCMalloc generic allocator by the MongoDB server. Monitoring this metric can help identify if the server is experiencing memory usage issues that may affect its performance.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.tcmalloc":{info:"The usage of the TCMalloc allocator by the MongoDB server. Monitoring this metric can help identify if the server is experiencing memory usage issues that may affect its performance.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.asserts":{info:"The number of asserts encountered by the MongoDB server. Monitoring this metric can help identify if the server is encountering issues that may affect its performance.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.current_transactions":{info:"The number of current transactions on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to transactions.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.shard_commit_types":{info:"The distribution of commit types for sharded collections on the MongoDB server. Monitoring this metric can help identify if there are issues with sharding on the server.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.active_clients":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Total Active Clients",colors:s.default[0],layout:{left:0,top:5,width:3,height:5}}],info:"The number of active clients connected to the MongoDB server. Monitoring this metric can help identify the usage patterns of the server and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.queued_operations":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Queued Operations",colors:s.default[0],layout:{left:3,top:5,width:3,height:5}}],info:"The number of operations that are currently queued on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to queued operations.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.locks":{info:"The distribution of locks held by the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to locking.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.flow_control_timings":{info:"The timings of flow control events on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to flow control.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_blocks":{info:"The number of blocks currently held in the WiredTiger cache on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to the WiredTiger cache.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_cache":{info:"The usage of the WiredTiger cache on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to the WiredTiger cache.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_capacity":{info:"The capacity of the WiredTiger cache on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to the WiredTiger cache.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_connection":{info:"The number of connections currently open in the WiredTiger storage engine on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to connections.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_cursor":{info:"The number of cursors currently open in the WiredTiger storage engine on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to cursors.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_lock":{info:"The number of locks currently held in the WiredTiger storage engine on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to locking.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_lock_duration":{info:"The duration of locks held in the WiredTiger storage engine on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to locking.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_log_ops":{info:"The number of operations written to the WiredTiger log on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to logging.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.wiredtiger_transactions":{info:"The number of transactions currently open in the WiredTiger storage engine on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to transactions.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.database_collections":{info:"The number of collections in the specified database on the MongoDB server. Monitoring this metric can help identify the usage patterns of the database and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.database_indexes":{info:"The number of indexes in the specified database on the MongoDB server. Monitoring this metric can help identify the usage patterns of the database and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.database_views":{info:"The number of views in the specified database on the MongoDB server. Monitoring this metric can help identify the usage patterns of the database and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.database_documents":{info:"The number of documents in the specified database on the MongoDB server. Monitoring this metric can help identify the usage patterns of the database and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.database_storage_size":{info:"The storage size of the specified database on the MongoDB server. Monitoring this metric can help identify if the database is using an appropriate amount of storage.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.replication_lag":{info:"The amount of lag in replication on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to replication.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.replication_heartbeat_latency":{aggregationMethod:"avg",info:"The latencies of replication heartbeats on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to replication.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.replication_node_ping":{aggregationMethod:"avg",info:"The latencies of pings to replication nodes on the MongoDB server. Monitoring this metric can help identify if the server is experiencing performance issues related to replication.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.shard_nodes_count":{info:"The number of nodes in the specified shard on the MongoDB server. Monitoring this metric can help identify the usage patterns of the shard and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.shard_databases_status":{info:"The status of the databases in the specified shard on the MongoDB server. Monitoring this metric can help identify if there are issues with the databases in the shard.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"mongodb.chunks":{info:"The number of chunks in the specified shard on the MongoDB server. Monitoring this metric can help identify the usage patterns of the shard and potential performance issues.",en:{instance:{one:"mongodb server",other:"mongodb servers"}}},"nginx.connections":{colors:s.default[4],mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"gauge",title:"Total Connections",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],en:{instance:{one:"web server",other:"web servers"}}},"nginx.requests":{colors:s.default[0],mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"gauge",title:"Total Requests",colors:s.default[0],layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"web server",other:"web servers"}}},"nginx.connections_status":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Connection Status",layout:{left:6,top:0,width:3,height:5}}],info:"The current status of connections on the nginx server. Monitoring this metric can help identify potential performance issues related to connections.",en:{instance:{one:"web server",other:"web servers"}}},"nginx.connections_accepted_handled":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Connections Handled",layout:{left:9,top:0,width:3,height:5}}],info:"The number of accepted and handled connections on the nginx server. Monitoring this metric can help identify potential performance issues related to connections.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.client_connections_rate":{mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"gauge",title:"Total Client Connections Rate",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"Accepted and dropped (not handled) connections. A connection is considered dropped if the worker process is unable to get a connection for the request by establishing a new connection or reusing an open one.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.client_connections_count":{mainheads:[{valueRange:[0,null],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Client Connections per State",layout:{left:3,top:0,width:3,height:2.5}}],info:"The current number of client connections. A connection is considered idle if there are currently no active requests.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.ssl_handshakes_rate":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total SSL Handshake Rate",colors:s.default[4],layout:{left:3,top:2.5,width:3,height:2.5}}],info:"Successful and failed SSL handshakes.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.ssl_session_reuses_rate":{info:"The number of session reuses during SSL handshake.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.ssl_handshakes_failures_rate":{mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"easypiechart",title:"SSL Handshake Failures",colors:s.default[4],layout:{left:6,top:0,width:3,height:5}}],info:"

SSL handshake failures.

NoCommonProtocol - failed because of no common protocol. NoCommonCipher - failed because of no shared cipher. Timeout - failed because of a timeout. PeerRejectedCert - failed because a client rejected the certificate.

",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.ssl_verification_errors_rate":{info:'

SSL verification errors.

NoCert - a client did not provide the required certificate. ExpiredCert - an expired or not yet valid certificate was presented by a client. RevokedCert - a revoked certificate was presented by a client. HostnameMismatch - server"s certificate does not match the hostname. Other - other SSL certificate verification errors.

',en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_requests_rate":{mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"gauge",title:"Total HTTP Requests Rate",colors:s.default[4],layout:{left:9,top:0,width:3,height:5}}],info:"The number of HTTP requests received from clients.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_requests_count":{mainheads:[{chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Total Requests",layout:{left:0,top:5,width:3,height:2.5}}],info:"The current number of client requests.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:0,top:7.5,width:3,height:2.5}}],info:"The time elapsed since the NGINX process was started.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_server_zone_requests_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total HTTP Server Zone Requests Rate",layout:{left:3,top:5,width:3,height:5}}],info:"The number of requests to the HTTP Server Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_server_zone_responses_per_code_class_rate":{info:"The number of responses from the HTTP Server Zone. Responses are grouped by HTTP status code class.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_server_zone_traffic_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total HTTP Server Zone Traffic Rate",layout:{left:6,top:5,width:3,height:5}}],info:"The amount of data transferred to and from the HTTP Server Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_server_zone_requests_processing_count":{info:"The number of client requests that are currently being processed by the HTTP Server Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_server_zone_requests_discarded_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total HTTP Server Zone Discarded Requests Rate",layout:{left:9,top:5,width:3,height:5}}],info:"The number of requests to the HTTP Server Zone completed without sending a response.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_location_zone_requests_rate":{info:"The number of requests to the HTTP Location Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_location_zone_responses_per_code_class_rate":{info:"The number of responses from the HTTP Location Zone. Responses are grouped by HTTP status code class.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_location_zone_traffic_rate":{info:"The amount of data transferred to and from the HTTP Location Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_location_zone_requests_discarded_rate":{info:"The number of requests to the HTTP Location Zone completed without sending a response.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_peers_count":{info:"The number of HTTP Upstream servers.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_zombies_count":{info:"The current number of HTTP Upstream servers removed from the group but still processing active client requests.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_keepalive_count":{info:"The current number of idle keepalive connections to the HTTP Upstream.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_requests_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total HTTP Upstream Request Rate",layout:{left:0,top:10,width:3,height:5}}],info:"The number of client requests forwarded to the HTTP Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_responses_per_code_class_rate":{info:"The number of responses received from the HTTP Upstream Server. Responses are grouped by HTTP status code class.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_response_time":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average HTTP Upstream Response Time",layout:{left:3,top:10,width:3,height:5}}],info:"The average time to get a complete response from the HTTP Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_response_header_time":{aggregationMethod:"avg",info:"The average time to get a response header from the HTTP Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_traffic_rate":{info:"The amount of traffic transferred to and from the HTTP Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_state":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"HTTP Upstream Server State",layout:{left:6,top:10,width:3,height:5}}],info:"The current state of the HTTP Upstream Server. Status is active if set to 1.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_connections_count":{info:"The current number of active connections to the HTTP Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_upstream_server_downtime":{info:"The time the HTTP Upstream Server has spent in the unavail, checking, and unhealthy states.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_cache_state":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total HTTP Cache State",layout:{left:9,top:10,width:3,height:5}}],info:"HTTP cache current state. Cold means that the cache loader process is still loading data from disk into the cache.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_cache_iops":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total HTTP Cache IOPS",layout:{left:9,top:15,width:3,height:5}}],info:"

HTTP cache IOPS.

Served - valid, expired, and revalidated responses read from the cache. Written - miss, expired, and bypassed responses written to the cache. Bypassed - miss, expired, and bypass responses.

",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_cache_io":{info:"

HTTP cache IO.

Served - valid, expired, and revalidated responses read from the cache. Written - miss, expired, and bypassed responses written to the cache. Bypassed - miss, expired, and bypass responses.

",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.http_cache_size":{info:"The current size of the cache.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_server_zone_connections_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Stream Server Zone Connections Rate",layout:{left:0,top:15,width:3,height:5}}],info:"The number of accepted connections to the Stream Server Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_server_zone_sessions_per_code_class_rate":{info:"The number of completed sessions for the Stream Server Zone. Sessions grouped by status code class.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_server_zone_traffic_rate":{info:"The amount of data transferred to and from the Stream Server Zone.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_server_zone_connections_processing_count":{info:"The number of client connections to the Stream Server Zone that are currently being processed.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_server_zone_connections_discarded_rate":{info:"The number of connections to the Stream Server Zone completed without creating a session.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_peers_count":{info:"The number of Stream Upstream servers.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_zombies_count":{info:"The current number of HTTP Upstream servers removed from the group but still processing active client connections.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_server_connections_rate":{info:"The number of connections forwarded to the Stream Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_server_traffic_rate":{info:"The amount of traffic transferred to and from the Stream Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_server_state":{info:"The current state of the Stream Upstream Server. Status is active if set to 1.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_server_downtime":{info:"The time the Stream Upstream Server has spent in the unavail, checking, and unhealthy states.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.stream_upstream_server_connections_count":{info:"The current number of connections to the Stream Upstream Server.",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.resolver_zone_requests_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Resolver Zone Request Rate",colors:s.default[4],layout:{left:3,top:15,width:3,height:5}}],info:"

Resolver zone DNS requests.

Name - requests to resolve names to addresses. Srv - requests to resolve SRV records. Addr - requests to resolve addresses to names.

",en:{instance:{one:"web server",other:"web servers"}}},"nginxplus.resolver_zone_responses_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Resolver Zone Responses Rate",colors:s.default[4],layout:{left:6,top:15,width:3,height:5}}],info:"

Resolver zone DNS responses.

NoError - successful responses. FormErr - format error responses. ServFail - server failure responses. NXDomain - host not found responses. NotImp - unimplemented responses. Refused - operation refused responses. TimedOut - timed out requests. Unknown - requests completed with an unknown error.

",en:{instance:{one:"web server",other:"web servers"}}},"nginxvts.requests_total":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Requests",layout:{left:0,top:0,width:3,height:5}}],info:"The total number of requests on the nginx server. Monitoring this metric can help identify potential performance issues related to requests.",en:{instance:{one:"web server",other:"web servers"}}},"nginxvts.active_connections":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Active Connections",layout:{left:6,top:0,width:3,height:5}}],info:"The number of active connections on the nginx server. Monitoring this metric can help identify potential performance issues related to connections.",en:{instance:{one:"web server",other:"web servers"}}},"nginxvts.uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:9,top:0,width:3,height:5}}],info:"The uptime of the nginx server. Monitoring this metric can help identify potential performance issues related to server uptime.",en:{instance:{one:"web server",other:"web servers"}}},"nginxvts.shm_usage":{info:"The usage of the shared memory on the nginx server. Monitoring this metric can help identify potential performance issues related to shared memory usage.",en:{instance:{one:"web server",other:"web servers"}}},"nginxvts.server_requests_total":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Server Requests",layout:{left:3,top:0,width:3,height:5}}],info:"The total number of requests on the nginx server. Monitoring this metric can help identify potential performance issues related to server requests.",en:{instance:{one:"web server",other:"web servers"}}},"httpcheck.response_time":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Response Time",layout:{left:0,top:0,width:3,height:5}}],info:"The response time describes the time passed between request and response. Currently, the accuracy of the response time is low and should be used as reference only.",groupBy:["label"],groupByLabel:["_collect_job"]},"httpcheck.response_length":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Response Length",layout:{left:3,top:0,width:3,height:5}}],info:"The response length counts the number of characters in the response body. For static pages, this should be mostly constant.",groupBy:["label"],groupByLabel:["_collect_job"]},"httpcheck.status":{mainheads:[{groupBy:["dimension"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"HTTP Server Check Status",layout:{left:6,top:0,width:3,height:5}}],info:"This chart verifies the response of the webserver. Each status dimension will have a value of 1 if triggered. Dimension success is 1 only if all constraints are satisfied. This chart is most useful for alerts or third-party apps.",groupBy:["label"],groupByLabel:["_collect_job"],dimensionsOnNonDimensionGrouping:["success"]},"netdata.response_time":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average API Response Time",layout:{left:6,top:0,width:3,height:5}}],info:"The netdata API response time measures the time netdata needed to serve requests. This time includes everything, from the reception of the first byte of a request, to the dispatch of the last byte of its reply, therefore it includes all network latencies involved (i.e. a client over a slow network will influence these metrics).",en:{instance:{one:"agent",other:"agents"}}},"netdata.server_cpu":{mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average CPU usage per Agent",colors:s.default[12]}],info:"The CPU time consumed by Netdata process in user and system space.",en:{instance:{one:"agent",other:"agents"}}},"netdata.memory":{mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average memory usage per Agent",colors:s.default[1]}],info:"The memory consumed by the Netdata agent.",en:{instance:{one:"agent",other:"agents"}}},"netdata.net":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total network traffic across all agents",layout:{left:9,top:0,width:3,height:5}}],info:"The network traffic generated by Netdata agent.",en:{instance:{one:"agent",other:"agents"}}},"netdata.ebpf_threads":{info:'Show total number of threads and number of active threads. For more details about the threads, see the official documentation.',en:{instance:{one:"agent",other:"agents"}}},"netdata.ebpf_load_methods":{info:"Show number of threads loaded using legacy code (independent binary) or CO-RE (Compile Once Run Everywhere).",en:{instance:{one:"agent",other:"agents"}}},"retroshare.bandwidth":{info:"RetroShare inbound and outbound traffic.",mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Inbound",selectedDimensions:["bandwidth_down_kb"],colors:s.default[0]},{groupBy:["selected"],chartLibrary:"gauge",title:"Total Outbound",selectedDimensions:["bandwidth_up_kb"],colors:s.default[1]}]},"retroshare.peers":{info:"Number of (connected) RetroShare friends.",mainheads:[{groupBy:["selected"],urlOptions:["friends"],selectedDimensions:["peers_connected"],chartLibrary:"easypiechart",title:"Total Connected Friends"}]},"retroshare.dht":{info:"Statistics about RetroShare's DHT. These values are estimated!"},"fping.quality":{family:"quality",colors:s.default[10]},"fping.packets":{family:"packets"},"cgroup.cpu_limit":{aggregationMethod:"avg",valueRange:[0,null],mainheads:[{groupBy:["selected"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,100],selectedDimensions:["used"],chartLibrary:"gauge",title:"Maximum CPU Utilization (within limit)",layout:{left:0,top:0,width:3,height:5}},{groupBy:["label"],groupByLabel:["cgroup_name"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,null],selectedDimensions:["used"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Maximum CPU Utilization (within limit) per cgroup",layout:{left:0,top:5,width:4,height:5}}],info:ce,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu":{aggregationMethod:"avg",mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,100],chartLibrary:"gauge",title:"Maximum CPU Utilization",layout:{left:3,top:0,width:3,height:5}},{groupBy:["label"],groupByLabel:["cgroup_name"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,null],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Maximum CPU Utilization per cgroup",layout:{left:4,top:5,width:4,height:5}}],info:le,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.throttled":{aggregationMethod:"avg",info:de,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.throttled_duration":{aggregationMethod:"avg",info:he,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu_shares":{info:ue,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu_per_core":{aggregationMethod:"avg",info:pe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu_some_pressure":{aggregationMethod:"avg",info:me,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu_some_pressure_stall_time":{info:ge,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu_full_pressure":{aggregationMethod:"avg",info:fe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cpu_full_pressure_stall_time":{info:be,en:{instance:{one:"cgroup",other:"cgroups"}}},"k8s.cgroup.cpu_limit":{aggregationMethod:"avg",valueRange:[0,null],mainheads:[{groupBy:["selected"],aggregationMethod:"max",selectedDimensions:["used"],chartLibrary:"gauge",title:"Maximum CPU Utilization (within limit)"}],info:ce,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu":{aggregationMethod:"avg",mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",chartLibrary:"gauge",title:"Maximum CPU Utilization"}],info:le,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.throttled":{aggregationMethod:"avg",info:de,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.throttled_duration":{aggregationMethod:"avg",info:he,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu_shares":{info:ue,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu_per_core":{aggregationMethod:"avg",info:pe,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu_some_pressure":{aggregationMethod:"avg",info:me,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu_some_pressure_stall_time":{info:ge,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu_full_pressure":{aggregationMethod:"avg",info:fe,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.cpu_full_pressure_stall_time":{info:be,en:{instance:{one:"container",other:"containers"}}},"cgroup.mem_utilization":{aggregationMethod:"avg",info:ye,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.mem_usage_limit":{aggregationMethod:"avg",mainheads:[{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,100],selectedDimensions:["used"],chartLibrary:"gauge",title:"Maximum Memory Utilization (within limit)",layout:{left:6,top:0,width:3,height:5}},{groupBy:["label"],groupByLabel:["cgroup_name"],aggregationMethod:"max",groupingMethod:"max",selectedDimensions:["used"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Maximum Memory Utilization (within limit) per cgroup",layout:{left:8,top:5,width:4,height:5}}],info:ve,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.mem_usage":{mainheads:[{groupBy:["dimension"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,selectedDimensions:["ram"],title:"Total RAM Used",colors:s.default[11],layout:{left:9,top:0,width:3,height:5}}],info:_e,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.mem":{info:we,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.mem_failcnt":{info:ke,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.writeback":{info:Te,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.mem_activity":{info:Se,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.pgfaults":{info:Me,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.memory_some_pressure":{aggregationMethod:"avg",info:xe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.memory_some_pressure_stall_time":{info:Ce,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.memory_full_pressure":{aggregationMethod:"avg",info:Pe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.memory_full_pressure_stall_time":{info:Be,en:{instance:{one:"cgroup",other:"cgroups"}}},"k8s.cgroup.mem_utilization":{aggregationMethod:"avg",info:ye,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.mem_usage_limit":{aggregationMethod:"avg",mainheads:[{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",valueRange:[0,null],selectedDimensions:["used"],chartLibrary:"gauge",title:"Maximum Memory Used (within limit)"}],info:ve,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.mem_usage":{mainheads:[{groupBy:["selected"],selectedDimensions:["ram"],chartLibrary:"gauge",title:"Total RAM Used"}],info:_e,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.mem":{info:we,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.mem_failcnt":{info:ke,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.writeback":{info:Te,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.mem_activity":{info:Se,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.pgfaults":{info:Me,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.memory_some_pressure":{aggregationMethod:"avg",info:xe,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.memory_some_pressure_stall_time":{info:Ce,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.memory_full_pressure":{aggregationMethod:"avg",info:Pe,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.memory_full_pressure_stall_time":{info:Be,en:{instance:{one:"container",other:"containers"}}},"cgroup.io":{mainheads:[{groupBy:["selected"],valueRange:[0,null],chartLibrary:"easypiechart",title:"Total Disk Read",selectedDimensions:["read"],colors:s.default[0],priority:5,layout:{left:0,top:10,width:2,height:5}},{groupBy:["selected"],valueRange:[0,null],chartLibrary:"easypiechart",title:"Total Disk Write",selectedDimensions:["write"],colors:s.default[1],priority:6,layout:{left:2,top:10,width:2,height:5}}],info:qe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.serviced_ops":{info:Ie,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.queued_ops":{info:Le,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.merged_ops":{info:Ae,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.throttle_io":{info:Ee,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.throttle_serviced_ops":{info:Ne,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.pids_current":{info:De,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.io_some_pressure":{aggregationMethod:"avg",info:Re,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.io_some_pressure_stall_time":{info:Fe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.io_full_pressure":{aggregationMethod:"avg",info:Ue,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.io_full_pressure_stall_time":{info:ze,en:{instance:{one:"cgroup",other:"cgroups"}}},"k8s.cgroup.io":{info:qe,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.serviced_ops":{info:Ie,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.queued_ops":{info:Le,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.merged_ops":{info:Ae,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.throttle_io":{mainheads:[{groupBy:["selected"],selectedDimensions:["read"],chartLibrary:"gauge",title:"Total Read Disk I/O"},{groupBy:["selected"],selectedDimensions:["write"],chartLibrary:"gauge",title:"Total Write Disk I/O"}],info:Ee,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.throttle_serviced_ops":{info:Ne,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.pids_current":{info:De,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.io_some_pressure":{aggregationMethod:"avg",info:Re,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.io_some_pressure_stall_time":{info:Fe,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.io_full_pressure":{aggregationMethod:"avg",info:Ue,en:{instance:{one:"container",other:"containers"}}},"k8s.cgroup.io_full_pressure_stall_time":{info:ze,en:{instance:{one:"container",other:"containers"}}},"cgroup.swap_read":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:V,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.swap_write":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:Q,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.fd_open":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:k,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.fd_open_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:T,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.fd_close":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:S,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.fd_close_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:M,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_unlink":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:N,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_write":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:q,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_write_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:L,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_read":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:I,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_read_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:A,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_write_bytes":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:E,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_read_bytes":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:D,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_fsync":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:R,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_fsync_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:F,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_open":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:U,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_open_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:z,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:O,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.vfs_create_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:H,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.process_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:b,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.thread_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:y,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.task_exit":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:v,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.task_close":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:_,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.task_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:w,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.dc_ratio":{aggregationMethod:"avg",groupBy:["label"],groupByLabel:["cgroup_name"],info:'Percentage of file accesses that were present in the directory cache. 100% means that every file that was accessed was present in the directory cache. If files are not present in the directory cache 1) they are not present in the file system, 2) the files were not accessed before. Read more about directory cache. Netdata also gives a summary for these charts in Filesystem submenu.',en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.dc_reference":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:C,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.dc_not_cache":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:P,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.dc_not_found":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:B,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.shmget":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:Z,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.shmat":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:Y,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.shmdt":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:X,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.shmctl":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:J,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.outbound_conn_v4":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:$,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.outbound_conn_v6":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:ee,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_bytes_send":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:te,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_bytes_recv":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:ne,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_tcp_send":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:se,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_tcp_recv":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:ae,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_retransmit":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:oe,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_udp_send":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:re,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_udp_recv":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:ie,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cachestat_ratio":{aggregationMethod:"avg",groupBy:["label"],groupByLabel:["cgroup_name"],info:j,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cachestat_dirties":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:G,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cachestat_hits":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["cgroup_name"],info:W,en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.cachestat_misses":{info:K,en:{instance:{one:"cgroup",other:"cgroups"}}},"systemd.service.cpu.utilization":{info:'Total CPU utilization within the system-wide CPU resources (all cores). The amount of time spent by tasks of the cgroup in user and kernel modes.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],mainheads:[{groupBy:["label"],groupByLabel:["service_name"],chartLibrary:"bars",title:"Top by CPU",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:4,height:5}}],en:{instance:{one:"service",other:"services"}}},"systemd.service.memory.usage":{info:"The amount of used RAM and swap memory.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],mainheads:[{groupBy:["label"],groupByLabel:["service_name"],selectedDimensions:["ram"],chartLibrary:"bars",title:"Top by RAM",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:4,top:0,width:4,height:5}},{groupBy:["label"],groupByLabel:["service_name"],selectedDimensions:["swap"],chartLibrary:"bars",title:"Top by Swap",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:8,top:0,width:4,height:5}}],en:{instance:{one:"service",other:"services"}}},"systemd.service.memory.failcnt":{info:"The number of memory usage hits limits.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.memory.ram.usage":{info:'Memory usage statistics. The individual metrics are described in the memory.stat section for cgroup-v1 and cgroup-v2.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],en:{instance:{one:"service",other:"services"}}},"systemd.service.memory.writeback":{info:"Dirty is the amount of memory waiting to be written to disk. Writeback is how much memory is actively being written to disk.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],en:{instance:{one:"service",other:"services"}}},"systemd.service.memory.paging.faults":{info:'Memory page fault statistics.',aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],en:{instance:{one:"service",other:"services"}}},"systemd.service.memory.paging.io":{info:"Memory accounting statistics. In - a page is accounted as either mapped anon page (RSS) or cache page (Page Cache) to the cgroup. Out - a page is unaccounted from the cgroup.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.disk.io":{info:"The amount of data transferred to and from specific devices as seen by the CFQ scheduler. It is not updated when the CFQ scheduler is operating on a request queue.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.disk.iops":{info:"The number of I/O operations performed on specific devices as seen by the CFQ scheduler.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.disk.throttle.io":{info:"The amount of data transferred to and from specific devices as seen by the throttling policy.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.disk.throttle.iops":{info:"The number of I/O operations performed on specific devices as seen by the throttling policy.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.disk.queued_iops":{info:"The number of requests queued for I/O operations.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.disk.merged_iops":{info:"The number of BIOS requests merged into requests for I/O operations.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"systemd.service.pids.current":{info:"The number of processes currently in the cgroup.",aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],chartType:"stacked",en:{instance:{one:"service",other:"services"}}},"services.cpu":{aggregationMethod:"avg",info:'Total CPU utilization within the system-wide CPU resources (all cores). The amount of time spent by tasks of the cgroup in user and kernel modes.',en:{instance:{one:"system",other:"systems"}}},"services.mem_usage":{aggregationMethod:"avg",info:"The amount of used RAM.",en:{instance:{one:"system",other:"systems"}}},"services.mem_rss":{info:'The amount of used RSS memory. It includes transparent hugepages.',en:{instance:{one:"system",other:"systems"}}},"services.mem_mapped":{info:'The size of memory-mapped files.',en:{instance:{one:"system",other:"systems"}}},"services.mem_cache":{info:'The amount of used page cache memory.',en:{instance:{one:"system",other:"systems"}}},"services.mem_writeback":{info:'The amount of file/anon cache that is queued for syncing to disk.',en:{instance:{one:"system",other:"systems"}}},"services.mem_pgfault":{info:'The number of page faults. It includes both minor and major page faults.',en:{instance:{one:"system",other:"systems"}}},"services.mem_pgmajfault":{info:'The number of major page faults.',en:{instance:{one:"system",other:"systems"}}},"services.mem_pgpgin":{info:"The amount of memory charged to the cgroup. The charging event happens each time a page is accounted as either mapped anon page(RSS) or cache page(Page Cache) to the cgroup.",en:{instance:{one:"system",other:"systems"}}},"services.mem_pgpgout":{info:"The amount of memory uncharged from the cgroup. The uncharging event happens each time a page is unaccounted from the cgroup.",en:{instance:{one:"system",other:"systems"}}},"services.mem_failcnt":{info:"The number of memory usage hits limits.",en:{instance:{one:"system",other:"systems"}}},"services.swap_usage":{info:'The amount of used swap memory.',en:{instance:{one:"system",other:"systems"}}},"services.io_read":{info:"The amount of data transferred from specific devices as seen by the CFQ scheduler. It is not updated when the CFQ scheduler is operating on a request queue.",en:{instance:{one:"system",other:"systems"}}},"services.io_write":{info:"The amount of data transferred to specific devices as seen by the CFQ scheduler. It is not updated when the CFQ scheduler is operating on a request queue.",en:{instance:{one:"system",other:"systems"}}},"services.io_ops_read":{info:"The number of read operations performed on specific devices as seen by the CFQ scheduler.",en:{instance:{one:"system",other:"systems"}}},"services.io_ops_write":{info:"The number write operations performed on specific devices as seen by the CFQ scheduler.",en:{instance:{one:"system",other:"systems"}}},"services.throttle_io_read":{info:"The amount of data transferred from specific devices as seen by the throttling policy.",en:{instance:{one:"system",other:"systems"}}},"services.throttle_io_write":{info:"The amount of data transferred to specific devices as seen by the throttling policy.",en:{instance:{one:"system",other:"systems"}}},"services.throttle_io_ops_read":{info:"The number of read operations performed on specific devices as seen by the throttling policy.",en:{instance:{one:"system",other:"systems"}}},"services.throttle_io_ops_write":{info:"The number of write operations performed on specific devices as seen by the throttling policy.",en:{instance:{one:"system",other:"systems"}}},"services.queued_io_ops_read":{info:"The number of queued read requests.",en:{instance:{one:"system",other:"systems"}}},"services.queued_io_ops_write":{info:"The number of queued write requests.",en:{instance:{one:"system",other:"systems"}}},"services.merged_io_ops_read":{info:"The number of read requests merged.",en:{instance:{one:"system",other:"systems"}}},"services.merged_io_ops_write":{info:"The number of write requests merged.",en:{instance:{one:"system",other:"systems"}}},"systemd.services.swap_read":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:V+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.swap_write":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:Q+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.fd_open":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:k+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.fd_open_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:T+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.fd_close":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:S+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.fd_close_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:M+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_unlink":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:N+'',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_write":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:q+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_write_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:L+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_read":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:I+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_read_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:A+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_write_bytes":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:E+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_read_bytes":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:D+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_fsync":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:R+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_fsync_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:F+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_open":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:U+'
',en:{instance:{one:"system",other:"systems"}}},"services.vfs_open_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:z+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:O+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.vfs_create_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:H+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.process_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:b+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.thread_create":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:y+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.task_exit":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:v+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.task_close":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:_+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.task_error":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:w+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.dc_ratio":{aggregationMethod:"avg",groupBy:["label"],groupByLabel:["service_name"],info:x+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.dc_reference":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:C+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.dc_not_cache":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:P+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.dc_not_found":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:B+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.cachestat_ratio":{aggregationMethod:"avg",groupBy:["label"],groupByLabel:["service_name"],info:j+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.cachestat_dirties":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:G+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.cachestat_hits":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:W+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.cachestat_misses":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:K+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.shmget":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:Z+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.shmat":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:Y+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.shmdt":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:X+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.shmctl":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:J+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_conn_ipv4":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:$+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_conn_ipv6":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:ee+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_bytes_send":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:te+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_bytes_recv":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:ne+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_tcp_send":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:se+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_tcp_recv":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:ae+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_retransmit":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:oe+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_udp_send":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:re+'
',en:{instance:{one:"system",other:"systems"}}},"systemd.services.net_udp_recv":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["service_name"],info:ie+'
',en:{instance:{one:"system",other:"systems"}}},"beanstalk.cpu_usage":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total CPU time consumed",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"Amount of CPU Time for user and system used by beanstalkd."},"beanstalk.jobs_rate":{info:"The rate of jobs processed by the beanstalkd served."},"beanstalk.connections_rate":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Connections Rate",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],info:"The rate of connections opened to beanstalkd."},"beanstalk.commands_rate":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Commands Received Rate",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The rate of commands received by beanstalkd."},"beanstalk.current_tubes":{info:"Total number of current tubes on the server including the default tube (which always exists)."},"beanstalk.current_jobs":{info:"Current number of jobs in all tubes grouped by status: urgent, ready, reserved, delayed and buried."},"beanstalk.current_connections":{info:"Current number of connections group by connection type: written, producers, workers, waiting."},"beanstalk.binlog":{info:"The rate of records written to binlog and migrated as part of compaction."},"beanstalk.uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:9,top:0,width:3,height:5}}],info:"Total time beanstalkd server has been up for."},"beanstalk.jobs":{info:"Number of jobs currently in the tube grouped by status: urgent, ready, reserved, delayed and buried."},"beanstalk.connections":{info:"The current number of connections to this tube grouped by connection type; using, waiting and watching."},"beanstalk.commands":{info:"The rate of delete and pause commands executed by beanstalkd."},"beanstalk.pause":{info:"Shows info on how long the tube has been paused for, and how long is left remaining on the pause."},"ceph.general_usage":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Usage",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"The usage and available space in all ceph cluster."},"ceph.general_objects":{mainheads:[{groupBy:["selected"],chartLibrary:"number",title:"Total Objects",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],info:"Total number of objects storage on ceph cluster."},"ceph.general_bytes":{info:"Cluster read and write data per second."},"ceph.general_operations":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Operations",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"Number of read and write operations per second."},"ceph.general_latency":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Latency",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"Total of apply and commit latency in all OSDs. The apply latency is the total time taken to flush an update to disk. The commit latency is the total time taken to commit an operation to the journal."},"ceph.pool_usage":{info:"The usage space in each pool."},"ceph.pool_objects":{info:"Number of objects presents in each pool."},"ceph.pool_read_bytes":{info:"The rate of read data per second in each pool."},"ceph.pool_write_bytes":{info:"The rate of write data per second in each pool."},"ceph.pool_read_objects":{info:"Number of read objects per second in each pool."},"ceph.pool_write_objects":{info:"Number of write objects per second in each pool."},"ceph.osd_usage":{info:"The usage space in each OSD."},"ceph.osd_size":{info:"Each OSD's size"},"ceph.apply_latency":{aggregationMethod:"avg",info:"Time taken to flush an update in each OSD."},"ceph.commit_latency":{aggregationMethod:"avg",info:"Time taken to commit an operation to the journal in each OSD."},"web_log.squid_response_statuses":{info:"Squid responses by type. success includes 1xx, 2xx, 000, 304, error includes 5xx and 6xx, redirect includes 3xx except 304, bad includes 4xx, other are all the other responses.",mainheads:[{groupBy:["selected"],selectedDimensions:["success"],chartLibrary:"gauge",title:"Total Successful Responses"},{groupBy:["selected"],selectedDimensions:["redirect"],chartLibrary:"gauge",title:"Total Redirects"},{groupBy:["selected"],selectedDimensions:["bad"],chartLibrary:"gauge",title:"Total Bad Requests"},{groupBy:["selected"],selectedDimensions:["error"],chartLibrary:"gauge",title:"Total Server Errors"}],en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_response_codes":{info:'Web server responses by code family. According to HTTP standards 1xx are informational responses, 2xx are successful responses, 3xx are redirects (although they include 304 which is used as "not modified"), 4xx are bad requests, 5xx are internal server errors. Squid also defines 000 mostly for UDP requests, and 6xx for broken upstream servers sending wrong headers. Finally, other are non-standard responses, and unmatched counts the lines in the log file that are not matched by the plugin (let us know if you have any unmatched).',en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_duration":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",selectedDimensions:["avg"],chartLibrary:"gauge",title:"Average Response Time"}],en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_detailed_response_codes":{info:"Number of responses for each response code individually.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_clients":{info:"Unique client IPs accessing squid, within each data collection iteration. If data collection is per second, this chart shows unique client IPs per second.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_clients_all":{info:'Unique client IPs accessing squid since the last restart of netdata. This plugin keeps in memory all the unique IPs that have accessed the server. On very busy squid servers (several millions of unique IPs) you may want to disable this chart (check /etc/netdata/go.d/web_log.conf).',en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_transport_methods":{info:"Break down per delivery method: TCP are requests on the HTTP port (usually 3128), UDP are requests on the ICP port (usually 3130), or HTCP port (usually 4128). If ICP logging was disabled using the log_icp_queries option, no ICP replies will be logged. NONE are used to state that squid delivered an unusual response or no response at all. Seen with cachemgr requests and errors, usually when the transaction fails before being classified into one of the above outcomes. Also seen with responses to CONNECT requests.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_code":{info:'These are combined squid result status codes. A break down per component is given in the following charts. Check the squid documentation about them.',en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_handling_opts":{info:"These tags are optional and describe why the particular handling was performed or where the request came from. CLIENT means that the client request placed limits affecting the response. Usually seen with client issued a no-cache, or analogous cache control command along with the request. Thus, the cache has to validate the object.IMS states that the client sent a revalidation (conditional) request. ASYNC, is used when the request was generated internally by Squid. Usually this is background fetches for cache information exchanges, background revalidation from stale-while-revalidate cache controls, or ESI sub-objects being loaded. SWAPFAIL is assigned when the object was believed to be in the cache, but could not be accessed. A new copy was requested from the server. REFRESH when a revalidation (conditional) request was sent to the server. SHARED when this request was combined with an existing transaction by collapsed forwarding. NOTE: the existing request is not marked as SHARED. REPLY when particular handling was requested in the HTTP reply from server or peer. Usually seen on DENIED due to http_reply_access ACLs preventing delivery of servers response object to the client.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_object_types":{info:"These tags are optional and describe what type of object was produced. NEGATIVE is only seen on HIT responses, indicating the response was a cached error response. e.g. 404 not found. STALE means the object was cached and served stale. This is usually caused by stale-while-revalidate or stale-if-error cache controls. OFFLINE when the requested object was retrieved from the cache during offline_mode. The offline mode never validates any object. INVALID when an invalid request was received. An error response was delivered indicating what the problem was. FAIL is only seen on REFRESH to indicate the revalidation request failed. The response object may be the server provided network error or the stale object which was being revalidated depending on stale-if-error cache control. MODIFIED is only seen on REFRESH responses to indicate revalidation produced a new modified object. UNMODIFIED is only seen on REFRESH responses to indicate revalidation produced a 304 (Not Modified) status, which was relayed to the client. REDIRECT when squid generated an HTTP redirect response to this request.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_cache_events":{info:'These tags are optional and describe whether the response was loaded from cache, network, or otherwise. HIT when the response object delivered was the local cache object. MEM when the response object came from memory cache, avoiding disk accesses. Only seen on HIT responses. MISS when the response object delivered was the network response object. DENIED when the request was denied by access controls. NOFETCH an ICP specific type, indicating service is alive, but not to be used for this request (sent during "-Y" startup, or during frequent failures, a cache in hit only mode will return either UDP_HIT or UDP_MISS_NOFETCH. Neighbours will thus only fetch hits). TUNNEL when a binary tunnel was established for this transaction.',en:{instance:{one:"web server",other:"web servers"}}},"web_log.squid_transport_errors":{info:"These tags are optional and describe some error conditions which occurred during response delivery (if any). ABORTED when the response was not completed due to the connection being aborted (usually by the client). TIMEOUT, when the response was not completed due to a connection timeout.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.type_requests":{info:"Web server responses by type. success includes 1xx, 2xx, 304 and 401, error includes 5xx, redirect includes 3xx except 304, bad includes 4xx except 401, other are all the other responses.",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Requests by Type",layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"web server",other:"web servers"}}},"web_log.request_processing_time":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",selectedDimensions:["avg"],chartLibrary:"gauge",title:"Average Response Time"}],en:{instance:{one:"web server",other:"web servers"}}},"portcheck.latency":{aggregationMethod:"avg",info:"The latency describes the time spent connecting to a TCP port. No data is sent or received. Currently, the accuracy of the latency is low and should be used as reference only.",en:{instance:{one:"service",other:"services"}}},"portcheck.status":{info:"The status chart verifies the availability of the service. Each status dimension will have a value of 1 if triggered. Dimension success is 1 only if connection could be established. This chart is most useful for alerts and third-party apps.",en:{instance:{one:"service",other:"services"}}},"chrony.stratum":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",valueRange:[0,null],title:"Maximum Stratum",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"The stratum indicates the distance (hops) to the computer with the reference clock. The higher the stratum number, the more the timing accuracy and stability degrades.",en:{instance:{one:"system",other:"systems"}}},"chrony.current_correction":{info:"Any error in the system clock is corrected by slightly speeding up or slowing down the system clock until the error has been removed, and then returning to the system clock\u2019s normal speed. A consequence of this is that there will be a period when the system clock (as read by other programs) will be different from chronyd's estimate of the current true time (which it reports to NTP clients when it is operating as a server). The reported value is the difference due to this effect.",en:{instance:{one:"system",other:"systems"}}},"chrony.root_delay":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Root Delay",valueRange:[0,null],colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],info:"The total of the network path delays to the stratum-1 computer from which the computer is ultimately synchronised.",en:{instance:{one:"system",other:"systems"}}},"chrony.root_dispersion":{aggregationMethod:"avg",info:"The total dispersion accumulated through all the computers back to the stratum-1 computer from which the computer is ultimately synchronised. Dispersion is due to system clock resolution, statistical measurement variations, etc.",en:{instance:{one:"system",other:"systems"}}},"chrony.last_offset":{aggregationMethod:"avg",info:"The estimated local offset on the last clock update. A positive value indicates the local time (as previously estimated true time) was ahead of the time sources.",en:{instance:{one:"system",other:"systems"}}},"chrony.frequency":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Max Frequency",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The frequency is the rate by which the system\u2019s clock would be wrong if chronyd was not correcting it. It is expressed in ppm (parts per million). For example, a value of 1 ppm would mean that when the system\u2019s clock thinks it has advanced 1 second, it has actually advanced by 1.000001 seconds relative to true time.",en:{instance:{one:"system",other:"systems"}}},"chrony.residual_frequency":{aggregationMethod:"avg",info:"The residual frequency for the currently selected reference source. This reflects any difference between what the measurements from the reference source indicate the frequency should be and the frequency currently being used. The reason this is not always zero is that a smoothing procedure is applied to the frequency.",en:{instance:{one:"system",other:"systems"}}},"chrony.skew":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Skew",layout:{left:9,top:0,width:3,height:5}}],info:"The estimated error bound on the frequency.",en:{instance:{one:"system",other:"systems"}}},"chrony.ref_measurement_time":{aggregationMethod:"min",info:"The time elapsed since the last measurement from the reference source was processed.",en:{instance:{one:"system",other:"systems"}}},"chrony.leap_status":{info:"

The current leap status of the source.

Normal - indicates the normal status (no leap second). InsertSecond - indicates that a leap second will be inserted at the end of the month. DeleteSecond - indicates that a leap second will be deleted at the end of the month. Unsynchronised - the server has not synchronized properly with the NTP server.

",en:{instance:{one:"system",other:"systems"}}},"chrony.activity":{info:"

The number of servers and peers that are online and offline.

Online - the server or peer is currently online (i.e. assumed by chronyd to be reachable). Offline - the server or peer is currently offline (i.e. assumed by chronyd to be unreachable, and no measurements from it will be attempted). BurstOnline - a burst command has been initiated for the server or peer and is being performed. After the burst is complete, the server or peer will be returned to the online state. BurstOffline - a burst command has been initiated for the server or peer and is being performed. After the burst is complete, the server or peer will be returned to the offline state. Unresolved - the name of the server or peer was not resolved to an address yet.

",en:{instance:{one:"system",other:"systems"}}},"chrony.rms_offset":{aggregationMethod:"avg",info:"The root mean square (RMS) offset of the system clock from true time. Large offsets may indicate a problem with the clock or network synchronization.",en:{instance:{one:"system",other:"systems"}}},"chrony.update_interval":{aggregationMethod:"avg",info:"The interval between clock updates. Shorter intervals may improve accuracy but may also increase network load.",en:{instance:{one:"system",other:"systems"}}},"couchdb.active_tasks":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Active Tasks",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"Active tasks running on this CouchDB cluster. Four types of tasks currently exist: indexer (view building), replication, database compaction and view compaction.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.replicator_jobs":{info:'Detailed breakdown of any replication jobs in progress on this node. For more information, see the replicator documentation.',en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.open_files":{info:'Count of all files held open by CouchDB. If this value seems pegged at 1024 or 4096, your server process is probably hitting the open file handle limit and needs to be increased.',en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.activity":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Activity",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The activity of CouchDB nodes in the cluster. The number of requests being handled by the nodes per second. High values may indicate a high workload on the nodes and potential performance issues.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.request_methods":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Request Methods",layout:{left:6,top:0,width:3,height:5}}],info:"The distribution of request methods being used on CouchDB nodes in the cluster. This can be useful for identifying the most common operations being performed on the nodes and potential performance bottlenecks.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.response_codes":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Response Codes",layout:{left:9,top:0,width:3,height:5}}],info:"The distribution of response codes returned by CouchDB nodes in the cluster. This can be useful for identifying common error codes and potential issues with the nodes.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.response_code_classes":{info:"The distribution of response code classes returned by CouchDB nodes in the cluster. This can be useful for identifying the general class of responses being returned by the nodes (e.g. success, error) and potential issues with the nodes.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.erlang_vm_memory":{info:"The amount of memory used by the Erlang virtual machine (VM) running on CouchDB nodes in the cluster. This can be useful for monitoring the overall memory usage of the nodes and potential capacity issues.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.proccounts":{info:"The number of Erlang processes running on CouchDB nodes in the cluster. This can be useful for monitoring the overall workload of the nodes and potential performance issues.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.peakmsgqueue":{info:"The maximum size of the message queue on CouchDB nodes in the cluster. This can be useful for monitoring the overall workload of the nodes and potential performance issues.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.reductions":{info:"The number of reductions performed by the Erlang VM on CouchDB nodes in the cluster. Reductions are a measure of the computational work done by the VM and high values may indicate a high workload on the nodes and potential performance issues.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.db_sizes_file":{info:"The size of CouchDB databases on disk, including data and metadata. This can be useful for monitoring the overall size of the databases and potential capacity issues.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.db_sizes_external":{info:"The total size of CouchDB databases in external storage in bytes.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.db_sizes_active":{info:"The total size of CouchDB databases in active memory in bytes.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.db_doc_count":{info:"The total number of documents stored in CouchDB databases.",en:{instance:{one:"cluster",other:"clusters"}}},"couchdb.db_doc_del_count":{info:"The total number of deleted documents stored in CouchDB databases.",en:{instance:{one:"cluster",other:"clusters"}}},"freeradius.authentication":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Authentication Requests",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"The number of authentication requests that have been processed by the FreeRADIUS server. FreeRADIUS is a RADIUS server, and authentication requests are requests from clients to authenticate themselves with the server. Monitoring this metric can provide insight into the usage of the FreeRADIUS server and can help identify any issues with authentication requests.",en:{instance:{one:"server",other:"servers"}}},"freeradius.authentication_access_responses":{info:"The number of access responses that have been sent by the FreeRADIUS server in response to authentication requests. Access responses are messages sent by the server to either grant or deny access to a client based on the authentication request. Monitoring this metric can provide insight into the usage of the FreeRADIUS server and can help identify any issues with authentication requests.",en:{instance:{one:"server",other:"servers"}}},"freeradius.bad_authentication":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Bad Authentication Requests",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}}],info:"The number of bad authentication requests that have been received by the FreeRADIUS server. Bad authentication requests are requests that are improperly formatted or contain invalid data. Monitoring this metric can provide insight into the usage of the FreeRADIUS server and can help identify any issues with authentication requests.",en:{instance:{one:"server",other:"servers"}}},"freeradius.proxy_authentication":{info:"The number of proxy authentication requests that have been processed by the FreeRADIUS server. Proxy authentication requests are requests from other RADIUS servers to authenticate a client on their behalf. Monitoring this metric can provide insight into the usage of the FreeRADIUS server as a proxy and can help identify any issues with proxy authentication requests.",en:{instance:{one:"server",other:"servers"}}},"freeradius.proxy_authentication_access_responses":{info:"The number of access responses that have been sent by the FreeRADIUS server in response to proxy authentication requests. Access responses are messages sent by the server to either grant or deny access to a client based on the authentication request. Monitoring this metric can provide insight into the usage of the FreeRADIUS server as a proxy and can help identify any issues with proxy authentication requests.",en:{instance:{one:"server",other:"servers"}}},"geth.goroutines":{info:"The number of goroutines in the Geth process.",en:{instance:{one:"process",other:"processes"}}},"geth.chaindata_db_size":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total chain data size",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"The size of the chain data database.",en:{instance:{one:"database",other:"databases"}}},"geth.chainhead":{info:"The current head of the blockchain."},"geth.p2p_bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Bandwidth",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],info:"The amount of bandwidth used by the P2P network.",en:{instance:{one:"network",other:"networks"}}},"geth.reorgs":{info:"The number of blockchain reorgs that have occurred."},"geth.reorgs_blocks":{info:"The number of blocks that have been reorganized in a blockchain reorg."},"geth.p2p_peers_calls":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total P2P peers calls",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The number of P2P peer calls made by the node."},"haproxy.backend_current_sessions":{info:"The number of current sessions in the backend of the HAProxy server. A session is a connection between a client and the server. Monitoring this metric can provide insight into the usage of the HAProxy server and can help identify any issues with session management.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"haproxy.backend_sessions":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"No. of Backend Sessions per proxy",layout:{left:0,top:0,width:3,height:5}}],info:"The total number of sessions in the backend of the HAProxy server. A session is a connection between a client and the server. Monitoring this metric can provide insight into the usage of the HAProxy server and can help identify any issues with session management.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"haproxy.backend_response_time_average":{aggregationMethod:"avg",mainheads:[{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Average Response Time per proxy",layout:{left:3,top:0,width:3,height:5}}],info:"The average response time of the backend of the HAProxy server. The response time is the time it takes for the server to respond to a client's request. Monitoring this metric can provide insight into the performance of the HAProxy server and can help identify any issues with slow response times.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"haproxy.backend_queue_time_average":{aggregationMethod:"avg",mainheads:[{chartLibrary:"bars",title:"Average Queue Time per proxy",layout:{left:9,top:0,width:3,height:5}}],info:"The average queue time of the backend of the HAProxy server. The queue time is the time a client's request spends in the server's queue before being processed. Monitoring this metric can provide insight into the performance of the HAProxy server and can help identify any issues with long queue times.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"haproxy.backend_current_queue":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Queue Size per proxy",layout:{left:6,top:0,width:3,height:5}}],info:"The current number of requests in the queue of the backend of the HAProxy server. Monitoring this metric can provide insight into the performance of the HAProxy server and can help identify any issues with the server's ability to handle incoming requests.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"haproxy.backend_http_responses":{info:"The number of HTTP responses sent by the backend of the HAProxy server. HTTP responses are messages sent by the server in response to client requests. Monitoring this metric can provide insight into the usage of the HAProxy server and can help identify any issues with HTTP responses.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"haproxy.backend_network_io":{info:"The network IO of the backend of the HAProxy server. Network IO is the amount of data transferred over the network by the server. Monitoring this metric can provide insight into the performance of the HAProxy server and can help identify any issues with network performance.",en:{instance:{one:"HAproxy server",other:"HAproxy servers"}}},"hdfs.heap_memory":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Heap Memory",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"The amount of heap memory used by the HDFS service. Heap memory is the memory allocated to the Java virtual machine for storing objects. Monitoring this metric can provide insight into the memory usage of the HDFS service and can help identify any issues with memory allocation.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.gc_count_total":{info:"The total number of garbage collection (GC) events that have occurred in the HDFS service. GC events are processes that reclaim memory by removing unused objects. Monitoring this metric can provide insight into the performance of the HDFS service and can help identify any issues with GC performance.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.gc_time_total":{info:"The total amount of time spent on garbage collection (GC) in the HDFS service. GC is a process that reclaims memory by removing unused objects. Monitoring this metric can provide insight into the performance of the HDFS service and can help identify any issues with GC performance.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.gc_threshold":{info:"The GC threshold of the HDFS service. The GC threshold is the point at which the HDFS service triggers a GC event. Monitoring this metric can provide insight into the performance of the HDFS service and can help identify any issues with GC performance.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.rpc_bandwidth":{info:"The amount of bandwidth being used by HDFS Remote Procedure Calls (RPCs).",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.rpc_calls":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total RPC Calls",colors:s.default[7],layout:{left:3,top:0,width:3,height:5}}],info:"The number of HDFS Remote Procedure Calls (RPCs) being made.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.avg_queue_time":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Queue Time",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:"The average time spent in the queue for HDFS calls.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.avg_processing_time":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Processing Time",colors:s.default[0],layout:{left:9,top:0,width:3,height:5}}],info:"The average time spent processing HDFS calls.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.datanode_capacity":{info:"The capacity of the HDFS DataNode.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"hdfs.datanode_bandwidth":{info:"The bandwidth used by the HDFS DataNode.",en:{instance:{one:"HDFS service",other:"HDFS services"}}},"isc_dhcps.active_leases_total":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Active Leases",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"The total number of active leases in the ISC DHCP server. A lease is a contract that allows a client to use a particular IP address for a specified period of time. Monitoring this metric can provide insight into the usage of the ISC DHCP server and can help identify any issues with lease management.",en:{instance:{one:"DHCP server",other:"DHCP servers"}}},"isc_dhcps.pool_active_leases":{info:"The number of active leases in a DHCP pool of the ISC DHCP server. A DHCP pool is a range of IP addresses that are available for allocation to clients. Monitoring this metric can provide insight into the usage of the ISC DHCP server and can help identify any issues with DHCP pool management.",en:{instance:{one:"DHCP server",other:"DHCP servers"}}},"isc_dhcps.pool_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Pool Utilization",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:"The utilization of a DHCP pool in the ISC DHCP server. The utilization is the percentage of IP addresses in the pool that are currently leased to clients. Monitoring this metric can provide insight into the usage of the ISC DHCP server and can help identify any issues with DHCP pool utilization.",en:{instance:{one:"DHCP server",other:"DHCP servers"}}},"btrfs.disk":{family:"utilization",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",selectedDimensions:["unallocated"],title:"Maximum Unallocated Physical Disk Space",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"Physical disk usage of BTRFS. The disk space reported here is the raw physical disk space assigned to the BTRFS volume (i.e. before any RAID levels). BTRFS uses a two-stage allocator, first allocating large regions of disk space for one type of block (data, metadata, or system), and then using a regular block allocator inside those regions. unallocated is the physical disk space that is not allocated yet and is available to become data, metadata or system on demand. When unallocated is zero, all available disk space has been allocated to a specific function. Healthy volumes should ideally have at least five percent of their total space unallocated. You can keep your volume healthy by running the btrfs balance command on it regularly (check man btrfs-balance for more info). Note that some of the space listed as unallocated may not actually be usable if the volume uses devices of different sizes.",en:{instance:{one:"device",other:"devices"}}},"btrfs.data":{family:"utilization",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Logical Disk Usage (data)",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"Logical disk usage for BTRFS data. Data chunks are used to store the actual file data (file contents). The disk space reported here is the usable allocation (i.e. after any striping or replication). Healthy volumes should ideally have no more than a few GB of free space reported here persistently. Running btrfs balance can help here.",en:{instance:{one:"device",other:"devices"}}},"btrfs.metadata":{family:"utilization",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Logical Disk Usage (metadata)",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"Logical disk usage for BTRFS metadata. Metadata chunks store most of the filesystem internal structures, as well as information like directory structure and file names. The disk space reported here is the usable allocation (i.e. after any striping or replication). Healthy volumes should ideally have no more than a few GB of free space reported here persistently. Running btrfs balance can help here.",en:{instance:{one:"device",other:"devices"}}},"btrfs.system":{family:"utilization",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Logical Disk Usage (system)",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],info:"Logical disk usage for BTRFS system. System chunks store information about the allocation of other chunks. The disk space reported here is the usable allocation (i.e. after any striping or replication). The values reported here should be relatively small compared to Data and Metadata, and will scale with the volume size and overall space usage.",en:{instance:{one:"device",other:"devices"}}},"rabbitmq.queued_messages":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Queued Messages",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"Overall total of ready and unacknowledged queued messages. Messages that are delivered immediately are not counted here."},"rabbitmq.message_rates":{info:"Overall messaging rates including acknowledgements, deliveries, redeliveries, and publishes."},"rabbitmq.global_counts":{info:"Overall totals for channels, consumers, connections, queues and exchanges."},"rabbitmq.file_descriptors":{info:'Total number of used filed descriptors. See Open File Limits for further details.'},"rabbitmq.sockets":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Sockets Used",colors:s.default[7],layout:{left:9,top:0,width:3,height:5}}],info:'Total number of used socket descriptors. Each used socket also counts as a used file descriptor. See Open File Limits for further details.'},"rabbitmq.processes":{info:"Total number of processes running within the Erlang VM. This is not the same as the number of processes running on the host."},"rabbitmq.erlang_run_queue":{info:"Number of Erlang processes the Erlang schedulers have queued to run."},"rabbitmq.memory":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Memory Used",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:'Total amount of memory used by the RabbitMQ. This is a complex statistic that can be further analyzed in the management UI. See Memory for further details.'},"rabbitmq.disk_space":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Disk Space Consumed",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:'Total amount of disk space consumed by the message store(s). See Disk Space Limits for further details.'},"rabbitmq.queue_messages":{info:"Total amount of messages and their states in this queue."},"rabbitmq.queue_messages_stats":{info:"Overall messaging rates including acknowledgements, deliveries, redeliveries, and publishes."},"ntpd.sys_offset":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum System Offset",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"For hosts without any time critical services an offset of < 100 ms should be acceptable even with high network latencies. For hosts with time critical services an offset of about 0.01 ms or less can be achieved by using peers with low delays and configuring optimal poll exponent values.",en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_jitter":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average System Jitter",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The jitter statistics are exponentially-weighted RMS averages. The system jitter is defined in the NTPv4 specification; the clock jitter statistic is computed by the clock discipline module.",en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_frequency":{info:"The frequency offset is shown in ppm (parts per million) relative to the frequency of the system. The frequency correction needed for the clock can vary significantly between boots and also due to external influences like temperature or radiation.",en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_wander":{info:"The wander statistics are exponentially-weighted RMS averages.",en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_rootdelay":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average System Root Delay",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:"The rootdelay is the round-trip delay to the primary reference clock, similar to the delay shown by the ping command. A lower delay should result in a lower clock offset.",en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_stratum":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum System Stratum",colors:s.default[7],layout:{left:9,top:0,width:3,height:5}}],info:'The distance in "hops" to the primary reference clock',en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_tc":{info:'Time constants and poll intervals are expressed as exponents of 2. The default poll exponent of 6 corresponds to a poll interval of 64 s. For typical Internet paths, the optimum poll interval is about 64 s. For fast LANs with modern computers, a poll exponent of 4 (16 s) is appropriate. The poll process sends NTP packets at intervals determined by the clock discipline algorithm.',en:{instance:{one:"system",other:"systems"}}},"ntpd.sys_precision":{colors:s.default[6],en:{instance:{one:"system",other:"systems"}}},"ntpd.peer_offset":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Peer Offset",colors:s.default[1],layout:{left:0,top:5,width:2,height:5}}],info:"The offset of the peer clock relative to the system clock in milliseconds. Smaller values here weight peers more heavily for selection after the initial synchronization of the local clock. For a system providing time service to other systems, these should be as low as possible.",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_delay":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Peer Delay",colors:s.default[12],layout:{left:0,top:5,width:2,height:5}}],info:"The round-trip time (RTT) for communication with the peer, similar to the delay shown by the ping command. Not as critical as either the offset or jitter, but still factored into the selection algorithm (because as a general rule, lower delay means more accurate time). In most cases, it should be below 100ms.",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_dispersion":{info:"This is a measure of the estimated error between the peer and the local system. Lower values here are better.",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_jitter":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Peer Jitter",colors:s.default[4],layout:{left:0,top:5,width:2,height:5}}],info:"This is essentially a remote estimate of the peer's system_jitter value. Lower values here weight highly in favor of peer selection, and this is a good indicator of overall quality of a given time server (good servers will have values not exceeding single digit milliseconds here, with high quality stratum one servers regularly having sub-millisecond jitter).",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_xleave":{info:'This variable is used in interleaved mode (used only in NTP symmetric and broadcast modes). See NTP Interleaved Modes.',en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_rootdelay":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Peer Root Delay",colors:s.default[7],layout:{left:0,top:5,width:2,height:5}}],info:"For a stratum 1 server, this is the access latency for the reference clock. For lower stratum servers, it is the sum of the peer_delay and peer_rootdelay for the system they are syncing off of. Similarly to peer_delay, lower values here are technically better, but have limited influence in peer selection.",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_rootdisp":{info:"Is the same as peer_rootdelay, but measures accumulated peer_dispersion instead of accumulated peer_delay.",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_hmode":{info:"The peer_hmode and peer_pmode variables give info about what mode the packets being sent to and received from a given peer are. Mode 1 is symmetric active (both the local system and the remote peer have each other declared as peers in /etc/ntp.conf), Mode 2 is symmetric passive (only one side has the other declared as a peer), Mode 3 is client, Mode 4 is server, and Mode 5 is broadcast (also used for multicast and manycast operation).",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_pmode":{en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_hpoll":{info:"The peer_hpoll and peer_ppoll variables are log2 representations of the polling interval in seconds.",en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_ppoll":{en:{instance:{one:"peer",other:"peers"}}},"ntpd.peer_precision":{en:{instance:{one:"peer",other:"peers"}}},"spigotmc.tps":{info:"The running 1, 5, and 15 minute average number of server ticks per second. An idealized server will show 20.0 for all values, but in practice this almost never happens. Typical servers should show approximately 19.98-20.0 here. Lower values indicate progressively more server-side lag (and thus that you need better hardware for your server or a lower user limit). For every 0.05 ticks below 20, redstone clocks will lag behind by approximately 0.25%. Values below approximately 19.50 may interfere with complex free-running redstone circuits and will noticeably slow down growth."},"spigotmc.users":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Users",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],info:"The number of currently connected users on the monitored Spigot server."},"boinc.tasks":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Tasks",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],info:"The total number of tasks and the number of active tasks. Active tasks are those which are either currently being processed, or are partially processed but suspended.",en:{instance:{one:"client",other:"clients"}}},"boinc.states":{mainheads:[{chartLibrary:"bars",title:"Task States",layout:{left:3,top:0,width:3,height:5}}],info:"Counts of tasks in each task state. The normal sequence of states is New, Downloading, Ready to Run, Uploading, Uploaded. Tasks which are marked Ready to Run may be actively running, or may be waiting to be scheduled. Compute Errors are tasks which failed for some reason during execution. Aborted tasks were manually cancelled, and will not be processed. Failed Uploads are otherwise finished tasks which failed to upload to the server, and usually indicate networking issues.",en:{instance:{one:"client",other:"clients"}}},"boinc.sched":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Task Scheduling States",layout:{left:6,top:0,width:3,height:5}}],info:"Counts of active tasks in each scheduling state. Scheduled tasks are the ones which will run if the system is permitted to process tasks. Preempted tasks are on standby, and will run if a Scheduled task stops running for some reason. Uninitialized tasks should never be present, and indicate tha the scheduler has not tried to schedule them yet.",en:{instance:{one:"client",other:"clients"}}},"boinc.process":{info:"Counts of active tasks in each process state. Executing tasks are running right now. Suspended tasks have an associated process, but are not currently running (either because the system isn't processing any tasks right now, or because they have been preempted by higher priority tasks). Quit tasks are exiting gracefully. Aborted tasks exceeded some resource limit, and are being shut down. Copy Pending tasks are waiting on a background file transfer to finish. Uninitialized tasks do not have an associated process yet.",en:{instance:{one:"client",other:"clients"}}},"w1sensor.temp":{aggregationMethod:"avg",info:"Temperature derived from 1-Wire temperature sensors.",en:{instance:{one:"sensor",other:"sensors"}}},"logind.sessions":{info:"Local and remote sessions.",en:{instance:{one:"system",other:"systems"}}},"logind.sessions_type":{mainheads:[{chartLibrary:"bars",title:"Session Types",layout:{left:0,top:0,width:3,height:5}}],info:"

Sessions of each session type.

Graphical - sessions are running under one of X11, Mir, or Wayland. Console - sessions are usually regular text mode local logins, but depending on how the system is configured may have an associated GUI. Other - sessions are those that do not fall into the above categories (such as sessions for cron jobs or systemd timer units).

",en:{instance:{one:"system",other:"systems"}}},"logind.sessions_state":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Session States",layout:{left:3,top:0,width:3,height:5}}],info:"

Sessions of each session type.

Graphical - sessions are running under one of X11, Mir, or Wayland. Console - sessions are usually regular text mode local logins, but depending on how the system is configured may have an associated GUI. Other - sessions are those that do not fall into the above categories (such as sessions for cron jobs or systemd timer units).

",en:{instance:{one:"system",other:"systems"}}},"logind.users_state":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"User States",layout:{left:6,top:0,width:3,height:5}}],info:"

Users in each user state.

Offline - users are not logged in. Closing - users are in the process of logging out without lingering. Online - users are logged in, but have no active sessions. Lingering - users are not logged in, but have one or more services still running. Active - users are logged in, and have at least one active session.

",en:{instance:{one:"system",other:"systems"}}},"proxysql.pool_status":{info:"The status of the backend servers. 1=ONLINE backend server is fully operational, 2=SHUNNED backend sever is temporarily taken out of use because of either too many connection errors in a time that was too short, or replication lag exceeded the allowed threshold, 3=OFFLINE_SOFT when a server is put into OFFLINE_SOFT mode, new incoming connections aren't accepted anymore, while the existing connections are kept until they became inactive. In other words, connections are kept in use until the current transaction is completed. This allows to gracefully detach a backend, 4=OFFLINE_HARD when a server is put into OFFLINE_HARD mode, the existing connections are dropped, while new incoming connections aren't accepted either. This is equivalent to deleting the server from a hostgroup, or temporarily taking it out of the hostgroup for maintenance work, -1 Unknown status.",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_net":{info:"The amount of data sent to/received from the backend (This does not include metadata (packets' headers, OK/ERR packets, fields' description, etc).",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_overall_net":{info:"The amount of data sent to/received from the all backends (This does not include metadata (packets' headers, OK/ERR packets, fields' description, etc).",en:{instance:{one:"server",other:"servers"}}},"proxysql.questions":{info:"questions total number of queries sent from frontends, slow_queries number of queries that ran for longer than the threshold in milliseconds defined in global variable mysql-long_query_time. ",en:{instance:{one:"server",other:"servers"}}},"proxysql.connections":{mainheads:[{groupBy:["selected"],selectedDimensions:["connected"],chartLibrary:"easypiechart",title:"Total Connected connections",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}},{groupBy:["selected"],selectedDimensions:["aborted"],chartLibrary:"easypiechart",title:"Total Aborted connections",colors:s.default[7],layout:{left:9,top:0,width:3,height:5}}],info:"aborted number of frontend connections aborted due to invalid credential or max_connections reached, connected number of frontend connections currently connected, created number of frontend connections created, non_idle number of frontend connections that are not currently idle. ",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_latency":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Max Pool Latency",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The currently ping time in microseconds, as reported from Monitor.",en:{instance:{one:"server",other:"servers"}}},"proxysql.queries":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Queries",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"The number of queries routed towards this particular backend server.",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_used_connections":{info:"The number of connections are currently used by ProxySQL for sending queries to the backend server.",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_free_connections":{info:"The number of connections are currently free. They are kept open in order to minimize the time cost of sending a query to the backend server.",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_ok_connections":{info:"The number of connections were established successfully.",en:{instance:{one:"server",other:"servers"}}},"proxysql.pool_error_connections":{info:"The number of connections weren't established successfully.",en:{instance:{one:"server",other:"servers"}}},"proxysql.commands_count":{info:"The total number of commands of that type executed",en:{instance:{one:"server",other:"servers"}}},"proxysql.commands_duration":{info:"The total time spent executing commands of that type, in ms",en:{instance:{one:"server",other:"servers"}}},"sensors.sensor_temperature":{groupBy:["node"],aggregationMethod:"max",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Temperature",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"The temperature of the system as reported by the sensors. High values can indicate cooling issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.sensor_fan_speed":{groupBy:["node"],aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Fan Speed",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The speed of the system fans as reported by the sensors. Low values can indicate cooling issues while high values can indicate excessive noise.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.sensor_voltage":{groupBy:["node"],aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"easypiechart",title:"Minimum Voltage",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The voltage of the system as reported by the sensors. Low values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.sensor_current":{groupBy:["node"],aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Current",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],info:"The current of the system as reported by the sensors. High values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.sensor_power":{groupBy:["node"],aggregationMethod:"avg",info:"The power of the system as reported by the sensors. High values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.sensor_energy":{groupBy:["node"],aggregationMethod:"avg",info:"The energy of the system as reported by the sensors. High values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.sensor_humidity":{groupBy:["node"],aggregationMethod:"max",info:"The humidity of the system as reported by the sensors. High values can indicate cooling issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.temperature":{groupBy:["node"],aggregationMethod:"max",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Temperature",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"The temperature of the system as reported by the sensors. High values can indicate cooling issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.fan":{groupBy:["node"],aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Fan Speed",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The speed of the system fans as reported by the sensors. Low values can indicate cooling issues while high values can indicate excessive noise.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.voltage":{groupBy:["node"],aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"easypiechart",title:"Minimum Voltage",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The voltage of the system as reported by the sensors. Low values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.current":{groupBy:["node"],aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Current",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],info:"The current of the system as reported by the sensors. High values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.power":{groupBy:["node"],aggregationMethod:"avg",info:"The power of the system as reported by the sensors. High values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.energy":{groupBy:["node"],aggregationMethod:"avg",info:"The energy of the system as reported by the sensors. High values can indicate power issues.",en:{instance:{one:"sensor",other:"sensors"}}},"sensors.humidity":{groupBy:["node"],aggregationMethod:"max",info:"The humidity of the system as reported by the sensors. High values can indicate cooling issues.",en:{instance:{one:"sensor",other:"sensors"}}},"tomcat.accesses":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Requests",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"The number of requests made to the Tomcat server. It is important to monitor this metric to ensure that the server is not overloaded.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Bandwidth",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The amount of network bandwidth used by the Tomcat server. It is important to monitor this metric to ensure that the server is not overloaded.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.threads":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Threads",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:"The number of threads running in the Tomcat application. It is important to monitor this metric to ensure that the application is running efficiently.",en:{instance:{one:"web server",other:"web servers"}}},"tor.traffic":{info:"This metric tracks Tor traffic statistics collected form the Tor control port. It is important to monitor this metric to ensure that the Tor network is not overloaded.",en:{instance:{one:"server",other:"servers"}}},"powersupply.capacity":{family:"charge",aggregationMethod:"avg",info:"The current battery charge.",en:{instance:{one:"Power supply",other:"Power supplies"}}},"powersupply.charge":{family:"charge",info:'

The battery charge in Amp-hours.

now - actual charge value. full, empty - last remembered value of charge when battery became full/empty. It also could mean "value of charge when battery considered full/empty at given conditions (temperature, age)". I.e. these attributes represents real thresholds, not design values. full_design, empty_design - design charge values, when battery considered full/empty.

',en:{instance:{one:"Power supply",other:"Power supplies"}}},"powersupply.energy":{family:"charge",info:'

The battery charge in Watt-hours.

now - actual charge value. full, empty - last remembered value of charge when battery became full/empty. It also could mean "value of charge when battery considered full/empty at given conditions (temperature, age)". I.e. these attributes represents real thresholds, not design values. full_design, empty_design - design charge values, when battery considered full/empty.

',en:{instance:{one:"Power supply",other:"Power supplies"}}},"powersupply.voltage":{family:"voltage",info:'

The power supply voltage.

now - current voltage. max, min - voltage values that hardware could only guess (measure and retain) the thresholds of a given power supply. max_design, min_design - design values for maximal and minimal power supply voltages. Maximal/minimal means values of voltages when battery considered "full"/"empty" at normal conditions.

',en:{instance:{one:"Power supply",other:"Power supplies"}}},"vsphere.host_cpu_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["host"],chartLibrary:"bars",title:"Top Hosts by CPU Usage",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],info:"Summary CPU usage statistics across all CPUs/cores.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_mem_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["host"],chartLibrary:"bars",title:"Top Hosts by Memory Usage",dimensionsSort:"valueDesc",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}}],info:"Percentage of used machine memory: consumed / machine-memory-size.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_mem_usage":{aggregationMethod:"sum",info:'granted is amount of machine memory that is mapped for a host, it equals sum of all granted metrics for all powered-on virtual machines, plus machine memory for vSphere services on the host. consumed is amount of machine memory used on the host, it includes memory used by the Service Console, the VMkernel, vSphere services, plus the total consumed metrics for all running virtual machines. consumed = total host memory - free host memory.active is sum of all active metrics for all powered-on virtual machines plus vSphere services (such as COS, vpxa) on the host.shared is sum of all shared metrics for all powered-on virtual machines, plus amount for vSphere services on the host. sharedcommon is amount of machine memory that is shared by all powered-on virtual machines and vSphere services on the host. shared - sharedcommon = machine memory (host memory) savings (KB). For details see Measuring and Differentiating Types of Memory Usage and Memory Counters articles.',en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_mem_swap_io":{aggregationMethod:"sum",info:"This statistic refers to VMkernel swapping and not to guest OS swapping. in is sum of swapinRate values for all powered-on virtual machines on the host.swapinRate is rate at which VMKernel reads data into machine memory from the swap file. out is sum of swapoutRate values for all powered-on virtual machines on the host.swapoutRate is rate at which VMkernel writes to the virtual machine\u2019s swap file from machine memory.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_disk_io":{aggregationMethod:"sum",info:"Summary read/write statistics across all disks.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_disk_max_latency":{aggregationMethod:"max",info:"latency is highest latency value across all disks.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_net_traffic":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_net_packets":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_net_errors":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_net_drops":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_overall_status":{aggregationMethod:"sum",info:"green is OK, yellow is might have a problem, red is definitely has a problem, gray is unknown.",en:{instance:{one:"host",other:"hosts"}}},"vsphere.host_system_uptime":{aggregationMethod:"min",en:{instance:{one:"host",other:"hosts"}}},"vsphere.vm_cpu_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["vm"],chartLibrary:"bars",title:"Top VMs by CPU Usage",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:"Summary CPU usage statistics across all CPUs/cores.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_mem_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["vm"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top VMs by Memory Usage",colors:s.default[4],layout:{left:9,top:0,width:3,height:5}}],info:"Percentage of used virtual machine \u201cphysical\u201d memory: active / virtual machine configured size.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_mem_usage":{aggregationMethod:"sum",info:'granted is amount of guest \u201cphysical\u201d memory that is mapped to machine memory, it includes shared memory amount. consumed is amount of guest \u201cphysical\u201d memory consumed by the virtual machine for guest memory, consumed = granted - memory saved due to memory sharing. active is amount of memory that is actively used, as estimated by VMkernel based on recently touched memory pages. shared is amount of guest \u201cphysical\u201d memory shared with other virtual machines (through the VMkernel\u2019s transparent page-sharing mechanism, a RAM de-duplication technique). For details see Measuring and Differentiating Types of Memory Usage and Memory Counters articles.',en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_mem_swap_io":{aggregationMethod:"sum",info:"This statistic refers to VMkernel swapping and not to guest OS swapping. in is rate at which VMKernel reads data into machine memory from the swap file. out is rate at which VMkernel writes to the virtual machine\u2019s swap file from machine memory.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_mem_swap_usage":{aggregationMethod:"sum",info:"This statistic refers to VMkernel swapping and not to guest OS swapping. swapped is amount of guest physical memory swapped out to the virtual machine's swap file by the VMkernel. Swapped memory stays on disk until the virtual machine needs it.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_disk_io":{aggregationMethod:"sum",info:"Summary read/write statistics across all disks.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_disk_max_latency":{aggregationMethod:"max",info:"latency is highest latency value across all disks.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_net_traffic":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_net_packets":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_net_drops":{aggregationMethod:"sum",info:"Summary receive/transmit statistics across all network interfaces.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_overall_status":{aggregationMethod:"sum",info:"green is OK, yellow is might have a problem, red is definitely has a problem, gray is unknown.",en:{instance:{one:"vm",other:"vms"}}},"vsphere.vm_system_uptime":{aggregationMethod:"min",en:{instance:{one:"vm",other:"vms"}}},"vcsa.system_health_status":{info:"green: all components are healthy; yellow: one or more components might become overloaded soon; orange: one or more components in the appliance might be degraded; red: one or more components might be in an unusable status and the appliance might become unresponsive soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.applmgmt_health_status":{info:"green: the component is healthy; yellow: the component is healthy, but may have some problems; orange: the component is degraded, and may have serious problems; red: the component is unavailable, or will stop functioning soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.load_health_status":{info:"green: the component is healthy; yellow: the component is healthy, but may have some problems; orange: the component is degraded, and may have serious problems; red: the component is unavailable, or will stop functioning soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.mem_health_status":{info:"green: the component is healthy; yellow: the component is healthy, but may have some problems; orange: the component is degraded, and may have serious problems; red: the component is unavailable, or will stop functioning soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.swap_health_status":{info:"green: the component is healthy; yellow: the component is healthy, but may have some problems; orange: the component is degraded, and may have serious problems; red: the component is unavailable, or will stop functioning soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.database_storage_health_status":{info:"green: the component is healthy; yellow: the component is healthy, but may have some problems; orange: the component is degraded, and may have serious problems; red: the component is unavailable, or will stop functioning soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.storage_health_status":{info:"green: the component is healthy; yellow: the component is healthy, but may have some problems; orange: the component is degraded, and may have serious problems; red: the component is unavailable, or will stop functioning soon; gray: no health data is available; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"vcsa.software_packages_health_status":{info:"softwarepackages represents information on available software updates available in the remote vSphere Update Manager repository.green: no updates available; orange: non-security updates are available; red: security updates are available; gray: an error retrieving information on software updates; unknown: collector failed to decode the status.",en:{instance:{one:"server appliance",other:"server appliances"}}},"zookeeper.server_state":{info:"0: unknown, 1: leader, 2: follower, 3: observer, 4: standalone.",en:{instance:{one:"server",other:"servers"}}},"squidlog.requests":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Requests",colors:s.default[1],layout:{left:0,top:0,width:3,height:5}}],info:"Total number of requests (log lines read). It includes unmatched."},"squidlog.excluded_requests":{info:'unmatched counts the lines in the log file that are not matched by the plugin parser (let us know if you have any unmatched).'},"squidlog.type_requests":{info:"Requests by response type:
  • success includes 1xx, 2xx, 0, 304, 401.
  • error includes 5xx and 6xx.
  • redirect includes 3xx except 304.
  • bad includes 4xx except 401.
"},"squidlog.http_status_code_class_responses":{info:'The HTTP response status code classes. According to rfc7231:
  • 1xx is informational responses.
  • 2xx is successful responses.
  • 3xx is redirects.
  • 4xx is bad requests.
  • 5xx is internal server errors.
  • Squid also uses 0 for a result code being unavailable, and 6xx to signal an invalid header, a proxy error.'},"squidlog.http_status_code_responses":{info:"Number of responses for each http response status code individually."},"squidlog.uniq_clients":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Unique Clients",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"Unique clients (requesting instances), within each data collection iteration. If data collection is per second, this chart shows unique clients per second."},"squidlog.bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Bandwidth",colors:s.default[7],layout:{left:6,top:0,width:3,height:5}}],info:"The size is the amount of data delivered to the clients. Mind that this does not constitute the net object size, as headers are also counted. Also, failed requests may deliver an error page, the size of which is also logged here."},"squidlog.response_time":{aggregationMethod:"avg",info:"The elapsed time considers how many milliseconds the transaction busied the cache. It differs in interpretation between TCP and UDP:
    • TCP this is basically the time from having received the request to when Squid finishes sending the last byte of the response.
    • UDP this is the time between scheduling a reply and actually sending it.
    Please note that the entries are logged after the reply finished being sent, not during the lifetime of the transaction."},"squidlog.cache_result_code_requests":{info:'The Squid result code is composed of several tags (separated by underscore characters) which describe the response sent to the client. Check the squid documentation about them.'},"squidlog.cache_result_code_transport_tag_requests":{info:"These tags are always present and describe delivery method.
    • TCP requests on the HTTP port (usually 3128).
    • UDP requests on the ICP port (usually 3130) or HTCP port (usually 4128).
    • NONE Squid delivered an unusual response or no response at all. Seen with cachemgr requests and errors, usually when the transaction fails before being classified into one of the above outcomes. Also seen with responses to CONNECT requests.
    "},"squidlog.cache_result_code_handling_tag_requests":{info:'These tags are optional and describe why the particular handling was performed or where the request came from.
    • CF at least one request in this transaction was collapsed. See collapsed_forwarding for more details about request collapsing.
    • CLIENT usually seen with client issued a "no-cache", or analogous cache control command along with the request. Thus, the cache has to validate the object.
    • IMS the client sent a revalidation (conditional) request.
    • ASYNC the request was generated internally by Squid. Usually this is background fetches for cache information exchanges, background revalidation from stale-while-revalidate cache controls, or ESI sub-objects being loaded.
    • SWAPFAIL the object was believed to be in the cache, but could not be accessed. A new copy was requested from the server.
    • REFRESH a revalidation (conditional) request was sent to the server.
    • SHARED this request was combined with an existing transaction by collapsed forwarding.
    • REPLY the HTTP reply from server or peer. Usually seen on DENIED due to http_reply_access ACLs preventing delivery of servers response object to the client.
    '},"squidlog.cache_code_object_tag_requests":{info:'These tags are optional and describe what type of object was produced.
    • NEGATIVE only seen on HIT responses, indicating the response was a cached error response. e.g. 404 not found.
    • STALE the object was cached and served stale. This is usually caused by stale-while-revalidate or stale-if-error cache controls.
    • OFFLINE the requested object was retrieved from the cache during offline_mode. The offline mode never validates any object.
    • INVALID an invalid request was received. An error response was delivered indicating what the problem was.
    • FAILED only seen on REFRESH to indicate the revalidation request failed. The response object may be the server provided network error or the stale object which was being revalidated depending on stale-if-error cache control.
    • MODIFIED only seen on REFRESH responses to indicate revalidation produced a new modified object.
    • UNMODIFIED only seen on REFRESH responses to indicate revalidation produced a 304 (Not Modified) status. The client gets either a full 200 (OK), a 304 (Not Modified), or (in theory) another response, depending on the client request and other details.
    • REDIRECT Squid generated an HTTP redirect response to this request.
    '},"squidlog.cache_code_load_source_tag_requests":{info:"These tags are optional and describe whether the response was loaded from cache, network, or otherwise.
    • HIT the response object delivered was the local cache object.
    • MEM the response object came from memory cache, avoiding disk accesses. Only seen on HIT responses.
    • MISS the response object delivered was the network response object.
    • DENIED the request was denied by access controls.
    • NOFETCH an ICP specific type, indicating service is alive, but not to be used for this request.
    • TUNNEL a binary tunnel was established for this transaction.
    "},"squidlog.cache_code_error_tag_requests":{info:"These tags are optional and describe some error conditions which occurred during response delivery.
    • ABORTED the response was not completed due to the connection being aborted (usually by the client).
    • TIMEOUT the response was not completed due to a connection timeout.
    • IGNORED while refreshing a previously cached response A, Squid got a response B that was older than A (as determined by the Date header field). Squid ignored response B (and attempted to use A instead).
    "},"squidlog.http_method_requests":{info:'The request method to obtain an object. Please refer to section request-methods for available methods and their description.'},"squidlog.hier_code_requests":{info:'A code that explains how the request was handled, e.g. by forwarding it to a peer, or going straight to the source. Any hierarchy tag may be prefixed with TIMEOUT_, if the timeout occurs waiting for all ICP replies to return from the neighbours. The timeout is either dynamic, if the icp_query_timeout was not set, or the time configured there has run up. Refer to Hierarchy Codes for details on hierarchy codes.'},"squidlog.server_address_forwarded_requests":{info:"The IP address or hostname where the request (if a miss) was forwarded. For requests sent to origin servers, this is the origin server's IP address. For requests sent to a neighbor cache, this is the neighbor's hostname. NOTE: older versions of Squid would put the origin server hostname here."},"squidlog.mime_type_requests":{info:"The content type of the object as seen in the HTTP reply header. Please note that ICP exchanges usually don't have any content type."},"cockroachdb.process_cpu_time_combined_percentage":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average CPU Usage",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"Current combined cpu utilization, calculated as (user+system)/num of logical cpus."},"cockroachdb.host_disk_bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Disk Bandwidth",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}}],info:"Summary disk bandwidth statistics across all system host disks."},"cockroachdb.host_disk_operations":{info:"Summary disk operations statistics across all system host disks."},"cockroachdb.host_disk_iops_in_progress":{info:"Summary disk iops in progress statistics across all system host disks."},"cockroachdb.host_network_bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Network Bandwidth",colors:s.default[4],layout:{left:6,top:0,width:3,height:5}}],info:"Summary network bandwidth statistics across all system host network interfaces."},"cockroachdb.host_network_packets":{info:"Summary network packets statistics across all system host network interfaces."},"cockroachdb.live_nodes":{info:"Will be 0 if this node is not itself live."},"cockroachdb.total_storage_capacity":{info:"Entire disk capacity. It includes non-CR data, CR data, and empty space."},"cockroachdb.storage_capacity_usability":{info:"usable is sum of empty space and CR data, unusable is space used by non-CR data."},"cockroachdb.storage_usable_capacity":{info:"Breakdown of usable space."},"cockroachdb.storage_used_capacity_percentage":{aggregationMethod:"avg",info:"total is % of total space used, usable is % of usable space used."},"cockroachdb.sql_bandwidth":{info:"The total amount of SQL client network traffic."},"cockroachdb.sql_errors":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total SQL Errors",colors:s.default[7],layout:{left:9,top:0,width:3,height:5}}],info:"statement is statements resulting in a planning or runtime error, transaction is SQL transactions abort errors."},"cockroachdb.sql_started_ddl_statements":{info:"The amount of started DDL (Data Definition Language) statements. This type means database schema changes. It includes CREATE, ALTER, DROP, RENAME, TRUNCATE and COMMENT statements."},"cockroachdb.sql_executed_ddl_statements":{info:"The amount of executed DDL (Data Definition Language) statements. This type means database schema changes. It includes CREATE, ALTER, DROP, RENAME, TRUNCATE and COMMENT statements."},"cockroachdb.sql_started_dml_statements":{info:"The amount of started DML (Data Manipulation Language) statements."},"cockroachdb.sql_executed_dml_statements":{info:"The amount of executed DML (Data Manipulation Language) statements."},"cockroachdb.sql_started_tcl_statements":{info:"The amount of started TCL (Transaction Control Language) statements."},"cockroachdb.sql_executed_tcl_statements":{info:"The amount of executed TCL (Transaction Control Language) statements."},"cockroachdb.live_bytes":{info:"The amount of live data used by both applications and the CockroachDB system."},"cockroachdb.kv_transactions":{info:"KV transactions breakdown:
    • committed committed KV transactions (including 1PC).
    • fast-path_committed KV transaction on-phase commit attempts.
    • aborted aborted KV transactions.
    "},"cockroachdb.kv_transaction_restarts":{info:'KV transactions restarts breakdown:
    • write too old restarts due to a concurrent writer committing first.
    • write too old (multiple) restarts due to multiple concurrent writers committing first.
    • forwarded timestamp (iso=serializable) restarts due to a forwarded commit timestamp and isolation=SERIALIZABLE".
    • possible replay restarts due to possible replays of command batches at the storage layer.
    • async consensus failure restarts due to async consensus writes that failed to leave intents.
    • read within uncertainty interval restarts due to reading a new value within the uncertainty interval.
    • aborted restarts due to an abort by a concurrent transaction (usually due to deadlock).
    • push failure restarts due to a transaction push failure.
    • unknown restarts due to a unknown reasons.
    '},"cockroachdb.ranges":{info:'CockroachDB stores all user data (tables, indexes, etc.) and almost all system data in a giant sorted map of key-value pairs. This keyspace is divided into "ranges", contiguous chunks of the keyspace, so that every key can always be found in a single range.'},"cockroachdb.ranges_replication_problem":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Replication Problems",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],info:"Ranges with not optimal number of replicas:
    • unavailable ranges with fewer live replicas than needed for quorum.
    • under replicated ranges with fewer live replicas than the replication target.
    • over replicated ranges with more live replicas than the replication target.
    "},"cockroachdb.replicas":{info:"CockroachDB replicates each range (3 times by default) and stores each replica on a different node."},"cockroachdb.replicas_leaders":{info:"For each range, one of the replicas is the leader for write requests, not leaseholders is the number of Raft leaders whose range lease is held by another store."},"cockroachdb.replicas_leaseholders":{info:'For each range, one of the replicas holds the "range lease". This replica, referred to as the leaseholder, is the one that receives and coordinates all read and write requests for the range.'},"cockroachdb.queue_processing_failures":{info:"Failed replicas breakdown by queue:
    • gc replicas which failed processing in the GC queue.
    • replica gc replicas which failed processing in the replica GC queue.
    • replication replicas which failed processing in the replicate queue.
    • split replicas which failed processing in the split queue.
    • consistency replicas which failed processing in the consistency checker queue.
    • raft log replicas which failed processing in the Raft log queue.
    • raft snapshot replicas which failed processing in the Raft repair queue.
    • time series maintenance replicas which failed processing in the time series maintenance queue.
    "},"cockroachdb.rebalancing_queries":{info:"Number of kv-level requests received per second by the store, averaged over a large time period as used in rebalancing decisions."},"cockroachdb.rebalancing_writes":{info:"Number of keys written (i.e. applied by raft) per second to the store, averaged over a large time period as used in rebalancing decisions."},"cockroachdb.slow_requests":{info:"Requests that have been stuck for a long time."},"cockroachdb.timeseries_samples":{info:"The amount of metric samples written to disk."},"cockroachdb.timeseries_write_errors":{info:"The amount of errors encountered while attempting to write metrics to disk."},"cockroachdb.timeseries_write_bytes":{info:"Size of metric samples written to disk."},"cockroachdb.process_cpu_time_percentage":{aggregationMethod:"avg",info:"The percentage of CPU time used by the CockroachDB process. High usage may indicate the need for additional resources or optimization."},"cockroachdb.process_memory":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Memory Usage",colors:s.default[1],layout:{left:0,top:5,width:3,height:5}}],info:"The amount of memory used by the CockroachDB process. High memory usage may indicate the need for additional resources or optimization."},"cockroachdb.process_file_descriptors":{info:"The number of file descriptors used by the CockroachDB process. High usage may indicate the need for additional resources or optimization."},"cockroachdb.process_uptime":{aggregationMethod:"min",info:"The amount of time that the CockroachDB process has been running. This can be useful for understanding the overall health and stability of the system."},"cockroachdb.node_liveness_heartbeats":{info:"The number of liveness heartbeats sent by the CockroachDB node. This can be useful for understanding the overall health and stability of the cluster."},"cockroachdb.sql_statements_total":{info:"The total number of SQL statements executed in the CockroachDB cluster. This can be useful for understanding overall system load and potential bottlenecks."},"cockroachdb.sql_active_distributed_queries":{info:"The number of active distributed SQL queries in the CockroachDB cluster. This can be useful for understanding overall system load and potential bottlenecks."},"cockroachdb.sql_distributed_flows":{info:"'The number of active distributed flows in the CockroachDB cluster. This can be useful for understanding overall system load and potential bottlenecks."},"cockroachdb.rocksdb_table_operations":{info:"The number of RocksDB table operations in the CockroachDB cluster. This can be useful for understanding overall system load and potential bottlenecks."},"cockroachdb.rocksdb_cache_hit_rate":{aggregationMethod:"avg",info:"The RocksDB cache hit rate in the CockroachDB cluster. This can be useful for understanding the efficiency of the cache and identifying potential performance issues."},"cockroachdb.code_heap_memory_usage":{info:"The amount of memory used by the code heap in the CockroachDB cluster. High usage may indicate the need for additional resources or optimization."},"cockroachdb.goroutines":{info:"The number of goroutines in the CockroachDB cluster. This can be useful for understanding overall system load and potential bottlenecks."},"cockroachdb.gc_count":{info:"The number of garbage collection cycles in the CockroachDB cluster. This can be useful for understanding overall system performance and potential bottlenecks."},"cockroachdb.gc_pause":{info:"The total time spent in garbage collection pauses in the CockroachDB cluster. High values may indicate the need for optimization or additional resources."},"cockroachdb.cgo_calls":{info:"The number of CGo calls in the CockroachDB cluster. This can be useful for understanding overall system load and potential bottlenecks."},"perf.instructions_per_cycle":{info:'An IPC < 1.0 likely means memory bound, and an IPC > 1.0 likely means instruction bound. For more details about the metric take a look at this blog post.'},"filesystem.vfs_deleted_objects":{title:"VFS remove",info:'Number of calls to VFS unlinker function. This chart may not show all file system events if it uses other functions to store data on disk. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_io":{title:"VFS IO",info:'Number of calls to VFS I/O functions. This chart may not show all file system events if it uses other functions to store data on disk. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_io_bytes":{title:"VFS bytes written",info:'Total of bytes read or written with success using the VFS I/O functions. This chart may not show all file system events if it uses other functions to store data on disk. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_io_error":{title:"VFS IO error",info:'Number of failed calls to VFS I/O functions. This chart may not show all file system events if it uses other functions to store data on disk. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_fsync":{info:'Number of calls to VFS syncer function. This chart may not show all file system events if it uses other functions to sync data on disk. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_fsync_error":{info:'Number of failed calls to VFS syncer function.. This chart may not show all file system events if it uses other functions to sync data on disk. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_open":{info:'Number of calls to VFS opener function. This chart may not show all file system events if it uses other functions to open files. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_open_error":{info:'Number of failed calls to VFS opener function. This chart may not show all file system events if it uses other functions to open files. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_create":{info:'Number of calls to VFS creator function. This chart may not show all file system events if it uses other functions to create files. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.vfs_create_error":{info:'Number of failed calls to VFS creator function. This chart may not show all file system events if it uses other functions to create files. Netdata shows virtual file system metrics per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File Systems.
    ',en:{instance:{one:"system",other:"systems"}}},"filesystem.ext4_read_latency":{aggregationMethod:"avg",info:'Latency for each read request monitoring ext4 reader function.'+f+'to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.ext4_write_latency":{aggregationMethod:"avg",info:'Latency for each write request monitoring ext4 writer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.ext4_open_latency":{aggregationMethod:"avg",info:'Latency for each open request monitoring ext4 opener function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.ext4_sync_latency":{aggregationMethod:"avg",info:'Latency for each sync request monitoring ext4 syncer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.xfs_read_latency":{aggregationMethod:"avg",info:'Latency for each read request monitoring xfs reader function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.xfs_write_latency":{aggregationMethod:"avg",info:'Latency for each write request monitoring xfs writer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.xfs_open_latency":{aggregationMethod:"avg",info:'Latency for each open request monitoring xfs opener function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.xfs_sync_latency":{aggregationMethod:"avg",info:'Latency for each sync request monitoring xfs syncer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.nfs_read_latency":{aggregationMethod:"avg",info:'Latency for each read request monitoring nfs reader function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.nfs_write_latency":{aggregationMethod:"avg",info:'Latency for each write request monitoring nfs writer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.nfs_open_latency":{aggregationMethod:"avg",info:'Latency for each open request monitoring nfs opener function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.nfs_attribute_latency":{aggregationMethod:"avg",info:'Latency for each get attribute request monitoring nfs attribute function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.zfs_read_latency":{aggregationMethod:"avg",info:'Latency for each read request monitoring zfs reader function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.zfs_write_latency":{aggregationMethod:"avg",info:'Latency for each write request monitoring zfs writer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.zfs_open_latency":{aggregationMethod:"avg",info:'Latency for each open request monitoring zfs opener function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.zfs_sync_latency":{aggregationMethod:"avg",info:'Latency for each sync request monitoring zfs syncer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.btrfs_read_latency":{aggregationMethod:"avg",info:'Latency for each read request monitoring btrfs reader function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.btrfs_write_latency":{aggregationMethod:"avg",info:'Latency for each write request monitoring btrfs writer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.btrfs_open_latency":{aggregationMethod:"avg",info:'Latency for each open request monitoring btrfs opener function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"filesystem.btrfs_sync_latency":{aggregationMethod:"avg",info:'Latency for each sync request monitoring btrfs syncer function.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"mount_points.call":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Syscalls to mount and unmount",layout:{left:6,top:0,width:3,height:5}}],info:'Monitor calls to syscalls that are responsible for attaching (mount(2)) or removing filesystems (umount(2)). This chart has relationship with File systems.'+f,en:{instance:{one:"system",other:"systems"}}},"mount_points.error":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Errors to mount and unmount",colors:s.default[1],layout:{left:9,top:0,width:3,height:5}}],info:'Monitor errors in calls to syscalls that are responsible for attaching (mount(2)) or removing filesystems (umount(2)). This chart has relationship with File systems.'+f,en:{instance:{one:"system",other:"systems"}}},"filesystem.file_descriptor":{info:'Number of calls for internal functions on the Linux kernel responsible to open and closing files. Netdata shows file access per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File systems',en:{instance:{one:"system",other:"systems"}}},"filesystem.file_error":{info:'Number of failed calls to the kernel internal function responsible to open and closing files. Netdata shows file error per application and cgroup (systemd Services) if apps or cgroup (systemd Services) plugins are enabled.'+f+' to monitor File systems.',en:{instance:{one:"system",other:"systems"}}},"netdata.aclk_status":{valueRange:[0,1],info:"This chart shows if ACLK was online during entirety of the sample duration.",en:{instance:{one:"agent",other:"agents"}}},"netdata.aclk_query_per_second":{info:"This chart shows how many queries were added for ACLK_query thread to process and how many it was actually able to process.",en:{instance:{one:"agent",other:"agents"}}},"netdata.aclk_latency_mqtt":{aggregationMethod:"avg",info:"Measures latency between MQTT publish of the message and it's PUB_ACK being received",en:{instance:{one:"agent",other:"agents"}}},"vernemq.sockets":{mainheads:[{groupBy:["selected"],selectedDimensions:["open_sockets"],chartLibrary:"gauge",title:"Total Connected Clients"}],en:{instance:{one:"broker",other:"brokers"}}},"vernemq.queue_processes":{mainheads:[{groupBy:["selected"],selectedDimensions:["queue_processes"],chartLibrary:"gauge",title:"Total Queues Processes"}],en:{instance:{one:"broker",other:"brokers"}}},"vernemq.queue_messages":{mainheads:[{groupBy:["selected"],selectedDimensions:["queue_message_in"],chartLibrary:"easypiechart",title:"Total MQTT Receive Rate"},{groupBy:["selected"],selectedDimensions:["queue_message_out"],chartLibrary:"easypiechart",title:"Total MQTT Send Rate"}],en:{instance:{one:"broker",other:"brokers"}}},"vernemq.average_scheduler_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",selectedDimensions:["system_utilization"],chartLibrary:"gauge",title:"Maximum Scheduler Utilization",colors:s.default[5]}],en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_unsubscribe":{info:"This metric measures the number of MQTT unsubscribe attempts. Monitoring this metric can help identify any potential issues related to unsubscription.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_publish":{info:"This metric measures the number of MQTT publish attempts. Monitoring this metric can help identify any potential issues related to publishing.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_publish_errors":{info:"This metric measures the number of errors encountered during MQTT publish attempts. Monitoring this metric can help identify any potential issues related to publishing.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_publish_auth_errors":{info:"This metric measures the number of authentication errors encountered during MQTT publish attempts. Monitoring this metric can help identify any potential authentication issues.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_puback":{info:"This metric measures the number of MQTT puback requests. A PUBACK message is the response to a PUBLISH message with QoS level 1. A PUBACK message is sent by a server in response to a PUBLISH message from a publishing client, and by a subscriber in response to a PUBLISH message from the server. Monitoring this metric can help identify any potential issues related to acknowledgements.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_ping":{info:"This metric measures the number of MQTT ping requests. Monitoring this metric can help identify any potential issues related to communication.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.messages_rate":{mainheads:[{groupBy:["selected"],selectedDimensions:["pulsar_rate_in"],chartLibrary:"easypiechart",title:"Total Published"},{groupBy:["selected"],selectedDimensions:["pulsar_rate_out"],chartLibrary:"easypiechart",title:"Total Dispatched"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.subscription_msg_rate_redeliver":{mainheads:[{groupBy:["selected"],selectedDimensions:["pulsar_subscription_msg_rate_redeliver"],chartLibrary:"gauge",title:"Total Redelivered"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.subscription_blocked_on_unacked_messages":{mainheads:[{groupBy:["selected"],selectedDimensions:["pulsar_subscription_blocked_on_unacked_messages"],chartLibrary:"gauge",title:"Total Blocked On Unacked"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.msg_backlog":{mainheads:[{groupBy:["selected"],selectedDimensions:["pulsar_msg_backlog"],chartLibrary:"gauge",title:"Total Messages Backlog"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.namespace_messages_rate":{heads:[{groupBy:["selected"],selectedDimensions:["publish"],chartLibrary:"easypiechart",title:"Total Published"},{groupBy:["selected"],selectedDimensions:["dispatch"],chartLibrary:"easypiechart",title:"Total Dispatched"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.namespace_subscription_msg_rate_redeliver":{mainheads:[{groupBy:["selected"],selectedDimensions:["redelivered"],chartLibrary:"gauge",title:"Total Redelivered"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.namespace_subscription_blocked_on_unacked_messages":{mainheads:[{groupBy:["selected"],selectedDimensions:["blocked"],chartLibrary:"gauge",title:"Total Blocked On Unacked"}],en:{instance:{one:"broker",other:"brokers"}}},"pulsar.namespace_msg_backlog":{mainheads:[{groupBy:["selected"],selectedDimensions:["backlog"],chartLibrary:"gauge",title:"Total Messages Backlog"}],en:{instance:{one:"broker",other:"brokers"}}},"amdgpu.gpu_utilization":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_utilization":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_clk_frequency":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_clk_frequency":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_vram_usage_perc":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_vram_usage":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_vis_vram_usage_perc":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_vis_vram_usage":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_gtt_usage_perc":{en:{instance:{one:"GPU",other:"GPUs"}}},"amdgpu.gpu_mem_gtt_usage":{en:{instance:{one:"GPU",other:"GPUs"}}},"intelgpu.frequency":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Frequency",valueRange:[0,null],colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],aggregationMethod:"avg",en:{instance:{one:"GPU",other:"GPUs"}}},"intelgpu.power":{mainheads:[{groupBy:["selected"],selectedDimensions:["gpu"],chartLibrary:"gauge",title:"Total GPU Power",valueRange:[0,null],colors:s.default[3],layout:{left:3,top:0,width:3,height:5}},{groupBy:["selected"],selectedDimensions:["package"],chartLibrary:"gauge",title:"Total Package Power",valueRange:[0,null],colors:s.default[3],layout:{left:6,top:0,width:3,height:5}}],aggregationMethod:"sum",en:{instance:{one:"GPU",other:"GPUs"}}},"intelgpu.engine_busy_perc":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["engine_class"],aggregationMethod:"avg",chartLibrary:"bars",title:"Average Utilization of Engines Classes",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],en:{instance:{one:"GPU engine",other:"GPU engines"}},groupBy:["label"],groupByLabel:["engine_class"]},"nvidia_smi.fan_speed":{heads:[{groupBy:["selected"],aggregationMethod:"max",selectedDimensions:["speed"],chartLibrary:"easypiechart",title:"Maximum Fan Speed"}],en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.temperature":{heads:[{groupBy:["selected"],aggregationMethod:"max",selectedDimensions:["temp"],chartLibrary:"easypiechart",title:"Maximum Temperature"}],en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.memory_allocated":{heads:[{groupBy:["selected"],selectedDimensions:["used"],chartLibrary:"easypiechart",title:"Total Used Memory"}],en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.power":{aggregationMethod:"avg",heads:[{groupBy:["selected"],selectedDimensions:["power"],chartLibrary:"easypiechart",title:"Total Power Utilization",colors:s.default[5]}],en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_pcie_bandwidth_usage":{info:"The amount of PCI Express (PCIe) bandwidth being used by the GPU. Monitoring this metric can help identify if the GPU is being bottlenecked by the PCIe bus and determine if a faster GPU is needed.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_fan_speed_perc":{aggregationMethod:"avg",info:"The speed of the GPU's fan in percent. Monitoring this metric is important to ensure that the GPU is not overheating and that the fan is running at the optimal speed.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_utilization":{aggregationMethod:"avg",info:"The amount of utilization of the GPU's compute and graphics units. Monitoring this metric can help identify potential bottlenecks in the GPU's performance and help tune the system for optimal performance.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_memory_utilization":{aggregationMethod:"avg",info:"The amount of GPU memory being used. Monitoring this metric can help identify potential memory usage issues and help optimize memory usage for better performance.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_decoder_utilization":{aggregationMethod:"avg",info:"The amount of utilization of the GPU's decoder units. Monitoring this metric can help identify potential bottlenecks in the GPU's performance and help tune the system for optimal performance.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_encoder_utilization":{aggregationMethod:"avg",info:"The amount of utilization of the GPU's encoder units. Monitoring this metric can help identify potential bottlenecks in the GPU's performance and help tune the system for optimal performance.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_temperature":{info:"The temperature of the GPU in degrees Celsius. Monitoring this metric is important to ensure that the GPU is not overheating and that the fan is running at the optimal speed.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_clock_freq":{info:"The clock frequency of the GPU in MHz. Monitoring this metric can help identify potential bottlenecks in the GPU's performance and help tune the system for optimal performance.",en:{instance:{one:"GPU",other:"GPUs"}}},"nvidia_smi.gpu_performance_state":{info:"The performance state of the GPU. Monitoring this metric can help identify potential performance issues and help tune the system for optimal performance.",en:{instance:{one:"GPU",other:"GPUs"}}},"openvpn.active_clients":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Active Clients"}],info:"The active clients metric indicates the number of clients connected to the OpenVPN server. This metric should be monitored to keep track of the number of connected clients.",en:{instance:{one:"OpenVPN server",other:"OpenVPN servers"}}},"openvpn.total_traffic":{mainheads:[{groupBy:["selected"],selectedDimensions:["out"],chartLibrary:"easypiechart",title:"Total Traffic Sent"},{groupBy:["selected"],selectedDimensions:["in"],chartLibrary:"easypiechart",title:"Total Traffic received"}],info:"The total traffic metric indicates the total amount of data sent and received on the OpenVPN server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"OpenVPN server",other:"OpenVPN servers"}}},"openvpn.user_traffic":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Traffic per User"}],info:"The user traffic metric indicates the amount of data sent and received by each user connected to the OpenVPN server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"OpenVPN server",other:"OpenVPN servers"}}},"openvpn.user_connection_time":{aggregationMethod:"avg",info:"The user connection time metric indicates the time each user is connected to the OpenVPN server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"OpenVPN server",other:"OpenVPN servers"}}},"phpdaemon.workers":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Workers",layout:{left:0,top:0,width:3,height:5}}],info:"The workers metric indicates the number of workers running in the phpdaemon. This metric should be monitored to ensure the proper number of workers is running for the best performance.",en:{instance:{one:"daemon",other:"daemons"}}},"phpdaemon.alive_workers":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Active Workers",layout:{left:3,top:0,width:3,height:5}}],info:"The alive workers metric indicates the number of workers currently active in the phpdaemon. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"daemon",other:"daemons"}}},"phpdaemon.idle_workers":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Idle Workers",layout:{left:6,top:0,width:3,height:5}}],info:"The idle workers metric indicates the number of workers that are currently idle in the phpdaemon. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"daemon",other:"daemons"}}},"phpdaemon.uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime",layout:{left:9,top:0,width:3,height:5}}],info:"The uptime metric indicates the time since the phpdaemon was started. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"daemon",other:"daemons"}}},"phpfpm.connections":{mainheads:[{groupBy:["selected"],selectedDimensions:["active"],chartLibrary:"easypiechart",title:"Active Connections",layout:{left:0,top:0,width:3,height:5}}],info:"This metric indicates the connections count across the following dimensions: active, max_active, idle.",en:{instance:{one:"FastCGI server",other:"FastCGI servers"}}},"phpfpm.requests":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Requests",layout:{left:3,top:0,width:3,height:5}}],info:"The requests metric indicates the number of requests processed by the phpfpm server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"FastCGI server",other:"FastCGI servers"}}},"phpfpm.performance":{info:"The performance metric indicates the performance of the phpfpm server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"FastCGI server",other:"FastCGI servers"}}},"phpfpm.request_duration":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Request Duration",layout:{left:6,top:0,width:3,height:5}}],info:"The request duration metric indicates the time taken to process each request on the phpfpm server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"FastCGI server",other:"FastCGI servers"}}},"phpfpm.request_cpu":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Request CPU",layout:{left:9,top:0,width:3,height:5}}],info:"The request CPU metric indicates the amount of CPU used to process each request on the phpfpm server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"FastCGI server",other:"FastCGI servers"}}},"phpfpm.request_mem":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Request Memory",layout:{left:0,top:5,width:3,height:5}}],info:"The request memory metric indicates the amount of memory used to process each request on the phpfpm server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"FastCGI server",other:"FastCGI servers"}}},"pihole.dns_queries_total":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Queries",layout:{left:0,top:0,width:3,height:5}}],info:"The DNS queries total metric indicates the total number of DNS queries that have been made to the Pi-hole server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.dns_queries":{info:"The DNS queries metric indicates the number of DNS queries that have been made to the Pi-hole server in a given time period. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.dns_queries_percentage":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],selectedDimensions:["blocked"],chartLibrary:"gauge",title:"Blocked Queries %",layout:{left:3,top:0,width:3,height:5}}],info:"The DNS queries percentage metric indicates the percentage of DNS queries that have been made to the Pi-hole server in a given time period. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.unique_clients":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Clients",layout:{left:6,top:0,width:3,height:5}}],info:"The unique clients metric indicates the number of unique clients making DNS queries to the Pi-hole server. This metric should be monitored to ensure the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.blocklist_last_update":{info:"The blocklist last update metric indicates the last time the Pi-hole's blocklist was updated. This metric should be monitored to ensure that the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.dns_queries_types":{aggregationMethod:"avg",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Query Types",layout:{left:9,top:0,width:3,height:5}}],info:"The DNS queries types metric indicates the types of DNS queries that have been made to the Pi-hole server. This metric should be monitored to ensure that the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.domains_on_blocklist":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"number",title:"Domains on Blocklist",layout:{left:0,top:5,width:3,height:5}}],info:"The DNS queries types metric indicates the types of DNS queries that have been made to the Pi-hole server. This metric should be monitored to ensure that the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"pihole.dns_queries_forwarded_destination":{aggregationMethod:"avg",info:"The DNS queries forwarded destination metric indicates the destination of the DNS queries that have been forwarded by the Pi-hole server. This metric should be monitored to ensure that the server is running efficiently.",en:{instance:{one:"Pi-hole server",other:"Pi-hole servers"}}},"supervisord.process_state_code":{info:'Process states map: 0 - stopped, 10 - starting, 20 - running, 30 - backoff,40 - stopping, 100 - exited, 200 - fatal, 1000 - unknown.'},"systemd.unit_file_state":{info:'Systemd unit file state. For details, search for `is-enabled UNIT` in systemctl(1).',en:{instance:{one:"unit file",other:"unit files"}}},"systemd.service_unit_state":{info:'Service units start and control daemons and the processes they consist of. For details, see systemd.service(5)',en:{instance:{one:"unit",other:"units"}}},"systemd.socket_unit_state":{info:'Socket units encapsulate local IPC or network sockets in the system, useful for socket-based activation. For details about socket units, see systemd.socket(5), for details on socket-based activation and other forms of activation, see daemon(7).',en:{instance:{one:"unit",other:"units"}}},"systemd.target_unit_state":{info:'Target units are useful to group units, or provide well-known synchronization points during boot-up, see systemd.target(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.path_unit_state":{info:'Path units may be used to activate other services when file system objects change or are modified. See systemd.path(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.device_unit_state":{info:'Device units expose kernel devices in systemd and may be used to implement device-based activation. For details, see systemd.device(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.mount_unit_state":{info:'Mount units control mount points in the file system. For details, see systemd.mount(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.automount_unit_state":{info:'Automount units provide automount capabilities, for on-demand mounting of file systems as well as parallelized boot-up. See systemd.automount(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.swap_unit_state":{info:'Swap units are very similar to mount units and encapsulate memory swap partitions or files of the operating system. They are described in systemd.swap(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.timer_unit_state":{info:'Timer units are useful for triggering activation of other units based on timers. You may find details in systemd.timer(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.scope_unit_state":{info:'Slice units may be used to group units which manage system processes (such as service and scope units) in a hierarchical tree for resource management purposes. See systemd.scope(5).',en:{instance:{one:"unit",other:"units"}}},"systemd.slice_unit_state":{info:'Scope units are similar to service units, but manage foreign processes instead of starting them as well. See systemd.slice(5).',en:{instance:{one:"unit",other:"units"}}},"anomaly_detection.dimensions":{mainheads:[{groupBy:["selected"],selectedDimensions:["anomalous"],chartLibrary:"number",title:"Total Anomalous Dimensions",layout:{left:3,top:0,width:3,height:5}},{groupBy:["selected"],selectedDimensions:["normal"],chartLibrary:"number",title:"Total Normal Dimensions",layout:{left:6,top:0,width:3,height:5}}],info:"Total count of dimensions considered anomalous or normal. ",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["anomalous"]},"anomaly_detection.anomaly_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",colors:s.default[12],title:"% of Anomalous Dimensions",layout:{left:0,top:0,width:3,height:5}}],info:"Percentage of anomalous dimensions. ",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["anomaly_rate"]},"anomaly_detection.detector_window":{info:"The length of the active window used by the detector. ",en:{instance:{one:"system",other:"systems"}},dimensionsOnNonDimensionGrouping:["above_threshold"]},"anomaly_detection.detector_events":{info:"Flags (0 or 1) to show when an anomaly event has been triggered by the detector. ",en:{instance:{one:"system",other:"systems"}}},"anomaly_detection.prediction_stats":{info:"Diagnostic metrics relating to prediction time of anomaly detection. ",en:{instance:{one:"system",other:"systems"}}},"anomaly_detection.training_stats":{info:"Diagnostic metrics relating to training time of anomaly detection. ",en:{instance:{one:"system",other:"systems"}}},"fail2ban.jail_banned_ips":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["jail"],mainheads:[{groupBy:["dimension"],chartLibrary:"easypiechart",title:"Currently Banned IPs",layout:{left:0,top:0,width:4,height:5}}],info:"This value shows the number of IP addresses currently banned due to exceeding the allowed number of failed login attempts within the defined time window.",en:{instance:{one:"jail",other:"jails"}}},"fail2ban.jail_active_failures":{aggregationMethod:"sum",groupBy:["label"],groupByLabel:["jail"],mainheads:[{groupBy:["dimension"],chartLibrary:"easypiechart",title:"Currently Active Failures",layout:{left:4,top:0,width:4,height:5}}],info:" the number of tickets (IPs) with failures that have not yet caused a ban or have become obsolete.",en:{instance:{one:"jail",other:"jails"}}},"fail2ban.failed_attempts":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Failed Attempts",layout:{left:0,top:0,width:3,height:5}}],info:"

    The number of failed attempts.

    This chart reflects the number of 'Found' lines. Found means a line in the service\u2019s log file matches the failregex in its filter.

    ",en:{instance:{one:"service",other:"services"}}},"fail2ban.bans":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Bans",layout:{left:3,top:0,width:3,height:5}}],info:"

    The number of bans.

    This chart reflects the number of 'Ban' and 'Restore Ban' lines. Ban action happens when the number of failed attempts (maxretry) occurred in the last configured interval (findtime).

    ",en:{instance:{one:"service",other:"services"}}},"fail2ban.banned_ips":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Banned IPs",layout:{left:6,top:0,width:3,height:5}}],info:"

    The number of banned IP addresses.

    ",en:{instance:{one:"service",other:"services"}}},"consul.node_health_check_status":{info:'The current status of the node health check. A node health check monitors the health of the entire node. If the node health check fails, Consul marks the node as unhealthy.',en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.service_health_check_status":{info:'The current status of the service health check. A service check only affects the health of the service it is associated with. If the service health check fails, the DNS interface stops returning that service.',en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.client_rpc_requests_rate":{mainheads:[{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"RPC Requests Rate Per Client"}],info:"The number of RPC requests to a Consul server.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.client_rpc_requests_exceeded_rate":{info:'The number of rate-limited RPC requests to a Consul server. An Increase of this metric either indicates the load is getting high enough to limit the rate or a incorrectly configured Consul agent.',en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.client_rpc_requests_failed_rate":{info:"The number of failed RPC requests to a Consul server.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.memory_allocated":{mainheads:[{groupBy:["label"],groupByLabel:["datacenter"],chartLibrary:"number",title:"Memory Allocated per Consul DC"}],info:"The amount of memory allocated by the Consul process.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.memory_sys":{info:"The amount of memory obtained from the OS.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.gc_pause_time":{aggregationMethod:"avg",info:"The amount of time spent in stop-the-world garbage collection (GC) pauses.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.kvs_apply_time":{aggregationMethod:"avg",info:"The time it takes to complete an update to the KV store.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.kvs_apply_operations_rate":{mainheads:[{groupBy:["label"],groupByLabel:["datacenter"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Key Value Store Operations Rate per DC"}],info:"The number of KV store updates.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.txn_apply_time":{aggregationMethod:"avg",info:"The time spent applying a transaction operation.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.txn_apply_operations_rate":{info:"The number of applied transaction operations.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_commit_time":{aggregationMethod:"avg",info:"The time it takes to commit a new entry to the Raft log on the leader.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_commits_rate":{mainheads:[{groupBy:["label"],groupByLabel:["datacenter"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Raft Commits Rate per DC"}],info:"The number of applied Raft transactions.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.autopilot_health_status":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Health Status Overview"}],info:"The overall health of the local server cluster. The status is healthy if all servers are considered healthy by Autopilot.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.autopilot_failure_tolerance":{info:"The number of voting servers that the cluster can lose while continuing to function.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_leader_last_contact_time":{aggregationMethod:"avg",info:"The time since the leader was last able to contact the follower nodes when checking its leader lease.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_leader_elections_rate":{info:"The number of leadership elections. Increments whenever a Consul server starts an election.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_leadership_transitions_rate":{mainheads:[{groupBy:["label"],groupByLabel:["datacenter"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Leadership Transitions Rate per DC"}],info:"The number of leadership elections. Increments whenever a Consul server becomes a leader.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.server_leadership_status":{info:"The Consul server leadership status.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_thread_main_saturation_perc":{aggregationMethod:"avg",info:"An approximate measurement of the proportion of time the main Raft goroutine is busy and unavailable to accept new work.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_thread_fsm_saturation_perc":{aggregationMethod:"avg",info:"An approximate measurement of the proportion of time the Raft FSM goroutine is busy and unavailable to accept new work.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_fsm_last_restore_duration":{info:"The time taken to restore the FSM from a snapshot on an agent restart or from the leader calling installSnapshot.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_leader_oldest_log_age":{info:"The time elapsed since the oldest journal was written to the leader's journal storage. This can be important for the health of replication when the write rate is high and the snapshot is large, because followers may not be able to recover from a restart if recovery takes longer than the minimum for the current leader.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_rpc_install_snapshot_time":{aggregationMethod:"avg",info:"The time it takes to process the installSnapshot RPC call.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_boltdb_freelist_bytes":{info:'The number of bytes necessary to encode the freelist metadata. When raft_boltdb.NoFreelistSync is set to false these metadata bytes must also be written to disk for each committed log.',en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_boltdb_logs_per_batch_rate":{info:"The number of logs written per batch to the database.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_boltdb_store_logs_time":{aggregationMethod:"avg",info:"The amount of time spent writing logs to the database.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.license_expiration_time":{aggregationMethod:"min`",info:"The amount of time remaining before Consul Enterprise license expires. When the license expires, some Consul Enterprise features will stop working.",en:{instance:{one:"datacenter",other:"datacenters"}}},"envoy.server_state":{aggregationMethod:"avg",mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Envoy Server States",layout:{left:0,top:0,width:3,height:5}}],info:"Server current state",en:{instance:{one:"server",other:"servers"}}},"envoy.server_connections_count":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Server Connections Count",colors:s.default[1],layout:{left:3,top:0,width:3,height:5}}],info:"Server current connections",en:{instance:{one:"server",other:"servers"}}},"envoy.server_parent_connections_count":{info:"Server current parent connections",en:{instance:{one:"server",other:"servers"}}},"envoy.server_memory_allocated_size":{mainheads:[{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top servers by Memory Allocated",layout:{left:6,top:0,width:3,height:5}}],info:"Server memory allocated size",en:{instance:{one:"server",other:"servers"}}},"envoy.server_memory_heap_size":{mainheads:[{groupBy:["instance"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top servers by Heap Size",layout:{left:9,top:0,width:3,height:5}}],info:"Server memory heap size",en:{instance:{one:"server",other:"servers"}}},"envoy.server_memory_physical_size":{info:"Server memory physical size",en:{instance:{one:"server",other:"servers"}}},"envoy.server_uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Server Uptime",colors:s.default[4],layout:{left:0,top:5,width:3,height:5}}],info:"Envoy Server uptime",en:{instance:{one:"server",other:"servers"}}},"envoy.cluster_manager_cluster_count":{mainheads:[{groupBy:["dimension"],chartLibrary:"d3pie",title:"Active and Inactive Envoy Clusters ",layout:{left:3,top:5,width:3,height:5}}],info:"Cluster manager current clusters",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_manager_cluster_changes_rate":{info:"Cluster manager cluster changes",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_manager_cluster_updates_rate":{info:"Cluster manager updates",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_manager_cluster_updated_via_merge_rate":{info:"Cluster manager updates applied as merged updates",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_manager_update_merge_cancelled_rate":{info:"Cluster manager cancelled merged updates",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_manager_update_out_of_merge_window_rate":{info:"Cluster manager out of a merge window updates",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_membership_endpoints_count":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Top Clusters by Membership Endpoints",layout:{left:6,top:5,width:3,height:5}}],info:"Cluster membership current endpoints",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_membership_changes_rate":{info:"Cluster membership changes",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_membership_updates_rate":{info:"Cluster membership update rate",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_active_count":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Upstream Active Connections",colors:s.default[7],layout:{left:9,top:5,width:3,height:5}}],info:"Cluster upstream current active connections",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_rate":{info:"Cluster upstream connections",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_http_rate":{info:"Cluster upstream connections by HTTP version",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_destroy_rate":{info:"Cluster upstream destroyed connections rate",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_connect_fail_rate":{info:"Cluster upstream failed connections",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_connect_timeout_rate":{info:"Cluster upstream timed out connections",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_bytes_rate":{info:"Cluster upstream connection traffic",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_cx_bytes_buffered_size":{info:"Cluster upstream current connection buffered size",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_active_count":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Upstream Active Requests",colors:s.default[7],layout:{left:0,top:10,width:3,height:5}}],info:"Cluster upstream current active requests",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_rate":{info:"Cluster upstream requests",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_failed_rate":{info:"Cluster upstream failed requests",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_pending_active_count":{info:"Cluster upstream current active pending requests",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_pending_rate":{info:"Cluster upstream pending requests",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_pending_failed_rate":{info:"Cluster upstream failed pending requests",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_retry_rate":{info:"Cluster upstream request retries",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_retry_success_rate":{info:"Cluster upstream request successful retries",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.cluster_upstream_rq_retry_backoff_rate":{info:"Cluster upstream request backoff retries",en:{instance:{one:"cluster",other:"clusters"}}},"envoy.listener_manager_listeners_count":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Listeners Count",colors:s.default[9],layout:{left:3,top:10,width:3,height:5}}],info:"Listener manager current listeners",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_manager_listener_changes_rate":{info:"Listener manager listener changes",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_manager_listener_object_events_rate":{info:"Listener manager listener object events",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_cx_active_count":{info:"Listener admin downstream current active connections",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Downstream Active Connections",colors:s.default[9],layout:{left:6,top:10,width:3,height:5}}],en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_cx_rate":{info:"Listener admin downstream connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_cx_destroy_rate":{info:"Listener admin downstream destroyed connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_cx_transport_socket_connect_timeout_rate":{info:"Listener admin downstream timed out connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_cx_rejected_rate":{info:"Listener admin downstream rejected connections",mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Downstream Rejected Connections",colors:s.default[9],layout:{left:9,top:10,width:3,height:5}}],en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_listener_filter_remote_close_rate":{info:"Listener admin downstream connections closed by remote when peek data for listener filters",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_listener_filter_error_rate":{info:"Listener admin downstream read errors when peeking data for listener filters",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_pre_cx_active_count":{info:"Listener admin downstream current active sockets",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_admin_downstream_pre_cx_timeout_rate":{info:"Listener admin downstream timed out sockets",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_cx_active_count":{info:"Listener downstream current active connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_cx_rate":{info:"Listener downstream connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_cx_destroy_rate":{info:"Listener downstream destroyed connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_cx_transport_socket_connect_timeout_rate":{info:"Listener downstream timed out connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_cx_rejected_rate":{info:"Listener downstream rejected connections",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_listener_filter_remote_close_rate":{info:"Listener downstream connections closed by remote when peek data for listener filters",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_listener_filter_error_rate":{info:"Listener downstream read errors when peeking data for listener filters",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_pre_cx_active_count":{info:"Listener downstream current active sockets",en:{instance:{one:"listener",other:"listeners"}}},"envoy.listener_downstream_pre_cx_timeout_rate":{info:"Listener downstream timed out sockets",en:{instance:{one:"listener",other:"listeners"}}},"k8s_state.node_allocatable_cpu_requests_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average CPU Utilization",valueRange:[0,100],layout:{left:0,top:5,width:3,height:5}}],info:"The percentage of allocated CPU resources used by Pod requests. A Pod is scheduled to run on a Node only if the Node has enough CPU resources available to satisfy the Pod CPU request.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_cpu_requests_used":{info:'The amount of allocated CPU resources used by Pod requests. 1000 millicpu is equivalent to 1 physical or virtual CPU core.',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_cpu_limits_utilization":{aggregationMethod:"avg",info:"The percentage of allocated CPU resources used by Pod limits. Total limits may be over 100 percent (overcommitted).",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_cpu_limits_used":{info:'The amount of allocated CPU resources used by Pod limits. 1000 millicpu is equivalent to 1 physical or virtual CPU core.',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_mem_requests_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Memory Utilization",colors:s.default[4],valueRange:[0,100],layout:{left:9,top:5,width:3,height:5}}],info:"The percentage of allocated memory resources used by Pod requests. A Pod is scheduled to run on a Node only if the Node has enough memory resources available to satisfy the Pod memory request.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_mem_requests_used":{info:"The amount of allocated memory resources used by Pod requests.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_mem_limits_utilization":{aggregationMethod:"avg",info:"The percentage of allocated memory resources used by Pod limits. Total limits may be over 100 percent (overcommitted).",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_mem_limits_used":{info:"The amount of allocated memory resources used by Pod limits.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_pods_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Pods Utilization",colors:s.default[12],valueRange:[0,100],layout:{left:3,top:5,width:3,height:5}}],info:"Pods limit utilization.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_allocatable_pods_usage":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Pods limit usage",layout:{left:8,top:0,width:4,height:2.5}}],info:"

    Pods limit usage.

    Available - the number of Pods available for scheduling. Allocated - the number of Pods that have been scheduled.

    ",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_condition":{info:'Health status. If the status of the Ready condition remains False for longer than the pod-eviction-timeout (the default is 5 minutes), then the node controller triggers API-initiated eviction for all Pods assigned to that node. More info.',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_pods_readiness":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Pod Readiness",colors:s.default[0],valueRange:[0,100],layout:{left:0,top:5,width:3,height:5}}],info:"The percentage of Pods that are ready to serve requests.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_pods_readiness_state":{info:"

    Pods readiness state.

    Ready - the Pod has passed its readiness probe and ready to serve requests. Unready - the Pod has not passed its readiness probe yet.

    ",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_pods_condition":{info:'

    Pods state. More info.

    PodReady - the Pod is able to serve requests and should be added to the load balancing pools of all matching Services. PodScheduled - the Pod has been scheduled to a node. PodInitialized - all init containers have completed successfully. ContainersReady - all containers in the Pod are ready.

    ',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_pods_phase":{info:'

    Pods phase. The phase of a Pod is a high-level summary of where the Pod is in its lifecycle. More info.

    Running - the Pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Failed - all containers in the Pod have terminated, and at least one container has terminated in failure. That is, the container either exited with non-zero status or was terminated by the system. Succedeed - all containers in the Pod have terminated in success, and will not be restarted. Pending - the Pod has been accepted by the Kubernetes cluster, but one or more of the containers has not been set up and made ready to run.

    ',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_containers":{info:"The total number of containers and init containers.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_containers_state":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Containers by State",layout:{left:0,top:20,width:4,height:2.5}}],info:'

    The number of containers in different lifecycle states. More info.

    Running - a container is executing without issues. Waiting - a container is still running the operations it requires in order to complete start up. Terminated - a container began execution and then either ran to completion or failed for some reason.

    ',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_init_containers_state":{info:'

    The number of init containers in different lifecycle states. More info.

    Running - a container is executing without issues. Waiting - a container is still running the operations it requires in order to complete start up. Terminated - a container began execution and then either ran to completion or failed for some reason.

    ',en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_age":{mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Node Uptime",layout:{left:8,top:2.5,width:4,height:2.5}}],info:"The lifetime of the Node.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.node_schedulability":{info:"The schedulability of nodes in the Kubernetes cluster. Monitoring this metric can help identify if there are issues with the cluster's ability to schedule pods on nodes.",en:{instance:{one:"K8s node",other:"K8s nodes"}}},"k8s_state.pod_cpu_requests_used":{mainheads:[{groupBy:["selected"],aggregationMethod:"sum",valueRange:[0,null],chartLibrary:"gauge",title:"Total Pod CPU Requests used",colors:s.default[0],layout:{left:0,top:10,width:3,height:5}},{groupBy:["label"],groupByLabel:["k8s_pod_name"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,null],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Maximum CPU Requests per Pod",layout:{left:0,top:15,width:3,height:5}}],info:'The overall CPU resource requests for a Pod. This is the sum of the CPU requests for all the Containers in the Pod. Provided the system has CPU time free, a container is guaranteed to be allocated as much CPU as it requests. 1000 millicpu is equivalent to 1 physical or virtual CPU core.',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_cpu_limits_used":{mainheads:[{groupBy:["selected"],aggregationMethod:"sum",valueRange:[0,null],chartLibrary:"gauge",title:"Total Pod CPU limits used",layout:{left:3,top:10,width:3,height:5}},{groupBy:["label"],groupByLabel:["k8s_pod_name"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,null],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Maximum CPU limits per Pod",layout:{left:3,top:15,width:3,height:5}}],info:'The overall CPU resource limits for a Pod. This is the sum of the CPU limits for all the Containers in the Pod. If set, containers cannot use more CPU than the configured limit. 1000 millicpu is equivalent to 1 physical or virtual CPU core.',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_mem_requests_used":{mainheads:[{groupBy:["selected"],aggregationMethod:"sum",valueRange:[0,null],chartLibrary:"gauge",title:"Total Pod Memory Requests used",colors:s.default[12],layout:{left:6,top:10,width:3,height:5}},{groupBy:["label"],groupByLabel:["k8s_pod_name"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,null],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Pod Memory Requests per Pod",layout:{left:6,top:15,width:3,height:5}}],info:"The overall memory resource requests for a Pod. This is the sum of the memory requests for all the Containers in the Pod.",en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_mem_limits_used":{mainheads:[{groupBy:["selected"],aggregationMethod:"sum",valueRange:[0,null],chartLibrary:"gauge",title:"Total Pod Memory limits used",colors:s.default[4],layout:{left:9,top:10,width:3,height:5}},{groupBy:["label"],groupByLabel:["k8s_pod_name"],aggregationMethod:"max",groupingMethod:"max",valueRange:[0,null],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Maximum Memory limits per Pod",layout:{left:9,top:15,width:3,height:5}}],info:"The overall memory resource limits for a Pod. This is the sum of the memory limits for all the Containers in the Pod. If set, containers cannot use more RAM than the configured limit.",en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_condition":{info:'The current state of the Pod. More info.

    PodReady - the Pod is able to serve requests and should be added to the load balancing pools of all matching Services. PodScheduled - the Pod has been scheduled to a node. PodInitialized - all init containers have completed successfully. ContainersReady - all containers in the Pod are ready. ',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_phase":{mainheads:[{groupBy:["selected"],selectedDimensions:["running"],chartLibrary:"easypiechart",title:"Total Running Pods",colors:s.default[0],layout:{left:0,top:0,width:2,height:5}},{groupBy:["selected"],selectedDimensions:["failed"],chartLibrary:"easypiechart",title:"Total Failed Pods",layout:{left:2,top:0,width:2,height:5}},{groupBy:["selected"],selectedDimensions:["succeeded"],chartLibrary:"easypiechart",title:"Total Terminated Pods",colors:s.default[4],layout:{left:6,top:0,width:2,height:5}},{groupBy:["selected"],selectedDimensions:["pending"],chartLibrary:"easypiechart",title:"Total Pending Pods",colors:s.default[12],layout:{left:4,top:0,width:2,height:5}}],info:'High-level summary of where the Pod is in its lifecycle. More info.

    Running - the Pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Failed - all containers in the Pod have terminated, and at least one container has terminated in failure. That is, the container either exited with non-zero status or was terminated by the system. Succedeed - all containers in the Pod have terminated in success, and will not be restarted. Pending - the Pod has been accepted by the Kubernetes cluster, but one or more of the containers has not been set up and made ready to run. This includes time a Pod spends waiting to be scheduled as well as the time spent downloading container images over the network. ',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_age":{info:'The lifetime of the Pod. ',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_containers":{info:"The number of containers and init containers belonging to the Pod.",en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_containers_state":{info:'The state of each container inside this Pod. More info.

    Running - a container is executing without issues. Waiting - a container is still running the operations it requires in order to complete start up. Terminated - a container began execution and then either ran to completion or failed for some reason.

    ',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_init_containers_state":{info:'The state of each init container inside this Pod. More info.

    Running - a container is executing without issues. Waiting - a container is still running the operations it requires in order to complete start up. Terminated - a container began execution and then either ran to completion or failed for some reason.

    ',en:{instance:{one:"pod",other:"pods"}}},"k8s_state.pod_container_readiness_state":{info:"Specifies whether the container has passed its readiness probe. Kubelet uses readiness probes to know when a container is ready to start accepting traffic.",en:{instance:{one:"container",other:"containers"}}},"k8s_state.pod_container_restarts":{mainheads:[{groupBy:["selected"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"Container restarts",layout:{left:0,top:22.5,width:4,height:2.5}}],info:"The number of times the container has been restarted.",en:{instance:{one:"container",other:"containers"}}},"k8s_state.pod_container_state":{info:'Current state of the container. More info.

    Running - a container is executing without issues. Waiting - a container is still running the operations it requires in order to complete start up. Terminated - a container began execution and then either ran to completion or failed for some reason.

    ',en:{instance:{one:"container",other:"containers"}}},"k8s_state.pod_container_waiting_state_reason":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Container waiting state reason",layout:{left:4,top:20,width:4,height:5}}],info:'Reason the container is not yet running. More info. ',en:{instance:{one:"container",other:"containers"}}},"k8s_state.pod_container_terminated_state_reason":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Container terminated state reason",layout:{left:8,top:20,width:4,height:5}}],info:'Reason from the last termination of the container. More info.',en:{instance:{one:"container",other:"containers"}}},"k8s_kubelet.apiserver_audit_requests_rejected":{info:"The number of audit requests to the Kubernetes API server that were rejected. Monitoring this metric can help identify if there are issues with the audit configuration or access control policies on the API server.",en:{instance:{one:"K8s API server",other:"K8s API servers"}}},"k8s_kubelet.apiserver_storage_data_key_generation_failures":{info:"The number of failures when generating data keys for encrypting and decrypting secrets stored in the Kubernetes API server. If this metric is non-zero, it may indicate issues with the encryption configuration or key management.",en:{instance:{one:"K8s API server",other:"K8s API servers"}}},"k8s_kubelet.apiserver_storage_data_key_generation_latencies":{info:"The latencies of data key generation requests to the Kubernetes API server. High latencies may indicate issues with the encryption configuration or key management.",en:{instance:{one:"K8s API server",other:"K8s API servers"}}},"k8s_kubelet.apiserver_storage_data_key_generation_latencies_percent":{aggregationMethod:"avg",info:"The percentile latencies of data key generation requests to the Kubernetes API server. High latencies may indicate issues with the encryption configuration or key management.",en:{instance:{one:"K8s API server",other:"K8s API servers"}}},"k8s_kubelet.apiserver_storage_envelope_transformation_cache_misses":{info:"The number of cache misses when transforming encryption envelopes for secrets stored in the Kubernetes API server. If this metric is non-zero, it may indicate issues with the encryption configuration or key management.",en:{instance:{one:"K8s API server",other:"K8s API servers"}}},"k8s_kubelet.kubelet_containers_running":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Running Containers",colors:s.default[2],layout:{left:3,top:0,width:3,height:5}}],info:"The number of containers running on the node managed by the kubelet. Monitoring this metric can help identify if there are issues with container scheduling or resource allocation.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_pods_running":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Running Pods",colors:s.default[0],layout:{left:0,top:0,width:3,height:5}}],info:"The number of pods running on the node managed by the kubelet. Monitoring this metric can help identify if there are issues with pod scheduling or resource allocation.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_pods_log_filesystem_used_bytes":{mainheads:[{chartLibrary:"bars",title:"Pod Logs Disk Usage",layout:{left:9,top:5,width:4,height:5}}],info:"The amount of disk space used by pod logs on the node managed by the kubelet. Monitoring this metric can help identify if there are issues with disk usage or log rotation.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_runtime_operations":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Runtime Operations by Type",layout:{left:6,top:0,width:3,height:5}}],info:"The total number of runtime operations performed by the kubelet on the node, such as starting and stopping containers. Monitoring this metric can help identify if there are issues with the runtime or container management.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_runtime_operations_errors":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Runtime Operations Errors by Type",layout:{left:9,top:0,width:3,height:5}}],info:"The number of runtime operation errors on the node managed by the kubelet. If this metric is non-zero, it may indicate issues with the runtime or container management.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_docker_operations":{info:"The total number of Docker operations performed by the kubelet on the node, such as pulling images or creating containers. Monitoring this metric can help identify if there are issues with the Docker daemon or container management.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_docker_operations_errors":{info:"The number of Docker operation errors on the node managed by the kubelet. If this metric is non-zero, it may indicate issues with the Docker daemon or container management.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_node_config_error":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Node Congifuration Errors",layout:{left:7,top:5,width:2,height:5}}],info:"The number of errors in the node configuration on the node managed by the kubelet. If this metric is non-zero, it may indicate issues with the node's configuration or the kubelet's ability to read and apply it.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_pleg_relist_interval_microseconds":{aggregationMethod:"avg",info:"The interval, in microseconds, between periodic relists performed by the kubelet's Pod Lifecycle Event Generator (PLEG). Monitoring this metric can help identify if the PLEG is not able to keep up with the rate of change in the pod lifecycle on the node.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_pleg_relist_latency_microseconds":{aggregationMethod:"avg",info:"The latency, in microseconds, of the periodic relists performed by the kubelet's Pod Lifecycle Event Generator (PLEG). High latencies may indicate issues with the PLEG or the pod lifecycle on the node.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.kubelet_token_requests":{mainheads:[{groupBy:["dimension"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total and Failed No. of Token Requests",colors:s.default[0],layout:{left:3,top:5,width:3,height:5}}],info:"The number of token requests to the kubelet. Monitoring this metric can help identify if there are issues with authentication or access control on the node.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.rest_client_requests_by_code":{info:"The distribution of HTTP response codes for requests to the kubelet's REST API. Monitoring this metric can help identify if there are issues with the kubelet's API or the components interacting with it.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.rest_client_requests_by_method":{mainheads:[{groupBy:["selected"],chartLibrary:"dygraph",sparkline:!0,overlays:{latestValue:{type:"latestValue"}},hasToolbox:!1,title:"HTTP Requests Rate to API",colors:s.default[0],layout:{left:0,top:5,width:3,height:2.5}}],info:"The distribution of HTTP request methods for requests to the kubelet's REST API. Monitoring this metric can help identify the usage patterns of the API and potential issues with specific request methods.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubelet.volume_manager_total_volumes":{mainheads:[{groupBy:["dimension"],chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Volume Manager State",layout:{left:0,top:7.5,width:3,height:2.5}}],info:"The total number of volumes managed by the kubelet's volume manager. Monitoring this metric can help identify if there are issues with volume management on the node.",en:{instance:{one:"kubelet",other:"kubelets"}}},"k8s_kubeproxy.kubeproxy_sync_proxy_rules":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Sync Proxy Rules",colors:s.default[4],layout:{left:0,top:0,width:3,height:5}}],info:"The total number of synced proxy rules in the Kubernetes proxy. Monitoring this metric can help identify if there are issues with the proxy or its configuration.",en:{instance:{one:"proxy",other:"proxies"}}},"k8s_kubeproxy.kubeproxy_sync_proxy_rules_latency_microsecond":{aggregationMethod:"avg",info:"The latencies of proxy rule sync operations in the Kubernetes proxy. High latencies may indicate issues with the proxy or its configuration.",en:{instance:{one:"proxy",other:"proxies"}}},"k8s_kubeproxy.kubeproxy_sync_proxy_rules_latency":{aggregationMethod:"avg",info:"The latencies of proxy rule sync operations in the Kubernetes proxy. High latencies may indicate issues with the proxy or its configuration.",en:{instance:{one:"proxy",other:"proxies"}}},"k8s_kubeproxy.rest_client_requests_by_code":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"HTTP Response Code Distribution",colors:s.default[4],layout:{left:3,top:0,width:3,height:5}}],info:"The distribution of HTTP response codes for requests to the Kubernetes proxy's REST API. Monitoring this metric can help identify if there are issues with the proxy's API or the components interacting with it.",en:{instance:{one:"proxy",other:"proxies"}}},"k8s_kubeproxy.rest_client_requests_by_method":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"HTTP Request Method Distribution",colors:s.default[4],layout:{left:6,top:0,width:3,height:5}}],info:"The distribution of HTTP request methods for requests to the Kubernetes proxy's REST API. Monitoring this metric can help identify the usage patterns of the API and potential issues with specific request methods.",en:{instance:{one:"proxy",other:"proxies"}}},"k8s_kubeproxy.http_request_duration":{info:"The latencies of HTTP requests handled by the Kubernetes proxy. High latencies may indicate performance issues with the proxy or the components interacting with it.",en:{instance:{one:"proxy",other:"proxies"}}},"windows.logical_disk_bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["read"],title:"Total Disk Read",layout:{left:0,top:0,width:2,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["write"],title:"Total Disk Write",layout:{left:3,top:0,width:2,height:5}}],en:{instance:{one:"system",other:"systems"}}},"windows.cpu_utilization_total":{aggregationMethod:"avg",mainheads:[{groupBy:["instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"avg",valueRange:[0,100],chartLibrary:"gauge",title:"Average CPU Utilization",colors:s.default[12],layout:{left:6,top:0,width:2,height:5}}],en:{instance:{one:"system",other:"systems"}}},"windows.net_nic_bandwidth":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Net Inbound",layout:{left:9,top:0,width:2,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Net Outbound",layout:{left:12,top:0,width:2,height:5}}],en:{instance:{one:"system",other:"systems"}}},"windows.memory_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["percentage-of-instance"],showPostAggregations:!0,postGroupBy:["selected"],aggregationMethod:"max",chartLibrary:"gauge",selectedDimensions:["used"],colors:s.default[0],title:"Maximum RAM Used",valueRange:[0,100],layout:{left:15,top:0,width:2,height:5}}],en:{instance:{one:"system",other:"systems"}}},"windows.processes_cpu_time":{aggregationMethod:"avg",info:'Total CPU utilization. The amount of time spent by the process in user and privileged modes.',en:{instance:{one:"system",other:"systems"}}},"windows.processes_handles":{info:'Total number of handles the process has open. This number is the sum of the handles currently open by each thread in the process.',en:{instance:{one:"system",other:"systems"}}},"windows.processes_io_operations":{info:"I/O operations issued in different modes (read, write, other). This property counts all I/O activity generated by the process to include file, network, and device I/Os. Read and write mode includes data operations; other mode includes those that do not involve data, such as control operations.",en:{instance:{one:"system",other:"systems"}}},"windows.processes_pool_bytes":{info:"Pool Bytes is the last observed number of bytes in the paged or nonpaged pool. The nonpaged pool is an area of system memory (physical memory used by the operating system) for objects that cannot be written to disk, but must remain in physical memory as long as they are allocated. The paged pool is an area of system memory (physical memory used by the operating system) for objects that can be written to disk when they are not being used.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_conns_active":{info:"Number of times TCP connections have made a direct transition from the CLOSED state to the SYN-SENT state.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_conns_established":{info:"Number of TCP connections for which the current state is either ESTABLISHED or CLOSE-WAIT.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_conns_failures":{info:"Number of times TCP connections have made a direct transition to the CLOSED state from the SYN-SENT state or the SYN-RCVD state, plus the number of times TCP connections have made a direct transition from the SYN-RCVD state to the LISTEN state.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_conns_passive":{info:"Number of times TCP connections have made a direct transition from the LISTEN state to the SYN-RCVD state.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_conns_resets":{info:"Number of times TCP connections have made a direct transition from the LISTEN state to the SYN-RCVD state.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_segments_received":{info:"Rate at which segments are received, including those received in error. This count includes segments received on currently established connections.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_segments_retransmitted":{info:"Rate at which segments are retransmitted, that is, segments transmitted that contain one or more previously transmitted bytes.",en:{instance:{one:"system",other:"systems"}}},"windows.tcp_segments_sent":{info:"Rate at which segments are sent, including those on current connections, but excluding those containing only retransmitted bytes.",en:{instance:{one:"system",other:"systems"}}},"windows.processes_cpu_utilization":{aggregationMethod:"avg",mainheads:[{groupBy:["dimension"],aggregationMethod:"avg",chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Average CPU per Process",layout:{left:6,top:5,width:2,height:5}}],info:"Total CPU utilization per process.",dimensionsSort:"valueDesc",en:{instance:{one:"system",other:"systems"}}},"windows.processes_memory_usage":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Memory per Process",layout:{left:9,top:5,width:2,height:5}}],dimensionsSort:"valueDesc",info:"Total Memory usage per process.",en:{instance:{one:"system",other:"systems"}}},"windows.processes_io_bytes":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total I/O per Process",layout:{left:0,top:5,width:4,height:5}}],info:"Bytes issued to I/O operations in different modes (read, write, other). This property counts all I/O activity generated by the process to include file, network, and device I/Os. Read and write mode includes data operations; other mode includes those that do not involve data, such as control operations.",dimensionsSort:"valueDesc",en:{instance:{one:"system",other:"systems"}}},"windows.processes_page_faults":{info:"Page faults by the threads executing in this process. A page fault occurs when a thread refers to a virtual memory page that is not in its working set in main memory. This can cause the page not to be fetched from disk if it is on the standby list and hence already in main memory, or if it is in use by another process with which the page is shared.",dimensionsSort:"valueDesc",en:{instance:{one:"system",other:"systems"}}},"windows.processes_file_bytes":{info:"Current number of bytes this process has used in the paging file(s). Paging files are used to store pages of memory used by the process that are not contained in other files. Paging files are shared by all processes, and lack of space in paging files can prevent other processes from allocating memory.",dimensionsSort:"valueDesc",en:{instance:{one:"system",other:"systems"}}},"windows.processes_threads":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Active Threads per Process",layout:{left:12,top:5,width:4,height:5}}],info:"Number of threads currently active in this process. An instruction is the basic unit of execution in a processor, and a thread is the object that executes instructions. Every running process has at least one thread.",dimensionsSort:"valueDesc",en:{instance:{one:"system",other:"systems"}}},"iis.website_traffic":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["received"],title:"Total Traffic Received",layout:{left:3,top:0,width:3,height:5}},{groupBy:["selected"],chartLibrary:"easypiechart",selectedDimensions:["sent"],title:"Total Traffic Sent",layout:{left:6,top:0,width:3,height:5}}],en:{instance:{one:"web server",other:"web servers"}}},"iis.website_active_connections_count":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Active Connections"}],en:{instance:{one:"web server",other:"web servers"}}},"iis.website_requests_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Request Rate",colors:s.default[0]}],en:{instance:{one:"web server",other:"web servers"}}},"iis.website_isapi_extension_requests_count":{info:'The number of ISAPI extension requests that are processed concurrently by the web service.',en:{instance:{one:"web server",other:"web servers"}}},"iis.website_errors_rate":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Errors Rate",colors:s.default[0]}],info:"

    The number of requests that cannot be satisfied by the server.

    DocumentLocked - the requested document was locked. Usually reported as HTTP error 423. DocumentNotFound - the requested document was not found. Usually reported as HTTP error 404.

    ",en:{instance:{one:"web server",other:"web servers"}}},"iis.website_uptime":{aggregationMethod:"min",mainheads:[{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Uptime"}],en:{instance:{one:"web server",other:"web servers"}}},"mssql.instance_user_connection":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Connections",layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.database_transactions":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Transactions",layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.database_data_files_size":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total DB Size",layout:{left:3,top:0,width:3,height:5}}],en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_accessmethods_page_splits":{info:"Page split happens when the page does not have more space. This chart shows the number of page splits per second that occur as the result of overflowing index pages.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_cache_hit_ratio":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Cache Hit Ratio",colors:s.default[0]}],info:"Indicates the percentage of pages found in the buffer cache without having to read from disk. The ratio is the total number of cache hits divided by the total number of cache lookups over the last few thousand page accesses. After a long period of time, the ratio moves very little. Because reading from the cache is much less expensive than reading from disk, you want this ratio to be high.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_bufman_checkpoint_pages":{info:"Indicates the number of pages flushed to disk per second by a checkpoint or other operation that require all dirty pages to be flushed.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_bufman_page_life_expectancy":{info:"Indicates the number of seconds a page will stay in the buffer pool without references.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_memmgr_external_benefit_of_memory":{info:"It is used by the engine to balance memory usage between cache and is useful to support when troubleshooting cases with unexpected cache growth. The value is presented as an integer based on an internal calculation.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_sql_errors":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total SQL Errors",colors:s.default[0]}],info:"Errors in Microsoft SQL Server.

    Db_offline - Tracks severe errors that cause SQL Server to take the current database offline. Info - Information related to error messages that provide information to users but do not cause errors. Kill_connection - Tracks severe errors that cause SQL Server to kill the current connection. User - User errors.

    ",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_sqlstats_auto_parameterization_attempts":{info:"Auto-parameterization occurs when an instance of SQL Server tries to parameterize a Transact-SQL request by replacing some literals with parameters so that reuse of the resulting cached execution plan across multiple similar-looking requests is possible. Note that auto-parameterizations are also known as simple parameterizations in newer versions of SQL Server. This counter does not include forced parameterizations.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_sqlstats_batch_requests":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Batch Requests",layout:{left:3,top:0,width:3,height:5}}],info:"This statistic is affected by all constraints (such as I/O, number of users, cache size, complexity of requests, and so on). High batch requests mean good throughput.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_sqlstats_safe_auto_parameterization_attempts":{info:"Note that auto-parameterizations are also known as simple parameterizations in later versions of SQL Server.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"mssql.instance_sqlstats_sql_compilations":{info:"Indicates the number of times the compile code path is entered. Includes compiles caused by statement-level recompilations in SQL Server. After SQL Server user activity is stable, this value reaches a steady state.",en:{instance:{one:"SQL server",other:"SQL servers"}}},"ad.binds":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Binds",colors:s.default[0]}],en:{instance:{one:"AD server",other:"AD servers"}}},"ad.ldap_searches":{mainheads:[{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"gauge",title:"Average Cache Hit Ratio",colors:s.default[0]}],en:{instance:{one:"AD server",other:"AD servers"}}},"ad.dra_replication_intersite_compressed_traffic":{info:"The compressed size, in bytes, of inbound and outbound compressed replication data (size after compression, from DSAs in other sites).",en:{instance:{one:"AD server",other:"AD servers"}}},"ad.dra_replication_intrasite_compressed_traffic":{info:"The number of bytes replicated that were not compressed (that is., from DSAs in the same site).",en:{instance:{one:"AD server",other:"AD servers"}}},"ad.dra_replication_properties_updated":{info:"The number of properties that are updated due to incoming property winning the reconciliation logic that determines the final value to be replicated.",en:{instance:{one:"AD server",other:"AD servers"}}},"ad.dra_replication_objects_filtered":{info:"The number of objects received from inbound replication partners that contained no updates that needed to be applied.",en:{instance:{one:"AD server",other:"AD servers"}}},"ad.dra_replication_pending_syncs":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Pending Syncs",layout:{left:3,top:0,width:3,height:5}}],info:"The number of directory synchronizations that are queued for this server but not yet processed.",en:{instance:{one:"AD server",other:"AD servers"}}},"ad.dra_replication_sync_requests":{mainheads:[{groupBy:["selected"],chartLibrary:"gauge",title:"Total Sync Requests",colors:s.default[0]}],info:"The number of directory synchronizations that are queued for this server but not yet processed.",en:{instance:{one:"AD server",other:"AD servers"}}},"netframework.clrexception_thrown":{info:"The exceptions include both .NET exceptions and unmanaged exceptions that are converted into .NET exceptions.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrexception_filters":{info:"An exception filter evaluates regardless of whether an exception is handled.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrexception_finallys":{info:"The metric counts only the finally blocks executed for an exception; finally blocks on normal code paths are not counted by this counter.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrinterop_com_callable_wrappers":{info:"A COM callable wrappers (CCW) is a proxy for a managed object being referenced from an unmanaged COM client.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrinterop_interop_stubs_created":{info:"The Stubs are responsible for marshaling arguments and return values from managed to unmanaged code, and vice versa, during a COM interop call or a platform invoke call.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrjit_methods":{info:"The metric does not include pre-JIT-compiled methods.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrjit_time":{aggregationMethod:"avg",info:"The metric is updated at the end of every JIT compilation phase. A JIT compilation phase occurs when a method and its dependencies are compiled.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrjit_standard_failures":{info:"The failure can occur if the MSIL cannot be verified or if there is an internal error in the JIT compiler.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrloading_loader_heap_size":{info:"The memory committed by the class loader across all application domains is the physical space reserved in the disk paging file.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrloading_assemblies_loaded":{info:"If the assembly is loaded as domain-neutral from multiple application domains, the metric is incremented only once.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrlocksandthreads_recognized_threads":{info:"Displays the total number of threads that have been recognized by the runtime since the application started. These threads are associated with a corresponding managed thread object. The runtime does not create these threads, but they have run inside the runtime at least once.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_heap_size":{info:"The metric shows maximum bytes that can be allocated, but it does not indicate the current number of bytes allocated.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_promoted":{info:"Memory is promoted when it survives a garbage collection.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_number_gc_handles":{info:"Garbage collection handles are handles to resources external to the common language runtime and the managed environment.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_induced_gc":{info:"The metric is updated when an explicit call to GC.Collect happens.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_number_sink_blocks_in_use":{info:"Synchronization blocks are per-object data structures allocated for storing synchronization information. They hold weak references to managed objects and must be scanned by the garbage collector.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_committed":{info:"Committed memory is the physical memory for which space has been reserved in the disk paging file.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_reserved":{info:"Reserved memory is the virtual memory space reserved for the application when no disk or main memory pages have been used.",en:{instance:{one:".NET server",other:".NET servers"}}},"netframework.clrmemory_gc_time":{aggregationMethod:"avg",info:"Displays the percentage of time that was spent performing a garbage collection in the last sample.",en:{instance:{one:".NET server",other:".NET servers"}}},"adaptecraid.logical_device_status":{info:"Logical Device health status.",en:{instance:{one:"logical device",other:"logical devices"}}},"adaptecraid.physical_device_state":{info:"Physical Device health state.",en:{instance:{one:"physical device",other:"physical devices"}}},"adaptecraid.physical_device_smart_warnings":{info:"Physical Device SMART warnings.",en:{instance:{one:"physical device",other:"physical devices"}}},"adaptecraid.physical_device_temperature":{info:"Physical Device temperature.",aggregationMethod:"max",en:{instance:{one:"physical device",other:"physical devices"}}},"adaptec_raid.ld_status":{info:"Status of logical devices (1: Failed or Degraded).",en:{instance:{one:"device",other:"devices"}}},"adaptec_raid.pd_state":{info:"State of physical devices (1: not Online).",en:{instance:{one:"device",other:"devices"}}},"adaptec_raid.smart_warnings":{info:"S.M.A.R.T warnings.",en:{instance:{one:"device",other:"devices"}}},"adaptec_raid.temperature":{info:"Temperature.",en:{instance:{one:"device",other:"devices"}}},"alerts.status":{info:"Alert Values.",en:{instance:{one:"alert",other:"alerts"}}},"am2320.temperature":{aggregationMethod:"avg",info:"Temperature.",en:{instance:{one:"device",other:"devices"}}},"am2320.humidity":{aggregationMethod:"avg",info:"Relative Humidity.",en:{instance:{one:"device",other:"devices"}}},"anomalies.probability":{info:"Anomaly Probability.",en:{instance:{one:"device",other:"devices"}}},"anomalies.anomaly":{info:"Anomaly.",en:{instance:{one:"device",other:"devices"}}},"ap.clients":{info:"Connected clients to ${ssid} on ${dev}.",en:{instance:{one:"device",other:"devices"}}},"ap.net":{info:"Bandwidth for ${ssid} on ${dev}.",en:{instance:{one:"device",other:"devices"}}},"ap.packets":{info:"Packets for ${ssid} on ${dev}.",en:{instance:{one:"device",other:"devices"}}},"ap.issues":{info:"Transmit Issues for ${ssid} on ${dev}.",en:{instance:{one:"device",other:"devices"}}},"ap.signal":{info:"Average Signal for ${ssid} on ${dev}.",en:{instance:{one:"device",other:"devices"}}},"ap.bitrate":{info:"Bitrate for ${ssid} on ${dev}.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.charge":{aggregationMethod:"avg",info:"UPS Charge.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.battery.voltage":{aggregationMethod:"avg",info:"UPS Battery Voltage.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.input.voltage":{aggregationMethod:"avg",info:"UPS Input Voltage.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.output.voltage":{aggregationMethod:"avg",info:"UPS Output Voltage.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.input.frequency":{aggregationMethod:"avg",info:"UPS Input Voltage.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.load":{aggregationMethod:"avg",info:"UPS Load.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.load_usage":{info:"UPS Load Usage.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.temperature":{aggregationMethod:"avg",info:"UPS Temperature.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.time":{aggregationMethod:"min",info:"UPS Time Remaining.",en:{instance:{one:"device",other:"devices"}}},"apcupsd.online":{info:"UPS ONLINE flag.",en:{instance:{one:"device",other:"devices"}}},"netdata.apps_cpu":{info:"Apps Plugin CPU.",en:{instance:{one:"agent",other:"agents"}}},"netdata.apps_sizes":{info:"Apps Plugin Files.",en:{instance:{one:"agent",other:"agents"}}},"netdata.apps_fix":{aggregationMethod:"avg",info:"Apps Plugin Normalization Ratios.",en:{instance:{one:"agent",other:"agents"}}},"netdata.apps_children_fix":{aggregationMethod:"avg",info:"Apps Plugin Exited Children Normalization Ratios.",en:{instance:{one:"agent",other:"agents"}}},"bind_rndc.name_server_statistics":{info:"Name Server Statistics.",en:{instance:{one:"server",other:"servers"}}},"bind_rndc.incoming_queries":{info:"Incoming queries.",en:{instance:{one:"server",other:"servers"}}},"bind_rndc.outgoing_queries":{info:"Outgoing queries.",en:{instance:{one:"server",other:"servers"}}},"bind_rndc.stats_size":{info:"Named Stats File Size.",en:{instance:{one:"server",other:"servers"}}},"cassandra.storage_exceptions_rate":{info:"Storage exceptions rate.",en:{instance:{one:"db server",other:"db servers"}}},"ceph.pool_read_operations":{info:"Ceph Read Pool Operations/s.",en:{instance:{one:"pool",other:"pools"}}},"ceph.pool_write_operations":{info:"Ceph Write Pool Operations/s.",en:{instance:{one:"pool",other:"pools"}}},"services.services.throttle_io_write":{info:"Systemd Services Throttle Disk Write Bandwidth.",en:{instance:{one:"system",other:"systems"}}},throttle_io_ops_write:{info:"Systemd Services Throttle Disk Write Operations.",en:{instance:{one:"system",other:"systems"}}},"changefinder.scores":{info:"ChangeFinder.",en:{instance:{one:"system",other:"systems"}}},"changefinder.flags":{info:"ChangeFinder.",en:{instance:{one:"system",other:"systems"}}},"cockroachdb.process_cpu_time":{aggregationMethod:"avg",info:"CPU Time.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.sql_connections":{info:"Active SQL Connections.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.logical_data":{info:"Logical Data.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.logical_data_count":{info:"Logical Data Count.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.range_events":{info:"Range Events.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.range_snapshot_events":{info:"Range Snapshot Events.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.rocksdb_read_amplification":{info:"RocksDB Read Amplification.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.rocksdb_cache_usage":{info:"RocksDB Block Cache Usage.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.rocksdb_cache_operations":{info:"RocksDB Block Cache Operations.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.rocksdb_sstables":{info:"RocksDB SSTables.",en:{instance:{one:"db server",other:"db servers"}}},"cockroachdb.replicas_quiescence":{info:"Replicas Quiescence.",en:{instance:{one:"db server",other:"db servers"}}},"consul.autopilot_server_health_status":{info:"Autopilot server health status.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.autopilot_server_stable_time":{aggregationMethod:"avg",info:"Autopilot server stable time.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.autopilot_server_serf_status":{info:"Autopilot server Serf status.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.autopilot_server_voter_status":{info:"Autopilot server Raft voting membership.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.network_lan_rtt":{info:"Network lan RTT.",en:{instance:{one:"datacenter",other:"datacenters"}}},"consul.raft_follower_last_contact_leader_time":{aggregationMethod:"avg",info:"Raft follower last contact with the leader time.",en:{instance:{one:"datacenter",other:"datacenters"}}},"coredns.dns_request_count_total_per_status":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Dropped DNS Requests",selectedDimensions:["dropped"],colors:s.default[1],layout:{left:12,top:0,width:2,height:5}}],info:"Number Of Processed And Dropped DNS Requests.",en:{instance:{one:"server",other:"servers"}}},"coredns.dns_requests_count_total_per_proto":{info:"Number Of DNS Requests Per Transport Protocol.",en:{instance:{one:"server",other:"servers"}}},"coredns.dns_requests_count_total_per_ip_family":{info:"Number Of DNS Requests Per IP Family.",en:{instance:{one:"server",other:"servers"}}},"coredns.dns_requests_count_total_per_per_type":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"DNS Requests per Type",layout:{left:3,top:0,width:2.5,height:5}}],info:"Number Of DNS Requests Per Type.",en:{instance:{one:"server",other:"servers"}}},"coredns.dns_responses_count_total_per_rcode":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"DNS Responses per Rcode",layout:{left:9,top:0,width:2.5,height:5}}],info:"Number Of DNS Responses Per Rcode.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_dns_request_count_total":{info:"Number Of DNS Requests.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_dns_responses_count_total":{info:"Number Of DNS Responses.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_request_count_total_per_status":{info:"Number Of Processed And Dropped DNS Requests.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_requests_count_total_per_proto":{info:"Number Of DNS Requests Per Transport Protocol.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_requests_count_total_per_ip_family":{info:"Number Of DNS Requests Per IP Family.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_requests_count_total_per_per_type":{info:"Number Of DNS Requests Per Type.",en:{instance:{one:"server",other:"servers"}}},"coredns.server_responses_count_total_per_rcode":{info:"Number Of DNS Responses Per Rcode.",en:{instance:{one:"server",other:"servers"}}},"coredns.zone_dns_request_count_total":{info:"Number Of DNS Requests.",en:{instance:{one:"zone",other:"zones"}}},"coredns.zone_dns_responses_count_total":{info:"Number Of DNS Responses.",en:{instance:{one:"zone",other:"zones"}}},"coredns.zone_requests_count_total_per_proto":{info:"Number Of DNS Requests Per Transport Protocol.",en:{instance:{one:"zone",other:"zones"}}},"coredns.zone_requests_count_total_per_ip_family":{info:"Number Of DNS Requests Per IP Family.",en:{instance:{one:"zone",other:"zones"}}},"coredns.zone_requests_count_total_per_per_type":{info:"Number Of DNS Requests Per Type.",en:{instance:{one:"zone",other:"zones"}}},"coredns.zone_responses_count_total_per_rcode":{info:"Number Of DNS Responses Per Rcode.",en:{instance:{one:"zone",other:"zones"}}},"couchbase.bucket_quota_percent_used":{aggregationMethod:"avg",info:"Quota Percent Used Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_ops_per_sec":{info:"Operations Per Second Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_disk_fetches":{info:"Disk Fetches Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_item_count":{info:"Item Count Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_disk_used_stats":{info:"Disk Used Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_data_used":{info:"Data Used Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_mem_used":{info:"Memory Used Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"couchbase.bucket_vb_active_num_non_resident":{info:"Number Of Non-Resident Items Per Bucket.",en:{instance:{one:"bucket",other:"buckets"}}},"cups.dests_state":{family:"destination",info:"Destinations by state.",en:{instance:{one:"system",other:"systems"}}},"cups.dests_option":{family:"destination",info:"Destinations by option.",en:{instance:{one:"system",other:"systems"}}},"cups.job_num":{family:"jobs",info:"Active jobs.",en:{instance:{one:"system",other:"systems"}}},"cups.job_size":{family:"jobs",info:"Active jobs size.",en:{instance:{one:"system",other:"systems"}}},"cups.destination_job_num":{family:"jobs",info:"Active jobs of {destination}.",en:{instance:{one:"destination",other:"destinations"}}},"cups.destination_job_size":{family:"jobs",info:"Active jobs size of {destination}.",en:{instance:{one:"destination",other:"destinations"}}},"dnsdist.queries":{info:"Client queries received.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.queries_dropped":{info:"Client queries dropped.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.packets_dropped":{info:"Packets dropped.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.answers":{info:"Answers statistics.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.backend_responses":{info:"Backend responses.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.backend_commerrors":{info:"Backend communication errors.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.backend_errors":{info:"Backend error responses.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.cache":{info:"Cache performance.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.servercpu":{info:"DNSdist server CPU utilization.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.servermem":{info:"DNSdist server memory utilization.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.query_latency":{aggregationMethod:"avg",info:"Query latency.",en:{instance:{one:"server",other:"servers"}}},"dnsdist.query_latency_avg":{info:"Average latency for the last N queries.",en:{instance:{one:"server",other:"servers"}}},"dnsmasq_dhcp.dhcp_ranges":{info:"Number of DHCP Ranges.",en:{instance:{one:"server",other:"servers"}}},"dnsmasq_dhcp.dhcp_hosts":{info:"Number of DHCP Hosts.",en:{instance:{one:"server",other:"servers"}}},"dnsmasq_dhcp.dhcp_range_utilization":{aggregationMethod:"avg",info:"DHCP Range utilization.",en:{instance:{one:"dhcp range",other:"dhcp ranges"}}},"dnsmasq_dhcp.dhcp_range_allocated_leases":{info:"DHCP Range Allocated Leases.",en:{instance:{one:"dhcp range",other:"dhcp ranges"}}},"dnsmasq.servers_queries":{info:"Queries forwarded to the upstream servers.",en:{instance:{one:"server",other:"servers"}}},"dnsmasq.cache_performance":{info:"Cache performance.",en:{instance:{one:"server",other:"servers"}}},"dnsmasq.cache_operations":{info:"Cache operations.",en:{instance:{one:"server",other:"servers"}}},"dnsmasq.cache_size":{aggregationMethod:"avg",info:"Cache size.",en:{instance:{one:"server",other:"servers"}}},"dns_query.query_status":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"DNS Query Status",layout:{left:0,top:0,width:4,height:5}}],info:"DNS Query Status.",en:{instance:{one:"server",other:"servers"}}},"dns_query.query_time":{aggregationMethod:"avg",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum DNS Query Response Time",valueRange:[0,null],colors:s.default[1],layout:{left:3,top:0,width:4,height:5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average DNS Query Response Time",valueRange:[0,null],colors:s.default[0],layout:{left:9,top:0,width:4,height:5}}],info:"DNS Query Time.",en:{instance:{one:"server",other:"servers"}}},"docker_engine.engine_daemon_container_actions":{info:"Container Actions.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.engine_daemon_container_states_containers":{info:"Containers In Various States.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.builder_builds_failed_total":{info:"Builder Builds Fails By Reason.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.engine_daemon_health_checks_failed_total":{info:"Health Checks.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.swarm_manager_leader":{info:"Swarm Manager Leader.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.swarm_manager_object_store":{info:"Swarm Manager Object Store.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.swarm_manager_nodes_per_state":{info:"Swarm Manager Nodes Per State.",en:{instance:{one:"system",other:"systems"}}},"docker_engine.swarm_manager_tasks_per_state":{info:"Swarm Manager Tasks Per State.",en:{instance:{one:"system",other:"systems"}}},"docker.containers_health_status":{info:"Total number of Docker containers in various health states.",en:{instance:{one:"container",other:"containers"}}},"docker.container_writeable_layer_size":{info:"Docker container writable layer size.",en:{instance:{one:"container",other:"containers"}}},"dockerhub.pulls_sum":{info:"Pulls Summary.",en:{instance:{one:"repository",other:"repositories"}}},"dockerhub.pulls":{info:"Pulls.",en:{instance:{one:"repository",other:"repositories"}}},"dockerhub.pulls_rate":{info:"Pulls Rate.",en:{instance:{one:"repository",other:"repositories"}}},"dockerhub.stars":{info:"Stars.",en:{instance:{one:"repository",other:"repositories"}}},"dockerhub.status":{info:"Current Status.",en:{instance:{one:"repository",other:"repositories"}}},"dockerhub.last_updated":{info:"Time Since Last Updated.",en:{instance:{one:"repository",other:"repositories"}}},"dovecot.sessions":{info:"Dovecot Active Sessions.",en:{instance:{one:"server",other:"servers"}}},"dovecot.logins":{info:"Dovecot Logins.",en:{instance:{one:"server",other:"servers"}}},"dovecot.commands":{info:"Dovecot Commands.",en:{instance:{one:"server",other:"servers"}}},"dovecot.faults":{info:"Dovecot Page Faults.",en:{instance:{one:"server",other:"servers"}}},"dovecot.context_switches":{info:"Dovecot Context Switches.",en:{instance:{one:"server",other:"servers"}}},"dovecot.io":{info:"Dovecot Disk I/O.",en:{instance:{one:"server",other:"servers"}}},"dovecot.net":{info:"Dovecot Network Bandwidth.",en:{instance:{one:"server",other:"servers"}}},"dovecot.syscalls":{info:"Dovecot Number of SysCalls.",en:{instance:{one:"server",other:"servers"}}},"dovecot.lookup":{info:"Dovecot Lookups.",en:{instance:{one:"server",other:"servers"}}},"dovecot.cache":{info:"Dovecot Cache Hits.",en:{instance:{one:"server",other:"servers"}}},"dovecot.auth":{info:"Dovecot Authentications.",en:{instance:{one:"server",other:"servers"}}},"dovecot.auth_cache":{info:"Dovecot Authentication Cache.",en:{instance:{one:"server",other:"servers"}}},"cgroup.fd_closed":{info:"Files closed.",en:{instance:{one:"cgroup",other:"cgroups"}}},"services.file_open":{info:"Number of open files.",en:{instance:{one:"service",other:"services"}}},"services.file_open_error":{info:"Fails to open files.",en:{instance:{one:"service",other:"services"}}},"services.file_closed":{info:"Files closed.",en:{instance:{one:"service",other:"services"}}},"services.file_close_error":{info:"Fails to close files.",en:{instance:{one:"service",other:"services"}}},"mem.meory_map":{info:"Monitor calls for msync(2)..",en:{instance:{one:"system",other:"systems"}}},"hpssa.controller_status":{info:"Controller status",en:{instance:{one:"controller",other:"controllers"}}},"hpssa.controller_temperature":{info:"Controller temperature",aggregationMethod:"max",groupBy:["label"],groupByLabel:["slot","model"],en:{instance:{one:"controller",other:"controllers"}}},"hpssa.controller_cache_module_presence_status":{info:"Controller cache module presence",en:{instance:{one:"cache module",other:"cache modules"}}},"hpssa.controller_cache_module_status":{info:"Controller cache module status",en:{instance:{one:"cache module",other:"cache modules"}}},"hpssa.controller_cache_module_temperature":{info:"Controller cache module temperature",aggregationMethod:"max",groupBy:["label"],groupByLabel:["slot","model"],en:{instance:{one:"cache module",other:"cache modules"}}},"hpssa.controller_cache_module_battery_status":{info:"Controller cache module battery status",en:{instance:{one:"cache module",other:"cache modules"}}},"hpssa.array_status":{info:"Array status",en:{instance:{one:"array",other:"arrays"}}},"hpssa.logical_drive_status":{info:"Logical Drive status",en:{instance:{one:"logical drive",other:"logical drives"}}},"hpssa.physical_drive_status":{info:"Physical Drive status",en:{instance:{one:"physical drive",other:"physical drives"}}},"hpssa.physical_drive_temperature":{info:"Physical Drive temperature",aggregationMethod:"max",groupBy:["label"],groupByLabel:["slot","location"],en:{instance:{one:"physical drive",other:"physical drives"}}},"megacli.adapter_health_state":{info:"Adapter health state",en:{instance:{one:"adapter",other:"adapters"}}},"megacli.phys_drive_media_errors":{info:"Physical Drive media errors rate",en:{instance:{one:"drive",other:"drives"}}},"megacli.phys_drive_predictive_failures":{info:"Physical Drive predictive failures rate",en:{instance:{one:"drive",other:"drives"}}},"megacli.bbu_charge":{info:"Bckup Battery Unit charge",aggregationMethod:"min",en:{instance:{one:"battery unit",other:"battery units"}}},"megacli.bbu_recharge_cycles":{info:"Bckup Battery Unit recharge cycles",aggregationMethod:"max",en:{instance:{one:"battery unit",other:"battery units"}}},"megacli.bbu_temperature":{info:"Bckup Battery Unit temperature",aggregationMethod:"max",en:{instance:{one:"battery unit",other:"battery units"}}},"storcli.controller_status":{info:"Controller status",en:{instance:{one:"controller",other:"controllers"}}},"storcli.controller_bbu_status":{info:"Controller BBU status",en:{instance:{one:"controller",other:"controllers"}}},"storcli.phys_drive_errors":{info:"Physical Drive media errors rate",en:{instance:{one:"drive",other:"drives"}}},"storcli.phys_drive_predictive_failures":{info:"Physical Drive predictive failures rate",en:{instance:{one:"drive",other:"drives"}}},"storcli.phys_drive_smart_alert_status":{info:"Physical Drive SMART alert status",en:{instance:{one:"drive",other:"drives"}}},"storcli.phys_drive_temperature":{info:"Physical Drive temperature",aggregationMethod:"max",en:{instance:{one:"drive",other:"drives"}}},"storcli.bbu_temperature":{info:"BBU temperature",aggregationMethod:"max",en:{instance:{one:"bbu",other:"bbus"}}},"mdstat.mdstat_flush":{info:"MD flushes.",en:{instance:{one:"system",other:"systems"}}},"cgroup.oomkills":{info:"OOM kills. This chart is provided by eBPF plugin..",en:{instance:{one:"cgroup",other:"cgroups"}}},"services.oomkills":{info:"OOM kills. This chart is provided by eBPF plugin..",en:{instance:{one:"service",other:"services"}}},"apps.oomkills":{info:"OOM kills.",en:{instance:{one:"app group",other:"app groups"}}},"cgroup.net_conn_ipv4":{info:"Calls to tcp_v4_connection.",en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_conn_ipv6":{info:"Calls to tcp_v6_connection.",en:{instance:{one:"cgroup",other:"cgroups"}}},"cgroup.net_bytes_sent":{info:"Bytes sent.",en:{instance:{one:"cgroup",other:"cgroups"}}},"services.net_conn_ipv4":{info:"Calls to tcp_v4_connection.",en:{instance:{one:"service",other:"services"}}},"services.net_conn_ipv6":{info:"Calls to tcp_v6_connection.",en:{instance:{one:"service",other:"services"}}},"services.net_bytes_sent":{info:"Bytes sent.",en:{instance:{one:"service",other:"services"}}},"services.net_tcp_retransmit":{info:"Calls to tcp_retransmit.",en:{instance:{one:"service",other:"services"}}},"apps.dc_ratio":{aggregationMethod:"avg",info:"Percentage of files inside directory cache.",en:{instance:{one:"app group",other:"app groups"}}},"services.dc_ratio":{aggregationMethod:"avg",info:"Percentage of files inside directory cache.",en:{instance:{one:"service",other:"services"}}},"filesystem.read_latency":{aggregationMethod:"avg",info:"ext4 latency for each read request..",en:{instance:{one:"filesystem",other:"filesystems"}}},"filesystem.write_latency":{aggregationMethod:"avg",info:"ext4 latency for each write request..",en:{instance:{one:"filesystem",other:"filesystems"}}},"filesystem.open_latency":{aggregationMethod:"avg",info:"ext4 latency for each open request..",en:{instance:{one:"filesystem",other:"filesystems"}}},"filesystem.sync_latency":{aggregationMethod:"avg",info:"ext4 latency for each sync request..",en:{instance:{one:"filesystem",other:"filesystems"}}},"filesystem.attributte_latency":{aggregationMethod:"avg",info:"nfs latency for each attribute request..",en:{instance:{one:"filesystem",other:"filesystems"}}},"netdata.ebpf_aral_stat_size":{info:"Bytes allocated for ARAL..",en:{instance:{one:"agent",other:"agents"}}},"netdata.ebpf_aral_stat_alloc":{info:"Calls to allocate memory.",en:{instance:{one:"agent",other:"agents"}}},"netdata.ebpf_kernel_memory":{info:"Memory allocated for hash tables..",en:{instance:{one:"agent",other:"agents"}}},"netdata.ebpf_hash_tables_count":{info:"Number of hash tables loaded.",en:{instance:{one:"agent",other:"agents"}}},"elasticsearch.node_indices_indexing":{info:"Indexing Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_indexing_current":{info:"Indexing Operations Current.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_indexing_time":{aggregationMethod:"avg",info:"Time Spent On Indexing Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_search":{info:"Search Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_search_current":{info:"Search Operations Current.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_search_time":{aggregationMethod:"avg",info:"node_indices_search_time.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_refresh":{info:"Refresh Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_refresh_time":{aggregationMethod:"avg",info:"Time Spent On Refresh Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_flush":{info:"Flush Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_flush_time":{aggregationMethod:"avg",info:"Time Spent On Flush Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_fielddata_memory_usage":{info:"Fielddata Cache Memory Usage.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_fielddata_evictions":{info:"Fielddata Evictions.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_segments_count":{info:"Segments Count.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_segments_memory_usage_total":{info:"Segments Memory Usage Total.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_segments_memory_usage":{info:"Segments Memory Usage.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_translog_operations":{info:"Translog Operations.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_indices_translog_size":{info:"Translog Size.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_file_descriptors":{info:"Process File Descriptors.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_heap":{aggregationMethod:"avg",info:"JVM Heap Percentage Currently in Use.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_heap_bytes":{info:"JVM Heap Commit And Usage.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_buffer_pools_count":{info:"JVM Buffer Pools Count.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_buffer_pool_direct_memory":{info:"JVM Buffer Pool Direct Memory.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_buffer_pool_mapped_memory":{info:"JVM Buffer Pool Mapped Memory.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_gc_count":{info:"JVM Garbage Collections.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_jvm_gc_time":{aggregationMethod:"avg",info:"JVM Time Spent On Garbage Collections.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_thread_pool_queued":{info:"Thread Pool Queued Threads Count.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.node_thread_pool_rejected":{info:"Thread Pool Rejected Threads Count.",en:{instance:{one:"elastic node",other:"elastic nodes"}}},"elasticsearch.cluster_communication_packets":{info:"Cluster Communication.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_communication":{info:"Cluster Communication Bandwidth.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.http_connections":{info:"HTTP Connections.",en:{instance:{one:"server",other:"servers"}}},"elasticsearch.breakers_trips":{info:"Circuit Breaker Trips Count.",en:{instance:{one:"server",other:"servers"}}},"elasticsearch.cluster_health_status":{info:"Cluster Status.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_number_of_nodes":{info:"Cluster Nodes Count.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_shards_count":{info:"Cluster Shards Count.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_pending_tasks":{info:"Cluster Pending Tasks.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_number_of_in_flight_fetch":{info:"Cluster Unfinished Fetches.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_indices_count":{info:"Cluster Indices Count.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_indices_shards_count":{info:"Cluster Indices Shards Count.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_indices_docs_count":{info:"Cluster Indices Docs Count.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_indices_store_size":{info:"Cluster Indices Store Size.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_indices_query_cache":{info:"Cluster Indices Query Cache.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.cluster_nodes_by_role_count":{info:"Cluster Nodes By Role Count.",en:{instance:{one:"cluster",other:"clusters"}}},"elasticsearch.node_index_health":{info:"Index Health.",en:{instance:{one:"index",other:"indexes"}}},"elasticsearch.node_index_shards_count":{info:"Index Shards Count.",en:{instance:{one:"index",other:"indexes"}}},"elasticsearch.node_index_docs_count":{info:"Index Docs Count.",en:{instance:{one:"index",other:"indexes"}}},"elasticsearch.node_index_store_size":{info:"Index Store Size.",en:{instance:{one:"index",other:"indexes"}}},"energid.blockindex":{info:"Blockchain index.",en:{instance:{one:"server",other:"servers"}}},"energid.difficulty":{info:"Blockchain difficulty.",en:{instance:{one:"server",other:"servers"}}},"energid.mempool":{info:"Memory pool.",en:{instance:{one:"server",other:"servers"}}},"energid.secmem":{info:"Secure memory.",en:{instance:{one:"server",other:"servers"}}},"energid.network":{info:"Network.",en:{instance:{one:"server",other:"servers"}}},"energid.timeoffset":{info:"Network time offset.",en:{instance:{one:"server",other:"servers"}}},"energid.utxo_transactions":{info:"Transactions.",en:{instance:{one:"server",other:"servers"}}},"exim.qemails":{info:"Exim Queue Emails.",en:{instance:{one:"server",other:"servers"}}},"fail2ban.faile_attempts":{info:"Failed attempts.",en:{instance:{one:"system",other:"systems"}}},"filecheck.file_existence_status":{info:"File existence status.",en:{instance:{one:"file",other:"files"}}},"filecheck.file_modification_time_ago":{groupBy:["label"],groupByLabel:["file_path"],info:"File time since the last modification.",en:{instance:{one:"file",other:"files"}}},"filecheck.file_size_bytes":{groupBy:["label"],groupByLabel:["file_path"],info:"File size.",en:{instance:{one:"file",other:"files"}}},"filecheck.dir_existence_status":{info:"Directory existence status.",en:{instance:{one:"directory",other:"directories"}}},"filecheck.dir_modification_time_ago":{info:"Directory time since the last modification.",groupBy:["label"],groupByLabel:["dir_path"],en:{instance:{one:"directory",other:"directories"}}},"filecheck.dir_size_bytes":{info:"Directory size.",groupBy:["label"],groupByLabel:["dir_path"],en:{instance:{one:"directory",other:"directories"}}},"filecheck.dir_files_count":{info:"Directory files count.",groupBy:["label"],groupByLabel:["dir_path"],en:{instance:{one:"directory",other:"directories"}}},"filecheck.file_existence":{info:"File Existence (0: not exists, 1: exists).",en:{instance:{one:"file",other:"files"}}},"filecheck.file_mtime_ago":{info:"File Time Since the Last Modification.",en:{instance:{one:"file",other:"files"}}},"filecheck.file_size":{info:"File Size.",en:{instance:{one:"file",other:"files"}}},"filecheck.dir_existence":{info:"Dir Existence (0: not exists, 1: exists).",en:{instance:{one:"directory",other:"directories"}}},"filecheck.dir_mtime_ago":{info:"Dir Time Since the Last Modification.",en:{instance:{one:"directory",other:"directories"}}},"filecheck.dir_num_of_files":{info:"Dir Number of Files.",en:{instance:{one:"directory",other:"directories"}}},"filecheck.dir_size":{info:"Dir Size.",en:{instance:{one:"directory",other:"directories"}}},"fluentd.retry_count":{info:"Plugin Retry Count.",en:{instance:{one:"plugin",other:"plugins"}}},"fluentd.buffer_queue_length":{info:"Plugin Buffer Queue Length.",en:{instance:{one:"plugin",other:"plugins"}}},"fluentd.buffer_total_queued_size":{info:"Plugin Buffer Total Size.",en:{instance:{one:"plugin",other:"plugins"}}},"cpu.temperature":{info:"Core temperature.",en:{instance:{one:"core",other:"cores"}}},"cpu.scaling_cur_freq":{info:"Current CPU Scaling Frequency.",en:{instance:{one:"system",other:"systems"}}},"system.dev_intr":{info:"Device Interrupts.",en:{instance:{one:"system",other:"systems"}}},"system.soft_intr":{info:"Software Interrupts.",en:{instance:{one:"system",other:"systems"}}},"system.ipc_shared_mem_segs":{info:"IPC Shared Memory Segments.",en:{instance:{one:"system",other:"systems"}}},"system.ipc_shared_mem_size":{info:"IPC Shared Memory Segments Size.",en:{instance:{one:"system",other:"systems"}}},"system.ipc_msq_queues":{info:"Number of IPC Message Queues.",en:{instance:{one:"system",other:"systems"}}},"system.ipc_msq_messages":{info:"Number of Messages in IPC Message Queues.",en:{instance:{one:"system",other:"systems"}}},"system.ipc_msq_size":{info:"Size of IPC Message Queues.",en:{instance:{one:"system",other:"systems"}}},"ipv4.tcpconnaborts":{info:"TCP Connection Aborts.",en:{instance:{one:"system",other:"systems"}}},"ipv4.tcpofo":{info:"TCP Out-Of-Order Queue.",en:{instance:{one:"system",other:"systems"}}},"ipv4.tcpsyncookies":{info:"TCP SYN Cookies.",en:{instance:{one:"system",other:"systems"}}},"ipv4.tcplistenissues":{info:"TCP Listen Socket Issues.",en:{instance:{one:"system",other:"systems"}}},"ipv4.ecnpkts":{info:"IPv4 ECN Statistics.",en:{instance:{one:"system",other:"systems"}}},"ipfw.mem":{info:"Memory allocated by rules.",en:{instance:{one:"system",other:"systems"}}},"ipfw.packets":{info:"Packets.",en:{instance:{one:"system",other:"systems"}}},"ipfw.bytes":{info:"Bytes.",en:{instance:{one:"system",other:"systems"}}},"ipfw.active":{info:"Active rules.",en:{instance:{one:"system",other:"systems"}}},"ipfw.expired":{info:"Expired rules.",en:{instance:{one:"system",other:"systems"}}},"system.packets":{info:"Network Packets.",en:{instance:{one:"system",other:"systems"}}},"zfs.hits_rate":{info:"ZFS ARC Hits Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.dhits_rate":{info:"ZFS Demand Hits Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.phits_rate":{info:"ZFS Prefetch Hits Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.mhits_rate":{info:"ZFS Metadata Hits Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.l2hits_rate":{info:"ZFS L2 Hits Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.actual_hits_rate":{info:"ZFS Actual Cache Hits Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.demand_data_hits_rate":{info:"ZFS Data Demand Efficiency Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.prefetch_data_hits_rate":{info:"ZFS Data Prefetch Efficiency Rate.",en:{instance:{one:"filesystem",other:"filesystems"}}},"zfs.trim_bytes":{info:"Successfully TRIMmed bytes.",en:{instance:{one:"system",other:"systems"}}},"zfs.trim_requests":{info:"TRIM requests.",en:{instance:{one:"system",other:"systems"}}},"ipmi.sel":{groupBy:["node"],info:"IPMI Events.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_state":{info:"IPMI Sensors State.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_temperature_c":{groupBy:["label"],groupByLabel:["component"],aggregationMethod:"max",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Temperature",colors:s.default[1],layout:{left:0,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Temperature",layout:{left:2,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Temperature",layout:{left:2,top:2.5,width:2,height:2.5}}],info:"IPMI Sensor Temperature Celsius.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_temperature_f":{groupBy:["label"],groupByLabel:["component"],aggregationMethod:"max",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Temperature",colors:s.default[1],layout:{left:0,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Temperature",layout:{left:2,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Temperature",layout:{left:2,top:2.5,width:2,height:2.5}}],info:"IPMI Sensor Temperature Fahrenheit.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_voltage":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Voltage",colors:s.default[12],layout:{left:8,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Voltage",layout:{left:10,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Voltage",layout:{left:10,top:2.5,width:2,height:2.5}}],groupBy:["label"],groupByLabel:["component"],aggregationMethod:"avg",info:"IPMI Sensor Voltage.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_ampere":{groupBy:["label"],groupByLabel:["component"],aggregationMethod:"avg",info:"IPMI Sensor Current.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_fan_speed":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Fan Speed",layout:{left:4,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Fan Speed",layout:{left:6,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Fan Speed",layout:{left:6,top:2.5,width:2,height:2.5}}],groupBy:["label"],groupByLabel:["component"],aggregationMethod:"avg",info:"IPMI Sensor Fans speed.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_power":{groupBy:["label"],groupByLabel:["component"],aggregationMethod:"avg",info:"IPMI Sensor Power.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensor_reading_percent":{groupBy:["label"],groupByLabel:["component"],aggregationMethod:"avg",info:"IPMI Sensor Reading Percentage.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.sensors_states":{info:"IPMI Sensors State.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.temperatures_c":{groupBy:["node"],aggregationMethod:"max",mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Temperature",colors:s.default[1],layout:{left:0,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Temperature",layout:{left:2,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Temperature",layout:{left:2,top:2.5,width:2,height:2.5}}],info:"System Celsius Temperatures read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.temperatures_f":{groupBy:["node"],aggregationMethod:"max",info:"System Celsius Temperatures read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.voltages":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Voltage",colors:s.default[12],layout:{left:8,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Voltage",layout:{left:10,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Voltage",layout:{left:10,top:2.5,width:2,height:2.5}}],groupBy:["node"],aggregationMethod:"avg",info:"System Voltages read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.amps":{groupBy:["node"],aggregationMethod:"avg",info:"System Current read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.rpm":{mainheads:[{groupBy:["selected"],aggregationMethod:"max",chartLibrary:"easypiechart",title:"Maximum Fan Speed",layout:{left:4,top:0,width:2,height:5}},{groupBy:["selected"],aggregationMethod:"min",chartLibrary:"number",title:"Minimum Fan Speed",layout:{left:6,top:0,width:2,height:2.5}},{groupBy:["selected"],aggregationMethod:"avg",chartLibrary:"number",title:"Average Fan Speed",layout:{left:6,top:2.5,width:2,height:2.5}}],groupBy:["node"],aggregationMethod:"avg",info:"System Fans read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.watts":{groupBy:["node"],aggregationMethod:"avg",info:"System Power read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"ipmi.percent":{groupBy:["node"],aggregationMethod:"avg",info:"System Metrics read by IPMI.",en:{instance:{one:"sensor",other:"sensors"}}},"freeradius.proxy_bad_authentication":{info:"Bad Authentication Requests.",en:{instance:{one:"server",other:"servers"}}},"freeradius.accounting":{info:"Accounting.",en:{instance:{one:"server",other:"servers"}}},"freeradius.bad_accounting":{info:"Bad Accounting Requests.",en:{instance:{one:"server",other:"servers"}}},"freeradius.proxy_accounting":{info:"Accounting.",en:{instance:{one:"server",other:"servers"}}},"freeradius.proxy_bad_accounting":{info:"Bad Accounting Requests.",en:{instance:{one:"server",other:"servers"}}},"gearman.total_jobs":{info:"Total Jobs.",en:{instance:{one:"server",other:"servers"}}},"gearman.single_job":{info:"{job_name}.",en:{instance:{one:"server",other:"servers"}}},"geth.eth_db_chaindata_ancient_io_rate":{info:"Ancient Chaindata rate.",en:{instance:{one:"server",other:"servers"}}},"geth.eth_db_chaindata_ancient_io":{info:"Session ancient Chaindata.",en:{instance:{one:"server",other:"servers"}}},"geth.eth_db_chaindata_disk_io":{info:"Session chaindata on disk.",en:{instance:{one:"server",other:"servers"}}},"geth.eth_db_chaindata_disk_io_rate":{info:"On disk Chaindata rate.",en:{instance:{one:"server",other:"servers"}}},"geth.tx_pool_pending":{info:"Pending Transaction Pool.",en:{instance:{one:"server",other:"servers"}}},"geth.tx_pool_current":{info:"Transaction Pool.",en:{instance:{one:"server",other:"servers"}}},"geth.tx_pool_queued":{info:"Queued Transaction Pool.",en:{instance:{one:"server",other:"servers"}}},"geth.p2p_peers":{info:"Number of Peers.",en:{instance:{one:"server",other:"servers"}}},"geth.rpc_calls":{info:"rpc calls.",en:{instance:{one:"server",other:"servers"}}},"expvar.memstats.heap":{info:"memory: size of heap memory structures.",en:{instance:{one:"system",other:"systems"}}},"expvar.memstats.stack":{info:"memory: size of stack memory structures.",en:{instance:{one:"system",other:"systems"}}},"expvar.memstats.mspan":{info:"memory: size of mspan memory structures.",en:{instance:{one:"system",other:"systems"}}},"expvar.memstats.mcache":{info:"memory: size of mcache memory structures.",en:{instance:{one:"system",other:"systems"}}},"expvar.memstats.live_objects":{info:"memory: number of live objects.",en:{instance:{one:"system",other:"systems"}}},"expvar.memstats.sys":{info:"memory: size of reserved virtual address space.",en:{instance:{one:"system",other:"systems"}}},"expvar.memstats.gc_pauses":{info:"memory: average duration of GC pauses.",en:{instance:{one:"system",other:"systems"}}},"hddtemp.temperatures":{aggregationMethod:"avg",info:"Disk Temperatures.",en:{instance:{one:"device",other:"devices"}}},"hddtemp.disk_temperature":{aggregationMethod:"max",info:"Disk temperature.",en:{instance:{one:"disk",other:"disks"}},groupBy:["label"],groupByLabel:["disk_id"]},"hddtemp.disk_temperature_sensor_status":{info:"Disk temperature sensor status.",en:{instance:{one:"disk",other:"disks"}}},"hdfs.threads":{info:"Number of Threads.",en:{instance:{one:"device",other:"devices"}}},"hdfs.logs_total":{info:"Number of Logs.",en:{instance:{one:"device",other:"devices"}}},"hdfs.open_connections":{info:"RPC Open Connections.",en:{instance:{one:"device",other:"devices"}}},"hdfs.call_queue_length":{info:"RPC Call Queue Length.",en:{instance:{one:"device",other:"devices"}}},"hdfs.capacity":{info:"Capacity Across All Datanodes.",en:{instance:{one:"device",other:"devices"}}},"hdfs.used_capacity":{info:"Used Capacity Across All Datanodes.",en:{instance:{one:"device",other:"devices"}}},"hdfs.load":{info:"Number of Concurrent File Accesses (read/write) Across All DataNodes.",en:{instance:{one:"device",other:"devices"}}},"hdfs.volume_failures_total":{info:"Number of Volume Failures Across All Datanodes.",en:{instance:{one:"device",other:"devices"}}},"hdfs.files_total":{info:"Number of Tracked Files.",en:{instance:{one:"device",other:"devices"}}},"hdfs.blocks_total":{info:"Number of Allocated Blocks in the System.",en:{instance:{one:"device",other:"devices"}}},"hdfs.blocks":{info:"Number of Problem Blocks (can point to an unhealthy cluster).",en:{instance:{one:"device",other:"devices"}}},"hdfs.data_nodes":{info:"Number of Data Nodes By Status.",en:{instance:{one:"device",other:"devices"}}},"hdfs.datanode_used_capacity":{info:"Used Capacity.",en:{instance:{one:"device",other:"devices"}}},"hdfs.datanode_failed_volumes":{info:"Number of Failed Volumes.",en:{instance:{one:"device",other:"devices"}}},"hpssa.ctrl_status":{info:"Status 1 is OK, Status 0 is not OK.",en:{instance:{one:"device",other:"devices"}}},"hpssa.ctrl_temperature":{aggregationMethod:"avg",info:"Temperature.",en:{instance:{one:"device",other:"devices"}}},"hpssa.ld_status":{info:"Status 1 is OK, Status 0 is not OK.",en:{instance:{one:"device",other:"devices"}}},"hpssa.pd_status":{info:"Status 1 is OK, Status 0 is not OK.",en:{instance:{one:"device",other:"devices"}}},"hpssa.pd_temperature":{aggregationMethod:"avg",info:"Temperature.",en:{instance:{one:"device",other:"devices"}}},"httpcheck.in_state":{aggregationMethod:"avg",info:"HTTP Current State Duration.",en:{instance:{one:"server",other:"servers"}}},"icecast.listeners":{info:"Number Of Listeners.",en:{instance:{one:"server",other:"servers"}}},"ioping.latency":{info:"Read Latency.",en:{instance:{one:"disk",other:"disks"}}},"ipfs.bandwidth":{info:"IPFS Bandwidth.",en:{instance:{one:"server",other:"servers"}}},"ipfs.peers":{info:"IPFS Peers.",en:{instance:{one:"server",other:"servers"}}},"ipfs.repo_size":{info:"IPFS Repo Size.",en:{instance:{one:"server",other:"servers"}}},"ipfs.repo_objects":{info:"IPFS Repo Objects.",en:{instance:{one:"server",other:"servers"}}},"isc_dhcpd.active_leases_total":{info:"Active Leases Total.",en:{instance:{one:"server",other:"servers"}}},"isc_dhcpd.pool_active_leases":{info:"Pool Active Leases.",en:{instance:{one:"pool",other:"pools"}}},"isc_dhcpd.pool_utilization":{aggregationMethod:"avg",info:"Pool Utilization.",en:{instance:{one:"pool",other:"pools"}}},"libreswan.net":{info:"LibreSWAN Tunnel ${name} Traffic.",en:{instance:{one:"tunnel",other:"tunnels"}}},"libreswan.uptime":{aggregationMethod:"min",info:"LibreSWAN Tunnel ${name} Uptime.",en:{instance:{one:"tunnel",other:"tunnels"}}},"lighttpd.scoreboard":{info:"ScoreBoard.",en:{instance:{one:"server",other:"servers"}}},"litespeed.net_throughput":{info:"Network Throughput HTTPS.",en:{instance:{one:"server",other:"servers"}}},"litespeed.connections":{info:"Connections HTTPS.",en:{instance:{one:"server",other:"servers"}}},"litespeed.requests":{info:"Requests.",en:{instance:{one:"server",other:"servers"}}},"litespeed.requests_processing":{info:"Requests In Processing.",en:{instance:{one:"server",other:"servers"}}},"litespeed.cache":{info:"Private Cache Hits.",en:{instance:{one:"server",other:"servers"}}},"litespeed.static":{info:"Static Hits.",en:{instance:{one:"server",other:"servers"}}},"logstash.jvm_mem_heap":{info:"JVM Heap Memory.",en:{instance:{one:"system",other:"systems"}}},"megacli.adapter_degraded":{info:"Adapter State.",en:{instance:{one:"device",other:"devices"}}},"megacli.pd_media_error":{info:"Physical Drives Media Errors.",en:{instance:{one:"device",other:"devices"}}},"megacli.pd_predictive_failure":{info:"Physical Drives Predictive Failures.",en:{instance:{one:"device",other:"devices"}}},"megacli.bbu_relative_charge":{aggregationMethod:"avg",info:"Relative State of Charge.",en:{instance:{one:"battery",other:"batteries"}}},"megacli.bbu_cycle_count":{info:"Cycle Count.",en:{instance:{one:"battery",other:"batteries"}}},"memcached.cache":{info:"Cache Size.",en:{instance:{one:"system",other:"systems"}}},"memcached.net":{info:"Network.",en:{instance:{one:"system",other:"systems"}}},"memcached.connections":{info:"Connections.",en:{instance:{one:"system",other:"systems"}}},"memcached.items":{info:"Items.",en:{instance:{one:"system",other:"systems"}}},"memcached.evicted_reclaimed":{info:"Evicted and Reclaimed Items.",en:{instance:{one:"system",other:"systems"}}},"memcached.get":{info:"Get Requests.",en:{instance:{one:"system",other:"systems"}}},"memcached.get_rate":{info:"Get Request Rate.",en:{instance:{one:"system",other:"systems"}}},"memcached.set_rate":{info:"Set Request Rate.",en:{instance:{one:"system",other:"systems"}}},"memcached.delete":{info:"Delete Requests.",en:{instance:{one:"system",other:"systems"}}},"memcached.cas":{info:"Check and Set Requests.",en:{instance:{one:"system",other:"systems"}}},"memcached.increment":{info:"Increment Requests.",en:{instance:{one:"system",other:"systems"}}},"memcached.decrement":{info:"Decrement Requests.",en:{instance:{one:"system",other:"systems"}}},"memcached.touch":{info:"Touch Requests.",en:{instance:{one:"system",other:"systems"}}},"memcached.touch_rate":{info:"Touch Request Rate.",en:{instance:{one:"system",other:"systems"}}},"mongodb.operations_rate":{info:"Operations rate.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.operations_latency_time":{aggregationMethod:"avg",info:"Operations Latency.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.operations_by_type_rate":{info:"Operations by type.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.document_operations_rate":{info:"Document operations.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.scanned_indexes_rate":{info:"Scanned indexes.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.scanned_documents_rate":{info:"Scanned documents.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.active_clients_count":{info:"Connected clients.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.queued_operations_count":{info:"Queued operations because of a lock.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.lock_acquisitions_rate":{info:"Lock acquisitions.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.cursors_open_count":{info:"Open cursors.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.cursors_open_no_timeout_count":{info:"Open cursors with disabled timeout.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.cursors_opened_rate":{info:"Opened cursors rate.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.cursors_timed_out_rate":{info:"Timed-out cursors.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.cursors_by_lifespan_count":{info:"Cursors lifespan.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.transactions_count":{info:"Current transactions.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.transactions_rate":{info:"Transactions rate.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.transactions_commits_rate":{info:"Transactions commits.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.transactions_commits_duration_time":{aggregationMethod:"avg",info:"Transactions successful commits duration.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.connections_usage":{info:"Connections usage.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.connections_by_state_count":{info:"Connections By State.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.asserts_rate":{info:"Raised assertions.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.network_traffic_rate":{info:"Network traffic.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.network_requests_rate":{info:"Network Requests.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.network_slow_dns_resolutions_rate":{info:"Slow DNS resolution operations.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.network_slow_ssl_handshakes_rate":{info:"Slow SSL handshake operations.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.memory_resident_size":{info:"Used resident memory.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.memory_virtual_size":{info:"Used virtual memory.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.memory_page_faults_rate":{info:"Memory page faults.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.memory_tcmalloc_stats":{info:"TCMalloc statistics.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.wiredtiger_concurrent_read_transactions_usage":{info:"Wired Tiger concurrent read transactions usage.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.wiredtiger_concurrent_write_transactions_usage":{info:"Wired Tiger concurrent write transactions usage.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.wiredtiger_cache_usage":{info:"Wired Tiger cache usage.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.wiredtiger_cache_dirty_space_size":{info:"Wired Tiger cache dirty space size.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.wiredtiger_cache_io_rate":{info:"Wired Tiger IO activity.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.wiredtiger_cache_evictions_rate":{info:"Wired Tiger cache evictions.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.database_collection_count":{info:"Database collections.",en:{instance:{one:"database",other:"databases"}}},"mongodb.database_indexes_count":{info:"Database indexes.",en:{instance:{one:"database",other:"databases"}}},"mongodb.database_views_count":{info:"Database views.",en:{instance:{one:"database",other:"databases"}}},"mongodb.database_documents_count":{info:"Database documents.",en:{instance:{one:"database",other:"databases"}}},"mongodb.database_data_size":{info:"Database data size.",en:{instance:{one:"database",other:"databases"}}},"mongodb.database_index_size":{info:"Database index size.",en:{instance:{one:"database",other:"databases"}}},"mongodb.repl_set_member_state":{info:"Replica Set member state.",en:{instance:{one:"replica",other:"replicas"}}},"mongodb.repl_set_member_health_status":{info:"Replica Set member health status.",en:{instance:{one:"replica",other:"replicas"}}},"mongodb.repl_set_member_replication_lag_time":{aggregationMethod:"max",info:"Replica Set member replication lag.",en:{instance:{one:"replica",other:"replicas"}}},"mongodb.repl_set_member_heartbeat_latency_time":{aggregationMethod:"avg",info:"Replica Set member heartbeat latency.",en:{instance:{one:"replica",other:"replicas"}}},"mongodb.repl_set_member_ping_rtt_time":{aggregationMethod:"avg",info:"Replica Set member ping RTT.",en:{instance:{one:"replica",other:"replicas"}}},"mongodb.repl_set_member_uptime":{aggregationMethod:"min",info:"Replica Set member uptime.",en:{instance:{one:"replica",other:"replicas"}}},"mongodb.sharding_nodes_count":{info:"Sharding Nodes.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.sharding_sharded_databases_count":{info:"Sharded databases.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.sharding_sharded_collections_count":{info:"Sharded collections.",en:{instance:{one:"db server",other:"db servers"}}},"mongodb.sharding_shard_chunks_count":{info:"Shard chunks.",en:{instance:{one:"shard",other:"shards"}}},"monit.filesystems":{info:"Filesystems.",en:{instance:{one:"system",other:"systems"}}},"monit.directories":{info:"Directories.",en:{instance:{one:"system",other:"systems"}}},"monit.files":{info:"Files.",en:{instance:{one:"system",other:"systems"}}},"monit.fifos":{info:"Pipes (fifo).",en:{instance:{one:"system",other:"systems"}}},"monit.programs":{info:"Programs statuses.",en:{instance:{one:"system",other:"systems"}}},"monit.services":{info:"Processes statuses.",en:{instance:{one:"system",other:"systems"}}},"monit.process_uptime":{aggregationMethod:"min",info:"Processes uptime.",en:{instance:{one:"system",other:"systems"}}},"monit.process_threads":{info:"Processes threads.",en:{instance:{one:"system",other:"systems"}}},"monit.process_childrens":{info:"Child processes.",en:{instance:{one:"system",other:"systems"}}},"monit.hosts":{info:"Hosts.",en:{instance:{one:"system",other:"systems"}}},"monit.host_latency":{aggregationMethod:"avg",info:"Hosts latency.",en:{instance:{one:"system",other:"systems"}}},"monit.networks":{info:"Network interfaces and addresses.",en:{instance:{one:"system",other:"systems"}}},"mysql.queries_type":{info:"Queries By Type.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.connections":{info:"Connections.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.connections_active":{info:"Active Connections.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.threads":{info:"Threads.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.innodb_os_log_fsync_writes":{info:"InnoDB OS Log Operations.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.innodb_os_log_io":{info:"InnoDB OS Log Bandwidth.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.connection_errors":{info:"Connection Errors.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.open_tables":{info:"Open Tables.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.process_list_queries_count":{info:"Queries Count.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.galera_writesets":{info:"Replicated Writesets.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.galera_conflicts":{info:"Replication Conflicts.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.galera_thread_count":{info:"Total Number of WSRep (applier/rollbacker) Threads.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.key_requests":{info:"MyISAM Key Cache Requests.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.key_disk_ops":{info:"MyISAM Key Cache Disk Operations.",en:{instance:{one:"db server",other:"db servers"}}},"mysql.slave_status":{info:"I/O / SQL Thread Running State.",en:{instance:{one:"connection",other:"connections"}}},"mysql.userstats_created_transactions":{info:"User Transactions.",en:{instance:{one:"user",other:"users"}}},"mysql.userstats_empty_queries":{info:"User Empty Queries.",en:{instance:{one:"user",other:"users"}}},"netfilter.netlink_new":{info:"Connection Tracker New Connections.",en:{instance:{one:"system",other:"systems"}}},"netfilter.netlink_changes":{info:"Connection Tracker Changes.",en:{instance:{one:"system",other:"systems"}}},"netfilter.netlink_search":{info:"Connection Tracker Searches.",en:{instance:{one:"system",other:"systems"}}},"netfilter.netlink_errors":{info:"Connection Tracker Errors.",en:{instance:{one:"system",other:"systems"}}},"netfilter.netlink_expect":{info:"Connection Tracker Expectations.",en:{instance:{one:"system",other:"systems"}}},"netfilter.nfacct_packets":{info:"Netfilter Accounting Packets.",en:{instance:{one:"system",other:"systems"}}},"netfilter.nfacct_bytes":{info:"Netfilter Accounting Bandwidth.",en:{instance:{one:"system",other:"systems"}}},"nginxvts.connections_total":{info:"Total connections.",en:{instance:{one:"server",other:"servers"}}},"nginxvts.shm_used_node":{info:"Number of node using shared memory.",en:{instance:{one:"server",other:"servers"}}},"nginxvts.server_responses_total":{info:"Total number of responses by code class.",en:{instance:{one:"server",other:"servers"}}},"nginxvts.server_traffic_total":{info:"Total amount of data transferred to and from the server.",en:{instance:{one:"server",other:"servers"}}},"nginxvts.server_cache_total":{info:"Total server cache.",en:{instance:{one:"server",other:"servers"}}},"nsd.queries":{info:"queries.",en:{instance:{one:"server",other:"servers"}}},"nsd.zones":{info:"zones.",en:{instance:{one:"server",other:"servers"}}},"nsd.protocols":{info:"protocol.",en:{instance:{one:"server",other:"servers"}}},"nsd.type":{info:"query type.",en:{instance:{one:"server",other:"servers"}}},"nsd.transfer":{info:"transfer.",en:{instance:{one:"server",other:"servers"}}},"nsd.rcode":{info:"return code.",en:{instance:{one:"server",other:"servers"}}},"ntpd.sys_rootdisp":{info:"Total root dispersion to the primary reference clock.",en:{instance:{one:"server",other:"servers"}}},"ntpd.peer_stratum":{info:"Peer stratum.",en:{instance:{one:"peer",other:"peers"}}},"nut.charge":{aggregationMethod:"avg",info:"UPS Charge.",en:{instance:{one:"device",other:"devices"}}},"nut.runtime":{info:"UPS Runtime.",en:{instance:{one:"device",other:"devices"}}},"nut.battery.voltage":{aggregationMethod:"avg",info:"UPS Battery Voltage.",en:{instance:{one:"device",other:"devices"}}},"nut.input.voltage":{aggregationMethod:"avg",info:"UPS Input Voltage.",en:{instance:{one:"device",other:"devices"}}},"nut.input.current":{aggregationMethod:"avg",info:"UPS Input Current.",en:{instance:{one:"device",other:"devices"}}},"nut.input.frequency":{aggregationMethod:"avg",info:"UPS Input Frequency.",en:{instance:{one:"device",other:"devices"}}},"nut.output.voltage":{aggregationMethod:"avg",info:"UPS Output Voltage.",en:{instance:{one:"device",other:"devices"}}},"nut.load":{aggregationMethod:"avg",info:"UPS Load.",en:{instance:{one:"device",other:"devices"}}},"nut.load_usage":{info:"UPS Load Usage.",en:{instance:{one:"device",other:"devices"}}},"nut.temperature":{aggregationMethod:"avg",info:"UPS Temperature.",en:{instance:{one:"device",other:"devices"}}},"nut.clients":{info:"UPS Connected Clients.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_load":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["ups_name"],chartLibrary:"bars",title:"Top by Load",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],info:"The current load on the UPS, expressed as a percentage of its rated capacity.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_load_usage":{aggregationMethod:"sum",mainheads:[{groupBy:["label"],groupByLabel:["ups_name"],chartLibrary:"bars",title:"Top by Power Output",dimensionsSort:"valueDesc",colors:s.default[12],layout:{left:3,top:0,width:3,height:5}}],info:"The amount of power that the UPS delivers to the equipment connected to it.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_status":{aggregationMethod:"sum",info:'The overall status of the UPS. For details, see NUT status data.',en:{instance:{one:"device",other:"devices"}}},"upsd.ups_temperature":{aggregationMethod:"max",info:"The current temperature of the UPS.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_battery_charge":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["ups_name"],chartLibrary:"bars",title:"Top by Battery Charge (ascending)",dimensionsSort:"valueAsc",colors:s.default[12],layout:{left:6,top:0,width:3,height:5}}],info:"The current charge level of the UPS battery, expressed as a percentage.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_battery_estimated_runtime":{aggregationMethod:"avg",mainheads:[{groupBy:["label"],groupByLabel:["ups_name"],chartLibrary:"bars",title:"Top by Estimated Runtime (ascending)",dimensionsSort:"valueAsc",colors:s.default[12],layout:{left:9,top:0,width:3,height:5}}],info:"The estimated amount of time that the UPS can power its connected equipment during a power outage.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_battery_voltage":{aggregationMethod:"avg",info:"The current voltage of the UPS battery.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_battery_voltage_nominal":{aggregationMethod:"avg",info:"The nominal voltage of the UPS battery. The nominal voltage is the voltage that the battery is designed to operate at.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_input_voltage":{aggregationMethod:"avg",info:"The voltage of the power that is coming into the UPS from the utility.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_input_voltage_nominal":{aggregationMethod:"avg",info:"The nominal input voltage for the UPS. It is the voltage that the UPS is designed to operate at.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_input_current":{aggregationMethod:"avg",info:"The current amount of current that the UPS is drawing from the utility power.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_input_current_nominal":{aggregationMethod:"avg",info:"The nominal input current for the UPS. It is the current that the UPS is expected to draw from the utility power when it is fully loaded.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_input_frequency":{aggregationMethod:"avg",info:"The frequency of the utility power that the UPS is receiving.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_input_frequency_nominal":{aggregationMethod:"avg",info:"The nominal input frequency for the UPS. It is the frequency of the utility power that the UPS is designed to operate at.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_output_voltage":{aggregationMethod:"avg",info:"The voltage of the power that the UPS is providing to the connected equipment.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_output_voltage_nominal":{aggregationMethod:"avg",info:"The nominal output voltage for the UPS. It is the voltage that the UPS is designed to provide to the connected equipment.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_output_current":{aggregationMethod:"avg",info:"The current amount of current that the UPS is providing to the connected equipment.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_output_current_nominal":{aggregationMethod:"avg",info:"The nominal output current for the UPS. It is the amount of current that the UPS is designed to provide to the connected equipment under normal operating conditions.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_output_frequency":{aggregationMethod:"avg",info:"The frequency of the power that the UPS is providing to the connected equipment.",en:{instance:{one:"device",other:"devices"}}},"upsd.ups_output_frequency_nominal":{aggregationMethod:"avg",info:"The nominal output frequency for the UPS. It is the frequency of the power that the UPS is designed to provide to the connected equipment under normal operating conditions.",en:{instance:{one:"device",other:"devices"}}},"nvidia_smi.gpu_pcie_bandwidth_utilization":{aggregationMethod:"avg",info:"PCI Express Bandwidth Utilization.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_frame_buffer_memory_usage":{info:"Frame buffer memory usage.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_bar1_memory_usage":{info:"BAR1 memory usage.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_voltage":{aggregationMethod:"avg",info:"Voltage.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_power_draw":{aggregationMethod:"avg",info:"Power draw.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_mig_mode_current_status":{info:"MIG current mode.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_mig_devices_count":{info:"MIG devices.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_mig_frame_buffer_memory_usage":{info:"Frame buffer memory usage.",en:{instance:{one:"gpu",other:"gpus"}}},"nvidia_smi.gpu_mig_bar1_memory_usage":{info:"BAR1 memory usage.",en:{instance:{one:"gpu",other:"gpus"}}},"openldap.total_connections":{info:"Total Connections.",en:{instance:{one:"server",other:"servers"}}},"openldap.traffic_stats":{info:"Traffic.",en:{instance:{one:"server",other:"servers"}}},"openldap.operations_status":{info:"Operations Status.",en:{instance:{one:"server",other:"servers"}}},"openldap.referrals":{info:"Referrals.",en:{instance:{one:"server",other:"servers"}}},"openldap.entries":{info:"Entries.",en:{instance:{one:"server",other:"servers"}}},"openldap.ldap_operations":{info:"Operations.",en:{instance:{one:"server",other:"servers"}}},"openldap.waiters":{info:"Waiters.",en:{instance:{one:"server",other:"servers"}}},"opensips.dialogs_active":{info:"OpenSIPS Active Dialogs.",en:{instance:{one:"system",other:"systems"}}},"opensips.users":{info:"OpenSIPS Users.",en:{instance:{one:"system",other:"systems"}}},"opensips.registrar":{info:"OpenSIPS Registrar.",en:{instance:{one:"system",other:"systems"}}},"opensips.transactions":{info:"OpenSIPS Transactions.",en:{instance:{one:"system",other:"systems"}}},"opensips.core_rcv":{info:"OpenSIPS Core Receives.",en:{instance:{one:"system",other:"systems"}}},"opensips.core_fwd":{info:"OpenSIPS Core Forwards.",en:{instance:{one:"system",other:"systems"}}},"opensips.core_drop":{info:"OpenSIPS Core Drops.",en:{instance:{one:"system",other:"systems"}}},"opensips.core_err":{info:"OpenSIPS Core Errors.",en:{instance:{one:"system",other:"systems"}}},"opensips.core_bad":{info:"OpenSIPS Core Bad.",en:{instance:{one:"system",other:"systems"}}},"opensips.tm_replies":{info:"OpenSIPS TM Replies.",en:{instance:{one:"system",other:"systems"}}},"opensips.transactions_status":{info:"OpenSIPS Transactions Status.",en:{instance:{one:"system",other:"systems"}}},"opensips.transactions_inuse":{info:"OpenSIPS InUse Transactions.",en:{instance:{one:"system",other:"systems"}}},"opensips.sl_replies":{info:"OpenSIPS SL Replies.",en:{instance:{one:"system",other:"systems"}}},"opensips.dialogs":{info:"OpenSIPS Dialogs.",en:{instance:{one:"system",other:"systems"}}},"opensips.net_waiting":{info:"OpenSIPS Network Waiting.",en:{instance:{one:"system",other:"systems"}}},"opensips.uri_checks":{info:"OpenSIPS URI Checks.",en:{instance:{one:"system",other:"systems"}}},"opensips.traces":{info:"OpenSIPS Traces.",en:{instance:{one:"system",other:"systems"}}},"opensips.shmem":{info:"OpenSIPS Shared Memory.",en:{instance:{one:"system",other:"systems"}}},"opensips.shmem_fragment":{info:"OpenSIPS Shared Memory Fragmentation.",en:{instance:{one:"system",other:"systems"}}},"oracledb.session_count":{info:"Session Count.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.session_limit_usage":{info:"Session Limit Usage.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.logons":{info:"Logons.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.physical_disk_read_writes":{info:"Physical Disk Reads/Writes.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.sorts_on_disks":{info:"Sorts On Disk.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.full_table_scans":{info:"Full Table Scans.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.database_wait_time_ratio":{aggregationMethod:"avg",info:"Database Wait Time Ratio.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.shared_pool_free_memory":{info:"Shared Pool Free Memory.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.in_memory_sorts_ratio":{aggregationMethod:"avg",info:"In-Memory Sorts Ratio.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.sql_service_response_time":{aggregationMethod:"avg",info:"SQL Service Response Time.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.user_rollbacks":{info:"User Rollbacks.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.enqueue_timeouts":{info:"Enqueue Timeouts.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.cache_hit_ration":{aggregationMethod:"avg",info:"Cache Hit Ratio.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.global_cache_blocks":{info:"Global Cache Blocks Events.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.activity":{info:"Activities.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.wait_time":{aggregationMethod:"avg",info:"Wait Time.",en:{instance:{one:"db server",other:"db servers"}}},"oracledb.tablespace_size":{info:"Size.",en:{instance:{one:"tablespace",other:"tablespaces"}}},"oracledb.tablespace_usage":{info:"Usage.",en:{instance:{one:"tablespace",other:"tablespaces"}}},"oracledb.tablespace_usage_in_percent":{aggregationMethod:"avg",info:"Usage.",en:{instance:{one:"tablespace",other:"tablespaces"}}},"oracledb.allocated_size":{info:"Size.",en:{instance:{one:"tablespace",other:"tablespaces"}}},"oracledb.allocated_usage":{info:"Usage.",en:{instance:{one:"tablespace",other:"tablespaces"}}},"oracledb.allocated_usage_in_percent":{aggregationMethod:"avg",info:"Usage.",en:{instance:{one:"tablespace",other:"tablespaces"}}},"perf.cpu_cycles":{info:"CPU cycles.",en:{instance:{one:"system",other:"systems"}}},"perf.instructions":{info:"Instructions.",en:{instance:{one:"system",other:"systems"}}},"perf.branch_instructions":{info:"Branch instructions.",en:{instance:{one:"system",other:"systems"}}},"perf.cache":{info:"Cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.bus_cycles":{info:"Bus cycles.",en:{instance:{one:"system",other:"systems"}}},"perf.stalled_cycles":{info:"Stalled frontend and backend cycles.",en:{instance:{one:"system",other:"systems"}}},"perf.migrations":{info:"CPU migrations.",en:{instance:{one:"system",other:"systems"}}},"perf.alignment_faults":{info:"Alignment faults.",en:{instance:{one:"system",other:"systems"}}},"perf.emulation_faults":{info:"Emulation faults.",en:{instance:{one:"system",other:"systems"}}},"perf.l1d_cache":{info:"L1D cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.l1d_cache_prefetch":{info:"L1D prefetch cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.l1i_cache":{info:"L1I cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.ll_cache":{info:"LL cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.dtlb_cache":{info:"DTLB cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.itlb_cache":{info:"ITLB cache operations.",en:{instance:{one:"system",other:"systems"}}},"perf.pbu_cache":{info:"PBU cache operations.",en:{instance:{one:"system",other:"systems"}}},"pihole.unwanted_domains_blocking_status":{info:"Unwanted Domains Blocking Status.",en:{instance:{one:"server",other:"servers"}}},"pika.connections":{info:"Connections.",en:{instance:{one:"server",other:"servers"}}},"pika.clients":{info:"Clients.",en:{instance:{one:"server",other:"servers"}}},"pika.memory":{info:"Memory usage.",en:{instance:{one:"server",other:"servers"}}},"pika.connected_replicas":{info:"Connected replicas.",en:{instance:{one:"server",other:"servers"}}},"pika.commands":{info:"Processed commands.",en:{instance:{one:"server",other:"servers"}}},"pika.commands_calls":{info:"Calls per command.",en:{instance:{one:"server",other:"servers"}}},"pika.database_strings_keys":{info:"Strings type keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_strings_expires_keys":{info:"Strings type expires keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_strings_invalid_keys":{info:"Strings type invalid keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_hashes_keys":{info:"Hashes type keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_hashes_expires_keys":{info:"Hashes type expires keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_hashes_invalid_keys":{info:"Hashes type invalid keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_lists_keys":{info:"Lists type keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_lists_expires_keys":{info:"Lists type expires keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_lists_invalid_keys":{info:"Lists type invalid keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_zsets_keys":{info:"Zsets type keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_zsets_expires_keys":{info:"Zsets type expires keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_zsets_invalid_keys":{info:"Zsets type invalid keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_sets_keys":{info:"Sets type keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_sets_expires_keys":{info:"Sets type expires keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.database_sets_invalid_keys":{info:"Sets invalid keys per database.",en:{instance:{one:"database",other:"databases"}}},"pika.uptime":{aggregationMethod:"min",info:"Uptime.",en:{instance:{one:"server",other:"servers"}}},"portcheck.state_duration":{info:"Current State Duration.",en:{instance:{one:"server",other:"servers"}}},"postgres.locks_utilization":{aggregationMethod:"avg",info:"Acquired locks utilization.",en:{instance:{one:"pg server",other:"pg servers"}}},"postgres.catalog_relations_count":{info:"Relation count.",en:{instance:{one:"pg server",other:"pg servers"}}},"postgres.catalog_relations_size":{info:"Relation size.",en:{instance:{one:"pg server",other:"pg servers"}}},"postgres.table_size":{info:"Table total size.",en:{instance:{one:"table",other:"tables"}}},"powerdns.questions_in":{info:"Incoming questions.",en:{instance:{one:"server",other:"servers"}}},"powerdns.questions_out":{info:"Outgoing questions.",en:{instance:{one:"server",other:"servers"}}},"powerdns.cache_usage":{info:"Cache Usage.",en:{instance:{one:"server",other:"servers"}}},"powerdns.cache_size":{info:"Cache Size.",en:{instance:{one:"server",other:"servers"}}},"powerdns.latency":{info:"Answer latency.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.questions_in":{info:"Incoming questions.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.questions_out":{info:"Outgoing questions.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.answer_time":{info:"Queries answered within a time range.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.timeouts":{info:"Timeouts on outgoing UDP queries.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.drops":{info:"Drops.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.cache_usage":{info:"Cache Usage.",en:{instance:{one:"server",other:"servers"}}},"powerdns_recursor.cache_size":{info:"Cache Size.",en:{instance:{one:"server",other:"servers"}}},"cpu.cpufreq":{info:"Current CPU Frequency.",en:{instance:{one:"system",other:"systems"}}},"mem.hugepage":{info:"Dedicated HugePages Memory.",en:{instance:{one:"system",other:"systems"}}},"mem.pagetype":{info:"pagetype_Node{node}_{zone}_{type}.",en:{instance:{one:"system",other:"systems"}}},"system.message_queue_message":{info:"IPC Message Queue Number of Messages.",en:{instance:{one:"system",other:"systems"}}},"md.nonredundant":{family:"redundancy",info:"Nonredundant Array Availability.",en:{instance:{one:"device",other:"devices"}}},"wireless.status":{family:"status",info:"Internal status reported by interface..",en:{instance:{one:"device",other:"devices"}}},"btrfs.commits":{family:"commits",info:"BTRFS Commits.",en:{instance:{one:"filesystem",other:"filesystems"}}},"btrfs.commits_perc_time":{family:"commits",aggregationMethod:"avg",info:"BTRFS Commits Time Share.",en:{instance:{one:"filesystem",other:"filesystems"}}},"btrfs.commit_timings":{family:"commits",info:"BTRFS Commit Timings.",en:{instance:{one:"filesystem",other:"filesystems"}}},"btrfs.device_errors":{family:"errors",info:"BTRFS Device Errors.",en:{instance:{one:"device",other:"devices"}}},"proxysql.client_connections_count":{info:"Client connections.",en:{instance:{one:"server",other:"servers"}}},"proxysql.client_connections_rate":{info:"Client connections rate.",en:{instance:{one:"server",other:"servers"}}},"proxysql.server_connections_count":{info:"Server connections.",en:{instance:{one:"server",other:"servers"}}},"proxysql.server_connections_rate":{info:"Server connections rate.",en:{instance:{one:"server",other:"servers"}}},"proxysql.backends_traffic":{info:"Backends traffic.",en:{instance:{one:"server",other:"servers"}}},"proxysql.clients_traffic":{info:"Clients traffic.",en:{instance:{one:"server",other:"servers"}}},"proxysql.active_transactions_count":{info:"Client connections that are currently processing a transaction.",en:{instance:{one:"server",other:"servers"}}},"proxysql.questions_rate":{info:"Client requests / statements executed.",en:{instance:{one:"server",other:"servers"}}},"proxysql.slow_queries_rate":{info:"Slow queries.",en:{instance:{one:"server",other:"servers"}}},"proxysql.queries_rate":{info:"Queries rate.",en:{instance:{one:"server",other:"servers"}}},"proxysql.backend_statements_count":{info:"Statements available across all backend connections.",en:{instance:{one:"server",other:"servers"}}},"proxysql.backend_statements_rate":{info:"Statements executed against the backends.",en:{instance:{one:"server",other:"servers"}}},"proxysql.client_statements_count":{info:"Statements that are in use by clients.",en:{instance:{one:"server",other:"servers"}}},"proxysql.client_statements_rate":{info:"Statements executed by clients.",en:{instance:{one:"server",other:"servers"}}},"proxysql.cached_statements_count":{info:"Global prepared statements.",en:{instance:{one:"server",other:"servers"}}},"proxysql.query_cache_entries_count":{info:"Query Cache entries.",en:{instance:{one:"server",other:"servers"}}},"proxysql.query_cache_memory_used":{info:"Query Cache memory used.",en:{instance:{one:"server",other:"servers"}}},"proxysql.query_cache_io":{info:"Query Cache I/O.",en:{instance:{one:"server",other:"servers"}}},"proxysql.query_cache_requests_rate":{info:"Query Cache requests.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_monitor_workers_count":{info:"MySQL monitor workers.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_monitor_workers_rate":{info:"MySQL monitor workers rate.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_monitor_connect_checks_rate":{info:"MySQL monitor connect checks.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_monitor_ping_checks_rate":{info:"MySQL monitor ping checks.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_monitor_read_only_checks_rate":{info:"MySQL monitor read only checks.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_monitor_replication_lag_checks_rate":{info:"MySQL monitor replication lag checks.",en:{instance:{one:"server",other:"servers"}}},"proxysql.jemalloc_memory_used":{info:"Jemalloc used memory.",en:{instance:{one:"server",other:"servers"}}},"proxysql.memory_used":{info:"Memory used.",en:{instance:{one:"server",other:"servers"}}},"proxysql.uptime":{aggregationMethod:"min",info:"Uptime.",en:{instance:{one:"server",other:"servers"}}},"proxysql.mysql_command_execution_rate":{info:"MySQL command execution.",en:{instance:{one:"command",other:"commands"}}},"proxysql.mysql_command_execution_time":{aggregationMethod:"avg",info:"MySQL command execution time.",en:{instance:{one:"command",other:"commands"}}},"proxysql.mysql_command_execution_duration":{info:"MySQL command execution duration histogram.",en:{instance:{one:"command",other:"commands"}}},"proxysql.mysql_user_connections_utilization":{aggregationMethod:"avg",info:"MySQL user connections utilization.",en:{instance:{one:"user",other:"users"}}},"proxysql.mysql_user_connections_count":{info:"MySQL user connections used.",en:{instance:{one:"user",other:"users"}}},"proxysql.backend_status":{info:"Backend status.",en:{instance:{one:"sql backend",other:"sql backends"}}},"proxysql.backend_connections_usage":{info:"Backend connections usage.",en:{instance:{one:"sql backend",other:"sql backends"}}},"proxysql.backend_connections_rate":{info:"Backend connections established.",en:{instance:{one:"sql backend",other:"sql backends"}}},"proxysql.backend_queries_rate":{info:"Backend queries.",en:{instance:{one:"sql backend",other:"sql backends"}}},"proxysql.backend_traffic":{info:"Backend traffic.",en:{instance:{one:"sql backend",other:"sql backends"}}},"proxysql.backend_latency":{aggregationMethod:"avg",info:"Backend latency.",en:{instance:{one:"sql backend",other:"sql backends"}}},"pulsar.broker_components":{info:"Broker Components.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.throughput_rate":{info:"Throughput Rate.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.storage_size":{info:"Storage Size.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.storage_operations_rate":{info:"Storage Read/Write Operations Rate.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.storage_write_latency":{aggregationMethod:"avg",info:"Storage Write Latency.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.entry_size":{info:"Entry Size.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.subscription_delayed":{info:"Subscriptions Delayed for Dispatching.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.replication_rate":{info:"Replication Rate.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.replication_throughput_rate":{info:"Replication Throughput Rate.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.replication_backlog":{info:"Replication Backlog.",en:{instance:{one:"broker",other:"brokers"}}},"pulsar.namespace_broker_components":{info:"Broker Components.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_throughput_rate":{info:"Throughput Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_storage_size":{info:"Storage Size.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_storage_operations_rate":{info:"Storage Read/Write Operations Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_storage_write_latency":{aggregationMethod:"avg",info:"Storage Write Latency.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_entry_size":{info:"Entry Size.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_subscription_delayed":{info:"Subscriptions Delayed for Dispatching.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_replication_rate":{info:"Replication Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_replication_throughput_rate":{info:"Replication Throughput Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.namespace_replication_backlog":{info:"Replication Backlog.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_producers":{info:"Topic Producers.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_subscriptions":{info:"Topic Subscriptions.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_consumers":{info:"Topic Consumers.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_messages_rate_in":{info:"Topic Publish Messages Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_messages_rate_out":{info:"Topic Dispatch Messages Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_throughput_rate_in":{info:"Topic Publish Throughput Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_throughput_rate_out":{info:"Topic Dispatch Throughput Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_storage_size":{info:"Topic Storage Size.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_storage_read_rate":{info:"Topic Storage Read Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_storage_write_rate":{info:"Topic Storage Write Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_msg_backlog":{info:"Topic Messages Backlog Size.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_subscription_delayed":{info:"Topic Subscriptions Delayed for Dispatching.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_subscription_msg_rate_redeliver":{info:"Topic Subscriptions Redelivered Message Rate.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_subscription_blocked_on_unacked_messages":{info:"Topic Subscriptions Blocked On Unacked Messages.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_replication_rate_in":{info:"Topic Replication Rate From Remote Cluster.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_replication_rate_out":{info:"Topic Replication Rate To Remote Cluster.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_replication_throughput_rate_in":{info:"Topic Replication Throughput Rate From Remote Cluster.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_replication_throughput_rate_out":{info:"Topic Replication Throughput Rate To Remote Cluster.",en:{instance:{one:"namespace",other:"namespaces"}}},"pulsar.topic_replication_backlog":{info:"Topic Replication Backlog.",en:{instance:{one:"namespace",other:"namespaces"}}},"puppet.jvm":{info:"JVM Non-Heap.",en:{instance:{one:"server",other:"servers"}}},"puppet.fdopen":{info:"File Descriptors.",en:{instance:{one:"server",other:"servers"}}},"rabbitmq.messages_count":{info:"Messages.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.messages_rate":{info:"Messages.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.objects_count":{info:"Objects.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.connection_churn_rate":{info:"Connection churn.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.channel_churn_rate":{info:"Channel churn.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.queue_churn_rate":{info:"Queue churn.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.file_descriptors_count":{info:"File descriptors.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.sockets_count":{info:"Used sockets.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.erlang_processes_count":{info:"Erlang processes.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.erlang_run_queue_processes_count":{info:"Erlang run queue.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.memory_usage":{info:"Memory.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.disk_space_free_size":{info:"Free disk space.",en:{instance:{one:"broker",other:"brokers"}}},"rabbitmq.vhost_messages_count":{info:"Vhost messages.",en:{instance:{one:"vhost",other:"vhosts"}}},"rabbitmq.vhost_messages_rate":{info:"Vhost messages rate.",en:{instance:{one:"vhost",other:"vhosts"}}},"rabbitmq.queue_messages_count":{info:"Queue messages.",en:{instance:{one:"queue",other:"queues"}}},"rabbitmq.queue_messages_rate":{info:"Queue messages rate.",en:{instance:{one:"queue",other:"queues"}}},"redis.connections":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Connections",layout:{left:14,top:0,width:1.999999999,height:5}}],info:"Accepted and rejected (maxclients limit) connections.",en:{instance:{one:"server",other:"servers"}}},"redis.memory":{info:"Memory usage.",en:{instance:{one:"server",other:"servers"}}},"redis.key_eviction_events":{info:"Evicted keys due to maxmemory limit.",en:{instance:{one:"server",other:"servers"}}},"redis.net":{info:"Bandwidth.",en:{instance:{one:"server",other:"servers"}}},"redis.rdb_changes":{info:"TI,TLE.",en:{instance:{one:"server",other:"servers"}}},"redis.bgsave_now":{aggregationMethod:"max",info:"Duration of the on-going RDB save operation if any.",en:{instance:{one:"server",other:"servers"}}},"redis.bgsave_health":{info:"Status of the last RDB save operation (0: ok, 1: err).",en:{instance:{one:"server",other:"servers"}}},"redis.bgsave_last_rdb_save_since_time":{aggregationMethod:"min",info:"Time elapsed since the last successful RDB save.",en:{instance:{one:"server",other:"servers"}}},"redis.aof_file_size":{info:"AOF file size.",en:{instance:{one:"server",other:"servers"}}},"redis.commands_usec":{info:"Total CPU time consumed by the commands.",en:{instance:{one:"server",other:"servers"}}},"redis.commands_usec_per_sec":{info:"Average CPU consumed per command execution.",en:{instance:{one:"server",other:"servers"}}},"redis.key_expiration_events":{info:"Expired keys.",en:{instance:{one:"server",other:"servers"}}},"redis.database_keys":{info:"Keys per database.",en:{instance:{one:"server",other:"servers"}}},"redis.database_expires_keys":{info:"Keys with an expiration per database.",en:{instance:{one:"server",other:"servers"}}},"redis.connected_replicas":{info:"Connected replicas.",en:{instance:{one:"server",other:"servers"}}},"redis.master_link_status":{info:"Master link status.",en:{instance:{one:"server",other:"servers"}}},"rethinkdb.cluster_connected_servers":{info:"Connected Servers.",en:{instance:{one:"server",other:"servers"}}},"rethinkdb.cluster_clients_active":{info:"Active Clients.",en:{instance:{one:"server",other:"servers"}}},"rethinkdb.cluster_queries":{info:"Queries.",en:{instance:{one:"server",other:"servers"}}},"rethinkdb.cluster_documents":{info:"Documents.",en:{instance:{one:"server",other:"servers"}}},"rethinkdb.client_connections":{info:"Client Connections.",en:{instance:{one:"database",other:"databases"}}},"rethinkdb.clients_active":{info:"Active Clients.",en:{instance:{one:"database",other:"databases"}}},"rethinkdb.queries":{info:"Queries.",en:{instance:{one:"database",other:"databases"}}},"rethinkdb.documents":{info:"Documents.",en:{instance:{one:"database",other:"databases"}}},"riak.kv.throughput":{info:"Reads & writes coordinated by this node.",en:{instance:{one:"server",other:"servers"}}},"riak.dt.vnode_updates":{info:"Update operations coordinated by local vnodes by data type.",en:{instance:{one:"server",other:"servers"}}},"riak.search":{info:"Search queries on the node.",en:{instance:{one:"server",other:"servers"}}},"riak.search.documents":{info:"Documents indexed by search.",en:{instance:{one:"server",other:"servers"}}},"riak.consistent.operations":{info:"Consistent node operations.",en:{instance:{one:"server",other:"servers"}}},"riak.kv.latency.get":{info:"Time between reception of a client GET request and subsequent response to client.",en:{instance:{one:"server",other:"servers"}}},"riak.kv.latency.put":{info:"Time between reception of a client PUT request and subsequent response to client.",en:{instance:{one:"server",other:"servers"}}},"riak.dt.latency.counter_merge":{info:"Time it takes to perform an Update Counter operation.",en:{instance:{one:"server",other:"servers"}}},"riak.dt.latency.set_merge":{info:"Time it takes to perform an Update Set operation.",en:{instance:{one:"server",other:"servers"}}},"riak.dt.latency.map_merge":{info:"Time it takes to perform an Update Map operation.",en:{instance:{one:"server",other:"servers"}}},"riak.search.latency.query":{info:"Search query latency.",en:{instance:{one:"server",other:"servers"}}},"riak.search.latency.index":{info:"Time it takes Search to index a new document.",en:{instance:{one:"server",other:"servers"}}},"riak.consistent.latency.get":{info:"Strongly consistent read latency.",en:{instance:{one:"server",other:"servers"}}},"riak.consistent.latency.put":{info:"Strongly consistent write latency.",en:{instance:{one:"server",other:"servers"}}},"riak.vm":{info:"Total processes running in the Erlang VM.",en:{instance:{one:"server",other:"servers"}}},"riak.vm.memory.processes":{info:"Memory allocated & used by Erlang processes.",en:{instance:{one:"server",other:"servers"}}},"riak.kv.siblings_encountered.get":{info:"Number of siblings encountered during GET operations by this node during the past minute.",en:{instance:{one:"server",other:"servers"}}},"riak.kv.objsize.get":{info:"Object size encountered by this node during the past minute.",en:{instance:{one:"server",other:"servers"}}},"riak.search.vnodeq_size":{info:"Number of unprocessed messages in the vnode message queues of Search on this node in the past minute.",en:{instance:{one:"server",other:"servers"}}},"riak.search.index":{info:"Number of writes to Search failed due to bad data format by reason.",en:{instance:{one:"server",other:"servers"}}},"riak.core.protobuf_connections":{info:"Protocol buffer connections by status.",en:{instance:{one:"server",other:"servers"}}},"riak.core.repairs":{info:"Number of repair operations this node has coordinated.",en:{instance:{one:"server",other:"servers"}}},"riak.core.fsm_active":{info:"Active finite state machines by kind.",en:{instance:{one:"server",other:"servers"}}},"riak.core.fsm_rejected":{info:"Finite state machines being rejected by Sidejobs overload protection.",en:{instance:{one:"server",other:"servers"}}},"syscall.rw":{info:"R/Ws.",en:{instance:{one:"server",other:"servers"}}},"smb2.rw":{info:"R/Ws.",en:{instance:{one:"server",other:"servers"}}},"smb2.create_close":{info:"Create/Close.",en:{instance:{one:"server",other:"servers"}}},"smb2.get_set_info":{info:"Info.",en:{instance:{one:"server",other:"servers"}}},"smb2.find":{info:"Find.",en:{instance:{one:"server",other:"servers"}}},"smb2.notify":{info:"Notify.",en:{instance:{one:"server",other:"servers"}}},"smb2.sm_counters":{info:"Lesser Ops.",en:{instance:{one:"server",other:"servers"}}},"scaleio.system_capacity_total":{info:"Total Capacity.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_capacity_in_use":{info:"Capacity In Use.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_capacity_usage":{info:"Capacity Usage.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_capacity_available_volume_allocation":{info:"Available For Volume Allocation.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_capacity_health_state":{info:"Capacity Health State.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_workload_primary_bandwidth_total":{info:"Primary Backend Bandwidth Total (Read and Write).",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_workload_primary_bandwidth":{info:"Primary Backend Bandwidth.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_workload_primary_iops_total":{info:"Primary Backend IOPS Total (Read and Write).",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_workload_primary_iops":{info:"Primary Backend IOPS.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_workload_primary_io_size_total":{info:"Primary Backend I/O Size Total (Read and Write).",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_rebalance":{info:"Rebalance.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_rebalance_left":{info:"Rebalance Pending Capacity.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_rebalance_time_until_finish":{aggregationMethod:"min",info:"Rebalance Approximate Time Until Finish.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_rebuild":{info:"Rebuild Bandwidth Total (Forward, Backward and Normal).",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_rebuild_left":{info:"Rebuild Pending Capacity Total (Forward, Backward and Normal).",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_defined_components":{info:"Components.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_components_volumes_by_type":{info:"Volumes By Type.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.system_components_volumes_by_mapping":{info:"Volumes By Mapping.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_capacity_total":{info:"Total Capacity.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_capacity_in_use":{info:"Capacity In Use.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_capacity_usage":{info:"Capacity Usage.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_capacity_utilization":{aggregationMethod:"avg",info:"Capacity Utilization.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_capacity_available_volume_allocation":{info:"Available For Volume Allocation.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_capacity_health_state":{info:"Capacity Health State.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.storage_pool_components":{info:"Components.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.sdc_mdm_connection_state":{info:"MDM Connection State.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.sdc_bandwidth":{info:"Bandwidth.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.sdc_iops":{info:"IOPS.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.sdc_io_size":{info:"IOPS Size.",en:{instance:{one:"storage server",other:"storage servers"}}},"scaleio.sdc_num_of_mapped_volumed":{info:"Mapped Volumes.",en:{instance:{one:"storage server",other:"storage servers"}}},"mem.slabmemory":{info:"Memory Usage.",en:{instance:{one:"system",other:"systems"}}},"mem.slabfilling":{info:"Object Filling.",en:{instance:{one:"system",other:"systems"}}},"mem.slabwaste":{info:"Memory waste.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.read_error_rate":{info:"Read Error Rate.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.seek_error_rate":{info:"Seek Error Rate.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.soft_read_error_rate":{info:"Soft Read Error Rate.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.write_error_rate":{info:"Write Error Rate.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.read_total_err_corrected":{info:"Read Error Corrected.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.read_total_unc_errors":{info:"Read Error Uncorrected.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.write_total_err_corrected":{info:"Write Error Corrected.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.write_total_unc_errors":{info:"Write Error Uncorrected.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.verify_total_err_corrected":{info:"Verify Error Corrected.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.verify_total_unc_errors":{info:"Verify Error Uncorrected.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.sata_interface_downshift":{info:"SATA Interface Downshift.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.udma_crc_error_count":{info:"UDMA CRC Error Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.throughput_performance":{info:"Throughput Performance.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.seek_time_performance":{info:"Seek Time Performance.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.start_stop_count":{info:"Start/Stop Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.power_on_hours_count":{info:"Power-On Hours Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.power_cycle_count":{info:"Power Cycle Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.unexpected_power_loss":{info:"Unexpected Power Loss.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.spin_up_time":{aggregationMethod:"avg",info:"Spin-Up Time.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.spin_up_retries":{info:"Spin-up Retries.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.calibration_retries":{info:"Calibration Retries.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.airflow_temperature_celsius":{aggregationMethod:"avg",info:"Airflow Temperature Celsius.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.temperature_celsius":{aggregationMethod:"avg",info:"Temperature.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.reallocated_sectors_count":{info:"Reallocated Sectors Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.reserved_block_count":{aggregationMethod:"avg",info:"Reserved Block Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.program_fail_count":{info:"Program Fail Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.erase_fail_count":{info:"Erase Fail Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.wear_leveller_worst_case_erase_count":{info:"Wear Leveller Worst Case Erase Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.unused_reserved_nand_blocks":{info:"Unused Reserved NAND Blocks.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.reallocation_event_count":{info:"Reallocation Event Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.current_pending_sector_count":{info:"Current Pending Sector Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.offline_uncorrectable_sector_count":{info:"Offline Uncorrectable Sector Count.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.percent_lifetime_used":{aggregationMethod:"avg",info:"Percent Lifetime Used.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.media_wearout_indicator":{aggregationMethod:"avg",info:"Media Wearout Indicator.",en:{instance:{one:"system",other:"systems"}}},"smartd_log.nand_writes_1gib":{info:"NAND Writes.",en:{instance:{one:"system",other:"systems"}}},"solr.search_requests":{info:"Search Requests.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.search_errors":{info:"Search Errors.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.search_errors_by_type":{info:"Search Errors By Type.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.search_requests_processing_time":{aggregationMethod:"avg",info:"Search Requests Processing Time.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.search_requests_timings":{info:"Search Requests Timings.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.search_requests_processing_time_percentile":{aggregationMethod:"avg",info:"Search Requests Processing Time Percentile.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.update_requests":{info:"Update Requests.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.update_errors":{info:"Update Errors.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.update_errors_by_type":{info:"Update Errors By Type.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.update_requests_processing_time":{aggregationMethod:"avg",info:"Update Requests Processing Time.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.update_requests_timings":{info:"Update Requests Timings.",en:{instance:{one:"solr server",other:"solr server"}}},"solr.update_requests_processing_time_percentile":{aggregationMethod:"avg",info:"Update Requests Processing Time Percentile.",en:{instance:{one:"solr server",other:"solr server"}}},"spigotmc.mem":{info:"Minecraft Memory Usage.",en:{instance:{one:"spigot server",other:"spigot servers"}}},"springboot2.response_codes":{info:"Response Codes.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"springboot2.thread":{info:"Threads.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"springboot2.heap":{info:"Overview.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"springboot2.heap_eden":{info:"Eden Space.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"springboot2.heap_survivor":{info:"Survivor Space.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"springboot2.heap_old":{info:"Old Space.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"springboot2.uptime":{aggregationMethod:"min",info:"The uptime of the Java virtual machine.",en:{instance:{one:"sb2 server",other:"sb2 servers"}}},"squid.clients_net":{info:"Squid Client Bandwidth.",en:{instance:{one:"squid instance",other:"squid instances"}}},"squid.clients_requests":{info:"Squid Client Requests.",en:{instance:{one:"squid instance",other:"squid instances"}}},"squid.servers_net":{info:"Squid Server Bandwidth.",en:{instance:{one:"squid instance",other:"squid instances"}}},"squid.servers_requests":{info:"Squid Server Requests.",en:{instance:{one:"squid instance",other:"squid instances"}}},"supervisord.summary_processes":{info:"Processes.",en:{instance:{one:"client / server",other:"clients / servers"}}},"supervisord.processes":{info:"Processes.",en:{instance:{one:"process group",other:"process groups"}}},"supervisord.process_exit_status":{info:"Exit status.",en:{instance:{one:"process group",other:"process groups"}}},"supervisord.process_uptime":{aggregationMethod:"min",info:"Uptime.",en:{instance:{one:"process group",other:"process groups"}}},"supervisord.process_downtime":{info:"Downtime.",en:{instance:{one:"process group",other:"process groups"}}},"tengine.bandwidth_total":{info:"Bandwidth.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.connections_total":{info:"Connections.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.requests_total":{info:"Requests.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.requests_per_response_code_family_total":{info:"Requests Per Response Code Family.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.requests_per_response_code_detailed_total":{info:"Requests Per Response Code Detailed.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.requests_upstream_total":{info:"Number Of Requests Calling For Upstream.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.tries_upstream_total":{info:"Number Of Times Calling For Upstream.",en:{instance:{one:"web server",other:"web servers"}}},"tengine.requests_upstream_per_response_code_family_total":{info:"Upstream Requests Per Response Code Family.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.processing_time":{aggregationMethod:"avg",info:"processing time.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.jvm":{info:"JVM Memory Pool Usage.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.jvm_eden":{info:"Eden Memory Usage.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.jvm_survivor":{info:"Survivor Memory Usage.",en:{instance:{one:"web server",other:"web servers"}}},"tomcat.jvm_tenured":{info:"Tenured Memory Usage.",en:{instance:{one:"web server",other:"web servers"}}},"unbound.queries":{info:"Received Queries.",en:{instance:{one:"server",other:"servers"}}},"unbound.queries_ip_ratelimited":{info:"Rate Limited Queries.",en:{instance:{one:"server",other:"servers"}}},"unbound.dnscrypt_queries":{info:"DNSCrypt Queries.",en:{instance:{one:"server",other:"servers"}}},"unbound.cache":{info:"Cache Statistics.",en:{instance:{one:"server",other:"servers"}}},"unbound.cache_percentage":{aggregationMethod:"avg",info:"Cache Statistics Percentage.",en:{instance:{one:"server",other:"servers"}}},"unbound.prefetch":{info:"Cache Prefetches.",en:{instance:{one:"server",other:"servers"}}},"unbound.expired":{info:"Replies Served From Expired Cache.",en:{instance:{one:"server",other:"servers"}}},"unbound.zero_ttl_replies":{info:"Replies Served From Expired Cache.",en:{instance:{one:"server",other:"servers"}}},"unbound.recursive_replies":{info:"Replies That Needed Recursive Processing.",en:{instance:{one:"server",other:"servers"}}},"unbound.recursion_time":{aggregationMethod:"avg",info:"Time Spent On Recursive Processing.",en:{instance:{one:"server",other:"servers"}}},"unbound.request_list_usage":{info:"Request List Usage.",en:{instance:{one:"server",other:"servers"}}},"unbound.current_request_list_usage":{info:"Current Request List Usage.",en:{instance:{one:"server",other:"servers"}}},"unbound.request_list_jostle_list":{info:"Request List Jostle List Events.",en:{instance:{one:"server",other:"servers"}}},"unbound.tcpusage":{info:"TCP Handler Buffers.",en:{instance:{one:"server",other:"servers"}}},"unbound.uptime":{aggregationMethod:"min",info:"Uptime.",en:{instance:{one:"server",other:"servers"}}},"unbound.cache_memory":{info:"Cache Memory.",en:{instance:{one:"server",other:"servers"}}},"unbound.mod_memory":{info:"Module Memory.",en:{instance:{one:"server",other:"servers"}}},"unbound.mem_streamwait":{info:"TCP and TLS Stream Waif Buffer Memory.",en:{instance:{one:"server",other:"servers"}}},"unbound.cache_count":{info:"Cache Items Count.",en:{instance:{one:"server",other:"servers"}}},"unbound.type_queries":{info:"Queries By Type.",en:{instance:{one:"server",other:"servers"}}},"unbound.class_queries":{info:"Queries By Class.",en:{instance:{one:"server",other:"servers"}}},"unbound.opcode_queries":{info:"Queries By OpCode.",en:{instance:{one:"server",other:"servers"}}},"unbound.flag_queries":{info:"Queries By Flag.",en:{instance:{one:"server",other:"servers"}}},"unbound.rcode_answers":{info:"Replies By RCode.",en:{instance:{one:"server",other:"servers"}}},"unbound.thread_queries":{info:"Thread Received Queries.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_queries_ip_ratelimited":{info:"Thread Rate Limited Queries.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_dnscrypt_queries":{info:"Thread DNSCrypt Queries.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_cache":{info:"Cache Statistics.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_cache_percentage":{aggregationMethod:"avg",info:"Cache Statistics Percentage.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_prefetch":{info:"Cache Prefetches.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_expired":{info:"Replies Served From Expired Cache.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_zero_ttl_replies":{info:"Replies Served From Expired Cache.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_recursive_replies":{info:"Replies That Needed Recursive Processing.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_recursion_time":{aggregationMethod:"avg",info:"Time Spent On Recursive Processing.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_request_list_usage":{info:"Time Spent On Recursive Processing.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_current_request_list_usage":{info:"Current Request List Usage.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_request_list_jostle_list":{info:"Request List Jostle List Events.",en:{instance:{one:"thread",other:"threads"}}},"unbound.thread_tcpusage":{info:"TCP Handler Buffers.",en:{instance:{one:"thread",other:"threads"}}},"uwsgi.requests":{info:"Requests.",en:{instance:{one:"server",other:"servers"}}},"uwsgi.tx":{info:"Transmitted data.",en:{instance:{one:"server",other:"servers"}}},"uwsgi.avg_rt":{info:"Average request time.",en:{instance:{one:"server",other:"servers"}}},"uwsgi.memory_rss":{info:"RSS (Resident Set Size).",en:{instance:{one:"server",other:"servers"}}},"uwsgi.memory_vsz":{info:"VSZ (Virtual Memory Size).",en:{instance:{one:"server",other:"servers"}}},"uwsgi.exceptions":{info:"Exceptions.",en:{instance:{one:"server",other:"servers"}}},"uwsgi.harakiris":{info:"Harakiris.",en:{instance:{one:"server",other:"servers"}}},"uwsgi.respawns":{info:"Respawns.",en:{instance:{one:"server",other:"servers"}}},"varnish.session_connection":{info:"Connections Statistics.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.client_requests":{info:"Client Requests.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.all_time_hit_rate":{aggregationMethod:"avg",info:"All History Hit Rate Ratio.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.current_poll_hit_rate":{aggregationMethod:"avg",info:"Current Poll Hit Rate Ratio.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.cached_objects_expired":{info:"Expired Objects.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.cached_objects_nuked":{info:"Least Recently Used Nuked Objects.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.threads_total":{info:"Number Of Threads In All Pools.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.threads_statistics":{info:"Threads Statistics.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.threads_queue_len":{info:"Current Queue Length.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.backend_connections":{info:"Backend Connections Statistics.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.backend_requests":{info:"Requests To The Backend.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.esi_statistics":{info:"ESI Statistics.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.memory_usage":{info:"Memory Usage.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.uptime":{aggregationMethod:"min",info:"Uptime.",en:{instance:{one:"accelerator",other:"accelerators"}}},"varnish.backend":{info:"Backend {backend_name}.",en:{instance:{one:"backend",other:"backends"}}},"varnish.storage_usage":{info:"Storage {storage_name} Usage.",en:{instance:{one:"storage",other:"storages"}}},"varnish.storage_alloc_objs":{info:"Storage {storage_name} Allocated Objects.",en:{instance:{one:"storage",other:"storages"}}},"vernemq.socket_operations":{info:"Socket Open and Close Events.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.client_keepalive_expired":{info:"Closed Sockets due to Keepalive Time Expired.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.socket_close_timeout":{info:"Closed Sockets due to no CONNECT Frame On Time.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.socket_errors":{info:"Socket Errors.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.queue_processes_operations":{info:"Queue Processes Setup and Teardown Events.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.queue_process_init_from_storage":{info:"Queue Processes Initialized from Offline Storage.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.queue_undelivered_messages":{info:"Undelivered PUBLISH Messages.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.router_subscriptions":{info:"Subscriptions in the Routing Table.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.router_matched_subscriptions":{info:"Matched Subscriptions.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.router_memory":{info:"Routing Table Memory Usage.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_utilization_scheduler":{aggregationMethod:"avg",info:"Scheduler Utilization.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_processes":{info:"Erlang Processes.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_reductions":{info:"Reductions.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_context_switches":{info:"Context Switches.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_io":{info:"Received and Sent Traffic through Ports.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_run_queue":{info:"Processes that are Ready to Run on All Run-Queues.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_gc_count":{info:"GC Count.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_gc_words_reclaimed":{info:"GC Words Reclaimed.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.system_allocated_memory":{info:"Memory Allocated by the Erlang Processes and by the Emulator.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.bandwidth":{info:"Bandwidth.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.retain_messages":{info:"Stored Retained Messages.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.retain_memory":{info:"Stored Retained Messages Memory Usage.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.cluster_bandwidth":{info:"Communication with Other Cluster Nodes.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.cluster_dropped":{info:"Traffic Dropped During Communication with Other Cluster Nodes.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.netsplit_unresolved":{info:"Unresolved Netsplits.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.netsplits":{info:"Netsplits.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_auth":{info:"v5 AUTH.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_auth_received_reason":{info:"v5 AUTH Received by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_auth_sent_reason":{info:"v5 AUTH Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_connect":{info:"v3/v5 CONNECT and CONNACK.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_connack_sent_reason":{info:"v3/v5 CONNACK Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_disconnect":{info:"v3/v5 DISCONNECT.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_disconnect_received_reason":{info:"v5 DISCONNECT Received by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_disconnect_sent_reason":{info:"v5 DISCONNECT Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_subscribe":{info:"v3/v5 SUBSCRIBE and SUBACK.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_subscribe_error":{info:"v3/v5 Failed SUBSCRIBE Operations due to a Netsplit.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_subscribe_auth_error":{info:"v3/v5 Unauthorized SUBSCRIBE Attempts.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_puback_received_reason":{info:"v5 PUBACK QoS 1 Received by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_puback_sent_reason":{info:"v5 PUBACK QoS 1 Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_puback_invalid_error":{info:"v3/v5 PUBACK QoS 1 Received Unexpected Messages.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrec":{info:"v3/v5 PUBREC QoS 2.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrec_received_reason":{info:"v5 PUBREC QoS 2 Received by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrec_sent_reason":{info:"v5 PUBREC QoS 2 Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrec_invalid_error":{info:"v3 PUBREC QoS 2 Received Unexpected Messages.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrel":{info:"v3/v5 PUBREL QoS 2.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrel_received_reason":{info:"v5 PUBREL QoS 2 Received by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubrel_sent_reason":{info:"v5 PUBREL QoS 2 Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubcom":{info:"v3/v5 PUBCOMP QoS 2.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubcomp_received_reason":{info:"v5 PUBCOMP QoS 2 Received by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubcomp_sent_reason":{info:"v5 PUBCOMP QoS 2 Sent by Reason.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.mqtt_pubcomp_invalid_error":{info:"v3/v5 PUBCOMP QoS 2 Received Unexpected Messages.",en:{instance:{one:"broker",other:"brokers"}}},"vernemq.node_uptime":{aggregationMethod:"min",info:"Node Uptime.",en:{instance:{one:"broker",other:"brokers"}}},"web_log.requests":{mainheads:[{groupBy:["selected"],chartLibrary:"easypiechart",title:"Total Requests",colors:s.default[12],layout:{left:0,top:0,width:3,height:5}}],info:"Total Requests.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.excluded_requests":{info:"Excluded Requests.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.status_code_class_responses":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Responses by Status Code Class",layout:{left:9,top:0,width:3,height:5}}],info:"Responses By Status Code Class.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.status_code_class_1xx_responses":{info:"Informational Responses By Status Code.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.status_code_class_2xx_responses":{info:"Successful Responses By Status Code.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.status_code_class_3xx_responses":{info:"Redirects Responses By Status Code.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.status_code_class_4xx_responses":{info:"Client Errors Responses By Status Code.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.status_code_class_5xx_responses":{info:"Server Errors Responses By Status Code.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.bandwidth":{info:"Bandwidth.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.requests_processing_time_histogram":{info:"Requests Processing Time Histogram.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.upstream_response_time":{aggregationMethod:"avg",info:"Upstream Response Time.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.upstream_responses_time_histogram":{info:"Upstream Responses Time Histogram.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.current_poll_uniq_clients":{info:"Current Poll Unique Clients.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.vhost_requests":{info:"Requests By Vhost.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.port_requests":{info:"Requests By Port.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.scheme_requests":{info:"Requests By Scheme.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.http_method_requests":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Total Requests by HTTP Method",layout:{left:6,top:0,width:3,height:5}}],info:"Requests By HTTP Method.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.http_version_requests":{info:"Requests By HTTP Version.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.ip_proto_requests":{info:"Requests By IP Protocol.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.ssl_proto_requests":{info:"Requests By SSL Connection Protocol.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.ssl_cipher_suite_requests":{info:"Requests By SSL Connection Cipher Suite.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.url_pattern_requests":{info:"URL Field Requests By Pattern.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.custom_field_pattern_requests":{info:"Custom Field Requests By Pattern.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.custom_time_field_summary":{info:"Custom Time Field Summary.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.custom_time_field_histogram":{info:"Custom Time Field Histogram.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.url_pattern_status_code_responses":{info:"Responses By Status Code.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.url_pattern_http_method_requests":{info:"Requests By HTTP Method.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.url_pattern_bandwidth":{info:"Bandwidth.",en:{instance:{one:"web server",other:"web servers"}}},"web_log.url_pattern_request_processing_time":{aggregationMethod:"avg",info:"Request Processing Time.",en:{instance:{one:"web server",other:"web servers"}}},"whoisquery.time_until_expiration":{info:"Time Until Domain Expiration.",en:{instance:{one:"cpu core",other:"cpu cores"}}},"windows.cpu_core_utilization":{aggregationMethod:"avg",info:"Core CPU Utilization.",en:{instance:{one:"cpu core",other:"cpu cores"}}},"windows.cpu_core_interrupts":{info:"Received and Serviced Hardware Interrupts.",en:{instance:{one:"cpu core",other:"cpu cores"}}},"windows.cpu_core_dpcs":{info:"Received and Serviced Deferred Procedure Calls (DPC).",en:{instance:{one:"cpu core",other:"cpu cores"}}},"windows.cpu_core_cstate":{aggregationMethod:"avg",info:"Core Time Spent in Low-Power Idle State.",en:{instance:{one:"cpu core",other:"cpu cores"}}},"windows.memory_page_faults":{info:"Memory Page Faults.",en:{instance:{one:"system",other:"systems"}}},"windows.memory_swap_utilization":{aggregationMethod:"avg",info:"Swap Utilization.",en:{instance:{one:"system",other:"systems"}}},"windows.memory_swap_operations":{info:"Swap Operations.",en:{instance:{one:"system",other:"systems"}}},"windows.memory_swap_pages":{info:"Swap Pages.",en:{instance:{one:"system",other:"systems"}}},"windows.memory_cached":{info:"Cached.",en:{instance:{one:"system",other:"systems"}}},"windows.memory_cache_faults":{info:"Cache Faults.",en:{instance:{one:"system",other:"systems"}}},"windows.memory_system_pool":{info:"System Memory Pool.",en:{instance:{one:"system",other:"systems"}}},"windows.logical_disk_utilization":{aggregationMethod:"avg",info:"Space usage.",en:{instance:{one:"disk",other:"disks"}}},"windows.logical_disk_operations":{info:"Operations.",en:{instance:{one:"disk",other:"disks"}}},"windows.logical_disk_latency":{aggregationMethod:"avg",info:"Average Read/Write Latency.",en:{instance:{one:"disk",other:"disks"}}},"windows.net_nic_packets":{info:"Packets.",en:{instance:{one:"interface",other:"interfaces"}}},"windows.net_nic_errors":{info:"Errors.",en:{instance:{one:"interface",other:"interfaces"}}},"windows.net_nic_discarded":{info:"Discards.",en:{instance:{one:"interface",other:"interfaces"}}},"windows.os_processes":{info:"Processes.",en:{instance:{one:"system",other:"systems"}}},"windows.os_users":{info:"Number of Users.",en:{instance:{one:"system",other:"systems"}}},"windows.os_visible_memory_usage":{info:"Visible Memory Usage.",en:{instance:{one:"system",other:"systems"}}},"windows.os_paging_files_usage":{info:"Paging Files Usage.",en:{instance:{one:"system",other:"systems"}}},"windows.system_threads":{info:"Threads.",en:{instance:{one:"system",other:"systems"}}},"windows.system_uptime":{aggregationMethod:"min",info:"Uptime.",en:{instance:{one:"system",other:"systems"}}},"windows.logon_type_sessions":{info:"Active User Logon Sessions By Type.",en:{instance:{one:"system",other:"systems"}}},"windows.thermalzone_temperature":{aggregationMethod:"avg",info:"Thermal zone temperature.",en:{instance:{one:"zone",other:"zones"}}},"windows.processes_page_file_bytes":{info:"Bytes used in page file(s).",en:{instance:{one:"system",other:"systems"}}},"windows.service_state":{info:"Service state.",en:{instance:{one:"service",other:"services"}}},"windows.service_status":{info:"Service status.",en:{instance:{one:"service",other:"services"}}},"iis.website_users_count":{info:"Website users with pending requests.",en:{instance:{one:"website",other:"websites"}}},"iis.website_connection_attempts_rate":{info:"Website connections attempts.",en:{instance:{one:"website",other:"websites"}}},"iis.website_isapi_extension_requests_rate":{info:"Website extensions request.",en:{instance:{one:"website",other:"websites"}}},"iis.website_ftp_file_transfer_rate":{info:"Website FTP file transfer rate.",en:{instance:{one:"website",other:"websites"}}},"iis.website_logon_attempts_rate":{info:"Website logon attempts.",en:{instance:{one:"website",other:"websites"}}},"mssql.instance_bufman_iops":{info:"Number of pages input and output.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_blocked_processes":{info:"Blocked processes.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_locks_lock_wait":{info:"Lock requests that required the caller to wait.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_locks_deadlocks":{info:"Lock requests that resulted in deadlock.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_memmgr_connection_memory_bytes":{info:"Amount of dynamic memory to maintain connections.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_memmgr_pending_memory_grants":{info:"Process waiting for memory grant.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_memmgr_server_memory":{info:"Memory committed.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.instance_sqlstats_sql_recompilations":{info:"SQL re-compilations.",en:{instance:{one:"mssql server",other:"mssql servers"}}},"mssql.database_active_transactions":{info:"Active transactions per database.",en:{instance:{one:"database",other:"databases"}}},"mssql.database_backup_restore_operations":{info:"Backup IO per database.",en:{instance:{one:"database",other:"databases"}}},"mssql.database_log_flushed":{info:"Log flushed.",en:{instance:{one:"database",other:"databases"}}},"mssql.database_log_flushes":{info:"Log flushes.",en:{instance:{one:"database",other:"databases"}}},"mssql.database_write_transactions":{info:"Write transactions.",en:{instance:{one:"database",other:"databases"}}},"ad.database_operations":{info:"AD database operations.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.directory_operations":{info:"AD directory operations.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.name_cache_lookups":{info:"Name cache lookups.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.name_cache_hits":{info:"Name cache hits.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.atq_average_request_latency":{aggregationMethod:"avg",info:"Average request processing time.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.atq_outstanding_requests":{info:"Outstanding requests.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.dra_replication_sync_objects_remaining":{info:"DRA replication full sync objects remaining.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.dra_replication_properties_filtered":{info:"DRA replication properties filtered.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.ds_threads":{info:"Directory Service threads.",en:{instance:{one:"ad instance",other:"ad instances"}}},"ad.ldap_last_bind_time":{aggregationMethod:"min",info:"LDAP last successful bind time.",en:{instance:{one:"ad instance",other:"ad instances"}}},"adcs.cert_template_requests":{info:"Certificate requests processed.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_failed_requests":{info:"Certificate failed requests processed.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_issued_requests":{info:"Certificate issued requests processed.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_pending_requests":{info:"Certificate pending requests processed.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_request_processing_time":{aggregationMethod:"avg",info:"Certificate last request processing time.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_retrievals":{info:"Total of certificate retrievals.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_retrieval_processing_time":{aggregationMethod:"avg",info:"Certificate last retrieval processing time.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_request_cryptographic_signing_time":{aggregationMethod:"avg",info:"Certificate last signing operation request time.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_request_policy_module_processing":{info:"Certificate last policy module processing request time.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_challenge_responses":{info:"Certificate challenge responses.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_challenge_response_processing_time":{aggregationMethod:"avg",info:"Certificate last challenge response time.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_signed_certificate_timestamp_lists":{info:"Certificate Signed Certificate Timestamp Lists processed.",en:{instance:{one:"cert template",other:"cert templates"}}},"adcs.cert_template_signed_certificate_timestamp_list_processing_time":{aggregationMethod:"avg",info:"Certificate last Signed Certificate Timestamp List process time.",en:{instance:{one:"cert template",other:"cert templates"}}},"adfs.ad_login_connection_failures":{info:"Connection failures.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.certificate_authentications":{info:"User Certificate authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.db_artifact_failures":{info:"Connection failures to the artifact database.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.db_artifact_query_time_seconds":{aggregationMethod:"avg",info:"Time taken for an artifact database query.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.db_config_failures":{info:"Connection failures to the configuration database.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.db_config_query_time_seconds":{aggregationMethod:"avg",info:"Time taken for a configuration database query.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.device_authentications":{info:"Device authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.external_authentications":{info:"Authentications from external MFA providers.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.federated_authentications":{info:"Authentications from Federated Sources.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.federation_metadata_requests":{info:"Federation Metadata requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_authorization_requests":{info:"Incoming requests to the OAuth Authorization endpoint.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_client_authentications":{info:"OAuth client authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_client_credentials_requests":{info:"OAuth client credentials requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_client_privkey_jwt_authentications":{info:"OAuth client private key JWT authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_client_secret_basic_authentications":{info:"OAuth client secret basic authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_client_secret_post_authentications":{info:"OAuth client secret post authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_client_windows_authentications":{info:"OAuth client windows integrated authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_logon_certificate_requests":{info:"OAuth logon certificate requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_password_grant_requests":{info:"OAuth password grant requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.oauth_token_requests_success":{info:"Successful RP token requests over OAuth protocol.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.passive_requests":{info:"Passive requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.passport_authentications":{info:"Microsoft Passport SSO authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.password_change_requests":{info:"Password change requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.samlp_token_requests_success":{info:"Successful RP token requests over SAML-P protocol.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.sso_authentications":{info:"SSO authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.token_requests":{info:"Token access requests.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.userpassword_authentications":{info:"AD U/P authentications.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.windows_integrated_authentications":{info:"Windows integrated authentications using Kerberos or NTLM.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.wsfed_token_requests_success":{info:"Successful RP token requests over WS-Fed protocol.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"adfs.wstrust_token_requests_success":{info:"Successful RP token requests over WS-Trust protocol.",en:{instance:{one:"adfs instance",other:"adfs instances"}}},"netframework.clrexception_throw_to_catch_depth":{info:"Traversed stack frames.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrinterop_interop_marshallings":{info:"Arguments and return values marshallings.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrjit_il_bytes":{info:"Compiled Microsoft intermediate language (MSIL) bytes.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrloading_appdomains_loaded":{info:"Loaded application domains.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrloading_appdomains_unloaded":{info:"Unloaded application domains.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrloading_classes_loaded":{info:"Loaded classes in all assemblies.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrloading_class_load_failures":{info:"Class load failures.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrlocksandthreads_queue_length":{info:"Threads waited to acquire a managed lock.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrlocksandthreads_current_logical_threads":{info:"Logical threads.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrlocksandthreads_current_physical_threads":{info:"Physical threads.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrlocksandthreads_contentions":{info:"Fails to acquire a managed lock.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrmemory_allocated_bytes":{info:"Memory allocated on the garbage collection heap.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrmemory_finalization_survivors":{info:"Objects that survived garbage-collection.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrmemory_collections":{info:"Garbage collections.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrmemory_number_pinned_objects":{info:"Pinned objects encountered.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrremoting_channels":{info:"Registered channels.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrremoting_context_bound_classes_loaded":{info:"Loaded context-bound classes.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrremoting_context_bound_objects":{info:"Allocated context-bound objects.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrremoting_context_proxies":{info:"Remoting proxy objects.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrremoting_contexts":{info:"Total of remoting contexts.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrremoting_remote_calls":{info:"Remote Procedure Calls (RPC) invoked.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrsecurity_link_time_checks":{info:"Link-time code access security checks.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrsecurity_checks_time":{aggregationMethod:"avg",info:"Time spent performing runtime code access security checks.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrsecurity_stack_walk_depth":{info:"Depth of the stack.",en:{instance:{one:".net process",other:".net processes"}}},"netframework.clrsecurity_runtime_checks":{info:"Runtime code access security checks performed.",en:{instance:{one:".net process",other:".net processes"}}},"exchange.activesync_ping_cmds_pending":{info:"Ping commands pending in queue.",en:{instance:{one:"host",other:"hosts"}}},"exchange.activesync_requests":{info:"HTTP requests received from ASP.NET.",en:{instance:{one:"host",other:"hosts"}}},"exchange.activesync_sync_cmds":{info:"Sync commands processed.",en:{instance:{one:"host",other:"hosts"}}},"exchange.autodiscover_requests":{info:"Autodiscover service requests processed.",en:{instance:{one:"host",other:"hosts"}}},"exchange.avail_service_requests":{info:"Requests serviced.",en:{instance:{one:"host",other:"hosts"}}},"exchange.owa_current_unique_users":{mainheads:[{groupBy:["instance"],chartLibrary:"easypiechart",title:"OWA Unique Users",colors:s.default[12],layout:{left:0,top:0,width:2,height:5}}],info:"Unique users currently logged on to Outlook Web App.",en:{instance:{one:"host",other:"hosts"}}},"exchange.owa_requests_total":{mainheads:[{groupBy:["instance"],chartLibrary:"easypiechart",title:"OWA Total Requests",layout:{left:3,top:0,width:2,height:5}}],info:"Requests handled by Outlook Web App.",en:{instance:{one:"host",other:"hosts"}}},"exchange.rpc_active_user_count":{info:"Active unique users in the last 2 minutes.",en:{instance:{one:"host",other:"hosts"}}},"exchange.rpc_avg_latency":{aggregationMethod:"avg",mainheads:[{groupBy:["instance"],aggregationMethod:"avg",chartLibrary:"easypiechart",title:"Average Latency",colors:s.default[1],layout:{left:12,top:0,width:2,height:5}}],info:"Average latency.",en:{instance:{one:"host",other:"hosts"}}},"exchange.rpc_connection_count":{mainheads:[{groupBy:["instance"],chartLibrary:"easypiechart",title:"Total Client Connections",colors:s.default[2],layout:{left:15,top:0,width:2,height:5}}],info:"Client connections.",en:{instance:{one:"host",other:"hosts"}}},"exchange.rpc_operations":{info:"RPC operations.",en:{instance:{one:"host",other:"hosts"}}},"exchange.rpc_requests":{info:"Clients requests currently being processed.",en:{instance:{one:"host",other:"hosts"}}},"exchange.rpc_user_count":{info:"RPC users.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_active_mail_box_delivery":{mainheads:[{chartLibrary:"bars",dimensionsSort:"valueDesc",title:"Active Mailbox Delivery Queue",layout:{left:9,top:0,width:4,height:5}}],info:"Active Mailbox Delivery Queue length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_external_active_remote_delivery":{info:"External Active Remote Delivery Queue length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_external_largest_delivery":{info:"External Largest Delivery Queue length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_internal_active_remote_delivery":{info:"Internal Active Remote Delivery Queue length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_internal_largest_delivery":{info:"Internal Largest Delivery Queue length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_retry_mailbox_delivery":{info:"Internal Active Remote Delivery Queue length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.transport_queues_poison":{info:"Poison Queue Length.",en:{instance:{one:"host",other:"hosts"}}},"exchange.workload_active_tasks":{info:"Workload active tasks.",en:{instance:{one:"workload",other:"workloads"}}},"exchange.workload_completed_tasks":{info:"Workload completed tasks.",en:{instance:{one:"workload",other:"workloads"}}},"exchange.workload_queued_tasks":{info:"Workload queued tasks.",en:{instance:{one:"workload",other:"workloads"}}},"exchange.workload_yielded_tasks":{info:"Workload yielded tasks.",en:{instance:{one:"workload",other:"workloads"}}},"exchange.workload_activity_status":{info:"Workload activity status.",en:{instance:{one:"workload",other:"workloads"}}},"exchange.ldap_long_running_ops_per_sec":{info:"Long Running LDAP operations.",en:{instance:{one:"ldap process",other:"ldap processes"}}},"exchange.ldap_read_time":{aggregationMethod:"avg",info:"Time to send an LDAP read request and receive a response.",en:{instance:{one:"ldap process",other:"ldap processes"}}},"exchange.ldap_search_time":{aggregationMethod:"avg",info:"Time to send an LDAP search request and receive a response.",en:{instance:{one:"ldap process",other:"ldap processes"}}},"exchange.ldap_write_time":{aggregationMethod:"avg",info:"Time to send an LDAP search request and receive a response.",en:{instance:{one:"ldap process",other:"ldap processes"}}},"exchange.ldap_timeout_errors":{info:"LDAP timeout errors.",en:{instance:{one:"ldap process",other:"ldap processes"}}},"exchange.http_proxy_avg_auth_latency":{aggregationMethod:"avg",info:"Average time spent authenticating CAS.",en:{instance:{one:"proxy",other:"proxies"}}},"exchange.http_proxy_avg_cas_processing_latency_sec":{aggregationMethod:"avg",info:"Average time spent authenticating CAS.",en:{instance:{one:"proxy",other:"proxies"}}},"exchange.http_proxy_mailbox_proxy_failure_rate":{aggregationMethod:"avg",info:"Percentage of failures between this CAS and MBX servers.",en:{instance:{one:"proxy",other:"proxies"}}},"exchange.http_proxy_mailbox_server_locator_avg_latency_sec":{aggregationMethod:"avg",info:"Average latency of MailboxServerLocator web service calls.",en:{instance:{one:"proxy",other:"proxies"}}},"exchange.http_proxy_outstanding_proxy_requests":{info:"Concurrent outstanding proxy requests.",en:{instance:{one:"proxy",other:"proxies"}}},"exchange.http_proxy_requests":{info:"Number of proxy requests processed each second.",en:{instance:{one:"proxy",other:"proxies"}}},"wireguard.device_network_io":{info:"Device traffic.",en:{instance:{one:"device",other:"devices"}}},"wireguard.device_peers":{info:"Device peers.",en:{instance:{one:"device",other:"devices"}}},"wireguard.peer_network_io":{info:"Peer traffic.",en:{instance:{one:"peer",other:"peers"}}},"wireguard.peer_latest_handshake_ago":{info:"Peer time elapsed since the latest handshake.",en:{instance:{one:"peer",other:"peers"}}},"x509check.time_until_expiration":{info:"Time Until Certificate Expiration.",en:{instance:{one:"certificate",other:"certificates"}},groupBy:["label"],groupByLabel:["source"]},"x509check.revocation_status":{info:"Revocation Status.",en:{instance:{one:"certificate",other:"certificates"}},groupBy:["label"],groupByLabel:["source"]},"xenstat.mem":{info:"Memory Usage.",en:{instance:{one:"xenstat instance",other:"xenstat instances"}}},"xenstat.domains":{info:"Number of Domains.",en:{instance:{one:"xenstat instance",other:"xenstat instances"}}},"xenstat.cpus":{info:"Number of CPUs.",en:{instance:{one:"xenstat instance",other:"xenstat instances"}}},"xenstat.cpu_freq":{info:"CPU Frequency.",en:{instance:{one:"xenstat instance",other:"xenstat instances"}}},"xendomain.states":{info:"Domain States.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.cpu":{aggregationMethod:"avg",info:"CPU Usage (100% = 1 core).",en:{instance:{one:"domain",other:"domains"}}},"xendomain.mem":{info:"Memory Reservation.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.vcpu":{aggregationMethod:"avg",info:"CPU Usage per VCPU.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.oo_req_vbd":{info:"VBD{%u} Out Of Requests.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.requests_vbd":{info:"VBD{%u} Requests.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.sectors_vbd":{info:"VBD{%u} Read/Written Sectors.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.bytes_network":{info:"Network{%u} Received/Sent Bytes.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.packets_network":{info:"Network{%u} Received/Sent Packets.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.errors_network":{info:"Network{%u} Receive/Transmit Errors.",en:{instance:{one:"domain",other:"domains"}}},"xendomain.drops_network":{info:"Network{%u} Receive/Transmit Drops.",en:{instance:{one:"domain",other:"domains"}}},"zookeeper.requests":{info:"Outstanding Requests.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.requests_latency":{aggregationMethod:"avg",info:"Requests Latency.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.connections":{info:"Alive Connections.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.packets":{info:"Packets.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.file_descriptor":{info:"Open File Descriptors.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.nodes":{info:"Number of Nodes.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.watches":{info:"Number of Watches.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zookeeper.approximate_data_size":{info:"Approximate Data Tree Size.",en:{instance:{one:"zk instance",other:"zk instances"}}},"zscores.z":{info:"Z Score.",en:{instance:{one:"chart",other:"charts"}}},"zscores.3stddev":{info:"Z Score >3.",en:{instance:{one:"chart",other:"charts"}}},"smartctl.device_smart_status":{groupBy:["dimension"],groupByLabel:[]},"netdata.dbengine_tier_retention":{aggregationMethod:"max",groupBy:["dimension","label"],groupByLabel:["tier"],en:{instance:{one:"tier",other:"tiers"}}}},He=[[/smartctl.*/,{groupBy:["node","label"],groupByLabel:["device_name"],en:{instance:{one:"device",other:"devices"}}}],[/clickhouse.*/,{en:{instance:{one:"db server",other:"db servers"}}}]],Ve=e=>"string"===typeof e?He.reduce(((t,n)=>{let[s,a]=n;return s.test(e)?{...a,...t}:t}),{...Oe[e]}):Oe[e],Qe=Oe},92230:(e,t,n)=>{n.d(t,{A:()=>i});var s=n(58168),a=n(96540),o=n(83199),r=n(8320);const i=(0,a.forwardRef)(((e,t)=>{let{children:n,onClick:i,...c}=e;const l=(0,r.UH)(),d=(0,a.useCallback)((e=>{const{hash:t=""}=e.target;t.startsWith("#menu")&&(e.preventDefault(),l.goToLink(t.substr(1))),i&&i(e)}),[l]);return"string"===typeof n?a.createElement(o.TextSmall,(0,s.A)({color:"textDescription",dangerouslySetInnerHTML:{__html:n},onClick:d},c,{ref:t})):n||null}))},45387:(e,t,n)=>{n.d(t,{X_:()=>Y,Ay:()=>re,_3:()=>ae,ro:()=>$,yn:()=>ee,e4:()=>J,Wr:()=>ne,KG:()=>te});var s=n(86443),a=(n(25440),n(79304)),o=n(4967),r=n(18595),i=n(36697),c=n(485),l=n(78613),d=n(64850),h=n(66248),u=n(13765),p=n(35532),m=n(22294),g=n(76229),f=n(38055),b=n(54399),y=n(78536),v=n(93847),_=n(93360),w=n(25436),k=n(22017),T=n(35074),S=n(54416),M=n(55345),x=n(13808),C=n(37048),P=n(900),B=n(59582),q=n(42469),I=n(82367),L=n(1705),A=n(1871),E=n(46943),D=n(80058),N=n(55573),R=n(62672),F=n(45386),U=n(49205),z=n(66600),O=n(39281),H=n(12333),V=n(84994),Q=n(83697),j=n(75904),G=n(54264),W=n(27064);const K={system:{title:"System Overview",icon:n(7521).G0,info:"Overview of the key system metrics."},services:{title:"systemd Services",icon:g.Ub,info:"Resources utilization of systemd services. Netdata monitors all systemd services via cgroups (the resources accounting used by containers).
    Tip:
    • Default view of cgroup charts show aggregate information from all your VMs and containers
    • For instance level view of cgroups change the Group by to instance
    • Checkout our docs for more details"},ap:{title:"Access Points",icon:G.Bw,info:"Performance metrics for the access points (i.e. wireless interfaces in AP mode) found on the system."},tc:{title:"Quality of Service",icon:W.Bw,info:'Netdata collects and visualizes tc class utilization using its tc-helper plugin. If you also use FireQOS for setting up QoS, netdata automatically collects interface and class names. If your QoS configuration includes overheads calculation, the values shown here will include these overheads (the total bandwidth for the same interface as reported in the Network Interfaces section, will be lower than the total bandwidth reported here). QoS data collection may have a slight time difference compared to the interface (QoS data collection uses a BASH script, so a shift in data collection of a few milliseconds should be justified).'},net:{title:"Network Interfaces",icon:F.FF,info:'

    Performance metrics for network interfaces.

    Netdata retrieves this data reading the /proc/net/dev file and /sys/class/net/ directory.

    '},Infiniband:{title:"Infiniband ports",icon:F.FF,info:'

    Performance and exception statistics for Infiniband ports. The individual port and hardware counter descriptions can be found in the Mellanox knowledge base.'},wireless:{title:"Wireless Interfaces",icon:G.Bw,info:"Performance metrics for wireless interfaces."},ip:{title:"Networking Stack",icon:j.jB,info:e=>{let{os:t}=e;return"linux"===t?"Metrics for the networking stack of the system. These metrics are collected from /proc/net/netstat or attaching kprobes to kernel functions, apply to both IPv4 and IPv6 traffic and are related to operation of the kernel networking stack.":"Metrics for the networking stack of the system."}},ipv4:{title:"IPv4 Networking",icon:j.jB,info:'Metrics for the IPv4 stack of the system. Internet Protocol version 4 (IPv4) is the fourth version of the Internet Protocol (IP). It is one of the core protocols of standards-based internetworking methods in the Internet. IPv4 is a connectionless protocol for use on packet-switched networks. It operates on a best effort delivery model, in that it does not guarantee delivery, nor does it assure proper sequencing or avoidance of duplicate delivery. These aspects, including data integrity, are addressed by an upper layer transport protocol, such as the Transmission Control Protocol (TCP).'},ipv6:{title:"IPv6 Networking",icon:j.jB,info:'Metrics for the IPv6 stack of the system. Internet Protocol version 6 (IPv6) is the most recent version of the Internet Protocol (IP), the communications protocol that provides an identification and location system for computers on networks and routes traffic across the Internet. IPv6 was developed by the Internet Engineering Task Force (IETF) to deal with the long-anticipated problem of IPv4 address exhaustion. IPv6 is intended to replace IPv4.'},sctp:{title:"SCTP Networking",icon:j.jB,info:'

    Stream Control Transmission Protocol (SCTP) is a computer network protocol which operates at the transport layer and serves a role similar to the popular protocols TCP and UDP. SCTP provides some of the features of both UDP and TCP: it is message-oriented like UDP and ensures reliable, in-sequence transport of messages with congestion control like TCP. It differs from those protocols by providing multi-homing and redundant paths to increase resilience and reliability.

    Netdata collects SCTP metrics reading the /proc/net/sctp/snmp file.

    '},ipvs:{title:"IP Virtual Server",icon:"serviceIPVS",info:'

    IPVS (IP Virtual Server) implements transport-layer load balancing inside the Linux kernel, so called Layer-4 switching. IPVS running on a host acts as a load balancer at the front of a cluster of real servers, it can direct requests for TCP/UDP based services to the real servers, and makes services of the real servers to appear as a virtual service on a single IP address.

    Netdata collects summary statistics, reading /proc/net/ip_vs_stats. To display the statistics information of services and their servers, run ipvsadm -Ln --stats or ipvsadm -Ln --rate for the rate statistics. For details, see ipvsadm(8).

    '},netfilter:{title:"Firewall (netfilter)",icon:Q.im,info:"Performance metrics of the netfilter components."},ipfw:{title:"Firewall (ipfw)",icon:Q.im,info:"Counters and memory usage for the ipfw rules."},cpu:{title:"CPUs",icon:V.zm,info:'Detailed information for each CPU of the system. A summary of the system for all CPUs can be found at the System Overview section.'},mem:{title:"Memory",icon:I.YS,info:"Detailed information about the memory management of the system."},disk:{title:"Disks",icon:l.MB,info:"Charts with performance information for all the system disks. Special care has been given to present disk performance metrics in a way compatible with iostat -x. netdata by default prevents rendering performance charts for individual partitions and unmounted virtual disks. Disabled charts can still be enabled by configuring the relative settings in the netdata configuration file."},mount:{title:"Mount Points",icon:l.MB,info:""},adaptecraid:{title:"Adaptec RAID",icon:l.MB,info:"Monitors the health of Adaptec Hardware RAID by tracking the status of logical and physical devices in your storage system."},storcli:{title:"StorCLI RAID",icon:l.MB,info:"Monitors the health of Hardware RAID by tracking the status of RAID controllers, physical drives, and backup batteries in your storage system."},megacli:{title:"MegaCLI MegaRAID",icon:l.MB,info:"Monitors the health of MegaCLI Hardware RAID by tracking the status of RAID adapters, physical drives, and backup batteries in your storage system."},hpssa:{title:"HPE Smart Array",icon:l.MB,info:"Monitors the health of HPE Smart Arrays by tracking the status of controllers, arrays, logical and physical drives in your storage system."},mdstat:{title:"MD arrays",icon:l.MB,info:'

    RAID devices are virtual devices created from two or more real block devices. Linux Software RAID devices are implemented through the md (Multiple Devices) device driver.

    Netdata monitors the current status of MD arrays reading /proc/mdstat and /sys/block/%s/md/mismatch_cnt files.

    '},sensors:{title:"Sensors",icon:H.YH,info:"Readings of the configured system sensors."},ipmi:{title:"IPMI",icon:H.YH,info:"The Intelligent Platform Management Interface (IPMI) is a set of computer interface specifications for an autonomous computer subsystem that provides management and monitoring capabilities independently of the host system's CPU, firmware (BIOS or UEFI) and operating system."},amdgpu:{title:"AMD GPUs",icon:I.YS,info:"Performance and usage metrics for each AMD GPU in the system."},samba:{title:"Samba",icon:k.Uj,info:"Performance metrics of the Samba file share operations of this system. Samba is a implementation of Windows services, including Windows SMB protocol file shares."},nfsd:{title:"NFS Server",icon:k.Uj,info:'Performance metrics of the Network File Server. NFS is a distributed file system protocol, allowing a user on a client computer to access files over a network, much like local storage is accessed. NFS, like many other protocols, builds on the Open Network Computing Remote Procedure Call (ONC RPC) system.'},nfs:{title:"NFS Client",icon:k.Uj,info:'Performance metrics of the NFS operations of this system, acting as an NFS client.'},zfs:{title:"ZFS Cache",icon:k.Uj,info:'Performance metrics of the ZFS ARC and L2ARC. The following charts visualize all metrics reported by arcstat.py and arc_summary.py.'},zfspool:{title:"ZFS pools",icon:"serviceDatabase",info:"ZFS pools health and performance statistics."},lvm:{title:"LVM",icon:k.Uj,info:"Storage health and capacity of LVM Logical Volumes."},btrfs:{title:"BTRFS filesystem",icon:k.Uj,info:"Disk space metrics for the BTRFS filesystem."},app:{title:"Applications",icon:"applicationsSolid",info:'Per application statistics are collected using apps.plugin. This plugin walks through all processes and aggregates statistics for application groups. The plugin also counts the resources of exited children. So for processes like shell scripts, the reported values include the resources used by the commands these scripts run within each timeframe.',height:1.5},usergroup:{title:"User Groups",icon:q.X4,info:'Per user group statistics are collected using apps.plugin. This plugin walks through all processes and aggregates statistics per user group. The plugin also counts the resources of exited children. So for processes like shell scripts, the reported values include the resources used by the commands these scripts run within each timeframe.',height:1.5},user:{title:"Users",icon:O.gd,info:'Per user statistics are collected using apps.plugin. This plugin walks through all processes and aggregates statistics per user. The plugin also counts the resources of exited children. So for processes like shell scripts, the reported values include the resources used by the commands these scripts run within each timeframe.',height:1.5},apps:{title:"Applications (old)",icon:"applicationsSolid",info:'Per application statistics are collected using apps.plugin. This plugin walks through all processes and aggregates statistics for application groups. The plugin also counts the resources of exited children. So for processes like shell scripts, the reported values include the resources used by the commands these scripts run within each timeframe.',height:1.5},groups:{title:"User Groups (old)",icon:q.X4,info:'Per user group statistics are collected using apps.plugin. This plugin walks through all processes and aggregates statistics per user group. The plugin also counts the resources of exited children. So for processes like shell scripts, the reported values include the resources used by the commands these scripts run within each timeframe.',height:1.5},users:{title:"Users (old)",icon:O.gd,info:'Per user statistics are collected using apps.plugin. This plugin walks through all processes and aggregates statistics per user. The plugin also counts the resources of exited children. So for processes like shell scripts, the reported values include the resources used by the commands these scripts run within each timeframe.',height:1.5},netdata:{title:"Netdata Monitoring",icon:z.$F,info:"Performance metrics for the operation of netdata itself and its plugins."},aclk_test:{title:"ACLK Test Generator",info:"For internal use to perform integration testing."},example:{title:"Example Charts",info:"Example charts, demonstrating the external plugin architecture."},cgroup:{title:"",icon:"serviceContainer",info:"Netdata collects Container and VM resource utilization metrics from cgroups, a Linux kernel feature that enables the organization, management, and isolation of system resources among groups of processes. The charts show the aggregated view across all instances by default, to visualize the metrics per container or VM instance, change the Group by to instance"},cgqemu:{title:"",icon:B.l9,info:"QEMU virtual machine resource utilization metrics. QEMU (short for Quick Emulator) is a free and open-source hosted hypervisor that performs hardware virtualization."},docker:{title:"Docker",icon:"serviceDockerHubPress",info:"Docker container and image metrics. Charts show aggregated view across all containers by default, to visualize the metrics per container, change the Group by to instance"},dockerhub:{icon:"serviceDockerHubPress"},docker_engine:{icon:"serviceDockerHubPress"},fping:{title:"fping",icon:U._q,info:"Network latency statistics, via fping. fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping versions after 3.15 can be directly used as netdata plugins."},gearman:{title:"Gearman",icon:f.Ag,info:"Gearman is a job server that allows you to do work in parallel, to load balance processing, and to call functions between languages."},intelgpu:{title:"Intel iGPU",icon:I.YS,info:"Performance and usage metrics for Intel integrated GPU."},ioping:{title:"ioping",icon:U._q,info:"Disk latency statistics, via ioping. ioping is a program to read/write data probes from/to a disk."},filecheck:{title:"File Check",icon:N._g,info:"Tracks file and directory changes. Monitors existence, size, modification time, and for directories, number of files."},x509check:{title:"Certificate Check",icon:N._g,info:"Monitors certificate expiration dates and checks revocation status with Certificate Authorities (CAs) to identify compromised or outdated certificates."},whoisquery:{title:"WHOIS Check",icon:N._g,info:"Tracks domain health. Performs WHOIS queries to monitor expiration times of registered domains, ensuring timely renewals and preventing website outages."},httpcheck:{title:"Http Check",icon:"serviceHTTPCheck",info:"Web Service availability and latency monitoring using HTTP checks. This plugin is a specialized version of the port check plugin."},cassandra:{title:"Cassandra",icon:"serviceDatabase",info:"Performance metrics for Cassandra, the open source distributed NoSQL database management system.
    For more information:
    • Netdata Cassandra collector docs
    • Cassandra monitoring guide - Part 1 and Part 2"},clickhouse:{title:"ClickHouse",icon:"serviceDatabase",info:"Performance and health metrics for ClickHouse. Netdata collects metrics by sending HTTP to the ClickHouse HTTP interface and executing SELECT queries to retrieve data from various system tables."},rspamd:{title:"Rspamd",icon:h.V2,info:"Activity and performance of Rspamd servers: emails, learned messages, spam/ham counts, and actions taken on emails (reject, rewrite, etc.) and more. Netdata retrieves statistics from Rspamd's built-in web server by making HTTP requests to the /stat endpoint."},memcached:{title:"memcached",icon:"serviceMemCached",info:"Performance metrics for memcached. Memcached is a general-purpose distributed memory caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read."},monit:{title:"monit",icon:"serviceDatabase",info:"Statuses of checks in monit. Monit is a utility for managing and monitoring processes, programs, files, directories and filesystems on a Unix system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations."},mysql:{title:"MySQL",icon:"serviceMySQLPress",info:"Performance metrics for mysql, the open-source relational database management system (RDBMS)."},mongodb:{title:"MongoDB",icon:"serviceMongoDB",info:"Performance and health metrics of MongoDB deployments."},nvme:{title:"NVMe",icon:l.MB,info:"NVMe devices SMART and health metrics. Additional information on metrics can be found in the NVM Express Base Specification."},pci:{title:"PCIe AER",icon:I.YS,info:"Advanced Error Reporting is a mechanism built into the PCI Express (PCIe) bus to provide detailed information about errors that occur during communication between devices."},ping:{title:"Ping",icon:F.FF,info:"Measures round-trip time and packet loss by sending ping messages to network hosts."},postgres:{title:"PostgreSQL",icon:"servicePostgreSQL",info:"Performance metrics for PostgreSQL, the open source object-relational database management system (ORDBMS).
    For more information:
    • Netdata PostgreSQL collector docs
    • How to monitor PostgreSQL with Netdata"},redis:{title:"Redis",icon:"serviceRedis",info:"Performance metrics for Redis, an in-memory data structure store, used as a distributed, in-memory key\u2013value database, cache and message broker, with optional durability.
    For more information:
    • Netdata Redis collector docs
    • How to monitor Redis with Netdata"},rethinkdbs:{title:"RethinkDB",icon:"serviceRethinkDB",info:"Performance metrics for rethinkdb. RethinkDB is the first open-source scalable database built for realtime applications"},retroshare:{title:"RetroShare",icon:"serviceRetroShare",info:"Performance metrics for RetroShare. RetroShare is open source software for encrypted filesharing, serverless email, instant messaging, online chat, and BBS, based on a friend-to-friend network built on GNU Privacy Guard (GPG)."},riakkv:{title:"Riak KV",icon:"serviceDatabase",info:"Metrics for Riak KV, the distributed key-value store."},ipfs:{title:"IPFS",icon:"serviceIPFS",info:"Performance metrics for the InterPlanetary File System (IPFS), a content-addressable, peer-to-peer hypermedia distribution protocol."},phpfpm:{title:"PHP-FPM",icon:"servicePhpFpm",info:"Performance metrics for PHP-FPM, an alternative FastCGI implementation for PHP."},pihole:{title:"Pi-hole",icon:R.Df,info:'Metrics for Pi-hole, a black hole for Internet advertisements. The metrics returned by Pi-Hole API is all from the last 24 hours.'},portcheck:{title:"Port Check",icon:N._g,info:"Service availability and latency monitoring using port checks."},postfix:{title:"postfix",icon:M.y_},dovecot:{title:"Dovecot",icon:M.y_},hddtemp:{title:"HDD Temp",icon:w.Ro},nginx:{title:"NGINX",icon:"serviceNginx"},nginxplus:{title:"NGINX Plus",icon:"serviceNginx"},apache:{title:"Apache",icon:"serviceApache"},lighttpd:{title:"Lighttpd",icon:"serviceLighthttpd"},web_log:{title:"Web Server Logs",icon:"serviceWebLog",info:"Key web server performance metrics extracted in real-time from web server log files. For web servers, an extended log file format may optionally be used offering timing information and bandwidth for both requests and responses."},squid:{title:"squid",icon:"serviceSquid"},nut:{title:"UPS",icon:c.W6},upsd:{title:"UPS",icon:c.W6},apcupsd:{title:"UPS",icon:c.W6},snmp:{title:"SNMP",icon:D.fK},go_expvar:{title:"Go - expvars",icon:P.pS,info:'Statistics about running Go applications exposed by the expvar package.'},consul:{title:"Consul",icon:E.s4,info:'Consul performance and health metrics. For details, see Key Metrics.'},chrony:{title:"Chrony",icon:A.a$,info:"The system\u2019s clock performance and peers activity status."},couchdb:{icon:"serviceCouchDB",info:'Performance metrics for CouchDB, the open-source, JSON document-based database with an HTTP API and multi-master replication.'},beanstalk:{title:"Beanstalkd",icon:"serviceBeanstalk",info:'Provides statistics on the beanstalkd server and any tubes available on that server using data pulled from beanstalkc'},rabbitmq:{title:"RabbitMQ",icon:"serviceRabbitMQ",info:'Performance data for the RabbitMQ open-source message broker.'},ceph:{title:"Ceph",icon:"serviceDatabase",info:'Provides statistics on the ceph cluster server, the open-source distributed storage system.'},ntpd:{title:"NTPd",icon:"serviceNtpdPress",info:'Provides statistics for the internal variables of the Network Time Protocol daemon ntpd and optional including the configured peers (if enabled in the module configuration). The module presents the performance metrics as shown by ntpq (the standard NTP query program) using NTP mode 6 UDP packets to communicate with the NTP server.'},spigotmc:{title:"Spigot MC",icon:P.pS,info:'Provides basic performance statistics for the Spigot Minecraft server.'},unbound:{title:"Unbound",icon:L._2},boinc:{title:"BOINC",icon:I.YS,info:'Provides task counts for BOINC distributed computing clients.'},w1sensor:{title:"1-Wire Sensors",icon:w.Ro,info:'Data derived from 1-Wire sensors. Currently temperature sensors are automatically detected.'},logind:{title:"Logind",icon:q.X4,info:'Keeps track of user logins and sessions by querying the systemd-logind API.'},powersupply:{title:"Power Supply",icon:c.W6,info:'Statistics for the various system power supplies. Data collected from Linux power supply class.'},xenstat:{title:"Xen Node",icon:T.D6,info:"General statistics for the Xen node. Data collected using xenstat library."},xendomain:{title:"",icon:B.l9,info:"Xen domain resource utilization metrics. Netdata reads this information using xenstat library which gives access to the resource usage information (CPU, memory, disk I/O, network) for a virtual machine."},windows:{title:"Windows",icon:r.tQ},iis:{title:"IIS",icon:P.pS},mssql:{title:"SQL Server",icon:C.he},ad:{title:"Active Directory",icon:r.tQ},adcs:{title:"AD Certification Service",icon:r.tQ},adfs:{title:"AD Federation Service",icon:r.tQ},netframework:{title:".NET Framework",icon:x.fP},exchange:{title:"Exchange",icon:M.y_},perf:{title:"Perf Counters",icon:S.xi,info:"Performance Monitoring Counters (PMC). Data collected using perf_event_open() system call which utilises Hardware Performance Monitoring Units (PMU)."},vsphere:{title:"vSphere",icon:T.D6,info:'Performance statistics for ESXI hosts and virtual machines. Data collected from VMware vCenter Server using govmomi library.'},vcsa:{title:"VCSA",icon:T.D6,info:'vCenter Server Appliance health statistics. Data collected from Health API.'},zookeeper:{title:"Zookeeper",icon:"serviceDatabase",info:'Provides health statistics for Zookeeper server. Data collected through the command port using mntr command.'},hdfs:{title:"HDFS",icon:k.Uj,info:'Provides Hadoop Distributed File System performance statistics. Module collects metrics over Java Management Extensions through the web interface of an HDFS daemon.'},am2320:{title:"AM2320 Sensor",icon:w.Ro,info:"Readings from the external AM2320 Sensor."},scaleio:{title:"ScaleIO",icon:"serviceDatabase",info:"Performance and health statistics for various ScaleIO components. Data collected via VxFlex OS Gateway REST API."},squidlog:{title:"Squid log",icon:_.h8},cockroachdb:{title:"CockroachDB",icon:"serviceDatabase",info:"Performance and health statistics for various CockroachDB components."},ebpf:{title:"eBPF",icon:"serviceEBPF",info:"Monitor system calls, internal functions, bytes read, bytes written and errors using eBPF."},filesystem:{title:"Filesystem",icon:l.MB,info:'Number of filesystem events for Virtual File System, File Access, Directory cache, and file system latency (BTRFS, EXT4, NFS, XFS, and ZFS) when your disk has the file system. Filesystem charts have relationship with SWAP, Disk, Sync, and Mount Points.'},vernemq:{title:"VerneMQ",icon:v.q9,info:'Performance data for the VerneMQ open-source MQTT broker.'},pulsar:{title:"Pulsar",icon:v.q9,info:'Summary, namespaces and topics performance data for the Apache Pulsar pub-sub messaging system.'},anomalies:{title:"Anomalies",icon:m.rI,info:'Anomaly scores relating to key system metrics. A high anomaly probability indicates strange behaviour and may trigger an anomaly prediction from the trained models. Read the anomalies collector docs for more details.'},alerts:{title:"Alerts",icon:y.z$,info:'Charts showing alert status over time. More details here.'},statsd:{title:"StatsD",icon:b.gK,info:'StatsD is an industry-standard technology stack for monitoring applications and instrumenting any piece of software to deliver custom metrics. Netdata allows the user to organize the metrics in different charts and visualize any application metric easily. Read more on Netdata Learn.'},supervisord:{title:"Supervisord",icon:f.Ag,info:'Detailed statistics for each group of processes controlled by Supervisor. Netdata collects these metrics using getAllProcessInfo method.'},systemdunits:{title:"systemd units",icon:g.Ub,info:'systemd provides a dependency system between various entities called "units" of 11 different types. Units encapsulate various objects that are relevant for system boot-up and maintenance. Units may be active (meaning started, bound, plugged in, depending on the unit type), or inactive (meaning stopped, unbound, unplugged), as well as in the process of being activated or deactivated, i.e. between the two states (these states are called activating, deactivating). A special failed state is available as well, which is very similar to inactive and is entered when the service failed in some way (process returned error code on exit, or crashed, an operation timed out, or after too many restarts). For details, see systemd(1).'},changefinder:{title:"ChangeFinder",icon:m.rI,info:'Online changepoint detection using machine learning. More details here.'},zscores:{title:"Z-Scores",icon:p.bx,info:"Z scores scores relating to key system metrics."},anomaly_detection:{title:"Anomaly Detection",icon:u.GQ,info:'Charts relating to anomaly detection, increased anomalous dimensions or a higher than usual anomaly_rate could be signs of some abnormal behaviour. Read our anomaly detection guide for more details.'},fail2ban:{title:"Fail2ban",icon:h.V2,info:"Netdata keeps track of the current jail status by reading the Fail2ban log file."},wireguard:{title:"WireGuard",icon:d.dX,info:"VPN network interfaces and peers traffic."},prometheus:{icon:"servicePrometheus"},"Kubernetes State":{title:"Kubernetes State",icon:"serviceKubernetes"},"Kubernetes Containers":{title:"Kubernetes Containers",icon:"serviceKubernetes"},"Kubernetes kubelet":{title:"Kubernetes Kubelet",icon:"serviceKubernetes"},"Kubernetes kubeproxy":{title:"Kubernetes Kubeproxy",icon:"serviceKubernetes"},coredns:{title:"CoreDNS",icon:"serviceCoreDns"},dns:{title:"DNS Query",icon:"serviceDNS"},sendgrid:{title:"SendGrid",icon:"serviceSendgrid"},smartd_log:{icon:"servicesSmartdlog"},smartctl:{title:"S.M.A.R.T. Devices",icon:"servicesSmartdlog",info:"Tracks S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) data for storage health monitoring."},bind:{icon:"serviceBind"},systemd:{icon:"serviceSystemd",info:"Resources utilization of systemd services. Netdata monitors all systemd services via cgroups (the resources accounting used by containers)."},md:{title:"Linux Software RAID",icon:l.MB,info:"Metrics for monitoring Linux Software RAID"},cups:{title:"Printers (cups)",icon:c.W6,info:"Metrics for Printer (cups) monitoring"},named:{title:"ISC Bind (named)",icon:"serviceCoreDns",info:"Metrics for named monitoring"},isc_dhcpd:{title:"ISC DHCPd",icon:"serviceCoreDns",info:"Metrics for DHCPd monitoring"},dnsmasq:{title:"Dnsmasq",icon:i.KI},dnsmasq_dhcp:{title:"Dnsmasq DHCP",icon:i.KI},elasticsearch:{title:"Elasticsearch",icon:"serviceElasticSearch"}},Z={"web_log.squid_bandwidth":{title:"bandwidth",info:'Bandwidth of responses (sent) by squid. This chart may present unusual spikes, since the bandwidth is accounted at the time the log line is saved by the server, even if the time needed to serve it spans across a longer duration. We suggest to use QoS (e.g. FireQOS) for accurate accounting of the server bandwidth.'},"web_log.squid_responses":{title:"responses",info:"Information related to the responses sent by squid."},"web_log.squid_requests":{title:"requests",info:"Information related to the requests squid has received."},"web_log.squid_hierarchy":{title:"hierarchy",info:"Performance metrics for the squid hierarchy used to serve the requests."},"web_log.squid_squid_transport":{title:"transport"},"web_log.squid_squid_cache":{title:"cache",info:"Performance metrics for the performance of the squid cache."},"web_log.squid_timings":{title:"timings",info:"Duration of squid requests. Unrealistic spikes may be reported, since squid logs the total time of the requests, when they complete. Especially for HTTPS, the clients get a tunnel from the proxy and exchange requests directly with the upstream servers, so squid cannot evaluate the individual requests and reports the total time the tunnel was open."},"web_log.squid_clients":{title:"clients"},"web_log.bandwidth":{info:'Bandwidth of requests (received) and responses (sent). received requires an extended log format (without it, the web server log does not have this information). This chart may present unusual spikes, since the bandwidth is accounted at the time the log line is saved by the web server, even if the time needed to serve it spans across a longer duration. We suggest to use QoS (e.g. FireQOS) for accurate accounting of the web server bandwidth.'},"web_log.urls":{info:'Number of requests for each URL pattern defined in /etc/netdata/go.d/web_log.conf. This chart counts all requests matching the URL patterns defined, independently of the web server response codes (i.e. both successful and unsuccessful).'},"web_log.clients":{info:"Charts showing the number of unique client IPs, accessing the web server."},"web_log.timings":{info:"Web server response timings - the time the web server needed to prepare and respond to requests. This requires an extended log format and its meaning is web server specific. For most web servers this accounts the time from the reception of a complete request, to the dispatch of the last byte of the response. So, it includes the network delays of responses, but it does not include the network delays of requests."},"mem.ksm":{title:"deduper (ksm)",info:'Kernel Same-page Merging (KSM) performance monitoring, read from several files in /sys/kernel/mm/ksm/. KSM is a memory-saving de-duplication feature in the Linux kernel. The KSM daemon ksmd periodically scans those areas of user memory which have been registered with it, looking for pages of identical content which can be replaced by a single write-protected page.'},"mem.hugepages":{info:'Hugepages is a feature that allows the kernel to utilize the multiple page size capabilities of modern hardware architectures. The kernel creates multiple pages of virtual memory, mapped from both physical RAM and swap. There is a mechanism in the CPU architecture called "Translation Lookaside Buffers" (TLB) to manage the mapping of virtual memory pages to actual physical memory addresses. The TLB is a limited hardware resource, so utilizing a large amount of physical memory with the default page size consumes the TLB and adds processing overhead. By utilizing Huge Pages, the kernel is able to create pages of much larger sizes, each page consuming a single resource in the TLB. Huge Pages are pinned to physical RAM and cannot be swapped/paged out.'},"mem.numa":{info:'Non-Uniform Memory Access (NUMA) is a hierarchical memory design the memory access time is dependent on locality. Under NUMA, a processor can access its own local memory faster than non-local memory (memory local to another processor or memory shared between processors). The individual metrics are described in the Linux kernel documentation.'},"mem.ecc":{info:'

    ECC memory is a type of computer data storage that uses an error correction code (ECC) to detect and correct n-bit data corruption which occurs in memory. Typically, ECC memory maintains a memory system immune to single-bit errors: the data that is read from each word is always the same as the data that had been written to it, even if one of the bits actually stored has been flipped to the wrong state.

    Memory errors can be classified into two types: Soft errors, which randomly corrupt bits but do not leave physical damage. Soft errors are transient in nature and are not repeatable, can be because of electrical or magnetic interference. Hard errors, which corrupt bits in a repeatable manner because of a physical/hardware defect or an environmental problem.'},"mem.pagetype":{info:'Statistics of free memory available from memory buddy allocator. The buddy allocator is the system memory allocator. The whole memory space is split in physical pages, which are grouped by NUMA node, zone, migrate type, and size of the block. By keeping pages grouped based on their ability to move, the kernel can reclaim pages within a page block to satisfy a high-order allocation. When the kernel or an application requests some memory, the buddy allocator provides a page that matches closest the request.'},"ip.ecn":{info:'Explicit Congestion Notification (ECN) is an extension to the IP and to the TCP that allows end-to-end notification of network congestion without dropping packets. ECN is an optional feature that may be used between two ECN-enabled endpoints when the underlying network infrastructure also supports it.'},"ip.multicast":{info:'IP multicast is a technique for one-to-many communication over an IP network. Multicast uses network infrastructure efficiently by requiring the source to send a packet only once, even if it needs to be delivered to a large number of receivers. The nodes in the network take care of replicating the packet to reach multiple receivers only when necessary.'},"ip.broadcast":{info:'In computer networking, broadcasting refers to transmitting a packet that will be received by every device on the network. In practice, the scope of the broadcast is limited to a broadcast domain.'},"netfilter.conntrack":{title:"connection tracker",info:"Netfilter Connection Tracker performance metrics. The connection tracker keeps track of all connections of the machine, inbound and outbound. It works by keeping a database with all open connections, tracking network and address translation and connection expectations."},"netfilter.nfacct":{title:"bandwidth accounting",info:"The following information is read using the nfacct.plugin."},"netfilter.synproxy":{title:"DDoS protection",info:'DDoS protection performance metrics. SYNPROXY is a TCP SYN packets proxy. It is used to protect any TCP server (like a web server) from SYN floods and similar DDoS attacks. SYNPROXY intercepts new TCP connections and handles the initial 3-way handshake using syncookies instead of conntrack to establish the connection. It is optimized to handle millions of packets per second utilizing all CPUs available without any concurrency locking between the connections. It can be used for any kind of TCP traffic (even encrypted), since it does not interfere with the content itself.'},"ipfw.dynamic_rules":{title:"dynamic rules",info:"Number of dynamic rules, created by correspondent stateful firewall rules."},"system.softnet_stat":{title:"softnet",info:e=>{let{os:t}=e;return"linux"===t?'

    Statistics for CPUs SoftIRQs related to network receive work. Break down per CPU core can be found at CPU / softnet statistics. More information about identifying and troubleshooting network driver related issues can be found at Red Hat Enterprise Linux Network Performance Tuning Guide.

    Processed - packets processed. Dropped - packets dropped because the network device backlog was full. Squeezed - number of times the network device budget was consumed or the time limit was reached, but more work was available. ReceivedRPS - number of times this CPU has been woken up to process packets via an Inter-processor Interrupt. FlowLimitCount - number of times the flow limit has been reached (flow limiting is an optional Receive Packet Steering feature).

    ':"Statistics for CPUs SoftIRQs related to network receive work."}},"system.clock synchronization":{info:'NTP lets you automatically sync your system time with a remote server. This keeps your machine\u2019s time accurate by syncing with servers that are known to have accurate times.'},"cpu.softnet_stat":{title:"softnet",info:e=>{let{os:t}=e;return"linux"===t?'

    Statistics for CPUs SoftIRQs related to network receive work. Total for all CPU cores can be found at System / softnet statistics. More information about identifying and troubleshooting network driver related issues can be found at Red Hat Enterprise Linux Network Performance Tuning Guide.

    Processed - packets processed. Dropped - packets dropped because the network device backlog was full. Squeezed - number of times the network device budget was consumed or the time limit was reached, but more work was available. ReceivedRPS - number of times this CPU has been woken up to process packets via an Inter-processor Interrupt. FlowLimitCount - number of times the flow limit has been reached (flow limiting is an optional Receive Packet Steering feature).

    ':'Statistics for per CPUs core SoftIRQs related to network receive work. Total for all CPU cores can be found at System / softnet statistics.'}},"go_expvar.memstats":{title:"memory statistics",info:'Go runtime memory statistics. See runtime.MemStats documentation for more info about each chart and the values.'},"couchdb.dbactivity":{title:"db activity",info:"Overall database reads and writes for the entire server. This includes any external HTTP traffic, as well as internal replication traffic performed in a cluster to ensure node consistency."},"couchdb.httptraffic":{title:"http traffic breakdown",info:"All HTTP traffic, broken down by type of request (GET, PUT, POST, etc.) and response status code (200, 201, 4xx, etc.)

    Any 5xx errors here indicate a likely CouchDB bug; check the logfile for further information."},"couchdb.ops":{title:"server operations"},"couchdb.perdbstats":{title:"per db statistics",info:'Statistics per database. This includes 3 size graphs per database: active (the size of live data in the database), external (the uncompressed size of the database contents), and file (the size of the file on disk, exclusive of any views and indexes). It also includes the number of documents and number of deleted documents per database.'},"couchdb.erlang":{title:"erlang statistics",info:"Detailed information about the status of the Erlang VM that hosts CouchDB. These are intended for advanced users only. High values of the peak message queue (>10e6) generally indicate an overload condition."},"ntpd.system":{title:"system",info:'Statistics of the system variables as shown by the readlist billboard ntpq -c rl. System variables are assigned an association ID of zero and can also be shown in the readvar billboard ntpq -c "rv 0". These variables are used in the Clock Discipline Algorithm, to calculate the lowest and most stable offset.'},"ntpd.peers":{title:"peers",info:'Statistics of the peer variables for each peer configured in /etc/ntp.conf as shown by the readvar billboard ntpq -c "rv <association>", while each peer is assigned a nonzero association ID as shown by ntpq -c "apeers". The module periodically scans for new/changed peers (default: every 60s). ntpd selects the best possible peer from the available peers to synchronize the clock. A minimum of at least 3 peers is required to properly identify the best possible peer.'},"mem.page_cache":{title:"page cache (eBPF)",info:'Number of calls to functions used to manipulate the Linux page cache. This chart has a relationship with File Systems, Sync, and Hard Disk.'},"apps.page_cache":{title:"page cache (eBPF)",info:'Netdata also gives a summary for these charts in Memory submenu.'},"filesystem.vfs":{title:"vfs (eBPF)",info:'Number of calls to Virtual File System functions used to manipulate File Systems.'},"apps.vfs":{title:"vfs (eBPF)",info:'Netdata also gives a summary for these charts in Filesystem submenu.'},"filesystem.ext4_latency":{title:"ext4 latency (eBPF)",info:'Latency is the time it takes for an event to be completed. Based on the eBPF ext4dist from BCC tools. This chart is provided by the eBPF plugin to monitor File systems.'},"filesystem.xfs_latency":{title:"xfs latency (eBPF)",info:'Latency is the time it takes for an event to be completed. Based on the xfsdist from BCC tools. This chart is provided by the eBPF plugin to monitor File systems.'},"filesystem.nfs_latency":{title:"nfs latency (eBPF)",info:'Latency is the time it takes for an event to be completed. Based on the nfsdist from BCC tools. This chart is provided by the eBPF plugin to monitor File systems.'},"filesystem.zfs_latency":{title:"zfs latency (eBPF)",info:'Latency is the time it takes for an event to be completed. Based on the zfsdist from BCC tools. This chart is provided by the eBPF plugin to monitor File systems.'},"filesystem.btrfs_latency":{title:"btrfs latency (eBPF)",info:'Latency is the time it takes for an event to be completed. Based on the btrfsdist from BCC tools. This chart is provided by the eBPF plugin to monitor File systems.'},"filesystem.file_access":{title:"file access (eBPF)"},"apps.file_access":{title:"file access (eBPF)",info:'Netdata also gives a summary for this chart on Filesystem submenu (more details on eBPF plugin file chart section).'},"ip.kernel":{title:"kernel functions (eBPF)"},"apps.net":{title:"network",info:'Netdata also gives a summary for eBPF charts in Networking Stack submenu.'},"system.ipc semaphores":{info:'System V semaphores is an inter-process communication (IPC) mechanism. It allows processes or threads within a process to synchronize their actions. They are often used to monitor and control the availability of system resources such as shared memory segments. For details, see svipc(7). To see the host IPC semaphore information, run ipcs -us. For limits, run ipcs -ls.'},"system.ipc shared memory":{info:'System V shared memory is an inter-process communication (IPC) mechanism. It allows processes to communicate information by sharing a region of memory. It is the fastest form of inter-process communication available since no kernel involvement occurs when data is passed between the processes (no copying). Typically, processes must synchronize their access to a shared memory object, using, for example, POSIX semaphores. For details, see svipc(7). To see the host IPC shared memory information, run ipcs -um. For limits, run ipcs -lm.'},"system.ipc message queues":{info:'System V message queues is an inter-process communication (IPC) mechanism. It allow processes to exchange data in the form of messages. For details, see svipc(7). To see the host IPC messages information, run ipcs -uq. For limits, run ipcs -lq.'},"system.interrupts":{info:'Interrupts are signals sent to the CPU by external devices (normally I/O devices) or programs (running processes). They tell the CPU to stop its current activities and execute the appropriate part of the operating system. Interrupt types are hardware (generated by hardware devices to signal that they need some attention from the OS), software (generated by programs when they want to request a system call to be performed by the operating system), and traps (generated by the CPU itself to indicate that some error or condition occurred for which assistance from the operating system is needed).'},"system.softirqs":{info:'Software interrupts (or "softirqs") are one of the oldest deferred-execution mechanisms in the kernel. Several tasks among those executed by the kernel are not critical: they can be deferred for a long period of time, if necessary. The deferrable tasks can execute with all interrupts enabled (softirqs are patterned after hardware interrupts). Taking them out of the interrupt handler helps keep kernel response time small.'},"cpu.softirqs":{info:'Total number of software interrupts per CPU. To see the total number for the system check the softirqs section.'},"cpu.interrupts":{info:'Total number of interrupts per CPU. To see the total number for the system check the interrupts section. The last column in /proc/interrupts provides an interrupt description or the device name that registered the handler for that interrupt.'},"cpu.throttling":{info:" CPU throttling is commonly used to automatically slow down the computer when possible to use less energy and conserve battery."},"cpu.cpuidle":{info:'Idle States (C-states) are used to save power when the processor is idle.'},"services.net":{title:"network (eBPF)"},"services.page_cache":{title:"pache cache (eBPF)"},"netdata.ebpf":{title:"eBPF.plugin",info:'eBPF (extended Berkeley Packet Filter) is used to collect metrics from inside Linux kernel giving a zoom inside your Process, Hard Disk, File systems (File Access, and Directory Cache), Memory (Swap I/O, Page Cache), IRQ (Hard IRQ and Soft IRQ ), Shared Memory, Syscalls (Sync, Mount), and Network.'}},Y=function(e,t,n,s){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if("undefined"===typeof e[n])return s;const o=e[n][t];return"undefined"===typeof o?s:"function"===typeof o?o(a):o},J=(e,t)=>{if(e.sectionTitle)return e.sectionTitle;if("undefined"===typeof e.menuPattern)return Y(K,"title",e.id,e.id,t).toString().replace(/_/g," ");const n=e.type||e.id.split(".")[0],s=n===e.menuPattern?"":" ".concat(n.slice(-(n.length-e.menuPattern.length-1)));return"".concat(Y(K,"title",e.menuPattern,e.menuPattern,t).toString()," ").concat(s).replace(/_/g," ")},X=s._X,$=e=>Y(K,"icon",e.menuIcon||e.menuPattern||e.id,X),ee=(e,t)=>Y(K,"info",e.menuPattern||e.id,null,t),te=(e,t,n)=>{const s=t?"".concat(e,".").concat(t):e;return Y(Z,"title",s,t||e,n).toString().replace(/_/g," ")},ne=(e,t,n)=>Y(Z,"info",t?"".concat(e,".").concat(t):e,null,n),se=(e,t)=>{const n=Y(o.A,"info",e,null,t);return n?'
    '.concat(n,"
    "):""},ae=(e,t,n,s)=>Y(o.A,t,e,n,s),oe=e=>{var t;return(null===(t=o.A[e])||void 0===t?void 0:t.valueRange)||[null,null]},re=function(e){let{menuId:t,subMenuId:n,sectionInfo:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{context:i,domain:c,id:l,visible:d,filteredOut:h,hidden:u}=e;return{...(0,o.L)(l),id:l,chartId:l,menuGroupId:t,subMenuId:n,link:"chart_".concat((0,a.A)(l)),chartLibrary:"dygraph",info:se(i,r),sectionInfo:s,valueRange:oe(i),colors:"".concat(Y(i||l,"colors",i,"",r)),domain:c,visible:d,filteredOut:h,hidden:u}}},72253:(e,t,n)=>{n.d(t,{A:()=>T});var s=n(58168),a=(n(17333),n(41393),n(98992),n(54520),n(81454),n(62953),n(96540)),o=n(83199),r=n(73700),i=n(31438),c=n(51220),l=n(23931),d=(n(3064),n(72577),n(55309)),h=n(59090),u=n(8320),p=n(86856);const m=e=>{const t=(0,a.useRef)();return(0,p.i7)(e,(e=>(t.current=e,!1))),t},g=(e,t)=>{const n=(0,i.NF)(),s=m(d.ox),o=m(h.xw),r=m(i.i8),c=(0,u.Gr)(),l=(0,a.useMemo)((()=>({goToElement:n=>!!t.length&&(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;new Promise((n=>{const s=t=>{if(0===t)return n();e(),setTimeout((()=>s(--t)))};s(t)}))}((()=>{const s=t.findIndex((e=>e.id===n));if(-1!==s)return e.scrollToIndex(s,{align:"start"})}),5),!0),goToLink:e=>{const t=Object.values(s.current).find((t=>t.link===e));if(t)return l.goToElement(t.id);const n=Object.values(o.current).find((t=>t.link===e));if(n)return l.goToElement(n.id);if(r.current){const t=Object.values(r.current).find((t=>t.link===e));if(t)return l.goToElement(t.chartId)}}})),[n,t]);return(0,a.useLayoutEffect)((()=>{c(l)}),[l]),l};var f=n(62302);let b=null;n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215);var y=n(57530),v=n(43375);n(14905),n(8872);const _=(0,a.memo)((e=>{let{getComponent:t,element:n,index:o,...r}=e;const i=(0,a.useMemo)((()=>n&&t(n)),[null===n||void 0===n?void 0:n.id,o]);return i?a.createElement(i,(0,s.A)({key:n.id},n,{index:o},r,{isVisible:!0})):null})),w=(0,a.memo)((0,a.forwardRef)(((e,t)=>{let{elements:n,onScroll:i,dashboardOptions:l,getComponent:d,stickyBg:h="mainBackground",stickyRef:u,nextStickyRef:p,stickyIndexes:m,tmpStickyRef:f,containerWidth:w}=e;const k=(e=>{const t=(0,a.useRef)(),n=(0,a.useRef)(),s=(0,a.useRef)(0),o=(0,a.useRef)(0);return(0,a.useCallback)((a=>{if(t.current!==e.length&&(o.current=0),n.current&&(o.current<5||t.current!==e.length)){o.current=o.current+1,t.current=e.length;const r=e.findIndex((e=>e.id===n.current.id));if(-1===r)return;const{start:i}=a.getMeasurements()[r];return a.scrollToOffset(i+s.current),clearTimeout(b),void(b=setTimeout((()=>o.current=5),200))}t.current=e.length;const r=a.scrollOffset;let i=0;const c=a.getMeasurements().find((e=>(i+=e.size,i>r)));c&&(n.current=e[c.index],s.current=r-c.start)}),[e])})(n),T=(0,a.useRef)(),[S,M]=(0,a.useState)(0),x=((e,t,n)=>{let{stickyRef:s,nextStickyRef:o,tmpStickyRef:r}=n;const i=(0,a.useRef)(),{active:c}=(0,v.fF)(),l=(0,a.useRef)();return l.current=c,(0,a.useCallback)((e=>{if(l.current&&l.current.data.current.isResizer)return i.current;if(!t)return i.current=(0,y.vp)(e),i.current;o.current=Number(Object.keys(t).find((t=>e.startIndexe.startIndex>=t))),o.current-e.startIndex===1&&(s.current=NaN);let n=(0,y.vp)(e);return null!==r.current&&(n=[...n,r.current]),isNaN(s.current)?i.current=[...new Set(n)].sort(((e,t)=>e-t)):i.current=[...new Set([s.current,...n])].sort(((e,t)=>e-t)),i.current}),[e,t])})(n,m,{stickyRef:u,nextStickyRef:p,tmpStickyRef:f}),C=(0,c.Te)({count:n.length,getScrollElement:()=>t.current,overscan:1,enableSmoothScroll:!1,estimateSize:e=>n[e].size,onChange:k,rangeExtractor:x,scrollPaddingStart:20});T.current=C,g(C,n);const P=(0,a.useCallback)((0,r.n)(100,(function(){i(...arguments),t.current&&M(t.current.scrollTop)})),[i]);return a.createElement("div",{ref:t,style:{minHeight:"100%",width:"100%",overflow:"auto"},onScroll:P},a.createElement("div",{style:{minHeight:"".concat(C.getTotalSize(),"px"),width:"100%",position:"relative"}},S>0&&!isNaN(u.current)&&a.createElement(o.Box,{key:u.current,sx:{top:0,left:0,width:"100%",padding:1,position:"sticky",zIndex:10,boxShadow:"2px 6px 6px -7px rgba(0, 0, 0, 0.4)"},background:h},a.createElement(_,(0,s.A)({},l,{element:n[u.current],index:u.current,getComponent:d,isActiveSticky:!0}))),C.getVirtualItems().map((e=>a.createElement(o.Box,{key:e.key,ref:C.measureElement,sx:{top:0,left:0,width:"100%",padding:1,position:"absolute",transform:"translateY(".concat(e.start,"px)")},"data-index":e.index},a.createElement(_,(0,s.A)({},l,{element:n[e.index],index:e.index,getComponent:d,containerWidth:w})))))))})),((e,t)=>e.elements.length===t.elements.length&&e.containerWidth===t.containerWidth)),k=e=>{let{onActiveMenuGroupId:t,onActiveSubMenuId:n,getComponent:o,dashboardOptions:r,initialChartName:c,checkVisibility:d,...h}=e;const u=(0,l.bD)(),p=(0,i.qR)((e=>e.filter((e=>d?d(e.subMenuChartIds||e.chartIds||[e.id]):u(e.subMenuChartIds||e.chartIds||[e.id]))))),[{stickyRef:m,nextStickyRef:g,tmpStickyRef:b},y]=(e=>{const t=(0,i.Tg)(),n=(0,a.useRef)(null),s=(0,a.useMemo)((()=>e.reduce(((e,n,s)=>{let{id:a}=n;return t[a]&&(e[s]=!0),e}),{})),[e]),o=(0,a.useRef)(),r=(0,a.useRef)(),c=(0,a.useCallback)((e=>!!s[e]),[s]),l=(0,a.useCallback)((e=>o.current===e),[]);return[{stickyRef:o,nextStickyRef:r,isSticky:c,isActiveSticky:l,tmpStickyRef:n},s,t]})(p),v=(0,a.useRef)(),_=(0,a.useRef)(),k=(0,a.useMemo)((()=>(_.current&&_.current.cancel(),_.current=(0,f.A)(m),()=>_.current(v.current,n,t))),[p.length,n,t]);return(0,a.useLayoutEffect)((()=>{p.length&&k()}),[p.length,c]),a.createElement(w,(0,s.A)({elements:p,onScroll:k,dashboardOptions:r,getComponent:o,ref:v,stickyRef:m,nextStickyRef:g,stickyIndexes:y,tmpStickyRef:b},h))},T=(0,a.memo)(k)},62302:(e,t,n)=>{n.d(t,{A:()=>a});n(3064),n(98992),n(72577);var s=n(73700);const a=e=>(0,s.s)(100,((t,n,s)=>{var a;if(!t)return;const{top:o}=t.getBoundingClientRect(),r=Array.from(t.querySelectorAll("[data-submenuid], [data-menuid], [data-chartid]")).find(((t,n)=>!(!isNaN(null===e||void 0===e?void 0:e.current)&&0===n)&&t.getBoundingClientRect().top-o>0));if(!r)return;const i=r.getAttribute("data-menuid");if(i)return n(""),void s(i);n(r.getAttribute("data-submenuid")||(null===(a=r.closest("[data-submenuid]"))||void 0===a?void 0:a.getAttribute("data-submenuid")))}))},16579:(e,t,n)=>{n.d(t,{H:()=>w,A:()=>k});var s=n(58168),a=(n(62953),n(96540)),o=n(83199),r=(n(3064),n(9920),n(41393),n(14905),n(98992),n(72577),n(3949),n(81454),n(8872),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215),n(79304));n(25440);n(8159),n(37550);var i=n(62193),c=n.n(i),l=n(4967),d=n(45387);const h=function(e,t,n){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const a={},o=[];return t.forEach((t=>{const r=n(t);(0,d.X_)(l.A,e,r.context,[]).forEach(((i,l)=>{const d="function"===typeof i?i({...s,id:r.id}):i;if(!d)return;if(((e,t)=>!!e&&(Array.isArray(e)?e.some((e=>!c()(t(e)))):!c()(t(e))))(d.hiddenWhen,n))return;if(d.domain&&d.domain!==r.domain)return;const h="".concat(e,"|").concat(t,"|").concat(l),u={id:h,chartId:t,...s,...d};a[h]=u,o.push(h)}))})),[a,o.sort(((e,t)=>a[e].priority-a[t].priority))]},u=(e,t,n)=>{const s={},a={},o={},r={};e.forEach((e=>{const a=t(e);a.id&&(n[e]=((e,t)=>{let{id:n,name:s,family:a,context:o,priority:r,visible:i,filteredOut:c,hidden:l}=e;return function(e){var t;let{name:n="",context:s="",submenuNames:a={}}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[o,r,i]=(s||e.chartId).split("."),c=o.split("_"),[l,d]=c,h=t=>{let{menuPattern:n,menu:s=o,...a}=t;return{id:s,menuPattern:n,key:"".concat(s,"|").concat(e.subMenuId,"|").concat(e.chartId),...a,...e,part1:l}},u=e=>{const t=c.length>=2&&d===e?"".concat(l,"_").concat(d):l;return h({menuPattern:t})};switch(l){case"ap":case"net":case"powersupply":case"mount":return h({menu:l});case"cpufreq":case"cpuidle":return h({menu:"cpu"});case"smartd":case"web":return u("log");case"apache":return u("cache");case"bind":return u("rndc");case"go":return u("expvar");case"isc":return u("dhcpd");case"anomaly":return h({});case"disk":return/(inodes|space)/.test(r)||/(inodes|space)/.test(d)?h({menu:"mount"}):h({menu:l});case"k8s":return h("state"===d?{menu:"Kubernetes State"}:d&&"container"!==d?{menu:"Kubernetes ".concat(d)}:{menu:"Kubernetes Containers",flavour:"k8s"});case"cgroup":{const t=e.chartId.match(/.*[._/-:]qemu[._/-:]*/)||e.chartId.match(/.*[._/-:]kvm[._/-:]*/)?"cgqemu":"cgroup",n=1===c.length?"Containers & VMs":void 0;return h({menuPattern:t,sectionTitle:n})}case"ovpn":{const e=c.length>3&&"status"===c[1]&&"log"===c[2]?"".concat(l,"_").concat(d):l;return h({menuPattern:e})}case"prometheus":{if(i)return h({menu:"".concat(r.replace("-"," ")),menuIcon:"prometheus"});const t=e.subMenuId.split("_")[0];return h({menu:"".concat(t),menuIcon:"prometheus"})}case"tc":if("tc.qos"===s&&(!("family"in a)||(null===(t=a[l])||void 0===t?void 0:t[e.subMenuId])===e.subMenuId)){const[,t]=n.split(".");a[l]||(a[l]={}),a[l][e.subMenuId]=t.replace(/^(in_|out_)/,"").replace(/(_in|_out)$/,"")}return h({menu:l,priority:e.chartId.match(/.*-ifb$/)?e.priority-1:e.priority});case"dnsmasq":{if(2==c.length&&"dhcp"===c[1])return h({menu:"".concat(l,"_").concat(d)});if(c.length>=2&&"dhcp"===c[1])return h({menuPattern:"".concat(l,"_").concat(d)});const e=c.length>1?l:void 0;return h({menuPattern:e})}case"dns":return h({menu:"dns"});default:{const e=c.length>1?l:void 0;return h({menuPattern:e})}}}({chartId:n,subMenuId:a||"all",priority:r,visible:i,filteredOut:c,hidden:l},{name:s,context:o,submenuNames:t})})((e=>({...e,family:(0,d._3)(e.context,"family",e.family)}))(a),s))}));return[...e].sort(((e,t)=>{var s,a,o,r;return(null===(s=n[e])||void 0===s?void 0:s.priority)-(null===(a=n[t])||void 0===a?void 0:a.priority)||((null===(o=n[e])||void 0===o?void 0:o.key)||"").localeCompare((null===(r=n[t])||void 0===r?void 0:r.key)||"",void 0,{sensitivity:"accent",ignorePunctuation:!0})})).forEach((e=>{const t=n[e];if(!t)return;const s="".concat(t.id,"|").concat(t.subMenuId);r[s]||(r[s]=[]),a[t.id]||(a[t.id]=new Set),o[t.id]||(o[t.id]=[]),r[s].push(t.chartId),a[t.id].add(s),o[t.id].push(t.chartId)})),{chartMenus:n,menuGroups:a,menuGroupChartIds:o,subMenus:r,submenuNames:s}},p=function(e,t){let{os:n,extraKey:s}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a={};const{menuGroups:o,menuGroupChartIds:i,subMenus:c,submenuNames:l}=u(e,t,a),p={},m=Object.keys(o).reduce(((e,c)=>{const l=i[c],u=a[l[0]],m=l.find((e=>a[e].menuPattern)),g=m?a[m].menuPattern:"",f=[...o[c]],[b,y]=h("mainheads",l,t,{os:n});return Object.assign(p,b),e[c]={level:0,id:c,menuPattern:g,priority:u.priority,headIds:y,subMenuIds:f,subMenuChartIds:l,name:(0,d.e4)(u),icon:(0,d.ro)(u),info:(0,d.yn)(u),link:"".concat((0,r.A)("menu_".concat(c))),size:null!==y&&void 0!==y&&y.length?500:24,flavour:u.flavour,showConfig:!0,extraKey:s},e}),{}),g=Object.keys(c).reduce(((e,o)=>{var i;const u=c[o],g=a[u[0]],{id:f,menuPattern:b}=m[g.id],[y,v]=h("heads",u,t,{os:n});Object.assign(p,y);const _=b||f,w=g.subMenuId in(l[g.part1]||{})?"".concat(g.subMenuId," (").concat(null===(i=l[g.part1])||void 0===i?void 0:i[g.subMenuId],")"):(0,d.KG)(_,g.subMenuId);return e[o]={level:1,id:o,menuGroupId:f,priority:g.priority,chartIds:u,headIds:v,name:w,info:(0,d.Wr)(_,g.subMenuId),link:"".concat((0,r.A)("menu_".concat(g.id,"_submenu_").concat(g.subMenuId))),size:28,showConfig:!0,extraKey:s},e}),{}),f=Object.keys(o),b={},y=f.reduce(((e,s)=>{const a=m[s];return b[a.id]=!0,[...e,{...a,sticky:!0},...m[s].subMenuIds.reduce(((e,a)=>{const o=g[a];return b[o.id]=!0,[...e,{...o,sticky:!0},...g[a].chartIds.map((e=>{const o=t(e);if(o)return p[e]=(0,d.Ay)(o,{menuId:s,subMenuId:a,sectionInfo:g[a].info},{os:n}),{...p[e],level:2,size:365,menuKey:m[s].menuPattern||m[s].id}}))]}),[])]}),[]);return a=null,{stickyIds:b,allElements:y,menuGroupIds:f,menuGroupById:m,subMenuById:g,menuItemAttributesById:p}};var m=n(31438),g=n(55309),f=n(59090),b=n(18713),y=n(8320);const v=[],_=e=>{let{container:t,ids:n,getObject:s,children:o,getMenu:r=p,deps:i=v,...c}=e;const{allElements:l,menuGroupIds:d,menuGroupById:h,subMenuById:u,menuItemAttributesById:_,stickyIds:w}=(0,a.useMemo)((()=>r(n,s,c)),[s,n,...i]);return a.createElement(m.vN,{container:t,menuItemAttributesById:_,getObject:s,allElements:l,stickyIds:w},a.createElement(g.Ss,{ids:d},a.createElement(g.sF,{menuGroupById:h},a.createElement(f.zK,{subMenuById:u},a.createElement(b.Ny,null,a.createElement(y.Cs,null,o))))))},w=e=>a.createElement(o.Flex,(0,s.A)({column:!0,height:"100%",padding:[0,1],overflow:"hidden","data-testid":"dashboard-list"},e)),k=e=>{const t=(0,a.useRef)(),[n,r]=(0,a.useState)();return(0,a.useLayoutEffect)((()=>{r(t.current)}),[]),a.createElement(o.Flex,{ref:t,height:"100%",width:"100%",overflow:{vertical:"auto"}},n&&a.createElement(_,(0,s.A)({},e,{container:n})))}},26688:(e,t,n)=>{n.d(t,{A:()=>a});var s=n(94390);const a=()=>e=>{let{template:t,formData:n={},entityProps:a}=e;return{[s.D9]:!0,template:t,name:"",sourceType:"user",type:"job",formData:n,entityProps:a}}},56489:(e,t,n)=>{n.d(t,{A:()=>C});n(62953);var s=n(96540),a=n(83199),o=n(540),r=n(15327),i=n(74618),c=n(45765),l=n(78969),d=n(3914),h=n(80925),u=n(35304),p=n(69765),m=n(21591),g=n(67544),f=n(68980),b=n(28738),y=n(4967),v=n(8018),_=n(87659),w=n(24198),k=n(91517),T=n(2025),S=n(18202);const M=(0,s.memo)((e=>{let{id:t,spaceId:n,roomId:o,chartId:r,name:i}=e;const[c,,l,u]=(0,_.A)(),{fullyLoaded:m,processing:b}=(0,f.fz)(t),y=(0,T.DH)(t,{onSuccess:()=>{(0,w.jE)("Chart added to ".concat(i)),u()}}),v=c&&m,M=(0,d.ns)(n,"slug"),x=(0,p.wz)(o,"slug"),C=(0,g.nM)(t),P=(0,k.A)(c&&t,{spaceId:n,spaceSlug:M,roomId:o,roomSlug:x}),B=(0,h.e)();(0,s.useEffect)((()=>{if(P||!v)return;const e=B.getNode({id:r}),t=(0,S.A)(e.getAttributes());C(t.contextScope,t,(()=>setTimeout(y,100)))}),[v,P]);const q=c&&(b||P);return s.createElement(a.Button,{icon:"plus",onClick:l,isLoading:q,disabled:q,alignSelf:"end"})})),x=e=>{let{spaceId:t,roomId:n,chartId:o}=e;return[{id:"name",accessorKey:"name",header:"Dashboards",cell:e=>{let{getValue:t}=e;return s.createElement(a.Flex,{alignItems:"center",gap:3},s.createElement(a.Icon,{name:"dashboards",size:"small",color:"text"}),s.createElement(a.Text,null,t()))}},{id:"plusButton",accessorKey:"id",header:"",cell:e=>{let{getValue:a,row:r}=e;return s.createElement(M,{id:a(),spaceId:t,roomId:n,chartId:o,name:r.original.name})}}]},C=e=>{let{onClose:t}=e;(0,u.A)();const n=(0,p.ID)(),_=(0,p.XA)("name"),w=(0,d.vt)(),{params:k={},params:{chartId:T}}=(0,o.A)("addToDashboardModal"),S=(0,m.q)(),M=(0,f.Sf)(S),[C,P]=(0,s.useState)(""),[B,q]=(0,s.useState)(!1),I=C.length>0,L=(0,g.W6)(w,n,{onSuccess:t}),A=(0,h.e)().getNode({id:T}),E=(0,s.useMemo)((()=>x({spaceId:w,roomId:n,chartId:T})),[w,n,T]),D=()=>{if(!A)return;const{aggregationMethod:e,selectedDimensions:t,groupBy:n,groupByLabel:s,groupingMethod:a,chartType:o,selectedLabels:r,nodesScope:i,selectedInstances:c,selectedNodes:l,contextScope:d}=A.getAttributes(),[h]=d;L(C,d,{...(0,y.L)(h),aggregationMethod:e,selectedDimensions:t,groupBy:n,groupByLabel:s,groupingMethod:a,chartType:o,selectedLabels:r,nodesScope:i,selectedInstances:c,selectedNodes:l})},N=(0,m.RQ)();return s.createElement(r.GO,{onClose:t},s.createElement(i.z,{onClose:t,title:"Add to Dashboard"}),s.createElement(c.U,null,"Select Dashboard"),s.createElement(r.Yv,{gap:3,overflow:"hidden",height:"100%"},s.createElement(a.H6,null,"Add chart to one or more dashboards from the ",_),N?s.createElement(a.Table,{dataColumns:E,data:M}):s.createElement(b.A,{title:"Loading dashboards..."}),s.createElement(a.Flex,{column:!0,padding:[3,0],gap:1},s.createElement(a.H6,null,"Create a new dashboard and add ",T," to it"),s.createElement(v.A,{value:C,label:"Name",onChange:e=>P(e.target.value),isValid:B,setIsValid:q,isDirty:I,instantFeedback:"all",onKeyDown:e=>e.keyCode===l.I7&&B&&D}),s.createElement(a.Button,{label:"Create & add",onClick:D,disabled:!A||!C}))))}},667:(e,t,n)=>{n.d(t,{A:()=>r});n(62953);var s=n(96540),a=n(27776),o=n(38819);const r=()=>{const e=(0,o.PP)(),[t,n]=(0,a.XL)(),{reset:r}=(0,a.b8)(),i=(0,s.useCallback)((()=>{r(),(0,o.Z8)({...e,integrationsModalOpen:"true"}),n("true")}),[r,e]);return{isIntegrationsVisible:t,hideIntegrations:(0,s.useCallback)((()=>{(0,o.Z8)({...e,integrationsModalOpen:""}),n("")}),[e]),onIntegrationsClick:i}}},99739:(e,t,n)=>{n.d(t,{S:()=>L,A:()=>A});var s=n(58168),a=(n(62953),n(96540)),o=n(83199),r=n(87659),i=n(69765),c=n(31348),l=n(62329),d=(n(41393),n(81454),n(8711)),h=n(55463),u=n(96083),p=n(18682);const m=(0,d.default)(o.Flex).withConfig({displayName:"adminsList__RowFlex",componentId:"sc-1pb9ob2-0"})(["&:hover{background:",";}"],(0,o.getColor)("elementBackground")),g=(0,d.default)(o.Icon).withConfig({displayName:"adminsList__StyledIcon",componentId:"sc-1pb9ob2-1"})(["cursor:pointer;"]),f=e=>{let{...t}=e;const n=(0,h.i3)();return a.createElement(o.Flex,(0,s.A)({column:!0,border:{side:"top",color:"borderSecondary"},flex:"grow",padding:[1,0],height:{max:50},overflow:"auto"},t),n.map((e=>a.createElement(m,{flex:{grow:0,shrink:0},key:e.id,padding:[0,4],justifyContent:"between",height:10,alignItems:"center"},a.createElement(o.Flex,{key:e.id,gap:2,alignItems:"center"},a.createElement(u.A,{src:e.avatarURL,title:e.name}),a.createElement(o.Text,null,e.name),a.createElement(o.Text,{color:"textLite"},e.email)),a.createElement(g,{onClick:(0,p.C)(e.email,{text:"Admin email address copied to your clipboard."}),size:"small",name:"copy",color:"primary"})))))},b=(0,d.default)(o.Icon).withConfig({displayName:"styled__StyledWarningIcon",componentId:"sc-q96c2w-0"})(["border-radius:50%;overflow:hidden;background:",";"],(0,o.getColor)(["neutral","white"])),y=(0,d.default)(o.Icon).withConfig({displayName:"styled__StyledCheckmarkIcon",componentId:"sc-q96c2w-1"})(["border-radius:50%;overflow:hidden;background:",";padding:6px;width:24px;height:24px;"],(0,o.getColor)("elementBackground")),v=(0,d.default)(o.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-q96c2w-2"})(["transform:",";"],(e=>{let{closed:t}=e;return t?"none":"rotate(180deg)"}));var _=n(4659);const w=e=>{let{gaPrefix:t="onboarding",...n}=e;return a.createElement(o.Flex,(0,s.A)({column:!0,gap:1,color:"textDescription"},n),a.createElement(o.Text,null,"Need help?"),a.createElement(o.Text,null,"Use our"," ",a.createElement(_.A,{href:"https://community.netdata.cloud/",target:"_blank","data-ga":"".concat(t,"::click-forums::allpages")},"forums")," ","or public"," ",a.createElement(_.A,{href:"https://discord.gg/mPZ6WZKKG2",target:"_blank","data-ga":"".concat(t,"::click-discord::allpages")},"discord channel")))};var k=n(9683),T=n(83084),S=n(46741),M=n(68831),x=n(47767),C=n(71847);const{demoSlug:P}=M.A,B=(0,d.default)(o.Button).withConfig({displayName:"headerButtons__StyledButton",componentId:"sc-11mwk9m-0"})(["&&{padding:2px 16px;font-size:12px;height:auto;width:auto;min-width:96px;}"]),q=()=>{const e=(0,x.Zp)();return a.createElement(o.Flex,{gap:4,alignItems:"center"},a.createElement(_.A,{href:"https://learn.netdata.cloud/docs/deployment-guides/deployment-strategies",rel:"noopener noreferrer",target:"_blank"},"Possible Deployment Strategies"),!window.envSettings.onprem&&a.createElement(B,{"data-ga":"no-nodes-view::click-demo::no-nodes-header",flavour:"default",onClick:t=>{e("/spaces/".concat(P)),(0,C.H)("no-nodes-view","click-demo","no-nodes-header"),t.preventDefault()},label:"Live Demo"}))};var I=n(77173);const L=()=>a.createElement(a.Fragment,null,a.createElement(o.Flex,{column:!0,"data-testid":"noNodesView-memberSection",gap:1},a.createElement(o.Flex,{alignItems:"center","data-testid":"noNodesView-memberHeader",gap:4,height:10,padding:[0,3]},a.createElement(y,{"data-testid":"noNodesView-memberHeaderIcon",name:"checkmark_s",color:"textLite"}),a.createElement(o.Flex,{justifyContent:"between",flex:!0},a.createElement(o.H3,{color:"textDescription","data-testid":"noNodesView-memberHeaderText"},"You are a member and only space admins can connect new nodes"),a.createElement(q,null))),a.createElement(o.Flex,{"data-testid":"noNodesView-memberDescription",padding:[0,0,2,13]},a.createElement(o.Text,{color:"textDescription","data-testid":"noNodesView-memberDescriptionText"},"Contact an admin from the space in order to do so"))),a.createElement(o.Flex,{"data-testid":"noNodesView-memberAdminsListSection",padding:[0,0,0,12]},a.createElement(f,{"data-testid":"noNodesView-memberAdminsList"}))),A=e=>{let{videoId:t}=e;const n=(0,i.ID)(),[d,{onAddNodes:h,selectedNodes:u}]=(0,c.A)(n),{claimedNodeIds:p}=d,m=p.length>0,[g,f]=(0,r.A)(!0),_=(0,S.JT)("node:Create");return a.createElement(T.A,{column:!1,"data-testid":"noNodesViewPage",gap:12,padding:[6],margin:[0,0,8],overflow:"auto"},a.createElement(o.Flex,{column:!0,"data-testid":"noNodesView-cmdSection",flex:{grow:0,shrink:1},width:"100%",gap:2},a.createElement(o.Flex,{"data-testid":"noNodesView-warningBanner",alignItems:"center",background:"warningBackground",gap:4,height:{min:10},padding:[0,3],round:!0},a.createElement(b,{"data-testid":"noNodesView-warningBannerIcon",name:"exclamation",color:"warning"}),a.createElement(o.Text,{"data-testid":"noNodesView-warningBannerText"},"You have no nodes.")),_&&a.createElement(a.Fragment,null,a.createElement(o.Flex,{alignItems:"center","data-testid":"noNodesView-adminSection",justifyContent:"between",onClick:m?f:null,cursor:m?"pointer":null},a.createElement(o.Flex,{alignItems:"center","data-testid":"noNodesView-adminHeader",gap:4,height:10,padding:[0,3]},a.createElement(y,{"data-testid":"noNodesView-adminHeaderIcon",name:"checkmark_s",color:"textLite"}),a.createElement(o.H3,{"data-testid":"noNodesView-adminHeaderText",color:"textDescription"},"Connect new nodes")),a.createElement(o.Flex,{gap:4,alignItems:"center"},a.createElement(q,null),m&&a.createElement(v,{closed:!g,"data-testid":"noNodesView-adminClaimedNodesIcon",name:"chevron_down",color:"textLite"}))),a.createElement(o.Collapsible,{"data-testid":"noNodesView-adminClaimNodesContainer",open:g},a.createElement(o.Flex,{"data-testid":"noNodesView-adminClaimNodes",padding:[0,0,0,12]},a.createElement(I.A,{rooms:[n]})))),!_&&a.createElement(L,null),m&&a.createElement(a.Fragment,null,a.createElement(o.Flex,{alignItems:"center","data-testid":"noNodesView-availableNodesHeader",gap:4,height:10,padding:[0,3]},a.createElement(y,{"data-testid":"noNodesView-availableNodesHeaderIcon",name:"checkmark_s",color:"textLite"}),a.createElement(o.H3,{color:"textDescription","data-testid":"noNodesView-availableNodesHeaderText"},"Add already available nodes")),a.createElement(o.Flex,{height:"100%","data-testid":"noNodesView-availableNodesContainer",padding:[0,0,0,12]},a.createElement(l.A,(0,s.A)({"data-testid":"noNodesView-availableNodesList"},d,{onAddNodes:h,canAddNodes:!!u.length,padding:[2,0,8]}))))),t&&a.createElement(o.Flex,{column:!0,"data-testid":"noNodesView-videoSection",flex:{shrink:0,grow:0}},a.createElement(k.A,{"data-testid":"noNodesView-onboardingVideo",height:296,width:520,videoId:t}),a.createElement(w,{"data-testid":"noNodesView-needHelp",padding:[8,0]})))}},78062:(e,t,n)=>{n.d(t,{A:()=>h});var s=n(58168),a=n(96540),o=n(83199),r=n(28146),i=n(69765),c=n(3914),l=n(53285);var d;const h=(d=o.Button,e=>{const t=(0,i.XA)(),n=(0,c.dg)();return a.createElement(l.A,{permission:"node:Create"},(i=>{const c=a.createElement(d,(0,s.A)({disabled:!i},e));return i?c:a.createElement(r.A,{content:n?"You are viewing your local node, connect to cloud and connect multiple nodes to view at once":"Only admin users can add nodes to ".concat(t.name),"data-testid":"addNodeTooltipContainer"},a.createElement(o.Box,null,c))}))})},78940:(e,t,n)=>{n.d(t,{DK:()=>d,Iv:()=>h,SB:()=>l,SX:()=>c,Wu:()=>a,Yo:()=>i,_V:()=>o,jH:()=>r,qt:()=>s,xc:()=>u});const s="silencingRules",a={system:{text:"All users",tooltip:"Rule affects all users"},personal:{text:"Myself",tooltip:"Limit the silencing effect to your account only"}},o="system",r={label:"All rooms",value:""},i={now:{text:"Silence for a specific duration",tooltip:"Rule starts immediately and lasts until the specified duration"},schedule:{text:"Schedule silence",tooltip:"Schedule the rule to start taking effect at some point at the future"}},c="now",l={untilTurnedOff:"Until turned off",oneHour:"1 hour",sixHours:"6 hours",twelveHours:"12 hours",oneDay:"1 day",custom:"Custom"},d={label:"Until turned off",value:"untilTurnedOff"},h={border:{side:"all",color:"inputBorder"},padding:[1,2],margin:[0,0,.5,0],round:!0,justifyContent:"start"},u={ErrInvalidName:"No rule name provided",ErrCodeInvalidStartsAt:"Invalid or no start date provided",ErrCodeInvalidSLastUntil:"Invalid or no end date provided",ErrCodeInvalidScheduleDuration:"Invalid duration selected",ErrCodeInvalidSeverity:"Invalid severity",ErrCodeInvalidIntegration:"Invalid integration",ErrCodeNotOwnRule:"Not permitted to create system rules"}},90535:(e,t,n)=>{n.d(t,{A:()=>f});n(41393),n(81454),n(62953);var s=n(96540),a=n(83199),o=n(47762),r=n(11128);const i=e=>{let{children:t}=e;return s.createElement(a.Flex,{"data-testid":"selected-nodes-container",alignItems:"center",width:"100%"},s.createElement(a.Flex,{alignItems:"center"},s.createElement(a.TextSmall,{whiteSpace:"nowrap","data-testid":"selected-nodes-container-message",color:"primary"},"Selected filters:")),s.createElement(a.Flex,{overflow:"hidden",padding:[1],gap:1,alignItems:"center",flexWrap:!0},t))},c=(0,s.memo)(i);var l=n(4659);const d=e=>{let{onRemove:t}=e;return s.createElement(a.Box,{"data-testid":"remove-button",as:a.Icon,name:"close_circle",onClick:t,cursor:"pointer",width:3,height:3,color:"textLite"})},h=(0,s.forwardRef)(((e,t)=>{let{removeFilter:n,group:o,id:r,value:i,isAnchorDisabled:c,onClick:h}=e;const[u,p]=i.split("|"),m=p?"".concat(u," > ").concat(p):u;return s.createElement(a.Flex,{width:"100%",ref:t,"data-testid":"selected-node-item-".concat(r)},s.createElement(a.Pill,{flavour:"neutral",hollow:!0},s.createElement(a.Flex,{position:"relative",gap:2,alignItems:"center"},h?s.createElement(l.A,{Component:a.TextSmall,disabled:c,onClick:h,cursor:"pointer",color:"text",hoverColor:"primary",visitedColor:"accent",disabledColor:"textLite"},m):s.createElement(a.TextSmall,null,m),s.createElement(d,{onRemove:()=>n({param:o,removedValue:r}),id:r}))))})),u=(0,s.memo)(h),p={selectedNodeIds:"Node",nodeStatuses:"Status",nodeLabels:"Host label",nodeCapabilities:"Capability",nodeVersions:"Version"},m=(0,s.forwardRef)(((e,t)=>{let{group:n,values:o,hasUnion:r,union:i="AND",removeFilter:c,Component:l=u}=e;const d=p[n];return null!==o&&void 0!==o&&o.length?s.createElement(s.Fragment,{key:"filter"},r&&s.createElement(a.TextSmall,{strong:!0},i),s.createElement(a.Pill,{flavour:"neutral",hollow:!0,gap:1,TextComponent:a.Flex,textProps:{alignItems:"center",gap:1},flexWrap:!0},s.createElement(a.TextNano,{strong:!0},d,":"),o.map(((e,t)=>s.createElement(s.Fragment,{key:e},t>0&&s.createElement(a.TextSmall,{strong:!0},"OR"),s.createElement(l,{removeFilter:c,id:e,value:e,group:n})))))):null})),g=(0,s.forwardRef)(((e,t)=>{let{removeFilter:n,value:a}=e;const r=(0,o.xY)(a,"name"),i=(0,o.xY)(a,"isOffline"),c=(0,o.d3)(a);return s.createElement(u,{ref:t,removeFilter:n,group:"selectedNodeIds",id:a,value:r,isAnchorDisabled:i,onClick:c})})),f=(0,s.memo)((e=>{let{flavour:t}=e;const[[n,o=[]],i]=(0,r._e)({extraKey:t,merge:!1});return n.length||o.length?s.createElement(a.Flex,{width:"100%",overflow:"hidden"},s.createElement(c,null,n.map(((e,t)=>{let[n,a]=e;return s.createElement(m,{key:n,group:n,values:a,hasUnion:t>0,removeFilter:i})})),s.createElement(m,{group:"selectedNodeIds",values:o,hasUnion:!!n.length&&!!o.length,union:"OR",removeFilter:i,Component:g}))):s.createElement("div",null)}))},35243:(e,t,n)=>{n.d(t,{G:()=>i,N:()=>r});n(3064),n(98992),n(72577);var s=n(47444),a=n(80925);const o=(0,s.eU)({key:"currentChartsContainerKey",default:null}),r=()=>{const e=(0,a.e)(),t=(0,s.vc)(o);return e&&e.getRoot().getChildren().find((e=>e.match({id:t})))},i=()=>(0,s.lZ)(o)},60177:(e,t,n)=>{n.d(t,{$n:()=>d,GK:()=>c,Ml:()=>o,R8:()=>r,_x:()=>u,jf:()=>i,nr:()=>a,ul:()=>l,ve:()=>h});var s=n(47444);const a=(0,s.Iz)({key:"homePageNodeDetailsId",default:null}),o={loaded:!1,error:!1,nodes:{},replicationFactor:{},totalChildren:0,totalParents:0},r=(0,s.Iz)({key:"replicationStats",default:o}),i={loaded:!1,error:!1,alerts:[],nodes:{critical:0,warning:0,total:0,hosts:{}}},c=(0,s.Iz)({key:"alertsStats",default:i}),l={loaded:!1,error:!1,stability:{}},d=(0,s.Iz)({key:"stability",default:l}),h={loaded:!1,error:!1,dataRetention:[],metricsCollected:0},u=(0,s.Iz)({key:"chartsStats",default:h})},89879:(e,t,n)=>{n.d(t,{A:()=>f});var s=n(58168),a=(n(3064),n(41393),n(98992),n(72577),n(81454),n(62953),n(96540)),o=n(47767),r=n(83199),i=n(31604),c=n(47762),l=n(81048),d=n(35119),h=n(50065),u=n(12352);const p=e=>{var t;const n=null===(t=Object.entries(l.j8).find((t=>{let[,n]=t;return n==e})))||void 0===t?void 0:t[0];return d.$S[n]||"offline"},m=e=>{let{id:t,hostname:n,status:s,flavour:i}=e;const l=(0,o.Zp)(),d=(0,c.Zl)(t),h="sidebar"==i,u=(0,a.useCallback)((()=>l(d)),[d]);return a.createElement(r.Flex,{key:t,gap:2,justifyContent:"between"},a.createElement(r.Flex,{gap:2},a.createElement(r.Icon,{name:"dot",width:"8px",color:p(s)}),a.createElement(r.Text,null,n)),h&&a.createElement(r.Icon,{name:"goToNode",color:"text",onClick:u,cursor:"pointer"}))},g=e=>{let{nodes:t,flavour:n,limit:o=10}=e;return t=t||[],t.length?"sidebar"==n||t.length<=o?t.map((e=>a.createElement(m,(0,s.A)({key:e.id,flavour:n},e)))):a.createElement(r.Flex,{column:!0,gap:2},t.slice(0,o).map((e=>a.createElement(m,(0,s.A)({key:e.id,flavour:n},e)))),a.createElement(r.Text,{color:"primary"},t.length-o," more items")):"-"},f=e=>{let{id:t,flavour:n="tooltip"}=e;const s=(0,i.c8)(),{loaded:o,nodes:c}=s||{},{children:l,parents:d}=(null===c||void 0===c?void 0:c[t])||{};return o?"sidebar"==n?a.createElement(h.A,{name:"Replication"},a.createElement(u.A,{size:"small",name:"Parents"},a.createElement(g,{nodes:d,flavour:n})),a.createElement(u.A,{size:"small",name:"Children"},a.createElement(g,{nodes:l,flavour:n}))):a.createElement(r.Flex,{column:!0,gap:2},a.createElement(r.Flex,{column:!0,gap:1},a.createElement(r.Text,null,"Parents"),a.createElement(g,{nodes:d,flavour:n})),a.createElement(r.Flex,{column:!0,gap:1},a.createElement(r.Text,null,"Children"),a.createElement(g,{nodes:l,flavour:n}))):null}},35119:(e,t,n)=>{n.d(t,{$S:()=>d,AZ:()=>p,Cc:()=>u,Hl:()=>g,Hn:()=>l,Ug:()=>o,XJ:()=>c,jZ:()=>i,nv:()=>r,q5:()=>h,vd:()=>f,w9:()=>s});const s={none:{label:"None",value:"none",canAddNodes:!0},status:{label:"Status",value:"status",canAddNodes:!1},os:{label:"OS",value:"os",canAddNodes:!0},version:{label:"Agent version",value:"version",canAddNodes:!1},technology:{label:"Technology",value:"technology",canAddNodes:!0},stability:{label:"Connection stability",value:"stability",canAddNodes:!1},replication:{label:"Replication factor",value:"replication",canAddNodes:!1},cloudProvider:{label:"Cloud provider",value:"cloudProvider",canAddNodes:!1},cloudRegion:{label:"Cloud region",value:"cloudRegion",canAddNodes:!1},instanceType:{label:"Instance type",value:"instanceType",canAddNodes:!1}},a={r_1:"None",r_2:"Single","r_*":"Multi"},o={replication:a},r=s.none,i=s.status,c=[r,s.status,s.os,s.technology,s.version,s.replication,s.cloudProvider,s.cloudRegion,s.instanceType],l=[i,s.stability,s.replication],d={live:"success",offline:"offline",stale:"stale",unseen:"unseen"},h={r_1:["blue","indigo"],r_2:["purple","lilac"],"r_*":["purple","lilacFocus"]},u={[s.status.value]:d,[s.stability.value]:{stable:"success",unstable:"error"},[s.replication.value]:h},p={[s.os.value]:e=>({group:e.os.nm,type:e.os.id}),[s.version.value]:e=>({group:e.version}),[s.status.value]:e=>({group:e.nodeStatus}),[s.technology.value]:e=>({group:e.technology,type:e.technology}),[s.replication.value]:e=>({group:e.replicationFactor}),[s.cloudProvider.value]:e=>{var t;return{group:null===(t=e.labels)||void 0===t?void 0:t.cloud_provider}},[s.cloudRegion.value]:e=>{var t;return{group:null===(t=e.labels)||void 0===t?void 0:t._cloud_instance_region}},[s.instanceType.value]:e=>{var t;return{group:null===(t=e.labels)||void 0===t?void 0:t._cloud_instance_type}}},m={[s.replication.value]:e=>a[e],default:e=>e},g=e=>{const t=m[e];return t||m.default},f={isHover:!1,nodes:[]}},31604:(e,t,n)=>{n.d(t,{A$:()=>i,N3:()=>p,P9:()=>y,SW:()=>g,c8:()=>l,jg:()=>u,kf:()=>f,s6:()=>d,xs:()=>v});var s=n(47444),a=n(60177),o=n(3914),r=n(69765);const i=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.L4)((0,a.nr)({spaceId:e,roomId:t}))},c=(0,s.K0)({key:"replicationStatsState",get:e=>{let{spaceId:t,roomId:n}=e;return()=>(0,a.R8)({spaceId:t,roomId:n})},set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{set:o}=e;o((0,a.R8)({spaceId:t,roomId:n}),s)}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),l=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.vc)((0,a.R8)({spaceId:e,roomId:t}))},d=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.lZ)(c({spaceId:e,roomId:t}))},h=(0,s.K0)({key:"alertsStatsState",get:e=>{let{spaceId:t,roomId:n}=e;return()=>(0,a.GK)({spaceId:t,roomId:n})},set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{set:o}=e;o((0,a.GK)({spaceId:t,roomId:n}),s)}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),u=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.vc)(h({spaceId:e,roomId:t}))},p=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.lZ)(h({spaceId:e,roomId:t}))},m=(0,s.K0)({key:"stabilityState",get:e=>{let{spaceId:t,roomId:n}=e;return()=>(0,a.$n)({spaceId:t,roomId:n})},set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{set:o}=e;o((0,a.$n)({spaceId:t,roomId:n}),s)}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),g=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.vc)(m({spaceId:e,roomId:t}))},f=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.lZ)(m({spaceId:e,roomId:t}))},b=(0,s.K0)({key:"chartsStatsState",get:e=>{let{spaceId:t,roomId:n}=e;return()=>(0,a._x)({spaceId:t,roomId:n})},set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{set:o}=e;o((0,a._x)({spaceId:t,roomId:n}),s)}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),y=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.vc)(b({spaceId:e,roomId:t}))},v=()=>{const e=(0,o.vt)(),t=(0,r.ID)();return(0,s.lZ)(b({spaceId:e,roomId:t}))}},69388:(e,t,n)=>{n.d(t,{A:()=>u});n(62953);var s=n(96540),a=n(92138),o=n(83957),r=n(45467),i=n(67742),c=n(23931),l=n(27467),d=n(63129),h=n(61658);const u=function(e,t){let{spaceId:n,autorun:u=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const[p,m]=(0,s.useState)(null),{after:g,before:f}=(0,l.rW)(),b=(0,s.useRef)();b.current={after:g<0?g:Math.floor(g/1e3),before:g<0?0:Math.ceil(f/1e3)};const y=(0,s.useRef)(!0),v=e=>{if(e&&null!==e&&void 0!==e&&e.response){const{data:t}=e.response,{errorMsgKey:n}=t;m(n)}else k((e=>({...e,contextsHardHash:"invalid"}))),m(e)},_=(0,s.useMemo)((()=>(0,h.O)(p)?5e3:65e3),[p]),w=(0,s.useRef)(),k=(0,c.DQ)(e,!0),T=e=>{let{results:t,versions:n}=e;k((e=>({...e,contextsHardHash:"invalid",...n}))),m((!t||!Object.keys(t).length)&&"No data for this period")},{contextsHardHash:S}=(0,c.jI)(e),M=(0,a.A)(S,!0);return(0,i.A)((()=>y.current=!0),5e3),(0,r.A)((()=>{k((e=>({...e,contextsHardHash:"invalidating"}))),y.current=!0}),[t]),(0,o.A)((()=>({cache:!1,key:"spaces.".concat(n,".rooms.").concat(e,".charts"),polling:!1,autorun:u||Boolean(n&&e),fetch:()=>(y.current=!1,(0,d.a9)(n,e,t,{...b.current})),association:{getIds:()=>(0,c.Uo)({roomId:e,merge:w.current===t}),getError:()=>(0,c.Zr)({id:e,key:"error"}),getLoaded:()=>(0,c.Zr)({id:e,key:"loaded"}),getUpdatedAt:()=>(0,c.Zr)({id:e,key:"updatedAt"})},getResource:t=>(0,c.YP)({id:e,key:t}),getResourcesInitializer:()=>{const n=(0,c.b0)({id:e,merge:w.current===t,nodeIds:t});return w.current=t,n},getResourceInitialState:e=>({fullyLoaded:!0,...e}),onFail:v,pollingOptions:{pollingInterval:_},onReceive:T,after:g,nodeIds:t,force:!0,skip:!y.current||!M&&!!S||"invalidating"===M&&!!S})),[n,e,_,S,g,f]),p}},35304:(e,t,n)=>{n.d(t,{A:()=>h});n(9920),n(41393),n(98992),n(3949),n(81454);var s=n(96540),a=n(47444),o=n(68980),r=n(99090),i=n(3914),c=n(69765),l=n(63129),d=n(21591);const h=()=>{const e=(0,i.vt)(),t=(0,c.ID)(),n=(0,a.Zs)((e=>{let{set:n}=e;return function(){let{data:{results:e}={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n((0,d.z_)({id:t,key:"loaded"}),!0),null!==e&&void 0!==e&&e.length){const s=e.sort(((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:"accent",ignorePunctuation:!0})));s.forEach((e=>n((0,o._d)(e.id),(t=>({...t,loaded:!0,...e})))));const a=s.map((e=>{let{id:t}=e;return t}));n((0,d.z_)({id:t,key:"ids"}),a)}}})),h=(0,s.useCallback)((()=>{(0,l.SJ)(e,t).then(n).catch((()=>{}))}),[e,t]);return(0,r.A)((()=>({polling:!1,enabled:!!e&&!!t,fetch:()=>(0,l.SJ)(e,t),onReceive:n})),[e,t]),h}},18925:(e,t,n)=>{n.d(t,{xS:()=>h,yK:()=>d,z2:()=>u});n(62953);var s=n(96540),a=n(3914),o=n(69765),r=n(71835),i=n(61649),c=n(45894),l=n(44644);const d=function(){let{spaceId:e,roomId:t,onSuccess:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const s=(0,a.vt)(),d=(0,o.ID)(),[,h]=(0,r.A)(),u=(0,l.A3)({spaceId:s,roomId:d});return(0,i.A)((function(){let{type:a,entity:o,scope:r="personal",name:i="default",path:l,value:p={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,c.xt)(e||s,{type:a,entity:o,scope:r,name:i,path:l,value:p,roomID:t||d}).then((e=>{let{data:t}=e;u(t),null===n||void 0===n||n(t)})).catch((e=>{var t;h((null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data)||(null===e||void 0===e?void 0:e.message)||e)}))}),[e,t,s,d])},h=function(e){let{spaceId:t,roomId:n,onSuccess:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const d=(0,l.ti)(e),h=(0,a.vt)(),u=(0,o.ID)(),[,p]=(0,r.A)(),m=(0,l.Vd)({spaceId:h,roomId:u});return(0,i.A)((function(){let{type:a,entity:o,scope:r,name:i,path:l,value:g}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,c.cD)(t||h,e,{type:a||d.type,entity:o||d.entity,scope:r||d.scope,name:i||d.name,path:l||d.path,value:g||d.value,version:d.version,roomID:n||u}).then((e=>{let{data:t}=e;m({...t,prevSetting:d}),null===s||void 0===s||s(t)})).catch((e=>{var t;p((null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data)||(null===e||void 0===e?void 0:e.message)||e)}))}),[t,n,h,u,d])},u=function(e){let{spaceId:t,onSuccess:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=(0,a.vt)(),[,i]=(0,r.A)(),d=(0,l.G4)(e,{spaceId:o});return(0,s.useCallback)((async()=>{try{const s=await(0,c.A8)(t||o,e);d(),null===n||void 0===n||n(s)}catch(a){var s;i((null===a||void 0===a||null===(s=a.response)||void 0===s?void 0:s.data)||(null===a||void 0===a?void 0:a.message)||a)}}),[])}},45894:(e,t,n)=>{n.d(t,{A8:()=>c,Uc:()=>o,cD:()=>i,xt:()=>r});var s=n(26655),a=n(49286);const o=function(e,t){let{types:n=[],entities:o=[],paths:r=[],names:i=[]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s.A.post("/api/v3/spaces/".concat(e,"/rooms/").concat(t,"/settings/search"),{types:n,entities:o,paths:r,names:i},{transform:e=>(0,a.bn)(e,{depth:0})})},r=(e,t)=>s.A.post("/api/v3/spaces/".concat(e,"/settings"),t,{transform:a.bn}),i=(e,t,n)=>s.A.put("/api/v3/spaces/".concat(e,"/settings/").concat(t),n,{transform:a.bn}),c=(e,t)=>s.A.delete("/api/v3/spaces/".concat(e,"/settings/").concat(t),{transform:a.bn})},15041:(e,t,n)=>{n.d(t,{CB:()=>o,FU:()=>r,gc:()=>i});var s=n(47444),a=n(38819);const o=(0,s.Iz)({key:"settingAtom",default:{}}),r=(0,s.Iz)({key:"settingAtom",default:[]}),i=(0,s.Iz)({key:"settingSelectionAtom",default:e=>{let{spaceId:t,roomId:n,type:s,entity:o}=e;const r=(0,a.W6)([t,n,s,o,"setting"].join("-"));return"undefined"!==r&&"null"!==r&&r?r:null},effects:e=>{let{spaceId:t,roomId:n,type:s,entity:o}=e;return[e=>{let{onSet:r}=e;r(((e,r)=>{if(e!==r){const r=[t,n,s,o,"setting"].join("-");if(!e)return void(0,a.Pg)([r]);(0,a.Z8)({[r]:e})}}))}]}})},40933:(e,t,n)=>{n.d(t,{_:()=>d});n(17333),n(41393),n(14905),n(8159),n(98992),n(54520),n(81454),n(8872),n(37550),n(62953);var s=n(47444),a=n(3914),o=n(69765),r=n(15041);const i={name:(e,t)=>{const n="string"===typeof t?t.toLowerCase():"";return Object.entries(e).some((e=>{let[t,s]=e;return null!==s&&"undefined"!==typeof s&&(Array.isArray(s)?s.some((e=>String(e).toLowerCase().includes(n))):("object"===typeof s&&Object.keys(s).some((e=>String(s[e]).toLowerCase().includes(n))),String(s).toLowerCase().includes(n)))}))}},c=e=>t=>!e.some((e=>{let[n,s]=e;return i[n]?!i[n](t,s):!(e=>(t,n)=>{if(!Array.isArray(n)||!n.length)return!0;let s=t[e];return"number"===typeof s?(s=parseFloat(s),n.some((e=>parseFloat(e)===s))):n.includes(s)})(n)(t,s)})),l=(0,s.K0)({key:"settingsFiltered",get:e=>{let{spaceId:t,roomId:n,omit:s,keepAll:a,params:o}=e;return e=>{let{get:i}=e;const l=i((0,r.FU)({spaceId:t,roomId:n}));if(!l)return l||[];const d=s?s.split(":::"):[],h=Object.keys(o).reduce(((e,t)=>(d.includes(t)||e.push([t,o[t]]),e)),[]);if(!h.length)return l;const u=c(h);return a?l.map((e=>u(e)?e:{...e,hidden:!0})):l.filter((e=>u(e)))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),d=function(){let{spaceId:e,roomId:t,omit:n,keepAll:r=!1,params:i={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const c=(0,a.vt)(),d=(0,o.ID)();return(0,s.vc)(l({spaceId:e||c,roomId:t||d,omit:n,keepAll:r,params:i}))}},44644:(e,t,n)=>{n.d(t,{A3:()=>g,CS:()=>w,G4:()=>v,Mg:()=>p,Vd:()=>b,WY:()=>T,ti:()=>u});n(17333),n(9920),n(14905),n(98992),n(54520),n(3949),n(8872);var s=n(96540),a=n(47444),o=n(21283),r=n.n(o),i=n(65570),c=n(3914),l=n(69765),d=n(15041);const h=(0,a.K0)({key:"settingSelector",get:e=>t=>{let{get:n}=t;return n((0,d.CB)(e))},set:e=>(t,n)=>{let{set:s}=t;s((0,d.CB)(e),(e=>({...e,...n})))}}),u=e=>(0,a.vc)(h(e)),p=(0,a.K0)({key:"settingsInitialize",get:()=>()=>null,set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{get:a,set:o}=e;o((0,d.FU)({spaceId:t,roomId:n}),(e=>r()(e,s,((e,t)=>(0,i.Ay)(e,t,{keep:["scope","type","entity","path","name"]}))))),s.forEach((e=>{o(h(e.id),e)}))}}}),m=(0,a.K0)({key:"settingCreate",get:()=>()=>null,set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{set:a}=e;a((0,d.FU)({spaceId:t,roomId:n}),(e=>r()(e,[s],((e,t)=>(0,i.Ay)(e,t,{keep:["scope","type","entity","path","name"]}))))),a(h(s.id),s),a((0,d.gc)({spaceId:t,roomId:n,type:s.type,entity:s.entity}),s.id)}}}),g=function(){let{spaceId:e,roomId:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,c.vt)(),o=(0,l.ID)(),r=(0,a.lZ)(m({spaceId:e||n,roomId:t||o}));return(0,s.useCallback)((e=>r(e)))},f=(0,a.K0)({key:"settingUpdate",get:()=>()=>null,set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{let{set:a}=e;const{prevSetting:o,...r}=s;a((0,d.FU)({spaceId:t,roomId:n}),(e=>e.reduce(((e,t)=>(t.scope===o.scope&&t.type===o.type&&t.entity===o.entity&&t.path===o.path&&t.name===o.name?e.push({...t,...r}):e.push(t),e)),[]))),a(h(r.id),r),a((0,d.gc)({spaceId:t,roomId:n,type:r.type,entity:r.entity}),r.id)}}}),b=function(){let{spaceId:e,roomId:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,c.vt)(),o=(0,l.ID)(),r=(0,a.lZ)(f({spaceId:e||n,roomId:t||o}));return(0,s.useCallback)((e=>r(e)))},y=(0,a.K0)({key:"settingRemove",get:()=>()=>null,set:e=>{let{spaceId:t,roomId:n}=e;return(e,s)=>{var a;let{get:o,set:r}=e;r((0,d.FU)({spaceId:t,roomId:n}),(e=>e.filter((e=>e.id!==s.id)))),o((0,d.gc)({spaceId:t,roomId:n,type:s.type,entity:s.entity}))===s.id&&r((0,d.gc)({spaceId:t,roomId:n,type:s.type,entity:s.entity}),(null===(a=o((0,d.FU)({spaceId:t,roomId:n}))[0])||void 0===a?void 0:a.id)||null)}}}),v=function(e){let{spaceId:t,roomId:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=u(e),r=(0,c.vt)(),i=(0,l.ID)(),d=(0,a.lZ)(y({spaceId:t||r,roomId:n||i}));return(0,s.useCallback)((()=>d(o)))},_={},w=e=>{var t;let{spaceId:n,roomId:s,type:o,entity:r}=e;const i=(0,c.vt)(),d=(0,l.ID)(),h=(0,a.vc)(k({spaceId:n||i,roomId:s||d,type:o,entity:r}));return(null===(t=u(h))||void 0===t?void 0:t.value)||_},k=(0,a.K0)({key:"settingSelectionSelector",get:e=>{let{spaceId:t,roomId:n,type:s,entity:a}=e;return e=>{let{get:o}=e;return o((0,d.gc)({spaceId:t,roomId:n,type:s,entity:a}))}},set:e=>{let{spaceId:t,roomId:n,type:s,entity:a}=e;return(e,o)=>{let{set:r}=e;r((0,d.gc)({spaceId:t,roomId:n,type:s,entity:a}),(e=>e===o?null:o))}}}),T=e=>{let{spaceId:t,roomId:n,type:s,entity:o}=e;const r=(0,c.vt)(),i=(0,l.ID)();return(0,a.L4)(k({spaceId:t||r,roomId:n||i,type:s,entity:o}))}},9415:(e,t,n)=>{n.d(t,{Uc:()=>l,X3:()=>i,XF:()=>c,cH:()=>r});n(41393),n(81454);var s=n(26655),a=n(49286);const o=e=>e.map((e=>(0,a.bn)(e))),r=e=>s.A.get("/api/v2/spaces/".concat(e,"/notifications/silencing/rules"),{transform:o}),i=(e,t)=>s.A.post("/api/v2/spaces/".concat(e,"/notifications/silencing/rules/delete"),t),c=(e,t)=>s.A.post("/api/v2/spaces/".concat(e,"/notifications/silencing/rule"),(0,a.Jz)(t)),l=(e,t)=>s.A.put("/api/v2/spaces/".concat(e,"/notifications/silencing/rule/").concat(t.id),(0,a.Jz)(t))},37171:(e,t,n)=>{n.d(t,{q:()=>p,z:()=>m});n(17333),n(41393),n(14905),n(8159),n(98992),n(54520),n(81454),n(8872),n(37550),n(62953);var s=n(47444),a=n(3914),o=n(27467),r=n(36021),i=n(88982),c=n(78940);const l=e=>(t,n)=>{const s=t[e];return!Array.isArray(n)||!n.length||(Array.isArray(s)?n.some((e=>s.includes(e))):n.includes(s))},d={ids:l("id"),roomIds:l("roomIds"),nodeIds:l("nodeIds"),hostLabels:(h="hostLabels",(e,t)=>{const n=e[h];if(!n)return!t.length;const s=Object.entries(n).map((e=>{let[t,n]=e;return"".concat(t,": ").concat(n)}));return l(h)({...e,[h]:s},t)}),alertNames:l("alertNames"),alertRoles:l("alertRoles"),alertContexts:l("alertContexts")};var h;const u=(0,s.K0)({key:"silencingRulesFiltered",get:e=>{let{extraKey:t,spaceId:n,omit:s=[],keepAll:a,allNodesRoomId:i}=e;return e=>{let{get:c}=e;const l=c((0,o.GA)({key:n,extraKey:t})),h=Object.keys(l).reduce(((e,t)=>(s.includes(t)||e.push([t,l[t]]),e)),[]),u=c((0,r.Pu)({id:n,allNodesRoomId:i})),{rules:p,...m}=u;if(!h.length)return u;const g=(e=>t=>!e.some((e=>{let[n,s]=e;return!!d[n]&&!d[n](t,s)})))(h);return a?u:{...m,rules:p.filter(g)}}}}),p=function(){let{extraKey:e,omit:t=[],keepAll:n=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=(0,a.vt)(),r=(0,i.n)("id");return(0,s.vc)(u({extraKey:e,spaceId:o,omit:t,keepAll:n,allNodesRoomId:r}))},m=()=>{const e=(0,a.vt)();return(0,o.rI)("ids",{key:e,extraKey:c.qt,flavour:"arr"})}},36021:(e,t,n)=>{n.d(t,{FU:()=>b,Lz:()=>g,Pu:()=>d,Qu:()=>m,UJ:()=>u,_B:()=>f,_S:()=>y,ys:()=>h});n(3064),n(41393),n(98992),n(72577),n(81454);var s=n(47444),a=n(3914),o=n(69765),r=n(9415),i=n(89821),c=n(67990),l=n(88982);const d=(0,s.K0)({key:"silencingRulesState",get:e=>{let{id:t,key:n,allNodesRoomId:s}=e;return e=>{let{get:a}=e;const o=a((0,i.A)(t)),{rules:r,...l}=o,d=a((0,c.$6)({id:s,key:"nodes"})),h={...l,rules:r.map((e=>({...e,...e.nodeIds?{nodes:e.nodeIds.map((e=>{const t=d.find((t=>t.value==e));return{id:e,name:(null===t||void 0===t?void 0:t.label)||"-",notAvailable:!t}}))}:{}})))};return n?h[n]:h}},set:e=>{let{id:t,key:n}=e;return(e,s)=>{let{get:a,set:r}=e;const{rules:c}=s;r((0,i.A)(t),(e=>{if(c){const e=c.map((e=>{let{roomIds:t,nodeIds:n,...s}=e;const r=t?t.map((e=>{const{id:t,name:n}=a((0,o.LS)({id:e}));return{id:t,name:n}})):void 0;return{...s,...t?{roomIds:t}:{},...r?{rooms:r}:{},...n?{nodeIds:n}:{}}}));s.rules=e}return n?{...e,[n]:s}:{...e,...s}}))}}}),h=e=>{let{id:t,key:n}=e;const a=(0,l.n)("id");return(0,s.vc)(d({id:t,key:n,allNodesRoomId:a}))},u=(e,t)=>(0,s.lZ)(d({id:e,key:t})),p=(0,s.eU)({key:"forceUpdateRulesSelector",default:0}),m=()=>(0,s.vc)(p),g=()=>{const e=(0,a.vt)(),t=u(e),n=(0,s.lZ)(p);return()=>{t((e=>({...e,initialLoad:!1}))),n((e=>e+1))}},f=()=>{const e=(0,a.vt)();return t=>(0,r.XF)(e,t)},b=()=>{const e=(0,a.vt)();return t=>(0,r.Uc)(e,t)},y=()=>{const e=(0,a.vt)();return t=>(0,r.X3)(e,t)}},89821:(e,t,n)=>{n.d(t,{$:()=>a,A:()=>o});var s=n(47444);const a={rules:[],error:"",id:null,loading:!0,loaded:!1,initialLoad:!1},o=(0,s.Iz)({key:"silencingRulesState",default:e=>(e=>({...a,id:e}))(e)})},66294:(e,t,n)=>{n.d(t,{$:()=>d,A:()=>h});var s=n(47444),a=n(83957),o=n(54702),r=n(70716),i=n(55463),c=n(46902),l=n(46741);const d=e=>"spaces.".concat(e,".members"),h=e=>{const t=(0,s.Zs)((t=>{let{set:n}=t;return t=>{let{results:s}=t;return n((0,i.jX)(e),s)}})),n=(0,l.JT)("user:ReadAll");(0,a.A)((()=>({key:d(e),autorun:!!e&&n,fetch:()=>(0,o.kE)(e),association:{getError:()=>(0,c.x2)({id:e,key:"error"}),getIds:()=>(0,i.kd)({id:e,key:"ids"}),getLoaded:()=>(0,i.kd)({id:e,key:"loaded"}),getUpdatedAt:()=>(0,i.kd)({id:e,key:"updatedAt"})},sort:(e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:"accent",ignorePunctuation:!0}),getResource:e=>(0,r.m)({id:e}),getResourcesInitializer:()=>r.WJ,onReceive:t,pollingOptions:{pollingInterval:315e3}})),[e])}},3705:(e,t,n)=>{n.d(t,{A:()=>o});n(62953);var s=n(96540);const a={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0},o=()=>{const[e,t]=(0,s.useState)(null),[n,o]=(0,s.useState)(a),r=(0,s.useMemo)((()=>new window.ResizeObserver((e=>{if(e[0]){const{x:t,y:n,width:s,height:a,top:r,left:i,bottom:c,right:l}=e[0].contentRect;o({x:t,y:n,width:s,height:a,top:r,left:i,bottom:c,right:l})}}))),[]);return(0,s.useLayoutEffect)((()=>{if(e)return r.observe(e),()=>{r.disconnect()}}),[e]),[t,n]}},99090:(e,t,n)=>{n.d(t,{A:()=>d});n(9391),n(62953);var s=n(96540),a=n(63950),o=n.n(a),r=n(80925),i=n(68831),c=n(18300),l=n(22292);const d=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=(0,r.e)(),a=(0,s.useMemo)((()=>n?n.getRoot():null),[n]),d=(0,s.useMemo)(e,t),h=(0,s.useRef)(!0),u=(0,s.useRef)({timeoutId:null,promise:null}),[,p]=(0,c.A)(),m=(0,s.useCallback)((e=>{h.current=!1;const{fetch:t,onStart:n=o(),onFail:s=o(),onPollingFail:r=o(),onReceive:c=o(),onSettle:l=o(),onBlurMode:m=o(),polling:g=!0,pollingOptions:f}=d;n(e),u.current={timeoutId:null,promise:null};const b=()=>(u.current.promise=t(e),u.current.promise.then(c).catch((e=>{if(!e.isCancel)throw e})),u.current.promise),y=()=>{u.current.timeoutId=setTimeout((()=>{if(null!==f&&void 0!==f&&f.shouldPause&&a&&(a.getAttribute("hovering")||a.getAttribute("paused"))||!p.current&&(!a||!a.getAttribute("autofetchOnWindowBlur")))return m(),y();b().then((()=>!h.current&&g&&y())).catch((e=>{e.isCancel||r(e),!h.current&&!e.isCancel&&g&&y()}))}),(null===f||void 0===f?void 0:f.pollingInterval)||i.A.pollingInterval)};return b().then((()=>!h.current&&g&&y())).catch((e=>{e.isCancel||s(e),h.current||!g||e.isCancel||y()})).finally(l),()=>{var e,t;h.current=!0,null===(e=u.current.promise)||void 0===e||null===(t=e.cancel)||void 0===t||t.call(e),clearTimeout(u.current.timeoutId)}}),t),g=(0,l.uW)("isAnonymous");return(0,s.useEffect)((()=>{const{enabled:e=!0,force:t=!1,skip:n=!1}=d;if((!g||t)&&!n)return e?m():void 0}),[g,m]),m.clearRef=u,m}},76777:(e,t,n)=>{n.d(t,{A:()=>c});n(62953);var s=n(96540),a=n(61427),o=n(82543),r=n(81416),i=n(27467);const c=()=>{const e=(0,o.g)(),t=(0,a.Ip)({nodeIds:e,flavour:"rhs"}),[n,c]=(0,r.yD)(),{after:l,before:d}=(0,i.rW)();(0,s.useEffect)((()=>{t()}),[n,c,l,d])}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3968.483ca2ad3b300293e655.chunk.js b/src/web/gui/v2/3968.483ca2ad3b300293e655.chunk.js deleted file mode 100644 index de1e75be9..000000000 --- a/src/web/gui/v2/3968.483ca2ad3b300293e655.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="5d403afd-e5b2-4fbe-974e-d4995af6873e",e._sentryDebugIdIdentifier="sentry-dbid-5d403afd-e5b2-4fbe-974e-d4995af6873e")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3968],{18686:(e,t,a)=>{a.d(t,{A:()=>r});var l=a(96540),n=a(83199),o=a(47731);const r=e=>{let{children:t}=e;return(0,o.J)()?l.createElement(n.Layer,{full:!0},l.createElement(n.Flex,{width:"100%",background:"mainBackground","data-testid":"alertView-mobileContainer"},t)):t}},41122:(e,t,a)=>{a.d(t,{A:()=>N});var l=a(96540),n=a(83199),o=a(64118),r=a(28738),d=a(47731),i=a(69765),c=a(11164),s=a(43407),m=a(5871),u=a(52768),g=a(47767),f=a(27467),p=a(47762),E=a(8711);const b=(0,E.default)(n.Flex).attrs({alignItems:"center"}).withConfig({displayName:"styled__StyledButtonContainer",componentId:"sc-1glv09p-0"})(["position:sticky;bottom:0;"]);var h=a(38966);const w=(0,a(92155).A)(n.Button),I=e=>{let{disabled:t,nodeId:a,alertId:o,context:r,lastStatusChange:d,onClose:i,isLoading:c,small:s=!1,testid:m="alertDetailsModal"}=e;const u=(0,g.Zp)(),E=(0,p.Zl)(a),I=(0,l.useCallback)((()=>{i&&i(),u(E,o?{state:{alertId:o}}:{state:{contextToGo:r}})}),[E,o]),y=(0,f.rI)(),x=(0,l.useCallback)((()=>{const e=1e3*d;y({highlight:{after:e-6e4,before:e},correlation:!0}),I()}),[d,r,I,o]);return l.createElement(b,{justifyContent:"end",gap:2},l.createElement(n.Flex,{gap:2,justifyContent:"end"},l.createElement(w,{small:s,label:"Run correlations",onClick:x,flavour:"hollow",isLoading:c,width:s?"112px":"170px","data-testid":"".concat(m,"-runCorrelations-button"),"data-ga":"alert-modal::click-run-correlations::alerts-view",payload:{action:"Run correlations",alertId:o,nodeId:a}}),l.createElement(w,{small:s,label:"Go to chart",onClick:I,isLoading:c,disabled:c||t,width:s?"112px":"150px","data-testid":"".concat(m,"-goToNode-button"),"data-ga":"alert-modal::click-goto-chart::alerts-view",payload:{action:"Go to chart",alertId:o,nodeId:a}}),l.createElement(h.A,{alertId:o,nodeId:a,isLoading:c,small:s,"data-testid":"".concat(m,"-edit-alert-button")})))},y=(0,l.memo)(I);var x=a(7660),C=a(40267);const v=e=>{let{alertId:t,context:a,name:o,nodeId:r,status:i,lastStatusChange:c,fullyLoaded:s,isWebview:m}=e;const u=(0,d.J)(),g=u?n.H4:n.H0;return l.createElement(n.Flex,{column:!0,gap:4},l.createElement(n.Flex,{justifyContent:"between"},l.createElement(n.Flex,{alignItems:"center",gap:2},l.createElement(C.A,{margin:u?null:[.5,0,0],flavour:i,"data-testid":"alertView-statusPill"},i),l.createElement(g,{"data-testid":"alertView-alertName"},o)),!1),l.createElement(n.Flex,{justifyContent:"between",alignItems:"center"},l.createElement(x.A,{alertId:t}),!m&&s&&!u&&l.createElement(y,{lastStatusChange:c,alertId:t,context:a,name:o,nodeId:r,small:!0,testid:"alertView"})))};var A=a(68831),k=a(63314);const L=E.default.img.withConfig({displayName:"sc-404__Illustration",componentId:"sc-4w81fg-0"})(["height:35%;width:35%;"]),S=E.default.div.withConfig({displayName:"sc-404__ButtonContainer",componentId:"sc-4w81fg-1"})(["margin:",";"],(0,n.getSizeBy)(4)),_=()=>{const e="".concat(A.A.assetsBaseURL,"/img/no-nodes-room.svg");return l.createElement(k.DL,null,l.createElement(n.Flex,{column:!0,alignItems:"center",justifyItems:"center",justifyContent:"center",height:"100%",width:"100%",padding:[0,0,"10%"]},l.createElement(L,{src:e,alt:"Unreachable alert",title:"Unreachable alert"}),l.createElement(n.H3,null,"We couldn't find the alert"),l.createElement(n.Text,null,"This can be a temporary problem of that specific alert."),l.createElement(S,null,l.createElement(n.Button,{label:"Retry",icon:"reload"}))))};var V=a(4974),F=a(73865),B=a(85686);const R=e=>{let{children:t}=e;return l.createElement(n.Flex,{background:"modalHeaderBackground",height:12,flex:!1,gap:4,padding:[0,2,0,4],alignItems:"center"},l.createElement(n.Icon,{name:"logo_s",color:"success",width:"23px"}),t)},N=e=>{let{alertId:t,spaceId:a,roomId:g,isWebview:f,nodeName:p}=e;const E=(0,i.XA)("name"),{isNodeRestricted:b}=(0,F.A)(),{fullyLoaded:h=!1,fullyLoading:w=!0,info:I,units:y,lastStatusChangeValue:x,lastStatusChange:C,context:A,instance:L,name:S,nodeId:N,status:T,lastUpdated:D,value:J}=(0,o.JL)(t);(0,o.yk)(t,{spaceId:a,roomId:g});const j=(0,u.J4)(J,y),H=(0,u.J4)(x,y),U=(0,d.J)();return N&&b(N)?l.createElement(k.Ay,{feature:"AlertDetailsViewRestricted"},l.createElement(B.A,null)):l.createElement(k.Ay,{feature:"AlertDetailsView"},l.createElement(n.Flex,{column:!0,width:U?"100%":{max:280},padding:U?null:[0,0,10],background:U?"modalBackground":null},!f&&U&&l.createElement(R,null,l.createElement(n.Flex,{column:!0},l.createElement(n.H6,{color:"textLite"},"ROOM"),l.createElement(n.Text,{"data-testid":"alertView-mobile-roomName"},E))),l.createElement(n.Flex,{column:!0,padding:U?[3]:[0],overflow:U?"auto":"visible",gap:3},l.createElement(v,{alertId:t,context:A,status:T,name:S,nodeId:N,lastStatusChange:C,fullyLoaded:h,isWebview:f}),h?null:w?l.createElement(r.A,{title:"Loading alert..."}):l.createElement(_,null),h&&I&&l.createElement(l.Fragment,null,l.createElement(s.A,{iconName:"documentation"},"Alert Description"),l.createElement(n.Text,{"data-testid":"alertView-info"},I),l.createElement(V.A,{alertId:t})),h&&l.createElement(c.A,{id:t,context:A,instance:L,formattedLastValue:j,formattedLastStatusChangeValue:H,lastStatusChange:C,lastUpdated:D,isFormattedValueLoaded:h,nodeId:N,status:T,testid:"alertView",spaceId:a,roomId:g}),h&&l.createElement(m.A,{id:t,nodeName:p,testid:"alertView"})),U&&l.createElement(n.Box,{position:"sticky",padding:[4],background:"modalBackground",bottom:0,border:{side:"top",color:"border"}},l.createElement(n.TextSmall,null,"In order to ",l.createElement(n.TextSmall,{strong:!0},"Run Correlations")," or"," ",l.createElement(n.TextSmall,{strong:!0},"View the Chart")," you will have to visit this alert from its' dedicated page on a desktop device."))))}},73968:(e,t,a)=>{a.r(t),a.d(t,{default:()=>g});var l=a(96540),n=a(54621),o=a(64118),r=a(83084),d=a(28738),i=a(47767),c=a(45588),s=a(86663);var m=a(41122),u=a(18686);const g=()=>{const e=(()=>{const{alertId:e,...t}=(0,i.g)(),{search:a}=(0,i.zy)(),{transition:n}=s.parse(a),o=(0,l.useRef)(n||e),r=(0,i.Zp)();return(0,l.useEffect)((()=>{n&&n!==e&&r((0,c.tW)("/spaces/:spaceSlug/rooms/:roomSlug/alerts/".concat(n),t),{replace:!0})}),[e,n]),o.current})(),{name:t="unknown alert",fullyLoaded:a=!1}=(0,o.JL)(e),g=(0,o.x)();return(0,n.ZB)({title:t,id:e,destination:e,params:location.hash,type:"alerts",isReady:a}),g?l.createElement(r.A,{overflow:{vertical:"auto"},margin:[0,0,8],padding:[3]},g&&l.createElement(u.A,null,l.createElement(m.A,{alertId:e}))):l.createElement(d.A,{title:"Loading alert..."})}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/3D_PARTY_LICENSES.txt b/src/web/gui/v2/3D_PARTY_LICENSES.txt deleted file mode 100644 index 80da910a8..000000000 --- a/src/web/gui/v2/3D_PARTY_LICENSES.txt +++ /dev/null @@ -1,7457 +0,0 @@ -@babel/runtime -MIT -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@dnd-kit/accessibility -MIT -MIT License - -Copyright (c) 2021, Claudéric Demers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@dnd-kit/core -MIT -MIT License - -Copyright (c) 2021, Claudéric Demers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@dnd-kit/sortable -MIT -MIT License - -Copyright (c) 2021, Claudéric Demers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@dnd-kit/utilities -MIT -MIT License - -Copyright (c) 2021, Claudéric Demers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@elastic/react-search-ui -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Elasticsearch B.V. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@elastic/search-ui -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Elasticsearch B.V. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@elastic/search-ui-site-search-connector -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2019 Elasticsearch B.V. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@emotion/cache -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/hash -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/is-prop-valid -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/memoize -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/react -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/serialize -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/sheet -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/stylis -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/unitless -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/use-insertion-effect-with-fallbacks -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@emotion/utils -MIT -MIT License - -Copyright (c) Emotion team and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@fortawesome/free-brands-svg-icons -(CC-BY-4.0 AND MIT) -Fonticons, Inc. (https://fontawesome.com) - --------------------------------------------------------------------------------- - -Font Awesome Free License - -Font Awesome Free is free, open source, and GPL friendly. You can use it for -commercial projects, open source projects, or really almost whatever you want. -Full Font Awesome Free license: https://fontawesome.com/license/free. - --------------------------------------------------------------------------------- - -# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) - -The Font Awesome Free download is licensed under a Creative Commons -Attribution 4.0 International License and applies to all icons packaged -as SVG and JS file types. - --------------------------------------------------------------------------------- - -# Fonts: SIL OFL 1.1 License - -In the Font Awesome Free download, the SIL OFL license applies to all icons -packaged as web and desktop font files. - -Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com) -with Reserved Font Name: "Font Awesome". - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - -SIL OPEN FONT LICENSE -Version 1.1 - 26 February 2007 - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting — in part or in whole — any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - --------------------------------------------------------------------------------- - -# Code: MIT License (https://opensource.org/licenses/MIT) - -In the Font Awesome Free download, the MIT license applies to all non-font and -non-icon files. - -Copyright 2024 Fonticons, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in the -Software without restriction, including without limitation the rights to use, copy, -modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -# Attribution - -Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font -Awesome Free files already contain embedded comments with sufficient -attribution, so you shouldn't need to do anything additional when using these -files normally. - -We've kept attribution comments terse, so we ask that you do not actively work -to remove them from files, especially code. They're a great way for folks to -learn about Font Awesome. - --------------------------------------------------------------------------------- - -# Brand Icons - -All brand icons are trademarks of their respective owners. The use of these -trademarks does not indicate endorsement of the trademark holder by Font -Awesome, nor vice versa. **Please do not use brand logos for any purpose except -to represent the company, product, or service to which they refer.** - - -@fortawesome/free-solid-svg-icons -(CC-BY-4.0 AND MIT) -Fonticons, Inc. (https://fontawesome.com) - --------------------------------------------------------------------------------- - -Font Awesome Free License - -Font Awesome Free is free, open source, and GPL friendly. You can use it for -commercial projects, open source projects, or really almost whatever you want. -Full Font Awesome Free license: https://fontawesome.com/license/free. - --------------------------------------------------------------------------------- - -# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) - -The Font Awesome Free download is licensed under a Creative Commons -Attribution 4.0 International License and applies to all icons packaged -as SVG and JS file types. - --------------------------------------------------------------------------------- - -# Fonts: SIL OFL 1.1 License - -In the Font Awesome Free download, the SIL OFL license applies to all icons -packaged as web and desktop font files. - -Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com) -with Reserved Font Name: "Font Awesome". - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - -SIL OPEN FONT LICENSE -Version 1.1 - 26 February 2007 - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting — in part or in whole — any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - --------------------------------------------------------------------------------- - -# Code: MIT License (https://opensource.org/licenses/MIT) - -In the Font Awesome Free download, the MIT license applies to all non-font and -non-icon files. - -Copyright 2024 Fonticons, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in the -Software without restriction, including without limitation the rights to use, copy, -modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- - -# Attribution - -Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font -Awesome Free files already contain embedded comments with sufficient -attribution, so you shouldn't need to do anything additional when using these -files normally. - -We've kept attribution comments terse, so we ask that you do not actively work -to remove them from files, especially code. They're a great way for folks to -learn about Font Awesome. - --------------------------------------------------------------------------------- - -# Brand Icons - -All brand icons are trademarks of their respective owners. The use of these -trademarks does not indicate endorsement of the trademark holder by Font -Awesome, nor vice versa. **Please do not use brand logos for any purpose except -to represent the company, product, or service to which they refer.** - - -@fortawesome/react-fontawesome -MIT -Copyright 2018 Fonticons, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@icons/material -MIT - -@markdoc/markdoc -MIT -The MIT License - -Copyright (c) 2021- Stripe, Inc. (https://stripe.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -@netdata/charts -GPL-3.0 - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - -@netdata/netdata-ui -GPL-3.0 - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - -@popperjs/core -MIT -The MIT License (MIT) - -Copyright (c) 2019 Federico Zivolo - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@prismicio/client -Apache-2.0 - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -@remix-run/router -MIT -MIT License - -Copyright (c) React Training LLC 2015-2019 -Copyright (c) Remix Software Inc. 2020-2021 -Copyright (c) Shopify Inc. 2022-2023 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@rjsf/core -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2015-2024 rjsf-team - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -@rjsf/utils -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2015-2024 rjsf-team - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -@rjsf/validator-ajv8 -Apache-2.0 - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2015-2024 rjsf-team - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -@sentry/browser -MIT -Copyright (c) 2019 Sentry (https://sentry.io) and individual contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@sentry/core -MIT -Copyright (c) 2019 Sentry (https://sentry.io) and individual contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@sentry/react -MIT -Copyright (c) 2019 Sentry (https://sentry.io) and individual contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@sentry/utils -MIT -Copyright (c) 2019 Sentry (https://sentry.io) and individual contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@styled-system/background -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/border -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/color -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/core -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/css -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/flexbox -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/grid -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/layout -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/position -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/shadow -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/space -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/typography -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@styled-system/variant -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -@tanstack/react-table -MIT -MIT License - -Copyright (c) 2016 Tanner Linsley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@tanstack/react-virtual -MIT -MIT License - -Copyright (c) 2021-present Tanner Linsley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@tanstack/table-core -MIT -MIT License - -Copyright (c) 2016 Tanner Linsley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@tanstack/virtual-core -MIT -MIT License - -Copyright (c) 2021-present Tanner Linsley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -@typeform/embed-react -MIT - -ajv -MIT -The MIT License (MIT) - -Copyright (c) 2015-2021 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -ajv-formats -MIT -MIT License - -Copyright (c) 2020 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -axios -MIT -# Copyright (c) 2014-present Matt Zabriskie & Collaborators - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -call-bind -MIT -MIT License - -Copyright (c) 2020 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -charenc -BSD-3-Clause -Copyright © 2011, Paul Vorbach. All rights reserved. -Copyright © 2009, Jeff Mott. All rights reserved. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. -* Neither the name Crypto-JS nor the names of its contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -chart.js -MIT -The MIT License (MIT) - -Copyright (c) 2014-2022 Chart.js Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -chartjs-adapter-date-fns -MIT -The MIT License (MIT) - -Copyright (c) 2019 Chart.js Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -chartjs-plugin-annotation -MIT -The MIT License (MIT) - -Copyright (c) 2016-2021 chartjs-plugin-annotation Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -chartjs-plugin-zoom -MIT -The MIT License (MIT) - -Copyright (c) 2013-2021 chartjs-plugin-zoom contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -classnames -MIT -The MIT License (MIT) - -Copyright (c) 2018 Jed Watson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -clsx -MIT -MIT License - -Copyright (c) Luke Edwards (lukeed.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -compute-gcd -MIT -The MIT License (MIT) - -Copyright (c) 2014-2015 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -compute-lcm -MIT -The MIT License (MIT) - -Copyright (c) 2014-2015 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -copy-text-to-clipboard -MIT -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -core-js -MIT -Copyright (c) 2014-2024 Denis Pushkarev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -crypt -BSD-3-Clause -Copyright © 2011, Paul Vorbach. All rights reserved. -Copyright © 2009, Jeff Mott. All rights reserved. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. -* Neither the name Crypto-JS nor the names of its contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -crypto-js -MIT -# License - -[The MIT License (MIT)](http://opensource.org/licenses/MIT) - -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2016 Evan Vosberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -d3 -ISC -Copyright 2010-2023 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-array -ISC -Copyright 2010-2023 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-color -ISC -Copyright 2010-2022 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-format -ISC -Copyright 2010-2021 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-interpolate -ISC -Copyright 2010-2021 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-scale -ISC -Copyright 2010-2021 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-time -ISC -Copyright 2010-2022 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -d3-time-format -ISC -Copyright 2010-2021 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -date-fns -MIT -MIT License - -Copyright (c) 2021 Sasha Koss and Lesha Koss https://kossnocorp.mit-license.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -decode-uri-component -MIT -The MIT License (MIT) - -Copyright (c) 2017, Sam Verschueren (github.com/SamVerschueren) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -deep-equal -MIT -MIT License - -Copyright (c) 2012, 2013, 2014 James Halliday , 2009 Thomas Robinson <280north.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -define-data-property -MIT -MIT License - -Copyright (c) 2023 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -define-properties -MIT -The MIT License (MIT) - -Copyright (C) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -domelementtype -BSD-2-Clause -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -domhandler -BSD-2-Clause -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -dygraphs -MIT -dygraphs is MIT-licenced: - -Copyright (c) 2006, 2009, 2011, 2012, 2013, 2017 - Dan Vanderkam -Copyright (c) 2011 Paul Felix -Copyright (c) 2011, 2013 Robert Konigsberg -Copyright (c) 2013 David Eberlein -Copyright (c) 2013 Google, Inc. -Copyright (c) 2014 mirabilos -Copyright (c) 2015 Petr Shevtsov -Copyright (c) 2022, 2023 mirabilos - Deutsche Telekom LLCTO -and numerous contributors (see git log) - -Some tests additionally are: - -Copyright (c) 2011, 2012 Google, Inc. -or contributed by: -- Benoit Boivin -- Paul Felix -- Marek Janda -- Robert Konigsberg -- George Madrid -- Anthony Robledo -- Fr. Sauter AG -- Fr. Sauter AG -- Ümit Seren -- Sergey Slepian -- Dan Vanderkam - -Parts of the documentation are or make use of code that is: - -Copyright (c) 2012 Google, Inc. -- Robert Konigsberg - -The automatically added browser-pack shim is: - -Copyright (c) 2013, 2014 James Halliday -Copyright (c) 2013 Roman Shtylman -Copyright (c) 2013 Esa-Matti Suuronen -Copyright (c) 2018 Philipp Simon Schmidt - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -The documentation and gallery uses Bootstrap and jQuery; see the -relevant licence files of those external libraries for details. - -The icons under common/ are CC0-licenced and adapted by mirabilos. -In Debian, /usr/share/common-licenses/CC0-1.0 has the full text. - - -easy-pie-chart -MIT -The MIT License (MIT) - -Copyright (c) 2013 Robert Fleischmann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -es-define-property -MIT -MIT License - -Copyright (c) 2024 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -es-errors -MIT -MIT License - -Copyright (c) 2024 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -fast-deep-equal -MIT -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -filter-obj -MIT -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -function-bind -MIT -Copyright (c) 2013 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -functions-have-names -MIT -MIT License - -Copyright (c) 2019 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -get-intrinsic -MIT -MIT License - -Copyright (c) 2020 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -gopd -MIT -MIT License - -Copyright (c) 2022 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -hammerjs -MIT -The MIT License (MIT) - -Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -has-property-descriptors -MIT -MIT License - -Copyright (c) 2022 Inspect JS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -has-proto -MIT -MIT License - -Copyright (c) 2022 Inspect JS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -has-symbols -MIT -MIT License - -Copyright (c) 2016 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -has-tostringtag -MIT -MIT License - -Copyright (c) 2021 Inspect JS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -hasown -MIT -MIT License - -Copyright (c) Jordan Harband and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -history -MIT -MIT License - -Copyright (c) React Training 2016-2020 -Copyright (c) Remix Software 2020-2021 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -hoist-non-react-statics -BSD-3-Clause -Software License Agreement (BSD License) -======================================== - -Copyright (c) 2015, Yahoo! Inc. All rights reserved. ----------------------------------------------------- - -Redistribution and use of this software in source and binary forms, with or -without modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Yahoo! Inc. nor the names of YUI's contributors may be - used to endorse or promote products derived from this software without - specific prior written permission of Yahoo! Inc. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -html-dom-parser -MIT -MIT License - -Copyright (c) 2016 Menglin "Mark" Xu - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -html-react-parser -MIT -The MIT License - -Copyright (c) 2016 Menglin "Mark" Xu - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -idb-keyval -Apache-2.0 -Copyright 2016, Jake Archibald - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -inline-style-parser -MIT - -internmap -ISC -Copyright 2021 Mike Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -is-arguments -MIT -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -is-buffer -MIT -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -is-date-object -MIT -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -is-regex -MIT -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -json-schema-compare -MIT -MIT License - -Copyright (c) 2017 Martin Hansen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -json-schema-merge-allof -MIT - -json-schema-traverse -MIT -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -jsonpointer -MIT -The MIT License (MIT) - -Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -lodash -MIT -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -material-colors -ISC -ISC License - -Copyright 2014 Shuhei Kagawa - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -md5 -BSD-3-Clause -Copyright © 2011-2012, Paul Vorbach. -Copyright © 2009, Jeff Mott. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. -* Neither the name Crypto-JS nor the names of its contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -memoize-one -MIT -MIT License - -Copyright (c) 2019 Alexander Reardon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -object-assign -MIT -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -object-inspect -MIT -MIT License - -Copyright (c) 2013 James Halliday - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -object-is -MIT -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -object-keys -MIT -The MIT License (MIT) - -Copyright (C) 2013 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -polished -MIT -MIT License - -Copyright (c) 2016-Present Brian Hough and Maximilian Stoiber - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -posthog-js -MIT -Copyright 2020 Posthog / Hiberly, Inc. - -Copyright 2015 Mixpanel, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this work except in compliance with the License. -You may obtain a copy of the License below, or at: - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -prop-types -MIT -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -qr.js -MIT -Copyright (c) 2013 Roman Shtylman - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -qs -BSD-3-Clause -BSD 3-Clause License - -Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -query-string -MIT -MIT License - -Copyright (c) Sindre Sorhus (http://sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -react -MIT -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-chartjs-2 -MIT -Copyright 2020 Jeremy Ayerst - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -react-color -MIT -The MIT License (MIT) - -Copyright (c) 2015 Case Sandberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-datepicker -MIT -The MIT License (MIT) - -Copyright (c) 2014-2023 HackerOne Inc and individual contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-dom -MIT -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-draggable -MIT -(MIT License) - -Copyright (c) 2014-2016 Matt Zabriskie. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -react-fast-compare -MIT -MIT License - -Copyright (c) 2018 Formidable Labs -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-is -MIT -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-minimal-pie-chart -MIT -Copyright (c) Andrea Carraro - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-onclickoutside -MIT -Copyright 2015-2022 Mike "Pomax" Kamermans - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-popper -MIT -The MIT License (MIT) - -Copyright (c) 2018 React Popper authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-portal -MIT -The MIT License (MIT) - -Copyright (c) 2016-present, Vojtech Miksu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-property -MIT - -react-qr-code -MIT -MIT License - -Copyright (c) 2017 Ross Khanas - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-router -MIT -MIT License - -Copyright (c) React Training LLC 2015-2019 -Copyright (c) Remix Software Inc. 2020-2021 -Copyright (c) Shopify Inc. 2022-2023 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-router-dom -MIT -MIT License - -Copyright (c) React Training LLC 2015-2019 -Copyright (c) Remix Software Inc. 2020-2021 -Copyright (c) Shopify Inc. 2022-2023 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-select -MIT - -react-toastify -MIT -MIT License - -Copyright (c) 2023 Fadi Khadra - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -react-transition-group -BSD-3-Clause -BSD 3-Clause License - -Copyright (c) 2018, React Community -Forked from React (https://github.com/facebook/react) Copyright 2013-present, Facebook, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -reactcss -MIT -The MIT License (MIT) - -Copyright (c) 2015 Case Sandberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -recoil -MIT -MIT License - -Copyright (c) Meta Platforms, Inc. and affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -regexp.prototype.flags -MIT -The MIT License (MIT) - -Copyright (C) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -resolve-pathname -MIT -MIT License - -Copyright (c) Michael Jackson 2016-2018 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -scheduler -MIT -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -set-function-length -MIT -MIT License - -Copyright (c) Jordan Harband and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -set-function-name -MIT -MIT License - -Copyright (c) Jordan Harband and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -shallowequal -MIT -MIT License - -Copyright (c) 2017 Alberto Leal (github.com/dashed) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -side-channel -MIT -MIT License - -Copyright (c) 2019 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -split-on-first -MIT -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -strict-uri-encode -MIT -The MIT License (MIT) - -Copyright (c) Kevin Martensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -style-to-js -MIT -The MIT License (MIT) - -Copyright (c) 2020 Menglin "Mark" Xu - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -style-to-object -MIT -The MIT License (MIT) - -Copyright (c) 2017 Menglin "Mark" Xu - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -styled-components -MIT - -styled-system -MIT - -# The MIT License (MIT) -Copyright (c) 2017-2018 Brent Jackson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -svg-baker-runtime -MIT - -svg-sprite-loader -MIT -The MIT License (MIT) - -Copyright (c) 2017 Stas Kurilov (kisenka) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -throttle-debounce -MIT -Copyright (c) Ivan Nikolić - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - ---- - -Copyright (c) 2010 "Cowboy" Ben Alman - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - ---- - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - -uri-js -BSD-2-Clause -Copyright 2011 Gary Court. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY GARY COURT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Gary Court. - - -use-context-selector -MIT -The MIT License (MIT) - -Copyright (c) 2019 Daishi Kato - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -use-isomorphic-layout-effect -MIT -MIT License - -Copyright (c) Mateusz Burzyński - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -uuid -MIT -The MIT License (MIT) - -Copyright (c) 2010-2020 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -validate.io-array -MIT -The MIT License (MIT) - -Copyright (c) 2014-2015 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -validate.io-function -MIT -The MIT License (MIT) - -Copyright (c) 2014 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -validate.io-integer -MIT -The MIT License (MIT) - -Copyright (c) 2014 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -validate.io-integer-array -MIT -The MIT License (MIT) - -Copyright (c) 2015 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -validate.io-number -MIT -The MIT License (MIT) - -Copyright (c) 2014 Athan Reines. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -warning -MIT -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -workbox-background-sync -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-cacheable-response -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-core -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-expiration -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-precaching -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-recipes -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-routing -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -workbox-strategies -MIT -Copyright 2018 Google LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/src/web/gui/v2/4034.35199d2809d318eed690.chunk.js b/src/web/gui/v2/4034.35199d2809d318eed690.chunk.js deleted file mode 100644 index 1ac67a000..000000000 --- a/src/web/gui/v2/4034.35199d2809d318eed690.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r=(new Error).stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="bd450e9d-64ed-4ee1-a486-4ee9d95323c9",e._sentryDebugIdIdentifier="sentry-dbid-bd450e9d-64ed-4ee1-a486-4ee9d95323c9")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[4034],{24034:(e,r,t)=>{t.r(r),t.d(r,{default:()=>i,dropInFlavour:()=>d});t(74648),t(17333),t(98992),t(23215),t(54520);var n=t(96540),a=t(43375);const o={activationConstraint:{delay:50,tolerance:10}},d={dropArea:"dropArea",dashboard:"dashboard",self:"self"},i=e=>{let{children:r}=e;const t=(0,n.useCallback)((e=>{const{active:r}=e,{isResizer:t,itemId:n,itemContainerId:o,rootId:d,navigationTab:i}=r.data.current;if(i)return(0,a.fp)({...e,droppableContainers:e.droppableContainers.filter((e=>e.data.current.sortable&&e.data.current.navigationTab))});if(t){const t=e.droppableRects.get(n)||e.droppableRects.get("".concat(d,"-").concat(n));return(0,a.Qo)({...e,collisionRect:{...t,...r.rect.current.translated&&{width:t.width+(r.rect.current.translated.right-r.rect.current.initial.right),height:t.height+(r.rect.current.translated.bottom-r.rect.current.initial.bottom)}},droppableContainers:e.droppableContainers.filter((e=>{var r;return!(null!==(r=e.data.current)&&void 0!==r&&r.isContainer)&&e.data.current.itemContainerId===o}))})}let l,s=e.droppableContainers.filter((e=>e.data.current.droppable));if(s.length){if(l=(0,a.TT)({...e,droppableContainers:s}),l.length>0||s.every((e=>e.data.current.onlyPointerWithin)))return l;if(l=(0,a.Qo)({...e,droppableContainers:s.filter((e=>!e.data.current.onlyPointerWithin))}),l.length>0)return l}if(s=e.droppableContainers.filter((e=>e.data.current.dropArea)),l=(0,a.TT)({...e,droppableContainers:s}),l.length>0)return l;const c=(0,a.TT)({...e,droppableContainers:e.droppableContainers.filter((e=>{var r;return!(null!==(r=e.data.current)&&void 0!==r&&r.isResizer||e.id===n)}))});return c.length>0?c:(0,a.fp)({...e,droppableContainers:e.droppableContainers.filter((e=>{var r;return!(null!==(r=e.data.current)&&void 0!==r&&r.isResizer||e.id===n)}))})}),[]),d=(0,a.FR)((0,a.MS)(a.cA,o),(0,a.MS)(a.IG,o));return n.createElement(a.Mp,{sensors:d,collisionDetection:t,measuring:{droppable:{strategy:a.Pf.Always},draggable:{measure:a.Sj}},autoScroll:!1},r)}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/4140.46221d08bcda08826c78.chunk.js b/src/web/gui/v2/4140.46221d08bcda08826c78.chunk.js deleted file mode 100644 index 085bf2f6c..000000000 --- a/src/web/gui/v2/4140.46221d08bcda08826c78.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h=(new Error).stack;h&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[h]="0bf59ea8-784e-464d-bf04-ac3d5192b910",t._sentryDebugIdIdentifier="sentry-dbid-0bf59ea8-784e-464d-bf04-ac3d5192b910")}catch(t){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[4140],{98496:(t,h,l)=>{"use strict";l.d(h,{A:()=>o});var c=l(58168),i=l(96540),a=l(83199),e=l(12897),v=l.n(e),r=l(55042),f=l.n(r),n=new(v())({id:"partialFailureSvg",use:"partialFailureSvg-usage",viewBox:"0 0 348 348",content:''});f().add(n);const p=n,o=t=>{let{title:h,children:l,...e}=t;return i.createElement(a.Flex,{alignItems:"center",justifyContent:"center",flex:!0,gap:8},i.createElement("svg",{id:"partial_failure",width:"288px",height:"234px"},i.createElement("use",{xlinkHref:"#".concat(p.id)})),i.createElement(a.Flex,(0,c.A)({column:!0,width:{max:125},gap:2},e),i.createElement(a.H3,null,h),l))}},26688:(t,h,l)=>{"use strict";l.d(h,{A:()=>i});var c=l(94390);const i=()=>t=>{let{template:h,formData:l={},entityProps:i}=t;return{[c.D9]:!0,template:h,name:"",sourceType:"user",type:"job",formData:l,entityProps:i}}},47193:(t,h,l)=>{"use strict";l.d(h,{A:()=>f});l(62953);var c=l(69765),i=l(67990),a=l(87860),e=l(3914),v=l(47762),r=l(87659);const f=function(){let{polling:t=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:h=""}=(0,c.pr)(),l=(0,i.gr)(h,"ids"),f=(0,i.gr)(h,"loaded"),n=(0,v.Gt)(l),p=(0,e.vt)(),[o,,,d]=(0,r.A)();return(0,a.A)({id:h,spaceId:p,polling:t}),{areDefaultRoomNodesLoaded:f,nodes:n,isClaimNodeModalOpen:o,closeClaimNodeModal:d}}},3705:(t,h,l)=>{"use strict";l.d(h,{A:()=>a});l(62953);var c=l(96540);const i={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0},a=()=>{const[t,h]=(0,c.useState)(null),[l,a]=(0,c.useState)(i),e=(0,c.useMemo)((()=>new window.ResizeObserver((t=>{if(t[0]){const{x:h,y:l,width:c,height:i,top:e,left:v,bottom:r,right:f}=t[0].contentRect;a({x:h,y:l,width:c,height:i,top:e,left:v,bottom:r,right:f})}}))),[]);return(0,c.useLayoutEffect)((()=>{if(t)return e.observe(t),()=>{e.disconnect()}}),[t]),[h,l]}},54128:(t,h,l)=>{var c=l(31800),i=/^\s+/;t.exports=function(t){return t?t.slice(0,c(t)+1).replace(i,""):t}},55765:(t,h,l)=>{var c=l(38859),i=l(15325),a=l(29905),e=l(19219),v=l(44517),r=l(84247);t.exports=function(t,h,l){var f=-1,n=i,p=t.length,o=!0,d=[],M=d;if(l)o=!1,n=a;else if(p>=200){var s=h?null:v(t);if(s)return r(s);o=!1,n=e,M=new c}else M=h?[]:d;t:for(;++f{var c=l(76545),i=l(63950),a=l(84247),e=c&&1/a(new c([,-0]))[1]==1/0?function(t){return new c(t)}:i;t.exports=e},31800:t=>{var h=/\s/;t.exports=function(t){for(var l=t.length;l--&&h.test(t.charAt(l)););return l}},62193:(t,h,l)=>{var c=l(88984),i=l(5861),a=l(72428),e=l(56449),v=l(64894),r=l(3656),f=l(55527),n=l(37167),p=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(v(t)&&(e(t)||"string"==typeof t||"function"==typeof t.splice||r(t)||n(t)||a(t)))return!t.length;var h=i(t);if("[object Map]"==h||"[object Set]"==h)return!t.size;if(f(t))return!c(t).length;for(var l in t)if(p.call(t,l))return!1;return!0}},99374:(t,h,l)=>{var c=l(54128),i=l(23805),a=l(44394),e=/^[-+]0x[0-9a-f]+$/i,v=/^0b[01]+$/i,r=/^0o[0-7]+$/i,f=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(a(t))return NaN;if(i(t)){var h="function"==typeof t.valueOf?t.valueOf():t;t=i(h)?h+"":h}if("string"!=typeof t)return 0===t?t:+t;t=c(t);var l=v.test(t);return l||r.test(t)?f(t.slice(2),l?2:8):e.test(t)?NaN:+t}},24074:(t,h,l)=>{"use strict";var c=l(69565),i=l(28551),a=l(2360),e=l(55966),v=l(56279),r=l(91181),f=l(97751),n=l(53982),p=l(62529),o=f("Promise"),d="AsyncFromSyncIterator",M=r.set,s=r.getterFor(d),u=function(t,h,l){var c=t.done;o.resolve(t.value).then((function(t){h(p(t,c))}),l)},z=function(t){t.type=d,M(this,t)};z.prototype=v(a(n),{next:function(){var t=s(this);return new o((function(h,l){var a=i(c(t.next,t.iterator));u(a,h,l)}))},return:function(){var t=s(this).iterator;return new o((function(h,l){var a=e(t,"return");if(void 0===a)return h(p(void 0,!0));var v=i(c(a,t));u(v,h,l)}))}}),t.exports=z},50133:(t,h,l)=>{"use strict";var c=l(69565),i=l(94901),a=l(28551),e=l(1767),v=l(50851),r=l(55966),f=l(78227),n=l(24074),p=f("asyncIterator");t.exports=function(t){var h,l=a(t),f=!0,o=r(l,p);return i(o)||(o=v(l),f=!1),void 0!==o?h=c(o,l):(h=l,f=!0),a(h),e(f?h:new n(e(h)))}},48646:(t,h,l)=>{"use strict";var c=l(69565),i=l(28551),a=l(1767),e=l(50851);t.exports=function(t,h){h&&"string"===typeof t||i(t);var l=e(t);return a(i(void 0!==l?c(l,t):t))}},30237:(t,h,l)=>{"use strict";l(6469)("flatMap")},32679:(t,h,l)=>{"use strict";var c=l(46518),i=l(69565),a=l(79306),e=l(28551),v=l(20034),r=l(1767),f=l(92059),n=l(62529),p=l(50133),o=l(20772),d=l(96395),M=f((function(t){var h=this,l=h.iterator,c=h.mapper;return new t((function(a,r){var f=function(t){h.done=!0,r(t)},d=function(t){o(l,f,t,f)},M=function(){try{t.resolve(e(i(h.next,l))).then((function(l){try{if(e(l).done)h.done=!0,a(n(void 0,!0));else{var i=l.value;try{var r=c(i,h.counter++),o=function(t){try{h.inner=p(t),s()}catch(l){d(l)}};v(r)?t.resolve(r).then(o,d):o(r)}catch(M){d(M)}}}catch(u){f(u)}}),f)}catch(r){f(r)}},s=function(){var l=h.inner;if(l)try{t.resolve(e(i(l.next,l.iterator))).then((function(t){try{e(t).done?(h.inner=null,M()):a(n(t.value,!1))}catch(l){d(l)}}),d)}catch(c){d(c)}else M()};s()}))}));c({target:"AsyncIterator",proto:!0,real:!0,forced:d},{flatMap:function(t){return e(this),a(t),new M(r(this),{mapper:t,inner:null})}})},30670:(t,h,l)=>{"use strict";var c=l(46518),i=l(69565),a=l(79306),e=l(28551),v=l(1767),r=l(48646),f=l(19462),n=l(9539),p=l(96395),o=f((function(){for(var t,h,l=this.iterator,c=this.mapper;;){if(h=this.inner)try{if(!(t=e(i(h.next,h.iterator))).done)return t.value;this.inner=null}catch(a){n(l,"throw",a)}if(t=e(i(this.next,l)),this.done=!!t.done)return;try{this.inner=r(c(t.value,this.counter++),!1)}catch(a){n(l,"throw",a)}}}));c({target:"Iterator",proto:!0,real:!0,forced:p},{flatMap:function(t){return e(this),a(t),new o(v(this),{mapper:t,inner:null})}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/4140.89070793921be1288bb5.css b/src/web/gui/v2/4140.89070793921be1288bb5.css deleted file mode 100644 index e5d02668f..000000000 --- a/src/web/gui/v2/4140.89070793921be1288bb5.css +++ /dev/null @@ -1,2 +0,0 @@ -.default .dygraph-axis-label{color:#35414a}.dark .dygraph-axis-label{color:#fff}.dygraph-label-rotate-right{text-align:center;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg)}.dygraph-annotation{position:absolute;z-index:10;overflow:hidden;border:1px solid} - diff --git a/src/web/gui/v2/4414.590ba07d470ba2ce7dd0.chunk.js b/src/web/gui/v2/4414.590ba07d470ba2ce7dd0.chunk.js deleted file mode 100644 index 571584662..000000000 --- a/src/web/gui/v2/4414.590ba07d470ba2ce7dd0.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3597fc37-c681-4308-9ec1-86674db668e7",e._sentryDebugIdIdentifier="sentry-dbid-3597fc37-c681-4308-9ec1-86674db668e7")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[4414],{74414:(e,n,c)=>{c.r(n),c.d(n,{default:()=>f});var d=c(8711);const o="> .dyncfg-field-content > .dyncfg-object-field-container > .dyncfg-object-field-collapsible > .dyncfg-object-field-content",t=(0,d.css)([".dyncfg-grid ",",.dyncfg-grid ","{display:grid;column-gap:16px;row-gap:6px;}",""],o,"> .dyncfg-object-field-content",(e=>{const n=[];for(let c=1;c<=e;c++){n.push(".dyncfg-grid-col-".concat(c," ").concat(o," {\n grid-template-columns: repeat(").concat(c,", 1fr) !important;\n }"));for(let d=1;d<=e-c+1;d++)n.push(".dyncfg-grid-col-span-".concat(c,"-").concat(d," { grid-column: ").concat(c," / span ").concat(d,"; }"))}return n.join("\n")})(12)),f=(0,d.createGlobalStyle)(["",""],t)}}]); \ No newline at end of file diff --git a/src/web/gui/v2/4631.158982e127e11bdc6a45.chunk.js b/src/web/gui/v2/4631.158982e127e11bdc6a45.chunk.js deleted file mode 100644 index d88a2cc27..000000000 --- a/src/web/gui/v2/4631.158982e127e11bdc6a45.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="f20fb62a-06c6-4a7c-b697-548babd14717",e._sentryDebugIdIdentifier="sentry-dbid-f20fb62a-06c6-4a7c-b697-548babd14717")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[4631],{97916:(e,t,r)=>{var n=r(76080),s=r(69565),a=r(48981),i=r(96319),o=r(44209),u=r(33517),h=r(26198),f=r(97040),l=r(70081),c=r(50851),p=Array;e.exports=function(e){var t=a(e),r=u(this),g=arguments.length,m=g>1?arguments[1]:void 0,d=void 0!==m;d&&(m=n(m,g>2?arguments[2]:void 0));var v,b,w,y,P,S,U=c(t),k=0;if(!U||this===p&&o(U))for(v=h(t),b=r?new this(v):p(v);v>k;k++)S=d?m(t[k],k):t[k],f(b,k,S);else for(b=r?new this:[],P=(y=l(t,U)).next;!(w=s(P,y)).done;k++)S=d?i(y,m,[w.value,k],!0):w.value,f(b,k,S);return b.length=k,b}},44213:(e,t,r)=>{var n=r(43724),s=r(79504),a=r(69565),i=r(79039),o=r(71072),u=r(33717),h=r(48773),f=r(48981),l=r(47055),c=Object.assign,p=Object.defineProperty,g=s([].concat);e.exports=!c||i((function(){if(n&&1!==c({b:1},c(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol("assign detection"),s="abcdefghijklmnopqrst";return e[r]=7,s.split("").forEach((function(e){t[e]=e})),7!==c({},e)[r]||o(c({},t)).join("")!==s}))?function(e,t){for(var r=f(e),s=arguments.length,i=1,c=u.f,p=h.f;s>i;)for(var m,d=l(arguments[i++]),v=c?g(o(d),c(d)):o(d),b=v.length,w=0;b>w;)m=v[w++],n&&!a(p,d,m)||(r[m]=d[m]);return r}:c},3717:(e,t,r)=>{var n=r(79504),s=2147483647,a=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,o="Overflow: input needs wider integers to process",u=RangeError,h=n(i.exec),f=Math.floor,l=String.fromCharCode,c=n("".charCodeAt),p=n([].join),g=n([].push),m=n("".replace),d=n("".split),v=n("".toLowerCase),b=function(e){return e+22+75*(e<26)},w=function(e,t,r){var n=0;for(e=r?f(e/700):e>>1,e+=f(e/t);e>455;)e=f(e/35),n+=36;return f(n+36*e/(e+38))},y=function(e){var t=[];e=function(e){for(var t=[],r=0,n=e.length;r=55296&&s<=56319&&r=i&&nf((s-h)/P))throw new u(o);for(h+=(y-i)*P,i=y,r=0;rs)throw new u(o);if(n===i){for(var S=h,U=36;;){var k=U<=m?1:U>=m+26?26:U-m;if(S{var n=r(68183).charAt,s=r(655),a=r(91181),i=r(51088),o=r(62529),u="String Iterator",h=a.set,f=a.getterFor(u);i(String,"String",(function(e){h(this,{type:u,string:s(e),index:0})}),(function(){var e,t=f(this),r=t.string,s=t.index;return s>=r.length?o(void 0,!0):(e=n(r,s),t.index+=e.length,o(e,!1))}))},45806:(e,t,r)=>{r(47764);var n,s=r(46518),a=r(43724),i=r(67416),o=r(24475),u=r(76080),h=r(79504),f=r(36840),l=r(62106),c=r(90679),p=r(39297),g=r(44213),m=r(97916),d=r(67680),v=r(68183).codeAt,b=r(3717),w=r(655),y=r(10687),P=r(22812),S=r(98406),U=r(91181),k=U.set,R=U.getterFor("URL"),L=S.URLSearchParams,H=S.getState,q=o.URL,B=o.TypeError,A=o.parseInt,C=Math.floor,I=Math.pow,O=h("".charAt),j=h(/./.exec),x=h([].join),E=h(1..toString),_=h([].pop),z=h([].push),F=h("".replace),$=h([].shift),D=h("".split),M=h("".slice),N=h("".toLowerCase),J=h([].unshift),T="Invalid scheme",Y="Invalid host",G="Invalid port",K=/[a-z]/i,Q=/[\d+-.a-z]/i,V=/\d/,W=/^0x/i,X=/^[0-7]+$/,Z=/^\d+$/,ee=/^[\da-f]+$/i,te=/[\0\t\n\r #%/:<>?@[\\\]^|]/,re=/[\0\t\n\r #/:<>?@[\\\]^|]/,ne=/^[\u0000-\u0020]+/,se=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,ae=/[\t\n\r]/g,ie=function(e){var t,r,n,s;if("number"==typeof e){for(t=[],r=0;r<4;r++)J(t,e%256),e=C(e/256);return x(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,r=1,n=null,s=0,a=0;a<8;a++)0!==e[a]?(s>r&&(t=n,r=s),n=null,s=0):(null===n&&(n=a),++s);return s>r&&(t=n,r=s),t}(e),r=0;r<8;r++)s&&0===e[r]||(s&&(s=!1),n===r?(t+=r?":":"::",s=!0):(t+=E(e[r],16),r<7&&(t+=":")));return"["+t+"]"}return e},oe={},ue=g({},oe,{" ":1,'"':1,"<":1,">":1,"`":1}),he=g({},ue,{"#":1,"?":1,"{":1,"}":1}),fe=g({},he,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),le=function(e,t){var r=v(e,0);return r>32&&r<127&&!p(t,e)?e:encodeURIComponent(e)},ce={ftp:21,file:null,http:80,https:443,ws:80,wss:443},pe=function(e,t){var r;return 2===e.length&&j(K,O(e,0))&&(":"===(r=O(e,1))||!t&&"|"===r)},ge=function(e){var t;return e.length>1&&pe(M(e,0,2))&&(2===e.length||"/"===(t=O(e,2))||"\\"===t||"?"===t||"#"===t)},me=function(e){return"."===e||"%2e"===N(e)},de={},ve={},be={},we={},ye={},Pe={},Se={},Ue={},ke={},Re={},Le={},He={},qe={},Be={},Ae={},Ce={},Ie={},Oe={},je={},xe={},Ee={},_e=function(e,t,r){var n,s,a,i=w(e);if(t){if(s=this.parse(i))throw new B(s);this.searchParams=null}else{if(void 0!==r&&(n=new _e(r,!0)),s=this.parse(i,null,n))throw new B(s);(a=H(new L)).bindURL(this),this.searchParams=a}};_e.prototype={type:"URL",parse:function(e,t,r){var s,a,i,o,u,h=this,f=t||de,l=0,c="",g=!1,v=!1,b=!1;for(e=w(e),t||(h.scheme="",h.username="",h.password="",h.host=null,h.port=null,h.path=[],h.query=null,h.fragment=null,h.cannotBeABaseURL=!1,e=F(e,ne,""),e=F(e,se,"$1")),e=F(e,ae,""),s=m(e);l<=s.length;){switch(a=s[l],f){case de:if(!a||!j(K,a)){if(t)return T;f=be;continue}c+=N(a),f=ve;break;case ve:if(a&&(j(Q,a)||"+"===a||"-"===a||"."===a))c+=N(a);else{if(":"!==a){if(t)return T;c="",f=be,l=0;continue}if(t&&(h.isSpecial()!==p(ce,c)||"file"===c&&(h.includesCredentials()||null!==h.port)||"file"===h.scheme&&!h.host))return;if(h.scheme=c,t)return void(h.isSpecial()&&ce[h.scheme]===h.port&&(h.port=null));c="","file"===h.scheme?f=Be:h.isSpecial()&&r&&r.scheme===h.scheme?f=we:h.isSpecial()?f=Ue:"/"===s[l+1]?(f=ye,l++):(h.cannotBeABaseURL=!0,z(h.path,""),f=je)}break;case be:if(!r||r.cannotBeABaseURL&&"#"!==a)return T;if(r.cannotBeABaseURL&&"#"===a){h.scheme=r.scheme,h.path=d(r.path),h.query=r.query,h.fragment="",h.cannotBeABaseURL=!0,f=Ee;break}f="file"===r.scheme?Be:Pe;continue;case we:if("/"!==a||"/"!==s[l+1]){f=Pe;continue}f=ke,l++;break;case ye:if("/"===a){f=Re;break}f=Oe;continue;case Pe:if(h.scheme=r.scheme,a===n)h.username=r.username,h.password=r.password,h.host=r.host,h.port=r.port,h.path=d(r.path),h.query=r.query;else if("/"===a||"\\"===a&&h.isSpecial())f=Se;else if("?"===a)h.username=r.username,h.password=r.password,h.host=r.host,h.port=r.port,h.path=d(r.path),h.query="",f=xe;else{if("#"!==a){h.username=r.username,h.password=r.password,h.host=r.host,h.port=r.port,h.path=d(r.path),h.path.length--,f=Oe;continue}h.username=r.username,h.password=r.password,h.host=r.host,h.port=r.port,h.path=d(r.path),h.query=r.query,h.fragment="",f=Ee}break;case Se:if(!h.isSpecial()||"/"!==a&&"\\"!==a){if("/"!==a){h.username=r.username,h.password=r.password,h.host=r.host,h.port=r.port,f=Oe;continue}f=Re}else f=ke;break;case Ue:if(f=ke,"/"!==a||"/"!==O(c,l+1))continue;l++;break;case ke:if("/"!==a&&"\\"!==a){f=Re;continue}break;case Re:if("@"===a){g&&(c="%40"+c),g=!0,i=m(c);for(var y=0;y65535)return G;h.port=h.isSpecial()&&U===ce[h.scheme]?null:U,c=""}if(t)return;f=Ie;continue}return G}c+=a;break;case Be:if(h.scheme="file","/"===a||"\\"===a)f=Ae;else{if(!r||"file"!==r.scheme){f=Oe;continue}switch(a){case n:h.host=r.host,h.path=d(r.path),h.query=r.query;break;case"?":h.host=r.host,h.path=d(r.path),h.query="",f=xe;break;case"#":h.host=r.host,h.path=d(r.path),h.query=r.query,h.fragment="",f=Ee;break;default:ge(x(d(s,l),""))||(h.host=r.host,h.path=d(r.path),h.shortenPath()),f=Oe;continue}}break;case Ae:if("/"===a||"\\"===a){f=Ce;break}r&&"file"===r.scheme&&!ge(x(d(s,l),""))&&(pe(r.path[0],!0)?z(h.path,r.path[0]):h.host=r.host),f=Oe;continue;case Ce:if(a===n||"/"===a||"\\"===a||"?"===a||"#"===a){if(!t&&pe(c))f=Oe;else if(""===c){if(h.host="",t)return;f=Ie}else{if(o=h.parseHost(c))return o;if("localhost"===h.host&&(h.host=""),t)return;c="",f=Ie}continue}c+=a;break;case Ie:if(h.isSpecial()){if(f=Oe,"/"!==a&&"\\"!==a)continue}else if(t||"?"!==a)if(t||"#"!==a){if(a!==n&&(f=Oe,"/"!==a))continue}else h.fragment="",f=Ee;else h.query="",f=xe;break;case Oe:if(a===n||"/"===a||"\\"===a&&h.isSpecial()||!t&&("?"===a||"#"===a)){if(".."===(u=N(u=c))||"%2e."===u||".%2e"===u||"%2e%2e"===u?(h.shortenPath(),"/"===a||"\\"===a&&h.isSpecial()||z(h.path,"")):me(c)?"/"===a||"\\"===a&&h.isSpecial()||z(h.path,""):("file"===h.scheme&&!h.path.length&&pe(c)&&(h.host&&(h.host=""),c=O(c,0)+":"),z(h.path,c)),c="","file"===h.scheme&&(a===n||"?"===a||"#"===a))for(;h.path.length>1&&""===h.path[0];)$(h.path);"?"===a?(h.query="",f=xe):"#"===a&&(h.fragment="",f=Ee)}else c+=le(a,he);break;case je:"?"===a?(h.query="",f=xe):"#"===a?(h.fragment="",f=Ee):a!==n&&(h.path[0]+=le(a,oe));break;case xe:t||"#"!==a?a!==n&&("'"===a&&h.isSpecial()?h.query+="%27":h.query+="#"===a?"%23":le(a,oe)):(h.fragment="",f=Ee);break;case Ee:a!==n&&(h.fragment+=le(a,ue))}l++}},parseHost:function(e){var t,r,n;if("["===O(e,0)){if("]"!==O(e,e.length-1))return Y;if(t=function(e){var t,r,n,s,a,i,o,u=[0,0,0,0,0,0,0,0],h=0,f=null,l=0,c=function(){return O(e,l)};if(":"===c()){if(":"!==O(e,1))return;l+=2,f=++h}for(;c();){if(8===h)return;if(":"!==c()){for(t=r=0;r<4&&j(ee,c());)t=16*t+A(c(),16),l++,r++;if("."===c()){if(0===r)return;if(l-=r,h>6)return;for(n=0;c();){if(s=null,n>0){if(!("."===c()&&n<4))return;l++}if(!j(V,c()))return;for(;j(V,c());){if(a=A(c(),10),null===s)s=a;else{if(0===s)return;s=10*s+a}if(s>255)return;l++}u[h]=256*u[h]+s,2!==++n&&4!==n||h++}if(4!==n)return;break}if(":"===c()){if(l++,!c())return}else if(c())return;u[h++]=t}else{if(null!==f)return;l++,f=++h}}if(null!==f)for(i=h-f,h=7;0!==h&&i>0;)o=u[h],u[h--]=u[f+i-1],u[f+--i]=o;else if(8!==h)return;return u}(M(e,1,-1)),!t)return Y;this.host=t}else if(this.isSpecial()){if(e=b(e),j(te,e))return Y;if(t=function(e){var t,r,n,s,a,i,o,u=D(e,".");if(u.length&&""===u[u.length-1]&&u.length--,(t=u.length)>4)return e;for(r=[],n=0;n1&&"0"===O(s,0)&&(a=j(W,s)?16:8,s=M(s,8===a?1:2)),""===s)i=0;else{if(!j(10===a?Z:8===a?X:ee,s))return e;i=A(s,a)}z(r,i)}for(n=0;n=I(256,5-t))return null}else if(i>255)return null;for(o=_(r),n=0;n1?arguments[1]:void 0,n=k(t,new _e(e,!1,r));a||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},Fe=ze.prototype,$e=function(e,t){return{get:function(){return R(this)[e]()},set:t&&function(e){return R(this)[t](e)},configurable:!0,enumerable:!0}};if(a&&(l(Fe,"href",$e("serialize","setHref")),l(Fe,"origin",$e("getOrigin")),l(Fe,"protocol",$e("getProtocol","setProtocol")),l(Fe,"username",$e("getUsername","setUsername")),l(Fe,"password",$e("getPassword","setPassword")),l(Fe,"host",$e("getHost","setHost")),l(Fe,"hostname",$e("getHostname","setHostname")),l(Fe,"port",$e("getPort","setPort")),l(Fe,"pathname",$e("getPathname","setPathname")),l(Fe,"search",$e("getSearch","setSearch")),l(Fe,"searchParams",$e("getSearchParams")),l(Fe,"hash",$e("getHash","setHash"))),f(Fe,"toJSON",(function(){return R(this).serialize()}),{enumerable:!0}),f(Fe,"toString",(function(){return R(this).serialize()}),{enumerable:!0}),q){var De=q.createObjectURL,Me=q.revokeObjectURL;De&&f(ze,"createObjectURL",u(De,q)),Me&&f(ze,"revokeObjectURL",u(Me,q))}y(ze,"URL"),s({global:!0,constructor:!0,forced:!i,sham:!a},{URL:ze})},3296:(e,t,r)=>{r(45806)},27208:(e,t,r)=>{var n=r(46518),s=r(69565);n({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return s(URL.prototype.toString,this)}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/4680.7d8122d91e9d4582836a.chunk.js b/src/web/gui/v2/4680.7d8122d91e9d4582836a.chunk.js deleted file mode 100644 index 32ed81f99..000000000 --- a/src/web/gui/v2/4680.7d8122d91e9d4582836a.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="749c2bdc-e55c-48f5-bb20-4d797232fb98",e._sentryDebugIdIdentifier="sentry-dbid-749c2bdc-e55c-48f5-bb20-4d797232fb98")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[4680],{667:(e,t,n)=>{n.d(t,{A:()=>l});n(62953);var a=n(96540),o=n(27776),r=n(38819);const l=()=>{const e=(0,r.PP)(),[t,n]=(0,o.XL)(),{reset:l}=(0,o.b8)(),c=(0,a.useCallback)((()=>{l(),(0,r.Z8)({...e,integrationsModalOpen:"true"}),n("true")}),[l,e]);return{isIntegrationsVisible:t,hideIntegrations:(0,a.useCallback)((()=>{(0,r.Z8)({...e,integrationsModalOpen:""}),n("")}),[e]),onIntegrationsClick:c}}},84680:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Ee});n(62953);var a=n(96540),o=n(83199),r=n(5668),l=n(58168),c=(n(41393),n(81454),n(8711)),i=n(47767),s=n(68831),d=n(87659),u=n(43529),m=n(78862),p=n(29217),g=n(37944),h=n(3914);const f=e=>{let{...t}=e;const n=(0,g.A)(),r=(0,h.dg)();return a.createElement(p.A,{content:r?"Settings":"Space settings"},a.createElement(o.Flex,{padding:[0,1]},a.createElement(o.Button,(0,l.A)({flavour:"borderless",icon:"gear",neutral:!0,onClick:n,small:!0,"data-ga":"left-sidebar::click-space-settings::global-view","data-testid":"workspaceBar-manageSpace"},t))))};var E=n(50105),b=n(74293),v=n(71847),w=n(64754),x=n(76634),k=n(54972),C=n(96382);const y=()=>{const e=(0,C.ae)("email"),{handleOpenProfileModal:t}=(0,k.A)();return"loading"===e.state||e.state.hasError?null:a.createElement(o.IconButton,{flavour:"borderless","data-testid":"open-email-notification",cursor:"pointer",width:"20px",height:"20px",onClick:()=>t("notifications"),icon:e.contents.email?"notification_shortcut_enabled":"notification_shortcut_disabled",tooltip:"Email Notifications","data-ga":"left-sidebar::click-user-notification-settings::global-view",iconColor:"iconColor"})},I=(0,a.memo)(y);const A=(0,n(92155).A)(w.A),S=c.default.div.withConfig({displayName:"spaces__Separator",componentId:"sc-1gbju6k-0"})(["height:1px;width:",";background:",";"],(0,o.getSizeBy)(3),(0,o.getColor)("border")),F=(0,c.default)(o.Button).withConfig({displayName:"spaces__DocButton",componentId:"sc-1gbju6k-1"})(["&&{> .button-icon{width:20px;height:20px;}}"]),_=(0,c.default)(o.Button).withConfig({displayName:"spaces__ExpandButton",componentId:"sc-1gbju6k-2"})(["&&{> .button-icon{width:6px;height:9px;}}"]),N={onClickOut:()=>(0,v.H)("header-help","click-out-modal","global-view"),onCloseClick:()=>(0,v.H)("header-help","click-close","global-view"),onOpenIssueClick:()=>(0,v.H)("header-help","click-\u03bfpen-issue","global-view"),onContributeClick:()=>(0,v.H)("header-help","click-contribute","global-view"),onOpenBugClick:()=>(0,v.H)("header-help","click-bug","global-view"),onSupportClick:()=>(0,v.H)("header-help","click-support","global-view"),onVisitDocumentClick:()=>(0,v.H)("header-help","click-visit-doc","global-view"),onGoToDemoClick:()=>(0,v.H)("header-help","click-go-to-demo","global-view")},P=e=>{let{spacePanelCollapsed:t,toggleSpacePanel:n}=e;const r=(0,h.Pk)(),c=(0,h.vt)(),[g,,v,w]=(0,d.A)(),k=(0,i.Zp)(),C=(0,a.useCallback)((function(){let{slug:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return k("/spaces/".concat(e))}),[]);return a.createElement(o.Flex,{background:"sideBarMini","data-testid":"workspaceBar",padding:[3,0],column:!0,alignItems:"center",gap:6,height:"100vh",justifyContent:"between"},a.createElement(o.Flex,{column:!0,"data-testid":"workspaceBar-spaces-list",gap:4,alignItems:"center",overflow:"hidden"},a.createElement(u.A,{"data-testid":"workspaceBar-netdataLogo"}),t&&a.createElement(_,{"data-testid":"workspaceBar-expandButton",onClick:n,icon:"chevron_right_s",neutral:!0,flavour:"borderless",small:!0}),a.createElement(o.Flex,{column:!0,"data-testid":"workspaceBar-spacesList",gap:4,overflow:{vertical:"auto"}},r.map((e=>a.createElement(m.A,{testIdPrefix:"workspaceBar-space",key:e,spaceId:e,active:e===c})))),a.createElement(x.A,{permission:"user:CreateSpace"},a.createElement(S,{"data-testid":"workspaceBar-separator"})),a.createElement(p.A,{content:"Create a new Space",align:"right"},a.createElement(A,{permission:"user:CreateSpace",ifForbidden:"hide",icon:"plus",onClick:v,"data-testid":"workspaceBar-addSpace-button",feature:"CreateSpace",isStart:!0}))),a.createElement(o.Flex,{column:!0,"data-testid":"workspaceBar-actionsList",gap:4,alignItems:"center"},a.createElement(o.Flex,{column:!0,gap:1,alignItems:"center"},a.createElement(x.A,{permission:"user:ChangeSpaceRoomNotifications"},a.createElement(I,null)),a.createElement(o.Documentation,(0,l.A)({app:"cloud",demoUrl:s.A.demoUrl},N),(e=>a.createElement(p.A,{content:"Read documentation, engage with the community and let us know about any feature requests or bugs",align:"right"},a.createElement(F,{neutral:!0,flavour:"borderless",icon:"question",onClick:e,"data-ga":"header-help::click-help::global-view","data-testid":"documentation-button",title:"Need help?"})))),a.createElement(f,null)),a.createElement(b.A,null)),g&&a.createElement(E.A,{onClose:w,onDone:C}))};n(30067),n(93518),n(25440),n(17333),n(3064),n(98992),n(54520),n(72577);var T=n(22292),B=n(26655),R=n(9224),O=n(47762),j=n(87337),L=n(63129),D=n(45123),W=n(56915),H=n(24266),U=n(91069);const z=(0,c.default)(o.Icon).withConfig({displayName:"styled__TrashIcon",componentId:"sc-1hr9uxl-0"})(["&:hover{fill:",";opacity:0.6;}"],(0,o.getColor)("textFocus")),M=(0,c.default)(o.TextSmall).withConfig({displayName:"styled__UrlWrapper",componentId:"sc-1hr9uxl-1"})(["overflow-wrap:anywhere;"]),V=(0,c.default)(o.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-1hr9uxl-2"})(["transform:",";"],(e=>{let{right:t}=e;return t?"rotate(0)":"rotate(180deg)"})),G=e=>{/https?:\/\//.test(e)||(e="http://".concat(e)),location.replace(e)},J=function(e,t){let{openList:n,setSelectedId:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=(0,T.uW)("isAnonymous"),l=(0,a.useRef)(),c=(0,h.UV)("ids"),i=(0,h.jw)(c);return(0,a.useCallback)((async()=>{if(o(e),l.current||(l.current=await(async(e,t)=>{let{spaces:n=[],id:a,isAnonymous:o=!1}=t;if(!o){const{data:e}=await(0,R.ys)(a);let t;if(e.length&&(t=await Promise.any(n.map((t=>B.A.get((0,U.t)({spaceId:t.id})).then((n=>{let{data:a}=n;return Promise.any(a.map((n=>(0,L.uQ)({roomId:n.id,spaceId:t.id}).then((a=>{let{data:o}=a;const r=o.find((t=>{let{id:n}=t;return e.includes(n)}));if(!r)throw new Error("can't find matching node");return"".concat(window.envSettings.cloudUrl,"/spaces/").concat(t.slug,"/rooms/").concat(n.slug,"/nodes/").concat(r.id)})))))}))))).then((e=>e)).catch((()=>{}))),t)return t}const r=e.filter((e=>!/netdata\.cloud\//.test(e)));if(r.length)return await Promise.any(r.map((e=>{let t=/^https?:\/\//.test(e)?e:"http://".concat(e);return t=t.replace(/\/+$/,""),B.A.get("".concat(t,"/api/v1/registry?action=hello")).then((()=>t))}))).then((e=>e)).catch((()=>{}))})(t,{spaces:i,id:e,isAnonymous:r})),o(),!l.current)return n();G(l.current)}),[t,i])},Y=e=>{let{id:t,selectedId:n,setSelectedId:r}=e;const l=(0,O.xY)(t,"name"),[c,,i,s]=(0,d.A)(),u=(0,j.rE)(),m=(0,O.xY)(t,"urls"),p=J(t,m,{openList:i,setSelectedId:r}),g=(0,a.useCallback)((()=>{c?s():p()}),[c,p]),h=n===t;return a.createElement(a.Fragment,null,a.createElement(D.A,{onClick:g,isSidebar:!0,padding:[1,2,1,4],testid:"visitedNodes-".concat(l),disabled:!!n&&!h,selected:h,loading:h,iconColor:"textNoFocus",textColor:"textNoFocus",Wrapper:o.TextSmall},l),c&&a.createElement(o.Flex,{column:!0,margin:[1,3],padding:[2],border:{side:"all",color:"placeholder"},round:2},a.createElement(o.Text,{textAlign:"center"},"We couldn't connect to any of your instances, here is the list:"),m.map((e=>a.createElement(D.A,{key:e,onClick:()=>G(e),isSidebar:!0,testid:"visitedNodes-node-".concat(e),actions:a.createElement(o.Flex,{flex:!1,margin:[0,0,0,1]},a.createElement(z,{name:"trashcan",size:"small",color:"textNoFocus",onClick:n=>{n.stopPropagation(),u(t,e)},width:"16px",height:"16px"})),padding:[2],Wrapper:M,iconColor:"textNoFocus",textColor:"textNoFocus"},e)))))},Z=()=>{const e=(0,j.iw)(),[t,n]=(0,d.A)(e.length>0);(0,a.useEffect)((()=>{t||n()}),[e.length]);const[r,l]=(0,a.useState)(""),c=(0,j.vS)(r),[i,s]=(0,a.useState)();return e.length?a.createElement(W.A,{isOpen:t,toggleOpen:n,label:a.createElement(o.Flex,{padding:[1,0],flex:!0,justifyContent:"between",alignItems:"center"},a.createElement(o.Flex,{alignItems:"center",gap:2},a.createElement(o.Icon,{name:"node_hollow",color:"textNoFocus",width:"14px",height:"14px"}),a.createElement(o.TextSmall,{color:"textNoFocus"},"Visited Nodes")),a.createElement(V,{right:!t,name:"chevron_down",size:"small",color:"textNoFocus"})),headerTestId:"visitedNodes"},e.length>3&&a.createElement(o.Flex,{padding:[1,2,2,4]},a.createElement(o.SearchInput,{"data-testid":"search-visited-nodes-input",onChange:l,value:r,size:"tiny"})),a.createElement(o.Flex,{padding:[0,0,2],column:!0},c.length?c.map((e=>a.createElement(Y,{key:e,id:e,selectedId:i,setSelectedId:s}))):a.createElement(o.Text,{padding:[3,5]},"No nodes match your search"))):null},q=(0,a.memo)((()=>a.createElement(H.Ay,{fallback:""},a.createElement(a.Suspense,{fallback:""},a.createElement(Z,null)))));var Q=n(79412),X=n(77279),$=n(46741);const K=e=>t=>{const n=(0,h.vt)();return a.createElement(e,(0,l.A)({},t,{key:n}))};var ee=n(12938);const te={isSidebar:!0,padding:[1,2,1,4],textColor:"menuItem",Wrapper:o.TextSmall},ne=K((()=>{const e=(0,$.JT)("room:Create"),t=(0,$.JT)("room:Read"),[n,r]=(0,d.A)(t),[l,,c,i]=(0,d.A)(!1),s=(0,a.useCallback)((t=>{t.stopPropagation(),e&&c()}),[e]);return a.createElement(a.Fragment,null,a.createElement(W.A,{"data-testid":"workspaceRooms-menuList",disabled:!t,headerTestId:"workspaceRooms-warRooms",isOpen:n,label:a.createElement(o.Flex,{padding:[1,0],margin:[0,0,1,0],flex:!0,justifyContent:"between",alignItems:"center",height:"24px"},a.createElement(o.Flex,{alignItems:"center",gap:2},a.createElement(o.Icon,{name:"space_new",color:"menuItem",width:"14px",height:"14px"}),a.createElement(o.TextSmall,{color:"menuItem"},"Rooms")),a.createElement(o.Flex,{alignItems:"center",gap:2},a.createElement(p.A,{content:"Create a new room",align:"right"},a.createElement(w.A,{permission:"room:Create",tiny:!0,icon:"plus",onClick:s,"data-testid":"workspaceRooms-addWarRoom-button"})),a.createElement(X.v,{right:!n,name:"chevron_down",size:"small",color:"textLite"}))),toggleOpen:r},a.createElement(o.Flex,{column:!0,"data-testid":"workspaceRooms-warRoomsList",padding:[0,0,1]},a.createElement(ee.A,te))),l&&a.createElement(Q.n,{onClose:i,isSubmodal:!1}))}));var ae=n(39225),oe=n(67602);const re=(0,c.default)(o.Flex).attrs({alignItems:"center",justifyContent:"center",width:10,height:4,round:.5,background:"sideBarMini"}).withConfig({displayName:"styled__AdminPill",componentId:"sc-1ps23b1-0"})(["opacity:0;",":hover &{opacity:1;}"],D.G),le=(0,ae.A)((()=>n.e(2007).then(n.bind(n,62007))),"CurrentPlan"),ce=e=>{let{children:t,onToggle:n}=e;return a.createElement(o.Flex,{column:!0,gap:1},a.createElement(o.Flex,{justifyContent:"between",alignItems:"center"},a.createElement(o.Flex,{alignItems:"center"},t),a.createElement(o.Button,{onClick:n,icon:"chevron_left",neutral:!0,flavour:"hollow",small:!0})),a.createElement(a.Suspense,{fallback:""},a.createElement(le,null)))};var ie=n(38413),se=n(53285),de=n(667);const ue=(0,ae.A)((()=>Promise.all([n.e(7436),n.e(7170)]).then(n.bind(n,57436)).then((e=>({default:e.TrialWarning})))),"TrialWarning"),me=(0,c.default)(W.N).attrs({padding:[2],color:"textLite"}).withConfig({displayName:"spacePanel__ListHeader",componentId:"sc-1275zgk-0"})([""]),pe=e=>a.createElement(o.Flex,(0,l.A)({alignItems:"center",gap:2},e),a.createElement(re,null,a.createElement(o.TextFemto,{strong:!0,color:"text"},"ADMIN")),a.createElement(o.Flex,{opacity:"medium"},a.createElement(o.Icon,{name:"padlock",size:"small",width:"18px",height:"18px",color:"text"}))),ge={iconWidth:"14px",iconHeight:"14px",padding:[1,2],gap:2,isSidebar:!0,textColor:"menuItem",iconColor:"menuItem",Wrapper:o.TextSmall},he=e=>{let{toggleSpacePanel:t}=e;const n=(0,h.ap)(),[r,,c,i]=(0,d.A)(),[,s]=(0,oe.A)("manageInvitations"),u=(0,h.dg)(),{onIntegrationsClick:m}=(0,de.A)();return a.createElement(a.Fragment,null,r&&a.createElement(ie.A,{title:"Integrations",onClose:i}),a.createElement(W.A,{"data-testid":"spacesPanel",isOpen:!0,label:a.createElement(ce,{onToggle:t},n.name),headerTestId:"spacesPanel-activeSpaceHeader",Header:me},a.createElement(o.Flex,{column:!0,padding:[2,0,1],"data-testid":"spacesPanel-menuList"},a.createElement(a.Suspense,{fallback:""},a.createElement(ue,{flavour:"sidebar"})),a.createElement(D.A,(0,l.A)({onClick:m,testid:"agentDashboard-addIntegrations",dataGa:"integrations::click-add-integrations::sideMenu",icon:"integrations"},ge),"Integrations"),u?null:a.createElement(a.Fragment,null,a.createElement(se.A,{permission:"node:Create"},(e=>a.createElement(D.A,(0,l.A)({actions:e?null:a.createElement(pe,{"data-testid":"adminWarning-notAdmin"}),disabled:!e,onClick:c,testid:"spacesPanel-claimNodes",icon:"nodes_hollow"},ge),"Connect Nodes"))),a.createElement(se.A,{permission:"space:InviteUser"},(e=>a.createElement(D.A,(0,l.A)({actions:e?null:a.createElement(pe,{"data-testid":"adminWarning-cannotInvite"}),disabled:!e,onClick:s,testid:"spacesPanel-inviteUsers",icon:"user"},ge),"Invite Users")))))))},fe=e=>{let{spacePanelCollapsed:t,toggleSpacePanel:n}=e;return a.createElement(o.Collapsible,{width:56,background:"sideBar",border:{side:"right",color:"borderSecondary"},open:!t,direction:"horizontal"},a.createElement(o.Flex,{flex:!0,width:56,column:!0,overflow:{vertical:"hidden"},padding:[2,0],position:"relative"},a.createElement(he,{toggleSpacePanel:n}),a.createElement(o.Flex,{overflow:{vertical:"auto"},flex:!0,column:!0},a.createElement(ne,null),a.createElement(q,null))))},Ee=(0,a.memo)((()=>{const[e,t]=(0,r.tF)("spacePanelCollapsed"),{isIntegrationsVisible:n,hideIntegrations:l}=(0,de.A)(),c=(0,a.useCallback)((()=>t(!e)),[e]);return(0,a.useLayoutEffect)((()=>{const e=setTimeout((()=>window.dispatchEvent(new Event("resize"))),400);return()=>clearTimeout(e)}),[e]),a.createElement(o.Flex,null,a.createElement(P,{spacePanelCollapsed:e,toggleSpacePanel:c}),a.createElement(fe,{spacePanelCollapsed:e,toggleSpacePanel:c}),n&&a.createElement(ie.A,{title:"Integrations",onClose:l,flavour:"integrations"}))}))},84428:(e,t,n)=>{var a=n(78227)("iterator"),o=!1;try{var r=0,l={next:function(){return{done:!!r++}},return:function(){o=!0}};l[a]=function(){return this},Array.from(l,(function(){throw 2}))}catch(c){}e.exports=function(e,t){try{if(!t&&!o)return!1}catch(c){return!1}var n=!1;try{var r={};r[a]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch(c){}return n}},87290:(e,t,n)=>{var a=n(50516),o=n(19088);e.exports=!a&&!o&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,t,n)=>{var a=n(24475),o=n(44576);e.exports="process"===o(a.process)},16193:(e,t,n)=>{var a=n(79504),o=Error,r=a("".replace),l=String(new o("zxcasd").stack),c=/\n\s*at [^:]*:[^\n]*/,i=c.test(l);e.exports=function(e,t){if(i&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=r(e,c,"");return e}},80747:(e,t,n)=>{var a=n(66699),o=n(16193),r=n(24659),l=Error.captureStackTrace;e.exports=function(e,t,n,c){r&&(l?l(e,t):a(e,"stack",o(n,c)))}},24659:(e,t,n)=>{var a=n(79039),o=n(6980);e.exports=!a((function(){var e=new Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},77584:(e,t,n)=>{var a=n(20034),o=n(66699);e.exports=function(e,t){a(t)&&"cause"in t&&o(e,"cause",t.cause)}},32603:(e,t,n)=>{var a=n(655);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:a(e)}},10916:(e,t,n)=>{var a=n(24475),o=n(80550),r=n(94901),l=n(92796),c=n(33706),i=n(78227),s=n(87290),d=n(50516),u=n(96395),m=n(77388),p=o&&o.prototype,g=i("species"),h=!1,f=r(a.PromiseRejectionEvent),E=l("Promise",(function(){var e=c(o),t=e!==String(o);if(!t&&66===m)return!0;if(u&&(!p.catch||!p.finally))return!0;if(!m||m<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),a=function(e){e((function(){}),(function(){}))};if((n.constructor={})[g]=a,!(h=n.then((function(){}))instanceof a))return!0}return!t&&(s||d)&&!f}));e.exports={CONSTRUCTOR:E,REJECTION_EVENT:f,SUBCLASSING:h}},90537:(e,t,n)=>{var a=n(80550),o=n(84428),r=n(10916).CONSTRUCTOR;e.exports=r||!o((function(e){a.all(e).then(void 0,(function(){}))}))},17145:(e,t,n)=>{var a=n(46518),o=n(1625),r=n(42787),l=n(52967),c=n(77740),i=n(2360),s=n(66699),d=n(6980),u=n(77584),m=n(80747),p=n(72652),g=n(32603),h=n(78227)("toStringTag"),f=Error,E=[].push,b=function(e,t){var n,a=o(v,this);l?n=l(new f,a?r(this):v):(n=a?this:i(v),s(n,h,"Error")),void 0!==t&&s(n,"message",g(t)),m(n,b,n.stack,1),arguments.length>2&&u(n,arguments[2]);var c=[];return p(e,E,{that:c}),s(n,"errors",c),n};l?l(b,f):c(b,f,{name:!0});var v=b.prototype=i(f.prototype,{constructor:d(1,b),message:d(1,""),name:d(1,"AggregateError")});a({global:!0,constructor:!0,arity:2},{AggregateError:b})},30067:(e,t,n)=>{n(17145)},93518:(e,t,n)=>{var a=n(46518),o=n(69565),r=n(79306),l=n(97751),c=n(36043),i=n(1103),s=n(72652),d=n(90537),u="No one promise resolved";a({target:"Promise",stat:!0,forced:d},{any:function(e){var t=this,n=l("AggregateError"),a=c.f(t),d=a.resolve,m=a.reject,p=i((function(){var a=r(t.resolve),l=[],c=0,i=1,p=!1;s(e,(function(e){var r=c++,s=!1;i++,o(a,t,e).then((function(e){s||p||(p=!0,d(e))}),(function(e){s||p||(s=!0,l[r]=e,--i||m(new n(l,u)))}))})),--i||m(new n(l,u))}));return p.error&&m(p.value),a.promise}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/4958.5969fedc1ff7dc82775e.chunk.js b/src/web/gui/v2/4958.5969fedc1ff7dc82775e.chunk.js deleted file mode 100644 index 51443523a..000000000 --- a/src/web/gui/v2/4958.5969fedc1ff7dc82775e.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="349be8c4-9658-4a28-87e0-147f3b4fa910",e._sentryDebugIdIdentifier="sentry-dbid-349be8c4-9658-4a28-87e0-147f3b4fa910")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[4958],{62232:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var a=n(58168),l=(n(17333),n(41393),n(98992),n(54520),n(81454),n(8711)),o=n(68090),r=n.n(o),i=n(96540),c=n(83199);const s=(0,l.default)(c.Box).withConfig({displayName:"breadcrumbs__StyledItemContainer",componentId:"sc-3u39st-0"})([""]),m=(0,l.css)(["&:hover{color:",";}"],(e=>{let{withHover:t,theme:n}=e;return t&&(0,c.getColor)("success")({theme:n})})),d=(0,l.default)(c.Text).withConfig({displayName:"breadcrumbs__StyledText",componentId:"sc-3u39st-1"})(["",""],m),u=(0,l.default)(c.TextSmall).withConfig({displayName:"breadcrumbs__StyledTextSmall",componentId:"sc-3u39st-2"})(["",""],m),g=e=>{let{items:t,isBig:n,showBackButton:l=!0,testid:o="",...m}=e;const g=(0,i.useMemo)((()=>{if(null===t||void 0===t||!t.length||!l)return null;return r()(t.filter((e=>{let{onClick:t}=e;return!!t}))).onClick}),[t,l]);if(null===t||void 0===t||!t.length)return null;const p=n?d:u;return i.createElement(c.Flex,(0,a.A)({gap:4},m),l&&i.createElement(c.Button,{onClick:g,icon:"chevron_left",label:"Back",neutral:!0,flavour:"hollow",small:!0,padding:[0,2,0,1],textTransform:"uppercase","data-testid":"".concat(o,"-breadcrumbs-backButton")}),i.createElement(c.Flex,{gap:2,alignItems:"center"},t.map(((e,t)=>{let{isDisabled:n,name:l,onClick:r}=e;return i.createElement(s,(0,a.A)({key:t,alignItems:"center"},r&&{cursor:"pointer",onClick:r},{"data-testid":"".concat(o,"-breadcrumbs-level-").concat(t)}),i.createElement(p,{color:n&&"textLite","data-testid":"".concat(o,"-breadcrumbs-level-").concat(t),withHover:!!r},0!==t&&" / ",l))}))))}},26751:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});var a=n(58168),l=n(96540),o=n(83199);const r=e=>{let{message:t,title:n,footer:r,...i}=e;const c=(null===i||void 0===i?void 0:i["data-testid"])||"functionError";return l.createElement(o.Flex,(0,a.A)({alignItems:"center",column:!0,"data-testid":c,flex:!0,gap:3,justifyContent:"center",padding:[0,20]},i),l.createElement(o.H3,{"data-testid":"".concat(c,"-title")},n),l.createElement(o.TextBig,{color:"textDescription","data-testid":"".concat(c,"-message")},t),r)}},54856:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var a=n(58168),l=n(96540),o=n(84976),r=n(83199),i=n(4659),c=n(46741),s=n(27994);const m=function(){let{containerProps:e={},...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,c.JT)("billing:ReadAll"),{url:m}=(0,s.A)();return m?l.createElement(r.Flex,(0,a.A)({background:"sideBarMini",border:{side:"all",color:"border"},padding:[1,2],round:!0},e),l.createElement(i.A,(0,a.A)({align:"bottom",as:o.N_,boxProps:{as:r.Flex},color:"text",Component:r.TextMicro,content:n?"Upgrade your plan in order to use this feature":"You have no permissions to manage billing",disabled:!n,hoverColor:"textFocus",showToolTip:!0,strong:!0,to:m},t),"Upgrade now!")):null}},54518:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var a=n(96540),l=n(58168),o=n(83199),r=n(29217);const i=e=>{let{description:t,isRequired:n,title:l,...i}=e;const c=i["data-testid"]?"".concat(i["data-testid"],"-label"):"fieldLabel";return a.createElement(o.Flex,{"data-testid":"".concat(c,"-container"),gap:1},a.createElement(o.TextSmall,{color:"textLite","data-testid":c},l,n&&" *"),t&&a.createElement(r.A,{align:"top",content:t,"data-testid":"".concat(c,"-info"),plain:!0},a.createElement(o.Icon,{color:"textLite",name:"information",size:"small"})))},c=e=>{let{"data-testid":t="input",description:n,isRequired:r,onChange:c,title:s,...m}=e;return a.createElement(o.Flex,{column:!0,"data-testid":t,flex:"grow",gap:1},a.createElement(i,{"data-testid":t,description:n,isRequired:r,title:s}),a.createElement(o.TextInput,(0,l.A)({"data-testid":"".concat(t,"-field"),size:"tiny",onChange:e=>{let{target:t}=e;return c(t.value)}},m)))};n(41393),n(81454);const s=e=>{var t;let{"data-testid":n="select",description:r,getDataGa:c,fields:s,id:m,isRequired:d,onChange:u,secrets:g,setSecrets:p,title:E,...h}=e;return a.createElement(o.Flex,{column:!0,"data-testid":n,flex:"grow",gap:1},a.createElement(i,{"data-testid":n,description:r,isRequired:d,title:E}),a.createElement(o.Select,(0,l.A)({"data-testid":"".concat(n,"-field"),menuPortalTarget:document.body,onChange:e=>u(e),styles:{size:"tiny"},menuPlacement:"auto"},h)),Object.values((null===s||void 0===s?void 0:s[null===(t=h.value)||void 0===t?void 0:t.value])||{}).map((e=>{let{getValue:t,id:o,onChange:r,...i}=e;return a.createElement(b,(0,l.A)({"data-ga":c("".concat(m,"-").concat(o,"-").concat(i.component)),"data-testid":"".concat(n,"-").concat(o),key:o,id:o,onChange:r({id:m,setSecrets:p,subsetId:o}),value:t({id:m,secrets:g,subsetId:o})},i))})))};n(14905),n(98992),n(8872),n(62953);var m=n(90179),d=n.n(m),u=n(97200),g=n.n(u),p=n(30960),E=n(63450);const h={default:()=>null,pairs:e=>{let{componentPairs:t,"data-testid":n="pairs",description:l,getDataGa:r,id:c,isRequired:s,placeholder:m,setSecrets:u,title:h}=e;const[b,v]=(0,a.useState)({});(0,a.useEffect)((()=>{const e=Object.values(b).reduce(((e,t)=>{let{key:n,value:a}=t;return n?{...e,[n]:a||""}:e}),{});u((t=>Object.keys(e).length?{...t,[c]:e}:d()(t,c)))}),[b]);return a.createElement(o.Flex,{column:!0,"data-testid":n,gap:1},a.createElement(o.Flex,{alignItems:"center",justifyContent:"between"},a.createElement(i,{"data-testid":n,description:l,isRequired:s,title:h}),t.map((e=>{const l=(0,p.$Q)(e);return a.createElement(E.ro,{"data-ga":r("".concat(c,"-").concat(l,"-add")),"data-testid":"".concat(n,"-").concat(l,"Add"),key:l,label:1===t.length?"Add":"Add ".concat(l),onClick:()=>(e=>v((t=>({...t,[g()("pair_")]:{key:"",components:e,value:""}}))))(e)})}))),Object.entries(b).map((e=>{let[t,{key:l,components:i,value:s}]=e;const[u,g]=i,E=(0,p.$Q)(i);return a.createElement(o.Flex,{alignItems:"end",key:"".concat(E,"-").concat(t),gap:2},a.createElement(f,{component:u,"data-ga":r("".concat(c,"-").concat(E,"-key")),"data-testid":"".concat(n,"-").concat(E,"Key"),onChange:e=>v((n=>({...n,[t]:{...n[t],key:e}}))),value:l,placeholder:m,title:"Key"}),a.createElement(f,{component:g,"data-ga":r("".concat(c,"-").concat(E,"-value")),"data-testid":"".concat(n,"-").concat(E,"Value"),onChange:e=>v((n=>({...n,[t]:{...n[t],value:e}}))),value:s,placeholder:m,title:"Value"}),a.createElement(o.Button,{flavour:"borderless",icon:"trashcan",margin:[0,0,1,0],neutral:!0,onClick:()=>{v((e=>d()(e,t)))}}))})))},input:c,select:s},b=e=>{let{component:t,...n}=e;const l=h[t]||h.default;return a.createElement(l,n)},f=b},63450:(e,t,n)=>{"use strict";n.d(t,{$m:()=>s,He:()=>o,Jg:()=>g,MU:()=>r,Oj:()=>m,W6:()=>c,fn:()=>d,id:()=>u,ro:()=>i});var a=n(8711),l=n(83199);const o=(0,a.default)(l.Flex).attrs({alignItems:"center",color:"text",gap:1,hoverColor:"text"}).withConfig({displayName:"styled__AnchorComponent",componentId:"sc-wc4x41-0"})(["&,&:hover{text-decoration:none;}"]),r=(0,a.default)(l.Icon).attrs({height:"130px",width:"130px"}).withConfig({displayName:"styled__BlurredIcon",componentId:"sc-wc4x41-1"})(["filter:blur(70px);position:absolute;left:0;top:0;opacity:0.5;"]),i=(0,a.default)(l.Button).attrs((e=>({height:"22px",icon:"plus",padding:[.5,2,.5,1],small:!0,width:"auto",...e}))).withConfig({displayName:"styled__IntegrationAction",componentId:"sc-wc4x41-2"})(["&& > span{font-weight:bold;margin-left:4px;}"]),c=(0,a.default)(l.TextSmall).withConfig({displayName:"styled__LearnMoreTest",componentId:"sc-wc4x41-3"})(["position:relative;"]),s=(0,a.default)(l.ModalContent).attrs({height:{base:150,max:150,min:45},overflow:{vertical:"auto"},width:{base:121,max:140,min:70}}).withConfig({displayName:"styled__ModalContent",componentId:"sc-wc4x41-4"})(["box-shadow:0 18px 28px rgb(9 30 66 / 15%),0 0 1px rgb(9 30 66 / 31%);"]),m=(0,a.default)(l.ModalCloseButton).attrs({color:"text",height:"16px",width:"16px"}).withConfig({displayName:"styled__ModalClose",componentId:"sc-wc4x41-5"})(["&:hover{fill:",";}"],(0,l.getColor)("selected")),d=(0,a.default)(l.Flex).attrs((e=>{let{hasBorder:t,...n}=e;return{...t?{border:{side:"bottom",color:"disabled"}}:{},column:!0,padding:[3,4],...n}})).withConfig({displayName:"styled__ModalSection",componentId:"sc-wc4x41-6"})([""]),u=(0,a.default)(l.Icon).attrs({name:"warning_triangle",height:"18px",width:"18px",color:["yellow","amber"]}).withConfig({displayName:"styled__WarningIcon",componentId:"sc-wc4x41-7"})(["position:absolute;top:0;right:0;z-index:1;"]),g=(0,a.default)(l.Icon).attrs({height:"12px",width:"12px",color:"white"}).withConfig({displayName:"styled__SystemIcon",componentId:"sc-wc4x41-8"})(["position:relative;top:2px;"])},99904:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(62953);var a=n(96540),l=n(3914),o=n(25624);var r=n(87659);const i=e=>{const t=new Date(e||void 0).toDateString();return"Invalid Date"!==t?t:null},c=()=>{var e;const t=(0,l.ap)(),n=(0,a.useMemo)((()=>"".concat("dismissedBumpedWarningKey","_").concat(null===t||void 0===t?void 0:t.id)),[null===t||void 0===t?void 0:t.id]),[c,,,s]=(0,r.A)(!localStorage.getItem(n)),{trialEndsAtRaw:m}=(0,o.A)(),d=m&&"EarlybirdAndCommunitySunset"==(null===t||void 0===t||null===(e=t.metadata)||void 0===e?void 0:e.joinTrialCode),u=c&&m&&d,g=d?"EARLYB25":null,p=(0,a.useCallback)((()=>{localStorage.setItem(n,!0),s()}),[s,n]);return{isModalVisible:u,isEarlybirdAndCommunitySunset:d,coupon:g,trialEndsAt:i(m),onClose:p}}},34641:(e,t,n)=>{"use strict";n.d(t,{A:()=>E});n(9391),n(62953);var a=n(96540),l=n(63950),o=n.n(l),r=n(83199),i=n(19673),c=n(71835),s=n(92155),m=n(50876),d=n(63314),u=n(87659),g=n(97118);const p=(0,s.A)(r.Button),E=e=>{let{onConfirm:t,onDecline:n=o(),onCancellingEnd:l=o()}=e;const s=(0,i.M4)(),[E,h]=(0,c.A)(),{id:b}=(0,g.A)(),{sendLog:f,isReady:v}=(0,m.A)(),[x,,y,C]=(0,u.A)(),w=(0,a.useCallback)((()=>{y(),s({productId:b}).then((()=>{E({header:"Successfully canceled subscription",text:"You are now on Community plan"}),f({feature:"TrialOptOut",isSuccess:!0})})).catch((()=>{h({header:"Failed to cancel the subscription",text:"Remained on Business plan"}),f({feature:"TrialOptOut",isFailure:!0,error:"Failed to cancel the subscription"})})).finally((()=>{l(),C()}))}),[b,v]),A=(0,a.useCallback)((()=>{t?t():w()}),[t,w]);return a.createElement(r.Modal,{backdropProps:{backdropBlur:!0}},a.createElement(d.Ay,{feature:"TrialOptOut"},a.createElement(r.ModalContent,{width:{base:140}},a.createElement(r.ModalHeader,null,a.createElement(r.Flex,{gap:2,alignItems:"center"},a.createElement(r.H4,null,"Go to Community plan"))),a.createElement(r.ModalBody,null,x?a.createElement(r.Flex,{height:"100px"},a.createElement(r.TextBig,null,"Changing billing plan...")):a.createElement(r.Flex,{gap:2,column:!0},a.createElement(r.H3,null,"Are You Sure?"),a.createElement(r.TextBig,null,"It looks like you have chosen to opt-out of your free 30-day business trial. Are you sure you do not want to experience all the features Netdata has to offer?"),a.createElement(r.TextBig,null,"By opting out, you will switch to the community plan immediately."))),a.createElement(r.ModalFooter,null,a.createElement(r.Flex,{justifyContent:"end",gap:4,padding:[1,2]},a.createElement(p,{feature:"TrialOptOut",label:"Yes, I am sure!",flavour:"hollow",small:!0,onClick:A,disabled:!b||x,textTransform:""}),a.createElement(p,{feature:"TrialOptOut",label:"No, I want the trial!",small:!0,onClick:n,disabled:x,textTransform:""}))))))}},35454:(e,t,n)=>{"use strict";n.d(t,{$B:()=>r,TB:()=>i,W1:()=>l,ml:()=>o,ue:()=>a});const a={default:"successSemi",warning:"warningSemi",critical:"errorSemi"},l={default:{background:"successSemi",border:"success"},warning:{background:"warningSemi",border:"warning"},critical:{background:"errorSemi",border:"error"}},o=[30,15,3,2,1],r="dismissedTrialWelcome",i="dismissedTrialWarningDate"},93476:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var a=n(58168),l=n(96540),o=n(83199),r=n(63950),i=n.n(r),c=n(25624),s=n(99904),m=n(24864);const d={banner:{color:"main"},sidebar:{lineHeight:"1.6",color:"main"},freePlanUpgrade:{lineHeight:"1.6",color:"main"},billing:{color:"textLite"}},u=e=>{let{canUpgrade:t,onUpdateClick:n=i(),children:r,...c}=e;return t?l.createElement(o.Box,(0,a.A)({"data-testid":"upgrade-to-business-banner",onClick:n,as:o.Text,cursor:"pointer",textDecoration:"underline",color:"main"},c),r):null},g=e=>{let{flavour:t,couponRemainingDays:n,onUpdateClick:r=i()}=e;const{daysRemaining:g,canUpgrade:p,trialEndsAt:E}=(0,c.A)(),{isEarlybirdAndCommunitySunset:h}=(0,s.A)(),b=(0,l.useMemo)((()=>({isCoupon:n>0,isEarlybirdAndCommunitySunset:h,isBanner:"banner"==t,isSidebar:"sidebar"==t,isBilling:"billing"==t,isFreePlanUpgrade:"freePlanUpgrade"==t})),[t,n]);return l.createElement(o.Flex,{justifyContent:b.isBilling?"start":"center",alignItems:"center",width:"100%",gap:2},b.isCoupon?l.createElement(o.Flex,{column:!0},l.createElement(o.Text,(0,a.A)({},d[t],{fontSize:"10px",strong:!0}),"POST BLACK FRIDAY OFFER"),l.createElement(m.Te,(0,a.A)({},d[t],{fontSize:"38px",lineHeight:.8,strong:!0}),"50% off")):b.isEarlybirdAndCommunitySunset?l.createElement(o.Flex,{column:!0,gap:1,alignItems:"center"},l.createElement(o.Text,(0,a.A)({},d[t],{textAlign:"center",strong:!0},b.isBanner?{}:{fontSize:"10px"}),"Thank you for your support!"," ",b.isBanner?l.createElement(u,{canUpgrade:p,onUpdateClick:r},"Upgrade"):null),l.createElement(o.Text,(0,a.A)({},d[t],{color:"primary",fontSize:"22px",lineHeight:.8,strong:!0}),"25% Lifetime off")):b.isFreePlanUpgrade?l.createElement(o.Text,d[t],"Upgrade your plan for unlimited access and Business features."):l.createElement(o.Text,d[t],"You have ",l.createElement(o.Text,(0,a.A)({strong:!0},d[t]),"".concat(g," days"))," ","left to explore all the features of Netdata Business."," ",b.isBilling&&l.createElement(l.Fragment,null,"Trial ends at"," ",l.createElement(o.Text,(0,a.A)({strong:!0},d[t]),E),"."," "),b.isBanner?l.createElement(u,{canUpgrade:p,onUpdateClick:r},"Consider upgrading for unlimited access."):l.createElement(l.Fragment,null,"Consider upgrading for unlimited access.")))}},24864:(e,t,n)=>{"use strict";n.d(t,{PL:()=>i,Te:()=>c,bg:()=>r});var a=n(8711),l=n(83199),o=n(35454);const r=(0,a.default)(l.Flex).attrs({position:"relative"}).withConfig({displayName:"styled__TrialWarningSidebar",componentId:"sc-66x250-0"})(["background-color:",";border-width:1px;border-style:dashed;border-color:",";border-radius:2px;"],(e=>{var t;let{type:n}=e;return(0,l.getColor)(null===(t=o.W1[n])||void 0===t?void 0:t.background)}),(e=>{var t;let{type:n}=e;return(0,l.getColor)(null===(t=o.W1[n])||void 0===t?void 0:t.border)})),i=(0,a.default)(l.Button).withConfig({displayName:"styled__TrialUpgradeButton",componentId:"sc-66x250-1"})(["flex:auto;"]),c=(0,a.default)(l.Text).attrs({strong:!0,lineHeight:.8}).withConfig({displayName:"styled__PromoText",componentId:"sc-66x250-2"})(["background-color:",";background-image:linear-gradient( 43deg,"," 0%,"," 46%,"," 100% );-webkit-background-clip:text;-webkit-text-fill-color:transparent;"],(0,l.getColor)("primary"),(0,l.getColor)(["blue","aquamarine"]),(0,l.getColor)(["purple","mauve"]),(0,l.getColor)("primary"))},66732:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var a=n(96540),l=n(63950),o=n.n(l),r=n(83199),i=n(50876);const c={default:"Or you can opt to downgrade immediately",billing:"Or you can opt to downgrade immediately"},s=e=>{let{flavour:t="default",onOptOutClick:n=o(),...l}=e;const{sendLog:s,isReady:m}=(0,i.A)(),d=(0,a.useCallback)((()=>{n(),s({feature:"TrialOptOut",isStart:!0})}),[m]);return a.createElement(r.Text,l,"After the trial, you'll automatically switch to the free Community plan."," ",a.createElement(r.Box,{"data-testid":"upgrade-to-business-banner",onClick:d,as:r.Text,cursor:"pointer",textDecoration:"underline",color:"primary"},c[t]),".")}},25624:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});n(62953);var a=n(96540),l=n(46741),o=n(5668),r=n(22292),i=(n(8159),n(98992),n(37550),n(16074)),c=n(6593);var s=n(19673),m=n(50503),d=n(35454),u=n(42728),g=n(17170),p=n(93155);const E=e=>{const t=new Date(e||void 0).toLocaleDateString();return"Invalid Date"!==t?t:null},h=()=>{const e=(0,g.A)(),{loaded:t,value:n,refresh:h}=(0,s.JN)(),{isFailure:b}=(0,m.A)(),{slug:f,trialEndsAt:v,paymentProvider:x}=n||{},y=(0,a.useMemo)((()=>(e=>{if(!e)return null;const t=new Date(e)-new Date;return Math.ceil(t/864e5)})(v)),[v]),C=t&&!!v&&!e,w=(0,l.JT)("billing:Manage"),[A]=(0,o.ng)("trialModalDismissed"),T=p.bO&&w&&(C||b)&&!localStorage.getItem(d.$B)&&!A,[S,I]=(0,a.useState)(localStorage.getItem(d.TB)),k=(0,a.useMemo)((()=>p.bO&&C),[C]),[F,P]=(0,a.useState)(),M=(D=y)>15?"default":D>5?"warning":"critical";var D;const L=!(0,r.uW)("isAnonymous")&&w;return(0,a.useEffect)((()=>{const e=((e,t,n,a)=>{if(t<0)return!1;const l=new Date(e||void 0);if(!(0,i.f)(l))return!1;const o=new Date(a||void 0);if(!(0,i.f)(o))return!0;const{days:r}=(0,c.F)({start:o,end:l}),s=r;return n.some((e=>e>=t&&e{const e=(new Date).toISOString();I(e),localStorage.setItem(d.TB,e)},daysRemaining:y,trialEndsAt:E(v),trialEndsAtRaw:v,type:M,canUpgrade:L,onTrial:C,refreshPlan:h,planIsFreeOrEarlyBird:(0,u.Kj)(f),paymentProvider:x}}},97118:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var a=n(19673),l=n(42728);const o=()=>{var e;const{value:t}=(0,a.lU)();if(null===t||void 0===t||!t.free)return{};const n=Object.keys(t.free).sort(l.M7)[0];return{id:t.free[n]?null===(e=t.free[n][0])||void 0===e?void 0:e.id:null,version:n}}},52577:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>Zl});var a=n(96540),l=n(47767),o=n(3914),r=n(58168),i=(n(62953),n(39225)),c=n(45588),s=n(8711),m=n(83199),d=n(57375),u=n(15327),g=n(74618),p=n(79412),E=(n(41393),n(81454),n(46741)),h=n(14994),b=n(87659),f=n(46440),v=n(33195);const x=[{id:"name",accessor:"name",header:"Name",cell:e=>{let{getValue:t,row:{original:{isMember:n}}}=e;const l=t(),o=(0,E.JT)("room:ReadAll");return a.createElement(m.Flex,{alignItems:"center"},o&&n&&a.createElement(f.A,{margin:[0,1,0,0]}),a.createElement(m.Text,{margin:o&&!n&&[0,0,0,4]},l))}},{id:"nodeCount",accessor:"nodeCount",header:"Nodes",cell:e=>{let{getValue:t}=e;return"".concat(t()||0)}},{id:"memberCount",accessor:"memberCount",header:()=>"Users",cell:e=>{let{getValue:t}=e;return"".concat(t()||0)}},{id:"silencing",accessorKey:"silencingState",header:"Silencing",cell:e=>{let{getValue:t}=e;return a.createElement(v.A,{flavour:"room",silencing:t()})}}];n(17333),n(9920),n(98992),n(54520),n(3949);var y=n(47444),C=n(24198),w=n(63129),A=n(69765),T=n(54308),S=n(56820);const I=e=>(0,y.Zs)((t=>{let{snapshot:n,set:a,reset:l}=t;return async function(t){let{onSuccess:o,onFail:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=await n.getPromise((0,h.$e)({id:e,key:"ids"})),c=t.map((e=>{let{id:t}=e;return t})),s=i.filter((e=>!c.includes(e)));a((0,h.$e)({id:e,key:"ids"}),s);const m=await Promise.all(s.map((e=>n.getPromise((0,A.LS)({id:e})))));try{if(await(async(e,t)=>Promise.all(t.map((t=>(0,w.HN)(e,t)))))(e,c),a(T.yz,(0,S.Pb)(m)),c.forEach((t=>a((0,h.Oy)(e),t))),t.forEach((t=>{let{id:n,slug:a}=t;l((0,A.LS)({id:n})),l((0,T.x4)([e,a]))})),o&&o(),t.length>1)(0,C.r0)("Rooms were successfully deleted from Space!");else{const[e]=t;(0,C.r0)("Room ".concat(e.name," was successfully deleted!"))}}catch(d){a((0,h.$e)({id:e,key:"ids"}),i),r&&r(d)}}}),[e]);var k=n(74564);const F=e=>{let{spaceId:t,spaceName:n,startIsCreating:r}=e;const i=I(t),c=(0,E.JT)("space:Delete"),s=(0,E.JT)("room:Read"),m=(0,E.JT)("room:Create"),d=(0,E.JT)("space:CreatePersonalSilencingRule"),u=(e,t)=>{if(!e)return;const n=Array.isArray(e)?e.map((e=>{let{id:t,name:n}=e;return{id:t,name:n}})):[{id:e.id,name:e.name}];i(n,{onSuccess:t.resetRowSelection})},g=(e,t)=>{const n=t.length;if(!n)return"";return 1===n?(0,k.kI)(t[0].name):(0,k.kI)(n)},p=(e,t)=>{const l=t.length;if(!l)return"";const o={...1===l?{name:t[0].name}:{roomsLength:l},spaceName:n};return a.createElement(k.rj,o)},{pathname:h}=(0,l.zy)(),b=(0,o.bq)(),f=(0,l.Zp)(),v=(0,a.useCallback)((e=>f("".concat(h,"/").concat(e))),[h,f]),x=(0,a.useMemo)((()=>({goto:{handleAction:e=>{let{slug:t}=e;return v(t)},icon:"chevron_right",tooltipText:"Room settings",isDisabled:()=>!s},addRule:{handleAction:e=>{const t={roomId:e.id};f("/spaces/".concat(b,"/settings/notifications#notificationsActiveTab=1&silencingRulePrefill=").concat(JSON.stringify(t)))},icon:"alarm_off",flavour:"hollow",neutral:!1,isDisabled:()=>!d,tooltipText:"Add new silencing rule",confirmation:!1},delete:{confirmLabel:"Yes, delete",confirmationMessage:e=>a.createElement(k.rj,{name:e.name,spaceName:n}),confirmationTitle:e=>(0,k.TU)(e.name),dataGa:e=>{let{slug:t}=e;return"manage-rooms::click-delete::".concat(t)},declineLabel:"Cancel",handleAction:u,isDisabled:e=>{let{untouchable:t}=e;return t||!c},tooltipText:"Delete room"}})),[c,v,d,s]);return{bulkActions:(0,a.useMemo)((()=>({addEntry:{dataGa:"manage-rooms::click::add-room",handleAction:r,isDisabled:!m,tooltipText:"Create room"},delete:{confirmationMessage:p,confirmationTitle:g,confirmLabel:"Yes, delete",dataGa:"manage-rooms::delete-bulk",declineLabel:"Cancel",handleAction:u,isDisabled:!c,tooltipText:"Delete rooms"}})),[m,c,p,g]),rowActions:x,onClickRow:v}},P=()=>{const e=(0,h.DL)(),t=(0,E.JT)("room:Delete"),n=e.map((e=>({...e,disabled:e.untouchable||!t}))),[l,r]=(0,a.useState)(""),i=(0,o.ap)("name"),c=(0,o.ap)("id"),[s,,m,d]=(0,b.A)(),[,u]=(0,a.useState)([]),{bulkActions:g,rowActions:p}=F({startIsCreating:m,spaceId:c,spaceName:i});return{roomList:n,globalFilter:l,spaceName:i,spaceId:c,isCreating:s,rowActions:p,bulkActions:g,columns:x,startIsCreating:m,stopIsCreating:d,setGlobalFilter:r,onRowSelected:u,dataGa:"manage-rooms"}};var M=n(63314);const D=e=>{const{roomList:t,spaceName:n,isCreating:l,columns:o,setGlobalFilter:i,stopIsCreating:c,onRowSelected:s,rowActions:d,bulkActions:u,dataGa:g}=P();return a.createElement(M.Ay,{tab:"Rooms"},a.createElement(m.Flex,(0,r.A)({column:!0,height:"100%",overflow:"hidden",gap:3},e),a.createElement(m.H3,null,"Rooms of ",n),a.createElement(m.Table,{onSearch:i,onRowSelected:s,enableSorting:!0,dataColumns:o,enableSelection:!0,data:t,bulkActions:u,rowActions:d,dataGa:g,testPrefixCallback:e=>e.name})),l&&a.createElement(p.n,{onClose:c}))};var L=n(67031),N=n(87860),R=n(29662),B=n(84280),_=n(86663),U=n(67990),O=n(47762);const V=()=>{const e=(0,U.CK)();return{nodes:(0,O.Gt)(e).map((e=>({...e,disabled:e.hasAccessibleData})))||[],nodeIds:e}};var H=n(60383);const W=(0,a.memo)((e=>{let{roomUntouchable:t,...n}=e;const{nodes:l,nodeIds:o}=V({roomUntouchable:t});return a.createElement(M.Ay,{tab:"Room::Nodes"},a.createElement(m.Flex,(0,r.A)({column:!0,height:"100%",overflow:"hidden",gap:3},n),a.createElement(m.H3,null,"Nodes in this room (",o.length,") "),a.createElement(H.A,{showClaimNodeOnEmptySpace:!0,enableSelection:!0,customNodes:l,roomUntouchable:t})))}));var Y=n(45765),q=n(46902),j=n(83488),z=n.n(j),J=n(66245),G=n.n(J),$=n(55463),K=n(70716),Z=n(96083);const Q=[{id:"user",accessorKey:"user",header:"Name",cell:e=>{let{cell:t}=e;const{avatarURL:n,name:l}=t.row.original;return a.createElement(m.Flex,{alignItems:"center",gap:2},a.createElement(Z.A,{src:n,title:l}),a.createElement(m.TextSmall,null,l))}},{id:"email",accessorKey:"email",header:"Email",cell:e=>{let{getValue:t}=e;return a.createElement(m.TextSmall,null,t())}}],X=[{id:"user",desc:!1}],ee=e=>{let{setSelected:t}=e;const n=(0,$.Gi)(),l=(0,q.lb)(),o=(0,a.useMemo)((()=>G()(n,l)),[n,l]),r=(0,a.useCallback)((e=>{t(e.map((e=>e.id)))}),[]),i=(0,K.Uv)(o);return a.createElement(m.Flex,{alignItems:"start",padding:[1],overflow:{horizontal:"hidden",vertical:"auto"}},a.createElement(m.Table,{dataColumns:Q,data:i,autoResetSelectedRows:!0,sortableBy:X,onSearch:z(),onRowSelected:r,enableSelection:!0,enableSorting:!0}))};var te=n(92155);const ne=(0,te.A)(m.Button),ae=e=>{let{onAdd:t,onClose:n,selected:l,error:o,name:r}=e;return a.createElement(m.Flex,{alignItems:"center",justifyContent:"between"},o?a.createElement(m.Text,{color:"error"},"Select at least 1 user to add to ",r):a.createElement("div",null),a.createElement(m.Flex,{gap:2},a.createElement(m.Button,{neutral:!0,flavour:"hollow",onClick:n,label:"Cancel"}),a.createElement(ne,{disabled:!l.length,label:"Add ".concat(l.length," members"),onClick:t})))};var le=n(27287),oe=n(84707),re=n(49032),ie=n(77181),ce=n(13871),se=n(78217),me=n(71835),de=n(69756),ue=n(4659),ge=n(36850);const pe=e=>{let{email:t}=e;return(0,re.B9)(t)},Ee={header:"Invitations",text:"Invitations successfully sent!"},he=e=>{const{id:t,slug:n}=(0,o.ap)(),l=(0,A.ID)(),i=(0,A.wz)(l,"name"),[c,s]=(0,a.useState)([]),[,,d,u]=(0,ie.g)(t),[,g]=(0,me.A)(),[p,h]=(0,a.useState)(),[b,f]=(0,a.useState)(),v=e=>{const{header:t,text:n}=e||Ee,a=(0,ce.UI)({header:t,text:n,success:!0});se.A.success(a,{context:"manageInvitations"}),s([]),h(Math.random())},x=(0,a.useCallback)((()=>{const e=c.filter(pe).map((e=>({email:e.email,name:e.name,role:b,roomIDs:[l]}))),t="".concat(window.location.origin,"/spaces/").concat(n,"/join-space");d(e,t,{onSuccess:v,onError:g})}),[c,l,b]),y=(0,E._s)();return a.createElement(m.Flex,(0,r.A)({column:!0},e),a.createElement(m.H4,null,"Send invitations to ",i," room"),a.createElement(le.BZ,null,"TIP: You can send more invitations at once, separate each with a comma."),a.createElement(oe.y,{key:p,invitations:c,setInvitations:s}),a.createElement(m.H5,{margin:[4,0,0]},"Role"),a.createElement(le.BZ,null,"Choose a role for invited user."," ",a.createElement(ue.A,{href:ge.S,target:"_blank",rel:"noopener noreferrer",Component:m.TextSmall},"Learn more")),a.createElement(de.A,{availableRoles:y,dataGA:"invite-to-room",dataTestId:"invite-selectRole",onChange:e=>{f(e.target.value)},value:b}),a.createElement(m.Box,{alignSelf:"end",margin:[4,0,0]},a.createElement(m.Button,{label:"Send",onClick:x,disabled:0===c.length||!b,flavour:"hollow",isLoading:u})))},be=e=>{let{onClose:t,room:n}=e;const[l,o]=(0,a.useState)([]),[r,i]=(0,a.useState)(!1),c=(0,q.n)(n.spaceId,n.id),s=(0,a.useCallback)((()=>{if(!l.length)return i(!0);i(!1),c(l),t()}),[l,c]);return a.createElement(u.GO,{onClose:t},a.createElement(g.z,{onClose:t,isSubmodal:!0,title:a.createElement(a.Fragment,null,"Manage room",a.createElement(m.TextBig,{color:"textLite"},"\xa0/ Add Users"))}),a.createElement(Y.U,null,"Add users to room\xa0",n.name),a.createElement(u.Yv,null,a.createElement(he,{margin:[0,0,4]}),a.createElement(m.Flex,{column:!0,flex:!0,overflow:"hidden",padding:[0,0,2,0]},a.createElement(ee,{setSelected:o})),a.createElement(ae,{onClose:t,onAdd:s,selected:l,error:r,name:n.name})))};var fe=n(97245),ve=n(22292);const xe=e=>"Remove ".concat(e),ye=e=>{let{name:t,usersLength:n}=e;return n?1===n&&t?xe(t):"Remove ".concat(a=n," ").concat(1===a?"user":"users"):"";var a},Ce=e=>{let{name:t,roomName:n}=e;return a.createElement(a.Fragment,null,"You are about to remove ",a.createElement("strong",null,t)," from room ",a.createElement("strong",null,n),".",a.createElement("br",null),"Are you sure you want to continue?")},we=e=>{let{roomName:t,usersLength:n}=e;const l="".concat(n,1===n?" user":" users");return a.createElement(a.Fragment,null,"You are about to remove ",a.createElement("strong",null,l)," from room ",a.createElement("strong",null,t),".",a.createElement("br",null),"Are you sure you want to continue?")},Ae=e=>{let{name:t,roomName:n,usersLength:l}=e;return l?1===l&&t?a.createElement(Ce,{name:t,roomName:n}):a.createElement(we,{roomName:n,usersLength:l}):""};var Te=n(50876);const Se=e=>{let{spaceId:t,roomId:n,startIsInviting:l,canRemoveUser:o,untouchable:r}=e;const i=(0,q.zC)(t,n),c=(0,A.XA)("name"),{sendButtonClickedLog:s,isReady:m}=(0,Te.A)(),d=e=>{if(!e)return;const t=Array.isArray(e)?e.map((e=>{let{user:t}=e;return t.id})):[null===e||void 0===e?void 0:e.user.id];i(t)},u=(0,a.useCallback)((()=>{l(),m&&s({label:"Invite users"},!0)}),[m,s]);return{rowActions:(0,a.useMemo)((()=>({remove:{confirmLabel:"Yes, remove",confirmationMessage:e=>a.createElement(Ce,{name:e.name,roomName:c}),confirmationTitle:e=>xe(e.name),declineLabel:"Cancel",disabledTooltipText:e=>r?"It's not allowed to remove users from this room. Try removing them from the space.":e.isSelf?"You cannot remove yourself. Click the leave button on the room tab.":o?"Remove is disabled":"You don't have the required permissions to remove users from this room",handleAction:d,isDisabled:e=>e.disabled,tooltipText:"Remove user from room"}})),[xe,d,Ce,c]),bulkActions:(0,a.useMemo)((()=>({addEntry:{handleAction:u,tooltipText:"Invite users"},remove:{confirmLabel:"Yes, remove",confirmationMessage:(e,t)=>a.createElement(Ae,{name:t[0].name,roomName:c,usersLength:t.length}),confirmationTitle:(e,t)=>ye({name:t[0].name,usersLength:t.length}),declineLabel:"Cancel",disabledTooltipText:e=>r?"It's not allowed to remove users from this room. Try removing them from the space.":e.length?o?"Remove is disabled":"You don't have the required permissions to remove users from this room":"You haven't selected any users",handleAction:d,tooltipText:"Remove users from room"}})),[d,Ae,c,l,ye])}},Ie=e=>{let{untouchable:t}=e;const n=(0,a.useMemo)((()=>[{id:"name",accessor:"name",header:"Name",cell:e=>{let{getValue:t}=e;return"".concat(t())}},{id:"user",accessor:"user",header:"Users",cell:e=>{let{getValue:t}=e;const{name:n,avatarURL:l,email:o}=t();return a.createElement(m.Flex,{alignItems:"center",gap:2},a.createElement(Z.A,{src:l,title:"".concat(n," - ").concat(o||"email not set")}),a.createElement(m.TextSmall,null,n))}},{id:"email",accessor:"email",header:"Email",width:300,align:"center",cell:e=>{let{getValue:t}=e;return a.createElement(m.TextSmall,null,t())}}]),[]),l=(0,q.di)(),r=(0,ve.uW)("id"),i=(0,E.JT)("space:RemoveUser"),[c,s]=(0,a.useState)([]),[d,u]=(0,a.useState)(""),[g,,p,h]=(0,b.A)(),f=(0,o.ap)("id"),v=(0,A.ID)(),{rowActions:x,bulkActions:y}=Se({selectedRows:c,spaceId:f,roomId:v,startIsInviting:p,canRemoveUser:i,untouchable:t});return{columns:n,data:(0,a.useMemo)((()=>(0,fe.L)({data:l,currentUserId:r,canRemoveUser:i,untouchable:t})),[l]),columnVisibility:{name:!1},members:l,rowActions:x,bulkActions:y,isInviting:g,globalFilter:d,stopIsInviting:h,onRowSelected:s,setGlobalFilter:u,canRemoveUser:i}},ke=e=>{let{room:t,...n}=e;const{untouchable:l}=t,{columns:o,data:i,columnVisibility:c,members:s,rowActions:d,bulkActions:u,isInviting:g,stopIsInviting:p,onRowSelected:E,setGlobalFilter:h,canRemoveUser:b}=Ie({untouchable:l});return a.createElement(M.Ay,{tab:"Room::User"},a.createElement(m.Flex,(0,r.A)({column:!0,height:"100%",overflow:"hidden",gap:3},n),a.createElement(m.H3,null,"Users in this room (",s.length,")"),a.createElement(m.Table,{enableSelection:!0,enableSorting:!0,columnVisibility:c,data:i,dataColumns:o,rowActions:d,bulkActions:u,onRowSelected:E,onSearch:h,testPrefixCallback:e=>e.name}),g&&a.createElement(be,{onClose:p,room:t})))},Fe={room:0,nodes:1,users:2},Pe=(0,s.default)(m.Box).attrs({height:"100%",padding:[4,0],flex:"1",overflow:"hidden"}).withConfig({displayName:"manageRoomModal__TabContent",componentId:"sc-lrxs0y-0"})([""]),Me=()=>{const e=(0,l.Zp)(),t=(0,o.vt)(),{roomSlug:n,spaceSlug:r,settingsTab:i}=(0,l.g)(),s=(0,A.J_)(t,n);(0,N.A)({spaceId:t,id:s,polling:!1}),(0,R.A)(t,s);const d=(0,E.JT)("room:ReadUsers"),u=(0,A.wz)(s),[g,p]=(0,a.useState)(u.name),{search:h}=(0,l.zy)(),{tab:b="room"}=_.parse(h),f=Fe[b],[v,x]=(0,a.useState)(f),[y,C,w]=(0,m.useInputValue)({maxChars:255,value:u.description}),T=(0,a.useCallback)((()=>{e((0,c.tW)(B.bq,{spaceSlug:r,settingsTab:i}))}),[r,i]),S=(0,A.a8)(u.id,{shouldPersist:!0,onSuccess:T}),I=(0,a.useCallback)((()=>S({name:g,description:y})),[g,y,S]);return a.createElement(m.Flex,{column:!0,justifyContent:"between",overflow:"hidden","data-testid":"manageRoom",flex:"1",height:"100%"},a.createElement(m.Tabs,{"data-testid":"manageRoom-tabs",selected:v,onChange:x,TabContent:Pe,height:"100%",position:"relative",overflow:"hidden",width:"100%"},a.createElement(m.Tab,{"data-testid":"manageRoom-roomTab",label:a.createElement(m.H5,null,"Room")},a.createElement(L.U,{roomName:g,setRoomName:p,roomDescription:y,setRoomDescription:C,charsDescIndicator:w,"data-testid":"manageRoom-roomTabContent",id:u.id,navigateToParent:T,onSaveClick:I})),a.createElement(m.Tab,{"data-testid":"manageRoom-nodesTab",label:a.createElement(m.H5,null,"Nodes")},a.createElement(W,{roomUntouchable:u.untouchable,"data-testid":"manageRoom-nodesTabContent"})),d&&a.createElement(m.Tab,{"data-testid":"manageRoom-usersTab",label:a.createElement(m.H5,null,"Users")},a.createElement(ke,{"data-testid":"manageRoom-usersTabContent",room:u}))),v===Fe.room&&a.createElement(m.Flex,{justifyContent:"end"}))};var De=n(97054);const Le=e=>{let{children:t}=e;return(0,De.TP)(),t},Ne=e=>{let{children:t}=e;return(0,A.XA)().loaded?t:null},Re=()=>a.createElement(l.BV,null,a.createElement(l.qh,{path:"/",element:a.createElement(D,null)}),a.createElement(l.qh,{path:":roomSlug",element:a.createElement(Le,null,a.createElement(Ne,null,a.createElement(Me,null)))}));var Be=n(6323),_e=n(80158),Ue=n(29217);const Oe=[{id:"name",accessor:"name",header:"Name",cell:e=>{let{getValue:t}=e;return"".concat(t())}},{id:"user",accessor:"user",width:300,header:"Users",cell:e=>{let{getValue:t}=e;const{name:n,avatarURL:l,email:o}=t();return a.createElement(m.Flex,{alignItems:"center",gap:2},a.createElement(Z.A,{src:l,title:"".concat(n," - ").concat(o||"email not set")}),a.createElement(m.TextSmall,null,n))}},{id:"email",accessor:"email",header:"Email",width:300,align:"center",cell:e=>{let{getValue:t}=e;return a.createElement(m.TextSmall,null,t())}},{id:"type",accessor:"type",header:"Role",width:100,align:"center",cell:e=>{let{getValue:t,row:{original:{user:{deactivated:n}}}}=e;return a.createElement(m.Flex,{alignItems:"center",gap:1},a.createElement(m.TextSmall,{strong:!0},(0,_e.Zr)(t())),n&&a.createElement(Ue.A,{content:"This user's role doesn't have permission to access any information on the Space. Please review user's role or space's plan."},a.createElement(m.Icon,{name:"warning_triangle",height:"18px",width:"18px",color:["yellow","amber"]})))}}];n(14905),n(8872);var Ve=n(54702),He=n(12800),We=n(5169),Ye=n(66294);const qe=e=>{const t=(0,We.t)();return(0,y.Zs)((n=>{let{snapshot:a,set:l}=n;return async function(n){let{onSuccess:o,onError:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=await a.getPromise((0,$.kd)({id:e,key:"ids"})),c=i.filter((e=>!e.includes(n)));l((0,$.kd)({id:e,key:"ids"}),c);try{await(0,Ve.XY)(e,n),(async e=>{let{cacheKeyPrefix:t,memberIds:n,spaceId:a}=e;const l="".concat(t).concat((0,Ye.$)(a));await(0,He.y)({key:l,handleResults:e=>e.results.filter((e=>!n.includes(e.id)))})})({cacheKeyPrefix:t,spaceId:e,memberIds:n}),o&&o()}catch(s){l((0,$.kd)({id:e,key:"ids"}),i),r&&r()}}}),[e])},je=e=>(0,y.Zs)((t=>{let{snapshot:n,set:a}=t;return async function(t,l){let{onSuccess:o,onError:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=await n.getPromise((0,K.Z6)(t)),c=await Promise.all(t.map((async t=>({mId:t,role:await n.getPromise((0,$.K2)({id:t,spaceId:e}))})))),{role:s,...m}=l;t.forEach((e=>{a((0,K.m)({id:e}),(e=>({...e,...m})))})),s&&t.forEach((t=>{a((0,$.K2)({id:t,spaceId:e}),s)}));try{await(async(e,t,n)=>Promise.all(t.map((async t=>await(0,Ve.w5)(e,t,n)))))(e,t,l),o&&o()}catch(d){i.forEach((e=>{let{id:t,...n}=e;return a((0,K.m)({id:t}),{id:t,...n})})),s&&c.forEach((t=>{let{mId:n,role:l}=t;return a((0,$.K2)({id:n,spaceId:e}),l)})),r&&r()}}}),[e]),ze="change-user-role",Je="changeUserRole",Ge=e=>{let{handleAction:t,ids:n,onClose:l}=e;const o=(0,$.$D)(n),r=1===o.length?o[0]:null,i=(0,E._s)(),[c,s]=(0,a.useState)(r);return a.createElement(m.ConfirmationDialog,{confirmLabel:"Save","data-ga":ze,"data-testid":Je,handleConfirm:()=>{t(c),l()},handleDecline:l,isConfirmDisabled:!c,isConfirmPositive:!0,message:a.createElement(m.Flex,{gap:2,column:!0},a.createElement(m.TextSmall,null,"Learn more about Netdata role-based access model on"," ",a.createElement(ue.A,{href:ge.S,target:"_blank",rel:"noopener noreferrer",Component:m.TextSmall},"our documentation")),a.createElement(de.A,{availableRoles:i,dataGA:ze,dataTestId:Je,onChange:e=>{s(e.target.value)},value:c})),title:"Change roles"})};var $e=n(29848);const Ke=e=>{let{spaceId:t,startIsInviting:n}=e;const l=qe(t),o=je(t),i=(0,E.JT)("space:InviteUser"),c=(0,$e.ly)(),s=(0,a.useCallback)((e=>{let{role:t,members:n}=e;o(n,{role:t},{onSuccess:c})}),[]),m=e=>t=>{if(!e)return;const n=Array.isArray(e)?e.map((e=>{let{user:t}=e;return t.id})):[null===e||void 0===e?void 0:e.user.id];s({role:t,members:n})},d=(e,t)=>{if(!e)return;const n=Array.isArray(e)?e.map((e=>{let{user:t}=e;return t.id})):[null===e||void 0===e?void 0:e.user.id];l(n,{onSuccess:t.resetRowSelection})},u=(0,a.useCallback)((e=>a.createElement(a.Fragment,null,"You are about to delete ",a.createElement("strong",null,e.name),".",a.createElement("br",null),"Are you sure you want to continue?")),[]),g=(0,a.useCallback)(((e,t)=>{const n=t.length;return n?1===n?"Delete User":"Delete Users":""}),[]),p=(0,a.useCallback)(((e,t)=>{const n=t.length;return n?a.createElement(a.Fragment,null,"You are about to delete"," ",a.createElement("strong",null,1===n?t[0].name:"".concat(t.length," users")),".",a.createElement("br",null),"Are you sure you want to continue?"):""}),[]);return{rowActions:(0,a.useMemo)((()=>({userSettings:{CustomUIAction:e=>{let{data:t,...n}=e;return a.createElement(Ge,(0,r.A)({ids:[t.user.id]},n))},handleAction:m,tooltipText:"Change Role",isDisabled:e=>e.disabled,disabledTooltipText:e=>e.isSelf?"You cannot change your role":"You don't have the required permissions to change roles for users"},delete:{handleAction:d,confirmationTitle:"Delete User",confirmationMessage:u,isDisabled:e=>e.disabled,disabledTooltipText:e=>e.isSelf?"You cannot delete yourself. Try the space info tab, to leave space.":"You don't have the required permissions to remove users from space"}})),[]),bulkActions:(0,a.useMemo)((()=>({addEntry:{handleAction:n,tooltipText:"Invite user",isDisabled:()=>!i,disabledTooltipText:"You don't have the required permissions to invite new users"},userSettings:{CustomUIAction:e=>{let{data:t,...n}=e;return a.createElement(Ge,(0,r.A)({ids:t.map((e=>{let{user:t}=e;return t.id}))},n))},handleAction:m,tooltipText:"Change Roles",disabledTooltipText:e=>null!==e&&void 0!==e&&e.length?"You don't have the required permissions to change roles for users":"You haven't selected any users"},delete:{handleAction:d,confirmationTitle:g,confirmationMessage:p,disabledTooltipText:e=>null!==e&&void 0!==e&&e.length?"You don't have the required permissions to remove users from space":"You haven't selected any users"}})),[i,g,p])}},Ze=()=>{const e=(0,o.vt)(),t=(0,o.ns)(e,"name"),n=(0,$.bj)(),l=(0,ve.uW)("id"),[r,,i,c]=(0,b.A)(),[s,m]=(0,a.useState)(""),[d,u]=(0,a.useState)([]),{rowActions:g,bulkActions:p}=Ke({selectedRows:d,spaceId:e,startIsInviting:i}),h=(0,E.JT)("space:RemoveUser"),f=(0,E.JT)("user:ChangeRoles"),v=(0,E.Ge)(),x=h||f,y=(0,a.useMemo)((()=>(e=>{let{fromRolePermissions:t,userList:n,canModifyUser:a,currentUserId:l}=e;return n.reduce(((e,n)=>{const o=l===(null===n||void 0===n?void 0:n.id),r=t.includes(n.role);return e.push({name:n.name,email:n.email,user:{avatarURL:n.avatarURL,deactivated:n.deactivated,name:n.name,email:n.email,id:n.id},type:n.role,disabled:!r||!a||o,isSelf:o,canModifyUser:a,canSetRole:r}),e}),[])})({userList:n,currentUserId:l,canModifyUser:x,fromRolePermissions:v})),[n]);return{columns:Oe,spaceName:t,members:n,currentUserId:l,data:y,isInviting:r,globalFilter:s,rowActions:g,bulkActions:p,columnVisibility:{name:!1},onRowSelected:u,setGlobalFilter:m,startIsInviting:i,stopIsInviting:c,canModifyUser:x}},Qe=e=>{const{columns:t,spaceName:n,data:l,isInviting:o,rowActions:i,bulkActions:c,columnVisibility:s,stopIsInviting:d,setGlobalFilter:u,onRowSelected:g}=Ze();return a.createElement(M.Ay,{tab:"Users"},a.createElement(m.Flex,(0,r.A)({column:!0,height:"100%",overflow:"hidden"},e),a.createElement(m.H3,null,"Members of ",n),a.createElement(m.TextSmall,{margin:[1,0,3]},"Learn more about Netdata role-based access model on"," ",a.createElement(ue.A,{href:ge.S,target:"_blank",rel:"noopener noreferrer",Component:m.TextSmall},"our documentation")),a.createElement(m.Table,{onSearch:u,data:l,dataColumns:t,enableSorting:!0,enableSelection:!0,onRowSelected:g,bulkActions:c,rowActions:i,columnVisibility:s,testPrefixCallback:e=>e.name})),o&&a.createElement(Be.d,{onClose:d,isSubmodal:!0}))};var Xe=n(74530),et=n(47193);const tt=(0,a.memo)((e=>{const t=(0,o.vt)(),n=(0,o.ap)("name"),{nodes:l}=(0,et.A)();(0,Xe.A)(t);const i="Connect Nodes to ".concat(n);return a.createElement(M.Ay,{tab:"Nodes"},a.createElement(m.Flex,(0,r.A)({column:!0,"data-testid":"manageClaimedNodes",height:"100%",overflow:"hidden",gap:3},e),a.createElement(m.H3,{"data-testid":"manageClaimedNodes-header"},i),a.createElement(H.A,{showClaimNodeOnEmptySpace:!0,showClaimModalWithRoomSelection:!0,enableSelection:!0,customNodes:l,isSpace:!0})))})),nt=tt;var at=n(54961),lt=n(26770),ot=n(71856);const rt=e=>{let{name:t,spaceName:n}=e;return a.createElement(a.Fragment,null,"You are about to delete ",a.createElement("strong",null,t)," channel from ",a.createElement("strong",null,n)," space.",a.createElement("br",null),"This cannot be undone. Are you sure you want to continue?")};var it=n(30960),ct=(n(8159),n(37550),n(63450));const st=e=>{let{integration:t={},testId:n,...l}=e;const o=l.checked?"disable":"enable";return a.createElement(m.Toggle,(0,r.A)({colored:!0,"data-testid":"".concat(n,"-toggle"),"data-ga":"manage-channels::toggle-".concat(t.slug,"-").concat(o,"::notifications-tab")},l))},mt=e=>{let{testId:t,tooltipContent:n="plan",...l}=e;return l.disabled?a.createElement(Ue.A,{align:"top",content:ot.r7[n],"data-testid":"".concat(t,"-warning"),plain:!0},a.createElement(m.Flex,{padding:[2,2,0,0],position:"relative"},a.createElement(ct.id,{"data-testid":"".concat(t,"-warningIcon")}),a.createElement(st,(0,r.A)({testId:t},l)))):a.createElement(st,(0,r.A)({testId:t},l))},dt=e=>{let{"data-testid":t="cellName",enabled:n,id:l,integration:o,isAvailable:i,name:c,spaceId:s,tooltipContent:d,...u}=e;const g=(0,lt.t5)(s,"channels"),p=(0,lt.vq)(s,"channels");return a.createElement(m.Flex,(0,r.A)({alignItems:"center","data-testid":t,gap:4},u),a.createElement(mt,{checked:n,disabled:!i,integration:o,onChange:e=>{let{target:t}=e;const n=t.checked;p(g.map((e=>e.id===l?{...e,enabled:n}:e))),(0,at.Jq)(s,l,n)},testId:t,tooltipContent:d}),a.createElement(m.Text,{"data-testid":"".concat(t,"-label")},c))},ut=e=>{var t;let{"data-testid":n="cellService",integration:l={},kindLabel:o,...i}=e;const c=ot.a$[l.slug]||{};return a.createElement(m.Flex,(0,r.A)({alignItems:"center","data-testid":n,gap:2,justifyContent:"between",width:"100%"},i),a.createElement(m.Flex,{alignItems:"center","data-testid":"".concat(n,"-integration"),gap:2},a.createElement(m.Icon,(0,r.A)({"data-testid":"".concat(n,"-icon")},c)),a.createElement(m.Text,{"data-testid":"".concat(n,"-label")},l.title)),a.createElement(Ue.A,{content:o,"data-testid":"".concat(n,"-kind"),plain:!0},a.createElement(m.Icon,{color:"textLite",height:"16px",name:null===(t=ot.HA[l.kind])||void 0===t?void 0:t.icon,width:"16px"})))},gt=e=>{let{canManageChannels:t,roomOptions:n,spaceId:l}=e;return[{accessor:"name",cell:e=>{let{getValue:n,row:o}=e;return a.createElement(dt,{enabled:o.original.enabled,id:o.original.id,integration:o.original.integration,isAvailable:t&&o.original.available,name:n(),spaceId:l,tooltipContent:t?"plan":"role"})},header:"Name",id:"name"},{accessor:"integration",cell:e=>{let{getValue:t,row:n}=e;return a.createElement(ut,{integration:t(),kindLabel:n.original.kindLabel})},enableColumnFilter:!0,filterFn:(e,t,n)=>{const a=e.original.integration;return n.length<1||n.some((e=>{let{value:t}=e;return""===t||t===(null===a||void 0===a?void 0:a.slug)}))},header:"Service",id:"integration",meta:{filter:{component:"select",isMulti:!0,options:Object.keys(ot.a$).map((e=>({label:e,value:e}))),tiny:!0,"data-ga":"manage-integrations::select-service::notification-integrations-tab"},tooltip:a.createElement(m.Flex,{column:!0,width:{max:"200px"},gap:2},a.createElement(m.TextMicro,null,"Services are distinguished in two categories."),a.createElement(m.TextMicro,null,a.createElement(ct.Jg,{name:ot.HA.PERSONAL.icon})," ",a.createElement(m.TextMicro,{strong:!0},"Personal:")," ",ot.HA.PERSONAL.tooltip),a.createElement(m.TextMicro,null,a.createElement(ct.Jg,{name:ot.HA.SYSTEM.icon})," ",a.createElement(m.TextMicro,{strong:!0},"System:")," ",ot.HA.SYSTEM.tooltip))}},{accessor:"notificationLabel",cell:e=>{let{getValue:t}=e;return a.createElement(m.Text,{"data-testid":"channelNotificationsCell"},t())},enableColumnFilter:!0,filterFn:(e,t,n)=>{const a=e.original.notificationLabel;return n.length<1||n.some((e=>{let{label:t}=e;return""===t||t===a}))},header:"Notifications",id:"notificationLabel",meta:{filter:{component:"select",isMulti:!0,options:Object.values(ot.w8),tiny:!0,"data-ga":"manage-integrations::select-notification::notification-integrations-tab"}}},{accessor:"rooms",cell:e=>{var t;let{getValue:l,row:o}=e;const r={"data-testid":"channelRoomsCell"};if(o.original.internal)return a.createElement(m.Text,r,ot.Oh.label);if(!(o.original.rooms||null!==(t=o.original.rooms)&&void 0!==t&&t.length))return a.createElement(m.Text,r,ot.PT.label);const i=(0,it.Pl)({roomIds:l(),roomOptions:n});return a.createElement(m.Text,{"data-testid":"channelRoomsCell"},i)},enableColumnFilter:!0,filterFn:(e,t,n)=>n.length<1||n.some((t=>{let{label:n,value:a}=t;if(e.original.internal)return n===ot.Oh.label;const l=e.original.rooms||[];return l.length?l.includes(a):n===ot.PT.label})),header:"Rooms",id:"rooms",meta:{filter:{component:"select",isMulti:!0,options:n,tiny:!0,"data-ga":"manage-integrations::select-room::notification-integrations-tab"}}}]};var pt=n(58159),Et=n(18061),ht=n(88982);const bt=(e,t)=>{const n=(0,lt.ef)(t),a=(0,ht.A)({all:!0});(0,Et.A)((()=>({enabled:!!t,fetch:()=>(0,at.t9)(e,t),onFail:e=>n({...pt.V,error:e.message}),onSettle:()=>n({loading:!1,loaded:!0}),onSuccess:e=>n({...pt.V,...e.rooms?{roomSelections:a.filter((t=>{let{value:n}=t;return e.rooms.includes(n)}))}:{},...e})})),[e,t])};var ft=n(79769);const vt=["MobileApp","Email"],xt=()=>{const e=(0,l.Zp)(),t=(0,E.JT)("channel:Manage"),n=(0,o.vt)(),r=(0,o.ap)("name"),i=(0,o.bq)(),[s,m]=(0,me.A)(),[d,u]=(0,a.useState)(""),g=(0,lt.bY)();(0,ft.A)(n);const p=(0,lt.t5)(n,"channels"),h=(0,lt.t5)(n,"currentChannelId"),b=(0,lt.vq)(n,"channels"),f=(0,lt.vq)(n,"currentChannelId"),v=(0,ht.A)({all:!0,internal:!0}),{alerts:x,name:y,rooms:C,secrets:w}=(0,lt.g4)(h);bt(n,h);const A=(0,a.useCallback)((e=>{f(e)}),[]),T=(0,a.useCallback)((async e=>{let{id:t}=e;try{await(0,at.Wb)(n,t),b(p.filter((e=>e.id!==t))),s({header:"Configuration deleted successfully!"})}catch(a){m(a)}}),[p,n]),S=(0,a.useCallback)((()=>{e((0,c.tW)(B.uX,{spaceSlug:i,settingsTab:B.A8,settingsSubTab:B.G0}))}),[i]),I=(0,a.useMemo)((()=>({addEntry:{dataGa:"manage-channels::click-add-channel::notifications-tab",flavour:"hollow",handleAction:S,iconColor:"success",label:t?"Add Configuration":"View configurations",small:!0,strong:!0,width:"auto",...t?{}:{icon:""}}})),[t,S]),k=(0,a.useCallback)((e=>{e&&g({id:e})}),[g]),F=(0,a.useMemo)((()=>({testNotification:{handleAction:e=>{let{id:t}=e;k(t)},icon:"notificationTrigger",confirmation:!1,tooltipText:"Test your notification settings",disabledTooltipText:"You cannot test this notification",isDisabled:e=>{let{slug:t}=e;return vt.includes(t)}},edit:{dataGa:e=>{let{integration:t={}}=e;return"manage-rooms::click-edit::".concat(t.slug)},disabledTooltipText:"Edit is disabled",handleAction:e=>{let{id:t}=e;A(t)},isDisabled:e=>{let{available:n,internal:a}=e;return!t||!n||a},TooltipComponent:Ue.A,tooltipText:"Edit setting"},delete:{confirmLabel:"Yes, delete",confirmationMessage:e=>{let{integration:t={}}=e;return a.createElement(rt,{name:t.name,spaceName:r})},confirmationTitle:e=>{let{name:t}=e;return(0,it.O5)(t)},dataGa:e=>{let{integration:t={}}=e;return"manage-rooms::click-delete::".concat(t.slug)},declineLabel:"Cancel",handleAction:T,isDisabled:e=>{let{integration:n={}}=e;return!t||n.internal},TooltipComponent:Ue.A,tooltipText:"Delete setting"}})),[t,T,S]);return{bulkActions:I,channelData:p,currentChannelId:h,columns:gt({canManageChannels:t,roomOptions:v,spaceId:n}),dataGa:"manage-channels",onFilter:(e,t,n)=>{const a=e.original,l=n.toLowerCase();if(a.name.toLowerCase().includes(l))return!0;if(a.integration.slug.toLowerCase().includes(l))return!0;if(a.notificationLabel.toLowerCase().includes(l))return!0;if(a.internal)return ot.Oh.label.toLowerCase().includes(l);const o=a.rooms||[];if(!o.length)return ot.PT.label.toLowerCase().includes(l);return(0,it.Pl)({roomIds:o,roomOptions:v}).toLowerCase().includes(l)},onModalClose:()=>{b(p.map((e=>e.id===h?{...e,alerts:x,name:y,rooms:C,secrets:w}:e))),f("")},rowActions:F,search:d,setSearch:u}};n(74648),n(23215);var yt=n(54518),Ct=n(47130);const wt=(0,te.A)((0,Ct.A)(m.Button)),At="modal",Tt=e=>{let{id:t="new",integrationId:n,onClose:r,isSubmitEnabled:i}=e;const{alarms:s,name:m,rooms:d,slug:u,integration:g,secrets:p}=(0,lt.g4)(t),E=(0,$e.ly)(),h=(0,l.Zp)(),[b,f]=(0,me.A)(),v=(0,o.vt)(),x=(0,o.bq)(),y=(0,lt.bY)(),C=(0,a.useCallback)((()=>{(u||g)&&y({slug:u||g,secrets:p})}),[u,p,y]),w=(0,c.tW)(B.bq,{spaceSlug:x,settingsTab:B.A8});return a.createElement(ct.fn,{column:!1,gap:2,"data-testid":"".concat(At,"-footer"),justifyContent:"end"},a.createElement(wt,{feature:"IntegrationNotification",integrationId:n,label:"Test",flavour:"hollow",onClick:C,disabled:!i,tooltipProps:{content:"Test your notification settings",align:"bottom"}}),a.createElement(wt,{feature:"IntegrationNotification",integrationId:n,"data-testid":"".concat(At,"-confirmButton"),disabled:!i,label:"OK",onClick:async()=>{try{const e={alarms:s,integrationID:n,...m?{name:m}:{},...null!==d&&void 0!==d&&d.length?{Rooms:d}:{},secrets:p};"new"===t?await(0,at.Qb)(v,e):await(0,at.eQ)(v,t,e),b({header:"new"===t?"Configuration created successfully!":"Configuration updated successfully!"}),E(),r(),h(w)}catch(e){f(e)}},textTransform:"uppercase",tooltipProps:{content:"Save your settings",align:"bottom"}}))},St="modal",It=e=>{let{id:t="new",integrationId:n,onClose:l,...o}=e;const{alarms:i,title:c,description:s,docsLink:d,fields:u,integration:g,loaded:p,name:E,required:b,roomSelections:f,secrets:v}=(0,lt.g4)(t),x=e=>"manage-".concat(g,"-channel::").concat(e,"::notification-").concat(n?"integrations":"channels","-tab"),y=(0,ht.A)({all:!0}),C=(0,h.DL)(),w=(0,lt.ef)(t,"alarms"),A=(0,lt.ef)(t,"name"),T=(0,lt.ef)(t,"roomSelections"),S=(0,lt.ef)(t,"secrets"),I=(0,lt.ef)(t,"rooms"),[k,F]=(0,a.useState)({});if(!p)return null;const P=Object.keys(k),M=b.every((e=>(0,it.ct)(e,v[e],u[e]))),D=!P.length||P.every((e=>{const t=v[e].selection;return k[e].every((n=>(0,it.ct)(n,v[e][n],u[e].fields[t][n])))})),L=i&&M&&D;return a.createElement(m.Modal,{onEsc:l},a.createElement(ct.$m,{"data-testid":o["data-testid"]||St},a.createElement(m.ModalHeader,{border:{side:"bottom",color:"disabled"},column:!0,"data-testid":"".concat(St,"-header"),gap:.5,padding:[6,4,3]},a.createElement(m.Flex,{alignItems:"center","data-testid":"".concat(St,"-headerMain")},a.createElement(m.Flex,{"data-testid":"".concat(St,"-titleContainer"),gap:1},a.createElement(m.Icon,(0,r.A)({"data-testid":"".concat(St,"-titleIcon")},ot.a$[g]||{})),a.createElement(m.H3,{"data-testid":"".concat(St,"-title")},c)),l&&a.createElement(ct.Oj,{"data-ga":x("close-modal"),"data-testid":"".concat(St,"-close"),onClose:l})),a.createElement(m.TextSmall,{as:m.Box,"data-testid":"".concat(St,"-description")},s,"\xa0",a.createElement(ue.A,{Component:m.TextSmall,"data-ga":x("click-docs"),"data-testid":"".concat(St,"-docsLink"),href:d,target:"_blank",whiteSpace:"nowrap"},"Learn how to configure it."))),a.createElement(m.ModalBody,{"data-testid":"".concat(St,"-body"),overflow:{vertical:"auto"},padding:[0]},a.createElement(ct.fn,{gap:2,"data-testid":"".concat(St,"-standardFields"),hasBorder:!0},a.createElement(m.Text,{"data-testid":"".concat(St,"-standardFields-header")},"Notification settings"),a.createElement(m.Flex,{column:!0,"data-testid":"".concat(St,"-standardFields-body"),gap:3},a.createElement(yt.A,{component:"input","data-ga":x("configuration-name-input"),"data-testid":"".concat(St,"-configurationName"),onChange:A,placeholder:"i.e All alerts from All nodes",title:"Configuration name",value:E}),a.createElement(yt.A,{component:"select","data-ga":x("rooms-select"),"data-testid":"".concat(St,"-rooms"),isMulti:!0,onChange:e=>{var t;if(1===C.length)return;if(0===e.length)return I([]),void T([]);if(e.length===C.length||null===(t=e[e.length-1])||void 0===t||!t.value)return I([]),void T([ot.PT]);const n=e.map((e=>{let{value:t}=e;return t})).filter(Boolean),a=e.length>1?e.filter((e=>e.value)):e;I(n),T(a)},options:y,placeholder:"Select rooms",title:"Rooms",value:f}),a.createElement(yt.A,{component:"select","data-ga":x("notification-select"),"data-testid":"".concat(St,"-notifications"),isRequired:!0,onChange:e=>{let{value:t}=e;w(t)},options:Object.values(ot.N4),placeholder:"Select notifications",title:"Notifications",value:ot.N4[i]}))),a.createElement(ct.fn,{gap:2,"data-testid":"".concat(St,"-dynamicFields"),hasBorder:!0},a.createElement(m.Text,{"data-testid":"".concat(St,"-dynamicFields-header")},"Integration configuration"),a.createElement(m.Flex,{column:!0,"data-testid":"".concat(St,"-dynamicFields-body"),gap:3},Object.values(u).map((e=>{let{id:t,getValue:n,onChange:l,...o}=e;return a.createElement(yt.A,(0,r.A)({"data-ga":x("".concat(t,"-").concat(o.component)),"data-testid":"".concat(St,"-").concat(t),getDataGa:x,key:t,id:t,onChange:null===l||void 0===l?void 0:l({id:t,setRequiredSubsets:F,setSecrets:S}),secrets:v,setSecrets:S,value:null===n||void 0===n?void 0:n({id:t,secrets:v})},o))}))))),a.createElement(Tt,{id:t,integrationId:n,onClose:l,isSubmitEnabled:L})))},kt=e=>{let{"data-testid":t="channelList",...n}=e;const{bulkActions:l,channelData:o,currentChannelId:i,columns:c,dataGa:s,onFilter:d,onModalClose:u,rowActions:g,search:p,setSearch:E}=xt();return a.createElement(M.Ay,{tab:"Notifications::Channels"},a.createElement(m.Flex,(0,r.A)({column:!0,"data-testid":t,gap:4,height:"100%",width:"100%",margin:[3,0]},n),a.createElement(m.Table,{bulkActions:l,data:o,dataColumns:c,dataGa:s,globalFilter:p,globalFilterFn:d,onSearch:E,rowActions:g,testPrefix:"channelList",testPrefixCallback:e=>e.name}),!!i&&a.createElement(It,{"data-testid":"editChannelModal",id:i,onClose:u})))},Ft=0;var Pt=n(38819);const Mt=(0,i.A)((()=>n.e(5304).then(n.bind(n,25304))),"SilencingRules"),Dt={side:"top",type:"solid",size:"1px",color:"border"},Lt=()=>{const{notificationsActiveTab:e=Ft}=(0,Pt.PP)(),t=(0,a.useCallback)((e=>{const t=(0,Pt.PP)();(0,Pt.Z8)({...t,notificationsActiveTab:e})}),[]);return a.createElement(a.Fragment,null,a.createElement(m.Flex,{padding:[0,0,0,4]},a.createElement(m.H3,null,"Alerts & Notifications")),a.createElement(m.Tabs,{selected:parseInt(e,10),onChange:t,height:"calc(100% - 44px)",margin:[4,0,0,0]},a.createElement(m.Tab,{"data-testid":"spaceSettings-notifications-methods-tab","data-ga":"manage-space::click-tab::notifications-methods-tab",label:a.createElement(m.Text,null,"Notification Methods")},a.createElement(m.Flex,{padding:[2,4],border:Dt,flex:"grow"},a.createElement(kt,null))),a.createElement(m.Tab,{"data-testid":"spaceSettings-notifications-silencing-rules-tab","data-ga":"manage-space::click-tab::notifications-silencing-rules-tab",label:a.createElement(m.Text,null,"Notification Silencing Rules")},a.createElement(m.Flex,{border:Dt,flex:"grow"},a.createElement(a.Suspense,null,a.createElement(Mt,null))))))};var Nt=n(84976),Rt=n(28738),Bt=n(26751),_t=n(54856);const Ut=e=>{let{available:t,"data-testid":n="card",description:l,docsLink:o,fields:i,id:c,internal:s,kind:d,kindLabel:u,slug:g,required:p,title:h,...f}=e;const v=ot.a$[g]||{},x=(0,lt.Mw)("new"),y=(0,lt.ef)("new"),C=(0,E.JT)("channel:Manage"),[w,,A,T]=(0,b.A)(!1),S=(0,a.useCallback)((()=>{y({...pt.V,title:h,description:l,docsLink:o,fields:i,integration:g,loading:!1,loaded:!0,required:p,secrets:(0,it.s7)(i,p)}),A()}),[l,o,i,g,p]);return a.createElement(a.Fragment,null,a.createElement(m.Flex,(0,r.A)({background:"elementBackground",column:!0,"data-testid":n,justifyContent:"between",flex:!1,height:37,padding:[3,2,2,3],margin:[0,0,4,0],position:"relative",overflow:"hidden",round:.5,width:75},f),a.createElement(ct.MU,(0,r.A)({"data-testid":"".concat(n,"-blurredIcon")},v)),a.createElement(m.Flex,{column:!0,"data-testid":"".concat(n,"-details"),gap:3,margin:[0,0,3,0]},a.createElement(m.Flex,{"data-testid":"".concat(n,"-header"),justifyContent:"between"},a.createElement(m.Flex,{alignItems:"center","data-testid":"".concat(n,"-titleContainer"),gap:1},a.createElement(m.Icon,(0,r.A)({"data-testid":"".concat(n,"-icon")},v)),a.createElement(m.Text,{"data-testid":"".concat(n,"-title")},h)),!s&&t&&a.createElement(Ue.A,{align:"bottom",content:C?"":ot.WB,plain:!0},a.createElement(m.Box,null,a.createElement(ct.ro,{"data-ga":"manage-integration-".concat(g,"::click-add::notification-integrations-tab"),"data-testid":"".concat(n,"-button"),disabled:!C,label:"Add",onClick:S}))),!s&&!t&&a.createElement(_t.A,{"data-ga":"manage-integration-".concat(g,"::click-plan-badge::notification-integrations-tab")})),a.createElement(m.TextSmall,{color:"textDescription","data-testid":"".concat(n,"-description")},l," ",o&&a.createElement(ue.A,{Component:ct.W6,"data-ga":"manage-integration-".concat(g,"::click-docs::notification-integrations-tab"),"data-testid":"".concat(n,"-docsLink"),href:o,target:"_blank",whiteSpace:"nowrap"},"Learn more."))),a.createElement(Ue.A,{align:"top",content:ot.HA[d].tooltip,"data-testid":"".concat(n,"-kindContainer"),plain:!0},a.createElement(m.Flex,{alignItems:"end",alignSelf:"end","data-testid":"".concat(n,"-kindContainer"),gap:1},a.createElement(m.Icon,{color:"textLite","data-testid":"".concat(n,"-kindIcon"),height:"16px",name:ot.HA[d].icon,width:"16px"}),a.createElement(m.TextSmall,{color:"textLite","data-testid":"".concat(n,"-kind")},u)))),w&&a.createElement(It,{"data-testid":"createChannelModal",integrationId:c,onClose:()=>{T(),x()}}))},Ot=e=>{let{"data-testid":t="group",integrations:n,title:l,...o}=e;return n.length?a.createElement(m.Flex,(0,r.A)({column:!0,"data-testid":t,gap:2,position:"relative"},o),a.createElement(m.TextBig,{color:"textDescription","data-testid":"".concat(t,"-title")},l),a.createElement(m.Flex,{flexWrap:!0,"data-testid":"".concat(t,"-integrations"),gap:4},n.map((e=>a.createElement(Ut,(0,r.A)({"data-testid":"".concat(e.slug,"Card"),key:e.slug},e)))))):null};var Vt=n(73743);const Ht=e=>{const t=(0,lt.EE)(e);(0,Et.A)((()=>({enabled:!!e,fetch:()=>(0,at.b8)(e),onFail:e=>t({...Vt.u,error:e.message}),onSettle:()=>t({loading:!1,loaded:!0}),onSuccess:e=>{t({...Vt.u,...e})}})),[e])},Wt=e=>{let{"data-testid":t="integrations",...n}=e;const l=(0,o.vt)(),i=(0,o.bq)();Ht(l);const{available:s,error:d,loaded:u,unavailable:g}=(0,lt.m$)(l),[p,E]=(0,a.useState)([]),[h,b]=(0,a.useState)([]),[f,v]=(0,a.useState)("");if(!u)return a.createElement(Rt.A,{"data-testid":"".concat(t,"-loader"),title:"Loading services..."});if(d)return a.createElement(Bt.A,{"data-testid":"".concat(t,"-error"),message:d,title:"Services of ".concat(i," are currently unavailable")});const x=(0,c.tW)(B.bq,{spaceSlug:i,settingsTab:B.A8});return a.createElement(M.Ay,{tab:"Notifications::Integrations"},a.createElement(m.Flex,(0,r.A)({column:!0,"data-testid":t},n,{padding:[0,3,3],gap:3,overflow:"hidden"}),a.createElement(m.Flex,{border:{side:"bottom",color:"placeholder"},"data-testid":"".concat(t,"-header"),width:"100%"},a.createElement(ue.A,{as:Nt.N_,Component:ct.He,"data-ga":"manage-integrations::click-back::notification-integrations-tab","data-testid":"".concat(t,"-backLink"),to:x},a.createElement(m.Icon,{"data-testid":"".concat(t,"-backIcon"),name:"arrow_left"}),a.createElement(m.H3,{"data-testid":"".concat(t,"-title")},B.ys[B.G0]))),a.createElement(m.Flex,{column:!0,"data-testid":"".concat(t,"-content"),gap:2,height:"100%",overflow:"hidden"},a.createElement(m.Box,{as:m.SearchInput,"data-ga":"manage-integrations::search::notification-integrations-tab","data-testid":"".concat(t,"-search"),iconLeft:a.createElement(m.Icon,{name:"magnify",color:"textLite"}),onChange:e=>{v(e),E((0,it.Zv)(s,e)),b((0,it.Zv)(g,e))},placeholder:"Search service",size:"small",width:{max:49.5}}),a.createElement(m.Flex,{column:!0,"data-testid":"".concat(t,"-groups"),overflow:"auto",height:"100%"},a.createElement(Ot,{"data-testid":"integrationGroupAvailable",integrations:f?p:s,title:"Available"}),a.createElement(Ot,{"data-testid":"integrationGroupUnavailable",integrations:f?h:g,title:"Unavailable"})))))},Yt=()=>a.createElement(l.BV,null,a.createElement(l.qh,{path:"/",element:a.createElement(Lt,null)}),a.createElement(l.qh,{path:"/".concat(B.G0),element:a.createElement(Wt,null)}));var qt=n(55189),jt=n(37618);const zt=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return[(0,m.useInputValue)({maxChars:20,value:e.name||""})||{},(0,m.useInputValue)({maxChars:30,value:e.slug||""})||{},(0,m.useInputValue)({maxChars:50,value:e.description||""})||{}]};var Jt=n(39522),Gt=n(47373),$t=n(53285),Kt=n(7484),Zt=n(61360);const Qt={loading:!1,isAvailable:!1,isValid:!0,error:null},Xt=e=>{const t=(0,o.ap)(),[n,l]=(0,a.useState)(Qt);return(0,a.useEffect)((()=>{if(t.slug==e)l(Qt);else{const t=(0,Gt.ni)(e);l({...Qt,isValid:!1,error:t})}}),[t.slug,e]),(0,Zt.A)((()=>{(0,Gt.ni)(e)||t.slug==e||(l((e=>({...e,loading:!0}))),(0,Kt.Q9)(e).then((e=>{let{data:t}=e;l((e=>({...e,loading:!1,error:t.isAvailable?e.error:"slugNotAvailable"})))})).catch((e=>{l((t=>{var n;return{...t,loading:!1,error:(null===(n=e.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.errorMessage)||"Error while validating slug"}}))})))}),500,[e]),n},en=e=>{let{nameInput:t,slugInput:n,descriptionInput:l,onStartSlugValidation:o,onStopSlugValidation:i,onSlugValidationError:c,...s}=e;const[d,u,g,p]=t,[E,h,b,f]=n,[v,x,y,C]=l,{loading:w,error:A}=Xt(E);(0,a.useEffect)((()=>{(w?o:i)()}),[w]),(0,a.useEffect)((()=>{c(A)}),[A]);const T=(0,a.useMemo)((()=>(0,Gt.fc)(d)),[d]),S=(0,a.useMemo)((()=>(0,Gt.e_)(v)),[v]);return a.createElement(m.Flex,(0,r.A)({column:!0,gap:4},s),a.createElement($t.A,{Component:m.TextInput,permission:"space:UpdateMeta",label:"Name",value:d,onChange:u,error:Gt.xc[T],isDirty:p,instantFeedback:"all",fieldIndicator:g,"data-testid":"textInputs-spaceName",containerStyles:{width:{base:150}}}),a.createElement($t.A,{Component:m.TextInput,permission:"space:UpdateMeta",label:"Slug",value:E,onChange:h,error:Gt.xc[A]||A,isDirty:f,instantFeedback:"all",fieldIndicator:b,"data-testid":"textInputs-spaceSlug",containerStyles:{width:{base:150}}}),a.createElement($t.A,{Component:m.TextInput,permission:"space:UpdateMeta",label:"Description",value:v,onChange:x,error:Gt.xc[S],isDirty:C,instantFeedback:"all",fieldIndicator:y,"data-testid":"textInputs-spaceDescription",containerStyles:{width:{base:150}}}))};var tn=n(87292);const nn=e=>{let{id:t,...n}=e;return a.createElement(m.Flex,(0,r.A)({column:!0,gap:1},n),a.createElement(m.Text,{strong:!0},"Space Id"),a.createElement(tn.Ay,{confirmationText:"Space ID copied to your clipboard."},t))};var an=n(83694);const ln=()=>a.createElement(m.Text,{lineHeight:1.5},"With the change of the Space Slug, previous ",a.createElement(m.Text,{strong:!0},"links will be broken"),". In case you have some bookmarks or previous references using the previous Space Slug you should update them where possible. Please confirm you want to proceed with the change."),on=e=>{let{handleConfirm:t,handleDecline:n}=e;return a.createElement(m.ConfirmationDialog,{confirmLabel:"Continue","data-testid":"changeSpaceSlugDialog",handleConfirm:t,handleDecline:n,message:a.createElement(ln,null),title:"Space slug change"})};var rn=n(98046);const cn=(0,te.A)(m.Button),sn=e=>{let{nameInput:t,slugInput:n,descriptionInput:l,onClose:i,isValidatingSlug:c,slugError:s,...m}=e;const d=(0,o.ap)(),u=(0,rn.A)(d.id),[g,p]=(0,a.useState)(!1),[E]=t,[h]=n,[f]=l,v=(0,a.useMemo)((()=>d.slug!==h),[d.slug,h]),[x,,y,C]=(0,b.A)(),w=()=>{i(v?h:null),p(!1)},A=()=>p(!1),T=(0,a.useCallback)((e=>{!e&&v?y():(p(!0),u({name:E,description:f,...v?{slug:h}:{}},{onSuccess:w,onFail:A}))}),[E,h,f,d.slug]),S=(0,a.useCallback)((()=>T(!0)),[T]),I=(0,a.useMemo)((()=>{const e=(0,Gt.fc)(E),t=(0,Gt.e_)(f);return!!(g||c||e||s||t)||d.name===E&&d.slug===h&&(d.description===f||!d.description&&!f)}),[d,E,h,f,g,c]);return a.createElement(a.Fragment,null,a.createElement(cn,(0,r.A)({label:"SAVE",onClick:T,isLoading:g||c,disabled:I,"data-testid":"saveSpace-button",feature:"SpaceSettings"},m)),x?a.createElement(on,{handleConfirm:S,handleDecline:C}):null)},mn=(0,a.memo)((e=>{let{onClose:t,...n}=e;const l=(0,o.ap)(),i=(0,o.UV)("ids"),[c,,s,d]=(0,b.A)(),[u,,g,p]=(0,b.A)(),[E,h]=(0,a.useState)(),[f,v,x]=zt({name:l.name,slug:l.slug,description:l.description});if(!l.id)return null;const y=1===i.filter((e=>!(0,jt.ES)(e))).length;return a.createElement(M.Ay,{tab:"Info"},a.createElement(m.Flex,(0,r.A)({column:!0,"data-testid":"manageSpace",flex:"grow",justifyContent:"between",padding:[0,0,6,0],width:{max:150}},n),a.createElement(m.Flex,{column:!0,"data-testid":"manageSpace-settings"},a.createElement(m.H3,{margin:[0,0,4,0]},"Info"),a.createElement(m.Flex,{column:!0,gap:4},a.createElement(en,{"data-testid":"manageSpace-nameInputs",nameInput:f,slugInput:v,descriptionInput:x,onStartSlugValidation:g,onStopSlugValidation:p,onSlugValidationError:h}),a.createElement(nn,{"data-testid":"manageSpace-spaceIdInput",id:l.id,width:{base:150}}),a.createElement(m.TextInput,{label:"Your role in space",value:(0,_e.Zr)(l.roleInSpace),disabled:!0,containerStyles:{width:{base:150}}}),a.createElement(m.TextInput,{label:"Plan",value:(0,_e.Vn)(l.planName),disabled:!0,containerStyles:{width:{base:150}}}))),a.createElement(m.Flex,{"data-testid":"manageSpace-actions",justifyContent:"between",alignItems:"center"},a.createElement(m.Flex,{"data-testid":"manageSpace-deleteLeaveActions",gap:4},a.createElement(Ue.A,{align:"top",content:y&&qt.sh.leave,isBasic:!0,stretch:"align"},a.createElement(m.Flex,{alignItems:"center"},a.createElement(m.Button,{"data-ga":"manage-space-tab::click-leave-space::manage-space-modal","data-testid":"manageSpace-leave",disabled:y,icon:"switch_off",flavour:"borderless",label:"Leave space",neutral:!0,padding:[0],width:"fit-content",onClick:s}))),a.createElement(an.A,{"data-testid":"manageSpace-delete",id:l.id,isLastSpace:y,name:l.name,onClose:t})),a.createElement(sn,{"data-testid":"manageSpace-save",nameInput:f,slugInput:v,descriptionInput:x,onClose:t,isValidatingSlug:u,slugError:E}))),c&&a.createElement(Jt.A,{id:l.id,name:l.name,onClose:d}))}),(()=>!0));var dn=n(62232);const un=()=>{const e=(0,l.Zp)(),t=(0,o.vt)(),n=(0,l.RQ)(B.uX),r=(0,l.RQ)(B.bq),{params:i}=n||r||{},{spaceSlug:s="",settingsTab:m="",settingsSubTab:d=""}=i,u=(0,o.ap)("name"),g=(0,A.J_)(t,d),p=(0,A.wz)(g,"name"),E=B.ys[m],h=(0,a.useCallback)((()=>{e((0,c.tW)(B.bq,{spaceSlug:s,settingsTab:m}))}),[s,m]),b=(0,a.useMemo)((()=>{const e=[{name:"Manage Space",isDisabled:!0},{name:u,isDisabled:!0},{name:E,...!!d&&{onClick:h}}];return d&&e.push({name:E===B.ys[B.aj]?p:B.ys[d]||d}),e}),[h,p,u,E,d]);return a.createElement(dn.A,{isBig:!0,items:b,showBackButton:!1,testid:"manageSpace"})};var gn=n(47731),pn=n(19673),En=(n(9391),n(67742));const hn=e=>a.createElement(m.Box,(0,r.A)({as:"hr",height:"100%",sx:{borderWidth:"0px 0px 0px 1px",borderColor:"borderSecondary",borderStyle:"solid"}},e)),bn=()=>a.createElement(hn,{height:"1px",width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}});var fn=n(42728);const vn=e=>{let{currentPlan:t,billingEmail:n,paymentMethod:l,businessName:o,vatNo:r,billingAddress:i}=e;const[c,s]=(0,pn.Qh)(),d=!!t.billingEmail&&!s,u=n||"",g=u?"":"Email is required",p=null!==l&&void 0!==l&&l.id?"**** ".concat(null===l||void 0===l?void 0:l.id):"",E=p?"":"Payment method is required",h=i?"":"Billing address is required";return a.createElement(m.Flex,{column:!0,gap:3},a.createElement(m.Flex,{gap:4},a.createElement(m.TextInput,{value:u,label:"Billing email",placeholder:"Not specified",instantFeedback:"all",isDirty:!!g,error:g,disabled:!0}),a.createElement(m.TextInput,{value:p,label:"Default payment method",placeholder:"Not specified",instantFeedback:"all",isDirty:!!E,error:E,disabled:!0})),r&&a.createElement(m.Flex,{gap:4},a.createElement(m.TextInput,{value:o||"",label:"Business name",placeholder:"Not specified",disabled:!0}),a.createElement(m.TextInput,{value:r,label:"VAT number",placeholder:"Not specified",disabled:!0})),a.createElement(m.Flex,null,a.createElement(m.TextInput,{value:(0,fn.qN)(i)||"",label:"Billing address",placeholder:"Not specified",isDirty:!!h,error:h,disabled:!0})),a.createElement(ue.A,{Component:m.Flex,cursor:d?"pointer":"default",disabled:!d,onClick:c,alignItems:"center",gap:1,"data-ga":"billing-options::click::billing"},a.createElement("span",null,"Change billing information and payment method"),a.createElement(m.Icon,{name:"nav_arrow_goto",width:"12px",height:"12px"})))},xn=e=>{let{onReset:t}=e;return a.createElement(m.Box,{as:m.Icon,name:"close_circle",onClick:t,cursor:"pointer",width:3,height:3,color:"border",position:"absolute",left:"2px"})},yn=e=>{let{promotionCode:t,onReset:n}=e;return a.createElement(m.Flex,{width:"100%"},a.createElement(m.Pill,{padding:[0],flavour:"neutral",hollow:!0},a.createElement(m.Flex,{position:"relative",gap:2,alignItems:"center",padding:[1,2,1,5]},a.createElement(xn,{onReset:n}),a.createElement(m.Text,null,t))))},Cn=e=>{let{promotionCode:t,onApply:n,error:l}=e;const[o,r]=(0,a.useState)(t||""),i=()=>{r(""),n("")};return a.createElement(m.Flex,{column:!0,gap:1},a.createElement(m.Text,{strong:!0},"Promotion code"),t&&!l?a.createElement(yn,{promotionCode:t,onReset:i}):a.createElement(m.Flex,{column:!0,gap:1},a.createElement(m.Flex,{gap:2,alignItems:"baseline"},a.createElement(m.TextInput,{value:o,onChange:e=>r(e.target.value),placeholder:"Promotion code"}),!l&&a.createElement(m.Button,{label:"Apply",onClick:()=>n(o),padding:[3,4],disabled:!o}),!!o&&a.createElement(m.Button,{label:"Clear",flavour:"hollow",onClick:i,padding:[3,4],disabled:!o})),l&&a.createElement(m.Text,{color:"error"},l)))},wn=e=>{let{needsCommitment:t,commitment:n,handleCommitmentChange:l}=e;return t&&a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.Flex,{gap:4,alignItems:"baseline"},a.createElement(m.Text,{strong:!0,style:{whiteSpace:"nowrap"}},"Committed Nodes"),a.createElement(m.TextInput,{onChange:l,value:n,placeholder:"i.e. 14",type:"number",min:1})),a.createElement(m.TextSmall,null,"Nodes that you'll have a discount of 25% on the original cost per node of the plan. This amount will be part of your annual prepayment."))};var An=n(63950),Tn=n.n(An),Sn=n(27994);const In={earlyBird:()=>a.createElement(m.Text,null,"You are moving from ",a.createElement(m.Text,{strong:!0},"Early Bird")," plan to another plan, you won't be able to come back to this. The ",a.createElement(m.Text,{strong:!0},"Community")," free plan will be there if you wish to cancel but this doesn't allow you to invite or change users using the Member role."),communityV1:e=>{let{onCtaClick:t=Tn()}=e;const{url:n}=(0,Sn.A)();return a.createElement(m.Text,null,"You are moving from ",a.createElement(m.Text,{strong:!0},"Community (2023.02)")," plan to another plan, you won't be able to come back to this. The new ",a.createElement(m.Text,{strong:!0},"Community (2023.11)")," free plan will be there if you wish to cancel but this will have new limitation: max of 5 nodes active and max of 1 custom dashboard. See full details on the"," ",a.createElement(ue.A,{as:Nt.N_,onClick:t,to:n,disabled:!n},a.createElement(m.Text,{color:"primary"},"View plans page")),".")},pro:()=>a.createElement(m.Text,null,"You are moving from ",a.createElement(m.Text,{strong:!0},"Pro")," plan to another plan by yourself, if you proceed we won't be able to migrate you to the Business plan with your current pricing conditions as communicated.")},kn=e=>{let{currentPlan:t,...n}=e;const l=In[(e=>"earlyBird"==e.slug?"earlyBird":"free"==e.slug&&"2023.02"==e.version?"communityV1":"pro"==e.slug?"pro":null)(t)]||null;return l&&a.createElement(a.Fragment,null,a.createElement(hn,{height:"1px",width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}}),a.createElement(m.Flex,{gap:3},a.createElement(m.Icon,{size:"large",color:"warning",name:"warning_triangle"}),a.createElement(l,n)))},Fn=e=>"earlyBird"===(null===e||void 0===e?void 0:e.slug)?"earlyBird":e&&e.slug&&"free"!==e.slug?"".concat(e.slug,"-").concat(e.interval):"free",Pn=s.default.div.withConfig({displayName:"withTableWrapper__TableWrapper",componentId:"sc-drcfxi-0"})(["margin-top:30px;"]),Mn=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}),Dn={size:50,minSize:50,maxSize:100},Ln=e=>()=>a.createElement(m.Flex,{width:"100%",justifyContent:"end"},e),Nn=e=>{let{getValue:t}=e;return a.createElement(m.Flex,{width:"100%",justifyContent:"end"},t())},Rn=[{id:"name",accessor:"name",header:"",...Dn,fullWidth:!0},{id:"price",accessor:"price",header:Ln("Price"),cell:Nn,...Dn},{id:"qty",accessor:"qty",header:Ln("Qty"),cell:Nn,...Dn},{id:"month",accessor:"month",header:Ln("Month"),cell:Nn,...Dn},{id:"total",accessor:"total",header:Ln("Total"),cell:Nn,...Dn}],Bn=e=>a.createElement(m.Flex,(0,r.A)({gap:3},e),a.createElement(m.Icon,{size:"large",color:"warning",name:"warning_triangle"}),a.createElement(m.Text,null,"No immediate charges are applicable to this plan subscription. On-demand usage charges will be applied based on your node period count.")),_n=(Un=m.Table,e=>a.createElement(Pn,null,a.createElement(Un,e)));var Un;const On=e=>{let{lineItems:t}=e;return a.createElement(a.Fragment,null,t.map((e=>{var t;const n=(l=e).description?l.description.startsWith("Discount")?{color:"primary"}:l.description.startsWith("VAT")?{color:"textLite"}:{}:{};var l;const o=e.isInfo?m.TextSmall:m.Text;return a.createElement(m.Flex,{key:e.description,justifyContent:"between"},a.createElement(o,n,e.description),a.createElement(o,n,Mn.format(null===(t=e.total)||void 0===t?void 0:t.amount)))})))},Vn=(e=>t=>{var n;return t.lineItems.totalPayable?null!==(n=t.lineItems.info)&&void 0!==n&&n.length?a.createElement(m.Flex,{column:!0,gap:1},a.createElement(e,t),a.createElement(On,{lineItems:t.lineItems.info})):a.createElement(e,t):null})((e=>{let{lineItems:t}=e;return a.createElement(m.Flex,{justifyContent:"between",margin:[4,0,0,0]},a.createElement(m.H0,{strong:!0},"Total payable"),a.createElement(m.H0,{strong:!0,"data-testid":"totalPayableAmountPreview"},Mn.format(t.totalPayable.total.amount)))})),Hn=e=>{let{previewData:t,lineItems:n,agree:l,toggleAgree:o,zeroPreviewSubscriptionTotal:r,isUpdate:i}=e;const c=!i||!(null===t||void 0===t||!t.paymentMethod)&&!(null===t||void 0===t||!t.billingAddress);return a.createElement(a.Fragment,null,a.createElement(bn,null),r&&a.createElement(Bn,{padding:[0,0,2,0]}),a.createElement(m.Flex,{gap:3},a.createElement(m.Checkbox,{checked:l,onChange:o,disabled:!c}),a.createElement(m.Text,null,"I agree to Netdata Inc's"," ",a.createElement(ue.A,{href:"https://www.netdata.cloud/service-terms/",rel:"noopener noreferrer",target:"_blank"},"Terms of Service")," ","and"," ",a.createElement(ue.A,{href:"https://netdata.cloud/privacy",rel:"noopener noreferer",target:"_blank"},"Privacy Policy"))),a.createElement(Vn,{lineItems:n}))},Wn=e=>{let{lineItems:t}=e;return a.createElement(a.Fragment,null,a.createElement(_n,{dataColumns:Rn,data:t.table}),a.createElement(bn,null),a.createElement(On,{lineItems:t.footer}))};var Yn=n(34641),qn=n(25624);const jn=e=>{let{title:t,onConfirm:n,onClose:l}=e;const{sendButtonClickedLog:o,isReady:r}=(0,Te.A)(),{onTrial:i}=(0,qn.A)(),c=(0,a.useCallback)((()=>{n(),l(),o({description:"confirm-billing-plan-change"},!0)}),[o,r]),s=(0,a.useCallback)((()=>{l(),o({description:"close-billing-plan-change-confirmation-dialog"},!0)}),[o,r]),d="Community"==t,u=d?"Cancellation":"Downgrading";return i?a.createElement(Yn.A,{onDecline:s}):a.createElement(m.ConfirmationDialog,{confirmLabel:"Yes","data-ga":"downgrade-dialog","data-testid":"downgradeDialog",handleConfirm:c,handleDecline:s,message:a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.Text,null,"Are you sure you want to ",a.createElement(m.Text,{strong:!0},"move to the ",t," plan")," and cancel your current plan?"),d&&a.createElement(m.Text,null,"Upon cancellation,"," ",a.createElement(m.Text,{strong:!0},"a credit of the value related to the unused period will be credited to your Netdata account.")," ","The credit will be available for you to use on future plan subscriptions with us."),a.createElement(m.Text,null,"For the next 24 hours, you will be able to use all your current notification method configurations."," ",a.createElement(m.Text,{strong:!0},"After 24 hours, any of the notification method configurations that aren't available on your space's plan will be automatically disabled.")),a.createElement(m.Text,null,u," might affect your Space users. Please check what roles are available on the"," ",a.createElement(ue.A,{href:"https://learn.netdata.cloud/docs/nightly/concepts/netdata-plans#areas-impacted-by-plans",rel:"noopener noreferrer",strong:!0,target:"_blank"},t," plan"),"."," ",a.createElement(m.Text,{strong:!0},"Users with unavailable roles on the ",t," plan will immediately have restricted access to the Space.")),a.createElement(m.Text,null,"Do you wish to proceed?")),title:"Go to ".concat(t," plan?")})};var zn=n(88116);const Jn=e=>{let{isUpdate:t,currentPlan:n={},billingEmail:l,paymentMethod:o,...i}=e;const[c,s]=(0,pn.Qh)(),d=!!n.billingEmail&&!s;return t&&l&&o?null:a.createElement(m.Flex,(0,r.A)({gap:3,alignItems:"center"},i),a.createElement(m.Icon,{size:"large",color:"warning",name:"warning_triangle"}),a.createElement(m.Flex,{column:!0,gap:1},a.createElement(m.Text,null,"You can't proceed to checkout without having provided a"," ",a.createElement(m.Text,{strong:!0},"payment method")," and a ",a.createElement(m.Text,{strong:!0},"billing address"),"."),a.createElement(ue.A,{cursor:d?"pointer":"default",disabled:!d,onClick:c,gap:1,"data-ga":"billing-options::click::billing"},"Please go to the billing portal and fill a payment method")))};var Gn=n(79731);const $n=e=>e?"::commited-".concat(e):"",Kn=(0,s.default)(m.Flex).withConfig({displayName:"checkoutTotals__CheckoutButtonWrapper",componentId:"sc-1q0h6ca-0"})(["background:",";padding:16px 0;position:sticky;bottom:0;z-index:20;"],(0,m.getColor)("mainBackground")),Zn=(0,te.A)(m.Button),Qn=(e=>t=>{let{title:n,isDowngrade:l,isUpdate:o,checkoutOrUpdate:i,...c}=t;const[s,,m,d]=(0,b.A)();return o&&l?a.createElement(a.Fragment,null,s&&a.createElement(jn,{title:n,onConfirm:i,onClose:d}),a.createElement(e,(0,r.A)({onClick:m},c))):a.createElement(e,(0,r.A)({onClick:i},c))})((0,s.default)(Zn).withConfig({displayName:"checkoutTotals__CheckoutButton",componentId:"sc-1q0h6ca-1"})(["flex:auto;"])),Xn=e=>{let{title:t,slug:n,onClose:l,currentPlan:o,price:r,commitment:i,currentCommitment:c=0,email:s,needsCommitment:d,previewData:u,loadingPreview:g,isUpdate:p,promotionCode:E}=e;const h=((e,t)=>{var n,a;return((null===(n=zn.FJ[t])||void 0===n?void 0:n.level)||0)<((null===(a=zn.FJ[e])||void 0===a?void 0:a.level)||0)})(o.slug,n),[f,v]=(0,b.A)(!1),x=p&&!f||!p&&!s||d&&(c===i||!i||i<1),[y,C]=(0,b.A)(),w=(0,pn.L_)(),A=(0,pn.M4)(),T=p||o.billingEmail,S=T?A:w,{sendLog:I,isReady:k}=(0,Te.A)(),[F,P]=(0,me.A)(),M=(0,a.useCallback)((()=>{C(),S({productId:r.id,email:(null===u||void 0===u?void 0:u.billingEmail)||s,...d&&{commitment:i},...E&&{promotionCode:E}}).then((()=>{l(),I({isSuccess:!0,details:S==T?"update-billing-plan":"checkout-billing-plan"},!0),F({header:"Success",text:"You have successfully updated your plan"})})).catch((e=>{var t;I({isFailure:!0,details:S==T?"update-billing-plan":"checkout-billing-plan"},!0);const n=(null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data)||e;P({header:"Error",text:(0,Gn.o)(null===n||void 0===n?void 0:n.errorMsgKey)||(null===n||void 0===n?void 0:n.errorMessage)||"Something went wrong"})})).finally(C)}),[I,k]),D=(L=null===u||void 0===u?void 0:u.invoiceLineItems,(0,a.useMemo)((()=>{if(null===L||void 0===L||!L.length)return null;let e=!1;return L.reduce(((t,n)=>{return"Total payable"==n.description?(t.totalPayable=n,e=!0,t):(n.unitPrice?t.table=[...t.table,{id:n.description,name:n.description,price:Mn.format(n.unitPrice.amount),qty:n.quantity,month:n.month,total:Mn.format(null===(a=n.total)||void 0===a?void 0:a.amount)}]:e?t.info=[...t.info,{...n,isInfo:!0}]:t.footer=[...t.footer,n],t);var a}),{table:[],footer:[],info:[]})}),[L]));var L;const N=((null===D||void 0===D?void 0:D.footer)||[]).some((e=>{let{description:t,total:n}=e;return"Subscription Total"==t&&0==(null===n||void 0===n?void 0:n.amount)}));return a.createElement(m.Flex,{column:!0,gap:3},g||!D||N?null:a.createElement(Wn,{lineItems:D}),a.createElement(Kn,{column:!0,gap:2},p&&!g&&D&&a.createElement(Hn,{isUpdate:p,previewData:u,lineItems:D,agree:f,toggleAgree:v,zeroPreviewSubscriptionTotal:N}),p&&!g&&a.createElement(Jn,{currentPlan:o,billingEmail:null===u||void 0===u?void 0:u.billingEmail,paymentMethod:null===u||void 0===u?void 0:u.paymentMethod,padding:[0,0,4,0],isUpdate:p}),a.createElement(Qn,{title:t,isDowngrade:h,label:p?"Checkout":"Proceed to checkout",disabled:!!x||y,checkoutOrUpdate:M,isLoading:y,"data-ga":"proceedTocheckoutButton::click-".concat(Fn(r)).concat($n(i),"::billing"),"data-testid":"billingCheckoutTotals-proceedToCheckoutButton",isUpdate:p})))},ea=e=>{let{prices:t,currentPlan:n}=e;const[l,o]=(0,a.useState)(0),r=t[l],i=null===r||void 0===r?void 0:r.commitment,c=(0,ht.n)("id"),s=(0,U.gr)(c,"ids"),m=(0,O.BU)(s),d=Math.max(5,m.length),[u,g]=(0,a.useState)(n.committedNodes||d);return{recurringIndex:l,setRecurringIndex:o,price:r,needsCommitment:i,commitment:u,handleCommitmentChange:e=>g(e.target.value?parseInt(e.target.value,10):"")}},ta=function(){let{title:e="Checkout"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t=>n=>a.createElement(u.GO,{onClose:n.onClose},a.createElement(g.z,{onClose:n.onClose,title:e}),a.createElement(m.Flex,{column:!0,padding:[4,4,0,4],justifyContent:"between",height:"calc(100vh - 60px)",overflow:"auto"},a.createElement(t,n)))},na=3e5,aa=ta({title:"Update plan"})((e=>{let{title:t,onClose:n,prices:o,currentPlan:i={},children:c}=e;const{recurringIndex:s,setRecurringIndex:d,price:u,needsCommitment:g,commitment:p,handleCommitmentChange:h}=ea({prices:o,currentPlan:i}),{state:b}=(0,l.zy)(),[f,v]=(0,a.useState)((null===b||void 0===b?void 0:b.coupon)||""),[x,y]=(0,a.useState)(0),[C,w]=(0,a.useState)(na),A=(0,E.JT)("billing:Manage"),T=(0,fn.di)({price:u,promotionCode:f,commitment:p}),{loading:S,value:I,promoCodeError:k}=(0,pn.qW)(T,x);return(0,En.A)((()=>{S||y((e=>e+1))}),C),(0,a.useEffect)((()=>{w(S?null:na)}),[S]),a.createElement(M.Ay,{feature:"Billing::UpdateModal"},A?a.createElement(a.Fragment,null,a.createElement(m.Flex,{column:!0,gap:4},a.Children.map(c,(e=>(0,a.cloneElement)(e,{recurringIndex:s,setRecurringIndex:d}))),a.createElement(wn,{needsCommitment:g,commitment:p,handleCommitmentChange:h}),a.createElement(bn,null),S?a.createElement(Rt.A,{title:"Loading billing info...",height:"auto"}):I?a.createElement(a.Fragment,null,a.createElement(vn,(0,r.A)({currentPlan:i},I)),a.createElement(bn,null),a.createElement(Cn,{promotionCode:f,onApply:v,error:k})):a.createElement("div",null,"No data available"),a.createElement(kn,{currentPlan:i,onCtaClick:n})),a.createElement(Xn,{title:t,slug:u.slug,currentPlan:i,onClose:n,price:u,balance:i.balance,commitment:p,needsCommitment:g,previewData:I,loadingPreview:S,isUpdate:!0,promotionCode:f})):a.createElement(m.Flex,null,a.createElement(m.TextBigger,null,"You don't have permissions to change the plan.")))}));var la=n(45467);const oa=ta()((e=>{let{onClose:t,prices:n,currentPlan:o={},children:r}=e;const{recurringIndex:i,setRecurringIndex:c,price:s,needsCommitment:d,commitment:u,handleCommitmentChange:g}=ea({prices:n,currentPlan:o}),p=(0,ve.uW)("email"),[h,b]=(0,a.useState)(o.billingEmail||p||""),f=(0,E.JT)("billing:Manage"),{state:v}=(0,l.zy)(),[x,y]=(0,a.useState)((null===v||void 0===v?void 0:v.coupon)||""),{discount:C,promoCodeError:w}=(0,pn.D)({productId:s.id,promotionCode:x,...d&&u&&{commitment:u}}),[A,T]=(0,a.useState)(0),S=(0,fn.Lf)({price:s,promotionCode:x,commitment:u}),{loading:I,value:k}=(0,pn.Tr)(S,A);return(0,la.A)((()=>()=>T((e=>e+1))),[C,!x]),a.createElement(M.Ay,{feature:"Billing::CheckoutModal"},f?a.createElement(a.Fragment,null,a.createElement(m.Flex,{column:!0,gap:4},a.Children.map(r,(e=>(0,a.cloneElement)(e,{recurringIndex:i,setRecurringIndex:c}))),a.createElement(wn,{needsCommitment:d,commitment:u,handleCommitmentChange:g}),a.createElement(bn,null),a.createElement(m.TextInput,{onChange:e=>b(e.target.value),value:h,label:"Billing email",placeholder:"jsmith@example.com"}),a.createElement(bn,null),a.createElement(Cn,{promotionCode:x,onApply:y,error:w}),a.createElement(kn,{currentPlan:o,onCtaClick:t})),a.createElement(Xn,{currentPlan:o,onClose:t,price:s,balance:o.balance,commitment:u,email:h,needsCommitment:d,previewData:k,loadingPreview:I,promotionCode:x})):a.createElement(m.Flex,null,a.createElement(m.TextBigger,null,"You don't have permissions to change the plan.")))}));var ra=n(21290),ia=n(12602),ca=n(49389);const sa=[{free:a.createElement(m.H0,null,"Free forever"),homelab:a.createElement(m.H0,null,"$90.00",a.createElement(m.TextSmall,{color:"textLite"},"/year")),"business_2023.02":a.createElement(a.Fragment,null,a.createElement(m.H0,null,"$3.00",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month (billed yearly)")),a.createElement(m.Text,null,a.createElement(m.Text,{strong:!0},"25% discount")," is applied for annual billing.")),"business_2024.03":a.createElement(a.Fragment,null,a.createElement(m.H0,null,a.createElement(m.TextSmall,{color:"textLite"},"Up to")," $4.50",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month (billed yearly)")),a.createElement(m.Flex,{column:!0},a.createElement(m.Text,null,a.createElement(m.Text,{strong:!0},"25% discount")," is applied for annual billing."),a.createElement(m.Text,null,a.createElement(m.Text,{strong:!0},"+ volume discounts")," based on number of committed nodes"))),business:a.createElement(a.Fragment,null,a.createElement(m.H0,null,a.createElement(m.TextSmall,{color:"textLite"},"Up to")," $4.50",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month (billed yearly)")),a.createElement(m.Flex,{column:!0},a.createElement(m.Text,null,a.createElement(m.Text,{strong:!0},"25% discount")," is applied for annual billing."),a.createElement(m.Text,null,a.createElement(m.Text,{strong:!0},"+ volume discounts")," based on number of committed nodes")))},{free:a.createElement(m.H0,null,"Free forever"),homelab:a.createElement(m.H0,null,"$10.00",a.createElement(m.TextSmall,{color:"textLite"},"/month")),"business_2023.02":a.createElement(a.Fragment,null,a.createElement(m.H0,null,"$4.00",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month"))),"business_2024.03":a.createElement(a.Fragment,null,a.createElement(m.H0,null,"$6.00",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month"))),business:a.createElement(a.Fragment,null,a.createElement(m.H0,null,"$6.00",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month")))}],ma=e=>{let{recurringIndex:t,slug:n,version:l}=e;return a.createElement(m.Flex,{column:!0,gap:2},sa[t]["".concat(n,"_").concat(l)]||sa[t][n])},da=s.default.div.withConfig({displayName:"pricingDetails__OneLine",componentId:"sc-hbslp4-0"})(["white-space:nowrap white-space:nowrap;"]),ua=e=>{let{nodesLastPeriod:t,committedNodes:n}=e;const l=t-n,o=l>0;return 0==l?a.createElement(m.TextSmall,null,"You are using all your committed nodes."):o?a.createElement(m.TextSmall,null,"You are using"," ",a.createElement(m.TextSmall,{strong:!0,color:"error"},l," ",(0,ca.su)(l).toLowerCase()," more")," ","than your committed nodes."):a.createElement(m.TextSmall,null,"You are using"," ",a.createElement(m.TextSmall,{strong:!0,color:"success"},t," out of ",n)," ","committed ",(0,ca.su)(n).toLowerCase(),".")},ga=e=>{let{interval:t,currentPeriodTo:n,committedNodes:l,nodesLastPeriod:o,showPromotion:r,cancelling:i,onCancelPlan:c,commitment:s}=e;const{localeDateString:d}=(0,ra.$j)();return a.createElement(m.Flex,{column:!0,gap:1},!!n&&a.createElement(m.TextSmall,null,a.createElement(m.TextSmall,{strong:!0,"data-testid":"billingPricingDetails-interval"},"Billing ".concat(zn.rY[t]))," ","(renews ",d(new Date(n),{long:!1}),")"),r&&"month"===t&&a.createElement(ue.A,{onClick:c,disabled:i},a.createElement(da,null,"Save 25% by changing your billing frequency to yearly")),s?a.createElement(a.Fragment,null,a.createElement(m.TextSmall,null,"Committed Nodes:"," ",a.createElement(m.Text,{strong:!0,"data-testid":"billingPricingDetails-committedNodesNumber"},l)),"number"===typeof o?a.createElement(ua,{nodesLastPeriod:o,committedNodes:l}):null):null)},pa=e=>{let{features:t,showViewDetails:n}=e;return a.createElement(m.Flex,{column:!0,gap:1},t.map((e=>a.createElement(m.Flex,{gap:2,key:e},a.createElement(m.Box,{width:5},a.createElement(m.Icon,{name:"check",width:"20px",height:"20px",color:"primary"})),a.createElement(m.TextSmall,null,e)))),n&&a.createElement(m.Flex,{gap:2},a.createElement(m.Box,{width:5}),a.createElement(ue.A,{Component:m.Flex,as:Nt.N_,cursor:"pointer",alignItems:"center",gap:1,color:"text",hoverColor:"textFocus",to:"all-plans"},a.createElement(m.Text,{strong:!0},"View full details"),a.createElement(m.Icon,{name:"chevron_right",width:"16px",height:"16px"}))))},Ea=(e=>t=>{let{inModal:n,recurringIndex:l,setRecurringIndex:o,...r}=t;return n?a.createElement(m.Flex,{width:"100%",justifyContent:"between",alignItems:"center"},a.createElement(e,r),a.createElement(m.Flex,{gap:3,padding:[0,10]},zn.HR.map(((e,t)=>a.createElement(m.RadioButton,{key:e,checked:l===t,onChange:()=>o(t),"data-testid":"billingPaidPlans-".concat(e,"-radioButton")},a.createElement(m.Text,{color:"textDescription"},(0,_e.Zr)(zn.rY[e]))))))):a.createElement(e,r)})((e=>{let{children:t}=e;return a.createElement(m.H3,{"data-testid":"billingPricingDetails-activePlanName"},t)})),ha=e=>{var t;let{slug:n,version:l,prices:o,recurringIndex:i=0,setRecurringIndex:c,currentPlan:s={},isActive:d,showAllDetails:u,showTeaserDetails:g,cancelling:p,onCancelPlan:E,title:h,features:b,nodesLastPeriod:f,inModal:v}=e;const{onTrial:x}=(0,qn.A)(),y=d?s.pricing:(null===(t=o[i])||void 0===t?void 0:t.pricing)||{},C=(0,fn.Kj)(n);return a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.Flex,{column:!0},a.createElement(m.Flex,{alignItems:"center",gap:2},a.createElement(Ea,{inModal:v,recurringIndex:i,setRecurringIndex:c},h),d&&a.createElement(a.Fragment,null,a.createElement(m.Pill,{flavour:"success","data-testid":"active-plan",icon:"checkmark_s"},x?"Trial":"Active"),x&&!u&&a.createElement(ia.A,null,a.createElement(m.TextBig,{color:"primary"},"Upgrade Now!")))),l&&a.createElement(m.TextBig,null,"(",l,")")),u||!d||"free"===n?a.createElement(ma,(0,r.A)({inModal:v,isActive:d,currentPlan:s,recurringIndex:i,slug:n,version:l},y)):null,g&&null!==b&&void 0!==b&&b[l]?a.createElement(pa,{features:b[l],showViewDetails:!C}):null,d&&!(0,fn.Kj)(n)&&!x&&a.createElement(ga,(0,r.A)({},s,{showPromotion:!0,cancelling:p,onCancelPlan:E,nodesLastPeriod:f})))},ba=e=>{let{onConfirm:t}=e;const{sendButtonClickedLog:n}=(0,Te.A)(),[l,o]=(0,b.A)(),r=(0,a.useCallback)((()=>{n({feature:"HomelabAcceptTerms"}),t()}),[n]);return a.createElement(m.ConfirmationDialog,{title:"Terms of usage",confirmLabel:"I agree",handleConfirm:r,hideDecline:!0,isConfirmPositive:!0,isConfirmDisabled:!l,message:a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.Text,null,"By continuing, you acknowledge that you will use Netdata ONLY for homelab purposes. If professional use is detected you will be downgraded, and will waive any rights to refunds."),a.createElement(m.Text,null,"For more details on conditions please check our"," ",a.createElement(ue.A,{href:"https://www.netdata.cloud/fair-usage-policy",rel:"noopener noreferrer",strong:!0,target:"_blank"},"Fair Usage Policy"),"."),a.createElement(m.Flex,null,a.createElement(m.Checkbox,{checked:l,onChange:o,label:"I will NOT use the Homelab plan for professional purposes (this includes testing and staging environments).",labelPosition:"right",labelProps:{strong:!0,padding:[0,0,0,1]}})),a.createElement(m.Text,null))})};var fa=n(67276),va=n(47431),xa=n(93476),ya=n(66732),Ca=n(97118);const wa=(0,s.default)(m.Flex).attrs((e=>({padding:[0,2,4,2],background:"mainBackground",width:{min:"280px"},...e}))).withConfig({displayName:"styled__StyledWrapper",componentId:"sc-1gqbztm-0"})(["width:","};height:",";place-self:",";"],(e=>{let{showAllPlans:t,numberOfPlans:n}=e;return t?"calc(100% / ".concat(n+1,")"):"auto"}),(e=>{let{showAllPlans:t}=e;return t?"240px":"auto"}),(e=>{let{showAllPlans:t}=e;return t?"center":"auto"})),Aa=e=>{let{slug:t,version:n,prices:l=[],isSmall:i,isActive:c,currentPlan:s,showAllPlans:d,showTeaserDetails:u,allPlansView:g=!1,nodesLastPeriod:p,numberOfPlans:h,...f}=e;const v=(0,ve.NJ)(),x=(0,o.vt)(),{title:y,features:C}=zn.FJ[t]||zn.FJ.free,w=(0,E.JT)("billing:Manage"),{sendLog:A,sendButtonClickedLog:T,isReady:S}=(0,Te.A)(),{onTrial:I}=(0,qn.A)(),{cancelling:k,startCancelling:F,stopCancelling:P}=(0,pn.og)(),M="AWS"==s.paymentProvider,D=(0,a.useCallback)((function(){let{label:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};T({label:e},!0)}),[T,S]),L=(0,fn.z_)({currentPlan:s,slug:t,version:n,onTrial:I}),N=k||c&&(0,fn.Kj)(t)||s.slug==zn.VH.earlyBird&&t==zn.VH.free||s.slug==zn.VH.free&&"2023.02"==s.version&&t==zn.VH.free&&"2023.11"==n,[R,B]=(0,a.useState)({}),[_,,U,O]=(0,b.A)(),[V,H]=(0,me.A)(),W=(0,pn.M4)(),Y="cancel"===R.type&&!(0,fn.Kj)(s.slug)&&!_,q="cancel"===R.type&&t==zn.VH.free&&"2023.11"==n,{id:j}=(0,Ca.A)(),z=(0,$e.ly)(),J=(0,a.useCallback)((()=>{U(),F(),W({productId:j}).then((()=>{V({header:"Successfully canceled subscription",text:"You are now on Community plan"}),A({isSuccess:!0,description:"cancel-subscription"})})).catch((()=>{H({header:"Failed to cancel the subscription",text:"Remained on ".concat(y," plan")}),A({isFailure:!0,description:"cancel-subscription",error:"Failed to cancel the subscription"})})).finally((()=>{P(),z()}))}),[A,S]),G=(0,a.useMemo)((()=>"user-".concat(v,"-space-").concat(x,"-accept-homelab-terms")),[v,x]),$=(0,a.useCallback)((()=>{localStorage.setItem(G,!0)}),[G]),K=(0,a.useCallback)((()=>"true"==localStorage.getItem(G)),[G]),Z=(0,a.useCallback)((e=>{if(!k&&!N)if(t!=zn.VH.homelab||s.slug==zn.VH.homelab||K()){if((0,fn.Kj)(t))return B({type:"cancel"}),void A(e,!0);if((0,fn.Kj)(s.slug))return le("checkout"),void A(e,!0);le("update"),A(e,!0)}else B({type:"homelab"})}),[A,S,R,B]),Q=(0,a.useCallback)((()=>{B({}),$(),setTimeout((()=>{Z({action:fa.o1.buttonClicked},!0)}),200)}),[B,$,Z]),X=!!s.billingEmail,ee=X?aa:oa,{billingModalType:te,billingModalSlug:ne}=(0,Pt.PP)(),ae=["checkout","update"].includes(te)&&t==ne,le=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const n=(0,Pt.PP)();(0,Pt.Z8)({...n,billingModalType:e,billingModalSlug:""==e?e:t})},[oe,,re,ie]=(0,b.A)();return a.createElement(wa,(0,r.A)({column:!0,flex:i,gap:2,justifyContent:"between",showAllPlans:d,numberOfPlans:h,isSmall:i},f),a.createElement(ha,{slug:t,prices:l,isActive:c,currentPlan:s,cancelling:k,showAllDetails:d,showTeaserDetails:u,title:y,version:n,features:C,nodesLastPeriod:p,onCancelPlan:()=>Z({action:fa.o1.buttonClicked,label:y})}),!g&&a.createElement($t.A,{Component:m.Button,permission:"billing:Manage","data-ga":"upgrade-button::click-".concat(Fn({slug:t}),"::current-").concat(Fn(s),"::billing"),"data-testid":"billingPlan-".concat(t,"-").concat(c?"currentPlan":"upgradeButton"),label:L,flavour:(0,fn.Dy)(null===s||void 0===s?void 0:s.slug,t),disabled:N,width:"100%",onClick:()=>Z({action:fa.o1.buttonClicked,label:L,dataGa:"upgrade-button::click-".concat(Fn({slug:t}),"::current-").concat(Fn(s),"::billing")}),isLoading:k&&c,loadingLabel:"Cancelling"}),!d&&a.createElement(a.Fragment,null,I&&a.createElement(xa.A,{flavour:"billing"}),(I||!(0,fn.Kj)(s.slug))&&a.createElement(m.Flex,{column:!0,gap:4},a.createElement(m.Flex,{gap:6,alignItems:"baseline"},I&&a.createElement(va.A,null),!(0,fn.Kj)(s.slug)&&!M&&a.createElement(ue.A,{Component:m.Flex,as:Nt.N_,cursor:"pointer",alignItems:"center",gap:1,color:"text",hoverColor:"textFocus",to:"all-plans",padding:[4,0,0],disabled:k,onClick:()=>D({label:w?"Change plan":"View plans"}),"data-testid":"billingPlan-viewMorePlansLink","data-ga":"change-plan::click::billing"},a.createElement("span",null,w?"Change plan":"View plans"),a.createElement(m.Icon,{name:"chevron_right",width:"16px",height:"16px"}))),I&&a.createElement(a.Fragment,null,a.createElement(ya.A,{flavour:"billing",color:"textLite",onOptOutClick:re}),oe&&a.createElement(Yn.A,{onDecline:ie,onCancellingEnd:()=>{}})))),(Y||q)&&a.createElement(jn,{title:y,onConfirm:J,onClose:()=>{O(),B({})}}),"homelab"==R.type?a.createElement(ba,{onConfirm:Q}):null,ae&&a.createElement(ee,{title:y,onClose:()=>{O(),le()},prices:l,currentPlan:s,showProrations:X},a.createElement(ha,{slug:t,prices:l,currentPlan:s,title:y,version:n,inModal:!0})))},Ta=e=>{let{slug:t,isSmall:n,currentPlan:l,showAllPlans:o,allPlansView:i=!1,showTeaserDetails:c,numberOfPlans:s,...d}=e;const{sendButtonClickedLog:u}=(0,Te.A)(),{cancelling:g}=(0,pn.og)(),{features:p}=zn.FJ.enterprise,E=(0,a.useCallback)((()=>{window.open("https://www.netdata.cloud/request-enterprise/","_blank","noopener,noreferrer"),u({feature:"OnPremContact"})}),[u]);return a.createElement(wa,(0,r.A)({column:!0,flex:n,gap:2,justifyContent:"between",showAllPlans:o,numberOfPlans:s,isSmall:n},d),a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.Flex,{column:!0},a.createElement(m.Flex,{alignItems:"center",gap:2},a.createElement(m.H3,{"data-testid":"billingPricingDetails-activePlanName"},"Enterprise On-Premise"))),a.createElement(m.H0,null,a.createElement(m.TextSmall,{color:"textLite"},"Up to")," $3.52",a.createElement(m.TextSmall,{color:"textLite"},"/Node/month (billed yearly)")),a.createElement(m.Flex,{column:!0},a.createElement(m.Text,null,"Starts at 214 node licenses")),c&&a.createElement(pa,{features:p[2023.11]||[]})),!i&&a.createElement($t.A,{Component:m.Button,permission:"billing:Manage","data-ga":"upgrade-button::click-".concat(Fn({slug:t}),"::current-").concat(Fn(l),"::billing"),"data-testid":"billingPlan-".concat(t,"-upgradeButton"),label:"Contact us",flavour:"hollow",disabled:g,width:"100%",onClick:E}))},Sa=e=>{let{plans:t,isSmall:n,currentPlan:l,showAllPlans:o,showTeaserDetails:r,numberOfPlans:i}=e;return a.createElement(a.Fragment,null,zn.tD.map((e=>(Object.entries(t[e]||{})||[]).map((t=>{let[c,s]=t;return a.createElement(Aa,{key:"".concat(e,"-").concat(c),slug:e,version:c,prices:s,isActive:l.slug==e&&l.version==c,isSmall:n,currentPlan:l,showAllPlans:o,showTeaserDetails:r,numberOfPlans:i})})))),a.createElement(Ta,{slug:"enterprise",isSmall:n,currentPlan:l,showAllPlans:o,showTeaserDetails:r,numberOfPlans:i}))},Ia=s.default.div.withConfig({displayName:"styled__Container",componentId:"sc-1oa2kv1-0"})(["display:grid;background:",";"," ",""],(0,m.getColor)("mainBackground"),(e=>{let{sticky:t}=e;return t?"position:sticky;top:0;":""}),(e=>{let{numberOfPlans:t,showAllPlans:n}=e;const a=[n?"200px":"minmax(280px, 1fr)",...Array(t).fill("minmax(280px, 1.5fr)")];return"grid-template-columns: ".concat(a.join(" "),";")})),ka=s.default.div.withConfig({displayName:"styled__Header",componentId:"sc-1oa2kv1-1"})(["display:contents;> *{background:",";border-bottom:1px solid ",";}"],(0,m.getColor)("panelBg"),(0,m.getColor)("placeholder")),Fa=(0,s.default)(m.Collapsible).withConfig({displayName:"styled__Content",componentId:"sc-1oa2kv1-2"})(["display:contents;"]),Pa=()=>{const{loaded:e,value:t}=(0,pn.lU)(),n=(0,fn.LJ)(t);return e?n:0},Ma=e=>{var t,n,l,o;let{isSmall:r,plans:i,currentPlan:c,showAllPlans:s=!1,showTeaserDetails:d=!1,showPricingColumn:u}=e;const g="earlyBird"===c.slug,p=Pa(),{version:E}=(0,Ca.A)(),h=null===(t=(null===(n=i.free)||void 0===n?void 0:n[null===c||void 0===c?void 0:c.version])||(null===(l=i.free)||void 0===l?void 0:l[E]))||void 0===t?void 0:t[0],b=i.earlyBird?null===(o=Object.values(i.earlyBird)[0])||void 0===o?void 0:o[0]:{};return a.createElement(Ia,{numberOfPlans:p,showAllPlans:s,sticky:!0},u?a.createElement(m.Flex,{column:!0,height:50,justifyContent:"center"},a.createElement(m.Text,{strong:!0},"Pricing")):null,g?a.createElement(Aa,{slug:"earlyBird",version:null===b||void 0===b?void 0:b.version,prices:null===b||void 0===b?void 0:b.prices,isSmall:r,isActive:"earlyBird"===c.slug,currentPlan:c,showAllPlans:s,numberOfPlans:p}):a.createElement(Aa,{slug:"free",version:null===h||void 0===h?void 0:h.version,prices:null===h||void 0===h?void 0:h.prices,isSmall:r,isActive:"free"===c.slug&&c.version==(null===h||void 0===h?void 0:h.version),currentPlan:c,showAllPlans:s,showTeaserDetails:d,numberOfPlans:p}),a.createElement(Sa,{plans:i,isSmall:r,currentPlan:c,showAllPlans:s,showTeaserDetails:d,numberOfPlans:p}))},Da=e=>{let{children:t,...n}=e;return a.createElement(m.Flex,(0,r.A)({alignItems:"center",gap:2},n),t)},La=()=>a.createElement(m.Flex,{column:!0,gap:2,width:65},a.createElement(m.TextMicro,null,a.createElement(m.TextMicro,{strong:!0},"Available credit")," for you to use on any plan subscriptions with us."),a.createElement(m.TextMicro,null,"It is ok to change your mind, we will give you full flexibility! You can change the plan level, billing frequency or committed nodes, we won't hold you to any choice. When applicable, we'll credit you back on any unused amount.")),Na=(0,Ct.A)(ue.A),Ra=e=>{let{currentPlan:t}=e;const[n,l]=(0,pn.Qh)(),o=!!t.billingEmail&&!l,r=(0,E.JT)("billing:ReadAll"),i=null===t||void 0===t?void 0:t.marketplaceUrl,c="AWS"==(null===t||void 0===t?void 0:t.paymentProvider),s=(0,a.useCallback)((()=>{i&&(location.href=i)}),[i]);return a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.H3,null,"Plan & Billing"),r&&a.createElement(a.Fragment,null,a.createElement(Da,null,c?null:a.createElement(a.Fragment,null,a.createElement(m.Flex,{gap:1,alignItems:"center"},a.createElement(m.Text,null,"Credit:"),a.createElement(m.Text,{"data-testid":"billingHeader-credits",strong:!0},Mn.format(t.balance.amount||0)),a.createElement(Ue.A,{content:La,align:"bottom",isBasic:!0},a.createElement(m.Icon,{name:"information",width:"16px",height:"16px",color:"textLite"}))),a.createElement(hn,null)),a.createElement(m.Text,null,"Billing email:"," ",a.createElement(m.Text,{strong:!0,"data-testid":"billingHeader-email"},t.billingEmail||"-")),a.createElement(hn,null),i?a.createElement(Na,{Component:m.Flex,cursor:"pointer",onClick:s,alignItems:"center",gap:1,tooltip:"Manage your subscription on the AWS Marketplace","data-ga":"billing-options::click::billing","data-testid":"billingHeader-goToMarketplace"},a.createElement("span",null,"Manage your Subscription"),a.createElement(m.Icon,{name:"nav_arrow_goto",width:"12px",height:"12px"})):a.createElement(ue.A,{Component:m.Flex,cursor:o?"pointer":"default",disabled:!o,onClick:n,alignItems:"center",gap:1,"data-ga":"billing-options::click::billing","data-testid":"billingHeader-goToPortal"},a.createElement("span",null,"Billing options and Invoices"),a.createElement(m.Icon,{name:"nav_arrow_goto",width:"12px",height:"12px"}))),a.createElement(hn,{height:1,width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}})))};n(34504),n(78898);function Ba(){const e=new Date,t=e.getFullYear(),n=e.getMonth(),a=e.getDate(),l=new Date(0);return l.setFullYear(t,n,a-1),l.setHours(23,59,59,999),l}var _a=n(51730),Ua=n(13999);function Oa(e,t){return(0,Ua.f)(e,-t)}var Va=n(4883);function Ha(e,t){return(0,Va.P)(e,-t)}var Wa=n(35840);function Ya(e,t){const{years:n=0,months:a=0,weeks:l=0,days:o=0,hours:r=0,minutes:i=0,seconds:c=0}=t,s=Oa(Ha(e,a+12*n),o+7*l),m=1e3*(c+60*(i+60*r));return(0,Wa.w)(e,s.getTime()-m)}var qa=n(71600),ja=n(66118),za=n(51891),Ja=n(44731),Ga=n(99851),$a=n(24266),Ka=n(27467),Za=n(36712);const Qa={nodes:1,p90:2,committed_nodes:3},Xa={"Daily count":"The weighted 90th percentile of the live node count during the day, taking time as the weight. If you have 30 live nodes throughout the day, except for a two hour peak of 44 live nodes, the daily value is 31.","Committed nodes":"The number of nodes committed to in the yearly plan. In case the period count is higher than the number of committed nodes, the difference is billed as overage.","Period count":"The 90th percentile of the daily counts for this period up to the date. The last value for the period is used as the number of nodes for the bill for that period."};ja.t1.register(ja.kc,ja.PP,ja.E8,ja.FN,ja.No,ja.s$,ja.m_,ja.ZT,ja.A6,za.A),ja.m_.positioners.follow=function(e,t){return null===e||void 0===e||!e.length||t.y>360?(this._resolveAnimations().update(this,{opacity:0}),!1):(0===this.opacity&&this._resolveAnimations().update(this,{opacity:1}),{x:t.x,y:t.y})};const el=e=>({nodes:{label:"Daily count",type:"bar",color:(0,m.getColor)("text")({theme:e}),backgroundColor:(0,m.getColor)("primary")({theme:e}),borderColor:(0,m.getColor)("primary")({theme:e}),borderWidth:2,pointStyle:"rectangle",usePointStyle:!0},p90:{label:"Period count",type:"line",color:(0,m.getColor)("text")({theme:e}),borderColor:(0,m.getColor)(["purple","lilac"])({theme:e}),borderWidth:2,fill:!1,stepped:!0},committed_nodes:{label:"Committed nodes",type:"line",color:(0,m.getColor)("text")({theme:e}),borderColor:(0,m.getColor)(["blue","aquamarine"])({theme:e}),borderWidth:2,fill:!1,borderDash:[1,2],borderDashOffset:1,pointStyle:!1}}),tl={border:{side:"all",color:"inputBorder",padding:[3]},round:!0},nl=Ba(),al=(0,_a.o)(Ya(nl,{months:1})),ll=e=>{let{onNodesLastPeriodFetch:t}=e;const n=(0,Ka.rW)("offset"),l=(0,o.vt)(),[r,i]=(0,a.useState)((()=>({start:al,end:nl}))),[c,d,u]=(0,Et.A)((()=>({enabled:!!l&&!!r.start&&!!r.end,fetch:()=>(0,Za.U2)(l,{after:Math.floor((0,qa.W)((0,ra.ii)(r.start,n))/1e3),before:Math.floor((0,qa.W)((0,ra.ii)(r.end,n))/1e3)}),initialValue:{labels:[],data:[]},onSuccess:e=>{let{data:n,labels:a}=e;if(!n.length)return;const l=n.at(-1),o=l[a.indexOf("nodes")],r=l[a.indexOf("timestamp")];t((e=>e.timestamp>r?e:{timestamp:r,value:o}))}})),[l,r,t]),g=(0,a.useContext)(s.ThemeContext),p=(0,a.useMemo)((()=>{const e=c.data.map((e=>{let[t]=e;return t})),t=c.labels.reduce(((t,n,a)=>a?[{...el(g)[n],data:e.map(((e,t)=>c.data[t][a])),order:Qa[n]},...t]:t),[]);return{labels:e,datasets:t}}),[c]),[E,h]=function(e){let{data:t,annotations:n=[]}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{localeDateString:l}=(0,ra.$j)(),o=(0,a.useRef)(!1),r=(0,a.useRef)(),i=(0,a.useMemo)((()=>({interaction:{axis:"x"},plugins:{legend:{position:"bottom",align:"start",onClick:(e,t,n)=>{const a=n.legendItems.findIndex((e=>e.text===t.text));n.chart.isDatasetVisible(a)?n.chart.hide(a):n.chart.show(a)},labels:{generateLabels:e=>e.data.datasets.map(((t,n)=>({fontColor:t.color,text:t.label,fillStyle:t.backgroundColor,strokeStyle:t.borderColor,pointStyle:"Daily count"===t.label?"rect":"line",hidden:!e.isDatasetVisible(n),order:t.order}))).sort(((e,t)=>e.order-t.order)),usePointStyle:!0},onHover:function(e,t){!o.current&&r.current&&(o.current=!0,r.current.innerHTML=Xa[t.text],r.current.style.left=e.x+"px",r.current.style.top=e.y+"px",r.current.style.visibility="visible",r.current.style.transform="translateY(-100%)")},onLeave:function(){r.current&&(o.current=!1,r.current.innerHTML="",r.current.style.visibility="hidden")}},tooltip:{enabled:!0,mode:"nearest",intersect:!1,yAlign:"bottom",usePointStyle:!0,position:"follow",backgroundColor:(0,m.getColor)("tooltip")({theme:e}),color:(0,m.getColor)("tooltipText")({theme:e}),callbacks:{title:e=>{const[t]=e;return t?l(1e3*t.label,{month:"2-digit",day:"2-digit",year:"numeric",long:!1,dateStyle:void 0}):""},labelPointStyle:e=>({pointStyle:"Total Nodes"===e.dataset.label?"rect":"line"}),label:e=>" ".concat(e.formattedValue," ").concat(e.dataset.label||"")}},annotation:{annotations:n.reduce(((n,a,l)=>({...n,["annotation".concat(l)]:{type:"line",value:t.findIndex((e=>e[0]===a.timestamp)),borderColor:(0,m.getRgbColor)("attention",.3)({theme:e}),borderDashOffset:0,borderWidth:10,drawTime:"afterDatasetsDraw",label:{drawTime:"afterDatasetsDraw",display:!1,backgroundColor:(0,m.getRgbColor)("attention",.8)({theme:e}),borderWidth:0,color:"white",content:a.name,textAlign:"center"},scaleID:"x",enter(e,t){const n=e.chart,a=n.options.plugins.annotation.annotations["annotation".concat(l)];a.label.display=!0,a.label.position=t.y/e.chart.chartArea.height>.5?"start":"end",n.update()},leave(e){const t=e.chart;t.options.plugins.annotation.annotations["annotation".concat(l)].label.display=!1,t.update()}}})),{})}},responsive:!0,maintainAspectRatio:!1,scales:{x:{ticks:{callback:function(e){return l(1e3*this.getLabelForValue(e),{month:"2-digit",day:"2-digit",year:"numeric",long:!1,dateStyle:void 0})},color:(0,m.getColor)("textLite")({theme:e})}},y:{beginAtZero:!0,ticks:{color:(0,m.getColor)("textLite")({theme:e})}}}})),[e,t]);return[i,r]}(g,c);return a.createElement(m.Flex,{column:!0,gap:4},a.createElement(m.Flex,{alignItems:"center",justifyContent:"between"},a.createElement(m.H3,null,"Usage"),a.createElement(Ga.A,{values:r,utc:n,onChange:i,tagging:"billing-usage",isPlaying:!1,onlyDates:!0,accessorProps:tl,padding:[4,0],width:"auto",maxDate:nl})),a.createElement(m.Flex,{position:"relative",height:90},d?a.createElement(Rt.A,{title:"Loading billing data..."}):u?a.createElement($a.H4,{title:"Chart couldn't be loaded"}):a.createElement(Ja.t1,{type:"bar",data:p,options:E}),a.createElement(m.Flex,{ref:h,background:"main",color:"generic",position:"absolute",round:!0,padding:[3],width:{max:75},sx:{visibility:"hidden"},onMouseOver:()=>h.current.style.visibility="hidden"})))},ol=e=>{let{isSmall:t,currentPlan:n,loaded:l,currentLoaded:o,plans:r}=e;const[i,c]=(0,a.useState)({timestamp:null,value:null}),s=r[n.slug]?r[n.slug][n.version]:[];return a.createElement(a.Fragment,null,a.createElement(Ra,{currentPlan:n}),l&&o?a.createElement(a.Fragment,null,(0,fn.Kj)(n.slug)?a.createElement(Ma,{isSmall:t,plans:r,currentPlan:n,showTeaserDetails:!0}):a.createElement(Aa,{slug:n.slug,version:n.version,prices:s,width:t?"auto":120,padding:[0],height:"auto",isSmall:t,isActive:!0,currentPlan:n,allPlansView:!0,nodesLastPeriod:i.value}),a.createElement(hn,{height:1,width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}}),a.createElement(ll,{onNodesLastPeriodFetch:c})):a.createElement(Rt.A,{title:l?"Loading billing info...":"Loading Netdata plans..."}))};var rl=n(71847);const il={year:"Yearly",month:"Monthly"},cl=e=>{var t;let{currentPlan:n}=e;const l=(0,o.bq)(),[r,i]=(0,pn.Qh)(),{cancelling:c,startCancelling:s,stopCancelling:d}=(0,pn.og)(),u=!!n.billingEmail&&!i,[g,p]=(0,b.A)(),[h,f]=(0,me.A)(),v=(0,pn.M4)(),{title:x}=zn.FJ[n.slug]||zn.FJ.free,{id:y}=(0,Ca.A)(),C=(0,E.JT)("billing:Manage"),w=(0,E.JT)("billing:ReadAll"),{title:A}=zn.FJ[null===n||void 0===n?void 0:n.slug]||zn.FJ.free,T=il[null===n||void 0===n?void 0:n.interval];return a.createElement(m.Flex,{column:!0,gap:2},a.createElement(m.Flex,{gap:2,alignItems:"center"},a.createElement(ue.A,{as:Nt.N_,to:"/spaces/".concat(l,"/settings/billing"),disabled:c,color:"text",hoverColor:"textLite",showToolTip:!0,content:"Back to Plan & Billing",align:"bottom",isBasic:!0},a.createElement(m.Icon,{name:"arrow_left",width:"20px",height:"20px",margin:[1.5,0,0]})),a.createElement(m.H3,null,"All Plans")),a.createElement(Da,null,a.createElement(m.Flex,{gap:1,alignItems:"center"},a.createElement(m.Text,null,"Active plan:"),a.createElement(m.Text,{strong:!0},A)),a.createElement(hn,null),T&&a.createElement(a.Fragment,null,a.createElement(m.Flex,{gap:1,alignItems:"center"},a.createElement(m.Text,null,"Billing frequency:"),a.createElement(m.Text,{strong:!0},T)),a.createElement(hn,null)),n.commitment?a.createElement(m.Flex,{gap:1,alignItems:"center"},a.createElement(m.Text,null,"Committed Nodes:"),a.createElement(m.Text,{strong:!0},(null===n||void 0===n?void 0:n.committedNodes)||0)):null,a.createElement(hn,null),w&&a.createElement(a.Fragment,null,a.createElement(m.Flex,{gap:1,alignItems:"center"},a.createElement(m.Text,null,"Credit:"),a.createElement(m.Text,{strong:!0},Mn.format((null===n||void 0===n||null===(t=n.balance)||void 0===t?void 0:t.amount)||0)),a.createElement(Ue.A,{content:La,align:"bottom",isBasic:!0},a.createElement(m.Icon,{name:"information",width:"16px",height:"16px",color:"textLite"}))),a.createElement(hn,null),a.createElement(m.Flex,{gap:1,alignItems:"center"},a.createElement(m.Text,null,"Billing email:"),a.createElement(m.Text,{strong:!0},(null===n||void 0===n?void 0:n.billingEmail)||"-")),a.createElement(hn,null)),a.createElement(ue.A,{Component:m.Flex,cursor:u?"pointer":"default",disabled:!u,onClick:r,alignItems:"center",gap:1},a.createElement("span",null,"Billing options and Invoices"),a.createElement(m.Icon,{name:"nav_arrow_goto",width:"12px",height:"12px"})),!(0,fn.Kj)(null===n||void 0===n?void 0:n.slug)&&a.createElement(a.Fragment,null,a.createElement(hn,null),a.createElement(ue.A,{Component:m.Flex,cursor:"pointer",onClick:p,alignItems:"center",gap:1,disabled:c||!C,"data-ga":"cancel-plan::click::billing"},a.createElement(m.Text,{textDecoration:"underline"},c?"Canceling plan...":"Cancel plan")))),a.createElement(hn,{height:1,width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}}),g&&a.createElement(jn,{title:"Community",onConfirm:()=>{s(),v({productId:y}).then((()=>((0,rl.H)("billing","cancel-plan","global-view",{slug:null===n||void 0===n?void 0:n.slug,interval:null===n||void 0===n?void 0:n.interval,success:!0}),h({header:"Successfully canceled subscription",text:"You are now on Community plan"})))).catch((()=>((0,rl.H)("billing","cancel-plan","global-view",{slug:null===n||void 0===n?void 0:n.slug,interval:null===n||void 0===n?void 0:n.interval,success:!1}),f({header:"Failed to cancel the subscription",text:"Remained on ".concat(x," plan")})))).finally((()=>{d()}))},onClose:p}))},sl=()=>a.createElement(m.Icon,{name:"check",color:"primary"}),ml=()=>a.createElement(m.Icon,{name:"checkmark_partial_s",color:"textLite"}),dl=()=>a.createElement(m.Icon,{name:"chevron_down_thin",color:"text"}),ul=()=>a.createElement(m.Icon,{name:"chevron_up_thin",color:"text"}),gl=e=>{let{center:t,end:n,...l}=e;return a.createElement(m.Flex,{alignItems:"center",justifyContent:t?"center":n?"end":"start",padding:[2]},a.createElement(m.Text,(0,r.A)({},t?{textAlign:"center"}:{},l)))},pl=e=>{let{children:t,...n}=e;return a.createElement(gl,(0,r.A)({center:!0},n),t?a.createElement(m.Flex,{alignItems:"center",gap:2},t,a.createElement(sl,null)):a.createElement(sl,null))},El=e=>a.createElement(gl,(0,r.A)({center:!0},e),"UNLIMITED"),hl=e=>a.createElement(gl,(0,r.A)({center:!0},e),a.createElement(ml,null)),bl=e=>a.createElement(gl,(0,r.A)({center:!0},e),"SOON"),fl=e=>t=>{const{index:n,title:l="",showAllPlans:o,onToggle:r,collapsed:i}=t,c=Pa();return a.createElement(Ia,{numberOfPlans:c,showAllPlans:o},a.createElement(ka,{onClick:()=>r(n)},a.createElement(gl,{strong:!0},l),Array.from(Array(c-1).keys()).map((e=>a.createElement(gl,{key:e}))),a.createElement(gl,{end:!0},i[n]?a.createElement(ul,null):a.createElement(dl,null))),a.createElement(Fa,{open:!i[n]},a.createElement(e,t)))},vl=(0,a.memo)(fl((()=>a.createElement(a.Fragment,null,a.createElement(gl,null,"Scalability"),a.createElement(gl,{center:!0},"Vertical and Horizontal"),a.createElement(gl,{center:!0},"Vertical and Horizontal"),a.createElement(gl,{center:!0},"Vertical and Horizontal"),a.createElement(gl,{center:!0},"Vertical and Horizontal"),a.createElement(gl,null,"High Availability"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Data Retention"),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Data Privacy"),a.createElement(gl,{center:!0},"Data stored On-Prem and visualized on Netdata Cloud"),a.createElement(gl,{center:!0},"Data stored On-Prem and visualized on Netdata Cloud"),a.createElement(gl,{center:!0},"Data stored On-Prem and visualized on Netdata Cloud"),a.createElement(gl,{center:!0},"Data stored and visualized On-Prem"),a.createElement(gl,null,"Configuration"),a.createElement(gl,{center:!0},"Manual, IaC or in App(UI)"),a.createElement(gl,{center:!0},"Manual, IaC or in App(UI)"),a.createElement(gl,{center:!0},"Manual, IaC or in App(UI)"),a.createElement(gl,{center:!0},"Manual, IaC or in App(UI)"))))),xl=(0,a.memo)(fl((e=>{let{freePlanLimitattions:t}=e;return a.createElement(a.Fragment,null,a.createElement(gl,null,"Customizable charts"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Infrastructure wide Dashboards"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Centralized Alerts Management"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Infrastructure Organization (Rooms)"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Custom Dashboards"),a.createElement(pl,null,null!==t&&void 0!==t&&t.maxDashboards?a.createElement(m.Text,null,"(Limited to ",t.maxDashboards," per Room)"):null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Access dashboards from anywhere in the world"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Role Based Access Control (RBAC)"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Auditing"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Invite Team Members"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Functions"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Netdata Assistant"),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,"Mobile App"),a.createElement(hl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(hl,null),a.createElement(gl,null,"Centralized Management of Integrations"),a.createElement(bl,null),a.createElement(bl,null),a.createElement(bl,null),a.createElement(bl,null))}))),yl=(0,a.memo)(fl((e=>{let{freePlanLimitattions:t}=e;return a.createElement(a.Fragment,null,a.createElement(gl,null,"Active Connected Nodes"),null!==t&&void 0!==t&&t.maxNodes?a.createElement(gl,{center:!0},"Max of ",t.maxNodes):a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Active Custom Dashboards"),null!==t&&void 0!==t&&t.maxDashboards?a.createElement(gl,{center:!0},"Max of ",t.maxDashboards," per Room"):a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Infrastructure metrics"),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"APM metrics"),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Custom metrics"),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Synthetic checks"),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Monitor system journal logs"),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(El,null),a.createElement(gl,null,"Auditing Events"),a.createElement(gl,{center:!0},"4 hours"),a.createElement(gl,{center:!0},"90 days"),a.createElement(gl,{center:!0},"90 days"),a.createElement(gl,{center:!0},"As required"),a.createElement(gl,null,"Topology Events"),a.createElement(gl,{center:!0},"4 hours"),a.createElement(gl,{center:!0},"14 days"),a.createElement(gl,{center:!0},"14 days"),a.createElement(gl,{center:!0},"As required"),a.createElement(gl,null,"Alert Events"),a.createElement(gl,{center:!0},"4 hours"),a.createElement(gl,{center:!0},"60 days"),a.createElement(gl,{center:!0},"60 days"),a.createElement(gl,{center:!0},"As required"),a.createElement(gl,null,"Alert Notification Integrations"),a.createElement(gl,{center:!0},"Email, Discord"),a.createElement(gl,{center:!0},"Email, Discord, Webhook, Mattermost, Opsgenie, PagerDuty, RocketChat, Slack, and more"),a.createElement(gl,{center:!0},"Email, Discord, Webhook, Mattermost, Opsgenie, PagerDuty, RocketChat, Slack, and more"),a.createElement(gl,{center:!0},a.createElement(m.Text,null,"Same as Business plan"),a.createElement("br",null),a.createElement(m.TextSmall,null,"(Custom requests can be handled)")),a.createElement(gl,null,"User Administration"),a.createElement(gl,{center:!0},"Basic"),a.createElement(gl,{center:!0},"Advanced"),a.createElement(gl,{center:!0},"Advanced"),a.createElement(gl,{center:!0},"Advanced"))}))),Cl=(0,a.memo)(fl((e=>{let{isEarlyBird:t}=e;return a.createElement(a.Fragment,null,a.createElement(gl,null,a.createElement(m.Text,{id:"administrators"},"Administrators"),a.createElement("br",null),a.createElement(m.TextSmall,{color:"textDescription",id:"same-as-managers-but-unable-to-manage-users-or-rooms"},"Users with this role can control Spaces, War Rooms, Nodes, Users and Billing. They can also access any Room in the Space.")),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,a.createElement(m.Text,{id:"troubleshooters"},"Troubleshooters"),a.createElement("br",null),a.createElement(m.TextSmall,{color:"textDescription"},"Users with this role can use Netdata to troubleshoot, not manage entities. They can access any Room in the Space.")),a.createElement(hl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,a.createElement(m.Text,{id:"managers"},"Managers"),a.createElement("br",null),a.createElement(m.TextSmall,{color:"textDescription"},"Users with this role can manage Rooms and Users. They can access any Room in the Space.")),a.createElement(hl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,a.createElement(m.Text,{id:"observers"},"Observers"),a.createElement("br",null),a.createElement(m.TextSmall,{color:"textDescription"},"Users with this role can only view data in specific Rooms.")),a.createElement(hl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,a.createElement(m.Text,{id:"billing"},"Billing"),a.createElement("br",null),a.createElement(m.TextSmall,{color:"textDescription"},"Users with this role can handle billing options and invoices.")),a.createElement(hl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(pl,null),a.createElement(gl,null,a.createElement(m.Text,{id:"billing"},"Member"),a.createElement("br",null),a.createElement(m.TextSmall,{color:"textDescription"},"This role allows users to manage rooms and invite fellow Member teammates. These users cannot see all rooms in the Space but can see all Nodes since they are always on the All Nodes.")),t?a.createElement(pl,null):a.createElement(hl,null),a.createElement(hl,null),a.createElement(hl,null),a.createElement(hl,null))}))),wl=(0,a.memo)(fl((()=>a.createElement(a.Fragment,null,a.createElement(gl,null,"Service Availability"),a.createElement(gl,{center:!0},"Best Effort (99.5% in last 12 months)"),a.createElement(gl,{center:!0},"Best Effort (99.5% in last 12 months)"),a.createElement(gl,{center:!0},"99.9% annually (excl. scheduled maintenance)"),a.createElement(gl,{center:!0},"Same as Business plan"),a.createElement(gl,null,"Technical Support"),a.createElement(gl,{center:!0},"Public Forums, Tickets & Chat"),a.createElement(gl,{center:!0},"Public Forums, Tickets & Chat"),a.createElement(gl,{center:!0},a.createElement(m.Text,null,"Public Forums, Tickets & Chat"),a.createElement("br",null),a.createElement(m.Text,{color:"textDescription"},"Need Premium Support?"," ",a.createElement(ue.A,{Component:m.Text,href:"https://www.netdata.cloud/contact-us/?subject=custom-support-requirements",target:"_blank",rel:"noopener noreferrer"},"Reach out to us"))),a.createElement(gl,{center:!0},"Custom Design to Meet Requirements"),a.createElement(gl,null,"Initial Deployment Consulting Services"),a.createElement(gl,{center:!0},"Public Forums, Tickets & Chat"),a.createElement(gl,{center:!0},"Public Forums, Tickets & Chat"),a.createElement(gl,{center:!0},"Public Forums, Tickets & Chat"),a.createElement(gl,{center:!0},"Remote or On Site Consultation and Training During Deployment"))))),Al=e=>{var t;let{plans:n,currentPlan:l}=e;const o="free"==(null===l||void 0===l?void 0:l.slug)&&"2023.02"==(null===l||void 0===l?void 0:l.version),i="earlyBird"===(null===l||void 0===l?void 0:l.slug),c=null===(t=Object.values((null===n||void 0===n?void 0:n.free)||{}))||void 0===t||null===(t=t[0])||void 0===t||null===(t=t[0])||void 0===t?void 0:t.planLimitations,[s,d]=(0,a.useState)((()=>[!1,!0,!0,!0,!0])),u={isOldCommunity:o,isEarlyBird:i,freePlanLimitattions:c,showAllPlans:!0,onToggle:e=>d((t=>(t[e]=!t[e],[...t]))),collapsed:s};return a.createElement(m.Flex,{column:!0,gap:5,height:"100%"},a.createElement(vl,(0,r.A)({title:"General",index:0},u)),a.createElement(xl,(0,r.A)({title:"Features",index:1},u)),a.createElement(yl,(0,r.A)({title:"Usage Allowances",index:2},u)),a.createElement(Cl,(0,r.A)({title:"User Roles",index:3},u)),a.createElement(wl,(0,r.A)({title:"Support",index:4},u)))},Tl=e=>{let{plans:t,loaded:n,currentLoaded:l,currentPlan:o}=e;return a.createElement(m.Flex,{column:!0,height:"100%",gap:3},a.createElement(cl,{currentPlan:o}),n&&l?a.createElement(m.Flex,{overflow:"auto",column:!0,gap:5,height:"100%",padding:[0,0,20,0]},a.createElement(Ma,{plans:t,currentPlan:o,showAllPlans:!0,showPricingColumn:!0}),a.createElement(Al,{plans:t,currentPlan:o})):a.createElement(Rt.A,{title:n?"Loading billing info...":"Loading Netdata plans..."}))},Sl={Community:0,Pro:1,Business:2},Il={month:"Monthly",year:"Yearly"},kl=()=>{const[e,t]=(0,Nt.ok)(),[n,l]=(0,me.A)();(0,a.useEffect)((()=>{const a=e.get("from"),o=e.get("from_committed_nodes"),r=e.get("interval"),i=e.get("result"),c=e.get("to"),s=e.get("to_committed_nodes"),m=e.get("from_trial");if(i){const d="success"==i,u={from:a,fromNodes:o,interval:r,to:c,toNodes:s,fromTrial:m,success:d};(d?n:l)((e=>{let{from:t,to:n,fromNodes:a,toNodes:l,interval:o,fromTrial:r,success:i=!0}=e;if(r)return{header:i?"Successful upgrade":"Failed to upgrade",text:i?"You have successfully upgraded your plan":"Something went wrong"};const c=Il[o]||o;if(t===n&&a===l)return{header:i?"Successful billing cycle change":"Failed to update billing cycle",text:i?"Subscription billing cycle changed to ".concat(c):"Subscription is still on ".concat(c," billing cycle")};if(t===n)return{header:i?"Successful change of commitment":"Failed to change the commitment",text:i?"Commitment ".concat(aSl[n];return{header:i?"Successfully ".concat(s?"downgraded":"upgraded"," plan"):"Failed to ".concat(s?"downgrade":"upgrade"," plan"),text:i?"Subsrciprion ".concat(s?"downgraded":"upgraded"," from ").concat(t," to ").concat(n," plan (").concat(c,")"):"Remained on ".concat(t," plan")}})(u)),(0,rl.H)("billing","callback","global-view",u),e&&(e.delete("from"),e.delete("from_committed_nodes"),e.delete("interval"),e.delete("result"),e.delete("to"),e.delete("to_committed_nodes"),e.delete("from_trial"),t(e))}}),[e,n,l])},Fl=()=>{const[e]=(0,De.Ay)();return a.createElement(l.C5,{replace:!0,to:"/spaces/".concat(e)})},Pl=()=>{kl();const{loaded:e,value:t}=(0,pn.lU)(),{loaded:n,value:o}=(0,pn.JN)(),r="AWS"==(null===o||void 0===o?void 0:o.paymentProvider),i=(0,gn.J)();return a.createElement(M.Ay,{feature:"Billing"},a.createElement(m.Flex,{column:!0,height:"calc(100% - 30px)",gap:3},a.createElement(l.BV,null,a.createElement(l.qh,{path:"/all-plans",element:r?a.createElement(Fl,null):a.createElement(Tl,{isSmall:i,currentPlan:o,loaded:e,currentLoaded:n,plans:t})}),a.createElement(l.qh,{path:"/",element:a.createElement(ol,{isSmall:i,currentPlan:o,loaded:e,currentLoaded:n,plans:t})}))))};var Ml=n(58205),Dl=n(1239),Ll=n(93155);const Nl=(0,i.A)((()=>Promise.all([n.e(7208),n.e(7304)]).then(n.bind(n,7304)))),Rl=(0,i.A)((()=>Promise.all([n.e(749),n.e(8910),n.e(185)]).then(n.bind(n,70185)))),Bl=(0,i.A)((()=>n.e(8842).then(n.bind(n,8842)))),_l=(0,s.default)(d.t).withConfig({displayName:"manage-workspace__ColumnHeader",componentId:"sc-j9n54n-0"})(["width:180px;padding:16px;"]),Ul=e=>t=>a.createElement(a.Suspense,{fallback:a.createElement(Rt.A,{title:"Loading settings tab..."})},a.createElement(e,t)),Ol=e=>t=>a.createElement(u.Yv,{flex:"1",overflow:"hidden"},a.createElement(e,t)),Vl=e=>t=>{let{containerProps:n={},...l}=t;return a.createElement(u.Yv,(0,r.A)({flex:"1",overflow:"hidden",height:"100%",padding:[4,0,0]},n),a.createElement(e,l))},Hl=Ol(mn),Wl=Ol(Re),Yl=Ol(nt),ql=Ol(Qe),jl=Vl(Yt),zl=Ol(Pl),Jl=Vl(Ul(Nl)),Gl=Ol(Ul(Rl)),$l=Vl(Ul(Bl)),Kl=(0,a.memo)((()=>{const e=(0,l.Zp)(),{state:t={},pathname:n}=(0,l.zy)(),{settingsTab:r,...i}=(0,l.g)(),[s]=(0,a.useState)((null===t||void 0===t?void 0:t.previousUrlPath)||null),d=(0,o.ap)("name"),p=(0,o.ap)("id"),h=(e=>{const t=B.IV.indexOf(e);return-1!==t?t:B.Wk})(r),b=(0,a.useCallback)((t=>{const a=((e,t)=>{const n=e.split("/"),a=n.indexOf("settings")+1-n.length;return"".concat(n.slice(0,a).join("/"),"/").concat(B.IV[t]||B.Wk)})(n,t);e(a)}),[r]);(0,a.useEffect)((()=>{B.ys[r]||e((0,c.tW)(n,{...i,settingsTab:B.Wk}))}),[]);const f=(0,E.JT)("billing:ReadBasic"),v=(0,E.JT)("room:ReadAll"),x=(0,E.JT)("user:ReadAll"),y=(0,E.JT)("channel:ReadAll"),C=(0,A.At)(),w=(0,jt.ES)(p);(0,a.useEffect)((()=>{f||r===B.bO&&e((0,c.tW)(n,{...i,settingsTab:B.Wk}))}),[f,r]);const T=(0,o.bq)(),S=(0,a.useCallback)((t=>{const n=t?"/spaces/".concat(t):s||"/spaces/".concat(T);e(n)}),[s,T]);return d?a.createElement($t.A,{permission:"space:ReadSettings"},(e=>a.createElement(M.Ay,{feature:"SpaceSettings"},a.createElement(u.GO,{full:!0,"data-testid":"manageWorkspaceModal",closeOnClickOutside:!1,onClose:S,width:"100%"},a.createElement(g.z,{"data-testid":"manageWorkspaceModal-header",onClose:S,title:a.createElement(un,null)}),a.createElement(m.Tabs,{row:!0,column:!1,"data-testid":"manageWorkspaceModal-tabs",selected:h,onChange:b,TabsHeader:_l,tabsProps:{column:!0},height:"100%",noDefaultBorder:!0,position:"relative",overflow:"hidden",width:"100%"},w?null:a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-spaceTab",label:B.ys[B.mm],"data-ga":"manage-space::click-tab::space-tab",isMenuItem:!0},a.createElement(Hl,{"data-testid":"manageWorkspaceModal-spaceTabContent",onClose:S,small:!0})),!w&&v?a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-warRoomsTab","data-ga":"manage-space::click-tab::rooms-tab",label:"Rooms",isMenuItem:!0},a.createElement(Wl,{"data-testid":"manageWorkspaceModal-warRoomsTabContent"})):null,w||!v&&!C?null:a.createElement(m.Tab,{basis:0,label:"Nodes","data-testid":"manageWorkspaceModal-nodesTab","data-ga":"manage-space::click-tab::nodes-tab",isMenuItem:!0},a.createElement(Yl,{"data-testid":"manageWorkspaceModal-nodesTabContent"})),!w&&x?a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-usersTab","data-ga":"manage-space::click-tab::users-tab",label:"Users",isMenuItem:!0},a.createElement(ql,{"data-testid":"manageWorkspaceModal-usersTabContent"})):null,!w&&y?a.createElement(m.Tab,{basis:0,label:"Alerts & Notifications","data-testid":"manageWorkspaceModal-notificationsTab","data-ga":"manage-space::click-tab::notifications-tab",isMenuItem:!0},a.createElement(jl,null)):null,w||!f||Dl.ei?null:a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-billingTab","data-ga":"manage-space::click-tab::billing-tab",label:"Plan & Billing",isMenuItem:!0},a.createElement(zl,{"data-testid":"manageWorkspaceModal-billingTabContent"})),!w&&v?a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-integrationsTab","data-ga":"manage-space::click-tab::integrations-tab",label:"Integrations",isMenuItem:!0},a.createElement(Jl,{flavour:Ml.D_.settingsPage,containerProps:{padding:[0]},"data-testid":"manageWorkspaceModal-integrationsTabContent"})):null,a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-configurationsTab","data-ga":"manage-space::click-tab::configurations-tab",label:B.ys[B.$d],isMenuItem:!0},a.createElement(Gl,null)),!w&&Ll.Df?a.createElement(m.Tab,{basis:0,"data-testid":"manageWorkspaceModal-authenticationTab","data-ga":"manage-space::click-tab::authentication-tab",label:B.ys[B.iy],isMenuItem:!0},a.createElement($l,null)):null))))):null})),Zl=()=>{const e=(0,o.ap)("id"),t=(0,jt.ES)(e)?"virtual":"default",n=B.DT[t],{pathname:r,state:i}=(0,l.zy)();return a.createElement(l.BV,null,a.createElement(l.qh,{path:"/",element:a.createElement(l.C5,{state:i,to:{pathname:"".concat(r,"/").concat(n)}})}),a.createElement(l.qh,{path:":settingsTab/*",element:a.createElement(Kl,null)}))}},39522:(e,t,n)=>{"use strict";n.d(t,{A:()=>x});var a=n(58168),l=n(96540),o=n(83199),r=n(47767),i=n(22292),c=n(55463),s=(n(17333),n(98992),n(54520),n(62953),n(47444)),m=n(71835),d=n(54702),u=n(55189),g=n(3914),p=n(48849),E=n(56639),h=n(14994);var b=n(57992);const f="leave-space-dialog",v="leaveSpaceDialog",x=e=>{let{id:t,name:n,onClose:x}=e;const y=(0,r.Zp)(),C=(0,i.uW)("id"),w=(0,c.Gi)(),A=(0,c.i3)(),T=(0,c.pB)(),S=(e=>{const[,t]=(0,m.A)();return(0,s.Zs)((n=>{let{snapshot:a,set:l,reset:o}=n;return async n=>{let{currentUserId:r,onSuccess:i,onError:s}=n;const m=await a.getPromise((0,g.nC)("ids")),b=m.filter((t=>e!==t)),[f]=b;if(!f)return void t({header:"Spaces",text:u.sh.leave});const{slug:v}=f&&await a.getPromise((0,E.Ay)(f));l((0,g.nC)("ids"),b),l(p.A,(t=>t.filter((t=>t!==e))));try{await(0,d.XY)(e,[r]),i&&i(v),(0,c.Z8)(o,e),(0,h.Is)(o,e),o((0,E.Ay)(e))}catch(x){l((0,g.nC)("ids"),m),s&&s()}}}),[e])})(t),I=(0,b.A)(t),k=(0,l.useCallback)((e=>y("/spaces/".concat(e))),[]),F=1===w.length,P=1===A.length&&T,M=F?{confirmLabel:"Yes, leave","data-ga":"".concat(f,"-last-member"),"data-testid":"".concat(v,"LastMember"),handleConfirm:()=>I({onSuccess:k}),message:l.createElement(l.Fragment,null,"If you leave, space ",l.createElement("strong",null,n)," will be deleted immediately.",l.createElement("br",null),"Are you sure you want to continue?"),title:"Leave and delete ".concat(n," space")}:P?{confirmLabel:"Give rights","data-ga":"".concat(f,"-last-admin"),"data-testid":"".concat(v,"LastAdmin"),handleConfirm:()=>y("users"),isConfirmPositive:!0,message:l.createElement(l.Fragment,null,"You are the last admin of ",l.createElement("strong",null,n)," space. Please give admin rights to another member so you can leave this space."),title:"Leave ".concat(n," space")}:{confirmLabel:"Yes, leave","data-ga":f,"data-testid":v,handleConfirm:()=>S({currentUserId:C,onSuccess:k}),message:l.createElement(l.Fragment,null,"You are about to leave ",l.createElement("strong",null,n)," space.",l.createElement("br",null),"Are you sure you want to continue?"),title:"Leave ".concat(n," space")};return l.createElement(o.ConfirmationDialog,(0,a.A)({handleDecline:x},M))}},47193:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});n(62953);var a=n(69765),l=n(67990),o=n(87860),r=n(3914),i=n(47762),c=n(87659);const s=function(){let{polling:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t=""}=(0,a.pr)(),n=(0,l.gr)(t,"ids"),s=(0,l.gr)(t,"loaded"),m=(0,i.Gt)(n),d=(0,r.vt)(),[u,,,g]=(0,c.A)();return(0,o.A)({id:t,spaceId:d,polling:e}),{areDefaultRoomNodesLoaded:s,nodes:m,isClaimNodeModalOpen:u,closeClaimNodeModal:g}}},97200:(e,t,n)=>{var a=n(13222),l=0;e.exports=function(e){var t=++l;return a(e)+t}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5246.07c5a1649f0805c140fe.chunk.js b/src/web/gui/v2/5246.07c5a1649f0805c140fe.chunk.js deleted file mode 100644 index 2f476f949..000000000 --- a/src/web/gui/v2/5246.07c5a1649f0805c140fe.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var C="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(C._sentryDebugIds=C._sentryDebugIds||{},C._sentryDebugIds[t]="b495f478-24ec-4d85-a71d-7b0fa9909eca",C._sentryDebugIdIdentifier="sentry-dbid-b495f478-24ec-4d85-a71d-7b0fa9909eca")}catch(C){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5246],{75246:(C,t,e)=>{e.r(t),e.d(t,{default:()=>g});e(62953);var n=e(96540),l=e(83199),i=e(71847),a=e(12897),d=e.n(a),o=e(55042),r=e.n(o),c=new(d())({id:"terms.svg",use:"terms.svg-usage",viewBox:"0 0 240 240",content:'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'});r().add(c);const p=c,s=()=>n.createElement("svg",{height:"240px",width:"240px",viewBox:p.viewBox},n.createElement("use",{xlinkHref:"#".concat(p.id)}));var H=e(74664),V=e(58187);const h=C=>{let{checked:t,error:e,onChange:i,tagging:a,children:d}=C;return n.createElement(l.Flex,{alignItems:"center","data-testid":"termsAndConditions"},n.createElement(H.ph,{checked:t,onChange:i,error:e,"data-ga":"signinup::click-checkbox::".concat(a),"data-testid":"termsAndConditions-checkbox"}),d||n.createElement(l.TextBig,null,"By signing up, you agree to the Netdata ",n.createElement(V.H,{tagging:a})," and"," ",n.createElement(V.X,{tagging:a})))};var f=e(22292),E=e(87659);const g=()=>{const[C,t]=(0,f.Ir)("termsAccepted",{shouldPersist:!0}),[e,a]=(0,E.A)(),d=(0,n.useCallback)((()=>{(0,i.H)("","","","","","terms-accept"),t(e)}),[e]);return C?null:n.createElement(l.ConfirmationDialog,{confirmLabel:"Accept","data-ga":"accept-terms-dialog","data-testid":"acceptTermsDialog",handleConfirm:d,hideIcon:!0,hideDecline:!0,isConfirmPositive:!0,isConfirmDisabled:!e,message:n.createElement(l.Flex,{gap:4,alignItems:"center",column:!0},n.createElement(s,null),n.createElement(h,{checked:e,onChange:a,tagging:"modal-view"})),title:"To use Netdata you need to read and accept our terms and conditions"})}},74664:(C,t,e)=>{e.d(t,{MG:()=>p,OV:()=>c,ah:()=>d,ch:()=>a,j5:()=>o,ph:()=>r});var n=e(8711),l=e(83199),i=e(96763);const a=n.default.div.withConfig({displayName:"styled__SvgContainer",componentId:"sc-16ytcl4-0"})(["width:42px;height:42px;flex-shrink:0;display:flex;justify-content:center;align-items:center;border-radius:2px;background:white;"]),d=n.default.a.withConfig({displayName:"styled__StyledLink",componentId:"sc-16ytcl4-1"})(["display:inline-flex;align-items:center;text-decoration:none;color:",";cursor:pointer;&:hover{text-decoration:underline;color:"," !important;}&:visited{color:",";}> svg{fill:",";padding-right:",";}"],(0,l.getColor)("success"),(0,l.getColor)("success"),(0,l.getColor)("success"),(0,l.getColor)("main"),(0,l.getSizeBy)(1)),o=(0,n.default)(i.A).withConfig({displayName:"styled__EmailInput",componentId:"sc-16ytcl4-2"})(["",""],(C=>{let{isLastSignInMethod:t}=C;return t?"border: 2px solid green;":"border: 1px solid #51966C;"})),r=(0,n.default)(l.Checkbox).withConfig({displayName:"styled__StyledCheckbox",componentId:"sc-16ytcl4-3"})(["margin:0 "," 0 0;& div:last-child{border-color:",";}"],(0,l.getSizeBy)(2),(C=>{let{error:t}=C;return t&&(0,l.getColor)("error")})),c=(0,n.default)(l.Button).withConfig({displayName:"styled__StyledButton",componentId:"sc-16ytcl4-4"})(["&&{height:44px;}"]),p=(0,n.default)(l.Flex).attrs((C=>{let{gap:t=8}=C;return{column:!0,gap:t,alignSelf:"center",padding:[0,0,8,0],border:{side:"bottom",color:"disabled"},width:{max:"320px"}}})).withConfig({displayName:"styled__FormContainer",componentId:"sc-16ytcl4-5"})(["width:100%;"])},58187:(C,t,e)=>{e.d(t,{H:()=>d,X:()=>o});var n=e(96540),l=e(74664);const i={link:"https://www.netdata.cloud/terms",title:"Terms And Conditions",dataGa:"signinup::click-terms::"},a=C=>{let{link:t,title:e,dataGa:i}=C;return C=>{let{tagging:a}=C;return n.createElement(l.ah,{href:t,target:"_blank",rel:"noopener noreferrer","data-ga":"".concat(i).concat(a)},e)}},d=a({link:"https://www.netdata.cloud/privacy",title:"Privacy Policy",dataGa:"signinup::click-privacy::"}),o=a(i)}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5304.cc797fdd343c7e873b2f.chunk.js b/src/web/gui/v2/5304.cc797fdd343c7e873b2f.chunk.js deleted file mode 100644 index 1c3e79892..000000000 --- a/src/web/gui/v2/5304.cc797fdd343c7e873b2f.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="8c26f46f-78bd-438a-9cab-12329b4e3652",e._sentryDebugIdIdentifier="sentry-dbid-8c26f46f-78bd-438a-9cab-12329b4e3652")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5304],{79394:(e,t,l)=>{l.d(t,{A:()=>u,p:()=>d});l(41393),l(81454);var a=l(96540),n=l(47444),r=l(3914),o=l(67990),s=l(63129),i=l(88982);const c=()=>{const e=(0,r.vt)();return(0,n.Zs)((t=>{let{set:l,snapshot:a}=t;return async t=>{const n=await a.getPromise((0,o.$6)({id:t,key:"nodes"}));let r=null;return null!==n&&void 0!==n&&n.length||(l((0,o.$6)({id:t,key:"loaded"}),!1),r=(0,s.uQ)({roomId:t,spaceId:e}),r.then((e=>{let{data:a}=e;l((0,o.$6)({id:t,key:"nodes"}),a.map((e=>{let{id:t,name:l}=e;return{label:l,value:t}}))),l((0,o.$6)({id:t,key:"loaded"}),!0)})).catch((e=>l((0,o.$6)({id:t,key:"error"}),e)))),r}}),[e])},d=()=>{const e=c(),t=(0,i.n)("id");(0,a.useEffect)((()=>{let l=null;return t&&(l=e(t)),()=>{var e;return!(null===(e=l)||void 0===e||!e.cancel)&&l.cancel()}}),[t,e])},u=c},25304:(e,t,l)=>{l.r(t),l.d(t,{default:()=>ae});var a=l(96540),n=l(83084),r=l(28738),o=(l(8159),l(98992),l(37550),l(62953),l(87659)),s=l(81638),i=l(30577),c=l(93615),d=l(58168),u=l(83199),m=(l(9920),l(14905),l(3949),l(8872),l(27467)),g=l(59846),p=l(82700),y=l(37171),b=l(10368);const h=(e,t,l)=>{let{id:a,name:n}=e;-1==l?t.push({id:a,name:n,count:1}):t[l]={...t[l],count:t[l].count+1}},f=e=>e.id,E=e=>e.name,x=e=>{let{title:t,baseKey:l,param:n,paramKey:r,extraKey:o,testIdPrefix:s}=e;const i=(e=>{let{baseKey:t,extraKey:l,param:n,paramKey:r}=e;const{rules:o}=(0,y.q)({extraKey:l,omit:n,keepAll:!0}),s=(0,m.rW)(n,{key:t,extraKey:l,flavour:"arr"});return(0,a.useMemo)((()=>o.reduce(((e,t)=>{const l=t[r];if(!l)return e;const a=e.findIndex((e=>e.id==l.id));return"id"==r?h({id:l,name:l},e,a):["rooms","nodes"].includes(r)?l.forEach((t=>{let{id:l,name:n,notAvailable:r}=t;const o=r?"Not available (".concat(l,")"):n;h({id:l,name:o},e,a)})):["alertNames","alertContexts","alertRoles"].includes(r)?l.forEach((t=>{h({id:t,name:t},e,a)})):"hostLabels"==r&&Object.entries(l).forEach((t=>{let[l,n]=t;const r=(0,b.M)({key:l,value:n});h({id:r,name:r},e,a)})),e}),[])),[o,s])})({baseKey:l,extraKey:o,param:n,paramKey:r});return i.length?a.createElement(g.A,{title:t,testIdPrefix:s,param:n,baseKey:l,extraKey:o},a.createElement(p.Ay,{param:n,baseKey:l,extraKey:o,testIdPrefix:s,collection:i,getValue:f,getLabel:E,capitalized:!1})):null};var A=l(3914),v=l(78940);const w=[{title:"Rules IDs",param:"ids",paramKey:"id"},{title:"Rooms",param:"roomIds",paramKey:"rooms"},{title:"Nodes",param:"nodeIds",paramKey:"nodes"},{title:"Host labels",param:"hostLabels",paramKey:"hostLabels"},{title:"Alert names",param:"alertNames",paramKey:"alertNames"},{title:"Alert contexts",param:"alertContexts",paramKey:"alertContexts"},{title:"Alert roles",param:"alertRoles",paramKey:"alertRoles"}],k={filters:{iconName:"filterList",color:{active:"success",notActive:"textLite"},width:"19px",Content:(0,a.memo)((e=>{const t=(0,A.vt)();return a.createElement(u.Flex,(0,d.A)({column:!0,height:"calc(100vh - 266px)",overflow:{vertical:"auto"},padding:[0,0,30]},e),w.map((e=>{let{title:l,param:n,paramKey:r}=e;return a.createElement(x,{key:l,baseKey:t,extraKey:v.qt,title:l,param:n,paramKey:r})})))})),dataTestId:"filterBar",label:"Filters"}},K=["filters"],C=e=>e.some((e=>{let{roomIds:t=[],nodeIds:l=[],hostLabels:a={},alertNames:n=[],alertContexts:r=[],alertRoles:o=[]}=e;return t.length||l.length||Object.keys(a).length||n.length||r.length||o.length})),S=e=>{let{rules:t}=e;const[l,n]=(0,o.A)((()=>C(t))),{Content:r}=k.filters;return(0,a.useEffect)((()=>{n(C(t))}),[t]),a.createElement(s.Ay,{collapsedComponent:a.createElement(i.A,{onClickTab:n,availableTabs:k,tabsToShow:K}),isOpen:l,header:a.createElement(c.A,{isOpen:l,onToggle:n,title:"Filters",icon:"filterList"})},a.createElement(r,{padding:[0,3,30]}))};var T=l(39225),I=l(4659),L=l(65570),F=(l(9391),l(41393),l(81454),l(21290)),R=l(36021),D=l(71835),N=l(29217),M=l(40267);const P=e=>{let{value:t,...l}=e;return a.createElement(N.A,{content:t},a.createElement(u.Pill,(0,d.A)({flavour:"neutral"},l),t))},_=()=>a.createElement(u.Text,null,"*"),j=e=>{let{getValue:t}=e;const l=t();return null!==l&&void 0!==l&&l.length?a.createElement(u.Flex,{flexWrap:!0,gap:1},l.map((e=>a.createElement(u.Flex,{key:e,padding:[.5,0]},a.createElement(P,{value:e}))))):a.createElement(_,null)},O=e=>{let{getValue:t}=e;const{localeDateString:l}=(0,F.$j)();if(!t())return a.createElement(u.Text,null,"-");const n=l(new Date(t()),{month:"2-digit",day:"2-digit",year:"numeric",hour:"numeric",minute:"numeric",long:!1,dateStyle:void 0});return a.createElement(u.Text,{whiteSpace:"nowrap"},n)},V=[{id:"disabled",name:"Disable rule",accessorKey:"disabled",header:"",cell:e=>{let{row:t,getValue:l}=e;const n=t.original,[r,s]=(0,a.useState)(!l()),[i,c]=(0,o.A)(),[,d]=(0,D.A)(),m=(0,R.FU)(),g=(0,R.Lz)();return a.createElement(u.Toggle,{colored:!0,checked:r,disabled:i,onChange:e=>{c();const t=e.target.checked;s(t),m({...n,disabled:!t}).then((()=>{g()})).catch((e=>{s(!t),d(e)})).finally(c)}})},size:80},{id:"name",name:"Name",accessorKey:"name",header:"Rule name",cell:e=>{let{row:t,getValue:l}=e;const{accountId:n}=t.original;return a.createElement(u.Flex,{gap:2,alignItems:"center"},a.createElement(u.Text,{wordBreak:"break-word"},l()),n&&a.createElement(N.A,{align:"bottom",content:"This rule affects only your account"},a.createElement(u.Box,null,a.createElement(u.Icon,{color:"textLite",height:"16px",name:"userPress",width:"16px"}))))}},{id:"rooms",name:"Rooms",accessorKey:"rooms",header:"Rooms",cell:e=>{let{getValue:t}=e;const l=t();return null!==l&&void 0!==l&&l.length?a.createElement(u.Text,null,l.map((e=>{let{name:t}=e;return t})).join(", ")):a.createElement(u.Text,null,"All rooms")}},{id:"nodes",name:"Nodes",accessorKey:"nodes",header:"Nodes",cell:e=>{let{getValue:t}=e;const l=t();return null!==l&&void 0!==l&&l.length?a.createElement(u.Flex,{flexWrap:!0,gap:1},l.map((e=>{let{id:t,name:l,notAvailable:n}=e;const r=n?a.createElement(u.Flex,{alignItems:"center",gap:1},a.createElement(u.Icon,{name:"warning_triangle",size:"small",color:"neutralPillColor"}),a.createElement(u.Text,null,"Node no longer available")):l;return a.createElement(P,{key:t,value:r})}))):a.createElement(_,null)}},{id:"hostLabels",name:"Host labels",accessorKey:"hostLabels",header:"Host labels",cell:e=>{let{getValue:t}=e;const l=t(),n=Object.entries(l||{});return n.length?a.createElement(u.Flex,{flexWrap:!0,gap:1},n.map((e=>{let[t,l]=e;const n=(0,b.M)({key:t,value:l});return a.createElement(P,{key:n,value:n})}))):a.createElement(_,null)}},{id:"alertNames",name:"Alert names",accessorKey:"alertNames",header:"Alert name",cell:j},{id:"alertContexts",name:"Alert contexts",accessorKey:"alertContexts",header:"Alert context",cell:j},{id:"alertInstances",name:"Alert instances",accessorKey:"alertInstances",header:"Alert instances",cell:j},{id:"severities",name:"Alert status",accessorKey:"severities",header:"Alert status",cell:e=>{let{getValue:t}=e;const l=t();return null!==l&&void 0!==l&&l.length?a.createElement(u.Flex,{flexWrap:!0,gap:1},l.map((e=>a.createElement(u.Flex,{key:e,padding:[.5,0]},a.createElement(M.A,{flavour:e.toLowerCase()},e))))):a.createElement(_,null)}},{id:"alertRoles",name:"Alert roles",accessorKey:"alertRoles",header:"Alert role",cell:j},{id:"startDate",name:"Start date",accessorKey:"startsAt",header:"Start date",cell:O},{id:"endDate",name:"End date",accessorKey:"lastsUntil",header:"End date",cell:O}];l(93514);var $=l(38819),U=l(29848),z=l(46741);const B={month:"2-digit",day:"2-digit",year:"numeric",hour:"numeric",minute:"numeric",long:!1,dateStyle:void 0},H=()=>{const[e,t]=(0,a.useState)(""),{silencingRulePrefill:l}=(0,$.PP)(),n=l?{type:"create"}:{},[r,o]=(0,a.useState)(n),[,s]=(0,D.A)(),{localeDateString:i}=(0,F.$j)(),c=(0,R._S)(),d=(0,R.Lz)(),m=(0,U.ly)(),g=()=>o({type:"create"}),p=e=>o({type:"edit",rule:e}),y=e=>{let{id:t}=e;c([t]).then((()=>{d(),m()})).catch(s)},b=(0,z.JT)("space:DeletePersonalSilencingRule"),h=(0,z.JT)("space:DeleteSystemSilencingRule"),f=(0,a.useMemo)((()=>({addEntry:{dataGa:"",flavour:"hollow",handleAction:g,iconColor:"success",label:"Add rule",small:!0,width:"auto"}})),[]),E=e=>{let{name:t}=e;return a.createElement(a.Fragment,null,"Delete ",t," rule")};return{search:e,setSearch:t,bulkActions:f,rowActions:(0,a.useMemo)((()=>({edit:{handleAction:p,disabledTooltipText:"Edit is disabled",isDisabled:e=>{let{readOnly:t}=e;return!!t},dataGa:"alert-silencing::click-edit-row::rules-table"},delete:{handleAction:y,confirmationTitle:E,confirmationMessage:e=>a.createElement(u.Text,{wordBreak:"break-word"},"You are about to delete ",a.createElement("strong",null,e.name)," silencing rule.",a.createElement("br",null),"Are you sure you want to continue?"),dataGa:"alert-silencing::click-delete-row::rules-table",disabledTooltipText:"Delete is disabled",confirmLabel:"Yes, delete",declineLabel:"Cancel",isDisabled:e=>{let{accountId:t}=e;return t?!b:!h}}})),[]),onFilter:(0,a.useCallback)(((e,t,l)=>{const a=e.original,n=l.toLowerCase(),r=(a.rooms||[]).map((e=>{let{name:t}=e;return t})),o=(a.nodes||[]).map((e=>{let{name:t}=e;return t})),s=a.alertNames||[],c=a.alertContexts||[],d=a.severities||[],u=a.alertRoles||[],m=a.hostLabels||{},g=a.startsAt?i(new Date(a.startsAt),B):"",p=a.lastsUntil?i(new Date(a.lastsUntil),B):"";return((e,t)=>e.some((e=>e.toLowerCase().includes(t))))([a.name.toLowerCase(),...r,...o,...s,...c,...d,...u,...Object.entries(m).flat(),g,p],n)}),[]),modalDetails:r,closeModal:()=>o({})}},W=(0,T.A)((()=>l.e(9400).then(l.bind(l,79400))),"CreateOrUpdateRuleModal"),q=(0,a.memo)(u.Table,((e,t)=>(0,L.Ay)(e,t))),J={right:["actions"]},G=()=>a.createElement(u.Flex,null,a.createElement(u.Text,null,"Create or Maintain Alert Notification Silencing Rules on this Space. These rules can be applicable to all users or just you, depending on their definition."," ",a.createElement(I.A,{"data-ga":"alert-silencing::click-link-docs::rules-table","data-testid":"silencing-rules-doc",href:"https://learn.netdata.cloud/docs/alerts-and-notifications/notifications/netdata-cloud-notifications/#silencing-alert-notifications",rel:"noopener noreferrer",target:"_blank"},"Read the Alert Notification Silencing Rules documentation to learn more."))),Y=e=>{let{data:t}=e;const{search:l,setSearch:n,bulkActions:r,rowActions:o,onFilter:s,modalDetails:i,closeModal:c}=H();return a.createElement(a.Fragment,null,a.createElement(u.Flex,{column:!0,gap:4,padding:[2,4],height:"calc(100vh - 241px)"},a.createElement(G,null),a.createElement(q,{key:JSON.stringify(t||{}),enableSorting:!0,enableColumnVisibility:!0,data:t,dataColumns:V,bulkActions:r,rowActions:o,globalFilter:l,globalFilterFn:s,onSearch:n,columnPinning:J,enableColumnPinning:!0})),"create"==i.type?a.createElement(a.Suspense,null,a.createElement(W,{onClose:c})):null,"edit"==i.type&&i.rule?a.createElement(a.Suspense,null,a.createElement(W,{rule:i.rule,onClose:c,isEdit:!0})):null)};var Q=l(9415),Z=l(89821),X=l(18061);const ee=e=>{let{errorMessage:t}=e;return a.createElement(u.Flex,{column:!0,gap:2,alignItems:"center",justifyContent:"center",flex:!0},a.createElement(u.TextBig,null,"Something went wrong"),t&&a.createElement(u.Text,null,"(",t,")"))};var te=l(79394),le=l(63314);const ae=()=>{(e=>{const t=(0,R.ys)({id:e,key:"initialLoad"}),l=(0,R.Qu)(),a=(0,R.UJ)(e);(0,X.A)((()=>({enabled:!!e&&!t,fetch:()=>(0,Q.cH)(e),onFail:e=>a({...Z.$,loading:!1,loaded:!0,error:e}),onSuccess:e=>a(((e,t)=>({...e,loading:!1,loaded:!0,initialLoad:!0,rules:t}))(Z.$,e))})),[e,l])})((0,A.vt)()),(0,te.p)();const{loaded:e,rules:t,error:l}=(0,y.q)({extraKey:v.qt});return e?l?a.createElement(le.DL,{tab:"Notifications::SilencingRules"},a.createElement(ee,{errorMessage:l.message})):a.createElement(le.Ay,{tab:"Notifications::SilencingRules"},a.createElement(n.A,{sidebar:a.createElement(S,{rules:t}),margin:[3,0]},a.createElement(Y,{data:t}))):a.createElement(r.A,{height:"calc(100% - 44px)",title:"Loading silencing rules..."})}},10368:(e,t,l)=>{l.d(t,{H:()=>n,M:()=>r});l(14905),l(98992),l(8872),l(62953);var a=l(78940);const n=e=>{var t;const{validationErrors:l,errorMessage:n}=(null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data)||{};return l&&Object.keys(l).length?Object.entries(l).reduce(((e,t)=>{let[,l]=t;const{Code:n}=l;return a.xc[n]&&e.push({errorMessage:a.xc[n]}),e}),[]):[{errorMessage:n}]},r=e=>{let{key:t,value:l}=e;return"".concat(t,": ").concat(l)}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5426.254557ad3e1f2d14ad29.chunk.js b/src/web/gui/v2/5426.254557ad3e1f2d14ad29.chunk.js deleted file mode 100644 index d06902c05..000000000 --- a/src/web/gui/v2/5426.254557ad3e1f2d14ad29.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="53f38cae-4eb5-4b70-b025-7a530152c695",e._sentryDebugIdIdentifier="sentry-dbid-53f38cae-4eb5-4b70-b025-7a530152c695")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5426],{45426:(e,t,n)=>{n.r(t),n.d(t,{default:()=>s});n(62953);var o=n(96540),a=n(83199),r=n(5396),l=n(4659),d=n(87659),c=n(51641);const s=()=>{const e=(0,c.e)(),[t,,n,s]=(0,d.A)();return(0,o.useEffect)((()=>{"Reachable"===e&&n()}),[e]),t?o.createElement(a.Layer,{full:"horizontal",backdropProps:{backdropBlur:"3px"},onClickOutside:s,onEsc:s,position:"top"},o.createElement(r.A,{testId:"agent-not-secure-banner",width:"100%",background:"warningBackground",position:"absolute",top:"0",tooltipProps:{align:"top"},zIndex:20},o.createElement(a.Flex,{justifyContent:"center",alignItems:"center",width:"100%",gap:2},o.createElement(a.Text,null,"IMPORTANT: This Netdata is openly accessible from the Internet!"," ",o.createElement(l.A,{"data-testid":"learn",href:"https://learn.netdata.cloud/docs/netdata-agent/securing-netdata-agents/",as:"a",cursor:"pointer",textDecoration:"underline",color:"text",hoverColor:"textFocus"},"Secure your Netdata now"),"!")),o.createElement(a.Box,{"data-testid":"agent-not-secure-banner-close-button",as:a.Icon,color:"text",cursor:"pointer",name:"x",position:"absolute",right:"8px",onClick:s}))):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5596.2036706750ff4028cff2.chunk.js b/src/web/gui/v2/5596.2036706750ff4028cff2.chunk.js deleted file mode 100644 index b8aefba99..000000000 --- a/src/web/gui/v2/5596.2036706750ff4028cff2.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="054b07e7-b492-4640-ad51-38c1362e436f",e._sentryDebugIdIdentifier="sentry-dbid-054b07e7-b492-4640-ad51-38c1362e436f")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5596],{92155:(e,t,n)=>{n.d(t,{A:()=>c});var a=n(58168),r=n(96540),o=n(50876);const l=e=>(0,r.forwardRef)(((t,n)=>{let{callback:l,feature:i,isStart:c,isSuccess:s,isFailure:d,eventReason:g,payload:u={},...m}=t;const{sendLog:h,isReady:p}=(0,o.A)(),f=(0,r.useCallback)((()=>{const e=m[l],t={feature:i,isStart:c,isSuccess:s,isFailure:d,eventReason:g,...u,...m["data-ga"]?{dataGa:m["data-ga"]}:{},...m.dataGa?{dataGa:m.dataGa}:{},...m["data-track"]?{dataTrack:m["data-track"]}:{},...m.label?{label:m.label}:{}};"function"==typeof e&&e(),h(t,!0)}),[l,h,p,u,m]),x=(0,r.useMemo)((()=>({...m,[l]:f})),[m,l,f]);return r.createElement(e,(0,a.A)({ref:n},x))}));var i=n(67276);const c=e=>(0,r.forwardRef)(((t,n)=>{let{payload:o={},...c}=t;const s=l(e);return r.createElement(s,(0,a.A)({},c,{ref:n,callback:"onClick",payload:{...o,action:i.o1.buttonClicked}}))}))},93155:(e,t,n)=>{n.d(t,{Df:()=>p,Dm:()=>m,EM:()=>h,Mh:()=>g,bO:()=>u});const a="mobileAppNotifications",r="trialWarning",o="alertConfiguration",l="editAlertConfiguration",i="userCustomSettings",c="oktaSSO",s=[r,o,a,c];function d(e){if(s.includes(e))return()=>!0;const t="true"===localStorage.getItem(e);return e=>e||t}const g=d(a)(),u=d(r)(),m=d(o)(),h=(d(l)(),d(i)()),p=d(c)()},21828:(e,t,n)=>{n.d(t,{A:()=>o});var a=n(96540),r=n(83199);const o=e=>{let{theme:t}=e;const n="default"==t?"grey185":"grey45";return t="dark"==t?r.DarkTheme:r.DefaultTheme,a.createElement(r.Flex,{height:"1px",width:"100%",background:(0,r.getColor)(["neutral",n])({theme:t})})}},84541:(e,t,n)=>{n.d(t,{A:()=>I});var a=n(58168),r=n(96540),o=n(45463),l=n(83199);const i=(0,n(8711).default)(l.Flex).attrs((e=>({flex:{grow:"1",shrink:"0"},...e}))).withConfig({displayName:"panel__Panel",componentId:"sc-4zlw7c-0"})(["",";",";"],(e=>{let{order:t}=e;return t&&"order: ".concat(t,";")}),(e=>{let{bgGradient:t}=e;return t&&"background: linear-gradient(34.14deg, #536775 -26.52%, #2F3A42 53.66%);\n"}));var c=n(17208);const s=()=>r.createElement(l.Flex,{alignItems:"center",column:!0,padding:[0,0,18,0]},r.createElement(c.oi,null));n(41393),n(81454);const d=[{icon:"rocket",title:"Rapid Deployment, Instant Insights",text:"One-command installation, automatic metric discovery, and intuitive out-of-the-box dashboards for every single metric."},{icon:"qualityOfServiceSolid",title:"Advanced Monitoring, Made Accessible",text:"Experience real-time monitoring with 1-second granularity and anomaly detection across 800+ integrations."},{icon:"firewallSolid",title:"On-Prem Data Storage, Transparent Pricing",text:"Unlimited metrics, Infinite scale, Zero hidden costs. Decentralized architecture ensures maximum data security."}];n(3064),n(98992),n(72577),n(62953);var g=n(18061),u=n(26655);const m=()=>u.A.get("https://us-east1-netdata-analytics-bi.cloudfunctions.net/netdata_public_metrics_website"),h=e=>{let{downScale:t,...n}=e;const l=(0,o.A)("(min-width: 992px)");return(i=l?t[0]:t[1],e=>{let{children:t,...n}=e;return r.createElement(i,(0,a.A)({color:"bright"},n),t)})(n);var i};var p=n(12897),f=n.n(p),x=n(55042),b=n.n(x),w=new(f())({id:"cloudStatistics",use:"cloudStatistics-usage",viewBox:"0 0 194 146",content:''});b().add(w);const y=w,k=e=>r.createElement(l.Flex,(0,a.A)({as:"svg",height:y.height,width:y.width,viewBox:y.viewBox},e),r.createElement("use",{xlinkHref:"#".concat(y.id)})),E=()=>{const[e]=(0,g.A)((()=>({fetch:m})),[]),{nodesOnline:t,githubStars:n,dockerHubPulls:a}=(0,r.useMemo)((()=>{var t,n;return Array.isArray(e)?{nodesOnline:"1,265,463",githubStars:null===(t=e.find((e=>{let{key:t}=e;return"GitHub Stars"===t})))||void 0===t?void 0:t.value,dockerHubPulls:null===(n=e.find((e=>{let{key:t}=e;return"DockerHub Pulls"===t})))||void 0===n?void 0:n.value}:{}}),[e]);return r.createElement(l.Flex,{column:!0,gap:6},r.createElement(k,{height:"160px",padding:[0,0,4,0]}),r.createElement(l.Flex,{column:!0,gap:3},r.createElement(h,{downScale:[l.TextBigger,l.TextBigger],color:"bright",textAlign:"center"},r.createElement(h,{downScale:[l.TextBigger,l.TextBigger],color:t?"primaryHighlight":"bright",textAlign:"center",strong:!0},t||"..."),r.createElement(l.Box,{as:"span",margin:[0,0,0,3]},"Nodes Online")),r.createElement(h,{downScale:[l.TextBigger,l.TextBigger],color:"bright",textAlign:"center"},r.createElement(h,{downScale:[l.TextBigger,l.TextBigger],color:n?"primaryHighlight":"bright",textAlign:"center",strong:!0},n||"..."),r.createElement(l.Box,{as:"span",margin:[0,0,0,3]},"GitHub Stars")),r.createElement(h,{downScale:[l.TextBigger,l.TextBigger],color:"bright",textAlign:"center"},r.createElement(h,{downScale:[l.TextBigger,l.TextBigger],color:a?"primaryHighlight":"bright",textAlign:"center",strong:!0},a||"..."),r.createElement(l.Box,{as:"span",margin:[0,0,0,3]},"DockerHub Pulls"))))},v=e=>{let{icon:t,title:n}=e;const a=(0,o.A)("(min-width: 475px)");return r.createElement(l.Flex,{gap:4,alignItems:"center"},a&&r.createElement(l.Flex,{background:"transparent",justifyContent:"center",alignItems:"center",height:"56px",width:"56px",round:64,border:{side:"all",color:"secondaryColor"}},r.createElement(l.Icon,{name:t,height:"24px",width:"24px",color:"secondaryColor"})),r.createElement(l.Flex,{column:!0,justifyContent:"start",alignItems:"start",gap:2},r.createElement(l.TextBig,{color:"bright",strong:!0},n)))};var S=n(21828);const C=()=>r.createElement(l.Flex,{column:!0,padding:[16,4,12],width:{max:"500px"},margin:[0,"auto"],gap:14},r.createElement(E,null),r.createElement(l.Flex,{column:!0,gap:8,padding:[0,10]},d.map(((e,t)=>r.createElement(v,(0,a.A)({key:t},e))))),r.createElement(l.Flex,{column:!0,gap:6,alignItems:"center"},r.createElement(S.A,null),r.createElement(l.Flex,{column:!0,gap:4,alignItems:"center"},r.createElement(c.go,{theme:"dark"}),r.createElement(l.TextSmall,{textAlign:"center",color:"bright"},"Netdata is a member of the Cloud Native Computing Foundation (CNCF), and is one of the most starred projects in the CNCF landscape.")))),I=e=>{let{children:t,...n}=e;const c=(0,o.A)("(min-width: 998px)");return r.createElement(l.Flex,(0,a.A)({height:{min:"100vh"},flexWrap:!0},n),!window.envSettings.onprem&&r.createElement(i,{background:(0,l.getColor)(["neutral","grey25"])({theme:l.DarkTheme}),order:c?0:1,width:c?{base:"34%"}:{max:"100%"}},r.createElement(C,null)),r.createElement(i,{background:"mainBackground",order:c?1:0,width:c?{base:"66%"}:{max:"100%"}},r.createElement(l.Flex,{background:"transparent",column:!0,gap:8,padding:[12,4],width:{max:"500px"},margin:[0,"auto"]},r.createElement(s,null),t)))}},75596:(e,t,n)=>{n.r(t),n.d(t,{SignIn:()=>P,default:()=>U});n(25440),n(62953),n(3296),n(27208),n(48408);var a=n(96540),r=n(47767),o=n(86663),l=n(83199),i=n(55337),c=n(11604),s=n(17182),d=n(17208),g=n(58168),u=n(8711);const m=u.default.a.withConfig({displayName:"linkButton__LinkButton",componentId:"sc-9kv26a-0"})(["color:",";text-decoration:none;background-color:transparent;display:flex;flex-flow:row nowrap;justify-content:flex-start;align-items:center;height:",";background:",";border:1px solid ",";border-radius:2px;max-width:320px;width:100%;",";&:hover{text-decoration:none;color:unset;}"],(0,l.getColor)("background"),(0,l.getSizeBy)(5.5),(0,l.getColor)("mainBackground"),(0,l.getColor)("mainBackground"),(e=>{let{disabled:t}=e;return"\n opacity: ".concat(t?.4:1,";\n pointer-events: ").concat(t?"none":"auto",";\n ")})),h=e=>t=>{let{method:n,...r}=t;return n==localStorage.getItem("lastSignInMethod")?a.createElement(l.Box,{width:"100%"},a.createElement(l.TextMicro,null,"Last Sign-in method"),a.createElement(e,(0,g.A)({isLastSignInMethod:!0},r))):a.createElement(e,r)},p=e=>{let{backgroundColor:t,color:n}=e;return(0,u.default)(m).withConfig({displayName:"linkButton",componentId:"sc-9kv26a-1"})(["box-shadow:0px 0px 1px rgba(0,0,0,0.12);border-radius:2px;background:",";border-style:solid;border-color:",";border-width:",";cursor:pointer;span{flex:1;display:flex;align-items:center;justify-content:center;padding:0 ",";color:",";}"],t,(e=>{let{isLastSignInMethod:n}=e;return n?(0,l.getColor)("linkHover"):t}),(e=>{let{isLastSignInMethod:t}=e;return t?"2px":"1px"}),(0,l.getSizeBy)(1),n?(0,l.getColor)(n):(0,l.getColor)("bright"))},f=p({backgroundColor:"#445260"}),x=p({backgroundColor:"#4285f4"}),b=p({color:"primary"});var w=n(74664),y=n(50876);const k=h(w.j5),E=e=>{let{flavour:t="default",onSubmit:n,disabled:r,initialValue:o,tagging:i}=e;const[c,s]=(0,l.useInputValue)({value:o||""}),[d,u]=(0,a.useState)(),{sendButtonClickedLog:m,isReady:h}=(0,y.A)(),p="sso"==t,f=p?"sso":"email",x=p?"Continue":"Sign in by email",b=(0,a.useCallback)((e=>{e.preventDefault(),m({feature:"SignIn",dataGa:"signinup::click-".concat(f,"::").concat(i)}),n(c).catch(u),localStorage.setItem("lastSignInMethod",f)}),[n,c,h,f]);return a.createElement(l.Flex,{as:"form",column:!0,gap:4,width:"100%","data-testid":"emailField"},a.createElement(k,(0,g.A)({value:c,onChange:s,"data-testid":"emailField-input",method:"email",size:"large",error:d},p?{placeholder:"Enter your email"}:{})),a.createElement(w.OV,{type:"submit",disabled:r||!c,width:"100%",label:x,onClick:b,"data-ga":"signinup::click-email::".concat(i),"data-testid":"emailField-submitButton"}))};var v=n(84541),S=n(21828),C=n(58187),I=n(87659),A=n(92155),B=n(67276);const _=()=>{const e=(0,a.useMemo)((()=>{const{search:e}=window.location,{telemetry_session_id:t}=o.parse(e);return t}));(0,a.useEffect)((()=>{e&&sessionStorage.setItem(B.yq.session,e)}),[e])};var M=n(63314),F=n(3914),T=n(37618),H=n(93155);const R=h(x),N=(0,A.A)(R),O=h(f),D=(0,A.A)(O),G=h(b),j=(0,A.A)(G),L=(0,A.A)(b),V=e=>{let{to:t}=e;return t=(e=>{try{const t=document.createElement("a");return t.href=e,/https?/.test(t.protocol)?new URL(t.protocol+"//"+t.host+t.pathname+t.search+t.hash).toString():null}catch(t){return null}})(t),t?a.createElement(l.Box,{position:"fixed"},a.createElement(l.Button,{as:"a",href:t,flavour:"borderless",label:"Go back to ".concat(t.replace(/#.*/,"")),icon:"arrow_left",rel:"noopener noreferrer"})):null},P=()=>{const{search:e}=(0,r.zy)(),t=window.location.hash,n=(0,c.Js)(),{redirect_uri:i}=o.parse(e),[g,,u,m]=(0,I.A)(),h=(0,F.ap)("id"),p=(0,T.ES)(h),f=new URL(window.location.href).searchParams.get("join_callback");_();const x=(0,a.useCallback)((a=>{const r=encodeURIComponent((0,s.V)("/sign-in".concat(e),t)),o=encodeURIComponent((0,s.V)("/sign-up/verify".concat(e),t));return n({isSSO:g,email:a,redirectURI:r,registerURI:o})}),[n,g]);(0,a.useEffect)((()=>{if(!/app\.netdata\.cloud/.test(location.hostname))return;const e=document.createElement("script");return e.src="https://zsvdrp94yfxr.statuspage.io/embed/script.js",e.async=!0,document.body.appendChild(e),()=>{document.body.removeChild(e)}}),[]);const b=e=>{localStorage.setItem("lastSignInMethod",e)};return a.createElement(M.Ay,{feature:"SignIn"},!window.envSettings.onprem&&!!i&&a.createElement(V,{to:i}),a.createElement(v.A,{"data-testid":"signIn"},a.createElement(l.Flex,{column:!0,gap:4},g?a.createElement(a.Fragment,null,a.createElement(l.H1,{textAlign:"center"},"Single Sign-On"),a.createElement(l.TextBig,{textAlign:"center"},"Your organisation uses Single Sign-On (SSO).",a.createElement("br",null),"Please sign in using your SSO credentials.")):a.createElement(a.Fragment,null,a.createElement(l.H1,{textAlign:"center"},"Welcome!"),f?a.createElement(l.TextBig,{textAlign:"center"},"To join the space you were invited, please sign-up for a Netdata Cloud Account. If you already have one, just sign-in."):a.createElement(l.TextBig,{textAlign:"center"},"Sign in and let's get you started"))),a.createElement(w.MG,null,g?null:a.createElement(a.Fragment,null,a.createElement(l.Flex,{column:!0,gap:4},a.createElement(N,{href:(0,s.R)("google"),onClick:()=>b("google"),disabled:!1,"data-ga":"signinup::click-google::sni-view","data-testid":"signIn-googleButton",method:"google",feature:"SignIn",payload:{label:"Continue with Google"}},a.createElement(w.ch,null,a.createElement(d.J8,null)),a.createElement(l.Text,{textAlign:"center"},"Continue with Google")),a.createElement(D,{href:(0,s.R)("github"),onClick:()=>b("github"),disabled:!1,"data-ga":"signinup::click-github::sni-view","data-testid":"signIn-githubButton",method:"github",feature:"SignIn",payload:{label:"Continue with GitHub"}},a.createElement(w.ch,null,a.createElement(d.fx,null)),a.createElement(l.Text,null,"Continue with GitHub")),H.Df&&!p?a.createElement(j,{onClick:u,"data-testid":"signIn-ssoButton",feature:"SignIn",payload:{label:"Continue with SSO"},method:"okta"},a.createElement(l.Text,null,"Sign-in with an Enterprise Single Sign-On (SSO)")):null),a.createElement(l.Flex,{gap:2,alignItems:"center"},a.createElement(S.A,{theme:"default"}),a.createElement(l.H4,null,"or"),a.createElement(S.A,{theme:"default"}))),a.createElement(E,{flavour:g?"sso":"default",onSubmit:x,tagging:"sni-view"})),!g&&!window.envSettings.onprem&&a.createElement(l.Flex,{column:!0,gap:4,alignSelf:"center",width:{max:"480px"}},a.createElement(l.TextBig,{textAlign:"center"},"No Netdata account? Sign-in and we will create one for you!"),a.createElement(l.Text,{textAlign:"center"},"By creating an account, you agree with Netdata's"," ",a.createElement(C.X,{tagging:"signin-view"})," and our"," ",a.createElement(C.H,{tagging:"signin-view"}),".")),g?a.createElement(l.Flex,{alignSelf:"center"},a.createElement(L,{onClick:m},a.createElement(l.Text,null,"Sign in without Single Sign-On"))):null))},U=(0,i.g)(P,"light")},74664:(e,t,n)=>{n.d(t,{MG:()=>g,OV:()=>d,ah:()=>i,ch:()=>l,j5:()=>c,ph:()=>s});var a=n(8711),r=n(83199),o=n(96763);const l=a.default.div.withConfig({displayName:"styled__SvgContainer",componentId:"sc-16ytcl4-0"})(["width:42px;height:42px;flex-shrink:0;display:flex;justify-content:center;align-items:center;border-radius:2px;background:white;"]),i=a.default.a.withConfig({displayName:"styled__StyledLink",componentId:"sc-16ytcl4-1"})(["display:inline-flex;align-items:center;text-decoration:none;color:",";cursor:pointer;&:hover{text-decoration:underline;color:"," !important;}&:visited{color:",";}> svg{fill:",";padding-right:",";}"],(0,r.getColor)("success"),(0,r.getColor)("success"),(0,r.getColor)("success"),(0,r.getColor)("main"),(0,r.getSizeBy)(1)),c=(0,a.default)(o.A).withConfig({displayName:"styled__EmailInput",componentId:"sc-16ytcl4-2"})(["",""],(e=>{let{isLastSignInMethod:t}=e;return t?"border: 2px solid green;":"border: 1px solid #51966C;"})),s=(0,a.default)(r.Checkbox).withConfig({displayName:"styled__StyledCheckbox",componentId:"sc-16ytcl4-3"})(["margin:0 "," 0 0;& div:last-child{border-color:",";}"],(0,r.getSizeBy)(2),(e=>{let{error:t}=e;return t&&(0,r.getColor)("error")})),d=(0,a.default)(r.Button).withConfig({displayName:"styled__StyledButton",componentId:"sc-16ytcl4-4"})(["&&{height:44px;}"]),g=(0,a.default)(r.Flex).attrs((e=>{let{gap:t=8}=e;return{column:!0,gap:t,alignSelf:"center",padding:[0,0,8,0],border:{side:"bottom",color:"disabled"},width:{max:"320px"}}})).withConfig({displayName:"styled__FormContainer",componentId:"sc-16ytcl4-5"})(["width:100%;"])},58187:(e,t,n)=>{n.d(t,{H:()=>i,X:()=>c});var a=n(96540),r=n(74664);const o={link:"https://www.netdata.cloud/terms",title:"Terms And Conditions",dataGa:"signinup::click-terms::"},l=e=>{let{link:t,title:n,dataGa:o}=e;return e=>{let{tagging:l}=e;return a.createElement(r.ah,{href:t,target:"_blank",rel:"noopener noreferrer","data-ga":"".concat(o).concat(l)},n)}},i=l({link:"https://www.netdata.cloud/privacy",title:"Privacy Policy",dataGa:"signinup::click-privacy::"}),c=l(o)},17182:(e,t,n)=>{n.d(t,{R:()=>l,V:()=>o});var a=n(38819);const r=["expires_at","error_code","error_msg_key","error_msg"],o=(e,t)=>{const n=(0,a.yq)(r),o=t.includes("join-callback")?decodeURIComponent(n):n;return"".concat(window.location.origin).concat(e,"#").concat(o)},l=(e,t)=>{const{search:n,hash:a}=window.location,r=encodeURIComponent(o("/sign-in".concat(n).concat(n.length?"&":"?","oauth=").concat(e,"&"),a)),l=encodeURIComponent(o("/sign-up/verify".concat(n).concat(n.length?"&":"?","oauth=").concat(e,"&"),a));return"/api/v2/auth/account/".concat(e,"?redirect_uri=").concat(r,"®ister_uri=").concat(l).concat(t?"&is_unverified_registration=true":"")}},96763:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(58168),r=n(96540),o=n(83199);const l=e=>{let{onChange:t,value:n,onKeyDown:l,label:i,...c}=e;return r.createElement(o.TextInput,(0,a.A)({label:i,name:"userEmail",placeholder:"Enter an email address",value:n,onChange:t,onKeyDown:l},c))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5598.07ff43a6b96bd41e8637.chunk.js b/src/web/gui/v2/5598.07ff43a6b96bd41e8637.chunk.js deleted file mode 100644 index a350b6a43..000000000 --- a/src/web/gui/v2/5598.07ff43a6b96bd41e8637.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9dfd529e-5f2f-449c-a441-2bc7c0d71360",e._sentryDebugIdIdentifier="sentry-dbid-9dfd529e-5f2f-449c-a441-2bc7c0d71360")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5598],{99851:(e,n,t)=>{t.d(n,{A:()=>_e});var o=t(58168),i=(t(62953),t(96540)),a=t(45467),s=t(71600),r=t(51730),l=t(37519),c=t(83199),d=t(71847),u=t(87659),m=t(86723),p=(t(41393),t(81454),t(8711));const h=(0,p.default)(c.Flex).attrs((e=>({position:"relative",width:{min:200},height:{min:45},column:!0,background:"dropdown",color:"text",zIndex:60,round:!0,alignItems:"end",...e}))).withConfig({displayName:"styled__PickerBox",componentId:"sc-gwjt9o-0"})([""]),g=p.default.span.withConfig({displayName:"styled__StyledTimePeriod",componentId:"sc-gwjt9o-1"})(["margin-bottom:",";cursor:pointer;width:187px;height:",";&:last-of-type{margin-bottom:0;}& > span:hover{color:",";}"],(0,c.getSizeBy)(1.5),(0,c.getSizeBy)(2),(0,c.getColor)("textLite")),f=(0,p.default)(c.Flex).attrs((e=>{let{isSelected:n}=e;return{color:n?"primary":"text",margin:[2,6,0]}})).withConfig({displayName:"styled__StyledCustomTimePeriod",componentId:"sc-gwjt9o-2"})(["cursor:pointer;&:first-of-type{margin-top:0;}&:hover{color:",";}"],(0,c.getColor)("textLite")),y=(0,p.default)(c.Flex).attrs({alignItems:"center",border:{side:"all",color:"border"},color:"text",flexWrap:!1,height:8,justifyContent:"center",padding:[2,0],round:1,width:22}).withConfig({displayName:"styled__TimePeriodDropdownButton",componentId:"sc-gwjt9o-3"})([""]),b=(0,p.default)(c.Drop).attrs({background:"mainBackground",column:!0,overflow:{vertical:"auto"},margin:[.5,0,0],padding:[2,0],round:1}).withConfig({displayName:"styled__TimePeriodDrop",componentId:"sc-gwjt9o-4"})([""]),_=(0,p.default)(c.Icon).withConfig({displayName:"styled__DropdownIcon",componentId:"sc-gwjt9o-5"})(["fill:",";width:12px;height:12px;"],(0,c.getColor)("text")),w=p.default.input.withConfig({displayName:"styled__CustomInput",componentId:"sc-gwjt9o-6"})(["border:1px solid ",";background:",";box-sizing:border-box;border-radius:4px;color:",";height:32px;margin-left:10px;margin-right:10px;outline:none;padding:4px;width:32px;&:focus{border:1px solid ",";}"],(0,c.getColor)("border"),(0,c.getColor)("mainBackground"),(0,c.getColor)("text"),(0,c.getColor)("primary")),v=(0,p.default)(c.Drop).attrs({background:"dropdown",round:2,margin:[.5,0,0],border:{side:"all",color:"borderSecondary"},animation:!0}).withConfig({displayName:"styled__StyledDrop",componentId:"sc-gwjt9o-7"})([""]),T=(0,p.default)(c.TextInput).withConfig({displayName:"styled__StyledDateInput",componentId:"sc-gwjt9o-8"})(["width:100%;"]),k=p.default.div.withConfig({displayName:"styled__StyledCalendar",componentId:"sc-gwjt9o-9"})(["background:",";border:0;&.react-datepicker{background:",";border:0;}.react-datepicker{&__navigation{top:8px;&-icon::before{border-color:",";}}&__month-container{height:260px;}&__header{background:",";border:0;.react-datepicker__current-month{color:",";font-weight:normal;}.react-datepicker__day-name{color:",";}}&__day{color:",";&:hover{background:",";}&--disabled{color:",";&:hover{background:inherit;}}&--keyboard-selected,&--keyboard-selected:hover{color:",";background:inherit;border-radius:inherit;}&--selected,&--selected:hover{color:",";background:",";border-radius:8px;}&--in-selecting-range,&--in-range{color:",";background:",";border-radius:0;}&--selecting-range-start,&--range-start{color:",";background:",";border-top-left-radius:8px;border-bottom-left-radius:8px;&:hover{color:",";background:",";border-radius:0;border-top-left-radius:8px;border-bottom-left-radius:8px;}}&--selecting-range-end,&--range-end{color:",";background:",";border-top-right-radius:8px;border-bottom-right-radius:8px;&:hover{color:",";background:",";border-top-right-radius:8px;border-bottom-right-radius:8px;}}}}"],(0,c.getColor)("dropdown"),(0,c.getColor)("dropdown"),(0,c.getColor)("text"),(0,c.getColor)("dropdown"),(0,c.getColor)("main"),(0,c.getColor)("textLite"),(0,c.getColor)("main"),(0,c.getColor)("elementBackground"),(0,c.getColor)("textLite"),(0,c.getColor)("main"),(0,c.getColor)("bright"),(0,c.getColor)("primary"),(0,c.getColor)("primary"),(0,c.getColor)("elementBackground"),(0,c.getColor)("bright"),(0,c.getColor)("primary"),(0,c.getColor)("bright"),(0,c.getRgbColor)(["green","netdata"],.8),(0,c.getColor)("bright"),(0,c.getColor)("primary"),(0,c.getColor)("bright"),(0,c.getRgbColor)(["green","netdata"],.8)),x=e=>{let{value:n,period:t,resolution:o,isSelected:a,setTimeRange:s,tagging:r}=e;const l=(0,i.useCallback)((()=>s(n,o)),[n,o]);return i.createElement(g,{key:n,onClick:l,"data-ga":"date-picker::click-quick-selector::".concat(r,"::").concat(-n),"data-testid":"timePeriod-value"},i.createElement(c.Text,{color:a?"primary":"text"},t))},P=(0,i.memo)(x);var C=t(79897);const q=e=>{let{handleTimePeriodChange:n,selectedDate:t,tagging:o}=e;return i.createElement(c.Flex,{column:!0,justifyContent:"start",alignItems:"start",height:{max:"260px"},overflow:{vertical:"auto"},"data-testid":"timePeriods"},C.AE.map((e=>{let{period:a,value:s,resolution:r}=e;return i.createElement(P,{key:s,value:s,period:a,resolution:r,setTimeRange:n,isSelected:t===s,tagging:o})})))};var D=t(82526),A=t(16074),S=t(26010);const M=e=>{let{customTimePeriodRef:n,handleTimePeriodChange:t,value:o,resolution:a,tagging:s}=e;const r=()=>o<=0?(0,C.Mb)(-o,a):0,[l,d]=(0,i.useState)(r),[m,p,,h]=(0,u.A)(),g=(0,i.useRef)();(0,i.useEffect)((()=>d(r())),[o]);const v=(0,i.useCallback)((e=>d(e.target.value)),[]),T=(0,i.useCallback)((e=>{const n=Number(e.currentTarget.value),i=!Number.isNaN(n)&&Number.isInteger(n)&&n>0,s=(0,D.W)(new Date(0),{[a]:n});return i&&(0,A.f)(s)&&(0,S._)(s)<=C.So?t((0,C.zp)(n,a),a):d(o<=0?(0,C.Mb)(-o,a):0)}),[a,l]),k=(0,i.useCallback)((e=>()=>{t((0,C.zp)(l,e),e),h()}),[l]);return i.createElement(c.Flex,{justifyContent:"start",alignItems:"center",height:8,"data-ga":"date-picker::click-last-integer::".concat(s),"data-testid":"customTimePeriod"},i.createElement(c.Text,{"data-testid":"customTimePeriod-label"},"Last"),i.createElement(w,{value:l,onChange:v,onBlur:T,"data-ga":"date-picker::click-last-integer::".concat(s,"::").concat(l),"data-testid":"timePeriod-timeInput"}),i.createElement(y,{"data-testid":"timePeriodDropdown-button",onClick:p,ref:g},i.createElement(c.Text,{"data-testid":"timePeriodDropdown-buttonLabel",padding:[0,4,0,0]},a),i.createElement(_,{"data-testid":"timePeriodDropdown-buttonIcon",name:"triangle_down"})),g.current&&m&&i.createElement(b,{align:{top:"bottom",left:"left"},animation:!0,close:h,"data-testid":"timePeriodDropdown",onClickOutside:h,onEsc:h,ref:n,target:g.current},C.gt.map((e=>i.createElement(f,{key:e,onClick:k(e),"data-ga":"date-picker::click-last-time-".concat(e,"::").concat(s),"data-testid":"timePeriod-option"},e)))))};var E=t(72880),N=t(87991),R=t(21290),H=t(59386),I=t.n(H);t(30857);const O=e=>{let{selected:n,selectsStart:t=!1,selectsEnd:o=!1,startDate:a,endDate:s,onChange:r,minDate:l,maxDate:c,dateFormat:d="MM/dd/yyyy",open:u=!1,startOpen:m=!1,inline:p=!1,selectsRange:h=!1,monthsShown:g=1,showPopperArrow:f=!0,calendarContainer:y=null}=e;return i.createElement(I(),{selected:n,onChange:r,selectsStart:t,selectsEnd:o,startDate:a,endDate:s,minDate:l,maxDate:c,dateFormat:d,open:u,startOpen:m,inline:p,selectsRange:h,monthsShown:g,showPopperArrow:f,calendarContainer:y})},L=e=>{let{name:n="",value:t="",onDatesChange:o,onFocus:a,placeholderText:r=""}=e;const{utcOffset:l}=(0,R.$j)(),[c,d]=(0,i.useState)(""),u=(0,i.useCallback)((e=>{const n=e.target.value;d(n)}),[]),m=(0,i.useCallback)((e=>{if((0,A.f)(e)){const n=(0,N.GP)(e,"MMMM d yyyy, H:mm");d(n)}}),[]),p=(0,i.useCallback)((e=>{const n=(0,C.ii)(e.target.value,l);if((0,A.f)(n)&&(0,s.W)(n)>0){const e=(0,s.W)(n);o(e,(()=>m(t)))}else m(t)}),[t,l]);return(0,i.useEffect)((()=>m(t)),[t]),i.createElement(T,{type:"text",name:n,value:t?c:r,onChange:u,onBlur:p,onFocus:a,placeholder:r,"data-testid":"datePicker-input"})};var U=t(2642);const B=()=>{const{localeTimeString:e,localeDateString:n}=(0,R.$j)();return(0,i.useCallback)((t=>"".concat(n(t,{locale:"en-us",long:!1})," ").concat(e(t,{locale:"en-us",secs:!1}))),[e,n])},j=(e,n)=>e>0?(0,U.a)(new Date(n(e))):e||0===e?(0,U.a)(new Date(n((new Date).valueOf()+1e3*e))):null,G=e=>{const n=B();return(0,i.useMemo)((()=>j(e,n)),[e])},F=(e,n)=>[G(e),G(n)],z=e=>{let{startDate:n,setStartDate:t,endDate:a,setEndDate:r,singleDate:l,onDatesChange:d,onInputFocus:u,onlyDates:m,maxDate:p=new Date,minDate:h=new Date("1/1/2018"),isSinglePicker:g}=e;const[f,y]=F(n,a),b=G(l),{utcOffset:_}=(0,R.$j)(),w=B(),v=(0,i.useCallback)(((e,n)=>(0,E.Y)(j(e,w),y)?(0===a&&r(y.getTime()),t(e)):n()),[a,w]),T=(0,i.useCallback)(((e,o)=>(0,E.Y)(f,j(e,w))?(n<0&&t(f.getTime()),r(e)):o()),[n,w]),x=(0,i.useCallback)((e=>{const n=Array.isArray(e)?e[0]:e,t=Array.isArray(e)?e[1]:null,o=n?(0,C.ii)((0,N.GP)(n,"MMMM d yyyy, H:mm"),_):n,i=t?(0,C.ii)((0,N.GP)(t,"MMMM d yyyy, H:mm"),_):t,a=(0,s.W)(o)||null,r=(0,s.W)(i)||null;d({...g?{singleDate:a}:{startDate:a,endDate:r}})}),[_]);return i.createElement(c.Flex,{column:!0,justifyContent:"center",alignItems:"center",flex:!0,gap:3,"data-testid":"datePicker-wrapper"},i.createElement(O,(0,o.A)({selected:g?b:f,onChange:x},g?{}:{startDate:f,endDate:y},{maxDate:p,minDate:h,inline:!0,selectsRange:!0,monthsShown:g?1:2,dateFormat:"MMMM d yyyy, H:mm",showPopperArrow:!1,calendarContainer:k})),!m&&(g?i.createElement(L,{name:"date",value:b,onDatesChange:x,placeholderText:"Select a date"}):i.createElement(c.Flex,{justifyContent:"around",alignItems:"center",width:"100%",gap:2,padding:[0,10]},i.createElement(L,{name:"startDate",value:f,onDatesChange:v,onFocus:u,placeholderText:"Select a start date"}),i.createElement(L,{name:"endDate",value:y,onDatesChange:T,onFocus:u,placeholderText:"Select an end date"}))))},Y=e=>{let{startDate:n,endDate:t,onlyDates:o}=e;const[a,s]=F(n,t),{formattedStartDate:r,formattedEndDate:l}=(0,i.useMemo)((()=>(0,C.HA)(a,s,{onlyDates:o})),[a,s]),d=(0,i.useMemo)((()=>(0,C.jo)(a,s)),[a,s]);return i.createElement(c.Flex,{alignItems:"center",gap:2},i.createElement(c.Flex,{alignItems:"center",justifyContent:"center",gap:1.5},i.createElement(c.TextSmall,{strong:!0,whiteSpace:"nowrap"},"From"),i.createElement(c.TextSmall,{whiteSpace:"nowrap","data-testid":"periodIndication-from"},r)),i.createElement(c.Icon,{name:"arrow_left",size:"small",color:"textLite",rotate:2}),i.createElement(c.Flex,{alignItems:"center",justifyContent:"center",gap:1.5},i.createElement(c.TextSmall,{strong:!0,whiteSpace:"nowrap"},"To"),i.createElement(c.TextSmall,{whiteSpace:"nowrap","data-testid":"periodIndication-to"},l)),i.createElement(c.Flex,{alignItems:"center",justifyContent:"center",gap:2},i.createElement(c.TextSmall,{whiteSpace:"nowrap"},"/"),i.createElement(c.TextSmall,{color:"textLite",whiteSpace:"nowrap","data-testid":"periodIndication-period"},d)))};var X=t(51112),W=t(85551),K=t(6593);const $=36e5,V=24*$,Z=30*V,J=[{key:"years",value:12*Z,unit:"y"},{key:"months",value:Z,unit:"m"},{key:"days",value:V,unit:"d"},{key:"hours",value:$,unit:"h"},{key:"minutes",value:6e4,unit:"min"},{key:"seconds",value:1e3,unit:"s"}],Q=["hours","minutes","seconds"],ee=e=>{let{placeholder:n="No date"}=e;return i.createElement(c.TextSmall,null,n)},ne=e=>{let{isPlaying:n,startDate:t,endDate:o,isSameDate:a,color:s,onlyDates:r,isSinglePicker:l}=e;const{localeTimeString:d,localeDateString:u}=(0,R.$j)(),m=s||(n?"accent":"textFocus");return i.createElement(c.Flex,{gap:1},i.createElement(c.TextSmall,{color:s,whiteSpace:"nowrap"},u(t,{long:!1}),!r&&i.createElement(i.Fragment,null," ","\u2022"," ",i.createElement(c.TextSmall,{color:m,whiteSpace:"nowrap"},d(t,{secs:!1})))),!l&&i.createElement(i.Fragment,null,(!r||!a)&&i.createElement(c.Icon,{name:"arrow_left",color:m,size:"small",rotate:2}),i.createElement(c.TextSmall,{color:s,whiteSpace:"nowrap"},!a&&i.createElement(i.Fragment,null,u(o,{long:!1})," \u2022 "),!r&&i.createElement(c.TextSmall,{color:m,whiteSpace:"nowrap"},d(o,{secs:!1})))))},te=e=>{let{isPlaying:n,duration:t,color:o,fluid:a=!1,isSmall:s=!1}=e;return i.createElement(c.Flex,{gap:s?.2:1,align:"center"},!s&&i.createElement(c.TextSmall,{color:o},"\u2022"),i.createElement(c.Flex,{width:a?"auto":5},n&&i.createElement(c.TextSmall,{color:o},"last")),i.createElement(c.TextSmall,{color:o},t))};var oe=t(29217);const ie=(0,p.default)(c.Flex).withConfig({displayName:"styled__Container",componentId:"sc-1s7311w-0"})(["cursor:pointer;&:hover *{color:",";fill:",";}"],(0,c.getColor)("textLite"),(0,c.getColor)("textLite")),ae=(0,p.default)(oe.A).withConfig({displayName:"styled__StyledTooltip",componentId:"sc-1s7311w-1"})(["pointer-events:",";"],(e=>{let{isDisabled:n}=e;return n?"none":"auto"})),se=(0,i.forwardRef)(((e,n)=>{let{onClick:t,start:a,end:s,isPlaying:r,isPickerOpen:l,tagging:c,color:d,fluid:u,onlyDates:m,tooltipContent:p,isSinglePicker:h,noDateSelected:g,isSmall:f,...y}=e;const b=(0,X.yD)(),[_,w,v]=(0,i.useMemo)((()=>{if(g)return[];const e=(e=>e<0?(0,D.W)(new Date,{seconds:e}):new Date(e))(a),n=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return e?new Date(e):new Date}(s),t=((e,n)=>(0,W.r)(e,n))(e,n);return[e,n,t]}),[a,s,g]),T=(0,i.useMemo)((()=>g?0:function(e){let{withSeconds:n=!1,withTime:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=n||!!e.seconds;return J.reduce(((n,i)=>{let{key:a,unit:s}=i;return"seconds"!==a||o?!t&&Q.includes(a)?n:e[a]?n?"".concat(n," ").concat(e[a]).concat(s):"".concat(e[a]).concat(s):n:n}),"")}(((e,n)=>(0,K.F)({start:e,end:n}))(_,w),{withTime:!m})),[r,_,w,g]);return i.createElement(ae,{content:l?()=>{}:p||"Select a predefined or a custom timeframe",align:"bottom",isDisabled:!t||b,plain:!0},i.createElement(ie,(0,o.A)({alignItems:"center",justifyContent:"center",gap:1,height:"100%",onClick:t,padding:[0,1],ref:n,"data-ga":"date-picker::click-time::".concat(c),"data-testid":"datePicker-accessorElement"},y),f?null:h&&g?i.createElement(ee,null):i.createElement(ne,{isPlaying:r,endDate:w,startDate:_,isSameDate:v,color:d,onlyDates:m,isSinglePicker:h}),!m&&!h&&!g&&i.createElement(te,{isPlaying:r,duration:T,color:d,fluid:f||u,isSmall:f})))}));var re=t(27467),le=(t(17333),t(98992),t(54520),t(45123)),ce=t(80940);const de=(0,p.default)(c.Drop).attrs({align:{top:"bottom",left:"left"},animation:!0,background:"dropdown",column:!0,margin:[.5,0,0],overflow:{vertical:"auto"},padding:[2,0],round:1,width:80}).withConfig({displayName:"dropdown__Dropdown",componentId:"sc-pg99kg-0"})([""]),ue=(0,p.default)(c.Flex).attrs({column:!0,padding:[2,0,0],overflow:{vertical:"auto"},height:{max:"320px"}}).withConfig({displayName:"container__Container",componentId:"sc-1gtygg6-0"})([""]),me=(0,p.default)(c.Flex).attrs({justifyContent:"between",alignItems:"center",width:"100%",gap:2}).withConfig({displayName:"wrapper__Wrapper",componentId:"sc-1ehauu1-0"})([""]),pe=e=>{let{name:n,offset:t,utc:o,onSelect:a}=e;const s=(0,i.useCallback)((()=>a(o,t,n)),[o,n]);return i.createElement(le.A,{round:1,onClick:s,Wrapper:me,"data-ga":"timezone-picker::click-timezone::global-view::".concat(n)},i.createElement(c.Text,{color:"text"},n),i.createElement(c.Text,{color:"textLite",whiteSpace:"nowrap"},"UTC ",t))};var he=t(82838);const ge=e=>{let{value:n,onChange:t,timezoneRef:o,timezoneName:a}=e;const[s,r]=(0,i.useState)(""),[l,d]=(0,u.A)(),m=(0,i.useRef)(),p=(0,i.useRef)();(0,i.useEffect)((()=>{p.current&&l&&p.current.focus()}),[l]);const h=(0,i.useMemo)((()=>s?he.O.filter((e=>{let{text:n,offset:t}=e;return n.toUpperCase().includes(s.toUpperCase())||t.includes(s)})):he.O),[s]),g=()=>{d(!1),r("")},f=(0,i.useCallback)(((e,n,o)=>{t(e,n,o),g()}),[]);return i.createElement(ce.A,{hasBorder:!1,testId:"timezone-picker"},i.createElement(le.A,{round:1,onClick:d,ref:m,Wrapper:me,padding:[2],"data-ga":"timezone-picker::click-picker::global-view",selected:!0},i.createElement(c.Flex,{gap:1},i.createElement(c.Text,{color:"text",whiteSpace:"nowrap"},a," UTC ",n)),i.createElement(c.Icon,{name:"chevron_down",color:"text",width:"12px",height:"12px"})),m.current&&l&&i.createElement(de,{onClickOutside:g,onEsc:g,ref:o,target:m.current},i.createElement(c.Box,{padding:[0,2]},i.createElement(c.SearchInput,{value:s,onChange:r,ref:p,"data-ga":"timezone-picker::click-search::global-view"})),i.createElement(ue,null,h.map((e=>{let{text:n,offset:t,utc:o}=e;return i.createElement(pe,{key:n,name:n,offset:t,utc:o[0],onSelect:f})})))))},fe=e=>{let{timezoneRef:n}=e;const[{offset:t,timezoneName:o},a]=(0,re.N9)(),s=(0,i.useCallback)(((e,n,t)=>a({utc:e,offset:n,timezoneName:t})),[]);return i.createElement(ge,{timezoneRef:n,timezoneName:o,value:t,onChange:s})};t(74648),t(9920),t(23215),t(3949);const ye=["mousedown","touchstart"];var be=t(57605);const _e=e=>{let{onChange:n,isSinglePicker:t,values:{start:p,end:g,singleDate:f}={},defaultValue:y=-900,tagging:b="",isPlaying:_,onlyDates:w,accessorProps:T={},maxDate:k,minDate:x,accessorTooltipContent:P,isSmall:D,...A}=e;const[S,E]=(0,i.useState)(f),[N,R]=(0,i.useState)(p),[H,I]=(0,i.useState)(p),[O,L]=(0,m.A)("resolution","minutes"),[U,B]=(0,i.useState)("startDate"),[j,G,,F]=(0,u.A)(),X=(0,i.useRef)(),[W,K]=(0,i.useState)(null),[$,V]=(0,i.useState)(null),[Z,J]=(0,i.useState)(null),Q=(0,be.A)();!function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ye,t=arguments.length>2?arguments[2]:void 0;const o=(0,i.useRef)();(0,i.useEffect)((()=>{const i=n=>{Array.isArray(t)?t.every((e=>!e||!e.contains(n.target)))&&e():o.current&&!o.current.contains(n.target)&&e()};return n.forEach((e=>document.addEventListener(e,i))),()=>{n.forEach((e=>document.removeEventListener(e,i)))}}),[o,e,t])}(F,["mouseup","touchend"],[W,$,Z,X.current]),(0,a.A)((()=>{Q(!!j)}),[j]);const ee=(0,i.useCallback)((e=>{let{startDate:n,endDate:t}=e;R(n),I(t)}),[]);(0,i.useEffect)((()=>{ee({startDate:p,endDate:g})}),[p,g]);const ne=(0,i.useCallback)((()=>{t?(E(f),F()):ee({startDate:y,endDate:0})}),[t]),te=(0,i.useCallback)((e=>{e.target.name&&B(e.target.name)}),[]),oe=(0,i.useCallback)((e=>{e.stopPropagation(),G()}),[G]),ie=()=>{t?n(S):(n({start:N,end:H}),Q(!1)),F()},ae=(0,i.useMemo)((()=>(0,C.g$)(U)),[U]),re=!!t||null!==N&&null!==H&&N!==H,le=!t&&(N===p&&H===g),ce=(0,i.useMemo)((()=>y),[]),de=N===ce,ue=(0,i.useCallback)(((e,n)=>{L(n),ee({startDate:e,endDate:0})}),[]),me=e=>{let{startDate:o,endDate:i,singleDate:a}=e;if(t)E(a),n(a),(0,d.H)("date-picker","click-date-picker",b,String(a));else{ee(w?{startDate:o?(0,s.W)((0,r.o)(new Date(o))):o,endDate:i?(0,s.W)((0,l.D)(new Date(i))):i}:{startDate:o,endDate:i});const e="finish"===ae?i||o:o||i;(0,d.H)("date-picker","click-date-picker",b,String(e))}},pe=(0,i.useMemo)((()=>X.current&&j?i.createElement(v,{backdrop:!0,target:X.current,canHideTarget:!1,align:{top:"bottom",left:"left"},onEsc:F},i.createElement(h,(0,o.A)({ref:V,"data-testid":"datePicker"},A),i.createElement(c.Flex,{alignItems:"center",width:"100%",padding:w?[4]:[0,6]},!w&&!t&&i.createElement(c.Flex,{column:!0,gap:3,margin:[0,4,0,0],padding:[6,0],border:{side:"right",color:"borderSecondary"}},i.createElement(q,{handleTimePeriodChange:ue,selectedDate:N,tagging:b}),i.createElement(M,{handleTimePeriodChange:ue,customTimePeriodRef:K,resolution:O,tagging:b,value:N})),i.createElement(z,{startDate:N,endDate:H,singleDate:S,setStartDate:R,setEndDate:I,onDatesChange:me,onInputFocus:te,onlyDates:w,maxDate:k,minDate:x,isSinglePicker:t})),i.createElement(c.Flex,{column:!0,padding:[4,6,2],width:"100%",border:{side:"top",color:"borderSecondary"}},!w&&!t&&i.createElement(fe,{timezoneRef:J}),i.createElement(c.Flex,{gap:1,justifyContent:t?"end":w?"center":re?"between":"end",width:"100%"},!w&&!t&&re&&i.createElement(Y,{startDate:N,endDate:H,onlyDates:w}),i.createElement(c.Flex,{alignItems:"center",justifyContent:"center",gap:1},i.createElement(c.Button,{label:"Clear",flavour:"hollow",onClick:ne,disabled:de,"data-ga":"date-picker::click-clear::".concat(b,"-").concat(ae),"data-testid":"datePicker-clear",small:!0}),i.createElement(c.Button,{label:"Apply",onClick:ie,disabled:!re||le,"data-ga":"date-picker::click-apply::".concat(b,"-").concat(ae),"data-testid":"datePicker-apply",small:!0})))))):null),[N,b,O,H,re,de,ae,le,S,j]);return i.createElement(i.Fragment,null,i.createElement(se,(0,o.A)({onClick:oe,tagging:b,isPickerOpen:j,isPlaying:_,setRangeValues:n,start:t?S:p,end:t?S:g,ref:X,onlyDates:w,tooltipContent:P,isSinglePicker:t,noDateSelected:t&&!S,isSmall:D},T)),pe)}},51112:(e,n,t)=>{t.d(n,{A_:()=>l,gC:()=>d,mQ:()=>c,yD:()=>r});var o=t(47767),i=t(50466),a=t(22332);const s={},r=()=>{const e=(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/alerts"),n=(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/alerts/:alertId"),t=(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/home");return e||n||t},l=()=>{const e=(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/top"),{hasHistory:n}=(0,i.Ol)({extraKey:"fn"})||s;return e&&!n},c=()=>(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/events"),d=()=>{const e=c(),n=(0,a.useAttributeValue)("autofetch");return!(0,a.useAttributeValue)("paused")&&n&&!e}},79897:(e,n,t)=>{t.d(n,{AE:()=>w,HA:()=>v,Mb:()=>f,So:()=>p,d_:()=>m,g$:()=>_,gt:()=>h,ii:()=>T,jo:()=>k,zp:()=>y});var o=t(82526),i=t(26010),a=t(87991),s=t(84128),r=t(58380),l=t(31826),c=t(71600);const d=60,u=3600,m=86400,p=94694400,h=["minutes","hours","days","months"],g={minutes:d,hours:u,days:m,months:30*m},f=(e,n)=>Math.round(e/g[n]),y=(e,n)=>{const t=(0,o.W)(new Date(0),{[n]:e});return-(0,i._)(t)},b={startDate:"start",endDate:"finish"},_=e=>b[e],w=[{period:"Last 5 minutes",value:-300,resolution:"minutes"},{period:"Last 10 minutes",value:-600,resolution:"minutes"},{period:"Last 15 minutes",value:-900,resolution:"minutes"},{period:"Last 30 minutes",value:-1800,resolution:"minutes"},{period:"Last hour",value:-3600,resolution:"hours"},{period:"Last 2 hours",value:-7200,resolution:"hours"},{period:"Last 6 hours",value:-21600,resolution:"hours"},{period:"Last 12 hours",value:-43200,resolution:"hours"},{period:"Last day",value:-m,resolution:"days"},{period:"Last 2 days",value:-2*m,resolution:"days"},{period:"Last 7 days",value:-7*m,resolution:"days"}],v=function(e,n){let{onlyDates:t}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=t?"MMMM d yyyy":"MMMM d yyyy, H:mm:ss";return{formattedStartDate:(0,a.GP)(e,o),formattedEndDate:(0,a.GP)(n,o)}},T=(e,n)=>{const t=(0,s.u)(e,"MMMM d yyyy, H:mm")?e:(0,r.qg)(e,"MMMM d yyyy, H:mm",Date.now());return(0,r.qg)("".concat(t," ").concat((e=>{if(!e)return"+00:00";const n=e.toString().split("."),t=n[0]>0?"+":"-",o=Math.abs(n[0]).toString(),i="".concat(t).concat(o.padStart(2,0));return n.length>1?"".concat(i,":").concat(String(.6*n[1]).padEnd(2,0)):"".concat(i,":00")})(n)),"MMMM d yyyy, H:mm xxx",Date.now())},k=(e,n)=>(0,l.k)((0,c.W)(e),(0,c.W)(n))},71847:(e,n,t)=>{t.d(n,{H:()=>o});const o=function(e,n,t,o,i){var a;let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"gaCustomEvent";if(window.envSettings.tracking){if(window.dataLayer){const a={event:s,eventCategory:e,eventAction:n,eventLabel:t,eventValue:o,eventResults:i};window.dataLayer.push(a)}window.gtag&&window.gtag("event","gaCustomEvent",{eventCategory:e,eventAction:n,eventLabel:t,eventValue:o,eventResults:i}),null!==(a=window.posthog)&&void 0!==a&&a.__loaded&&window.posthog.capture(s,{eventCategory:e,eventAction:n,eventLabel:t,eventValue:o})}}},96083:(e,n,t)=>{t.d(n,{A:()=>l});var o=t(58168),i=t(68415),a=t(96540),s=t(20982),r=t(83199);const l=(0,a.forwardRef)(((e,n)=>{let{onClick:t,src:l,title:c="User avatar",width:d=8,height:u=8,...m}=e;return a.createElement(r.Flex,(0,o.A)({cursor:"pointer",round:"50%","data-testid":"userAvatar",title:c,alt:c,onClick:e=>t&&t(e),width:d,height:u},m,{ref:n,alignItems:"center",justifyContent:"center",background:"spaceIdle",color:"textLite",overflow:"hidden"}),l?a.createElement(r.Flex,{as:"img",src:l,alt:c,width:d,height:u}):a.createElement(s.g,{icon:i.yV,size:"lg",alt:c}))}))},5396:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(58168),i=t(96540),a=t(83199),s=t(29217);const r=e=>{let{children:n,background:t,testId:r,onClose:l,tooltipProps:c,...d}=e;const u=r||"header-banner";return i.createElement(a.Flex,(0,o.A)({background:t,"data-testid":u,height:{min:10},padding:[2,10,2,2],position:"sticky",zIndex:5},d),n,i.createElement(s.A,(0,o.A)({align:"bottom",content:"Dismiss message",isBasic:!0,plain:!0,stretch:"align"},c),l&&i.createElement(a.Box,{"data-testid":"".concat(u,"-close-button"),as:a.Icon,color:"text",cursor:"pointer",name:"x",position:"absolute",right:"8px",onClick:e=>{l&&(e.stopPropagation(),l())}})))}},76051:(e,n,t)=>{t.d(n,{Ay:()=>r,I1:()=>s});var o=t(96540),i=t(8711),a=t(83199);const s=(0,i.default)(a.Box).withConfig({displayName:"blur__BlurredBox",componentId:"sc-12emg8l-0"})(["position:absolute;top:0;bottom:0;left:0;right:0;backdrop-filter:blur(",");z-index:80;"],(e=>{let{value:n}=e;return n||"7px"})),r=e=>{let{children:n,...t}=e;return o.createElement(a.Box,{position:"relative"},n,o.createElement(s,t))}},40982:(e,n,t)=>{t.d(n,{A:()=>z});var o=t(58168),i=(t(62953),t(96540)),a=t(83199),s=t(67602),r=t(29217),l=t(15255),c=t(8711),d=t(87292),u=t(28738),m=(t(17333),t(41393),t(98992),t(54520),t(81454),t(37618)),p=t(87659),h=t(50105),g=t(3914),f=t(78862),y=t(76634),b=t(64754);const _=c.default.div.withConfig({displayName:"spaces__Separator",componentId:"sc-19p9rsp-0"})(["height:1px;width:",";background:",";"],(0,a.getSizeBy)(3),(0,a.getColor)("border")),w=e=>{let{selectedSpace:n,setSelectedSpace:t,column:s,showFullname:l,...c}=e;const d=(0,g.Pk)(),u=(0,i.useMemo)((()=>d.filter((e=>!(0,m.ES)(e)))),[d]),[w,,v,T]=(0,p.A)();return i.createElement(a.Flex,(0,o.A)({"data-testid":"workspaceBar",padding:[3,2],column:s,alignItems:"center",justifyContent:"center"},c),i.createElement(a.Flex,{column:!0,"data-testid":"workspaceBar-spaces-list",gap:4,alignItems:"center",overflow:"hidden"},i.createElement(a.Flex,{column:s,"data-testid":"workspaceBar-spacesList",gap:s?4:2,overflow:{vertical:"auto"},flexWrap:!s},u.map((e=>i.createElement(f.A,{testIdPrefix:"workspaceBar-space",key:e,spaceId:e,onClick:t,active:e===(null===n||void 0===n?void 0:n.id),background:"selected",showFullname:l})))),i.createElement(y.A,{permission:"user:CreateSpace"},i.createElement(_,{"data-testid":"workspaceBar-separator"}),i.createElement(r.A,{content:"Create a new Space",align:"right"},i.createElement(b.A,{permission:"user:CreateSpace",ifForbidden:"hide",icon:"plus",onClick:v,"data-testid":"workspaceBar-addSpace-button"})))),w&&i.createElement(h.A,{onClose:T,onDone:t}))};var v=t(79412),T=t(56915),k=t(46741),x=t(87633),P=t(14994),C=t(76999);const q=e=>{let{selectedSpace:n,selectedRoom:t,setSelectedRoom:o}=e;const s=n.id;(0,x.A)(s);const l=(0,k.JT)("room:Create",s),c=(0,k.JT)("room:Read",s),[d,,u,m]=(0,p.A)(!1),h=(0,i.useCallback)((e=>{e.stopPropagation(),l&&u()}),[l]),g=(0,P.CB)(s),f=(0,i.useMemo)((()=>g.filter((e=>{let{isMember:n}=e;return n}))),[g]);return(0,i.useEffect)((()=>{null!==f&&void 0!==f&&f.length&&(t||o(f[0]))}),[f,t]),i.createElement(i.Fragment,null,i.createElement(T.A,{"data-testid":"workspaceRooms-menuList",disabled:!c,headerTestId:"workspaceRooms-warRooms",isOpen:!0,label:i.createElement(a.Flex,{padding:[1,0],margin:[0,0,1],flex:!0,justifyContent:"between",alignItems:"center",height:"24px"},i.createElement(a.Flex,{alignItems:"center",gap:2},i.createElement(a.Icon,{name:"space_new",color:"textNoFocus",width:"14px",height:"14px"}),i.createElement(a.TextSmall,{color:"textNoFocus"},"Select a room")),i.createElement(a.Flex,{alignItems:"center",gap:2},i.createElement(r.A,{content:"Create a new room",align:"right"},i.createElement(b.A,{permission:"room:Create",tiny:!0,icon:"plus",onClick:h,"data-testid":"workspaceRooms-addWarRoom-button",spaceId:s}))))},i.createElement(a.Flex,{column:!0,"data-testid":"workspaceRooms-warRoomsList",padding:[0,0,1]},f.map((e=>{const{id:n}=e;return i.createElement(C.A,{key:n,id:n,hideAlerts:!0,Wrapper:a.TextSmall,isSidebar:!0,selectedId:null===t||void 0===t?void 0:t.id,onClick:()=>o(e)})})))),d&&i.createElement(v.n,{onClose:m,isSubmodal:!1}))};var D=t(74530),A=t(22292),S=t(71835),M=t(79731),E=t(3714),N=t(20378),R=t(78459),H=t(50876);var I=t(92155),O=t(63314);const L=(0,c.default)(a.ModalContent).attrs({width:{base:"80vw"},height:{base:"80vh",min:"80vh"}}).withConfig({displayName:"modal__ModalContent",componentId:"sc-4dwymj-0"})(["box-shadow:0 18px 28px rgba(0,0,0,0.5);"]),U=(0,I.A)(a.Button),B=e=>{let{claim:n,loading:t,error:o,privateKey:s,setPrivateKey:r,selectedSpace:l,setSelectedSpace:c,selectedRoom:m,keyFilename:p}=e;return l?m?i.createElement(i.Fragment,null,i.createElement(u.m,null),i.createElement(a.H3,{textAlign:"center"},'You are ready to connect your agent in "',m.name,'" of "',l.name,'"'),i.createElement(a.Text,{textAlign:"center"},"Last step is to ensure you're the admin of this agent ;)"),i.createElement(a.TextSmall,{textAlign:"center"},"We've created a file with a random key. Can you read it?"),i.createElement(d.Ay,{"data-testid":"key-filename-command",commandText:"sudo cat ".concat(p),width:"60%"},"$ sudo cat ",p),i.createElement(a.Flex,{column:!0,round:!0,background:"successSemi",border:"primary",padding:[2],width:"60%"},i.createElement(a.TextSmall,null,i.createElement(a.TextSmall,{strong:!0},"Tip:")," Run the command and paste here the key it will give you. If the command doesn't work out of the box, locate the ",p," file, open it in your favorite text editor, and copy it to your clipboard.")),i.createElement(a.TextInput,{value:s,placeholder:"Paste private key here",onChange:e=>r(e.target.value),containerStyles:{width:"60%"}}),i.createElement(U,{label:"Claim your agent",onClick:n,disabled:!s||t,isLoading:t,"data-ga":"claiming::claim-agent::modal",payload:{space:null===l||void 0===l?void 0:l.id,room:null===m||void 0===m?void 0:m.id,privateKey:s}})):i.createElement(i.Fragment,null,i.createElement(u.m,null),i.createElement(a.H3,{textAlign:"center"},'Select a room in "',l.name,'" for this agent'),i.createElement(a.TextBig,{color:"textDescription",textAlign:"center"},"or create a new one by hitting the [+] button.")):i.createElement(i.Fragment,null,i.createElement(u.m,null),i.createElement(a.H3,{textAlign:"center"},"Let's connect your Agent"),i.createElement(a.Flex,{width:90,justifyContent:"center"},i.createElement(a.TextBigger,{color:"textDescription",textAlign:"center",lineHeight:1.5},"Select the Space you want this Agent to join or create a new one by hitting the [+] button.")),i.createElement(w,{column:!!l,selectedSpace:l,setSelectedSpace:c,showFullname:!0,width:"80%"}))},j=e=>{let{onClose:n,keyFilename:t}=e;const{claim:o,selectedSpace:s,setSelectedSpace:r,selectedRoom:c,setSelectedRoom:d,loading:u,error:m,privateKey:p,setPrivateKey:h}=(e=>{var n;const[t,o]=(0,i.useState)(),[a,s]=(0,i.useState)(),[r,c]=(0,i.useState)(""),d=(0,D.A)(null===t||void 0===t?void 0:t.id),u=(0,g.dg)(),m=null===(n=window.localNetdataRegistry)||void 0===n?void 0:n.mg,[{claiming:p,claimingError:h},f]=(0,l.RJ)(m),y=(0,A.uW)("isAnonymous"),[b,_]=(0,S.A)(),w=(0,l.OS)(),v=(0,N.OS)(),T=(0,R.OS)(),{sendLog:k,isReady:x}=(0,H.A)();return{claim:(0,i.useCallback)((()=>{var n;r&&!p&&d&&m&&u&&!y&&a&&(f({claiming:!0}),(0,E.j)({key:r,token:null===d||void 0===d||null===(n=d[0])||void 0===n?void 0:n.token,rooms:[a.id],url:window.envSettings.apiUrl}).then((n=>{let{data:o}=n;if(!o.success)return f({claiming:!1,claimingError:o.message,claimId:null}),_({message:o.message}),void k({feature:"claim-node",isFailure:!0,message:o.message});w(),v(),T(),f({claiming:!1,...o,claimingError:""}),e(),b({header:"Your agent got connected to Netdata",text:"You can see your agent in the room ".concat(a.name," of ").concat(t.name," space.")}),k({feature:"claim-node",isSuccess:!0})})).catch((e=>{var n;const t=null===e||void 0===e||null===(n=e.response)||void 0===n?void 0:n.data,o=(0,M.o)(null===t||void 0===t?void 0:t.errorMsgKey)||(null===t||void 0===t?void 0:t.errorMessage)||"Something went wrong";f({claiming:!1,claimingError:o,claimId:null}),_({message:o}),k({feature:"claim-node",isFailure:!0,message:o})})))}),[d,r,m,u,y,p,k,x]),selectedSpace:t,setSelectedSpace:o,selectedRoom:a,setSelectedRoom:s,loading:p,error:h,privateKey:r,setPrivateKey:c}})(n);return i.createElement(a.Modal,{zIndex:80,backdropProps:{backdropBlur:!0}},i.createElement(O.Ay,{feature:"ClaimModal"},i.createElement(a.Flex,{column:!0,alignItems:"end",gap:3},i.createElement(L,{tabIndex:0},i.createElement(a.ModalHeader,{justifyContent:"between"},i.createElement(a.Flex,{gap:2,alignItems:"center"},"Connect your Agent to Netdata Cloud"),i.createElement(a.ModalCloseButton,{onClose:n,testId:"claim-modal-close-button","data-ga":"claiming::close-claim-modal::local"})),i.createElement(a.ModalBody,{overflow:{vertical:"auto"},padding:[0],height:"100%",column:!1},i.createElement(a.Collapsible,{background:"sideBar",open:!!s,direction:"horizontal"},i.createElement(w,{column:!0,selectedSpace:s,setSelectedSpace:r,background:"sideBarMini",height:"100%"})),i.createElement(a.Collapsible,{background:"sideBar",open:!!s,direction:"horizontal"},i.createElement(a.Flex,{flex:!0,width:56,column:!0,overflow:{vertical:"auto"},padding:[2,0]},!!s&&i.createElement(q,{selectedSpace:s,selectedRoom:c,setSelectedRoom:d}))),i.createElement(a.Flex,{alignItems:"center",column:!0,"data-testid":"claim-modal-body",flex:!0,gap:3,justifyContent:"center",padding:[4]},i.createElement(B,{selectedSpace:s,selectedRoom:c,setSelectedSpace:r,keyFilename:t,claim:o,loading:u,error:m,privateKey:p,setPrivateKey:h})))))))},G={unavailable:"Netdata is not available for this agent.",available:"Netdata is available. Click to claim it and gain the full benefits of Netdata!",disabled:"Netdata is available, but it is disabled, you can change the agent configuration to enable it.",banned:"The agent has been banned from cloud.",offline:"The agent tries to connect to Netdata, but it fails to do so.",online:"The agent is already connected to Netdata :)"},F=(0,I.A)(a.Button),z=e=>{const[n,,t,a]=(0,s.A)("claimModal"),[{canBeClaimed:c,cloudStatus:d,keyFilename:u}]=(0,l.RJ)();return i.createElement(i.Fragment,null,i.createElement(r.A,{plain:!0,content:G[d],isBasic:!0},i.createElement("div",null,i.createElement(F,(0,o.A)({label:"Connect",onClick:t},e,{disabled:!c,"data-ga":"claiming::open-claim-modal::local"})))),n&&i.createElement(j,{onClose:a,keyFilename:u}))}},59778:(e,n,t)=>{t.d(n,{M:()=>o,d:()=>i});const o=function(){return/(Community|Early)/.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")?"nightly":"stable"},i={nightly:{description:"Released at most once every 24 hours with fully-tested code that fixes bugs or security flaws, or introduces new features to Netdata. Every nightly release is a candidate for then becoming a stable release.",title:"Nightly"},stable:{description:"Released when a major milestone is reached. Stable releases might be a better choice for those who run Netdata in mission-critical production systems, as updates will come more infrequently.",title:"Stable"}}},12740:(e,n,t)=>{t.d(n,{O1:()=>s,OV:()=>l,Yg:()=>r});var o=t(96540),i=t(8711),a=t(83199);const s=(0,i.default)(a.Box).attrs({border:{side:"all",color:"border"},padding:[1.75,7,1.75,3],round:!0}).withConfig({displayName:"styled__InfoBlock",componentId:"sc-1lice8m-0"})(["color:",";font-family:monospace;font-size:14px;letter-spacing:0.09px;line-height:18px;max-height:34px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;"],(0,a.getColor)("textLite")),r=e=>{let{children:n}=e;return o.createElement(a.Flex,{column:!0,gap:4},n)},l=(0,i.default)(a.Button).withConfig({displayName:"styled__StyledButton",componentId:"sc-1lice8m-1"})(["&&{width:auto;min-width:auto;height:22px;background:",";border:1px solid ",";border-radius:4px;padding:0;&:hover{background:",";& > span{span{color:",";}svg{fill:",";}}}& > span{display:flex;align-items:center;gap:6px;margin:2px 8px 2px 4px;span{color:",";}svg{fill:",";}}}"],(e=>{let{active:n,theme:t}=e;return(0,a.getColor)(n?"primary":"modalBackground")({theme:t})}),(0,a.getColor)("primary"),(0,a.getColor)("primary"),(0,a.getColor)("modalBackground"),(0,a.getColor)("modalBackground"),(e=>{let{active:n,theme:t}=e;return(0,a.getColor)(n?"modalBackground":"primary")({theme:t})}),(e=>{let{active:n,theme:t}=e;return(0,a.getColor)(n?"modalBackground":"primary")({theme:t})}))},94944:(e,n,t)=>{t.d(n,{A:()=>s});t(9920),t(98992),t(3949),t(62953);var o=t(96540),i=t(22332),a=t(27467);const s=()=>{const e=(0,i.useChart)(),[{after:n,before:t,forcePlay:s},r]=(0,a.N9)(),l=function(){let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{autofetchOnWindowBlur:!1};return()=>{e.getNodes().forEach((e=>e.updateAttributes(o)));const i=n<0?n:-Math.floor((t-n)/1e3);r({after:i,before:0,forcePlay:!!o.autofetchOnWindowBlur})}};return{play:(0,o.useCallback)(l(),[t,n,s]),forcePlay:(0,o.useCallback)(l({autofetchOnWindowBlur:!0}),[t,n,s]),pause:(0,o.useCallback)((()=>{if(n>0)return;const e=Date.now();r({after:1e3*Math.floor(e/1e3+n),before:1e3*Math.floor(e/1e3),forcePlay:!1})}),[n,t,s])}}},80940:(e,n,t)=>{t.d(n,{A:()=>l});var o=t(58168),i=t(8711),a=t(96540),s=t(83199);const r=(0,i.default)(s.Flex).withConfig({displayName:"item__StyledFlex",componentId:"sc-1gby0f1-0"})(["&:hover{background:",";}"],(e=>{let{hasHoverBackground:n,theme:t,hoverBackground:o="borderSecondary"}=e;return n?(0,s.getColor)(o)({theme:t}):null})),l=(0,a.forwardRef)(((e,n)=>{let{background:t,children:i,cursor:l,hasBorder:c,hasHoverBackground:d,onClick:u,padding:m,testId:p,borderColor:h="selected",round:g,hoverBackground:f,...y}=e;return a.createElement(s.Flex,(0,o.A)({alignItems:"center",border:c&&{side:"right",color:h},cursor:l,"data-testid":p,onClick:u,ref:n},y),a.createElement(r,{round:g,alignItems:"center",background:t,hasHoverBackground:d,margin:c?[0,3,0,0]:void 0,padding:m,hoverBackground:f},i))}))},82230:(e,n,t)=>{t.d(n,{A:()=>s});var o=t(83199),i=t(96540);const a="node-status-indicator",s=e=>{let{statusText:n,selected:t,total:s,statusColor:r,isScreenSmall:l}=e;const{statusTextColor:c,indicatorWrapperColor:d,counterColor:u}=r;return i.createElement(o.Flex,{alignItems:"center",gap:2},!l&&i.createElement(o.TextSmall,{"data-testid":"".concat(a,"-text-").concat(n),color:c},n),i.createElement(o.Flex,{justifyContent:"center",alignItems:"center",padding:[0,1],width:{min:7.5},height:5,background:d,round:!0,gap:l?.2:1},t===s?i.createElement(o.TextSmall,{"data-testid":"".concat(a,"-total-").concat(n),color:u},s):i.createElement(i.Fragment,null,i.createElement(o.TextSmall,{strong:!0,"data-testid":"".concat(a,"-selected-").concat(n),color:u},t),i.createElement(o.TextSmall,{color:u},l?"/":"of"),i.createElement(o.TextSmall,{"data-testid":"".concat(a,"-total-").concat(n),color:u},s))))}},24398:(e,n,t)=>{t.d(n,{P:()=>o});const o={live:{statusTextColor:"live",indicatorWrapperColor:"live",counterColor:"bright"},stale:{statusTextColor:"stale",indicatorWrapperColor:"stale",counterColor:"bright"},offline:{statusTextColor:"textLite",indicatorWrapperColor:"offline",counterColor:"bright"},unseen:{statusTextColor:"unseen",indicatorWrapperColor:"unseen",counterColor:"bright"}}},11261:(e,n,t)=>{t.d(n,{A:()=>u,q:()=>d});t(41393),t(81454);var o=t(96540),i=t(8711),a=t(83199),s=t(82230),r=t(24398);const l=(0,i.default)(a.Flex).withConfig({displayName:"wrapper__NodesIndicatorWrapper",componentId:"sc-gy5ftg-0"})(["pointer-events:",";cursor:",";opacity:",";"],(e=>{let{disabled:n}=e;return n?"none":"auto"}),(e=>{let{disabled:n}=e;return n?"default":"pointer"}),(e=>{let{disabled:n}=e;return n?"0.7":"1"})),c={live:{counter:0,statusText:"Live"},stale:{counter:0,statusText:"Stale"},offline:{counter:0,statusText:"Offline"},unseen:{counter:0,statusText:"Unseen"}},d=e=>o.createElement(l,e,Object.keys(c).map((e=>o.createElement(s.A,{key:e,statusText:c[e].statusText,counter:c[e].counter,statusColor:r.P[e]})))),u=l},68741:(e,n,t)=>{t.d(n,{A:()=>c});var o=t(58168),i=t(96540),a=t(83199),s=t(22292),r=t(14550);const l=(0,t(92155).A)(a.Button),c=e=>{const n=(0,s.uW)("isAnonymous"),t=(0,r.A)();return n?i.createElement(l,(0,o.A)({label:"Sign In",isStart:!0,onClick:t,"data-ga":"click-sign-in::header",feature:"SignIn"},e)):null}},47431:(e,n,t)=>{t.d(n,{A:()=>h});var o=t(58168),i=(t(62953),t(96540)),a=t(83199),s=t(22292),r=t(46741),l=t(29217),c=t(92155),d=t(19673),u=t(42728),m=t(28061);const p=(0,c.A)(a.Button),h=e=>{let{tooltipProps:n={},...t}=e;const a=(0,s.uW)("isAnonymous"),{value:c}=(0,d.JN)(),{slug:h}=c||{},g=(0,u.Kj)(h),f=(0,r.JT)("billing:Manage"),y=(0,m.A)(),[b,_]=(0,i.useState)();return(0,i.useEffect)((()=>{_(!a&&g&&f)}),[a,g,f]),b?i.createElement(l.A,(0,o.A)({plain:!0,content:"Upgrade to business plan and experience the full power of Netdata!",isBasic:!0},n),i.createElement("div",null,i.createElement(p,(0,o.A)({label:"Upgrade Now!",isStart:!0,onClick:y,feature:"UpgradeToBusiness","data-testid":"upgradeToBusiness-header"},t)))):null}},95598:(e,n,t)=>{t.r(n),t.d(n,{default:()=>an});t(62953);var o=t(96540),i=t(39225),a=t(83199),s=t(22292),r=(t(9920),t(98992),t(3949),t(83957)),l=t(47444),c=t(7484),d=t(3914),u=t(46741);var m=t(90709),p=t(28738),h=t(87659),g=t(12938),f=t(45123),y=t(56915),b=t(69765),_=t(8711);const w=(0,_.default)(a.Drop).attrs({align:{top:"bottom",left:"left"},animation:!0,background:"dropdown",column:!0,margin:[2,0,0],overflow:{vertical:"auto"},padding:[2,0],round:1,width:64}).withConfig({displayName:"styled__Dropdown",componentId:"sc-1vwntsm-0"})([""]),v=(0,_.default)(a.H6).attrs({color:"text",padding:[2,4]}).withConfig({displayName:"styled__OtherRoomsHeader",componentId:"sc-1vwntsm-1"})([""]);var T=t(29217),k=t(80940),x=t(37944),P=t(64754),C=t(47731);const q=()=>{const e=(0,C.J)(),[n,t,,i]=(0,h.A)(),s=(0,o.useRef)(),r=(0,b.XA)(),{slug:l}=r,c=(0,d.ap)("name"),m=(0,x.A)({roomSlug:l}),p=(0,u.JT)("room:Read"),_=(0,d.dg)();return o.createElement(o.Fragment,null,o.createElement(a.Flex,{alignItems:"center",gap:1,"data-testid":"header-roomOptions"},o.createElement(f.A,{ref:s,testid:"roomDropdownMenu-roomOptions",icon:"space_new",onClick:t,padding:[2],round:1,width:"auto",disabled:!p||_,selected:n},!e&&r.name&&o.createElement(a.Flex,{alignItems:"center",gap:4},o.createElement(a.Text,null,r.name),o.createElement(a.Icon,{name:"chevron_down",size:"small",color:"text"}))),o.createElement(k.A,{borderColor:"borderSecondary",hasHoverBackground:!0},o.createElement(T.A,{align:"bottom",content:"Room settings"},o.createElement(P.A,{Component:a.IconButton,permission:"room:Leave","data-ga":"header::click-war-room-settings::global-view","data-testid":"header-manageWarRoom",onClick:m,icon:"gear"})))),s.current&&n&&o.createElement(w,{target:s.current,onEsc:i,onClickOutside:i},o.createElement(y.A,{isOpen:!0,label:"ROOMS IN ".concat(c.toUpperCase()),headerTestId:"roomDropdownMenu-otherRooms",Header:v},o.createElement(a.Flex,{onClick:i,column:!0,height:{max:100},overflow:{vertical:"auto"}},o.createElement(g.A,null)))))};var D=t(47762),A=t(49389);const S=e=>{let{description:n,title:t,testId:i,children:s}=e;return o.createElement(a.Flex,{"data-testid":i,column:!0,gap:2},o.createElement(a.H4,{color:"textDescription"},t),o.createElement(a.Flex,{column:!0,"data-testid":i,gap:2},o.createElement(a.Text,{color:"textDescription"},n),s))},M=e=>{let{children:n,testId:t,icon:i="nodes_update"}=e;return o.createElement(a.Flex,{"data-testid":t,padding:[6],round:1,width:"100%",background:"modalInfoBackground",gap:2},o.createElement(a.Box,{as:a.Icon,width:10,height:10,name:i}),n)},E=e=>{let{title:n,desciription:t}=e;return o.createElement(a.Flex,{column:!0,gap:3},o.createElement(a.Flex,{alignItems:"center",gap:2},o.createElement(a.Icon,{color:"main",name:"warning_triangle_hollow"}),o.createElement(a.H3,null,n)),o.createElement(a.Box,null,t))};var N=t(4659),R=(t(41393),t(14905),t(81454),t(8872),t(3296),t(27208),t(48408),t(47767)),H=(t(8159),t(37550),t(33931)),I=t(82432),O=t(81881),L=t(55905);const U=[{id:"name",accessor:"name",header:"Name",cell:e=>{let{getValue:n,row:t}=e;return o.createElement(N.A,{disabled:!t.original.isLive&&"stale"!==t.original.state,color:"text",hoverColor:"primary",visitedColor:"accent",Component:a.TextSmall},n())},minSize:60},{id:"version",accessor:"version",header:"Version",cell:e=>{let{getValue:n}=e;return o.createElement(a.Pill,{color:"neutralPillColor",flavour:"neutral"},n())}},{id:"state",accessor:"state",header:"Status",cell:e=>{let{getValue:n}=e;return o.createElement(H.A,{state:n()})},sortingFn:(e,n)=>{return t=(0,I.GM)(e.original.state),o=(0,I.GM)(n.original.state),t===o?0:t>o?1:-1;var t,o},enableColumnFilter:!0,filterFn:(e,n,t)=>{const o=e.original;return t.length<1||t.some((e=>{let{value:n}=e;return"all"===n||n===(0,I.GM)(o.state)}))},meta:{tooltip:o.createElement(O.A,null),filter:{component:"select",isMulti:!0,options:[{value:"Offline",label:"Offline"},{value:"Live",label:"Live"},{value:"Stale",label:"Stale"}]}}},{id:"updateSeverity",accessor:"updateSeverity",header:"Severity",cell:e=>{let{getValue:n,row:t}=e;const i=t.original;return o.createElement(L.A,{name:i.name,os:i.os.id,container:i.hw.container,warningLevel:i.updateSeverity,labels:i.labels||{},version:i.version,text:n()})}}],B=(0,l.eU)({key:"notificationModal",default:!1}),j=function(){let{resetOnUnmount:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,l.E0)(B),[t,i]=(0,l.L4)(B),a=(0,o.useCallback)((()=>i(!0)),[]),s=(0,o.useCallback)((()=>i(!1)),[]);return(0,o.useEffect)((()=>()=>{e&&n()}),[]),{isModalVisible:t,openModal:a,closeModal:s,resetState:n}},G=[{id:"updateSeverity",desc:!1}],F=()=>{const{closeModal:e}=j(),n=(0,o.useMemo)((()=>({goto:{handleAction:e=>{const{_install_type:n=null}=(null===e||void 0===e?void 0:e.labels)||{},{hw:{container:t},os:{id:o},version:i}=e,a=(0,A.fe)({container:t,os:o,_install_type:n,version:i});window.open(a,"_blank","noopener,noreferrer")},tooltipText:"Go to documentation"}})),[]),t=e=>e.reduce(((e,n)=>e+n.join(",")+"\n"),""),i=(0,o.useMemo)((()=>({download:{handleAction:(e,n)=>{let o=[n.getFlatHeaders().map((e=>e.id))];n.getRowModel().rows.forEach((e=>{o.push(n.getFlatHeaders().map((n=>e.renderValue(n.id))))}));const i=window.URL.createObjectURL(new Blob([t(o)],{type:"text/csv;charset=utf-8;"})),a=document.createElement("a");a.href=i;a.setAttribute("download","Outdated nodes.csv"),document.body.appendChild(a),a.click(),a.remove()},isDisabled:!1,tooltipText:"Download as CSV",icon:"download",confirmation:!1,alwaysEnabled:!0}})),[]),a=(0,R.Zp)(),s=(0,D.Ux)();return{onClickRow:(0,o.useCallback)((n=>{let{data:t}=n;if(!t.isLive&&"stale"!==t.state)return;const o=s(t.id);a(o),e()}),[]),sortBy:G,rowActions:n,columns:U,disableClickRow:e=>{let{data:n}=e;return!n.isLive&&"stale"!==n.state},bulkActions:i}};var z=t(60383);const Y={updateSeverity:!0,connectionToCloud:!1},X=e=>{let{data:n}=e;const{bulkActions:t,rowActions:i,onClickRow:a,disableClickRow:s,sortBy:r}=F();return o.createElement(z.A,{"data-testid":"nodesTable-layout",customSortBy:r,customNodes:n,showDefaultRowActions:!1,showDefaultBulkActions:!1,columnVisibility:Y,customRowActions:i,customBulkActions:t,enableSelection:!1,onClickRow:a,disableClickRow:s})},W=e=>{let{onClose:n}=e;const t=(0,D.Gn)(),i=(0,D.Gt)(t),s=t.length,r="Need update (".concat(t.length," ").concat((0,A.su)(t.length),")");return o.createElement(a.Modal,{backdropProps:{backdropBlur:!0}},o.createElement(a.ModalContent,{width:{min:200,base:270},height:200},o.createElement(a.ModalHeader,null,o.createElement(E,{title:"Nodes that need Attention",desciription:o.createElement(a.Text,null,"You have ",o.createElement(a.Text,{strong:!0},s)," ",(0,A.su)(s)," that should be upgraded to ensure experience using Netdata")}),o.createElement(a.ModalCloseButton,{onClose:n,testId:"close-button"})),o.createElement(a.ModalBody,{overflow:"hidden"},o.createElement(M,null,o.createElement(S,{title:r},o.createElement(a.Text,null,o.createElement(a.Flex,{column:!0},o.createElement(a.Text,null,"Please upgrade to ensure you get the latest security and bug fixes.")," ",o.createElement(a.Box,null,"To update your nodes to the latest version"," ",o.createElement(N.A,{href:A.sH.default,rel:"noopener noreferrer",strong:!0,target:"_blank"},"please read our documentation"," "),"and find direct links for each node depending on where it is running and/or how it was installed."))))),o.createElement(X,{data:i}))))};var K=t(45467),$=t(57605),V=t(51112),Z=t(22332),J=t(99851),Q=t(27467);const ee=e=>{let{tagging:n,isPlaying:t}=e;const i=(0,C.J)(),[{offset:a,after:s,before:r},l]=(0,Q.N9)(),c=(0,o.useCallback)((e=>{let{start:n=-900,end:t=0}=e;l({after:n,before:n<0?0:t})}),[]),d=(0,o.useMemo)((()=>({start:s<0?s:Math.floor(s),end:s<0?0:Math.ceil(r)})),[s,r]);return o.createElement(J.A,{values:d,utc:a,onChange:c,tagging:n,isPlaying:t,isSmall:i})},ne=(0,_.default)(a.Flex).withConfig({displayName:"container__Container",componentId:"sc-qc13l0-0"})(["background:",";"],(e=>{let{theme:n,isPlaying:t}=e;const{name:o}=n;return("Dark"===o?(0,a.getRgbColor)(t?["green","green40"]:["neutral","grey70"]):(0,a.getRgbColor)(t?["green","green190"]:["neutral","grey185"]))({theme:n})}));var te=t(94944);const oe=(0,_.default)(T.A).withConfig({displayName:"playPausePill__StyledTooltip",componentId:"sc-1umryvu-0"})(["pointer-events:",";"],(e=>{let{isDisabled:n}=e;return n?"none":"auto"})),ie=e=>{let{isPlaying:n,isForcePlaying:t,isDisabled:i}=e;const s=(0,C.J)(),{play:r,pause:l}=(0,te.A)(),c=(0,o.useMemo)((()=>((e,n)=>e?n?"forcePlay":"playSolid":"pauseSolid")(n,t)),[n,t]);return o.createElement(oe,{content:n?"Click to pause":"Click to play",align:"bottom",isDisabled:i},o.createElement(a.Box,{as:a.Pill,icon:c,onClick:n?l:r,isPlaying:n,"data-testid":"playPause-button",flavour:n?"success":"neutral",_hover:{background:n?"accent":"neutralPillColor"}},s?null:n?"Playing":"Paused"))},ae=(0,_.default)(a.Flex).attrs({padding:[1],role:"button"}).withConfig({displayName:"styled__MenuButton",componentId:"sc-3h0zgs-0"})(["cursor:pointer;"]),se=(0,_.default)(a.Drop).attrs({align:{top:"bottom",left:"left"},animation:!0,backdrop:!0,column:!0,padding:[2,0],background:"dropdown",round:1,overflow:{vertical:"auto"},margin:[.5,0,0],width:40}).withConfig({displayName:"styled__Dropdown",componentId:"sc-3h0zgs-1"})([""]),re=(0,_.default)(T.A).withConfig({displayName:"styled__StyledTooltip",componentId:"sc-3h0zgs-2"})(["pointer-events:",";"],(e=>{let{isDisabled:n}=e;return n?"none":"auto"})),le=e=>{let{target:n,isDisabled:t}=e;const[i,s,,r]=(0,h.A)(),{play:l,pause:c,forcePlay:d}=(0,te.A)();return o.createElement(o.Fragment,null,i?o.createElement(ae,{onClick:s,width:"auto","data-testid":"playOptions-picker"},o.createElement(a.Icon,{name:"chevron_down",color:"text",width:"12px",height:"12px"})):o.createElement(re,{content:"Play to refresh and have live content, pause to see historical, or force play to keep refreshing even when the tab loses focus at the expense of some system performance.",align:{bottom:"bottom",right:"right"},isDisabled:t,plain:!0},o.createElement(ae,{onClick:s,width:"auto","data-testid":"playOptions-picker"},o.createElement(a.Icon,{name:"chevron_down",color:"text",width:"12px",height:"12px"}))),n.current&&i&&!t&&o.createElement(se,{target:n.current,onEsc:r,onClickOutside:r},o.createElement(f.A,{icon:"playOutline",onClick:()=>{l(),r()},testid:"playOptions-play"},"Play"),o.createElement(f.A,{icon:"pauseOutline",onClick:()=>{c(),r()},testid:"playOptions-pause"},"Pause"),o.createElement(f.A,{icon:"forcePlayOutline",onClick:()=>{d(),r()},testid:"playOptions-forcePlay"},"Force Play")))},ce=(0,o.memo)(le),de=()=>{const e=(0,C.J)(),n=(0,V.yD)(),t=(0,V.mQ)(),i=(0,V.A_)(),a=(0,o.useRef)(),s=(0,V.gC)(),r=(0,Z.useAttributeValue)("autofetchOnWindowBlur"),l=(0,$.A)();return(0,K.A)((()=>{l(!!n||!!t)}),[n,t]),o.createElement(k.A,{hasBorder:!0,borderColor:"border",testId:"global-controls"},o.createElement(ne,{isPlaying:s,padding:e?[1]:[1,2],round:!0,height:"100%",alignItems:"center",gap:e?.2:1,isDisabled:n,ref:a},o.createElement(ie,{isPlaying:s,isForcePlaying:r,isDisabled:n||t}),o.createElement(ce,{target:a,isDisabled:n||t}),!i&&o.createElement(ee,{isPlaying:s,tagging:"global-view"})))};var ue=t(67990),me=t(37618);const pe=e=>{let{toggle:n,upToDate:t,hasBorder:i}=e;return o.createElement(k.A,{borderColor:"borderSecondary",hasHoverBackground:!0,hasBorder:i,"data-testid":"cloud-app-news"},o.createElement(T.A,{content:"News & Announcements",align:"bottom"},o.createElement(a.IconButton,{icon:"insights",iconColor:t?"text":"attention",onClick:n,"data-ga":"news::click-news::global-view",neutral:t})))},he=()=>{const e=(0,ue.CK)().length>0;return o.createElement(a.News,{app:me.Ay?(0,me.I)()?"agent":["cloud","agent"]:"cloud"},(n=>{let{toggle:t,upToDate:i}=n;return o.createElement(pe,{toggle:t,upToDate:i,hasBorder:!e})}))};var ge=t(11261),fe=(t(93514),t(5396)),ye=t(78969),be=t(65566),_e=t(75542);const we={warning:{background:"warningBackground",isDismissable:!0,icon:"warning_triangle_hollow",iconColor:"warning"},critical:{background:"errorBackground",isDismissable:!0,icon:"warning_triangle_hollow",iconColor:"error"}},ve=e=>{let{iconColor:n,icon:t,warningLevel:i,numberOfNodesWithCriticalSeverity:s,onClickUpdate:r}=e;return o.createElement(a.Flex,{justifyContent:"center",alignItems:"center",width:"100%",gap:2},o.createElement(a.Icon,{"data-testid":"icon-banner-agent-outdated-".concat(i),color:n,name:t})," ",o.createElement(a.Text,{"data-testid":"text-agent-outdated-".concat(i),color:"main"},s," ",(0,A.su)(s)," ",s>1?"are":"is"," below recommend agent version"," ",ye.Qy,"."," ",o.createElement(a.Box,{"data-testid":"open-add-node",onClick:r,as:a.Text,cursor:"pointer",textDecoration:"underline",color:"main"},"Please update them")," ","to ensure you get the latest security bug fixes."))},Te=e=>{let{warningLevel:n,numberOfNodesWithCriticalSeverity:t,onClose:i,onClickUpdate:a}=e;const{background:s,isDismissable:r,icon:l,iconColor:c}=we[n],u=(()=>{const{id:e}=(0,_e.A)(),n=(0,d.vt)(),t=(0,D.Gn)(),i=(0,D.Gt)(t),a=Object.entries(i.reduce(((e,n)=>{let{version:t}=n;return{...e,[t]:(e[t]||0)+1}}),{})).flat().join("_");return(0,o.useCallback)((()=>"dismissed-agent-version-manager-banner-".concat(e,"-").concat(n,"-").concat(a)),[e,n,a])})(),{dismissed:m,onClose:p}=(0,be.A)({getLocalStorageKey:u,logKey:"AgentVersionManagerDissmiss"}),h=(0,o.useCallback)((()=>{p(),i&&i()}),[p]);return m?null:o.createElement(fe.A,{background:s,onClose:r?h:null},o.createElement(ve,{iconColor:c,icon:l,warningLevel:n,numberOfNodesWithCriticalSeverity:t,onClickUpdate:a}))},ke=()=>{const{openModal:e}=j(),n=(0,D.Gn)({severity:"critical"}).length;return n?o.createElement(Te,{numberOfNodesWithCriticalSeverity:n,warningLevel:"critical",onClickUpdate:e}):o.createElement(o.Fragment,null)},xe=e=>{let{onOpenModalClick:n}=e;const t=(0,D.Gn)({severity:"critical"}).length,i=(0,D.Gn)().length;return i?o.createElement(k.A,{borderColor:"borderSecondary",cursor:"pointer",testId:"update-netdata-version-menu-item",hasBorder:!1,padding:[2,0]},o.createElement(a.Pill,{"data-testid":"update-netdata-version-badge",flavour:t?"error":"warning",icon:"warning_triangle_hollow",hollow:!0,onClick:n},i)):null};var Pe=t(15255),Ce=t(40982),qe=t(68741),De=t(47431);const Ae={offline:{icon:"switch_off",color:"attention",text:"Offline"},online:{icon:"checkmark_s",color:"primary",text:"Online"}},Se=()=>{const e=(0,d.dg)(),n=(0,s.uW)("isAnonymous"),[{canBeClaimed:t,cloudStatus:i}]=(0,Pe.RJ)();if(n)return o.createElement(qe.A,null);if(!e)return o.createElement(De.A,null);if(Ae[i]){const{icon:e,color:n,text:t}=Ae[i];return o.createElement(a.Flex,{alignItems:"center",gap:1},o.createElement(a.Icon,{name:e,color:n,width:"14px",height:"14px"}),o.createElement(a.TextSmall,{color:n},t))}return t?o.createElement(Ce.A,null):null},Me=(0,i.A)((()=>Promise.all([t.e(7144),t.e(7857),t.e(8239),t.e(9473),t.e(9292),t.e(6469)]).then(t.bind(t,62727))),"NodesIndicator"),Ee=()=>{const e=(0,C.J)(),{isModalVisible:n,closeModal:t,openModal:i}=j();return o.createElement(o.Fragment,null,o.createElement(ke,null),o.createElement(a.Flex,{as:"header","data-testid":"header",padding:e?[1]:[2],justifyContent:"between",alignItems:"center",height:12,position:"sticky",background:"topBarBg",zIndex:5,overflow:{horizontal:"auto"}},n&&o.createElement(W,{onClose:t}),o.createElement(q,null),o.createElement(a.Flex,{alignItems:"center","data-testid":"header-features",gap:e?1:3},!window.envSettings.onprem&&o.createElement(he,null),o.createElement(de,null),o.createElement(o.Suspense,{fallback:o.createElement(ge.q,{disabled:!0})},o.createElement(Me,null)),o.createElement(Se,{margin:[0,1,0,0],padding:[2,4]}),o.createElement(xe,{onOpenModalClick:i}))))};var Ne=t(74293);const Re=(0,_.default)(a.Flex).withConfig({displayName:"layout__UserControlContainer",componentId:"sc-18en99b-0"})(["bottom:0;left:0;"]),He=e=>{let{children:n}=e;return o.createElement(a.Flex,{width:"100vw",height:"100vh",column:!0,justifyContent:"center",alignItems:"center",background:"mainBackground",position:"relative"},n,o.createElement(Re,{position:"absolute",padding:[4]},o.createElement(Ne.A,null)))},Ie=(0,_.keyframes)(["from{opacity:0.4;}to{opacity:1;}"]),Oe=(0,_.default)(a.Icon).withConfig({displayName:"loading__StyledIcon",componentId:"sc-11p1wp-0"})(["width:208px;height:177px;animation:"," 1.6s ease-in infinite;"],Ie),Le=()=>o.createElement(o.Fragment,null,o.createElement(Oe,{name:"netdata",color:"primary",title:"Loading","data-testid":"spaceCreationLoading-logo"}),o.createElement(a.H3,{color:"text",margin:[1,0,0]},"We are attempting to create your space but the system is currently busy."),o.createElement(a.Text,{color:"text",margin:[4.5,0,0]},"Thank you for your patience!"));var Ue=t(72641);const Be=()=>{const e=(0,s.NJ)(),n=(0,s.uW)("email"),[t,i]=(0,o.useState)(!1),r=(0,o.useCallback)((()=>i(!1)),[]),l=(0,Ue.A)({onSuccess:r,onError:r,isDefault:!0}),c=(0,o.useCallback)((()=>{i(!0),l({userId:e,email:n})}),[e,n]);return o.createElement(a.Flex,{column:!0,gap:6,alignItems:"center"},o.createElement(a.Flex,{column:!0,gap:2,alignItems:"center"},o.createElement(a.H3,{color:"text"},"There was a problem with automatically creating your space"),o.createElement(a.Text,{color:"text"},"Please try again below")),o.createElement(a.Button,{label:"Continue",isLoading:t,onClick:c}))},je=()=>{const[e,n]=(0,o.useState)(!0);return(0,o.useEffect)((()=>{const e=setTimeout((()=>n(!1)),1e4);return()=>clearTimeout(e)}),[]),o.createElement(He,null,e?o.createElement(Le,null):o.createElement(Be,null))};var Ge=t(43529);const Fe=()=>o.createElement(a.Flex,{background:"sideBarMini","data-testid":"workspaceBar",padding:[3,2],column:!0,alignItems:"center",gap:6,height:"100vh",justifyContent:"between"},o.createElement(Ge.A,{"data-testid":"workspaceBar-netdataLogo"}));var ze=t(69418),Ye=t(29848);const Xe=(0,i.A)((()=>t.e(934).then(t.bind(t,60934))),"AlertConfigurationManagement"),We=(0,i.A)((()=>Promise.all([t.e(7436),t.e(7170)]).then(t.bind(t,57436)).then((e=>({default:e.TrialWarning})))),"TrialWarning"),Ke=(0,i.A)((()=>Promise.all([t.e(6384),t.e(8505)]).then(t.bind(t,8505))),"OnPremWarning"),$e=(0,i.A)((()=>t.e(5426).then(t.bind(t,45426))),"AgentNotSecure"),Ve=(0,i.A)((()=>t.e(4680).then(t.bind(t,84680))),"SpaceSidebar"),Ze=(0,i.A)((()=>Promise.all([t.e(6323),t.e(5700)]).then(t.bind(t,95700))),"Modals"),Je=(0,i.A)((()=>t.e(5246).then(t.bind(t,75246))),"AcceptTermsDialog"),Qe=(0,i.A)((()=>Promise.all([t.e(7144),t.e(7857),t.e(1220),t.e(3455),t.e(8239),t.e(9473),t.e(9292),t.e(3843)]).then(t.bind(t,41198))),"SpacePages"),en=(0,i.A)((()=>t.e(4034).then(t.bind(t,24034))),"DndContext"),nn=(0,i.A)((()=>t.e(1782).then(t.bind(t,1782))),"AgentBanner"),tn=(0,i.A)((()=>Promise.all([t.e(8239),t.e(252)]).then(t.bind(t,11726))),"DynamicConfigurationModal"),on=(0,o.memo)((()=>{const{isIntegrationsPath:e}=(0,ze.Q)(),n=(0,Ye.Hs)();return o.createElement(en,null,o.createElement(a.Flex,{overflow:"hidden",height:"100vh",width:"100vw"},o.createElement(o.Suspense,{fallback:o.createElement(Fe,null)},o.createElement(Ve,null)),o.createElement(a.Flex,{column:!0,position:"relative",overflow:"hidden",flex:!0},o.createElement(o.Suspense,{fallback:""},o.createElement(We,null),o.createElement(nn,null)),!n&&!e&&o.createElement(Ee,null),o.createElement(a.Flex,{column:!0,as:"main",background:"mainBackground",flex:!0,basis:"100%",height:"100%",overflow:"hidden"},o.createElement(o.Suspense,{fallback:o.createElement(p.A,{title:"Loading your space..."})},o.createElement(Qe,null))),o.createElement(o.Suspense,{fallback:""},o.createElement(Ke,null),o.createElement($e,null))),o.createElement(o.Suspense,{fallback:""},o.createElement(Ze,null),o.createElement(Je,null)),o.createElement(Xe,null),o.createElement(tn,null)))})),an=e=>{let{isUserLoaded:n}=e;!function(){let{isUserLoaded:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,l.Zs)((e=>{let{set:n}=e;return e=>{let{results:t}=e;n((0,d.Jn)(),t),t.forEach((e=>{let{id:t,permissions:o}=e;n((0,u.Dk)(t),o)}))}}),[]);(0,r.A)((()=>({key:"spaces",cache:!1,autorun:!!e,fetch:c.EL,association:{getIds:()=>(0,d.nC)("ids"),getError:()=>(0,d.nC)("error"),getLoaded:()=>(0,d.nC)("loaded"),getUpdatedAt:()=>(0,d.nC)("updatedAt")},getResource:e=>(0,d.U2)({id:e}),onReceive:n,pollingOptions:{pollingInterval:412e3}})),[!!e])}({isUserLoaded:n}),(0,m.A)();const t=(0,d.Pk)(),i=(0,d.UV)("loaded"),a=(0,d.UV)("error"),h=(0,s.uW)("isAnonymous");if(!n||!a&&!h&&!i)return o.createElement(p.A,{title:"Loading your space..."});const g=t.length;if(a&&!g)throw a;return me.Ay||h||g?o.createElement(on,null):o.createElement(je,null)}},43529:(e,n,t)=>{t.d(n,{A:()=>s});var o=t(58168),i=t(96540),a=t(83199);const s=e=>i.createElement(a.Icon,(0,o.A)({name:"netdataPress",color:"success",height:"32px",width:"32px"},e))},36091:(e,n,t)=>{t.d(n,{A:()=>d});var o=t(58168),i=t(96540),a=t(13083),s=t(83199);const r=()=>i.createElement(s.Text,null,"Something went wrong during document parsing"),l=e=>n=>{let{transformConfiguration:t={},validationConfig:s={},validate:l,errorComponent:c,children:d,...u}=n;const{tree:m,errors:p}=(e=>{let{markdocContent:n,validate:t,validationConfig:o,transformConfiguration:s}=e;return(0,i.useMemo)((()=>{const e=a.Ay.parse("string"===typeof n?n:"");let i=[];return t&&(i=a.Ay.validate(e,o)),{tree:i.length?null:a.Ay.transform(e,s),errors:i}}),[n,t,o,s])})({markdocContent:d,validate:l,validationConfig:s,transformConfiguration:t}),h=c&&"function"==typeof c?c:r;return p.length?i.createElement(h,{errors:p}):i.createElement(e,(0,o.A)({tree:m},u))},c=(0,i.memo)(l((e=>{let{tree:n,renderConfiguration:t}=e;return a.Ay.renderers.react(n,i,t)}))),d=(l((e=>{let{tree:n}=e;return a.Ay.renderers.html(n)})),c)},45123:(e,n,t)=>{t.d(n,{A:()=>m,G:()=>c});var o=t(58168),i=t(96540),a=t(8711),s=t(83199),r=t(47767);const l=e=>e?"selected":"modalBackground",c=(0,a.default)(s.Flex).withConfig({displayName:"item__PanelRowContainer",componentId:"sc-lf007z-0"})(["cursor:pointer;&:hover{background:",";}",""],(e=>(0,s.getColor)(l(e.isSidebar))(e)),(e=>e.selected&&"background: ".concat((0,s.getColor)(l(e.isSidebar))(e),";"))),d=(0,a.default)(s.Icon).withConfig({displayName:"item__StyledIcon",componentId:"sc-lf007z-1"})(["flex:0 0 auto;"]),u=(0,a.default)(s.IconComponents.LoaderIcon).withConfig({displayName:"item__StyledLoaderIcon",componentId:"sc-lf007z-2"})(["flex:0 0 auto;height:16px;width:16px;"]),m=(0,i.forwardRef)(((e,n)=>{let{disabled:t,children:a,Wrapper:l=s.Text,textProps:m,to:p="",onClick:h,testid:g,icon:f,iconHeight:y="16px",iconWidth:b="16px",iconColor:_="menuItem",textColor:w="menuItem",padding:v=[2,4],margin:T=[0],round:k=0,gap:x=3,actions:P,selected:C,loading:q,width:D="100%",isSidebar:A=!1,isSecondary:S,...M}=e;const E=(0,r.Zp)(),N=(0,i.useCallback)((()=>{t||(h&&h(),p&&E(p))}),[h,t,p]),R=M["data-ga"]||"";return i.createElement(c,(0,o.A)({ref:n,flexWrap:!1,justifyContent:"between",alignItems:"center",padding:v,margin:T,round:k,onClick:N,"data-testid":g,width:D,selected:C,disabled:t,isSidebar:A},R&&{"data-ga":R}),i.createElement(s.Flex,{alignItems:"center",gap:x,flex:!0,basis:""},q?i.createElement(u,null):"string"===typeof f?i.createElement(d,{name:f,disabled:t,color:_,height:y,width:b}):f,!!a&&i.createElement(l,(0,o.A)({opacity:t?"medium":void 0,width:"150px",color:w,italic:S},m),a)),P)}))},56915:(e,n,t)=>{t.d(n,{A:()=>c,N:()=>r});var o=t(58168),i=t(96540),a=t(8711),s=t(83199);const r=(0,a.default)(s.H4).attrs({padding:[0,2],background:"error"}).withConfig({displayName:"list__DefaultListHeader",componentId:"sc-5df7lw-0"})(["cursor:pointer;pointer-events:",";"],(e=>{let{disabled:n}=e;return n?"none":"auto"})),l=e=>{let{disabled:n,toggleOpen:t,label:o,testid:a,Header:s=r}=e;return i.createElement(s,{"data-testid":a,onClick:t,opacity:n?"medium":void 0,disabled:n},o)},c=e=>{let{disabled:n,isOpen:t=!1,toggleOpen:a,label:r,children:c,headerTestId:d,Header:u,...m}=e;return i.createElement(s.Flex,(0,o.A)({column:!0},m),i.createElement(l,{disabled:n,Header:u,toggleOpen:a,label:r,testid:d}),i.createElement(s.Collapsible,{open:t},c))}},55905:(e,n,t)=>{t.d(n,{A:()=>u});var o=t(58168),i=t(96540),a=t(83199),s=t(78969),r=t(49389),l=t(80158);const c={warning:{icon:"warning_triangle_hollow",flavour:"warning",reccomendedVersion:s.fx,warningText:"is below the latest stable agent version"},critical:{icon:"warning_triangle_hollow",flavour:"error",reccomendedVersion:s.Qy,warningText:"is below the recommend agent version"}},d=e=>{let{icon:n,iconColor:t,warningLevel:o,handeleNavigateToDocs:s,message:r}=e;return i.createElement(a.Flex,{column:!0,width:{max:"200px"},gap:2},i.createElement(a.Flex,{alignItems:"center",gap:2},i.createElement(a.Icon,{name:n,color:t}),i.createElement(a.TextMicro,null,(0,l.Zr)(o))),i.createElement(a.Flex,{column:!0,gap:2},i.createElement(a.TextMicro,null,r),i.createElement(a.TextMicro,{"data-testid":"text-agent-outdated-critical"},i.createElement(a.Box,{"data-testid":"open-add-node",onClick:s,as:a.TextMicro,cursor:"pointer",textDecoration:"underline"}," ","Please update them"," "),"to ensure you get the latest security bug fixes.")))},u=e=>{let{warningLevel:n,text:t="Needs Update",container:s,os:u,name:m,labels:p,version:h,...g}=e;const{icon:f,flavour:y,hollow:b,reccomendedVersion:_,iconColor:w,warningText:v}=c[n],T=(0,i.useCallback)((()=>{const e=(0,r.fe)({container:s,os:u,version:h,...p});window.open(e,"_blank","noopener,noreferrer")}),[s,u]),k="".concat(m," ").concat(v," ").concat(_);return i.createElement(a.Tooltip,{allowHoverOnTooltip:!0,content:i.createElement(d,{message:k,icon:f,iconColor:w,warningLevel:n,handeleNavigateToDocs:T})},i.createElement(a.Pill,(0,o.A)({icon:f,flavour:y,hollow:b},g),(0,l.Zr)(t)))}},33931:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(96540),i=t(82432),a=t(78969),s=t(83199);const r=e=>{let{state:n,rawState:t}=e;const r=t||(0,i.GM)(n),{flavour:l}=a.J4[r.toLocaleLowerCase()];return o.createElement(s.Pill,{flavour:l},r)}},81881:(e,n,t)=>{t.d(n,{A:()=>a});var o=t(96540),i=t(83199);const a=()=>o.createElement(i.Flex,{column:!0,width:{max:"200px"},gap:2},o.createElement(i.TextMicro,null,o.createElement(i.TextMicro,{strong:!0},"Live:")," Node is actual collecting and streaming metrics to Netdata"),o.createElement(i.TextMicro,null,o.createElement(i.TextMicro,{strong:!0},"Stale:")," Node is currently offline and not streaming metrics to Netdata. It can show historical data from a parent node"),o.createElement(i.TextMicro,null,o.createElement(i.TextMicro,{strong:!0},"Offline:")," Node is currently offline, not streaming metrics to Netdata and not available in any parent node"),o.createElement(i.TextMicro,null,o.createElement(i.TextMicro,{strong:!0},"Unseen:")," Nodes have never been connected to Netdata, they are claimed but no successful connection was established"))},83084:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(58168),i=t(96540),a=t(83199),s=t(76051);const r=(0,i.forwardRef)(((e,n)=>{let{children:t,containerProps:r,sidebar:l=null,blurred:c,blurProps:d,BlurredContent:u,widthAuto:m=!1,...p}=e;return i.createElement(a.Flex,(0,o.A)({id:"main",height:"100%",width:m?"auto":"100%",position:"relative",overflow:"hidden",flex:"1"},r),i.createElement(a.Flex,(0,o.A)({column:!0,overflow:"hidden",width:m?"auto":"100%"},p,{ref:n}),t),l,c&&i.createElement(s.I1,d,u?i.createElement(u,null):null))}))},76634:(e,n,t)=>{t.d(n,{A:()=>i});var o=t(46741);const i=e=>{let{permission:n,spaceId:t,children:i}=e;return(0,o.JT)(n,t)?i:null}},64754:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(58168),i=t(96540),a=t(83199),s=t(46741);const r=(0,i.forwardRef)(((e,n)=>{let{ifForbidden:t="disabled",permission:r,spaceId:l,Component:c=a.Button,...d}=e;const u=(0,s.JT)(r,l);return"hide"!==t||u?i.createElement(c,(0,o.A)({ref:n,disabled:"disabled"===t&&!u||d.disabled},d)):null}))},53285:(e,n,t)=>{t.d(n,{A:()=>s});var o=t(58168),i=t(96540),a=t(46741);const s=e=>{let{Component:n,ifForbidden:t="disabled",permission:s,children:r,spaceId:l,...c}=e;const d=(0,a.JT)(s,l);return"hide"!==t||d?"function"===typeof r?r(d):n?i.createElement(n,(0,o.A)({},c,{disabled:"disabled"===t&&!d||c.disabled})):r:null}},32089:(e,n,t)=>{t.d(n,{A:()=>s});var o=t(58168),i=t(96540),a=t(83199);const s=e=>{let{vertical:n,color:t="borderSecondary",...s}=e;return i.createElement(a.Box,(0,o.A)({as:"hr",height:n?"100%":"1px"},n?{}:{width:"100%"},{sx:{borderWidth:n?"0px 0px 0px 1px":"1px 0px 0px 0px",borderColor:t,borderStyle:"solid"}},s))}},57375:(e,n,t)=>{t.d(n,{t:()=>a});var o=t(8711),i=t(83199);const a=(0,o.default)(i.Flex).attrs((e=>({padding:[3,3,0],width:"100%",background:"modalTabsBackground",...e}))).withConfig({displayName:"tabs__TabHeader",componentId:"sc-1ramyo4-0"})([""])},23630:(e,n,t)=>{t.d(n,{A:()=>r});t(62953);var o=t(96540),i=t(67742),a=t(83199),s=t(33222);const r=e=>{let{text:n,updatedAt:t,error:r}=e;const[,l]=(0,o.useState)(),c=(e=>{if(!e)return"";const n=new Date(e);return n.getTime()?(0,s.A)(n,new Date):""})(t);return(0,i.A)((()=>l(Math.random())),1e3),o.createElement(a.Flex,{column:!0,gap:3},o.createElement(a.TextSmall,{color:"tooltipText"},n),r&&o.createElement(a.Flex,{alignItems:"center",gap:2},o.createElement(a.Icon,{width:14,height:12,color:"text",name:"warning_triangle"}),o.createElement(a.TextSmall,null,"Error: ",c?"Data not updated":"No data")),c&&o.createElement(a.TextMicro,null,o.createElement(a.TextMicro,{color:"tooltipText"},"Last updated: "),c))}},83179:(e,n,t)=>{t.d(n,{A:()=>l});var o=t(58168),i=(t(17333),t(41393),t(98992),t(54520),t(81454),t(96540)),a=t(83199),s=t(14994);const r={closeMenuOnSelect:!1,backspaceRemovesValue:!1,isClearable:!1,blurInputOnSelect:!0,captureMenuScroll:!0,isMulti:!0},l=e=>{let{selectedValue:n,onChange:t,formatOptions:l,filterValues:c,placeholder:d="search..."}=e;const u=(0,s.DL)(),m=(0,i.useMemo)((()=>u.map((e=>{let{id:n,name:t}=e;return{label:t,value:n,...l&&l({id:n,name:t})}}))),[u,l]),p=(0,i.useMemo)((()=>m.filter((e=>{let{label:t,value:o}=e;return n.includes(o)||c&&c({label:t,value:o})}))),[m,n,c]),h=(0,i.useCallback)((e=>{const n=e.map((e=>{let{value:n}=e;return n}));t(n)}),[t]);return i.createElement(a.Select,(0,o.A)({placeholder:d},r,{options:m,value:p,onChange:h}))}},25950:(e,n,t)=>{t.d(n,{U:()=>i,u:()=>a});t(14905),t(98992),t(8872);const o=[{iconName:"osAlpineLinux",logoFilename:"alpine.svg",name:"alpine",osNames:["Alpine Linux"],title:"Alpine Linux"},{iconName:"osAmazonLinux",logoFilename:"linux.svg",name:"linux",osNames:["Amazon Linux","Amazon Linux AMI"],title:"Amazon Linux"},{iconName:"osArchLinux",logoFilename:"arch.svg",name:"archarm",osNames:["Archcraft","Arch Linux","Arch Linux 32","Arch Linux ARM","ArchLabs","ArchLinux"],title:"Arch Linux"},{iconName:"osCentos",logoFilename:"centos.svg",name:"centos",osNames:["CentOS","CentOS Linux","CentOS Stream"],title:"CentOS"},{iconName:"osCoreOS",logoFilename:"coreos.svg",name:"coreos",osNames:["Container Linux by CoreOS"],title:"CoreOS"},{iconName:"osDebian",logoFilename:"debian.svg",name:"debian",osNames:["Debian GNU/Linux"],title:"Debian"},{iconName:"osFedora",logoFilename:"fedora.svg",name:"fedora",osNames:["Fedora","Fedora Linux","Fedora Remix for WSL"],title:"Fedora"},{iconName:"osFreeBSD",logoFilename:"freebsd.svg",name:"freebsd",osNames:["FreeBSD"],title:"FreeBSD"},{iconName:"serviceFreeNAS",logoFilename:"freenas.svg",name:"freenas",osNames:[],title:"FreeNAS"},{iconName:"osGentoo",logoFilename:"gentoo.svg",name:"gentoo",osNames:["Gentoo"],title:"Gentoo"},{iconName:"serviceKubernetes",logoFilename:"kubernetes.svg",name:"kubernetes",osNames:[],title:"Kubernetes"},{iconName:"osLinux",logoFilename:"linux.svg",name:"linux",osNames:[],title:"Linux"},{iconName:"osMacOSX",logoFilename:"macos.svg",name:"macos",osNames:["mac"],title:"MacOS"},{iconName:"osMacOSX",logoFilename:"macos.svg",name:"mac",osNames:["mac"],title:"MacOS"},{iconName:"osLinuxManjaro",logoFilename:"manjaro.svg",name:"manjaro",osNames:["Manjaro Linux","Manjaro-ARM"],title:"Manjaro"},{iconName:"serviceOpenStack",logoFilename:"openstack.svg",name:"openstack",osNames:[],title:"OpenStack"},{iconName:"osSuseLinux",logoFilename:"opensuse.svg",name:"opensuse",osNames:["openSUSE","openSUSE Leap","openSUSE Leap Micro","openSUSE MicroOS","openSUSE Tumbleweed"],title:"Open Suse"},{iconName:"serviceOpenWrt",logoFilename:"openwrt.svg",name:"openwrt",osNames:["OpenWrt"],title:"OpenWRT"},{iconName:"osOracle",logoFilename:"oracle.svg",name:"oracle",osNames:["Oracle Linux Server"],title:"Oracle Linux"},{iconName:"servicePfSense",logoFilename:"pfsense.svg",name:"pfsense",osNames:[],title:"PFSense"},{logoFilename:"raspberry-pi.svg",name:"raspberry-pi",osNames:[],title:"Raspberry PI"},{iconName:"osRaspbian",name:"raspbian",osNames:["Raspbian","Raspbian GNU/Linux"],title:"Raspbian"},{iconName:"osRedHat",logoFilename:"redhat.svg",name:"redhat",osNames:["Red Hat Enterprise Linux","Red Hat Enterprise Linux Server","Red Hat Enterprise Linux Workstation","RedHatEnterpriseServer"],title:"Red Hat Enterprise Linux"},{iconName:"osSuseLinux",logoFilename:"suse.svg",name:"suse",osNames:[],title:"Suse"},{iconName:"osUbuntu",logoFilename:"ubuntu.svg",name:"ubuntu",osNames:["Ubuntu","Ubuntu Core"],title:"Ubuntu"}],i=o.reduce(((e,n)=>({...e,[n.name]:n})),{}),a=o.reduce(((e,n)=>({...e,...n.osNames.reduce(((e,t)=>({...e,[t]:n})),{})})),{})},74293:(e,n,t)=>{t.d(n,{A:()=>A});var o=t(58168),i=(t(17333),t(41393),t(98992),t(54520),t(81454),t(62953),t(8711)),a=t(96540),s=t(83199),r=t(55337),l=t(45123);const c=i.default.div.withConfig({displayName:"styled__Divider",componentId:"sc-14bbmjw-0"})(["background:",";height:1px;width:auto;margin:"," ",";"],(0,s.getColor)("disabled"),(0,s.getSizeBy)(1),(0,s.getSizeBy)(2));var d=t(96083),u=t(87659),m=t(22292),p=t(11604),h=t(14550),g=(t(9391),t(15327)),f=t(74618),y=t(57375),b=t(54972),_=t(63314);const w={flex:"grow",height:"100%",overflow:"auto"},v={flex:"1",height:"100%",overflow:"auto"},T=e=>{let{onClose:n}=e;const[t,i]=(0,a.useState)(!1),[r,l]=(0,a.useState)(!1),[c,d]=(0,a.useState)({}),{handleChangeTab:u,activeTabIndex:p,tabsByName:h,tabs:T}=(0,b.A)(),k=(0,m.qO)(void 0,{shouldPersist:!0,onSuccess:n}),x=(0,a.useCallback)((()=>{i(!0),k(c).finally((()=>i(!1)))}),[c]),P=(0,a.useMemo)((()=>T.map((e=>{const{label:t,testId:i,Component:r}=h[e];return a.createElement(s.Tab,{key:e,label:t,"data-testid":"userProfileModal-".concat(i)},a.createElement(_.Ay,{tab:e},a.createElement(r,(0,o.A)({},"profile"===e&&{setFormState:d,setFormValid:l},{onClose:n}))))}))),[T]);return a.createElement(g.GO,{onClose:n},a.createElement(_.Ay,{feature:"UserSettings"},a.createElement(f.z,{onClose:n,title:"Settings"},"profile"===T[p]&&a.createElement(s.Button,{disabled:!r,label:"Save",onClick:x,isLoading:t,loadingLabel:"saving..."})),a.createElement(s.Tabs,{flex:"1",height:"100%",overflow:"hidden",selected:p,onChange:u,TabContent:g.Yv,TabsHeader:y.t,tabsProps:w,tabContentProps:v},P)))};var k=t(29217);const x=(0,i.default)(s.Flex).attrs({column:!0,round:1}).withConfig({displayName:"dropdown__Dropdown",componentId:"sc-w0ej6i-0"})(["box-shadow:0 4px 4px rgba(0,0,0,0.25);"]);var P=t(37618);const C=(0,t(92155).A)(l.A),q={"Operational Status":()=>!0,"Sign In":e=>{let{isAnonymous:n}=e;return n},Settings:e=>{let{isAgent:n,isAnonymous:t}=e;return n||!t},"Sign Out":e=>{let{isAnonymous:n}=e;return!n}},D=(0,i.default)(s.Button).withConfig({displayName:"userControl__SignInButton",componentId:"sc-n4ebn8-0"})(["&&{> .button-icon{width:24px;height:24px;}}"]),A=e=>{let{dropdownBackground:n="dropdown"}=e;const t=(0,m.uW)("avatarURL"),i=(0,m.uW)("name"),l=(0,m.uW)("isAnonymous"),[g,,f,y]=(0,u.A)(),_=(0,a.useCallback)((()=>{window.open("https://status.netdata.cloud","_blank")}),[]),w=(0,p.tN)(),v=(0,h.A)(),{handleOpenProfileModal:A,handleCloseProfileModal:S,isProfileModalOpen:M}=(0,b.A)(),E=(0,a.useMemo)((()=>[{name:"Settings",onClick:()=>{y(),A()},hasSeparator:!1,testid:"userControl-settings"},{name:"Operational Status",onClick:()=>{y(),_()},hasSeparator:!1,testid:"userControl-operationalStatus"},{name:"Sign In",onClick:()=>{y(),v()},hasSeparator:!0,testid:"userControl-signOut"},{name:"Sign Out",onClick:()=>{y(),w()},hasSeparator:!0,testid:"userControl-signOut"}].filter((e=>q[e.name]({isAgent:P.Ay,isAnonymous:l})))),[l,P.Ay]);return a.createElement(r.A,null,a.createElement(k.A,!l&&{content:"Edit your account settings and manage your notifications",align:"right"},!P.Ay&&l?a.createElement(k.A,{content:"Sign In",align:"right"},a.createElement(D,{small:!0,icon:"sign_in",onClick:f,"data-ga":"sidebar-sign-in::click-dropdown::global-view","data-testid":"sign-in-dropdown",iconSize:"medium",margin:[0,0,2]})):a.createElement(d.A,{src:t||"","data-testid":"userControl-userAvatar",onClick:f,title:i})),g&&a.createElement(s.Layer,{margin:[5,17],position:"bottom-left",onClickOutside:y,onEsc:y},a.createElement(x,{background:n,padding:[2]},E.map((e=>{let{hasSeparator:n,name:t,...i}=e;return a.createElement(a.Fragment,{key:t},n&&a.createElement(c,{key:"".concat(t,"-itemSeparator")}),a.createElement(C,(0,o.A)({key:t,round:1,payload:{description:"User menu - Click ".concat(t)}},i),t))})))),M&&a.createElement(T,{onClose:S}))}},96763:(e,n,t)=>{t.d(n,{A:()=>s});var o=t(58168),i=t(96540),a=t(83199);const s=e=>{let{onChange:n,value:t,onKeyDown:s,label:r,...l}=e;return i.createElement(a.TextInput,(0,o.A)({label:r,name:"userEmail",placeholder:"Enter an email address",value:t,onChange:n,onKeyDown:s},l))}},54972:(e,n,t)=>{t.d(n,{A:()=>je});t(17333),t(98992),t(54520),t(62953);var o=t(96540),i=t(540),a=t(22292),s=t(83199),r=t(80542),l=t(96083),c=t(11604),d=t(87659);var u=t(58168),m=t(27229);const p="User name cannot exceed ".concat(40," characters"),h=e=>{const n=e.length<=40;return(0,r.H)(n,p)},g=e=>{let{value:n,isValid:t,setIsValid:i,onChange:a,label:l,validators:c=[],hint:d,...p}=e;const g=(0,r.k)([h,...c]),[f,y]=(0,o.useState)("");return(0,o.useEffect)((()=>{const e=g(n),o=e.isValid,a=(0,m.W)(e);!t&&o?i(!0):t&&!o&&i(!1),y(a||"")}),[t,n]),o.createElement(s.TextInput,(0,u.A)({label:l||" ",name:"userName",placeholder:"Enter the user's name",value:n,onChange:a,hint:d,error:!t&&f},p))};var f=t(96763),y=t(19673),b=t(3914),_=t(55463),w=t(83694);const v=[e=>(0,r.H)(!!e,"Name should not be empty")],T=()=>{},k=(0,w.o)((e=>{let{isLastMember:n,spaceName:t,children:i}=e;return o.createElement(s.Flex,{column:!0,gap:2},o.createElement(s.Text,null,"You are about to delete your account at ",o.createElement("strong",null,"Netdata"),". All data related to your account will be deleted."),n&&o.createElement(o.Fragment,null,o.createElement(s.Text,null,o.createElement(s.Text,{strong:!0},t)," space will be deleted since you are the last member."),i),o.createElement(s.Text,null,"This cannot be undone. Are you sure you want to continue?"))})),x=e=>{let{setFormValid:n,setFormState:t}=e;const i=(0,a.uW)("name"),[r,u,m,p]=(0,s.useInputValue)({value:i,maxChars:40}),[h,w]=(0,o.useState)(!1),[x,,P,C]=(0,d.A)(),[q,D]=(0,d.A)(),{value:A}=(0,y.JN)(),S=(0,b.ap)(),M=1===(0,_.Gi)().length,E=(0,a.uW)("email"),N=(0,a.uW)("avatarURL");(0,o.useEffect)((()=>{p&&n(h)}),[p,h]),(0,o.useEffect)((()=>{t({name:r})}),[r]);const R=(0,c.z2)();return o.createElement(s.Flex,{column:!0,justifyContent:"between",flex:"grow"},o.createElement(s.Flex,{column:!0,gap:3},o.createElement(s.Text,{strong:!0,"data-testid":"userProfile-label"},"Photo"),o.createElement(l.A,{src:N||"","data-testid":"userProfile-avatar",width:16,height:16}),o.createElement(g,{"data-testid":"userProfile-username",value:r,label:"Name",onChange:u,isValid:h,setIsValid:w,validators:v,fieldIndicator:m,instantFeedback:"positiveFirst",isDirty:p}),o.createElement(f.A,{"data-testid":"userProfile-email",label:"Email",disabled:!0,value:E,onChange:T})),o.createElement(s.Flex,{alignSelf:"end"},o.createElement(s.Button,{flavour:"borderless",danger:!0,onClick:P,label:"Delete account","data-ga":"user-profile-settings::click-delete::global-view","data-testid":"userProfile-deleteAccount-button"})),x&&o.createElement(s.ConfirmationDialog,{confirmLabel:q?"Deleting...":"Yes, delete","data-ga":"delete-account-dialog","data-testid":"deleteAccountDialog",handleConfirm:()=>{D(),R()},handleDecline:C,message:o.createElement(k,{isLastMember:M,spaceName:S.name,currentPlan:A}),title:"Delete Account",isConfirmDisabled:q,isConfirmLoading:q,isDeclineDisabled:q}))};t(65189);var P=t(5668);const C=()=>{const[e,n]=(0,P.tF)("theme"),t=(0,o.useCallback)((e=>n(e.target.value)),[]);return o.createElement(s.Flex,{column:!0,gap:3,justifyContent:"between"},o.createElement(s.Flex,{column:!0,gap:2},o.createElement(s.Text,{strong:!0},"Netdata Theme"),o.createElement(s.RadioButton,{label:"Light Theme",checked:"light"===e,onChange:t,value:"light"}),o.createElement(s.RadioButton,{label:"Dark Theme",checked:"dark"===e||!e||"unspecified"===e,onChange:t,value:"dark"})))};var q=t(71847),D=t(29217),A=t(71835);const S=(0,t(92155).A)(s.Button),M=["scope:all","scope:agent-ui","scope:grafana-plugin"],E=e=>{let{onCloseModal:n,onCreate:t}=e;const[i,a]=(0,o.useState)(""),[r,l]=(0,o.useState)("scope:all");return o.createElement(s.ModalContent,null,o.createElement(s.ModalHeader,null,"Create New Token",o.createElement(s.ModalCloseButton,{testId:"close-button",onClose:n})),o.createElement(s.ModalBody,{gap:2,width:80},o.createElement(s.TextInput,{"data-testid":"description",placeholder:"Enter Description",onChange:e=>{let{target:n}=e;return a(n.value)},value:i,size:"small"}),o.createElement(s.Flex,{column:!0,gap:2,"data-testid":"scopes"},M.map((e=>o.createElement(s.RadioButton,{key:e,checked:r===e,onChange:e=>l(e.target.value),value:e,alignItems:"start"},o.createElement(s.TextSmall,null,e)))))),o.createElement(s.ModalFooter,null,o.createElement(S,{disabled:""===i.trim(),label:"Create",onClick:()=>t({description:i,scope:r}),"data-testid":"btn-create",payload:{description:"Modal - Create Token"}})))};var N=t(8711);const R=N.default.div.withConfig({displayName:"styled__TokenContainer",componentId:"sc-s1axew-0"})(["display:flex;flex-direction:column;align-items:center;color:",";background:",";border:1px solid ",";border-radius:2px;overflow-wrap:anywhere;white-space:pre-wrap;padding:23px 27px 14px;width:100%;font-family:monospace;letter-spacing:0.09px;line-height:18px;font-size:14px;word-break:break-word;"],(0,s.getColor)("textDescription"),(0,s.getColor)("modalTabsBackground"),(0,s.getColor)("borderSecondary")),H=e=>o.createElement(s.Box,(0,u.A)({},e,{as:s.Icon,sx:{borderRadius:"50%",overflow:"hidden",background:(0,s.getColor)(["neutral","white"])}})),I=e=>o.createElement(s.Text,(0,u.A)({},e,{color:["neutral","grey35"]})),O=e=>o.createElement(s.Flex,(0,u.A)({},e,{as:s.Icon,sx:{alignSelf:"flex-end",cursor:"pointer"}}));var L=t(33436),U=t(99571),B=t(13871);const j=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return()=>{(0,L.A)(e);const t=(0,B.UI)({...{header:"Copied",text:"Token copied to your clipboard!",icon:"gear",...n},success:!0});U.oR.success(t,{context:"copy"})}};var G=t(63314);const F=e=>{let{onCloseModal:n,token:t}=e;return o.createElement(s.ModalContent,null,o.createElement(G._0,{feature:"TokenCreated"},o.createElement(s.ModalHeader,null,"Token Generated",o.createElement(s.ModalCloseButton,{testId:"close-button",onClose:n})),o.createElement(s.ModalBody,null,o.createElement(s.Flex,{column:!0,gap:4},o.createElement(R,null,o.createElement("span",{"data-testid":"token"},t),o.createElement(O,{name:"copy",size:"small",color:"primary",onClick:j(t),"data-ga":"profile::click-copytoken::all-pages::api-token"})),o.createElement(s.Flex,{alignItems:"center",background:"warningBackground",gap:4,padding:[3,3],round:!0},o.createElement(H,{"data-testid":"noNodesView-warningBannerIcon",name:"exclamation",color:"warning"}),o.createElement(I,{"data-testid":"warning-message"},"Make sure to copy or store this token and add it where you need it. Once you close this modal you will not be able to retrieve it again.")))),o.createElement(s.ModalFooter,null,o.createElement(s.Button,{label:"Close",onClick:n}))))};var z=t(26655);const Y=e=>{let{description:n,scope:t}=e;return z.A.post("/api/v1/auth/account/api-token",{description:n,scopes:[t]})},X=e=>z.A.delete("/api/v1/auth/account/api-token/".concat(e)),W=e=>{let{onCloseModal:n,onTokenCreated:t,view:i,token:a}=e;const[r,l]=(0,o.useState)(i),[c,d]=(0,o.useState)(a);return o.createElement(s.Modal,{onClickOutside:n,onEsc:n},"CreateView"===r&&o.createElement(E,{"data-testid":"create-view",onCloseModal:n,onCreate:async e=>{let{description:n,scope:o}=e;const i=await Y({description:n,scope:o});(0,q.H)("api-token","create-token","profile",{description:n,scope:o}),d(i.data.token),l("CopyTokenView"),t()}}),"CopyTokenView"===r&&c&&o.createElement(F,{onCloseModal:n,token:c}))};t(41393),t(81454);var K=t(87991);const $=()=>{const[e,n]=(0,o.useState)([]),[t,,i,a]=(0,d.A)(!0),s=async()=>{i();const e=await z.A.get("/api/v1/auth/account/api-token");a(),n(e.data.map((e=>({...e,created_at:e.created_at?(0,K.GP)(new Date(e.created_at),"dd/MM/yyyy"):null,last_used_at:e.last_used_at?(0,K.GP)(new Date(e.last_used_at),"dd/MM/yyyy"):null}))))};return(0,o.useEffect)((()=>{s()}),[]),{isLoading:t,data:e,setData:n,fetchData:s}};var V=t(50876);const Z={right:["actions"]},J=[{id:"description",header:"Description",fullWidth:!0,size:150,wrap:!0,cell:e=>{let{getValue:n}=e;return o.createElement(D.A,{plain:!0,content:n()||"",isBasic:!0},o.createElement(s.TextSmall,{truncate:!0},n()||""))}},{id:"scopes",header:"Scope",fullWidth:!0,size:150,wrap:!0,cell:e=>{let{getValue:n}=e;return o.createElement(s.TextSmall,null,(Array.isArray(n())?n():[]).join(", "))}},{id:"created_at",header:"Created at",cell:e=>{let{getValue:n}=e;return o.createElement(s.TextSmall,null,n()||"-")}},{id:"last_used_at",header:"Used at",cell:e=>{let{getValue:n}=e;return o.createElement(s.TextSmall,null,n()||"-")}},{id:"ends_with",header:"Token",cell:e=>{let{getValue:n}=e;return o.createElement(o.Fragment,null,o.createElement(s.TextSmall,{style:{verticalAlign:"sub"}},"******"),n())}}],Q=()=>{const[e,n]=(0,o.useState)(!1),[t,i]=(0,o.useState)(!1),[a,r]=(0,o.useState)(null),{data:l,setData:c,fetchData:d}=$(),{sendButtonClickedLog:u}=(0,V.A)(),m=(0,o.useMemo)((()=>({addEntry:{handleAction:()=>{n(!0),u({label:"Create new token"},!0)},tooltipText:"Create new token"}})),[u]),[,p]=(0,A.A)(),h=(0,o.useMemo)((()=>({delete:{handleAction:e=>{let{id:n}=e;X(n).then((()=>{c((e=>e.filter((e=>e.id!==n)))),(0,q.H)("api-token","delete-token","profile"),u({label:"Delete token"},!0)})).catch(p)},confirmationTitle:"Delete API Token",confirmationMessage:"You are about to delete API Token, are you sure you want to continue?"}})),[l]);return o.createElement(o.Fragment,null,o.createElement(s.Table,{dataColumns:J,data:l,bulkActions:m,rowActions:h,enableResizing:!0,enableSorting:!0,columnPinning:Z,enableColumnPinning:!0}),e&&o.createElement(W,{view:"CreateView",onCloseModal:()=>n(!1),onTokenCreated:d}),t&&o.createElement(W,{view:"CopyTokenView",onCloseModal:()=>{i(!1),r(null)},token:a}))};var ee=t(96382),ne=t(93155),te=t(63950),oe=t.n(te);const ie=e=>{let{title:n="",description:t="",label:i="",checked:a,onChange:r=oe(),...l}=e;const c=(d=s.Toggle,e=>{let{disabledInfo:n="This setting is disabled",...t}=e;const{disabled:i}=t||{};return i?o.createElement(D.A,{content:n},o.createElement(s.Box,null,o.createElement(d,t))):o.createElement(d,t)});var d;return o.createElement(s.Flex,{justifyContent:"between",alignItems:"center"},o.createElement(s.Box,null,o.createElement(s.H5,null,n),o.createElement(s.TextSmall,null,t)),o.createElement(c,(0,u.A)({colored:!0,onChange:r,checked:a,"data-testid":"profileNotifications-".concat(i,"NotificationsToggle"),"data-ga":"profile-ntab::click-toggle::global-view::".concat(a?"enabled":"disabled")},l)))};var ae=t(194);const se=()=>{const{isLoading:e,data:n}=$(),[t,i]=(0,o.useState)(),[a,s]=(0,o.useState)(),[,r]=(0,A.A)();return(0,o.useEffect)((()=>{e||(async()=>{(null===n||void 0===n?void 0:n.length)>0&&await Promise.all(n.map((e=>{let{id:n}=e;return X(n)}))).catch(r),Y({description:"Mobile App",scope:"scope:mobile-app"}).then((e=>{let{data:n}=e;null!==n&&void 0!==n&&n.token&&i(n.token)})).catch((e=>{r({header:"Error",text:"Something went wrong"}),s(!0)}))})()}),[e]),{token:t,error:a}},re=e=>{let{value:n}=e;return o.createElement(s.Box,{width:"232px",height:"232px",background:"white",padding:[4],round:3},o.createElement(ae.Ay,{size:200,value:n}))},le=e=>{let{onClose:n=oe()}=e;const{token:t,error:i}=se();return o.createElement(s.Modal,null,o.createElement(s.ModalContent,{width:{min:100,base:140}},o.createElement(s.ModalHeader,null,o.createElement(s.Text,null,"Scan QR Code"),o.createElement(s.ModalCloseButton,{onClose:n,testId:"close-button"})),o.createElement(s.ModalBody,null,o.createElement(s.Flex,{alignItems:"center",justifyContent:"center",height:100},t?o.createElement(re,{value:t}):o.createElement(s.Flex,{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",padding:[4]},i?o.createElement(s.TextBigger,null,"An error occurred"):o.createElement(s.H3,null,"Generating token")))),o.createElement(s.ModalFooter,null,o.createElement(s.Flex,{justifyContent:"end",padding:[1,2]},o.createElement(s.Button,{label:"Done",onClick:n})))))},ce=()=>{const[e,n]=(0,ee.j$)("email"),t=(0,o.useCallback)((()=>n(!e)),[e,n]),[i,a]=(0,ee.j$)("mobileApp"),r=(0,o.useCallback)((()=>{a(!(null!==i&&void 0!==i&&i.enabled))}),[i,a]),[l,,c,u]=(0,d.A)();return o.createElement(s.Flex,{column:!0,gap:2},o.createElement(ie,{title:"E-mail",description:"Netdata will send you health notifications via e-mails",label:"email",checked:e,onChange:t}),ne.Mh&&o.createElement(s.Flex,{column:!0},o.createElement(ie,{title:"Mobile App Notifications",description:"Netdata will send you health notifications via mobile app notifications",label:"mobileApp",checked:null===i||void 0===i?void 0:i.enabled,onChange:r,disabled:!(null!==i&&void 0!==i&&i.linked),disabledInfo:"You have to link a device first and then enable notifications"}),o.createElement(s.Flex,{justifyContent:"end"},o.createElement(s.Button,{flavour:"borderless",icon:"qrCode",iconColor:"primary",iconSize:"small",onClick:c},o.createElement(s.Text,{color:"primary"},"Show QR code"))),l&&o.createElement(le,{onClose:u})))};t(14905),t(8872);var de=t(28738),ue=t(46741),me=(t(3064),t(72577),t(26770)),pe=t(87633),he=t(14994),ge=t(71856),fe=t(1522),ye=t(69765);const be=N.default.div.withConfig({displayName:"styled__Row",componentId:"sc-lpc291-0"})(["width:100%;height:",";display:flex;flex-flow:row nowrap;align-items:center;padding-left:",";margin-bottom:",";"],(0,s.getSizeBy)(5),(0,s.getSizeBy)(3),(0,s.getSizeBy)(2)),_e=(0,N.default)(s.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-lpc291-1"})(["width:20px;height:20px;margin-right:",";"],(0,s.getSizeBy)()),we=(0,N.css)(["&&{width:200px;}margin-left:auto;"]),ve=(0,N.default)(s.Select).withConfig({displayName:"styled__StyledSelect",componentId:"sc-lpc291-2"})(["",""],we),Te=(0,N.default)(s.Button).withConfig({displayName:"styled__SettingsLoader",componentId:"sc-lpc291-3"})([""," color:",";border:1px solid ",";.path{stroke:",";}"],we,(0,s.getColor)("text"),(0,s.getColor)("border"),(0,s.getColor)("text")),ke=e=>{let{roomId:n,spaceId:t}=e;const[i,a]=(0,ee.yP)({roomId:n,spaceId:t,key:"alarms"}),s=(0,o.useCallback)((e=>{a(e.value)}),[a]);return o.createElement(ve,{options:Object.values(ge.fF),value:ge.fF[i],onChange:s})},xe=e=>{let{roomId:n,spaceId:t}=e;const[i,a]=(0,o.useState)(),r=(0,fe.th)(t,n,{onFail:()=>{a(!1)},onSuccess:()=>{a(!1)}}),l=(0,o.useCallback)((()=>{a(!0),r()}),[r,n]);return o.createElement(s.Box,{margin:[0,2,0,"auto"]},o.createElement(D.A,{content:"Join this room to activate notifications for it",isBasic:!0},o.createElement(s.Button,{isLoading:i,label:"Join",onClick:l,flavour:"hollow"})))},Pe=e=>{let{isMember:n,roomId:t,spaceId:i}=e;const a=(0,ye.wz)(t,"name");return o.createElement(be,{"data-testid":"roomSettings-room-".concat(a),"data-ga":"profile-ntab::click-join-room-".concat(a,"::global-view")},o.createElement(_e,{name:"room",color:"text"}),o.createElement(s.Text,null,a),n?o.createElement(o.Suspense,{fallback:o.createElement(Te,{isLoading:!0,flavour:"hollow",label:"Loading settings.."})},o.createElement(ke,{roomId:t,spaceId:i})):o.createElement(xe,{roomId:t,spaceId:i}))},Ce=N.default.div.withConfig({displayName:"styled__CollapsibleRoot",componentId:"sc-1p8t8zr-0"})(["width:100%;height:",";display:flex;flex-flow:row nowrap;align-items:center;cursor:pointer;margin-bottom:",";"],(0,s.getSizeBy)(5),(0,s.getSizeBy)(2)),qe=(0,N.default)(s.Icon).withConfig({displayName:"styled__OpenerIcon",componentId:"sc-1p8t8zr-1"})(["height:5px;width:6px;margin-right:",";",";"],(0,s.getSizeBy)(2),(e=>{let{expanded:n}=e;return n&&"transform: rotate(90deg)"})),De=(0,N.default)(s.Icon).withConfig({displayName:"styled__SpaceIcon",componentId:"sc-1p8t8zr-2"})(["width:20px;height:20px;margin-right:",";"],(0,s.getSizeBy)()),Ae=(0,N.default)(s.Text).withConfig({displayName:"styled__SpaceLabel",componentId:"sc-1p8t8zr-3"})(["font-weight:bold;"]),Se=(0,N.default)(s.TextSmall).withConfig({displayName:"styled__SettingsInfo",componentId:"sc-1p8t8zr-4"})(["margin-left:auto;opacity:0.8;"]);var Me=t(79769);const Ee=e=>{let{expanded:n,onExpand:t,label:i,spaceId:a}=e;(0,Me.A)(a);const s=(0,me.t5)(a,"channels").find((e=>"Email"===e.integration.slug))||{};return o.createElement(Ce,{onClick:t,"data-testid":"spaceRoot-space-".concat(i)},o.createElement(qe,{name:"chevron_right_s",expanded:n,color:"text"}),o.createElement(De,{name:"space",color:"text"}),o.createElement(Ae,null,i),!s.enabled&&o.createElement(Se,null,"E-mail notifications for this space has been disabled by admin"))},Ne={width:"108px",height:"77px"},Re=e=>{let{spaceId:n,isCurrent:t,showAllRooms:i}=e;const[a,r]=(0,d.A)(t),l=(0,pe.A)(n,{autorun:!1,polling:!1}),c=(0,he.sC)(n,"loaded");(0,o.useEffect)((()=>{n&&a&&!c&&l()}),[a,c,n,l]);const u=(0,b.ns)(n,"name"),m=(0,he.CB)(n),p=(0,o.useMemo)((()=>i?m:m.filter((e=>{let{isMember:n}=e;return n}))),[m,i]),h=(0,o.useRef)();return(0,o.useEffect)((()=>{a&&h.current&&h.current.scrollIntoView({behavior:"smooth",block:"start"})}),[a]),o.createElement(s.Flex,{column:!0,ref:h},o.createElement(Ee,{expanded:a,onExpand:r,label:u,spaceId:n}),o.createElement(s.Collapsible,{open:a},(()=>c?o.createElement(o.Fragment,null,p.map((e=>{let{id:t,isMember:i}=e;return o.createElement(Pe,{isMember:i,key:t,roomId:t,spaceId:n})}))):o.createElement(de.A,{iconProps:Ne,title:"Loading..."}))))};var He=t(13617);const Ie={width:"108px",height:"77px"},Oe=()=>{const e=(0,b.vt)(),n=(e=>{const n=(0,b.UV)("ids");return(0,o.useMemo)((()=>n.reduce(((n,t)=>t===e?[t,...n]:[...n,t]),[])),[e,n])})(e),t=(0,ue.JT)("room:ReadAll"),[i,a]=(0,o.useState)(!1);return o.createElement(o.Fragment,null,o.createElement(s.H4,null,"Notifications for all your Netdata Spaces and all the Rooms you are in"),t&&o.createElement(He.A,{onFilterClick:e=>n=>{n.stopPropagation(),a(e)},showAllRooms:i,padding:[1,0]}),o.createElement(s.Flex,{overflow:{vertical:"auto"},column:!0,"data-testid":"spaceRoomNotifications-spacesContainer",padding:[3,0,3]},o.createElement(o.Suspense,{fallback:o.createElement(de.A,{iconProps:Ie,title:"Loading notification settings..."})},n.map((n=>o.createElement(Re,{key:n,isCurrent:n===e,showAllRooms:i,spaceId:n}))))))},Le={offline:["theme"],online:["profile","theme","notifications","apiTokens"]},Ue={profile:{Component:x,label:"Profile",order:0,testId:"profileTab"},theme:{Component:C,label:"Theme",order:1,testId:"themeTab"},notifications:{Component:(0,o.memo)((()=>o.createElement(s.Flex,{overflow:{vertical:"hidden"},column:!0,gap:2},o.createElement(s.H4,null,"Notification Methods"),o.createElement(o.Suspense,{fallback:"..."},o.createElement(ce,null)),o.createElement(s.Flex,{height:"1px",background:"border"}),o.createElement(Oe,null)))),label:"Notifications",order:2,testId:"notificationsTab"},apiTokens:{Component:Q,label:"API tokens",order:3,testId:"apiTokensTab"}},Be=e=>(Ue[e]||Ue.profile).order,je=function(){let{modalName:e="profile"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,a.uW)("isAnonymous"),t=(0,o.useMemo)((()=>Object.keys(Ue).filter((e=>Le[n?"offline":"online"].includes(e)))),[n]),{isModalOpen:s,currentModalTab:r,handleOpenModal:l,handleCloseModal:c,handleChangeModalTab:d}=(0,i.A)(e),[u,m]=(0,o.useState)(Be(r)),p=e=>{d(e)};return(0,o.useEffect)((()=>{m(Be(r))}),[r]),{handleOpenProfileModal:function(){l(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"profile")},handleCloseProfileModal:()=>{c()},getPreselectedTab:Be,setCurrentTab:p,handleChangeTab:e=>{const n=t[e];m(e),p(n)},tabs:t,tabsByName:Ue,activeTabIndex:u,isProfileModalOpen:s}}},14550:(e,n,t)=>{t.d(n,{A:()=>l});t(25440);var o=t(96540),i=t(47767),a=t(80158),s=t(37618),r=t(35600);const l=()=>{const e=(0,i.Zp)();return(0,o.useCallback)((()=>{if(s.Ay){const e=window.location.origin+window.location.pathname.replace(s.y7,""),n=(0,r.u0)();window.location.href=(0,a.QU)("".concat(window.envSettings.cloudUrl,"/trust?redirect_uri=").concat(encodeURIComponent(window.location.href),"&agent_uri=").concat(encodeURIComponent(e||window.envSettings.agentApiUrl),"&telemetry_session_id=").concat(n))}else e("/sign-in")}),[])}},65624:(e,n,t)=>{t.d(n,{JJ:()=>h,L6:()=>T,LO:()=>d,d$:()=>v,ph:()=>p});t(41393),t(14905),t(98992),t(81454),t(8872),t(62953),t(48408);var o=t(26655),i=t(49286),a=t(52768),s=t(98525),r=t(37618);const l={logs:(e,n)=>n?/logs/.test(n):"systemd-journal"===e,default:(e,n)=>n?!/logs/.test(n):"systemd-journal"!==e},c=e=>{const n=l[e]||l.default;return function(){let{functions:e=[],nodes:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.reduce(((e,o)=>{let{name:i,ni:a,tags:s}=o;return n(i,s)?[...e,{name:i,nodes:a.reduce(((e,n)=>t[n]?(e[t[n].nd||t[n].mg]=!0,e):e),{})}]:e}),[])}},d=(e,n,t)=>(0,r.ES)(e)?o.A.get("/api/v2/functions",{baseURL:window.envSettings.agentApiUrl,transform:c(t)}):o.A.post("/api/v3/spaces/".concat(e,"/rooms/").concat(n,"/functions"),{scope:{nodes:[]},selectors:{nodes:["*"]}},{transform:c(t)}),u=(e,n)=>{let{merge:t,direction:o,dataOnly:a=!1,tail:s=!1,reset:r=!1}=n;return n=>((n=(0,i.Ds)(n,{omit:["histogram"]})).defaultCharts||"processes"!==e||(n.defaultCharts=[["CPU","Category"],["Memory","Category"]]),n.defaultCharts=n.defaultCharts||[],a||(n.aggregations=n.facets),n.merge=t,n.direction=o,n.dataOnly=a,n.tail=s,n.reset=r,n)},m=(e,n)=>"after"===e||"before"===e?Math.floor(n/1e3):n,p=e=>{let{spaceId:n,cloudNodeIds:t,nodeIds:i,fn:a,acceptedParams:s=[],merge:l=!1,reset:c=!1,filters:d={},...p}=e,h=s.reduce(((e,n)=>{let t=m(n,p[n]);return t="undefined"===typeof t||null===t?null:"".concat(t),t?e?"".concat(e," ").concat(n,":").concat(t):"".concat(n,":").concat(t):e}),"");null!==s&&void 0!==s&&s.length&&(h=Object.keys(d).reduce(((e,n)=>{let t=m(n,d[n]);return t=((e,n)=>"query"===e&&n?n.split(/\s+/).join("|"):n)(n,t),t="undefined"===typeof t||null===t?null:"".concat(t),t?e?"".concat(e," ").concat(n,":").concat(t):"".concat(n,":").concat(t):e}),h));const g=(0,r.ES)(n);let f;if(h=h?"".concat(g?"%20":" ").concat(h):"",g){const[e]=i;f=o.A.get("/host/".concat(e,"/api/v1/function?function=").concat(a).concat(h),{baseURL:window.envSettings.agentApiUrl,transform:u(a,{merge:l,direction:p.direction,dataOnly:p.data_only&&s.includes("data_only"),tail:p.tail,reset:c})})}else{const[e]=t;f=o.A.get("/api/v2/nodes/".concat(e,"/function"),{params:{function:"".concat(a).concat(h),timeout:12e4},transform:u(a,{merge:l,direction:p.direction,dataOnly:p.data_only&&s.includes("data_only"),tail:p.tail,reset:c})})}return f.catch((e=>{throw e.merge=l,e.direction=p.direction,e.dataOnly=p.data_only&&s.includes("data_only"),e.tail=p.tail,e.reset=c,e})),f},h=e=>{let{spaceId:n,cloudNodeIds:t,nodeIds:a,fn:s,after:l,before:c}=e;const d=(0,r.ES)(n),u="".concat(d?"%20":" ","info after:").concat(m("after",l)," before:").concat(m("before",c));if(d){const[e]=a;return o.A.get("/host/".concat(e,"/api/v1/function?function=").concat(s).concat(u),{baseURL:window.envSettings.agentApiUrl,transform:i.Ds})}const[p]=t;return o.A.get("/api/v2/nodes/".concat(p,"/function"),{params:{function:"".concat(s).concat(u),timeout:12e4},transform:i.Ds})},g={filter:!1,index:1,name:"Unknown",sort:"ascending",sortable:!1,sticky:!1,summary:"",type:"string",uniqueKey:!1,visible:!0,dummy:!1},f=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{[e]:{...g,name:n.name||e,...n}}},y={...f("Timestamp",{type:"datetime",index:0}),...f("Tags",{type:"pill",index:1,wrap:!0}),...f("Description",{type:"feedTemplate",index:2}),...f("source",{type:"feedTemplate",index:3,dummy:!0}),...f("json",{type:"feedTemplate",index:4,dummy:!0})},b=function(){let[e]=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],{type:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"retention"===n?/exceeds the maximum data retention/.test(e)?"You've exceeded your plan's retention limit":"":e},_=(e,n)=>t=>{var o,i,a;let{errors:s=[],page_size:r,results:{hits:l,aggregations:c}}=t;const d=(null===l||void 0===l?void 0:l.hits)||[];return{columns:{...y},data:d.map((function(){var e;let{_source:t={},_source:{event:o,host:i=[],agent:a={},Netdata:s,tags:r}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const l=Array.isArray(i)?i:[i];return s={...s,...s.alert?{alert:{...s.alert,id:null===(e=s.alert.transition)||void 0===e?void 0:e.id,...s.alert.name?{name:Array.isArray(s.alert.name)?s.alert.name:[s.alert.name]}:{},...s.alert.current?{current:{...s.alert.current,status:s.alert.current.status?Array.isArray(s.alert.current.status)?s.alert.current.status:[s.alert.current.status]:[]}}:{}}}:{}},[t["@timestamp"],r||[],o.id,{...t,...o,...s,hosts:l,agentId:a.id,roomId:n},t]})),default_sort_column:null,type:"table",update_every:5,pageSize:r,totalSize:(null===(o=l.total)||void 0===o?void 0:o.value)||0,anchorBefore:null===(i=d[d.length-1])||void 0===i||null===(i=i.sort)||void 0===i?void 0:i[0],anchorAfter:null===(a=d[0])||void 0===a||null===(a=a.sort)||void 0===a?void 0:a[0],aggregations:c,merge:e,retentionWarning:b(s,{type:"retention"}),warning:b(s)}},w=(e,n,t,o)=>t=>{var i;let{facets:s=[],items:r={},transitions:l=[]}=t;const c=l.map((t=>{let{machine_guid:o,transition_id:i,node_id:s,hostname:r,alert:l,new:{status:c,value:d},when:u,old:{status:m},instance:p,units:h}=t;const g={action:"alert-node-transition",space:{id:e},roomId:n,alert:{id:i,current:{status:[c],value_string:(0,a.m3)(d,h)},previous:{status:m},name:[l]},chart:{name:p},hosts:[{id:s||o,name:r}]};return[1e3*u,["alert","node_instance"],i,g,g,c,name,p]}));return{columns:{...y,...f("Status",{type:"value",index:5,dummy:!0,filter:"multiselect"}),...f("Alert Name",{type:"value",index:6,dummy:!0,filter:"multiselect"}),...f("Instance",{type:"value",index:7,dummy:!0,filter:"multiselect"})},data:c,default_sort_column:null,type:"table",update_every:5,pageSize:100,totalSize:(null===r||void 0===r?void 0:r.matched)||c.length,anchorBefore:null===(i=l[l.length-1])||void 0===i?void 0:i.gi,aggregations:s,merge:o,retentionWarning:null,warning:null}},v=e=>{var n;let{nodeIds:t=[],spaceId:i,roomId:a,roomSlug:l,anchor:c="",merge:d=!1,after:u,before:m,filters:p,anchorOffset:h,cloudNodeIds:g,...f}=e;if((0,r.ES)(i)){const e=new URLSearchParams({after:u?Math.floor(u/1e3):u,before:m?Math.ceil(m/1e3):m,last:200,anchor_gi:c,options:"minify",...p,...f,scope_nodes:t.join("|")||"*"}).toString();return o.A.get("/api/v2/alert_transitions?".concat(e),{baseURL:window.envSettings.agentApiUrl,transform:w(i,a,0,d)})}return o.A.post("/api/v1/feed/search",{...p,...f,histogram_seconds:(null===(n=(0,s.Bp)(u,m))||void 0===n?void 0:n.secs)||1,node_ids:g,page_size:200,space_id:i,room_ids:"all-nodes"!==l?[a]:[],search_before:c||Date.now(),from_timestamp:u,to_timestamp:m},{transform:_(d,a)})},T=()=>o.A.get("/api/v1/feed/static/facets")},61531:(e,n,t)=>{t.d(n,{Ay:()=>u,UW:()=>a,Y5:()=>l,a$:()=>s,zb:()=>d});var o=t(47444),i=t(65624);const a=(0,o.eU)({key:"fnIndexHoverAtom",default:null}),s=(0,o.eU)({key:"fnClickPointAtom",default:null}),r=(0,o.Iz)({key:"checkAgainFnsAtom",default:()=>1}),l=(0,o.K0)({key:"availableFunctionsSelector",get:e=>{let{spaceId:n,roomId:t,extraKey:o}=e;return e=>{let{get:a}=e;return a(r(n)),(e=>{let{spaceId:n,roomId:t,extraKey:o}=e;return"feed"===o?Promise.resolve({data:[{name:"feed"}]}):(0,i.LO)(n,t,o)})({spaceId:n,roomId:t,extraKey:o})}}}),c={id:null,loading:!0,loaded:!1,loadingMore:!1,infoLoaded:!1,data:null,error:"",type:"",updateEvery:1,availableFilters:{},missingRequired:!1,lastModified:null,anchorAfter:null,offset:0,defaultCharts:[],acceptedParams:[],requiredParams:[],filtersToRefresh:{}},d={table:{...c,sortColumn:"",sortDirection:"descending",columns:{},columnVisibility:{},sortedColumns:[],pinnedColumns:[],groupByColumns:null},default:c},u=(0,o.Iz)({key:"function",default:e=>({...c,id:e})})},31225:(e,n,t)=>{t.d(n,{Z$:()=>s,b4:()=>o,wD:()=>a});const o=["#19C89E","#14A6C7","#F3D63D","#E05296","#FF7448","#C082FF"],i=3600,a=86400,s=[{minLimit:350*a,secs:7*a,unit:"week"},{minLimit:50*a,secs:a,unit:"day"},{minLimit:13*a,secs:21600,unit:"hour"},{minLimit:5*a,secs:10800,unit:"hour"},{minLimit:136800,secs:i,unit:"hour"},{minLimit:61200,secs:1800,unit:"minute"},{minLimit:28800,secs:600,unit:"minute"},{minLimit:10800,secs:300,unit:"minute"},{minLimit:2280,secs:60,unit:"minute"},{minLimit:780,secs:30,unit:"second"},{minLimit:420,secs:10,unit:"second"},{minLimit:300,secs:5,unit:"second"},{minLimit:1,secs:1,unit:"second"}]},50466:(e,n,t)=>{t.d(n,{Ak:()=>f,Be:()=>v,E:()=>_,Id:()=>k,Ol:()=>b,Ph:()=>P,WB:()=>h,WH:()=>w,ZY:()=>T,_H:()=>y,dP:()=>q,nm:()=>C,vx:()=>m,x9:()=>D});t(41393),t(14905),t(98992),t(81454),t(8872),t(62953);var o=t(96540),i=t(47767),a=t(47444),s=t(27467),r=t(3914),l=t(69765),c=t(37618),d=t(61531),u=t(65624);const m=e=>{var n;const t=(0,r.vt)(),i=(0,l.ID)(),s=(0,a.xf)((0,d.Y5)({spaceId:t,roomId:i,extraKey:e})),c=(0,a.Zs)((n=>{let{refresh:o}=n;return()=>o((0,d.Y5)({spaceId:t,roomId:i,extraKey:e}))}),[t,i,e]),u=(0,o.useMemo)((()=>{var e;if(null===(e=s.contents)||void 0===e||!e.data)return[];const n=[...s.contents.data];return n.sort(((e,n)=>e.name.localeCompare(n.name,void 0,{sensitivity:"accent",ignorePunctuation:!0}))),n}),[s.contents]);return{loaded:"loading"!==s.state,value:u,hasError:"hasError"===s.state,error:null===(n=s.contents)||void 0===n||null===(n=n.response)||void 0===n?void 0:n.data,refresh:c}},p=[],h=(0,a.K0)({key:"fnState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e;const i=o((0,d.Ay)(n));return t?i[t]:i}},set:e=>{let{id:n,key:t}=e;return(e,o)=>{let{set:i,reset:a}=e;o||t?i((0,d.Ay)(n),(e=>t?{...e,[t]:o}:{...e,...o})):a((0,d.Ay)(n))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),g={extraKey:"fn"},f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;const[n]=(0,s.l6)("selectedFn",{defaultValue:p,flavour:"arr",...e});return n},y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;return(0,s.r$)("selectedFn",{defaultValue:p,flavour:"arr",...e})},b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;return function(e){let{key:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;return(0,a.vc)(h({id:e,key:n}))}(f(e),e)},_=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;return function(e){let{key:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g;return(0,a.lZ)(h({id:e,key:n}))}(f(e),e)},w=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;return[b(e),_(e)]},v=function(){let{key:e,flavour:n,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;const o=f(t);return(0,s.r$)(e,{extraKey:"".concat(o||t.extraKey,"Settings"),flavour:n})},T=function(){let{key:e,flavour:n,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g;const o=f(t);return(0,s.r$)(e,{extraKey:"".concat(o||t.extraKey,"Filters"),flavour:n})},k=e=>{const n=(0,i.Zp)(),t=(()=>{const e=(0,l.r9)();return e&&"".concat(e,"/top")})();return(0,o.useCallback)((function(){n(t,{state:{nodeId:arguments.length>0&&void 0!==arguments[0]?arguments[0]:e}})}),[t,n])},x=(0,a.K0)({key:"feedFacetsSelector",get:e=>()=>e?(0,u.L6)():Promise.resolve({data:{}}),cachePolicy_UNSTABLE:{eviction:"most-recent"}}),P=e=>{const n=(0,r.vt)(),t=(0,c.ES)(n),{loading:i,loaded:s,aggregations:l}=b({extraKey:e}),d=(0,a.xf)(x(!t&&"feed"===e));return(0,o.useMemo)((()=>{var e;if("hasValue"!==d.state||!s)return[];if(!l)return[];if(Array.isArray(l))return l.reduce(((e,n)=>(e.push({...n,options:[...n.options].sort(((e,n)=>e.order-n.order||(e.name?e.name.localeCompare(n.name,void 0,{sensitivity:"accent",ignorePunctuation:!0}):n.count-e.count)))}),e)),[]).sort(((e,n)=>e.order-n.order));const n=(null===d||void 0===d||null===(e=d.contents)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.facets)||{};return Object.keys(n).sort(((e,t)=>n[e].order-n[t].order)).reduce(((e,t)=>{var o;const{display_name:i,field:a}=n[t];return null!==(o=l[t])&&void 0!==o&&o.buckets?(e.push({id:t,name:i,options:l[t].buckets.map((e=>{var n,t;return{id:e.key,name:(null===(n=d.contents.data.fields)||void 0===n||null===(n=n[a])||void 0===n?void 0:n[e.key])||e.key,count:(null===(t=e.hits)||void 0===t?void 0:t.doc_count)||0}}))}),e):e}),[])}),[e,t,d.state,s,i])},C=()=>(0,a.vc)(d.UW),q=()=>(0,a.lZ)(d.UW),D=()=>(0,a.L4)(d.a$)},98525:(e,n,t)=>{t.d(n,{Bp:()=>c,Sh:()=>r,iX:()=>s,py:()=>l});t(3064),t(98992),t(72577);var o=t(96540),i=t(21290),a=t(31225);const s=function(e){let{decimalPoints:n,defaultValue:t=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return null===e?t:isNaN(n)?e:parseFloat(e).toFixed(n)},r=function(e){let{defaultValue:n="",usec:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t&&(e=e?Math.floor(e/1e3):e),null===e)return n;const o=Math.floor(e/86400);e-=24*o*3600;const i=Math.floor(e/3600);e-=3600*i;const a=Math.floor(e/60);return"".concat(o,"d ").concat(i,"h ").concat(a,"m")},l=()=>{const{localeTimeString:e,localeDateString:n}=(0,i.$j)();return(0,o.useCallback)((function(t){let{defaultValue:o="",usec:i=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i&&(t=t?Math.floor(t/1e3):t);const a=new Date(t);return isNaN(a.valueOf())?o:"".concat(n(a,{long:!1})," ").concat(e(a,{secs:!0}))}),[])},c=(e,n)=>a.Z$.find((t=>{let{minLimit:o}=t;return((e,n)=>e<0?Math.abs(n-e):(n-e)/1e3)(e,n)>=o}))},24695:(e,n,t)=>{t.d(n,{A:()=>G});var o=t(96540),i=t(36091),a=t(58168),s=t(8711),r=t(83199),l=t(4659),c=t(87292),d=t(88773),u=t(68831);const m=s.default.article.withConfig({displayName:"nodes__StyledArticle",componentId:"sc-z8xzec-0"})(["padding-right:8px;padding-bottom:16px;"]),p=s.default.p.withConfig({displayName:"nodes__StyledParagraph",componentId:"sc-z8xzec-1"})(["margin-top:14px;line-height:1.5;"]),h=(0,s.default)(c.Ay).withConfig({displayName:"nodes__StyledCommand",componentId:"sc-z8xzec-2"})(["padding:8px;padding-right:32px;margin-top:8px;"]),g=s.default.ol.withConfig({displayName:"nodes__OrderedList",componentId:"sc-z8xzec-3"})(["list-style:roman;padding-left:16px;line-height:2;"]),f=s.default.ul.withConfig({displayName:"nodes__UnorderedList",componentId:"sc-z8xzec-4"})(['list-style-image:url("','/img/list-style-image.svg");padding-left:16px;line-height:2;'],u.A.assetsBaseURL),y={document:{render:m},heading:{render:e=>{let{level:n=1,...t}=e;const i={1:r.H1,2:r.H2,3:r.H3,4:r.H4,5:r.H5,6:r.H6}[n]||r.H1,s=n<=3?6-n:2;return o.createElement(i,(0,a.A)({margin:[s,0,2,0]},t))},attributes:{id:{type:String},level:{type:Number}}},paragraph:{render:p},link:{render:e=>{let{children:n,href:t,...i}=e;return o.createElement(l.A,(0,a.A)({href:t,rel:"noopener noreferrer",target:"_blank"},i),n)},attributes:{href:{type:String}}},code:{render:e=>{let{content:n,...t}=e;return o.createElement(c.R0,(0,a.A)({as:"span"},t),n)},attributes:{content:{type:String}}},fence:{render:h,attributes:{content:{type:String}}},list:{render:e=>{let{ordered:n,children:t,...i}=e;const a=n?g:f;return o.createElement(a,i,t)},attributes:{ordered:{type:Boolean}}},table:{render:e=>{let{children:n,...t}=e;return o.createElement(d.gY,t,n)}}},b=e=>{let{summary:n="",open:t=!1,children:i}=e;return o.createElement(r.Flex,{margin:[2,0,0,0]},o.createElement("details",{open:t},o.createElement("summary",null,o.createElement(r.Text,{strong:!0},n)),i))};t(33811),t(41393),t(86994),t(98992),t(81454),t(41795),t(62953);const _=(0,s.default)(r.Flex).attrs({column:!0}).withConfig({displayName:"styled__StyledTerminalCommand",componentId:"sc-3zs5xg-0"})(["position:relative;top:-1px;color:",";background:",";border:1px solid ",";cursor:pointer;overflow-wrap:anywhere;white-space:pre-wrap;padding:8px 16px 16px 8px;width:100%;font-family:monospace;font-weight:bold;letter-spacing:0.09px;line-height:16px;font-size:14px;word-break:break-word;overflow-y:auto;margin-top:",";"],(0,r.getColor)("primary"),(0,r.getColor)("terminalGreen"),(0,r.getColor)("terminalGreenBorder"),(e=>{let{noMargin:n}=e;return n?"0":"16px"})),w=(0,s.default)(r.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-3zs5xg-1"})(["display:flex;align-self:flex-end;cursor:pointer;position:absolute;bottom:8px;right:8px;"]);var v=t(76051);var T=t(25159),k=t(18682),x=t(50876);const P=(C=e=>{let{children:n,...t}=e;const i=(0,o.useMemo)((()=>(0,T.jU)(n)),[n]),{sendLog:s,isReady:r}=(0,x.A)(),l=(0,o.useCallback)((()=>{(0,k.C)(i,{text:"Config copied to your clipboard."})(),s({feature:"ConnectNode",isStart:!0,copyString:i})}),[r,i]);return o.createElement(_,(0,a.A)({onClick:l},t),n,o.createElement(w,{name:"copy",size:"small",color:"textLite"}))},e=>{let{blurred:n,blurProps:t,...i}=e;return n?o.createElement(v.Ay,t,o.createElement(C,i)):o.createElement(C,i)});var C;const q=e=>{let{children:n}=e;const[t,i]=(0,o.useState)(0),a=o.Children.toArray(n).map((e=>{let{props:n}=e;return n}));return o.createElement(r.Flex,{column:!0,width:"100%",margin:[4,0,0,0]},o.createElement(r.Flex,{border:{side:"bottom",size:"1px",color:"borderSecondary"},padding:[0,4]},o.createElement(r.Tabs,{selected:t,onChange:i},a.map((e=>{let{label:n}=e;return o.createElement(r.Tab,{key:n,label:o.createElement(r.Text,null,n),minWidth:"auto",maxWidth:"auto",padding:[1,4],background:"mainBackground",small:!0})})))),o.createElement(r.Flex,{flex:!0},o.createElement(P,{noMargin:!0},a[t].children)))};var D=t(27467),A=t(47767),S=t(3914),M=t(27776),E=t(9060);const N=e=>{let{children:n,onClick:t}=e;return o.createElement(r.Box,{as:"a",cursor:"pointer",onClick:t},n)},R=e=>{let{categoryId:n,navigateToSettings:t,children:i}=e;const a=(0,A.Zp)(),[,s]=(0,D.N9)("selectedIntegrationCategory"),r=(0,S.bq)(),{pushCategory:l}=(0,M.b8)(),c=(0,E.A)(),d=(0,o.useCallback)((()=>{t?(s("deploy.docker-kubernetes"),a({pathname:"/spaces/".concat(r,"/settings/integrations"),replace:!0})):l(c(n))}),[l,n,c,t]);return o.createElement(N,{onClick:d},i)},H=(0,o.memo)(R);t(25440),t(79978),t(3064),t(72577);var I=t(22292),O=t(46741);const L=e=>{let{showClaimingOptions:n,command:t="",claimToken:o="",claimUrl:i="",claimRooms:a=""}=e;if(n)return t.replaceAll(/{% if \$showClaimingOptions %}\n?/gi,"").replaceAll(/{% \/if %}\n?/gi,"").replaceAll(/{% claim_token %}/gi,o).replaceAll(/{% claim_url %}/gi,i).replaceAll(/{% \$claim_rooms %}/gi,a);return t.replaceAll(/{%\s*if\s*\$showClaimingOptions\s*%}[\s\S]*?{%\s*\/if\s*%}\n?/gs,"")},U=e=>{var n;let{methods:t,isNightly:i,claimToken:a="",claimUrl:s="",claimRooms:l=""}=e;const c=i?"nightly":"stable",{showClaimingOptions:d}=(()=>{const e=(0,I.uW)("isAnonymous"),n=(0,O.JT)("node:Create");return{showClaimingOptions:!e&&n}})();return t.length?d&&!a?o.createElement(r.Flex,{padding:[8,0]},o.createElement(r.Text,null,"Loading token...")):t.length>1?o.createElement(q,null,t.map((e=>{let{method:n,commands:t}=e;const{command:i}=t.find((e=>e.channel==c))||{};return o.createElement(r.Tab,{key:n,label:n},L({showClaimingOptions:d,command:i,claimToken:a,claimUrl:s,claimRooms:l}))}))):o.createElement(P,null,L({showClaimingOptions:d,command:((null===(n=t[0])||void 0===n?void 0:n.commands.find((e=>e.channel==c)))||{}).command||"",claimToken:a,claimUrl:s,claimRooms:l})):null},B={nodes:y,tags:{details:{render:b,attributes:{summary:{type:String,default:""},open:{type:Boolean,default:!1}}},tabs:{render:q},tab:{render:r.Tab,attributes:{label:{type:String,default:""}}},terminal:{render:P},goToCategory:{render:H,attributes:{categoryId:{type:String,default:""},navigateToSettings:{type:Boolean,default:!1}}},command:{render:U,attributes:{methods:{type:Array,default:[]},isNightly:{type:Boolean,default:!1},claimToken:{type:String,default:""},claimUrl:{type:String,default:""},claimRooms:{type:String,default:""}}}}},j=e=>{let{config:n={},children:t}=e;return o.createElement(i.A,{transformConfiguration:{...B,...n}},t)},G=(0,o.memo)(j)},67962:(e,n,t)=>{t.d(n,{A:()=>y});var o=t(96540),i=t(83199),a=t(12602),s=t(6586),r=t(73865),l=t(63314);const c=()=>{const{loaded:e,hasLimitations:n,maxNodes:t,preferredNodes:c}=(0,r.A)();return n&&e&&c.length==t?o.createElement(l.Ay,{feature:"ActiveNodesLimitWarning"},o.createElement(i.Flex,{gap:2},o.createElement(i.Icon,{size:"medium",color:"warning",name:"warning_triangle"}),o.createElement(i.TextBig,null,"If you connect a new node you'll"," ",o.createElement(i.TextBig,{strong:!0},"exceed the limit of ",t," active Nodes"),". To unblock the new node, either"," ",o.createElement(a.A,null,o.createElement(i.TextBig,{color:"primary"},"upgrade to the Business plan"))," ","for unlimited access or"," ",o.createElement(s.A,null,o.createElement(i.TextBig,{color:"primary"},"review your Space active Nodes on the Setting page")),"."))):null};var d=t(3914),u=t(46741),m=t(37618);const p=()=>{const e=(0,d.vt)(),n=(0,m.ES)(e),t=(0,u.JT)("node:Create");return n||t?null:o.createElement(l.Ay,{feature:"IntegrationsNodeCreatePermissionWarning"},o.createElement(i.Flex,{gap:2,background:"warningSemi",padding:[2]},o.createElement(i.Icon,{size:"medium",color:"text",name:"warning_triangle"}),o.createElement(i.TextBig,null,"You don't have permissions to connect new nodes to the Space. Please contact an administrator to do it or just install Netdata on your node.")))};var h=t(24695),g=t(74530),f=t(69765);const y=e=>{let{integration:n={},isNightly:t,rooms:a=[],navigateToSettings:s}=e;const{deployContent:r,methods:l}=n,u=(0,d.vt)(),m=(0,f.pr)(),y=(0,f.XA)(),b=null!==y&&void 0!==y&&y.loaded?y:m,_=null===b||void 0===b?void 0:b.id,w=(0,g.A)(u),v=window.envSettings.apiUrl,T=a.length?a.join(","):_,k=(0,o.useMemo)((()=>{var e;return{variables:{methods:l,isNightly:t,claimToken:null===w||void 0===w||null===(e=w[0])||void 0===e?void 0:e.token,claimUrl:v,claimRooms:T,navigateToSettings:s}}}),[l,t,w,v,T,s]);return o.createElement(i.Flex,{width:"100%",column:!0,padding:[4,0,0,0]},o.createElement(c,null),o.createElement(p,null),o.createElement(h.A,{config:k},r))}},89009:(e,n,t)=>{t.d(n,{A:()=>k});var o=t(96540),i=t(63950),a=t.n(i),s=t(83199),r=t(4659),l=t(29217),c=t(47130),d=t(32089),u=t(53285),m=(t(9391),t(62953),t(47444)),p=t(3914),h=t(93740),g=t(89916),f=t(87659),y=t(71835);const b=()=>{const e=(0,p.vt)(),[n,,t,o]=(0,f.A)(),[i,a]=(0,y.A)();return{loading:n,recycleToken:(0,m.Zs)((n=>{let{set:s}=n;return()=>{t(),(0,h.X)(e).then((n=>{let{data:t}=n;s((0,g.g)(e),t),i({text:"Successfully expired last token and created a new one."})})).catch(a).finally((()=>{o()}))}}),[e,t,o,i,a])}};var _=t(59778);const w=(0,t(92155).A)((0,c.A)(s.Button)),v={left:"stable",right:"nightly"},T=e=>{let{right:n}=e;const{title:t,description:i}=_.d[v[n?"right":"left"]]||{};return o.createElement(l.A,{content:i,align:"bottom"},o.createElement(s.Text,{padding:n?[0,0,0,1]:[0,1,0,0]},t))},k=e=>{let{isNightly:n,toggleNightly:t=a()}=e;const{loading:i,recycleToken:l}=b();return o.createElement(s.Flex,{gap:4},o.createElement(s.Flex,{column:!0,gap:1},o.createElement(r.A,{href:"https://learn.netdata.cloud/docs/getting-started/install-netdata#nightly-vs-stable-releases",rel:"noopener noreferrer",target:"_blank"},o.createElement(s.Flex,{alignItems:"center",gap:1},o.createElement(s.Text,{color:"primary"},"Updates channel"),o.createElement(s.Icon,{color:"primary",name:"goToNode",width:"18px",height:"18px"}))),o.createElement(s.Toggle,{labelLeft:"Stable",labelRight:"Nightly",Label:T,colored:!1,checked:n,disabled:!1,onChange:t})),o.createElement(d.A,{vertical:!0}),o.createElement(u.A,{permission:"node:Create"},(e=>o.createElement(w,{feature:"ClaimingToken",label:"Regenerate Token",flavour:"hollow",onClick:l,tooltip:e?"Expire the current token and claim a new one.":"Only admins can regenerate the token.",disabled:i||!e}))))}},58205:(e,n,t)=>{t.d(n,{V0:()=>U,vD:()=>X,jI:()=>W,qC:()=>B,Jr:()=>Y,v2:()=>j,D_:()=>z,yI:()=>L,rP:()=>F,aw:()=>G});var o=t(58168),i=(t(62953),t(96540)),a=t(63950),s=t.n(a),r=t(83199),l=t(43529),c=t(8711),d=t(3914),u=t(98046),m=t(87659),p=t(47373);const h=e=>{let{name:n,onEdit:t=s()}=e;return i.createElement(r.Flex,{alignItems:"center",gap:2},i.createElement(r.TextBig,null,n),i.createElement(r.Button,{icon:"pencilOutline",flavour:"borderless",iconColor:"text",iconSize:"small",padding:[0],onClick:t}))},g=(0,c.default)(r.Flex).withConfig({displayName:"spaceInfo__StyledWrapper",componentId:"sc-166ce7m-0"})(["margin-top:-3px !important;margin-bottom:-3px !important;"]),f=e=>{let{name:n,setName:t=s(),onSave:o=s(),onCancel:a=s(),isLoading:l}=e;const[c,d]=(0,i.useState)(),u=(0,i.useMemo)((()=>(0,p.fc)(n)),[n]);return i.createElement(g,{gap:2},i.createElement(r.TextInput,{value:n,onChange:e=>{d(!0),t(e.target.value)},onKeyDown:e=>{let{code:n}=e;["Enter","NumpadEnter"].includes(n)&&o()},disabled:l,size:"tiny",error:p.xc[u],isDirty:c,instantFeedback:"all"}),i.createElement(r.Button,{label:"Save",flavour:"borderless",iconColor:"text",iconSize:"small",padding:[0],onClick:o,disabled:l||!!u}),i.createElement(r.Button,{label:"Cancel",flavour:"borderless",iconColor:"text",iconSize:"small",padding:[0],onClick:a,disabled:l}))},y=()=>{const{id:e,name:n}=(0,d.ap)(),t=(0,u.A)(e),[o,,a,s]=(0,m.A)(),[r,,l,c]=(0,m.A)(),[p,g]=(0,i.useState)(n),y=(0,i.useCallback)((()=>{s(),c()}),[]),b=(0,i.useCallback)((()=>{a(),t({name:p},{onSuccess:y,onFail:s})}),[p]);return r?i.createElement(f,{name:p,setName:g,onSave:b,onCancel:c,isLoading:o}):i.createElement(h,{name:n,onEdit:l})};var b=t(29217),_=t(38413),w=t(4659),v=t(69765),T=t(87860),k=t(81048),x=t(5668),P=t(46741);t(25440);const C=(0,t(92155).A)(r.Button),q={light:"primary",dark:"white",unspecified:"primary"},D=e=>{let{onClick:n}=e;const t={icon:"add_user",flavour:"borderless",onClick:n,label:"Invite your team","data-ga":"integrations::click-invite-team::header"};return(0,P.JT)("space:InviteUser")?i.createElement(C,t):i.createElement(b.A,{content:"You can't invite a user with your current permissions"},i.createElement(r.Flex,null,i.createElement(C,(0,o.A)({},t,{disabled:!0}))))},A=e=>{let{nodesCount:n,onClick:t=s()}=e;const o=(0,P.JT)("node:Create"),a=(0,i.useMemo)((()=>({onClick:t,disabled:!o})),[o]),l=n>0?"Connect more!":"Connect a node";return o?i.createElement(w.A,a,l):i.createElement(b.A,{content:"You don't have permission to connect new nodes. Please contact an administrator to do it"},i.createElement(r.Box,null,i.createElement(w.A,a,l)))},S=e=>{let{nodesCount:n,onConnectClick:t=s()}=e;return i.createElement(r.Flex,{gap:2},i.createElement(A,{nodesCount:n,onClick:t}),i.createElement(r.Text,null,"to get started"))},M=e=>{let{nodesCount:n,onConnectClick:t=s()}=e;return i.createElement(r.Flex,{gap:2},i.createElement(r.Text,null,"You have connected ",n," node",1===n?"":"s","."),i.createElement(A,{nodesCount:n,onClick:t}))},E=(0,i.memo)((e=>{let{nodesCount:n,onConnectClick:t=s()}=e;return i.createElement(r.Flex,{gap:2},i.createElement(r.Text,null,"This is your new space"),n>0?i.createElement(M,{nodesCount:n,onConnectClick:t}):i.createElement(S,{nodesCount:n,onConnectClick:t}))})),N=e=>{let{onInvite:n=s()}=e;const t=(0,x.xd)("theme"),o=(0,d.vt)(),a=(0,v.ID)(),c=(0,v.J_)(o,k.mL),[u,,p,h]=(0,m.A)(),g=(()=>{const e=(0,d.bq)(),n=(0,v.QW)();return(0,i.useCallback)((()=>{window.location.replace("/spaces/".concat(e,"/rooms/").concat(n,"/overview"))}),[])})(),[f,b]=(0,i.useState)([]);(0,T.A)({spaceId:o,id:a||c,pollingInterval:3e3,keepPolling:!0,onNodeIdsChange:e=>{let{nodeIds:n}=e;return b((null===n||void 0===n?void 0:n.length)||0)}});const w=f>0;return(0,i.useEffect)((()=>{w&&g()}),[w]),i.createElement(i.Fragment,null,i.createElement(l.A,{height:"66px",width:"66px",color:q[t]}),i.createElement(r.H1,{strong:!1},"Welcome to Netdata!"),i.createElement(E,{nodesCount:f,onConnectClick:e=>{e.preventDefault,p()}}),i.createElement(y,null),i.createElement(r.Flex,{gap:4},i.createElement(D,{onClick:n}),i.createElement(C,{icon:"rocket",flavour:w?"default":"borderless",onClick:g,label:w?"Launch space":"Node Required for Launch",disabled:!w,fetaure:"LaunchSpace"})),u&&i.createElement(_.A,{onClose:h,room:a}))},R=()=>i.createElement(i.Fragment,null,i.createElement(r.H1,{strong:!1},"Integrations Made Easy!"),i.createElement(r.Text,null,"Unleash the Power of Connected Systems"));var H=t(67962),I=t(24695);const O=e=>{let{integration:n={}}=e;return i.createElement(r.Flex,{width:"100%",column:!0,gap:2,padding:[4,0,0,0]},i.createElement(I.A,null,n.alerts))},L="deploy.operating-systems",U=34,B="data-collection",j="deploy-kubernetes",G={deploy:"rocket","data-collection":"collect",notify:"alarmFilled",export:"importExport",logs:void 0},F={deploy:H.A,"alert-notifications":O},z={homePage:"homePage",settingsPage:"settingsPage",addNodesModal:"addNodesModal"},Y=z.homePage,X={homePage:{headerContent:N},settingsPage:{headerContent:R},addNodesModal:{headerContent:null}},W={homePage:{header:{height:284,wrapperProps:{padding:[4,0]}},search:{wrapperProps:{width:"500px",margin:[0]},inputProps:{containerStyles:{width:"100%"}}},cncf:{height:80},categoryCharacterWidth:9},settingsPage:{header:{height:210,wrapperProps:{padding:[4,0]}},search:{wrapperProps:{width:"500px",margin:[0]},inputProps:{containerStyles:{width:"100%"}}},cncf:{height:0},categoryCharacterWidth:9},addNodesModal:{header:{height:126,wrapperProps:{width:"100%",padding:[4]}},search:{wrapperProps:{width:"100%",margin:[0],flex:!0},inputProps:{containerStyles:{width:"500px"},size:"small"}},cncf:{height:16},categoryCharacterWidth:9}}},9060:(e,n,t)=>{t.d(n,{A:()=>i});t(3064),t(98992),t(72577);var o=t(27776);const i=()=>{const e=(0,o.j6)();return n=>e.find((e=>e.id==n))}},27776:(e,n,t)=>{t.d(n,{j6:()=>x,x9:()=>T,hh:()=>v,XL:()=>N,b8:()=>k,FF:()=>D,oE:()=>S,GT:()=>A,AR:()=>q,yv:()=>E,q2:()=>M,WB:()=>C,Ss:()=>P});t(17333),t(3064),t(41393),t(98992),t(54520),t(72577),t(81454),t(62953);var o=t(96540),i=t(47444),a=t(27467);const s=[{id:"deploy",name:"Deploy",description:"",most_popular:!0,priority:1,children:[{id:"deploy.operating-systems",name:"Operating Systems",description:"",most_popular:!0,priority:1,children:[]},{id:"deploy.docker-kubernetes",name:"Docker & Kubernetes",description:"",most_popular:!0,priority:2,children:[]},{id:"deploy.provisioning-systems",parent:"deploy",name:"Provisioning Systems",description:"",most_popular:!1,priority:-1,children:[]}]},{id:"data-collection",name:"Data Collection",description:"",most_popular:!0,priority:2,children:[{id:"data-collection.other",name:"Other",description:"",most_popular:!1,priority:-1,collector_default:!0,children:[]},{id:"data-collection.ebpf",name:"eBPF",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.freebsd",name:"FreeBSD",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.containers-and-vms",name:"Containers and VMs",description:"",most_popular:!0,priority:6,children:[]},{id:"data-collection.database-servers",name:"Databases",description:"",most_popular:!0,priority:1,children:[]},{id:"data-collection.kubernetes",name:"Kubernetes",description:"",most_popular:!0,priority:7,children:[]},{id:"data-collection.notifications",name:"Incident Management",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.service-discovery-registry",name:"Service Discovery / Registry",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.web-servers-and-web-proxies",name:"Web Servers and Web Proxies",description:"",most_popular:!0,priority:2,children:[]},{id:"data-collection.cloud-provider-managed",name:"Cloud Provider Managed",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.windows-systems",name:"Windows Systems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.apm",name:"APM",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.hardware-devices-and-sensors",name:"Hardware Devices and Sensors",description:"",most_popular:!0,priority:4,children:[]},{id:"data-collection.macos-systems",name:"macOS Systems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.message-brokers",name:"Message Brokers",description:"",most_popular:!0,priority:3,children:[]},{id:"data-collection.provisioning-systems",name:"Provisioning Systems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.search-engines",name:"Search Engines",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems",name:"Linux Systems",description:"",most_popular:!0,priority:5,children:[{id:"data-collection.linux-systems.system-metrics",name:"System",description:"",most_popular:!0,priority:1,children:[]},{id:"data-collection.linux-systems.memory-metrics",name:"Memory",description:"",most_popular:!0,priority:3,children:[]},{id:"data-collection.linux-systems.cpu-metrics",name:"CPU",description:"",most_popular:!0,priority:2,children:[]},{id:"data-collection.linux-systems.pressure-metrics",name:"Pressure",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems.network-metrics",name:"Network",description:"",most_popular:!0,priority:5,children:[]},{id:"data-collection.linux-systems.ipc-metrics",name:"IPC",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems.disk-metrics",name:"Disk",description:"",most_popular:!0,priority:4,children:[]},{id:"data-collection.linux-systems.firewall-metrics",name:"Firewall",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems.power-supply-metrics",name:"Power Supply",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems.filesystem-metrics",name:"Filesystem",description:"",most_popular:!1,priority:-1,children:[{id:"data-collection.linux-systems.filesystem-metrics.zfs",name:"ZFS",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems.filesystem-metrics.btrfs",name:"BTRFS",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.linux-systems.filesystem-metrics.nfs",name:"NFS",description:"",most_popular:!1,priority:-1,children:[]}]},{id:"data-collection.linux-systems.kernel-metrics",name:"Kernel",description:"",most_popular:!1,priority:-1,children:[]}]},{id:"data-collection.networking-stack-and-network-interfaces",name:"Networking Stack and Network Interfaces",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.synthetic-checks",name:"Synthetic Checks",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.ci-cd-systems",name:"CICD Platforms",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.ups",name:"UPS",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.freebsd-systems",name:"FreeBSD Systems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.logs-servers",name:"Logs Servers",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.security-systems",name:"Security Systems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.observability",name:"Observability",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.gaming",name:"Gaming",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.iot-devices",name:"IoT Devices",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.media-streaming-servers",name:"Media Services",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.authentication-and-authorization",name:"Authentication and Authorization",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.project-management",name:"Project Management",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.application-servers",name:"Application Servers",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.dns-and-dhcp-servers",name:"DNS and DHCP Servers",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.mail-servers",name:"Mail Servers",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.processes-and-system-services",name:"Processes and System Services",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.storage-mount-points-and-filesystems",name:"Storage, Mount Points and Filesystems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.systemd",name:"Systemd",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.telephony-servers",name:"Telephony Servers",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.vpns",name:"VPNs",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.blockchain-servers",name:"Blockchain Servers",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.distributed-computing-systems",name:"Distributed Computing Systems",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.generic-data-collection",name:"Generic Data Collection",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.p2p",name:"P2P",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.snmp-and-networked-devices",name:"SNMP and Networked Devices",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.system-clock-and-ntp",name:"System Clock and NTP",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.nas",name:"NAS",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.api-gateways",name:"API Gateways",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.task-queues",name:"Task Queues",description:"",most_popular:!1,priority:-1,children:[]},{id:"data-collection.ftp-servers",name:"FTP Servers",description:"",most_popular:!1,priority:-1,children:[]}]},{id:"logs",name:"Logs",description:"Monitoring logs on your infrastructure",most_popular:!0,priority:3,children:[]},{id:"export",name:"exporters",description:"Exporter Integrations",most_popular:!0,priority:6,children:[]},{id:"notify",name:"notifications",description:"Notification Integrations",most_popular:!0,priority:4,children:[{id:"notify.agent",name:"Agent Dispatched Notifications",description:"",most_popular:!0,priority:2,children:[]},{id:"notify.cloud",name:"Centralized Cloud Notifications",description:"",most_popular:!0,priority:1,children:[]}]},{id:"auth",name:"authentication",description:"Authentication & Authorization",most_popular:!0,priority:5,children:[]}],r=[{meta:{plugin_name:"apps.plugin",module_name:"apps",monitored_instance:{name:"Applications",link:"",categories:["data-collection.processes-and-system-services"],icon_filename:"applications.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["applications","processes","os","host monitoring"],most_popular:!1},overview:"# Applications\n\nPlugin: apps.plugin\nModule: apps\n\n## Overview\n\nMonitor Applications for optimal software performance and resource usage.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per applications group\n\nThese metrics refer to the application group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.cpu_utilization | user, system | percentage |\n| app.cpu_guest_utilization | guest | percentage |\n| app.cpu_context_switches | voluntary, involuntary | switches/s |\n| app.mem_usage | rss | MiB |\n| app.mem_private_usage | mem | MiB |\n| app.vmem_usage | vmem | MiB |\n| app.mem_page_faults | minor, major | pgfaults/s |\n| app.swap_usage | swap | MiB |\n| app.disk_physical_io | reads, writes | KiB/s |\n| app.disk_logical_io | reads, writes | KiB/s |\n| app.processes | processes | processes |\n| app.threads | threads | threads |\n| app.fds_open_limit | limit | percentage |\n| app.fds_open | files, sockets, pipes, inotifies, event, timer, signal, eventpolls, other | fds |\n| app.uptime | uptime | seconds |\n| app.uptime_summary | min, avg, max | seconds |\n\n",integration_type:"collector",id:"apps.plugin-apps-Applications",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/apps.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"apps.plugin",module_name:"groups",monitored_instance:{name:"User Groups",link:"",categories:["data-collection.processes-and-system-services"],icon_filename:"user.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["groups","processes","user auditing","authorization","os","host monitoring"],most_popular:!1},overview:"# User Groups\n\nPlugin: apps.plugin\nModule: groups\n\n## Overview\n\nThis integration monitors resource utilization on a user groups context.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per user group\n\nThese metrics refer to the user group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| user_group | The name of the user group. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| usergroup.cpu_utilization | user, system | percentage |\n| usergroup.cpu_guest_utilization | guest | percentage |\n| usergroup.cpu_context_switches | voluntary, involuntary | switches/s |\n| usergroup.mem_usage | rss | MiB |\n| usergroup.mem_private_usage | mem | MiB |\n| usergroup.vmem_usage | vmem | MiB |\n| usergroup.mem_page_faults | minor, major | pgfaults/s |\n| usergroup.swap_usage | swap | MiB |\n| usergroup.disk_physical_io | reads, writes | KiB/s |\n| usergroup.disk_logical_io | reads, writes | KiB/s |\n| usergroup.processes | processes | processes |\n| usergroup.threads | threads | threads |\n| usergroup.fds_open_limit | limit | percentage |\n| usergroup.fds_open | files, sockets, pipes, inotifies, event, timer, signal, eventpolls, other | fds |\n| usergroup.uptime | uptime | seconds |\n| usergroup.uptime_summary | min, avg, max | seconds |\n\n",integration_type:"collector",id:"apps.plugin-groups-User_Groups",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/apps.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"apps.plugin",module_name:"users",monitored_instance:{name:"Users",link:"",categories:["data-collection.processes-and-system-services"],icon_filename:"users.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["users","processes","os","host monitoring"],most_popular:!1},overview:"# Users\n\nPlugin: apps.plugin\nModule: users\n\n## Overview\n\nThis integration monitors resource utilization on a user context.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per user\n\nThese metrics refer to the user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| user | The name of the user. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| user.cpu_utilization | user, system | percentage |\n| user.cpu_guest_utilization | guest | percentage |\n| user.cpu_context_switches | voluntary, involuntary | switches/s |\n| user.mem_usage | rss | MiB |\n| user.mem_private_usage | mem | MiB |\n| user.vmem_usage | vmem | MiB |\n| user.mem_page_faults | minor, major | pgfaults/s |\n| user.swap_usage | swap | MiB |\n| user.disk_physical_io | reads, writes | KiB/s |\n| user.disk_logical_io | reads, writes | KiB/s |\n| user.processes | processes | processes |\n| user.threads | threads | threads |\n| user.fds_open_limit | limit | percentage |\n| user.fds_open | files, sockets, pipes, inotifies, event, timer, signal, eventpolls, other | fds |\n| user.uptime | uptime | seconds |\n| user.uptime_summary | min, avg, max | seconds |\n\n",integration_type:"collector",id:"apps.plugin-users-Users",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/apps.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"Containers",link:"",categories:["data-collection.containers-and-vms"],icon_filename:"container.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["containers"],most_popular:!0},overview:"# Containers\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor Containers for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.mem_usage | cgroup memory utilization |\n| [ cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cpu_limit | used | percentage |\n| cgroup.cpu | user, system | percentage |\n| cgroup.cpu_per_core | a dimension per core | percentage |\n| cgroup.throttled | throttled | percentage |\n| cgroup.throttled_duration | duration | ms |\n| cgroup.cpu_shares | shares | shares |\n| cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| cgroup.writeback | dirty, writeback | MiB |\n| cgroup.mem_activity | in, out | MiB/s |\n| cgroup.pgfaults | pgfault, swap | MiB/s |\n| cgroup.mem_usage | ram, swap | MiB |\n| cgroup.mem_usage_limit | available, used | MiB |\n| cgroup.mem_utilization | utilization | percentage |\n| cgroup.mem_failcnt | failures | count |\n| cgroup.io | read, write | KiB/s |\n| cgroup.serviced_ops | read, write | operations/s |\n| cgroup.throttle_io | read, write | KiB/s |\n| cgroup.throttle_serviced_ops | read, write | operations/s |\n| cgroup.queued_ops | read, write | operations |\n| cgroup.merged_ops | read, write | operations/s |\n| cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_some_pressure_stall_time | time | ms |\n| cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_full_pressure_stall_time | time | ms |\n| cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_some_pressure_stall_time | time | ms |\n| cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_full_pressure_stall_time | time | ms |\n| cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| cgroup.io_some_pressure_stall_time | time | ms |\n| cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| cgroup.io_full_pressure_stall_time | time | ms |\n| cgroup.pids_current | pids | pids |\n\n### Per cgroup network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_net | received, sent | kilobits/s |\n| cgroup.net_packets | received, sent, multicast | pps |\n| cgroup.net_errors | inbound, outbound | errors/s |\n| cgroup.net_drops | inbound, outbound | errors/s |\n| cgroup.net_fifo | receive, transmit | errors/s |\n| cgroup.net_compressed | receive, sent | pps |\n| cgroup.net_events | frames, collisions, carrier | events/s |\n| cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| cgroup.net_carrier | up, down | state |\n| cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-Containers",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"Kubernetes Containers",link:"https://kubernetes.io/",icon_filename:"kubernetes.svg",categories:["data-collection.kubernetes"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["k8s","kubernetes","pods","containers"],most_popular:!0},overview:"# Kubernetes Containers\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor Containers for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ k8s_cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | k8s.cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ k8s_cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | k8s.cgroup.mem_usage | cgroup memory utilization |\n| [ k8s_cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | k8s.cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ k8s_cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | k8s.cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per k8s cgroup\n\nThese metrics refer to the Pod container.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| k8s_node_name | Node name. The value of _pod.spec.nodeName_. |\n| k8s_namespace | Namespace name. The value of _pod.metadata.namespace_. |\n| k8s_controller_kind | Controller kind (ReplicaSet, DaemonSet, StatefulSet, Job, etc.). The value of _pod.OwnerReferences.Controller.Kind_. |\n| k8s_controller_name | Controller name.The value of _pod.OwnerReferences.Controller.Name_. |\n| k8s_pod_name | Pod name. The value of _pod.metadata.name_. |\n| k8s_container_name | Container name. The value of _pod.spec.containers.name_. |\n| k8s_kind | Instance kind: "pod" or "container". |\n| k8s_qos_class | QoS class (guaranteed, burstable, besteffort). |\n| k8s_cluster_id | Cluster ID. The value of kube-system namespace _namespace.metadata.uid_. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s.cgroup.cpu_limit | used | percentage |\n| k8s.cgroup.cpu | user, system | percentage |\n| k8s.cgroup.cpu_per_core | a dimension per core | percentage |\n| k8s.cgroup.throttled | throttled | percentage |\n| k8s.cgroup.throttled_duration | duration | ms |\n| k8s.cgroup.cpu_shares | shares | shares |\n| k8s.cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| k8s.cgroup.writeback | dirty, writeback | MiB |\n| k8s.cgroup.mem_activity | in, out | MiB/s |\n| k8s.cgroup.pgfaults | pgfault, swap | MiB/s |\n| k8s.cgroup.mem_usage | ram, swap | MiB |\n| k8s.cgroup.mem_usage_limit | available, used | MiB |\n| k8s.cgroup.mem_utilization | utilization | percentage |\n| k8s.cgroup.mem_failcnt | failures | count |\n| k8s.cgroup.io | read, write | KiB/s |\n| k8s.cgroup.serviced_ops | read, write | operations/s |\n| k8s.cgroup.throttle_io | read, write | KiB/s |\n| k8s.cgroup.throttle_serviced_ops | read, write | operations/s |\n| k8s.cgroup.queued_ops | read, write | operations |\n| k8s.cgroup.merged_ops | read, write | operations/s |\n| k8s.cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| k8s.cgroup.cpu_some_pressure_stall_time | time | ms |\n| k8s.cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| k8s.cgroup.cpu_full_pressure_stall_time | time | ms |\n| k8s.cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| k8s.cgroup.memory_some_pressure_stall_time | time | ms |\n| k8s.cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| k8s.cgroup.memory_full_pressure_stall_time | time | ms |\n| k8s.cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| k8s.cgroup.io_some_pressure_stall_time | time | ms |\n| k8s.cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| k8s.cgroup.io_full_pressure_stall_time | time | ms |\n| k8s.cgroup.pids_current | pids | pids |\n\n### Per k8s cgroup network device\n\nThese metrics refer to the Pod container network interface.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n| k8s_node_name | Node name. The value of _pod.spec.nodeName_. |\n| k8s_namespace | Namespace name. The value of _pod.metadata.namespace_. |\n| k8s_controller_kind | Controller kind (ReplicaSet, DaemonSet, StatefulSet, Job, etc.). The value of _pod.OwnerReferences.Controller.Kind_. |\n| k8s_controller_name | Controller name.The value of _pod.OwnerReferences.Controller.Name_. |\n| k8s_pod_name | Pod name. The value of _pod.metadata.name_. |\n| k8s_container_name | Container name. The value of _pod.spec.containers.name_. |\n| k8s_kind | Instance kind: "pod" or "container". |\n| k8s_qos_class | QoS class (guaranteed, burstable, besteffort). |\n| k8s_cluster_id | Cluster ID. The value of kube-system namespace _namespace.metadata.uid_. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s.cgroup.net_net | received, sent | kilobits/s |\n| k8s.cgroup.net_packets | received, sent, multicast | pps |\n| k8s.cgroup.net_errors | inbound, outbound | errors/s |\n| k8s.cgroup.net_drops | inbound, outbound | errors/s |\n| k8s.cgroup.net_fifo | receive, transmit | errors/s |\n| k8s.cgroup.net_compressed | receive, sent | pps |\n| k8s.cgroup.net_events | frames, collisions, carrier | events/s |\n| k8s.cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| k8s.cgroup.net_carrier | up, down | state |\n| k8s.cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-Kubernetes_Containers",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"LXC Containers",link:"",icon_filename:"lxc.png",categories:["data-collection.containers-and-vms"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["lxc","lxd","container"],most_popular:!0},overview:"# LXC Containers\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor LXC Containers for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.mem_usage | cgroup memory utilization |\n| [ cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cpu_limit | used | percentage |\n| cgroup.cpu | user, system | percentage |\n| cgroup.cpu_per_core | a dimension per core | percentage |\n| cgroup.throttled | throttled | percentage |\n| cgroup.throttled_duration | duration | ms |\n| cgroup.cpu_shares | shares | shares |\n| cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| cgroup.writeback | dirty, writeback | MiB |\n| cgroup.mem_activity | in, out | MiB/s |\n| cgroup.pgfaults | pgfault, swap | MiB/s |\n| cgroup.mem_usage | ram, swap | MiB |\n| cgroup.mem_usage_limit | available, used | MiB |\n| cgroup.mem_utilization | utilization | percentage |\n| cgroup.mem_failcnt | failures | count |\n| cgroup.io | read, write | KiB/s |\n| cgroup.serviced_ops | read, write | operations/s |\n| cgroup.throttle_io | read, write | KiB/s |\n| cgroup.throttle_serviced_ops | read, write | operations/s |\n| cgroup.queued_ops | read, write | operations |\n| cgroup.merged_ops | read, write | operations/s |\n| cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_some_pressure_stall_time | time | ms |\n| cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_full_pressure_stall_time | time | ms |\n| cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_some_pressure_stall_time | time | ms |\n| cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_full_pressure_stall_time | time | ms |\n| cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| cgroup.io_some_pressure_stall_time | time | ms |\n| cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| cgroup.io_full_pressure_stall_time | time | ms |\n| cgroup.pids_current | pids | pids |\n\n### Per cgroup network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_net | received, sent | kilobits/s |\n| cgroup.net_packets | received, sent, multicast | pps |\n| cgroup.net_errors | inbound, outbound | errors/s |\n| cgroup.net_drops | inbound, outbound | errors/s |\n| cgroup.net_fifo | receive, transmit | errors/s |\n| cgroup.net_compressed | receive, sent | pps |\n| cgroup.net_events | frames, collisions, carrier | events/s |\n| cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| cgroup.net_carrier | up, down | state |\n| cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-LXC_Containers",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"Libvirt Containers",link:"",icon_filename:"libvirt.png",categories:["data-collection.containers-and-vms"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["libvirt","container"],most_popular:!0},overview:"# Libvirt Containers\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor Libvirt for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.mem_usage | cgroup memory utilization |\n| [ cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cpu_limit | used | percentage |\n| cgroup.cpu | user, system | percentage |\n| cgroup.cpu_per_core | a dimension per core | percentage |\n| cgroup.throttled | throttled | percentage |\n| cgroup.throttled_duration | duration | ms |\n| cgroup.cpu_shares | shares | shares |\n| cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| cgroup.writeback | dirty, writeback | MiB |\n| cgroup.mem_activity | in, out | MiB/s |\n| cgroup.pgfaults | pgfault, swap | MiB/s |\n| cgroup.mem_usage | ram, swap | MiB |\n| cgroup.mem_usage_limit | available, used | MiB |\n| cgroup.mem_utilization | utilization | percentage |\n| cgroup.mem_failcnt | failures | count |\n| cgroup.io | read, write | KiB/s |\n| cgroup.serviced_ops | read, write | operations/s |\n| cgroup.throttle_io | read, write | KiB/s |\n| cgroup.throttle_serviced_ops | read, write | operations/s |\n| cgroup.queued_ops | read, write | operations |\n| cgroup.merged_ops | read, write | operations/s |\n| cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_some_pressure_stall_time | time | ms |\n| cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_full_pressure_stall_time | time | ms |\n| cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_some_pressure_stall_time | time | ms |\n| cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_full_pressure_stall_time | time | ms |\n| cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| cgroup.io_some_pressure_stall_time | time | ms |\n| cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| cgroup.io_full_pressure_stall_time | time | ms |\n| cgroup.pids_current | pids | pids |\n\n### Per cgroup network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_net | received, sent | kilobits/s |\n| cgroup.net_packets | received, sent, multicast | pps |\n| cgroup.net_errors | inbound, outbound | errors/s |\n| cgroup.net_drops | inbound, outbound | errors/s |\n| cgroup.net_fifo | receive, transmit | errors/s |\n| cgroup.net_compressed | receive, sent | pps |\n| cgroup.net_events | frames, collisions, carrier | events/s |\n| cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| cgroup.net_carrier | up, down | state |\n| cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-Libvirt_Containers",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"Proxmox Containers",link:"",icon_filename:"proxmox.png",categories:["data-collection.containers-and-vms"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["proxmox","container"],most_popular:!0},overview:"# Proxmox Containers\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor Proxmox for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.mem_usage | cgroup memory utilization |\n| [ cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cpu_limit | used | percentage |\n| cgroup.cpu | user, system | percentage |\n| cgroup.cpu_per_core | a dimension per core | percentage |\n| cgroup.throttled | throttled | percentage |\n| cgroup.throttled_duration | duration | ms |\n| cgroup.cpu_shares | shares | shares |\n| cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| cgroup.writeback | dirty, writeback | MiB |\n| cgroup.mem_activity | in, out | MiB/s |\n| cgroup.pgfaults | pgfault, swap | MiB/s |\n| cgroup.mem_usage | ram, swap | MiB |\n| cgroup.mem_usage_limit | available, used | MiB |\n| cgroup.mem_utilization | utilization | percentage |\n| cgroup.mem_failcnt | failures | count |\n| cgroup.io | read, write | KiB/s |\n| cgroup.serviced_ops | read, write | operations/s |\n| cgroup.throttle_io | read, write | KiB/s |\n| cgroup.throttle_serviced_ops | read, write | operations/s |\n| cgroup.queued_ops | read, write | operations |\n| cgroup.merged_ops | read, write | operations/s |\n| cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_some_pressure_stall_time | time | ms |\n| cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_full_pressure_stall_time | time | ms |\n| cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_some_pressure_stall_time | time | ms |\n| cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_full_pressure_stall_time | time | ms |\n| cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| cgroup.io_some_pressure_stall_time | time | ms |\n| cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| cgroup.io_full_pressure_stall_time | time | ms |\n| cgroup.pids_current | pids | pids |\n\n### Per cgroup network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_net | received, sent | kilobits/s |\n| cgroup.net_packets | received, sent, multicast | pps |\n| cgroup.net_errors | inbound, outbound | errors/s |\n| cgroup.net_drops | inbound, outbound | errors/s |\n| cgroup.net_fifo | receive, transmit | errors/s |\n| cgroup.net_compressed | receive, sent | pps |\n| cgroup.net_events | frames, collisions, carrier | events/s |\n| cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| cgroup.net_carrier | up, down | state |\n| cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-Proxmox_Containers",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"Systemd Services",link:"",icon_filename:"systemd.svg",categories:["data-collection.systemd"],keywords:["systemd","services"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["containers"],most_popular:!0},overview:"# Systemd Services\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor Containers for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per systemd service\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service_name | Service name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| systemd.service.cpu.utilization | user, system | percentage |\n| systemd.service.memory.usage | ram, swap | MiB |\n| systemd.service.memory.failcnt | fail | failures/s |\n| systemd.service.memory.ram.usage | rss, cache, mapped_file, rss_huge | MiB |\n| systemd.service.memory.writeback | writeback, dirty | MiB |\n| systemd.service.memory.paging.faults | minor, major | MiB/s |\n| systemd.service.memory.paging.io | in, out | MiB/s |\n| systemd.service.disk.io | read, write | KiB/s |\n| systemd.service.disk.iops | read, write | operations/s |\n| systemd.service.disk.throttle.io | read, write | KiB/s |\n| systemd.service.disk.throttle.iops | read, write | operations/s |\n| systemd.service.disk.queued_iops | read, write | operations/s |\n| systemd.service.disk.merged_iops | read, write | operations/s |\n| systemd.service.pids.current | pids | pids |\n\n",integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-Systemd_Services",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"Virtual Machines",link:"",icon_filename:"container.svg",categories:["data-collection.containers-and-vms"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["vms","virtualization","container"],most_popular:!0},overview:"# Virtual Machines\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor Virtual Machines for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.mem_usage | cgroup memory utilization |\n| [ cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cpu_limit | used | percentage |\n| cgroup.cpu | user, system | percentage |\n| cgroup.cpu_per_core | a dimension per core | percentage |\n| cgroup.throttled | throttled | percentage |\n| cgroup.throttled_duration | duration | ms |\n| cgroup.cpu_shares | shares | shares |\n| cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| cgroup.writeback | dirty, writeback | MiB |\n| cgroup.mem_activity | in, out | MiB/s |\n| cgroup.pgfaults | pgfault, swap | MiB/s |\n| cgroup.mem_usage | ram, swap | MiB |\n| cgroup.mem_usage_limit | available, used | MiB |\n| cgroup.mem_utilization | utilization | percentage |\n| cgroup.mem_failcnt | failures | count |\n| cgroup.io | read, write | KiB/s |\n| cgroup.serviced_ops | read, write | operations/s |\n| cgroup.throttle_io | read, write | KiB/s |\n| cgroup.throttle_serviced_ops | read, write | operations/s |\n| cgroup.queued_ops | read, write | operations |\n| cgroup.merged_ops | read, write | operations/s |\n| cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_some_pressure_stall_time | time | ms |\n| cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_full_pressure_stall_time | time | ms |\n| cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_some_pressure_stall_time | time | ms |\n| cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_full_pressure_stall_time | time | ms |\n| cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| cgroup.io_some_pressure_stall_time | time | ms |\n| cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| cgroup.io_full_pressure_stall_time | time | ms |\n| cgroup.pids_current | pids | pids |\n\n### Per cgroup network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_net | received, sent | kilobits/s |\n| cgroup.net_packets | received, sent, multicast | pps |\n| cgroup.net_errors | inbound, outbound | errors/s |\n| cgroup.net_drops | inbound, outbound | errors/s |\n| cgroup.net_fifo | receive, transmit | errors/s |\n| cgroup.net_compressed | receive, sent | pps |\n| cgroup.net_events | frames, collisions, carrier | events/s |\n| cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| cgroup.net_carrier | up, down | state |\n| cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-Virtual_Machines",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"cgroups.plugin",module_name:"/sys/fs/cgroup",monitored_instance:{name:"oVirt Containers",link:"",icon_filename:"ovirt.svg",categories:["data-collection.containers-and-vms"]},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ovirt","container"],most_popular:!0},overview:"# oVirt Containers\n\nPlugin: cgroups.plugin\nModule: /sys/fs/cgroup\n\n## Overview\n\nMonitor oVirt for performance, resource usage, and health status.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cgroup_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.cpu_limit | average cgroup CPU utilization over the last 10 minutes |\n| [ cgroup_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.mem_usage | cgroup memory utilization |\n| [ cgroup_1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ cgroup_10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cgroups.conf) | cgroup.net_packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cpu_limit | used | percentage |\n| cgroup.cpu | user, system | percentage |\n| cgroup.cpu_per_core | a dimension per core | percentage |\n| cgroup.throttled | throttled | percentage |\n| cgroup.throttled_duration | duration | ms |\n| cgroup.cpu_shares | shares | shares |\n| cgroup.mem | cache, rss, swap, rss_huge, mapped_file | MiB |\n| cgroup.writeback | dirty, writeback | MiB |\n| cgroup.mem_activity | in, out | MiB/s |\n| cgroup.pgfaults | pgfault, swap | MiB/s |\n| cgroup.mem_usage | ram, swap | MiB |\n| cgroup.mem_usage_limit | available, used | MiB |\n| cgroup.mem_utilization | utilization | percentage |\n| cgroup.mem_failcnt | failures | count |\n| cgroup.io | read, write | KiB/s |\n| cgroup.serviced_ops | read, write | operations/s |\n| cgroup.throttle_io | read, write | KiB/s |\n| cgroup.throttle_serviced_ops | read, write | operations/s |\n| cgroup.queued_ops | read, write | operations |\n| cgroup.merged_ops | read, write | operations/s |\n| cgroup.cpu_some_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_some_pressure_stall_time | time | ms |\n| cgroup.cpu_full_pressure | some10, some60, some300 | percentage |\n| cgroup.cpu_full_pressure_stall_time | time | ms |\n| cgroup.memory_some_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_some_pressure_stall_time | time | ms |\n| cgroup.memory_full_pressure | some10, some60, some300 | percentage |\n| cgroup.memory_full_pressure_stall_time | time | ms |\n| cgroup.io_some_pressure | some10, some60, some300 | percentage |\n| cgroup.io_some_pressure_stall_time | time | ms |\n| cgroup.io_full_pressure | some10, some60, some300 | percentage |\n| cgroup.io_full_pressure_stall_time | time | ms |\n| cgroup.pids_current | pids | pids |\n\n### Per cgroup network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container name or group path if name resolution fails. |\n| image | Docker/Podman container image name. |\n| device | The name of the host network interface linked to the container\'s network interface. |\n| container_device | Container network interface name. |\n| interface_type | Network interface type. Always "virtual" for the containers. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_net | received, sent | kilobits/s |\n| cgroup.net_packets | received, sent, multicast | pps |\n| cgroup.net_errors | inbound, outbound | errors/s |\n| cgroup.net_drops | inbound, outbound | errors/s |\n| cgroup.net_fifo | receive, transmit | errors/s |\n| cgroup.net_compressed | receive, sent | pps |\n| cgroup.net_events | frames, collisions, carrier | events/s |\n| cgroup.net_operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| cgroup.net_carrier | up, down | state |\n| cgroup.net_mtu | mtu | octets |\n\n',integration_type:"collector",id:"cgroups.plugin-/sys/fs/cgroup-oVirt_Containers",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cgroups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"charts.d.plugin",module_name:"ap",monitored_instance:{name:"Access Points",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ap","access","point","wireless","network"],most_popular:!1},overview:"# Access Points\n\nPlugin: charts.d.plugin\nModule: ap\n\n## Overview\n\nThe ap collector visualizes data related to wireless access points.\n\nIt uses the `iw` command line utility to detect access points. For each interface that is of `type AP`, it then runs `iw INTERFACE station dump` and collects statistics.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin is able to auto-detect if you are running access points on your linux box.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install charts.d plugin\n\nIf [using our official native DEB/RPM packages](/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.\n\n\n#### `iw` utility.\n\nMake sure the `iw` utility is installed.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `charts.d/ap.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config charts.d/ap.conf\n```\n#### Options\n\nThe config file is sourced by the charts.d plugin. It\'s a standard bash file.\n\nThe following collapsed table contains all the options that can be configured for the ap collector.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| ap_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |\n| ap_priority | Controls the order of charts at the netdata dashboard. | 6900 | no |\n| ap_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |\n\n{% /details %}\n#### Examples\n\n##### Change the collection frequency\n\nSpecify a custom collection frequence (update_every) for this collector\n\n```yaml\n# the data collection frequency\n# if unset, will inherit the netdata update frequency\nap_update_every=10\n\n# the charts priority on the dashboard\n#ap_priority=6900\n\n# the number of retries to do in case of failure\n# before disabling the module\n#ap_retries=10\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `ap` collector, run the `charts.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `charts.d.plugin` to debug the collector:\n\n ```bash\n ./charts.d.plugin debug 1 ap\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per wireless device\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ap.clients | clients | clients |\n| ap.net | received, sent | kilobits/s |\n| ap.packets | received, sent | packets/s |\n| ap.issues | retries, failures | issues/s |\n| ap.signal | average signal | dBm |\n| ap.bitrate | receive, transmit, expected | Mbps |\n\n",integration_type:"collector",id:"charts.d.plugin-ap-Access_Points",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/charts.d.plugin/ap/metadata.yaml",related_resources:""},{meta:{plugin_name:"charts.d.plugin",module_name:"apcupsd",monitored_instance:{name:"APC UPS",link:"https://www.apc.com",categories:["data-collection.ups"],icon_filename:"apc.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ups","apc","power","supply","battery","apcupsd"],most_popular:!1},overview:"# APC UPS\n\nPlugin: charts.d.plugin\nModule: apcupsd\n\n## Overview\n\nMonitor APC UPS performance with Netdata for optimal uninterruptible power supply operations. Enhance your power supply reliability with real-time APC UPS metrics.\n\nThe collector uses the `apcaccess` tool to contact the `apcupsd` daemon and get the APC UPS statistics.\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, with no configuration provided, the collector will try to contact 127.0.0.1:3551 with using the `apcaccess` utility.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install charts.d plugin\n\nIf [using our official native DEB/RPM packages](/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.\n\n\n#### Required software\n\nMake sure the `apcaccess` and `apcupsd` are installed and running.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `charts.d/apcupsd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config charts.d/apcupsd.conf\n```\n#### Options\n\nThe config file is sourced by the charts.d plugin. It\'s a standard bash file.\n\nThe following collapsed table contains all the options that can be configured for the apcupsd collector.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| apcupsd_sources | This is an array of apcupsd sources. You can have multiple entries there. Please refer to the example below on how to set it. | 127.0.0.1:3551 | no |\n| apcupsd_timeout | How long to wait for apcupsd to respond. | 3 | no |\n| apcupsd_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |\n| apcupsd_priority | The charts priority on the dashboard. | 90000 | no |\n| apcupsd_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |\n\n{% /details %}\n#### Examples\n\n##### Multiple apcupsd sources\n\nSpecify a multiple apcupsd sources along with a custom update interval\n\n```yaml\n# add all your APC UPSes in this array - uncomment it too\ndeclare -A apcupsd_sources=(\n ["local"]="127.0.0.1:3551",\n ["remote"]="1.2.3.4:3551"\n)\n\n# how long to wait for apcupsd to respond\n#apcupsd_timeout=3\n\n# the data collection frequency\n# if unset, will inherit the netdata update frequency\napcupsd_update_every=5\n\n# the charts priority on the dashboard\n#apcupsd_priority=90000\n\n# the number of retries to do in case of failure\n# before disabling the module\n#apcupsd_retries=10\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `apcupsd` collector, run the `charts.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `charts.d.plugin` to debug the collector:\n\n ```bash\n ./charts.d.plugin debug 1 apcupsd\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ apcupsd_ups_charge ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.charge | average UPS charge over the last minute |\n| [ apcupsd_10min_ups_load ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.load | average UPS load over the last 10 minutes |\n| [ apcupsd_last_collected_secs ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.load | number of seconds since the last successful data collection |\n| [ apcupsd_selftest_warning ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.selftest | self-test failed due to insufficient battery capacity or due to overload. |\n| [ apcupsd_status_onbatt ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS has switched to battery power because the input power has failed |\n| [ apcupsd_status_overload ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS is overloaded and cannot supply enough power to the load |\n| [ apcupsd_status_lowbatt ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS battery is low and needs to be recharged |\n| [ apcupsd_status_replacebatt ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS battery has reached the end of its lifespan and needs to be replaced |\n| [ apcupsd_status_nobatt ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS has no battery |\n| [ apcupsd_status_commlost ](https://github.com/netdata/netdata/blob/master/src/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS communication link is lost |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ups\n\nMetrics related to UPS. Each UPS provides its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| apcupsd.charge | charge | percentage |\n| apcupsd.battery.voltage | voltage, nominal | Volts |\n| apcupsd.input.voltage | voltage, min, max | Volts |\n| apcupsd.output.voltage | absolute, nominal | Volts |\n| apcupsd.input.frequency | frequency | Hz |\n| apcupsd.load | load | percentage |\n| apcupsd.load_usage | load | Watts |\n| apcupsd.temperature | temp | Celsius |\n| apcupsd.time | time | Minutes |\n| apcupsd.online | online | boolean |\n| apcupsd.selftest | OK, NO, BT, NG | status |\n| apcupsd.status | ONLINE, ONBATT, OVERLOAD, LOWBATT, REPLACEBATT, NOBATT, SLAVE, SLAVEDOWN, COMMLOST, CAL, TRIM, BOOST, SHUTTING_DOWN | status |\n\n",integration_type:"collector",id:"charts.d.plugin-apcupsd-APC_UPS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/charts.d.plugin/apcupsd/metadata.yaml",related_resources:""},{meta:{plugin_name:"charts.d.plugin",module_name:"libreswan",monitored_instance:{name:"Libreswan",link:"https://libreswan.org/",categories:["data-collection.vpns"],icon_filename:"libreswan.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["vpn","libreswan","network","ipsec"],most_popular:!1},overview:"# Libreswan\n\nPlugin: charts.d.plugin\nModule: libreswan\n\n## Overview\n\nMonitor Libreswan performance for optimal IPsec VPN operations. Improve your VPN operations with Netdata''s real-time metrics and built-in alerts.\n\nThe collector uses the `ipsec` command to collect the information it needs.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install charts.d plugin\n\nIf [using our official native DEB/RPM packages](/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.\n\n\n#### Permissions to execute `ipsec`\n\nThe plugin executes 2 commands to collect all the information it needs:\n\n```sh\nipsec whack --status\nipsec whack --trafficstatus\n```\n\nThe first command is used to extract the currently established tunnels, their IDs and their names.\nThe second command is used to extract the current uptime and traffic.\n\nMost probably user `netdata` will not be able to query libreswan, so the `ipsec` commands will be denied.\nThe plugin attempts to run `ipsec` as `sudo ipsec ...`, to get access to libreswan statistics.\n\nTo allow user `netdata` execute `sudo ipsec ...`, create the file `/etc/sudoers.d/netdata` with this content:\n\n```\nnetdata ALL = (root) NOPASSWD: /sbin/ipsec whack --status\nnetdata ALL = (root) NOPASSWD: /sbin/ipsec whack --trafficstatus\n```\n\nMake sure the path `/sbin/ipsec` matches your setup (execute `which ipsec` to find the right path).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `charts.d/libreswan.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config charts.d/libreswan.conf\n```\n#### Options\n\nThe config file is sourced by the charts.d plugin. It\'s a standard bash file.\n\nThe following collapsed table contains all the options that can be configured for the libreswan collector.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| libreswan_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |\n| libreswan_priority | The charts priority on the dashboard | 90000 | no |\n| libreswan_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |\n| libreswan_sudo | Whether to run `ipsec` with `sudo` or not. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### Run `ipsec` without sudo\n\nRun the `ipsec` utility without sudo\n\n```yaml\n# the data collection frequency\n# if unset, will inherit the netdata update frequency\n#libreswan_update_every=1\n\n# the charts priority on the dashboard\n#libreswan_priority=90000\n\n# the number of retries to do in case of failure\n# before disabling the module\n#libreswan_retries=10\n\n# set to 1, to run ipsec with sudo (the default)\n# set to 0, to run ipsec without sudo\nlibreswan_sudo=0\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `libreswan` collector, run the `charts.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `charts.d.plugin` to debug the collector:\n\n ```bash\n ./charts.d.plugin debug 1 libreswan\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per IPSEC tunnel\n\nMetrics related to IPSEC tunnels. Each tunnel provides its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| libreswan.net | in, out | kilobits/s |\n| libreswan.uptime | uptime | seconds |\n\n",integration_type:"collector",id:"charts.d.plugin-libreswan-Libreswan",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/charts.d.plugin/libreswan/metadata.yaml",related_resources:""},{meta:{plugin_name:"charts.d.plugin",module_name:"opensips",monitored_instance:{name:"OpenSIPS",link:"https://opensips.org/",categories:["data-collection.telephony-servers"],icon_filename:"opensips.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["opensips","sip","voice","video","stream"],most_popular:!1},overview:"# OpenSIPS\n\nPlugin: charts.d.plugin\nModule: opensips\n\n## Overview\n\nExamine OpenSIPS metrics for insights into SIP server operations. Study call rates, error rates, and response times for reliable voice over IP services.\n\nThe collector uses the `opensipsctl` command line utility to gather OpenSIPS metrics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe collector will attempt to call `opensipsctl` along with a default number of parameters, even without any configuration.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install charts.d plugin\n\nIf [using our official native DEB/RPM packages](/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.\n\n\n#### Required software\n\nThe collector requires the `opensipsctl` to be installed.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `charts.d/opensips.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config charts.d/opensips.conf\n```\n#### Options\n\nThe config file is sourced by the charts.d plugin. It\'s a standard bash file.\n\nThe following collapsed table contains all the options that can be configured for the opensips collector.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| opensips_opts | Specify parameters to the `opensipsctl` command. If the default value fails to get global status, set here whatever options are needed to connect to the opensips server. | fifo get_statistics all | no |\n| opensips_cmd | If `opensipsctl` is not in $PATH, specify it\'s full path here. | | no |\n| opensips_timeout | How long to wait for `opensipsctl` to respond. | 2 | no |\n| opensips_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 5 | no |\n| opensips_priority | The charts priority on the dashboard. | 80000 | no |\n| opensips_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom `opensipsctl` command\n\nSet a custom path to the `opensipsctl` command\n\n```yaml\n#opensips_opts="fifo get_statistics all"\nopensips_cmd=/opt/opensips/bin/opensipsctl\n#opensips_timeout=2\n\n# the data collection frequency\n# if unset, will inherit the netdata update frequency\n#opensips_update_every=5\n\n# the charts priority on the dashboard\n#opensips_priority=80000\n\n# the number of retries to do in case of failure\n# before disabling the module\n#opensips_retries=10\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `opensips` collector, run the `charts.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `charts.d.plugin` to debug the collector:\n\n ```bash\n ./charts.d.plugin debug 1 opensips\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per OpenSIPS instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| opensips.dialogs_active | active, early | dialogs |\n| opensips.users | registered, location, contacts, expires | users |\n| opensips.registrar | accepted, rejected | registrations/s |\n| opensips.transactions | UAS, UAC | transactions/s |\n| opensips.core_rcv | requests, replies | queries/s |\n| opensips.core_fwd | requests, replies | queries/s |\n| opensips.core_drop | requests, replies | queries/s |\n| opensips.core_err | requests, replies | queries/s |\n| opensips.core_bad | bad_URIs_rcvd, unsupported_methods, bad_msg_hdr | queries/s |\n| opensips.tm_replies | received, relayed, local | replies/s |\n| opensips.transactions_status | 2xx, 3xx, 4xx, 5xx, 6xx | transactions/s |\n| opensips.transactions_inuse | inuse | transactions |\n| opensips.sl_replies | 1xx, 2xx, 3xx, 4xx, 5xx, 6xx, sent, error, ACKed | replies/s |\n| opensips.dialogs | processed, expire, failed | dialogs/s |\n| opensips.net_waiting | UDP, TCP | kilobytes |\n| opensips.uri_checks | positive, negative | checks / sec |\n| opensips.traces | requests, replies | traces / sec |\n| opensips.shmem | total, used, real_used, max_used, free | kilobytes |\n| opensips.shmem_fragment | fragments | fragments |\n\n",integration_type:"collector",id:"charts.d.plugin-opensips-OpenSIPS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/charts.d.plugin/opensips/metadata.yaml",related_resources:""},{meta:{plugin_name:"charts.d.plugin",module_name:"sensors",monitored_instance:{name:"Linux Sensors (sysfs)",link:"https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["sensors","sysfs","hwmon","rpi","raspberry pi"],most_popular:!1},overview:"# Linux Sensors (sysfs)\n\nPlugin: charts.d.plugin\nModule: sensors\n\n## Overview\n\nUse this collector when `lm-sensors` doesn't work on your device (e.g. for RPi temperatures).\nFor all other cases use the [Go collector](/src/go/collectors/go.d.plugin/modules/sensors/README.md), which supports multiple jobs, is more efficient and performs calculations on top of the kernel provided values.\"\n\n\nIt will provide charts for all configured system sensors, by reading sensors directly from the kernel.\nThe values graphed are the raw hardware values of the sensors.\n\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, the collector will try to read entries under `/sys/devices`\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install charts.d plugin\n\nIf [using our official native DEB/RPM packages](/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.\n\n\n#### Enable the sensors collector\n\nThe `sensors` collector is disabled by default. To enable it, use `edit-config` from the Netdata [config directory](/docs/netdata-agent/configuration/README.md), which is typically at `/etc/netdata`, to edit the `charts.d.conf` file.\n\n```bash\ncd /etc/netdata # Replace this path with your Netdata config directory, if different\nsudo ./edit-config charts.d.conf\n```\n\nChange the value of the `sensors` setting to `force` and uncomment the line. Save the file and restart the Netdata Agent with `sudo systemctl restart netdata`, or the [appropriate method](/packaging/installer/README.md#maintaining-a-netdata-agent-installation) for your system.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `charts.d/sensors.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config charts.d/sensors.conf\n```\n#### Options\n\nThe config file is sourced by the charts.d plugin. It\'s a standard bash file.\n\nThe following collapsed table contains all the options that can be configured for the sensors collector.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| sensors_sys_dir | The directory the kernel exposes sensor data. | /sys/devices | no |\n| sensors_sys_depth | How deep in the tree to check for sensor data. | 10 | no |\n| sensors_source_update | If set to 1, the script will overwrite internal script functions with code generated ones. | 1 | no |\n| sensors_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |\n| sensors_priority | The charts priority on the dashboard. | 90000 | no |\n| sensors_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |\n\n{% /details %}\n#### Examples\n\n##### Set sensors path depth\n\nSet a different sensors path depth\n\n```yaml\n# the directory the kernel keeps sensor data\n#sensors_sys_dir="/sys/devices"\n\n# how deep in the tree to check for sensor data\nsensors_sys_depth=5\n\n# if set to 1, the script will overwrite internal\n# script functions with code generated ones\n# leave to 1, is faster\n#sensors_source_update=1\n\n# the data collection frequency\n# if unset, will inherit the netdata update frequency\n#sensors_update_every=\n\n# the charts priority on the dashboard\n#sensors_priority=90000\n\n# the number of retries to do in case of failure\n# before disabling the module\n#sensors_retries=10\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `sensors` collector, run the `charts.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `charts.d.plugin` to debug the collector:\n\n ```bash\n ./charts.d.plugin debug 1 sensors\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per sensor chip\n\nMetrics related to sensor chips. Each chip provides its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| sensors.temp | {filename} | Celsius |\n| sensors.volt | {filename} | Volts |\n| sensors.curr | {filename} | Ampere |\n| sensors.power | {filename} | Watt |\n| sensors.fans | {filename} | Rotations / Minute |\n| sensors.energy | {filename} | Joule |\n| sensors.humidity | {filename} | Percent |\n\n",integration_type:"collector",id:"charts.d.plugin-sensors-Linux_Sensors_(sysfs)",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/charts.d.plugin/sensors/metadata.yaml",related_resources:""},{meta:{plugin_name:"cups.plugin",module_name:"cups.plugin",monitored_instance:{name:"CUPS",link:"https://www.cups.org/",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"cups.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# CUPS\n\nPlugin: cups.plugin\nModule: cups.plugin\n\n## Overview\n\nMonitor CUPS performance for achieving optimal printing system operations. Monitor job statuses, queue lengths, and error rates to ensure smooth printing tasks.\n\nThe plugin uses CUPS shared library to connect and monitor the server.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs to access the server. Netdata sets permissions during installation time to reach the server through its library.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin detects when CUPS server is running and tries to connect to it.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Minimum setup\n\nThe CUPS server must be installed and running. If you installed `netdata` using a package manager, it is also necessary to install the package `netdata-plugin-cups`.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:cups]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| command options | Additional parameters for the collector | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per CUPS instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cups.dests_state | idle, printing, stopped | dests |\n| cups.dests_option | total, acceptingjobs, shared | dests |\n| cups.job_num | pending, held, processing | jobs |\n| cups.job_size | pending, held, processing | KB |\n\n### Per destination\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cups.destination_job_num | pending, held, processing | jobs |\n| cups.destination_job_size | pending, held, processing | KB |\n\n",integration_type:"collector",id:"cups.plugin-cups.plugin-CUPS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/cups.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"debugfs.plugin",module_name:"/sys/kernel/debug/extfrag",monitored_instance:{name:"System Memory Fragmentation",link:"https://www.kernel.org/doc/html/next/admin-guide/sysctl/vm.html",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["extfrag","extfrag_threshold","memory fragmentation"],most_popular:!1},overview:"# System Memory Fragmentation\n\nPlugin: debugfs.plugin\nModule: /sys/kernel/debug/extfrag\n\n## Overview\n\nCollects memory fragmentation statistics from the Linux kernel\n\nParse data from `debugfs` file\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\nThis integration requires read access to files under `/sys/kernel/debug/extfrag`, which are accessible only to the root user by default. Netdata uses Linux Capabilities to give the plugin access to debugfs. `CAP_DAC_READ_SEARCH` is added automatically during installation. This capability allows bypassing file read permission checks and directory read and execute permission checks. If file capabilities are not usable, then the plugin is instead installed with the SUID bit set in permissions so that it runs as root.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAssuming that debugfs is mounted and the required permissions are available, this integration will automatically run by default.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### filesystem\n\nThe debugfs filesystem must be mounted on your host for plugin to collect data. You can run the command-line (`sudo mount -t debugfs none /sys/kernel/debug/`) to mount it locally. It is also recommended to modify your fstab (5) avoiding necessity to mount the filesystem before starting netdata.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:debugfs]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| command options | Additinal parameters for collector | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nMonitor the overall memory fragmentation of the system.\n\n### Per node\n\nMemory fragmentation statistics for each NUMA node in the system.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| numa_node | The NUMA node the metrics are associated with. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.fragmentation_index_dma | order0, order1, order2, order3, order4, order5, order6, order7, order8, order9, order10 | index |\n| mem.fragmentation_index_dma32 | order0, order1, order2, order3, order4, order5, order6, order7, order8, order9, order10 | index |\n| mem.fragmentation_index_normal | order0, order1, order2, order3, order4, order5, order6, order7, order8, order9, order10 | index |\n\n",integration_type:"collector",id:"debugfs.plugin-/sys/kernel/debug/extfrag-System_Memory_Fragmentation",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/debugfs.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"debugfs.plugin",module_name:"/sys/kernel/debug/zswap",monitored_instance:{name:"Linux ZSwap",link:"https://www.kernel.org/doc/html/latest/admin-guide/mm/zswap.html",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["swap","zswap","frontswap","swap cache"],most_popular:!1},overview:"# Linux ZSwap\n\nPlugin: debugfs.plugin\nModule: /sys/kernel/debug/zswap\n\n## Overview\n\nCollects zswap performance metrics on Linux systems.\n\n\nParse data from `debugfs file.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\nThis integration requires read access to files under `/sys/kernel/debug/zswap`, which are accessible only to the root user by default. Netdata uses Linux Capabilities to give the plugin access to debugfs. `CAP_DAC_READ_SEARCH` is added automatically during installation. This capability allows bypassing file read permission checks and directory read and execute permission checks. If file capabilities are not usable, then the plugin is instead installed with the SUID bit set in permissions so that it runs as root.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAssuming that debugfs is mounted and the required permissions are available, this integration will automatically detect whether or not the system is using zswap.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### filesystem\n\nThe debugfs filesystem must be mounted on your host for plugin to collect data. You can run the command-line (`sudo mount -t debugfs none /sys/kernel/debug/`) to mount it locally. It is also recommended to modify your fstab (5) avoiding necessity to mount the filesystem before starting netdata.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:debugfs]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| command options | Additinal parameters for collector | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nMonitor the performance statistics of zswap.\n\n### Per Linux ZSwap instance\n\nGlobal zswap performance metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.zswap_pool_compression_ratio | compression_ratio | ratio |\n| system.zswap_pool_compressed_size | compressed_size | bytes |\n| system.zswap_pool_raw_size | uncompressed_size | bytes |\n| system.zswap_rejections | compress_poor, kmemcache_fail, alloc_fail, reclaim_fail | rejections/s |\n| system.zswap_pool_limit_hit | limit | events/s |\n| system.zswap_written_back_raw_bytes | written_back | bytes/s |\n| system.zswap_same_filled_raw_size | same_filled | bytes |\n| system.zswap_duplicate_entry | duplicate | entries/s |\n\n",integration_type:"collector",id:"debugfs.plugin-/sys/kernel/debug/zswap-Linux_ZSwap",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/debugfs.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"debugfs.plugin",module_name:"intel_rapl",monitored_instance:{name:"Power Capping",link:"https://www.kernel.org/doc/html/next/power/powercap/powercap.html",categories:["data-collection.linux-systems.kernel-metrics"],icon_filename:"powersupply.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["power capping","energy"],most_popular:!1},overview:"# Power Capping\n\nPlugin: debugfs.plugin\nModule: intel_rapl\n\n## Overview\n\nCollects power capping performance metrics on Linux systems.\n\n\nParse data from `debugfs file.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\nThis integration requires read access to files under `/sys/devices/virtual/powercap`, which are accessible only to the root user by default. Netdata uses Linux Capabilities to give the plugin access to debugfs. `CAP_DAC_READ_SEARCH` is added automatically during installation. This capability allows bypassing file read permission checks and directory read and execute permission checks. If file capabilities are not usable, then the plugin is instead installed with the SUID bit set in permissions so that it runs as root.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAssuming that debugfs is mounted and the required permissions are available, this integration will automatically detect whether or not the system is using zswap.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### filesystem\n\nThe debugfs filesystem must be mounted on your host for plugin to collect data. You can run the command-line (`sudo mount -t debugfs none /sys/kernel/debug/`) to mount it locally. It is also recommended to modify your fstab (5) avoiding necessity to mount the filesystem before starting netdata.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:debugfs]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| command options | Additinal parameters for collector | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nMonitor the Intel RAPL zones Consumption.\n\n### Per Power Capping instance\n\nGlobal Intel RAPL zones.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.powercap_intel_rapl_zone | Power | Watts |\n| cpu.powercap_intel_rapl_subzones | dram, core, uncore | Watts |\n\n",integration_type:"collector",id:"debugfs.plugin-intel_rapl-Power_Capping",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/debugfs.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"diskspace.plugin",module_name:"diskspace.plugin",monitored_instance:{name:"Disk space",link:"",categories:["data-collection.linux-systems"],icon_filename:"hard-drive.svg"},related_resources:{integrations:{list:[{plugin_name:"ebpf.plugin",module_name:"disk"}]}},info_provided_to_referring_integrations:{description:""},keywords:["disk","I/O","space","inode"],most_popular:!1},overview:"# Disk space\n\nPlugin: diskspace.plugin\nModule: diskspace.plugin\n\n## Overview\n\nMonitor Disk space metrics for proficient storage management. Keep track of usage, free space, and error rates to prevent disk space issues.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin reads data from `/proc/self/mountinfo` and `/proc/diskstats file`.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:proc:diskspace]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nYou can also specify per mount point `[plugin:proc:diskspace:mountpoint]`\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| remove charts of unmounted disks | Remove chart when a device is unmounted on host. | yes | no |\n| check for new mount points every | Parse proc files frequency. | 15 | no |\n| exclude space metrics on paths | Do not show metrics (charts) for listed paths. This option accepts netdata simple pattern. | /proc/* /sys/* /var/run/user/* /run/user/* /snap/* /var/lib/docker/* | no |\n| exclude space metrics on filesystems | Do not show metrics (charts) for listed filesystems. This option accepts netdata simple pattern. | *gvfs *gluster* *s3fs *ipfs *davfs2 *httpfs *sshfs *gdfs *moosefs fusectl autofs | no |\n| exclude inode metrics on filesystems | Do not show metrics (charts) for listed filesystems. This option accepts netdata simple pattern. | msdosfs msdos vfat overlayfs aufs* *unionfs | no |\n| space usage for all disks | Define if plugin will show metrics for space usage. When value is set to `auto` plugin will try to access information to display if filesystem or path was not discarded with previous option. | auto | no |\n| inodes usage for all disks | Define if plugin will show metrics for inode usage. When value is set to `auto` plugin will try to access information to display if filesystem or path was not discarded with previous option. | auto | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ disk_space_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.space | disk ${label:mount_point} space utilization |\n| [ disk_inode_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.inodes | disk ${label:mount_point} inode utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per mount point\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mount_point | Path used to mount a filesystem |\n| filesystem | The filesystem used to format a partition. |\n| mount_root | Root directory where mount points are present. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.space | avail, used, reserved_for_root | GiB |\n| disk.inodes | avail, used, reserved_for_root | inodes |\n\n",integration_type:"collector",id:"diskspace.plugin-diskspace.plugin-Disk_space",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/diskspace.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"cachestat",monitored_instance:{name:"eBPF Cachestat",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["Page cache","Hit ratio","eBPF"],most_popular:!1},overview:"# eBPF Cachestat\n\nPlugin: ebpf.plugin\nModule: cachestat\n\n## Overview\n\nMonitor Linux page cache events giving for users a general vision about how his kernel is manipulating files.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/cachestat.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/cachestat.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Cachestat instance\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.cachestat_ratio | ratio | % |\n| mem.cachestat_dirties | dirty | page/s |\n| mem.cachestat_hits | hit | hits/s |\n| mem.cachestat_misses | miss | misses/s |\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_cachestat_hit_ratio | ratio | % |\n| app.ebpf_cachestat_dirty_pages | pages | page/s |\n| app.ebpf_cachestat_access | hits | hits/s |\n| app.ebpf_cachestat_misses | misses | misses/s |\n\n### Per cgroup\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.cachestat_ratio | ratio | % |\n| cgroup.cachestat_dirties | dirty | page/s |\n| cgroup.cachestat_hits | hit | hits/s |\n| cgroup.cachestat_misses | miss | misses/s |\n| services.cachestat_ratio | a dimension per systemd service | % |\n| services.cachestat_dirties | a dimension per systemd service | page/s |\n| services.cachestat_hits | a dimension per systemd service | hits/s |\n| services.cachestat_misses | a dimension per systemd service | misses/s |\n\n",integration_type:"collector",id:"ebpf.plugin-cachestat-eBPF_Cachestat",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"dcstat",monitored_instance:{name:"eBPF DCstat",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["Directory Cache","File system","eBPF"],most_popular:!1},overview:"# eBPF DCstat\n\nPlugin: ebpf.plugin\nModule: dcstat\n\n## Overview\n\nMonitor directory cache events per application given an overall vision about files on memory or storage device.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/dcstat.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/dcstat.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config option" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_dc_ratio | ratio | % |\n| app.ebpf_dc_reference | files | files |\n| app.ebpf_dc_not_cache | files | files |\n| app.ebpf_dc_not_found | files | files |\n\n### Per filesystem\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filesystem.dc_reference | reference, slow, miss | files |\n| filesystem.dc_hit_ratio | ratio | % |\n\n### Per cgroup\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.dc_ratio | ratio | % |\n| cgroup.dc_reference | reference | files |\n| cgroup.dc_not_cache | slow | files |\n| cgroup.dc_not_found | miss | files |\n| services.dc_ratio | a dimension per systemd service | % |\n| services.dc_reference | a dimension per systemd service | files |\n| services.dc_not_cache | a dimension per systemd service | files |\n| services.dc_not_found | a dimension per systemd service | files |\n\n",integration_type:"collector",id:"ebpf.plugin-dcstat-eBPF_DCstat",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"disk",monitored_instance:{name:"eBPF Disk",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["hard Disk","eBPF","latency","partition"],most_popular:!1},overview:"# eBPF Disk\n\nPlugin: ebpf.plugin\nModule: disk\n\n## Overview\n\nMeasure latency for I/O events on disk.\n\nAttach tracepoints to internal kernel functions.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).`\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/disk.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/disk.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per disk\n\nThese metrics measure latency for I/O events on every hard disk present on host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.latency_io | latency | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-disk-eBPF_Disk",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"filedescriptor",monitored_instance:{name:"eBPF Filedescriptor",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["file","eBPF","fd","open","close"],most_popular:!1},overview:"# eBPF Filedescriptor\n\nPlugin: ebpf.plugin\nModule: filedescriptor\n\n## Overview\n\nMonitor calls for functions responsible to open or close a file descriptor and possible errors.\n\nAttach tracing (kprobe and trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netdata sets necessary permissions during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nDepending of kernel version and frequency that files are open and close, this thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/fd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/fd.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\nThese Metrics show grouped information per cgroup/service.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.fd_open | open | calls/s |\n| cgroup.fd_open_error | open | calls/s |\n| cgroup.fd_closed | close | calls/s |\n| cgroup.fd_close_error | close | calls/s |\n| services.file_open | a dimension per systemd service | calls/s |\n| services.file_open_error | a dimension per systemd service | calls/s |\n| services.file_closed | a dimension per systemd service | calls/s |\n| services.file_close_error | a dimension per systemd service | calls/s |\n\n### Per eBPF Filedescriptor instance\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filesystem.file_descriptor | open, close | calls/s |\n| filesystem.file_error | open, close | calls/s |\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_file_open | calls | calls/s |\n| app.ebpf_file_open_error | calls | calls/s |\n| app.ebpf_file_closed | calls | calls/s |\n| app.ebpf_file_close_error | calls | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-filedescriptor-eBPF_Filedescriptor",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"filesystem",monitored_instance:{name:"eBPF Filesystem",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["Filesystem","ext4","btrfs","nfs","xfs","zfs","eBPF","latency","I/O"],most_popular:!1},overview:"# eBPF Filesystem\n\nPlugin: ebpf.plugin\nModule: filesystem\n\n## Overview\n\nMonitor latency for main actions on filesystem like I/O events.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/filesystem.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/filesystem.conf\n```\n#### Options\n\nThis configuration file have two different sections. The `[global]` overwrites default options, while `[filesystem]` allow user to select the filesystems to monitor.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n| btrfsdist | Enable or disable latency monitoring for functions associated with btrfs filesystem. | yes | no |\n| ext4dist | Enable or disable latency monitoring for functions associated with ext4 filesystem. | yes | no |\n| nfsdist | Enable or disable latency monitoring for functions associated with nfs filesystem. | yes | no |\n| xfsdist | Enable or disable latency monitoring for functions associated with xfs filesystem. | yes | no |\n| zfsdist | Enable or disable latency monitoring for functions associated with zfs filesystem. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per filesystem\n\nLatency charts associate with filesystem actions.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filesystem.read_latency | latency period | calls/s |\n| filesystem.open_latency | latency period | calls/s |\n| filesystem.sync_latency | latency period | calls/s |\n\n### Per iilesystem\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filesystem.write_latency | latency period | calls/s |\n\n### Per eBPF Filesystem instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filesystem.attributte_latency | latency period | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-filesystem-eBPF_Filesystem",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"hardirq",monitored_instance:{name:"eBPF Hardirq",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["HardIRQ","eBPF"],most_popular:!1},overview:"# eBPF Hardirq\n\nPlugin: ebpf.plugin\nModule: hardirq\n\n## Overview\n\nMonitor latency for each HardIRQ available.\n\nAttach tracepoints to internal kernel functions.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/hardirq.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/hardirq.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Hardirq instance\n\nThese metrics show latest timestamp for each hardIRQ available on host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.hardirq_latency | hardirq names | milliseconds |\n\n",integration_type:"collector",id:"ebpf.plugin-hardirq-eBPF_Hardirq",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"mdflush",monitored_instance:{name:"eBPF MDflush",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["MD","RAID","eBPF"],most_popular:!1},overview:"# eBPF MDflush\n\nPlugin: ebpf.plugin\nModule: mdflush\n\n## Overview\n\nMonitor when flush events happen between disks.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that `md_flush_request` is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/mdflush.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/mdflush.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF MDflush instance\n\nNumber of times md_flush_request was called since last time.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mdstat.mdstat_flush | disk | flushes |\n\n",integration_type:"collector",id:"ebpf.plugin-mdflush-eBPF_MDflush",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"mount",monitored_instance:{name:"eBPF Mount",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["mount","umount","device","eBPF"],most_popular:!1},overview:"# eBPF Mount\n\nPlugin: ebpf.plugin\nModule: mount\n\n## Overview\n\nMonitor calls for mount and umount syscall.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT, CONFIG_HAVE_SYSCALL_TRACEPOINTS), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).`\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/mount.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/mount.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Mount instance\n\nCalls for syscalls mount an umount.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mount_points.call | mount, umount | calls/s |\n| mount_points.error | mount, umount | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-mount-eBPF_Mount",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"oomkill",monitored_instance:{name:"eBPF OOMkill",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["application","memory"],most_popular:!1},overview:"# eBPF OOMkill\n\nPlugin: ebpf.plugin\nModule: oomkill\n\n## Overview\n\nMonitor applications that reach out of memory.\n\nAttach tracepoint to internal kernel functions.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/oomkill.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/oomkill.conf\n```\n#### Options\n\nOverwrite default configuration reducing number of I/O events\n\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"## Troubleshooting\n\n### update every\n\n\n\n### ebpf load mode\n\n\n\n### lifetime\n\n\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\nThese metrics show cgroup/service that reached OOM.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.oomkills | cgroup name | kills |\n| services.oomkills | a dimension per systemd service | kills |\n\n### Per apps\n\nThese metrics show cgroup/service that reached OOM.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.oomkill | kills | kills |\n\n",integration_type:"collector",id:"ebpf.plugin-oomkill-eBPF_OOMkill",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"process",monitored_instance:{name:"eBPF Process",link:"https://github.com/netdata/netdata/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["Memory","plugin","eBPF"],most_popular:!1},overview:"# eBPF Process\n\nPlugin: ebpf.plugin\nModule: process\n\n## Overview\n\nMonitor internal memory usage.\n\nUses netdata internal statistic to monitor memory management by plugin.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Netdata flags.\n\nTo have these charts you need to compile netdata with flag `NETDATA_DEV_MODE`.\n\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Process instance\n\nHow plugin is allocating memory.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netdata.ebpf_aral_stat_size | memory | bytes |\n| netdata.ebpf_aral_stat_alloc | aral | calls |\n| netdata.ebpf_threads | total, running | threads |\n| netdata.ebpf_load_methods | legacy, co-re | methods |\n| netdata.ebpf_kernel_memory | memory_locked | bytes |\n| netdata.ebpf_hash_tables_count | hash_table | hash tables |\n| netdata.ebpf_hash_tables_insert_pid_elements | thread | rows |\n| netdata.ebpf_hash_tables_remove_pid_elements | thread | rows |\n\n",integration_type:"collector",id:"ebpf.plugin-process-eBPF_Process",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"processes",monitored_instance:{name:"eBPF Processes",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["thread","fork","process","eBPF"],most_popular:!1},overview:"# eBPF Processes\n\nPlugin: ebpf.plugin\nModule: processes\n\n## Overview\n\nMonitor calls for function creating tasks (threads and processes) inside Linux kernel.\n\nAttach tracing (kprobe or tracepoint, and trampoline) to internal kernel functions.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/process.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/process.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). This plugin will always try to attach a tracepoint, so option here will impact only function used to monitor task (thread and process) creation. | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Processes instance\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.process_thread | process | calls/s |\n| system.process_status | process, zombie | difference |\n| system.exit | process | calls/s |\n| system.task_error | task | calls/s |\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.process_create | calls | calls/s |\n| app.thread_create | call | calls/s |\n| app.task_exit | call | calls/s |\n| app.task_close | call | calls/s |\n| app.task_error | app | calls/s |\n\n### Per cgroup\n\nThese Metrics show grouped information per cgroup/service.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.process_create | process | calls/s |\n| cgroup.thread_create | thread | calls/s |\n| cgroup.task_exit | exit | calls/s |\n| cgroup.task_close | process | calls/s |\n| cgroup.task_error | process | calls/s |\n| services.process_create | a dimension per systemd service | calls/s |\n| services.thread_create | a dimension per systemd service | calls/s |\n| services.task_close | a dimension per systemd service | calls/s |\n| services.task_exit | a dimension per systemd service | calls/s |\n| services.task_error | a dimension per systemd service | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-processes-eBPF_Processes",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"shm",monitored_instance:{name:"eBPF SHM",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["syscall","shared memory","eBPF"],most_popular:!1},overview:"# eBPF SHM\n\nPlugin: ebpf.plugin\nModule: shm\n\n## Overview\n\nMonitor syscall responsible to manipulate shared memory.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).`\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/shm.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/shm.conf\n```\n#### Options\n\nThis configuration file have two different sections. The `[global]` overwrites all default options, while `[syscalls]` allow user to select the syscall to monitor.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n| shmget | Enable or disable monitoring for syscall `shmget` | yes | no |\n| shmat | Enable or disable monitoring for syscall `shmat` | yes | no |\n| shmdt | Enable or disable monitoring for syscall `shmdt` | yes | no |\n| shmctl | Enable or disable monitoring for syscall `shmctl` | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\nThese Metrics show grouped information per cgroup/service.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.shmget | get | calls/s |\n| cgroup.shmat | at | calls/s |\n| cgroup.shmdt | dt | calls/s |\n| cgroup.shmctl | ctl | calls/s |\n| services.shmget | a dimension per systemd service | calls/s |\n| services.shmat | a dimension per systemd service | calls/s |\n| services.shmdt | a dimension per systemd service | calls/s |\n| services.shmctl | a dimension per systemd service | calls/s |\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_shmget_call | calls | calls/s |\n| app.ebpf_shmat_call | calls | calls/s |\n| app.ebpf_shmdt_call | calls | calls/s |\n| app.ebpf_shmctl_call | calls | calls/s |\n\n### Per eBPF SHM instance\n\nThese Metrics show number of calls for specified syscall.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.shared_memory_calls | get, at, dt, ctl | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-shm-eBPF_SHM",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"socket",monitored_instance:{name:"eBPF Socket",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["TCP","UDP","bandwidth","server","connection","socket"],most_popular:!1},overview:"# eBPF Socket\n\nPlugin: ebpf.plugin\nModule: socket\n\n## Overview\n\nMonitor bandwidth consumption per application for protocols TCP and UDP.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/network.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/network.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`. Options inside `network connections` are ignored for while.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| bandwidth table size | Number of elements stored inside hash tables used to monitor calls per PID. | 16384 | no |\n| ipv4 connection table size | Number of elements stored inside hash tables used to monitor calls per IPV4 connections. | 16384 | no |\n| ipv6 connection table size | Number of elements stored inside hash tables used to monitor calls per IPV6 connections. | 16384 | no |\n| udp connection table size | Number of temporary elements stored inside hash tables used to monitor UDP connections. | 4096 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Socket instance\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ip.inbound_conn | connection_tcp | connections/s |\n| ip.tcp_outbound_conn | received | connections/s |\n| ip.tcp_functions | received, send, closed | calls/s |\n| ip.total_tcp_bandwidth | received, send | kilobits/s |\n| ip.tcp_error | received, send | calls/s |\n| ip.tcp_retransmit | retransmited | calls/s |\n| ip.udp_functions | received, send | calls/s |\n| ip.total_udp_bandwidth | received, send | kilobits/s |\n| ip.udp_error | received, send | calls/s |\n\n### Per apps\n\nThese metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_call_tcp_v4_connection | connections | connections/s |\n| app.ebpf_call_tcp_v6_connection | connections | connections/s |\n| app.ebpf_sock_bytes_sent | bandwidth | kilobits/s |\n| app.ebpf_sock_bytes_received | bandwidth | kilobits/s |\n| app.ebpf_call_tcp_sendmsg | calls | calls/s |\n| app.ebpf_call_tcp_cleanup_rbuf | calls | calls/s |\n| app.ebpf_call_tcp_retransmit | calls | calls/s |\n| app.ebpf_call_udp_sendmsg | calls | calls/s |\n| app.ebpf_call_udp_recvmsg | calls | calls/s |\n\n### Per cgroup\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.net_conn_ipv4 | connected_v4 | connections/s |\n| cgroup.net_conn_ipv6 | connected_v6 | connections/s |\n| cgroup.net_bytes_recv | received | calls/s |\n| cgroup.net_bytes_sent | sent | calls/s |\n| cgroup.net_tcp_recv | received | calls/s |\n| cgroup.net_tcp_send | sent | calls/s |\n| cgroup.net_retransmit | retransmitted | calls/s |\n| cgroup.net_udp_send | sent | calls/s |\n| cgroup.net_udp_recv | received | calls/s |\n| services.net_conn_ipv6 | a dimension per systemd service | connections/s |\n| services.net_bytes_recv | a dimension per systemd service | kilobits/s |\n| services.net_bytes_sent | a dimension per systemd service | kilobits/s |\n| services.net_tcp_recv | a dimension per systemd service | calls/s |\n| services.net_tcp_send | a dimension per systemd service | calls/s |\n| services.net_tcp_retransmit | a dimension per systemd service | calls/s |\n| services.net_udp_send | a dimension per systemd service | calls/s |\n| services.net_udp_recv | a dimension per systemd service | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-socket-eBPF_Socket",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"softirq",monitored_instance:{name:"eBPF SoftIRQ",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["SoftIRQ","eBPF"],most_popular:!1},overview:"# eBPF SoftIRQ\n\nPlugin: ebpf.plugin\nModule: softirq\n\n## Overview\n\nMonitor latency for each SoftIRQ available.\n\nAttach kprobe to internal kernel functions.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug/`).`\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/softirq.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/softirq.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF SoftIRQ instance\n\nThese metrics show latest timestamp for each softIRQ available on host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.softirq_latency | soft IRQs | milliseconds |\n\n",integration_type:"collector",id:"ebpf.plugin-softirq-eBPF_SoftIRQ",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"swap",monitored_instance:{name:"eBPF SWAP",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["SWAP","memory","eBPF","Hard Disk"],most_popular:!1},overview:"# eBPF SWAP\n\nPlugin: ebpf.plugin\nModule: swap\n\n## Overview\n\nMonitors when swap has I/O events and applications executing events.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/swap.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/swap.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\nThese Metrics show grouped information per cgroup/service.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.swap_read | read | calls/s |\n| cgroup.swap_write | write | calls/s |\n| services.swap_read | a dimension per systemd service | calls/s |\n| services.swap_write | a dimension per systemd service | calls/s |\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_call_swap_readpage | a dimension per app group | calls/s |\n| app.ebpf_call_swap_writepage | a dimension per app group | calls/s |\n\n### Per eBPF SWAP instance\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.swapcalls | write, read | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-swap-eBPF_SWAP",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"sync",monitored_instance:{name:"eBPF Sync",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["syscall","eBPF","hard disk","memory"],most_popular:!1},overview:"# eBPF Sync\n\nPlugin: ebpf.plugin\nModule: sync\n\n## Overview\n\nMonitor syscall responsible to move data from memory to storage device.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT, CONFIG_HAVE_SYSCALL_TRACEPOINTS), files inside debugfs, and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n#### Debug Filesystem\n\nThis thread needs to attach a tracepoint to monitor when a process schedule an exit event. To allow this specific feaure, it is necessary to mount `debugfs` (`mount -t debugfs none /sys/kernel/debug`).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/sync.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/sync.conf\n```\n#### Options\n\nThis configuration file have two different sections. The `[global]` overwrites all default options, while `[syscalls]` allow user to select the syscall to monitor.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n| sync | Enable or disable monitoring for syscall `sync` | yes | no |\n| msync | Enable or disable monitoring for syscall `msync` | yes | no |\n| fsync | Enable or disable monitoring for syscall `fsync` | yes | no |\n| fdatasync | Enable or disable monitoring for syscall `fdatasync` | yes | no |\n| syncfs | Enable or disable monitoring for syscall `syncfs` | yes | no |\n| sync_file_range | Enable or disable monitoring for syscall `sync_file_range` | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ sync_freq ](https://github.com/netdata/netdata/blob/master/src/health/health.d/synchronization.conf) | mem.sync | number of sync() system calls. Every call causes all pending modifications to filesystem metadata and cached file data to be written to the underlying filesystems. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per eBPF Sync instance\n\nThese metrics show total number of calls to functions inside kernel.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.file_sync | fsync, fdatasync | calls/s |\n| mem.memory_map | msync | calls/s |\n| mem.sync | sync, syncfs | calls/s |\n| mem.file_segment | sync_file_range | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-sync-eBPF_Sync",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ebpf.plugin",module_name:"vfs",monitored_instance:{name:"eBPF VFS",link:"https://kernel.org/",categories:["data-collection.ebpf"],icon_filename:"ebpf.jpg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["virtual","filesystem","eBPF","I/O","files"],most_popular:!1},overview:"# eBPF VFS\n\nPlugin: ebpf.plugin\nModule: vfs\n\n## Overview\n\nMonitor I/O events on Linux Virtual Filesystem.\n\nAttach tracing (kprobe, trampoline) to internal kernel functions according options used to compile kernel.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid because it loads data inside kernel. Netada sets necessary permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe plugin checks kernel compilation flags (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) and presence of BTF files to decide which eBPF program will be attached.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThis thread will add overhead every time that an internal kernel function monitored by this thread is called. The estimated additional period of time is between 90-200ms per call on kernels that do not have BTF technology.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Compile kernel\n\nCheck if your kernel was compiled with necessary options (CONFIG_KPROBES, CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_JIT) in `/proc/config.gz` or inside /boot/config file. Some cited names can be different accoring preferences of Linux distributions.\nWhen you do not have options set, it is necessary to get the kernel source code from https://kernel.org or a kernel package from your distribution, this last is preferred. The kernel compilation has a well definedd pattern, but distributions can deliver their configuration files\nwith different names.\n\nNow follow steps:\n1. Copy the configuration file to /usr/src/linux/.config.\n2. Select the necessary options: make oldconfig\n3. Compile your kernel image: make bzImage\n4. Compile your modules: make modules\n5. Copy your new kernel image for boot loader directory\n6. Install the new modules: make modules_install\n7. Generate an initial ramdisk image (`initrd`) if it is necessary.\n8. Update your boot loader\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ebpf.d/vfs.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ebpf.d/vfs.conf\n```\n#### Options\n\nAll options are defined inside section `[global]`.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 5 | no |\n| ebpf load mode | Define whether plugin will monitor the call (`entry`) for the functions or it will also monitor the return (`return`). | entry | no |\n| apps | Enable or disable integration with apps.plugin | no | no |\n| cgroups | Enable or disable integration with cgroup.plugin | no | no |\n| pid table size | Number of elements stored inside hash tables used to monitor calls per PID. | 32768 | no |\n| ebpf type format | Define the file type to load an eBPF program. Three options are available: `legacy` (Attach only `kprobe`), `co-re` (Plugin tries to use `trampoline` when available), and `auto` (plugin check OS configuration before to load). | auto | no |\n| ebpf co-re tracing | Select the attach method used by plugin when `co-re` is defined in previous option. Two options are available: `trampoline` (Option with lowest overhead), and `probe` (the same of legacy code). | trampoline | no |\n| maps per core | Define how plugin will load their hash maps. When enabled (`yes`) plugin will load one hash table per core, instead to have centralized information. | yes | no |\n| lifetime | Set default lifetime for thread when enabled by cloud. | 300 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per cgroup\n\nThese Metrics show grouped information per cgroup/service.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cgroup.vfs_unlink | delete | calls/s |\n| cgroup.vfs_write | write | calls/s |\n| cgroup.vfs_write_error | write | calls/s |\n| cgroup.vfs_read | read | calls/s |\n| cgroup.vfs_read_error | read | calls/s |\n| cgroup.vfs_write_bytes | write | bytes/s |\n| cgroup.vfs_read_bytes | read | bytes/s |\n| cgroup.vfs_fsync | fsync | calls/s |\n| cgroup.vfs_fsync_error | fsync | calls/s |\n| cgroup.vfs_open | open | calls/s |\n| cgroup.vfs_open_error | open | calls/s |\n| cgroup.vfs_create | create | calls/s |\n| cgroup.vfs_create_error | create | calls/s |\n| services.vfs_unlink | a dimension per systemd service | calls/s |\n| services.vfs_write | a dimension per systemd service | calls/s |\n| services.vfs_write_error | a dimension per systemd service | calls/s |\n| services.vfs_read | a dimension per systemd service | calls/s |\n| services.vfs_read_error | a dimension per systemd service | calls/s |\n| services.vfs_write_bytes | a dimension per systemd service | bytes/s |\n| services.vfs_read_bytes | a dimension per systemd service | bytes/s |\n| services.vfs_fsync | a dimension per systemd service | calls/s |\n| services.vfs_fsync_error | a dimension per systemd service | calls/s |\n| services.vfs_open | a dimension per systemd service | calls/s |\n| services.vfs_open_error | a dimension per systemd service | calls/s |\n| services.vfs_create | a dimension per systemd service | calls/s |\n| services.vfs_create_error | a dimension per systemd service | calls/s |\n\n### Per eBPF VFS instance\n\nThese Metrics show grouped information per cgroup/service.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filesystem.vfs_deleted_objects | delete | calls/s |\n| filesystem.vfs_io | read, write | calls/s |\n| filesystem.vfs_io_bytes | read, write | bytes/s |\n| filesystem.vfs_io_error | read, write | calls/s |\n| filesystem.vfs_fsync | fsync | calls/s |\n| filesystem.vfs_fsync_error | fsync | calls/s |\n| filesystem.vfs_open | open | calls/s |\n| filesystem.vfs_open_error | open | calls/s |\n| filesystem.vfs_create | create | calls/s |\n| filesystem.vfs_create_error | create | calls/s |\n\n### Per apps\n\nThese Metrics show grouped information per apps group.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| app_group | The name of the group defined in the configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| app.ebpf_call_vfs_unlink | calls | calls/s |\n| app.ebpf_call_vfs_write | calls | calls/s |\n| app.ebpf_call_vfs_write_error | calls | calls/s |\n| app.ebpf_call_vfs_read | calls | calls/s |\n| app.ebpf_call_vfs_read_error | calls | calls/s |\n| app.ebpf_call_vfs_write_bytes | writes | bytes/s |\n| app.ebpf_call_vfs_read_bytes | reads | bytes/s |\n| app.ebpf_call_vfs_fsync | calls | calls/s |\n| app.ebpf_call_vfs_fsync_error | calls | calls/s |\n| app.ebpf_call_vfs_open | calls | calls/s |\n| app.ebpf_call_vfs_open_error | calls | calls/s |\n| app.ebpf_call_vfs_create | calls | calls/s |\n| app.ebpf_call_vfs_create_error | calls | calls/s |\n\n",integration_type:"collector",id:"ebpf.plugin-vfs-eBPF_VFS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ebpf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"dev.cpu.0.freq",monitored_instance:{name:"dev.cpu.0.freq",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# dev.cpu.0.freq\n\nPlugin: freebsd.plugin\nModule: dev.cpu.0.freq\n\n## Overview\n\nRead current CPU Scaling frequency.\n\nCurrent CPU Scaling Frequency\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `Config options`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config Config options\n```\n#### Options\n\n\n\n{% details open=true summary="" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| dev.cpu.0.freq | Enable or disable CPU Scaling frequency metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per dev.cpu.0.freq instance\n\nThe metric shows status of CPU frequency, it is direct affected by system load.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.scaling_cur_freq | frequency | MHz |\n\n",integration_type:"collector",id:"freebsd.plugin-dev.cpu.0.freq-dev.cpu.0.freq",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"dev.cpu.temperature",monitored_instance:{name:"dev.cpu.temperature",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# dev.cpu.temperature\n\nPlugin: freebsd.plugin\nModule: dev.cpu.temperature\n\n## Overview\n\nGet current CPU temperature\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| dev.cpu.temperature | Enable or disable CPU temperature metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per dev.cpu.temperature instance\n\nThis metric show latest CPU temperature.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.temperature | a dimension per core | Celsius |\n\n",integration_type:"collector",id:"freebsd.plugin-dev.cpu.temperature-dev.cpu.temperature",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"devstat",monitored_instance:{name:"devstat",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"hard-drive.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# devstat\n\nPlugin: freebsd.plugin\nModule: devstat\n\n## Overview\n\nCollect information per hard disk available on host.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:kern.devstat]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enable new disks detected at runtime | Enable or disable possibility to detect new disks. | auto | no |\n| performance metrics for pass devices | Enable or disable metrics for disks with type `PASS`. | auto | no |\n| total bandwidth for all disks | Enable or disable total bandwidth metric for all disks. | yes | no |\n| bandwidth for all disks | Enable or disable bandwidth for all disks metric. | auto | no |\n| operations for all disks | Enable or disable operations for all disks metric. | auto | no |\n| queued operations for all disks | Enable or disable queued operations for all disks metric. | auto | no |\n| utilization percentage for all disks | Enable or disable utilization percentage for all disks metric. | auto | no |\n| i/o time for all disks | Enable or disable I/O time for all disks metric. | auto | no |\n| average completed i/o time for all disks | Enable or disable average completed I/O time for all disks metric. | auto | no |\n| average completed i/o bandwidth for all disks | Enable or disable average completed I/O bandwidth for all disks metric. | auto | no |\n| average service time for all disks | Enable or disable average service time for all disks metric. | auto | no |\n| disable by default disks matching | Do not create charts for disks listed. | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 10min_disk_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.util | average percentage of time ${label:device} disk was busy over the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per devstat instance\n\nThese metrics give a general vision about I/O events on disks.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.io | io, out | KiB/s |\n\n### Per disk\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.io | reads, writes, frees | KiB/s |\n| disk.ops | reads, writes, other, frees | operations/s |\n| disk.qops | operations | operations |\n| disk.util | utilization | % of time working |\n| disk.iotime | reads, writes, other, frees | milliseconds/s |\n| disk.await | reads, writes, other, frees | milliseconds/operation |\n| disk.avgsz | reads, writes, frees | KiB/operation |\n| disk.svctm | svctm | milliseconds/operation |\n\n",integration_type:"collector",id:"freebsd.plugin-devstat-devstat",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"getifaddrs",monitored_instance:{name:"getifaddrs",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# getifaddrs\n\nPlugin: freebsd.plugin\nModule: getifaddrs\n\n## Overview\n\nCollect traffic per network interface.\n\nThe plugin calls `getifaddrs` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:getifaddrs]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enable new interfaces detected at runtime | Enable or disable possibility to discover new interface after plugin starts. | auto | no |\n| total bandwidth for physical interfaces | Enable or disable total bandwidth for physical interfaces metric. | auto | no |\n| total packets for physical interfaces | Enable or disable total packets for physical interfaces metric. | auto | no |\n| total bandwidth for ipv4 interface | Enable or disable total bandwidth for IPv4 interface metric. | auto | no |\n| total bandwidth for ipv6 interfaces | Enable or disable total bandwidth for ipv6 interfaces metric. | auto | no |\n| bandwidth for all interfaces | Enable or disable bandwidth for all interfaces metric. | auto | no |\n| packets for all interfaces | Enable or disable packets for all interfaces metric. | auto | no |\n| errors for all interfaces | Enable or disable errors for all interfaces metric. | auto | no |\n| drops for all interfaces | Enable or disable drops for all interfaces metric. | auto | no |\n| collisions for all interface | Enable or disable collisions for all interface metric. | auto | no |\n| disable by default interfaces matching | Do not display data for intterfaces listed. | lo* | no |\n| set physical interfaces for system.net | Do not show network traffic for listed interfaces. | igb* ix* cxl* em* ixl* ixlv* bge* ixgbe* vtnet* vmx* re* igc* dwc* | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ interface_speed ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | network interface ${label:device} current speed |\n| [ inbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes |\n| [ outbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes |\n| [ 1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ 10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n| [ interface_inbound_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.errors | number of inbound errors for the network interface ${label:device} in the last 10 minutes |\n| [ interface_outbound_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.errors | number of outbound errors for the network interface ${label:device} in the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per getifaddrs instance\n\nGeneral overview about network traffic.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.net | received, sent | kilobits/s |\n| system.packets | received, sent, multicast_received, multicast_sent | packets/s |\n| system.ipv4 | received, sent | kilobits/s |\n| system.ipv6 | received, sent | kilobits/s |\n\n### Per network device\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| net.net | received, sent | kilobits/s |\n| net.packets | received, sent, multicast_received, multicast_sent | packets/s |\n| net.errors | inbound, outbound | errors/s |\n| net.drops | inbound, outbound | drops/s |\n| net.events | collisions | events/s |\n\n",integration_type:"collector",id:"freebsd.plugin-getifaddrs-getifaddrs",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"getmntinfo",monitored_instance:{name:"getmntinfo",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"hard-drive.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# getmntinfo\n\nPlugin: freebsd.plugin\nModule: getmntinfo\n\n## Overview\n\nCollect information per mount point.\n\nThe plugin calls `getmntinfo` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:getmntinfo]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enable new mount points detected at runtime | Cheeck new mount points during runtime. | auto | no |\n| space usage for all disks | Enable or disable space usage for all disks metric. | auto | no |\n| inodes usage for all disks | Enable or disable inodes usage for all disks metric. | auto | no |\n| exclude space metrics on paths | Do not show metrics for listed paths. | /proc/* | no |\n| exclude space metrics on filesystems | Do not monitor listed filesystems. | autofs procfs subfs devfs none | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ disk_space_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.space | disk ${label:mount_point} space utilization |\n| [ disk_inode_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.inodes | disk ${label:mount_point} inode utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per mount point\n\nThese metrics show detailss about mount point usages.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.space | avail, used, reserved_for_root | GiB |\n| disk.inodes | avail, used, reserved_for_root | inodes |\n\n",integration_type:"collector",id:"freebsd.plugin-getmntinfo-getmntinfo",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"hw.intrcnt",monitored_instance:{name:"hw.intrcnt",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# hw.intrcnt\n\nPlugin: freebsd.plugin\nModule: hw.intrcnt\n\n## Overview\n\nGet total number of interrupts\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config option" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| hw.intrcnt | Enable or disable Interrupts metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per hw.intrcnt instance\n\nThese metrics show system interrupts frequency.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.intr | interrupts | interrupts/s |\n| system.interrupts | a dimension per interrupt | interrupts/s |\n\n",integration_type:"collector",id:"freebsd.plugin-hw.intrcnt-hw.intrcnt",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"ipfw",monitored_instance:{name:"ipfw",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"firewall.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# ipfw\n\nPlugin: freebsd.plugin\nModule: ipfw\n\n## Overview\n\nCollect information about FreeBSD firewall.\n\nThe plugin uses RAW socket to communicate with kernel and collect data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:ipfw]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| counters for static rules | Enable or disable counters for static rules metric. | yes | no |\n| number of dynamic rules | Enable or disable number of dynamic rules metric. | yes | no |\n| allocated memory | Enable or disable allocated memory metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ipfw instance\n\nTheese metrics show FreeBSD firewall statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipfw.mem | dynamic, static | bytes |\n| ipfw.packets | a dimension per static rule | packets/s |\n| ipfw.bytes | a dimension per static rule | bytes/s |\n| ipfw.active | a dimension per dynamic rule | rules |\n| ipfw.expired | a dimension per dynamic rule | rules |\n\n",integration_type:"collector",id:"freebsd.plugin-ipfw-ipfw",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"kern.cp_time",monitored_instance:{name:"kern.cp_time",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# kern.cp_time\n\nPlugin: freebsd.plugin\nModule: kern.cp_time\n\n## Overview\n\nTotal CPU utilization\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nThe netdata main configuration file.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| kern.cp_time | Enable or disable Total CPU usage. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU utilization over the last 10 minutes (excluding iowait, nice and steal) |\n| [ 10min_cpu_iowait ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU iowait time over the last 10 minutes |\n| [ 20min_steal_cpu ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU steal time over the last 20 minutes |\n| [ 10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU utilization over the last 10 minutes (excluding nice) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per kern.cp_time instance\n\nThese metrics show CPU usage statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.cpu | nice, system, user, interrupt, idle | percentage |\n\n### Per core\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.cpu | nice, system, user, interrupt, idle | percentage |\n\n",integration_type:"collector",id:"freebsd.plugin-kern.cp_time-kern.cp_time",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"kern.ipc.msq",monitored_instance:{name:"kern.ipc.msq",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# kern.ipc.msq\n\nPlugin: freebsd.plugin\nModule: kern.ipc.msq\n\n## Overview\n\nCollect number of IPC message Queues\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| kern.ipc.msq | Enable or disable IPC message queue metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per kern.ipc.msq instance\n\nThese metrics show statistics IPC messages statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ipc_msq_queues | queues | queues |\n| system.ipc_msq_messages | messages | messages |\n| system.ipc_msq_size | allocated, used | bytes |\n\n",integration_type:"collector",id:"freebsd.plugin-kern.ipc.msq-kern.ipc.msq",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"kern.ipc.sem",monitored_instance:{name:"kern.ipc.sem",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# kern.ipc.sem\n\nPlugin: freebsd.plugin\nModule: kern.ipc.sem\n\n## Overview\n\nCollect information about semaphore.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| kern.ipc.sem | Enable or disable semaphore metrics. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ semaphores_used ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf) | system.ipc_semaphores | IPC semaphore utilization |\n| [ semaphore_arrays_used ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf) | system.ipc_semaphore_arrays | IPC semaphore arrays utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per kern.ipc.sem instance\n\nThese metrics shows counters for semaphores on host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ipc_semaphores | semaphores | semaphores |\n| system.ipc_semaphore_arrays | arrays | arrays |\n\n",integration_type:"collector",id:"freebsd.plugin-kern.ipc.sem-kern.ipc.sem",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"kern.ipc.shm",monitored_instance:{name:"kern.ipc.shm",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"memory.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# kern.ipc.shm\n\nPlugin: freebsd.plugin\nModule: kern.ipc.shm\n\n## Overview\n\nCollect shared memory information.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| kern.ipc.shm | Enable or disable shared memory metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per kern.ipc.shm instance\n\nThese metrics give status about current shared memory segments.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ipc_shared_mem_segs | segments | segments |\n| system.ipc_shared_mem_size | allocated | KiB |\n\n",integration_type:"collector",id:"freebsd.plugin-kern.ipc.shm-kern.ipc.shm",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet.icmp.stats",monitored_instance:{name:"net.inet.icmp.stats",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet.icmp.stats\n\nPlugin: freebsd.plugin\nModule: net.inet.icmp.stats\n\n## Overview\n\nCollect information about ICMP traffic.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.inet.icmp.stats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| IPv4 ICMP packets | Enable or disable IPv4 ICMP packets metric. | yes | no |\n| IPv4 ICMP error | Enable or disable IPv4 ICMP error metric. | yes | no |\n| IPv4 ICMP messages | Enable or disable IPv4 ICMP messages metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet.icmp.stats instance\n\nThese metrics show ICMP connections statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv4.icmp | received, sent | packets/s |\n| ipv4.icmp_errors | InErrors, OutErrors, InCsumErrors | packets/s |\n| ipv4.icmpmsg | InEchoReps, OutEchoReps, InEchos, OutEchos | packets/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet.icmp.stats-net.inet.icmp.stats",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet.ip.stats",monitored_instance:{name:"net.inet.ip.stats",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet.ip.stats\n\nPlugin: freebsd.plugin\nModule: net.inet.ip.stats\n\n## Overview\n\nCollect IP stats\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.inet.ip.stats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| ipv4 packets | Enable or disable IPv4 packets metric. | yes | no |\n| ipv4 fragments sent | Enable or disable IPv4 fragments sent metric. | yes | no |\n| ipv4 fragments assembly | Enable or disable IPv4 fragments assembly metric. | yes | no |\n| ipv4 errors | Enable or disable IPv4 errors metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet.ip.stats instance\n\nThese metrics show IPv4 connections statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv4.packets | received, sent, forwarded, delivered | packets/s |\n| ipv4.fragsout | ok, failed, created | packets/s |\n| ipv4.fragsin | ok, failed, all | packets/s |\n| ipv4.errors | InDiscards, OutDiscards, InHdrErrors, OutNoRoutes, InAddrErrors, InUnknownProtos | packets/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet.ip.stats-net.inet.ip.stats",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet.tcp.states",monitored_instance:{name:"net.inet.tcp.states",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet.tcp.states\n\nPlugin: freebsd.plugin\nModule: net.inet.tcp.states\n\n## Overview\n\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| net.inet.tcp.states | Enable or disable TCP state metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ tcp_connections ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_conn.conf) | ipv4.tcpsock | IPv4 TCP connections utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet.tcp.states instance\n\nA counter for TCP connections.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv4.tcpsock | connections | active connections |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet.tcp.states-net.inet.tcp.states",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet.tcp.stats",monitored_instance:{name:"net.inet.tcp.stats",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet.tcp.stats\n\nPlugin: freebsd.plugin\nModule: net.inet.tcp.stats\n\n## Overview\n\nCollect overall information about TCP connections.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.inet.tcp.stats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| ipv4 TCP packets | Enable or disable ipv4 TCP packets metric. | yes | no |\n| ipv4 TCP errors | Enable or disable pv4 TCP errors metric. | yes | no |\n| ipv4 TCP handshake issues | Enable or disable ipv4 TCP handshake issue metric. | yes | no |\n| TCP connection aborts | Enable or disable TCP connection aborts metric. | auto | no |\n| TCP out-of-order queue | Enable or disable TCP out-of-order queue metric. | auto | no |\n| TCP SYN cookies | Enable or disable TCP SYN cookies metric. | auto | no |\n| TCP listen issues | Enable or disable TCP listen issues metric. | auto | no |\n| ECN packets | Enable or disable ECN packets metric. | auto | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 1m_ipv4_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ipv4.tcphandshake | average number of sent TCP RESETS over the last minute |\n| [ 10s_ipv4_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ipv4.tcphandshake | average number of sent TCP RESETS over the last 10 seconds. This can indicate a port scan, or that a service running on this host has crashed. Netdata will not send a clear notification for this alarm. |\n| [ 1m_ipv4_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ipv4.tcphandshake | average number of received TCP RESETS over the last minute |\n| [ 10s_ipv4_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ipv4.tcphandshake | average number of received TCP RESETS over the last 10 seconds. This can be an indication that a service this host needs has crashed. Netdata will not send a clear notification for this alarm. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet.tcp.stats instance\n\nThese metrics show TCP connections statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv4.tcppackets | received, sent | packets/s |\n| ipv4.tcperrors | InErrs, InCsumErrors, RetransSegs | packets/s |\n| ipv4.tcphandshake | EstabResets, ActiveOpens, PassiveOpens, AttemptFails | events/s |\n| ipv4.tcpconnaborts | baddata, userclosed, nomemory, timeout, linger | connections/s |\n| ipv4.tcpofo | inqueue | packets/s |\n| ipv4.tcpsyncookies | received, sent, failed | packets/s |\n| ipv4.tcplistenissues | overflows | packets/s |\n| ipv4.ecnpkts | InCEPkts, InECT0Pkts, InECT1Pkts, OutECT0Pkts, OutECT1Pkts | packets/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet.tcp.stats-net.inet.tcp.stats",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet.udp.stats",monitored_instance:{name:"net.inet.udp.stats",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet.udp.stats\n\nPlugin: freebsd.plugin\nModule: net.inet.udp.stats\n\n## Overview\n\nCollect information about UDP connections.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.inet.udp.stats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| ipv4 UDP packets | Enable or disable ipv4 UDP packets metric. | yes | no |\n| ipv4 UDP errors | Enable or disable ipv4 UDP errors metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 1m_ipv4_udp_receive_buffer_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP receive buffer errors over the last minute |\n| [ 1m_ipv4_udp_send_buffer_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP send buffer errors over the last minute |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet.udp.stats instance\n\nThese metrics show UDP connections statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv4.udppackets | received, sent | packets/s |\n| ipv4.udperrors | InErrors, NoPorts, RcvbufErrors, InCsumErrors, IgnoredMulti | events/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet.udp.stats-net.inet.udp.stats",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet6.icmp6.stats",monitored_instance:{name:"net.inet6.icmp6.stats",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet6.icmp6.stats\n\nPlugin: freebsd.plugin\nModule: net.inet6.icmp6.stats\n\n## Overview\n\nCollect information abou IPv6 ICMP\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.inet6.icmp6.stats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| icmp | Enable or disable ICMP metric. | auto | no |\n| icmp redirects | Enable or disable ICMP redirects metric. | auto | no |\n| icmp errors | Enable or disable ICMP errors metric. | auto | no |\n| icmp echos | Enable or disable ICMP echos metric. | auto | no |\n| icmp router | Enable or disable ICMP router metric. | auto | no |\n| icmp neighbor | Enable or disable ICMP neighbor metric. | auto | no |\n| icmp types | Enable or disable ICMP types metric. | auto | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet6.icmp6.stats instance\n\nCollect IPv6 ICMP traffic statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv6.icmp | received, sent | messages/s |\n| ipv6.icmpredir | received, sent | redirects/s |\n| ipv6.icmperrors | InErrors, OutErrors, InCsumErrors, InDestUnreachs, InPktTooBigs, InTimeExcds, InParmProblems, OutDestUnreachs, OutTimeExcds, OutParmProblems | errors/s |\n| ipv6.icmpechos | InEchos, OutEchos, InEchoReplies, OutEchoReplies | messages/s |\n| ipv6.icmprouter | InSolicits, OutSolicits, InAdvertisements, OutAdvertisements | messages/s |\n| ipv6.icmpneighbor | InSolicits, OutSolicits, InAdvertisements, OutAdvertisements | messages/s |\n| ipv6.icmptypes | InType1, InType128, InType129, InType136, OutType1, OutType128, OutType129, OutType133, OutType135, OutType143 | messages/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet6.icmp6.stats-net.inet6.icmp6.stats",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.inet6.ip6.stats",monitored_instance:{name:"net.inet6.ip6.stats",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"network.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.inet6.ip6.stats\n\nPlugin: freebsd.plugin\nModule: net.inet6.ip6.stats\n\n## Overview\n\nCollect information abou IPv6 stats.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.inet6.ip6.stats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| ipv6 packets | Enable or disable ipv6 packet metric. | auto | no |\n| ipv6 fragments sent | Enable or disable ipv6 fragments sent metric. | auto | no |\n| ipv6 fragments assembly | Enable or disable ipv6 fragments assembly metric. | auto | no |\n| ipv6 errors | Enable or disable ipv6 errors metric. | auto | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.inet6.ip6.stats instance\n\nThese metrics show general information about IPv6 connections.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv6.packets | received, sent, forwarded, delivers | packets/s |\n| ipv6.fragsout | ok, failed, all | packets/s |\n| ipv6.fragsin | ok, failed, timeout, all | packets/s |\n| ipv6.errors | InDiscards, OutDiscards, InHdrErrors, InAddrErrors, InTruncatedPkts, InNoRoutes, OutNoRoutes | packets/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.inet6.ip6.stats-net.inet6.ip6.stats",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"net.isr",monitored_instance:{name:"net.isr",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# net.isr\n\nPlugin: freebsd.plugin\nModule: net.isr\n\n## Overview\n\nCollect information about system softnet stat.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:net.isr]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| netisr | Enable or disable general vision about softnet stat metrics. | yes | no |\n| netisr per core | Enable or disable softnet stat metric per core. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 1min_netdev_backlog_exceeded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of dropped packets in the last minute due to exceeded net.core.netdev_max_backlog |\n| [ 1min_netdev_budget_ran_outs ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of times ksoftirq ran out of sysctl net.core.netdev_budget or net.core.netdev_budget_usecs with work remaining over the last minute (this can be a cause for dropped packets) |\n| [ 10min_netisr_backlog_exceeded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of drops in the last minute due to exceeded sysctl net.route.netisr_maxqlen (this can be a cause for dropped packets) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per net.isr instance\n\nThese metrics show statistics about softnet stats.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.softnet_stat | dispatched, hybrid_dispatched, qdrops, queued | events/s |\n\n### Per core\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.softnet_stat | dispatched, hybrid_dispatched, qdrops, queued | events/s |\n\n",integration_type:"collector",id:"freebsd.plugin-net.isr-net.isr",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"system.ram",monitored_instance:{name:"system.ram",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"memory.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# system.ram\n\nPlugin: freebsd.plugin\nModule: system.ram\n\n## Overview\n\nShow information about system memory usage.\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| system.ram | Enable or disable system RAM metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | system.ram | system memory utilization |\n| [ ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | system.ram | system memory utilization |\n| [ ram_available ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | mem.available | percentage of estimated amount of RAM available for userspace processes, without causing swapping |\n| [ ram_available ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | mem.available | percentage of estimated amount of RAM available for userspace processes, without causing swapping |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per system.ram instance\n\nThis metric shows RAM usage statistics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ram | free, active, inactive, wired, cache, laundry, buffers | MiB |\n| mem.available | avail | MiB |\n\n",integration_type:"collector",id:"freebsd.plugin-system.ram-system.ram",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"uptime",monitored_instance:{name:"uptime",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# uptime\n\nPlugin: freebsd.plugin\nModule: uptime\n\n## Overview\n\nShow period of time server is up.\n\nThe plugin calls `clock_gettime` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.loadavg | Enable or disable load average metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per uptime instance\n\nHow long the system is running.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.uptime | uptime | seconds |\n\n",integration_type:"collector",id:"freebsd.plugin-uptime-uptime",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.loadavg",monitored_instance:{name:"vm.loadavg",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.loadavg\n\nPlugin: freebsd.plugin\nModule: vm.loadavg\n\n## Overview\n\nSystem Load Average\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.loadavg | Enable or disable load average metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ load_cpu_number ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | number of active CPU cores in the system |\n| [ load_average_15 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system fifteen-minute load average |\n| [ load_average_5 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system five-minute load average |\n| [ load_average_1 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system one-minute load average |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.loadavg instance\n\nMonitoring for number of threads running or waiting.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.load | load1, load5, load15 | load |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.loadavg-vm.loadavg",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.stats.sys.v_intr",monitored_instance:{name:"vm.stats.sys.v_intr",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.stats.sys.v_intr\n\nPlugin: freebsd.plugin\nModule: vm.stats.sys.v_intr\n\n## Overview\n\nDevice interrupts\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config option" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.stats.sys.v_intr | Enable or disable device interrupts metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.stats.sys.v_intr instance\n\nThe metric show device interrupt frequency.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.dev_intr | interrupts | interrupts/s |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.stats.sys.v_intr-vm.stats.sys.v_intr",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.stats.sys.v_soft",monitored_instance:{name:"vm.stats.sys.v_soft",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.stats.sys.v_soft\n\nPlugin: freebsd.plugin\nModule: vm.stats.sys.v_soft\n\n## Overview\n\nSoftware Interrupt\n\nvm.stats.sys.v_soft\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config option" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.stats.sys.v_soft | Enable or disable software inerrupts metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.stats.sys.v_soft instance\n\nThis metric shows software interrupt frequency.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.soft_intr | interrupts | interrupts/s |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.stats.sys.v_soft-vm.stats.sys.v_soft",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.stats.sys.v_swtch",monitored_instance:{name:"vm.stats.sys.v_swtch",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.stats.sys.v_swtch\n\nPlugin: freebsd.plugin\nModule: vm.stats.sys.v_swtch\n\n## Overview\n\nCPU context switch\n\nThe plugin calls `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.stats.sys.v_swtch | Enable or disable CPU context switch metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.stats.sys.v_swtch instance\n\nThe metric count the number of context switches happening on host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ctxt | switches | context switches/s |\n| system.forks | started | processes/s |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.stats.sys.v_swtch-vm.stats.sys.v_swtch",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.stats.vm.v_pgfaults",monitored_instance:{name:"vm.stats.vm.v_pgfaults",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"memory.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.stats.vm.v_pgfaults\n\nPlugin: freebsd.plugin\nModule: vm.stats.vm.v_pgfaults\n\n## Overview\n\nCollect memory page faults events.\n\nThe plugin calls `sysctl` function to collect necessary data\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.stats.vm.v_pgfaults | Enable or disable Memory page fault metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.stats.vm.v_pgfaults instance\n\nThe number of page faults happened on host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.pgfaults | memory, io_requiring, cow, cow_optimized, in_transit | page faults/s |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.stats.vm.v_pgfaults-vm.stats.vm.v_pgfaults",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.stats.vm.v_swappgs",monitored_instance:{name:"vm.stats.vm.v_swappgs",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"memory.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.stats.vm.v_swappgs\n\nPlugin: freebsd.plugin\nModule: vm.stats.vm.v_swappgs\n\n## Overview\n\nThe metric swap amount of data read from and written to SWAP.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.stats.vm.v_swappgs | Enable or disable infoormation about SWAP I/O metric. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 30min_ram_swapped_out ](https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf) | mem.swapio | percentage of the system RAM swapped in the last 30 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.stats.vm.v_swappgs instance\n\nThis metric shows events happening on SWAP.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.swapio | io, out | KiB/s |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.stats.vm.v_swappgs-vm.stats.vm.v_swappgs",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.swap_info",monitored_instance:{name:"vm.swap_info",link:"",categories:["data-collection.freebsd"],icon_filename:"freebsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.swap_info\n\nPlugin: freebsd.plugin\nModule: vm.swap_info\n\n## Overview\n\nCollect information about SWAP memory.\n\nThe plugin calls `sysctlnametomib` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| vm.swap_info | Enable or disable SWAP metrics. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ used_swap ](https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf) | mem.swap | swap memory utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.swap_info instance\n\nThis metric shows the SWAP usage.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.swap | free, used | MiB |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.swap_info-vm.swap_info",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"vm.vmtotal",monitored_instance:{name:"vm.vmtotal",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"memory.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# vm.vmtotal\n\nPlugin: freebsd.plugin\nModule: vm.vmtotal\n\n## Overview\n\nCollect Virtual Memory information from host.\n\nThe plugin calls function `sysctl` to collect data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:vm.vmtotal]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enable total processes | Number of active processes. | yes | no |\n| processes running | Show number of processes running or blocked. | yes | no |\n| real memory | Memeory used on host. | yes | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ active_processes ](https://github.com/netdata/netdata/blob/master/src/health/health.d/processes.conf) | system.active_processes | system process IDs (PID) space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vm.vmtotal instance\n\nThese metrics show an overall vision about processes running.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.active_processes | active | processes |\n| system.processes | running, blocked | processes |\n| mem.real | used | MiB |\n\n",integration_type:"collector",id:"freebsd.plugin-vm.vmtotal-vm.vmtotal",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freebsd.plugin",module_name:"zfs",monitored_instance:{name:"zfs",link:"https://www.freebsd.org/",categories:["data-collection.freebsd"],icon_filename:"filesystem.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# zfs\n\nPlugin: freebsd.plugin\nModule: zfs\n\n## Overview\n\nCollect metrics for ZFS filesystem\n\nThe plugin uses `sysctl` function to collect necessary data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freebsd:zfs_arcstats]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| show zero charts | Do not show charts with zero metrics. | no | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ zfs_memory_throttle ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfs.memory_ops | number of times ZFS had to limit the ARC growth in the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per zfs instance\n\nThese metrics show detailed information about ZFS filesystem.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| zfs.arc_size | arcsz, target, min, max | MiB |\n| zfs.l2_size | actual, size | MiB |\n| zfs.reads | arc, demand, prefetch, metadata, l2 | reads/s |\n| zfs.bytes | read, write | KiB/s |\n| zfs.hits | hits, misses | percentage |\n| zfs.hits_rate | hits, misses | events/s |\n| zfs.dhits | hits, misses | percentage |\n| zfs.dhits_rate | hits, misses | events/s |\n| zfs.phits | hits, misses | percentage |\n| zfs.phits_rate | hits, misses | events/s |\n| zfs.mhits | hits, misses | percentage |\n| zfs.mhits_rate | hits, misses | events/s |\n| zfs.l2hits | hits, misses | percentage |\n| zfs.l2hits_rate | hits, misses | events/s |\n| zfs.list_hits | mfu, mfu_ghost, mru, mru_ghost | hits/s |\n| zfs.arc_size_breakdown | recent, frequent | percentage |\n| zfs.memory_ops | throttled | operations/s |\n| zfs.important_ops | evict_skip, deleted, mutex_miss, hash_collisions | operations/s |\n| zfs.actual_hits | hits, misses | percentage |\n| zfs.actual_hits_rate | hits, misses | events/s |\n| zfs.demand_data_hits | hits, misses | percentage |\n| zfs.demand_data_hits_rate | hits, misses | events/s |\n| zfs.prefetch_data_hits | hits, misses | percentage |\n| zfs.prefetch_data_hits_rate | hits, misses | events/s |\n| zfs.hash_elements | current, max | elements |\n| zfs.hash_chains | current, max | chains |\n| zfs.trim_bytes | TRIMmed | bytes |\n| zfs.trim_requests | successful, failed, unsupported | requests |\n\n",integration_type:"collector",id:"freebsd.plugin-zfs-zfs",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freebsd.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"freeipmi.plugin",module_name:"freeipmi",monitored_instance:{name:"Intelligent Platform Management Interface (IPMI)",link:"https://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"netdata.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["sensors","ipmi","freeipmi","ipmimonitoring"],most_popular:!0},overview:'# Intelligent Platform Management Interface (IPMI)\n\nPlugin: freeipmi.plugin\nModule: freeipmi\n\n## Overview\n\n"Monitor enterprise server sensor readings, event log entries, and hardware statuses to ensure reliable server operations."\n\n\nThe plugin uses open source library IPMImonitoring to communicate with sensors.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn\'t support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nLinux kernel module for IPMI can create big overhead.\n',setup:"## Setup\n\n### Prerequisites\n\n#### Install freeipmi.plugin\n\nWhen using our official DEB/RPM packages, the FreeIPMI plugin is included in a separate package named `netdata-plugin-freeipmi` which needs to be manually installed using your system package manager. It is not installed automatically due to the large number of dependencies it requires.\n\nWhen using a static build of Netdata, the FreeIPMI plugin will be included and installed automatically, though you will still need to have FreeIPMI installed on your system to be able to use the plugin.\n\nWhen using a local build of Netdata, you need to ensure that the FreeIPMI development packages (typically called `libipmimonitoring-dev`, `libipmimonitoring-devel`, or `freeipmi-devel`) are installed when building Netdata.\n\n\n#### Preliminary actions\n\nIf you have not previously used IPMI on your system, you will probably need to run the `ipmimonitoring` command as root\nto initialize IPMI settings so that the Netdata plugin works correctly. It should return information about available sensors on the system.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:freeipmi]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nThe configuration is set using command line options:\n\n```\n# netdata.conf\n[plugin:freeipmi]\n command options = opt1 opt2 ... optN\n```\n\nTo display a help message listing the available command line options:\n\n```bash\n./usr/libexec/netdata/plugins.d/freeipmi.plugin --help\n```\n\n\n{% details open=true summary=\"Command options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SECONDS | Data collection frequency. | | no |\n| debug | Enable verbose output. | disabled | no |\n| no-sel | Disable System Event Log (SEL) collection. | disabled | no |\n| reread-sdr-cache | Re-read SDR cache on every iteration. | disabled | no |\n| interpret-oem-data | Attempt to parse OEM data. | disabled | no |\n| assume-system-event-record | treat illegal SEL events records as normal. | disabled | no |\n| ignore-non-interpretable-sensors | Do not read sensors that cannot be interpreted. | disabled | no |\n| bridge-sensors | Bridge sensors not owned by the BMC. | disabled | no |\n| shared-sensors | Enable shared sensors if found. | disabled | no |\n| no-discrete-reading | Do not read sensors if their event/reading type code is invalid. | enabled | no |\n| ignore-scanning-disabled | Ignore the scanning bit and read sensors no matter what. | disabled | no |\n| assume-bmc-owner | Assume the BMC is the sensor owner no matter what (usually bridging is required too). | disabled | no |\n| hostname HOST | Remote IPMI hostname or IP address. | local | no |\n| username USER | Username that will be used when connecting to the remote host. | | no |\n| password PASS | Password that will be used when connecting to the remote host. | | no |\n| noauthcodecheck / no-auth-code-check | Don't check the authentication codes returned. | | no |\n| driver-type IPMIDRIVER | Specify the driver type to use instead of doing an auto selection. The currently available outofband drivers are LAN and LAN_2_0, which perform IPMI 1.5 and IPMI 2.0 respectively. The currently available inband drivers are KCS, SSIF, OPENIPMI and SUNBMC. | | no |\n| sdr-cache-dir PATH | SDR cache files directory. | /tmp | no |\n| sensor-config-file FILE | Sensors configuration filename. | system default | no |\n| sel-config-file FILE | SEL configuration filename. | system default | no |\n| ignore N1,N2,N3,... | Sensor IDs to ignore. | | no |\n| ignore-status N1,N2,N3,... | Sensor IDs to ignore status (nominal/warning/critical). | | no |\n| -v | Print version and exit. | | no |\n| --help | Print usage message and exit. | | no |\n\n{% /details %}\n#### Examples\n\n##### Decrease data collection frequency\n\nBasic example decreasing data collection frequency. The minimum `update every` is 5 (enforced internally by the plugin). IPMI is slow and CPU hungry. So, once every 5 seconds is pretty acceptable.\n\n```yaml\n[plugin:freeipmi]\n update every = 10\n\n```\n##### Disable SEL collection\n\nAppend to `command options =` the options you need.\n\n{% details open=true summary=\"Config\" %}\n```yaml\n[plugin:freeipmi]\n command options = no-sel\n\n```\n{% /details %}\n##### Ignore specific sensors\n\nSpecific sensor IDs can be excluded from freeipmi tools by editing `/etc/freeipmi/freeipmi.conf` and setting the IDs to be ignored at `ipmi-sensors-exclude-record-ids`.\n\n**However this file is not used by `libipmimonitoring`** (the library used by Netdata's `freeipmi.plugin`).\n\nTo find the IDs to ignore, run the command `ipmimonitoring`. The first column is the wanted ID:\n\nID | Name | Type | State | Reading | Units | Event\n1 | Ambient Temp | Temperature | Nominal | 26.00 | C | 'OK'\n2 | Altitude | Other Units Based Sensor | Nominal | 480.00 | ft | 'OK'\n3 | Avg Power | Current | Nominal | 100.00 | W | 'OK'\n4 | Planar 3.3V | Voltage | Nominal | 3.29 | V | 'OK'\n5 | Planar 5V | Voltage | Nominal | 4.90 | V | 'OK'\n6 | Planar 12V | Voltage | Nominal | 11.99 | V | 'OK'\n7 | Planar VBAT | Voltage | Nominal | 2.95 | V | 'OK'\n8 | Fan 1A Tach | Fan | Nominal | 3132.00 | RPM | 'OK'\n9 | Fan 1B Tach | Fan | Nominal | 2150.00 | RPM | 'OK'\n10 | Fan 2A Tach | Fan | Nominal | 2494.00 | RPM | 'OK'\n11 | Fan 2B Tach | Fan | Nominal | 1825.00 | RPM | 'OK'\n12 | Fan 3A Tach | Fan | Nominal | 3538.00 | RPM | 'OK'\n13 | Fan 3B Tach | Fan | Nominal | 2625.00 | RPM | 'OK'\n14 | Fan 1 | Entity Presence | Nominal | N/A | N/A | 'Entity Present'\n15 | Fan 2 | Entity Presence | Nominal | N/A | N/A | 'Entity Present'\n...\n\n`freeipmi.plugin` supports the option `ignore` that accepts a comma separated list of sensor IDs to ignore. To configure it set on `netdata.conf`:\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\n[plugin:freeipmi]\n command options = ignore 1,2,3,4,...\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\n\n\n### kimpi0 CPU usage\n\n\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ipmi_sensor_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipmi.conf) | ipmi.sensor_state | IPMI sensor ${label:sensor} (${label:component}) state |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe plugin does a speed test when it starts, to find out the duration needed by the IPMI processor to respond. Depending on the speed of your IPMI processor, charts may need several seconds to show up on the dashboard.\n\n\n### Per Intelligent Platform Management Interface (IPMI) instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipmi.sel | events | events |\n\n### Per sensor\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| sensor | The sensor name |\n| type | One of 45 recognized sensor types (Battery, Voltage...) |\n| component | One of 25 recognized components (Processor, Peripheral). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipmi.sensor_state | nominal, critical, warning, unknown | state |\n| ipmi.sensor_temperature_c | temperature | Celsius |\n| ipmi.sensor_temperature_f | temperature | Fahrenheit |\n| ipmi.sensor_voltage | voltage | Volts |\n| ipmi.sensor_ampere | ampere | Amps |\n| ipmi.sensor_fan_speed | rotations | RPM |\n| ipmi.sensor_power | power | Watts |\n| ipmi.sensor_reading_percent | percentage | % |\n\n",integration_type:"collector",id:"freeipmi.plugin-freeipmi-Intelligent_Platform_Management_Interface_(IPMI)",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/freeipmi.plugin/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-activemq",module_name:"activemq",plugin_name:"go.d.plugin",monitored_instance:{categories:["data-collection.message-brokers"],icon_filename:"activemq.png",name:"ActiveMQ",link:"https://activemq.apache.org/"},alternative_monitored_instances:[],keywords:["message broker"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"apps.plugin",module_name:"apps"}]}}},overview:"# ActiveMQ\n\nPlugin: go.d.plugin\nModule: activemq\n\n## Overview\n\nThis collector monitors ActiveMQ queues and topics.\n\nIt collects metrics by sending HTTP requests to the Web Console API.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis collector discovers instances running on the local host that provide metrics on port 8161.\nOn startup, it tries to collect metrics from:\n\n- http://localhost:8161\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/activemq.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/activemq.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://localhost:8161 | yes |\n| webadmin | Webadmin root path. | admin | yes |\n| max_queues | Maximum number of concurrently collected queues. | 50 | no |\n| max_topics | Maximum number of concurrently collected topics. | 50 | no |\n| queues_filter | Queues filter. Syntax is [simple patterns](/src/libnetdata/simple_pattern/README.md#simple-patterns). | | no |\n| topics_filter | Topics filter. Syntax is [simple patterns](/src/libnetdata/simple_pattern/README.md#simple-patterns). | | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| timeout | HTTP request timeout. | 1 | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8161\n webadmin: admin\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8161\n webadmin: admin\n username: foo\n password: bar\n\n```\n{% /details %}\n##### Filters and limits\n\nUsing filters and limits for queues and topics.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8161\n webadmin: admin\n max_queues: 100\n max_topics: 100\n queues_filter: \'!sandr* *\'\n topics_filter: \'!sandr* *\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8161\n webadmin: admin\n\n - name: remote\n url: http://192.0.2.1:8161\n webadmin: admin\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `activemq` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m activemq\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ActiveMQ instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| activemq.messages | enqueued, dequeued | messages/s |\n| activemq.unprocessed_messages | unprocessed | messages |\n| activemq.consumers | consumers | consumers |\n\n",integration_type:"collector",id:"go.d.plugin-activemq-ActiveMQ",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/activemq/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-adaptecraid",plugin_name:"go.d.plugin",module_name:"adaptec_raid",monitored_instance:{name:"Adaptec RAID",link:"https://www.microchip.com/en-us/products/storage",icon_filename:"adaptec.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["storage","raid-controller","manage-disks"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Adaptec RAID\n\nPlugin: go.d.plugin\nModule: adaptec_raid\n\n## Overview\n\nMonitors the health of Adaptec Hardware RAID by tracking the status of logical and physical devices in your storage system.\nIt relies on the `arcconf` CLI tool but avoids directly executing the binary.\nInstead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment.\nThis approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\nExecuted commands:\n- `arcconf GETCONFIG 1 LD`\n- `arcconf GETCONFIG 1 PD`\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/adaptec_raid.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/adaptec_raid.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| timeout | arcconf binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: adaptec_raid\n update_every: 5 # Collect Adaptec Hardware RAID statistics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `adaptec_raid` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m adaptec_raid\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ adaptec_raid_ld_health_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/adaptec_raid.conf) | adaptecraid.logical_device_status | Adaptec RAID logical device (number ${label:ld_number} name ${label:ld_name}) health status is critical |\n| [ adaptec_raid_pd_health_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/adaptec_raid.conf) | adaptecraid.physical_device_state | Adaptec RAID physical device (number ${label:pd_number} location ${label:location}) health state is critical |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per logical device\n\nThese metrics refer to the Logical Device (LD).\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| ld_number | Logical device index number |\n| ld_name | Logical device name |\n| raid_level | RAID level |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adaptecraid.logical_device_status | ok, critical | status |\n\n### Per physical device\n\nThese metrics refer to the Physical Device (PD).\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| pd_number | Physical device index number |\n| location | Physical device location (e.g. Connector 0, Device 1) |\n| vendor | Physical device vendor |\n| model | Physical device model |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adaptecraid.physical_device_state | ok, critical | status |\n| adaptecraid.physical_device_smart_warnings | smart | warnings |\n| adaptecraid.physical_device_temperature | temperature | Celsius |\n\n",integration_type:"collector",id:"go.d.plugin-adaptec_raid-Adaptec_RAID",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/adaptecraid/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-apache",plugin_name:"go.d.plugin",module_name:"apache",monitored_instance:{name:"Apache",link:"https://httpd.apache.org/",icon_filename:"apache.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["webserver"],related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"weblog"},{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Apache\n\nPlugin: go.d.plugin\nModule: apache\n\n## Overview\n\nThis collector monitors the activity and performance of Apache servers, and collects metrics such as the number of connections, workers, requests and more.\n\n\nIt sends HTTP requests to the Apache location [server-status](https://httpd.apache.org/docs/2.4/mod/mod_status.html), \nwhich is a built-in location that provides metrics about the Apache server.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Apache instances running on localhost that are listening on port 80.\nOn startup, it tries to collect metrics from:\n\n- http://localhost/server-status?auto\n- http://127.0.0.1/server-status?auto\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable Apache status support\n\n- Enable and configure [status_module](https://httpd.apache.org/docs/2.4/mod/mod_status.html).\n- Ensure that you have [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/mod_status.html#troubleshoot) set on (enabled by default since Apache v2.3.6).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/apache.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/apache.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/server-status?auto | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nApache with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1/server-status?auto\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n\n - name: remote\n url: http://192.0.2.1/server-status?auto\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `apache` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m apache\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nAll metrics available only if [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/core.html#extendedstatus) is on.\n\n\n### Per Apache instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | Basic | Extended |\n|:------|:----------|:----|:---:|:---:|\n| apache.connections | connections | connections | \u2022 | \u2022 |\n| apache.conns_async | keepalive, closing, writing | connections | \u2022 | \u2022 |\n| apache.workers | idle, busy | workers | \u2022 | \u2022 |\n| apache.scoreboard | waiting, starting, reading, sending, keepalive, dns_lookup, closing, logging, finishing, idle_cleanup, open | connections | \u2022 | \u2022 |\n| apache.requests | requests | requests/s | | \u2022 |\n| apache.net | sent | kilobit/s | | \u2022 |\n| apache.reqpersec | requests | requests/s | | \u2022 |\n| apache.bytespersec | served | KiB/s | | \u2022 |\n| apache.bytesperreq | size | KiB | | \u2022 |\n| apache.uptime | uptime | seconds | | \u2022 |\n\n",integration_type:"collector",id:"go.d.plugin-apache-Apache",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-httpd",plugin_name:"go.d.plugin",module_name:"apache",monitored_instance:{name:"HTTPD",link:"https://httpd.apache.org/",icon_filename:"apache.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["webserver"],related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"weblog"},{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# HTTPD\n\nPlugin: go.d.plugin\nModule: apache\n\n## Overview\n\nThis collector monitors the activity and performance of Apache servers, and collects metrics such as the number of connections, workers, requests and more.\n\n\nIt sends HTTP requests to the Apache location [server-status](https://httpd.apache.org/docs/2.4/mod/mod_status.html), \nwhich is a built-in location that provides metrics about the Apache server.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Apache instances running on localhost that are listening on port 80.\nOn startup, it tries to collect metrics from:\n\n- http://localhost/server-status?auto\n- http://127.0.0.1/server-status?auto\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable Apache status support\n\n- Enable and configure [status_module](https://httpd.apache.org/docs/2.4/mod/mod_status.html).\n- Ensure that you have [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/mod_status.html#troubleshoot) set on (enabled by default since Apache v2.3.6).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/apache.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/apache.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/server-status?auto | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nApache with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1/server-status?auto\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n\n - name: remote\n url: http://192.0.2.1/server-status?auto\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `apache` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m apache\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nAll metrics available only if [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/core.html#extendedstatus) is on.\n\n\n### Per Apache instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | Basic | Extended |\n|:------|:----------|:----|:---:|:---:|\n| apache.connections | connections | connections | \u2022 | \u2022 |\n| apache.conns_async | keepalive, closing, writing | connections | \u2022 | \u2022 |\n| apache.workers | idle, busy | workers | \u2022 | \u2022 |\n| apache.scoreboard | waiting, starting, reading, sending, keepalive, dns_lookup, closing, logging, finishing, idle_cleanup, open | connections | \u2022 | \u2022 |\n| apache.requests | requests | requests/s | | \u2022 |\n| apache.net | sent | kilobit/s | | \u2022 |\n| apache.reqpersec | requests | requests/s | | \u2022 |\n| apache.bytespersec | served | KiB/s | | \u2022 |\n| apache.bytesperreq | size | KiB | | \u2022 |\n| apache.uptime | uptime | seconds | | \u2022 |\n\n",integration_type:"collector",id:"go.d.plugin-apache-HTTPD",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-cassandra",module_name:"cassandra",plugin_name:"go.d.plugin",monitored_instance:{categories:["data-collection.database-servers"],icon_filename:"cassandra.svg",name:"Cassandra",link:"https://cassandra.apache.org/_/index.html"},alternative_monitored_instances:[],keywords:["nosql","dbms","db","database"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Cassandra\n\nPlugin: go.d.plugin\nModule: cassandra\n\n## Overview\n\nThis collector gathers metrics about client requests, cache hits, and many more, while also providing metrics per each thread pool.\n\n\nThe [JMX Exporter](https://github.com/prometheus/jmx_exporter) is used to fetch metrics from a Cassandra instance and make them available at an endpoint like `http://127.0.0.1:7072/metrics`.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis collector discovers instances running on the local host that provide metrics on port 7072.\n\nOn startup, it tries to collect metrics from:\n\n- http://127.0.0.1:7072/metrics\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure Cassandra with Prometheus JMX Exporter\n\nTo configure Cassandra with the [JMX Exporter](https://github.com/prometheus/jmx_exporter):\n\n> **Note**: paths can differ depends on your setup.\n\n- Download latest [jmx_exporter](https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/) jar file\n and install it in a directory where Cassandra can access it.\n- Add\n the [jmx_exporter.yaml](https://raw.githubusercontent.com/netdata/go.d.plugin/master/modules/cassandra/jmx_exporter.yaml)\n file to `/etc/cassandra`.\n- Add the following line to `/etc/cassandra/cassandra-env.sh`\n ```\n JVM_OPTS="$JVM_OPTS $JVM_EXTRA_OPTS -javaagent:/opt/jmx_exporter/jmx_exporter.jar=7072:/etc/cassandra/jmx_exporter.yaml\n ```\n- Restart cassandra service.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/cassandra.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/cassandra.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:7072/metrics | yes |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 2 | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:7072/metrics\n\n```\n##### HTTP authentication\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:7072/metrics\n username: foo\n password: bar\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nLocal server with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:7072/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:7072/metrics\n\n - name: remote\n url: http://192.0.2.1:7072/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `cassandra` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m cassandra\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Cassandra instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cassandra.client_requests_rate | read, write | requests/s |\n| cassandra.client_request_read_latency_histogram | p50, p75, p95, p98, p99, p999 | seconds |\n| cassandra.client_request_write_latency_histogram | p50, p75, p95, p98, p99, p999 | seconds |\n| cassandra.client_requests_latency | read, write | seconds |\n| cassandra.row_cache_hit_ratio | hit_ratio | percentage |\n| cassandra.row_cache_hit_rate | hits, misses | events/s |\n| cassandra.row_cache_utilization | used | percentage |\n| cassandra.row_cache_size | size | bytes |\n| cassandra.key_cache_hit_ratio | hit_ratio | percentage |\n| cassandra.key_cache_hit_rate | hits, misses | events/s |\n| cassandra.key_cache_utilization | used | percentage |\n| cassandra.key_cache_size | size | bytes |\n| cassandra.storage_live_disk_space_used | used | bytes |\n| cassandra.compaction_completed_tasks_rate | completed | tasks/s |\n| cassandra.compaction_pending_tasks_count | pending | tasks |\n| cassandra.compaction_compacted_rate | compacted | bytes/s |\n| cassandra.jvm_memory_used | heap, nonheap | bytes |\n| cassandra.jvm_gc_rate | parnew, cms | gc/s |\n| cassandra.jvm_gc_time | parnew, cms | seconds |\n| cassandra.dropped_messages_rate | dropped | messages/s |\n| cassandra.client_requests_timeouts_rate | read, write | timeout/s |\n| cassandra.client_requests_unavailables_rate | read, write | exceptions/s |\n| cassandra.client_requests_failures_rate | read, write | failures/s |\n| cassandra.storage_exceptions_rate | storage | exceptions/s |\n\n### Per thread pool\n\nMetrics related to Cassandra's thread pools. Each thread pool provides its own set of the following metrics.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thread_pool | thread pool name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cassandra.thread_pool_active_tasks_count | active | tasks |\n| cassandra.thread_pool_pending_tasks_count | pending | tasks |\n| cassandra.thread_pool_blocked_tasks_count | blocked | tasks |\n| cassandra.thread_pool_blocked_tasks_rate | blocked | tasks/s |\n\n",integration_type:"collector",id:"go.d.plugin-cassandra-Cassandra",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/cassandra/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-chrony",module_name:"chrony",plugin_name:"go.d.plugin",monitored_instance:{categories:["data-collection.system-clock-and-ntp"],icon_filename:"chrony.jpg",name:"Chrony",link:"https://chrony.tuxfamily.org/"},alternative_monitored_instances:[],keywords:[],info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}},most_popular:!1},overview:"# Chrony\n\nPlugin: go.d.plugin\nModule: chrony\n\n## Overview\n\nThis collector monitors the system's clock performance and peers activity status\n\nIt collects metrics by sending UDP packets to chronyd using the Chrony communication protocol v6.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis collector discovers Chrony instance running on the local host and listening on port 323.\nOn startup, it tries to collect metrics from:\n\n- 127.0.0.1:323\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/chrony.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/chrony.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address. The format is IP:PORT. | 127.0.0.1:323 | yes |\n| timeout | Connection timeout. Zero means no timeout. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:323\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:323\n\n - name: remote\n address: 192.0.2.1:323\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `chrony` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m chrony\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Chrony instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| chrony.stratum | stratum | level |\n| chrony.current_correction | current_correction | seconds |\n| chrony.root_delay | root_delay | seconds |\n| chrony.root_dispersion | root_delay | seconds |\n| chrony.last_offset | offset | seconds |\n| chrony.rms_offset | offset | seconds |\n| chrony.frequency | frequency | ppm |\n| chrony.residual_frequency | residual_frequency | ppm |\n| chrony.skew | skew | ppm |\n| chrony.update_interval | update_interval | seconds |\n| chrony.ref_measurement_time | ref_measurement_time | seconds |\n| chrony.leap_status | normal, insert_second, delete_second, unsynchronised | status |\n| chrony.activity | online, offline, burst_online, burst_offline, unresolved | sources |\n\n",integration_type:"collector",id:"go.d.plugin-chrony-Chrony",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/chrony/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-clickhouse",plugin_name:"go.d.plugin",module_name:"clickhouse",monitored_instance:{name:"ClickHouse",link:"https://clickhouse.com/",icon_filename:"clickhouse.svg",categories:["data-collection.database-servers"]},keywords:["database"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# ClickHouse\n\nPlugin: go.d.plugin\nModule: clickhouse\n\n## Overview\n\nThis collector retrieves performance data from ClickHouse for connections, queries, resources, replication, IO, and data operations (inserts, selects, merges) using HTTP requests and ClickHouse system tables. It monitors your ClickHouse server's health and activity.\n\n\nIt sends HTTP requests to the ClickHouse [HTTP interface](https://clickhouse.com/docs/en/interfaces/http), executing SELECT queries to retrieve data from various system tables.\nSpecifically, it collects metrics from the following tables:\n\n- system.metrics\n- system.async_metrics\n- system.events\n- system.disks\n- system.parts\n- system.processes\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects ClickHouse instances running on localhost that are listening on port 8123.\nOn startup, it tries to collect metrics from:\n\n- http://127.0.0.1:8123\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/clickhouse.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/clickhouse.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8123 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8123\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8123\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nClickHouse with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:8123\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8123\n\n - name: remote\n url: http://192.0.2.1:8123\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `clickhouse` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m clickhouse\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ clickhouse_restarted ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.uptime | ClickHouse has recently been restarted |\n| [ clickhouse_queries_preempted ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.queries_preempted | ClickHouse has queries that are stopped and waiting due to priority setting |\n| [ clickhouse_long_running_query ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.longest_running_query_time | ClickHouse has a long-running query exceeding the threshold |\n| [ clickhouse_rejected_inserts ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.rejected_inserts | ClickHouse has INSERT queries that are rejected due to high number of active data parts for partition in a MergeTree |\n| [ clickhouse_delayed_inserts ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.delayed_inserts | ClickHouse has INSERT queries that are throttled due to high number of active data parts for partition in a MergeTree |\n| [ clickhouse_replication_lag ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.replicas_max_absolute_delay | ClickHouse is experiencing replication lag greater than 5 minutes |\n| [ clickhouse_replicated_readonly_tables ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.replicated_readonly_tables | ClickHouse has replicated tables in readonly state due to ZooKeeper session loss/startup without ZooKeeper configured |\n| [ clickhouse_max_part_count_for_partition ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.max_part_count_for_partition | ClickHouse high number of parts per partition |\n| [ clickhouse_distributed_connections_failures ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.distributed_connections_fail_exhausted_retries | ClickHouse has failed distributed connections after exhausting all retry attempts |\n| [ clickhouse_distributed_files_to_insert ](https://github.com/netdata/netdata/blob/master/src/health/health.d/clickhouse.conf) | clickhouse.distributed_files_to_insert | ClickHouse high number of pending files to process for asynchronous insertion into Distributed tables |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ClickHouse instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| clickhouse.connections | tcp, http, mysql, postgresql, interserver | connections |\n| clickhouse.slow_reads | slow | reads/s |\n| clickhouse.read_backoff | read_backoff | events/s |\n| clickhouse.memory_usage | used | bytes |\n| clickhouse.running_queries | running | queries |\n| clickhouse.queries_preempted | preempted | queries |\n| clickhouse.queries | successful, failed | queries/s |\n| clickhouse.select_queries | successful, failed | selects/s |\n| clickhouse.insert_queries | successful, failed | inserts/s |\n| clickhouse.queries_memory_limit_exceeded | mem_limit_exceeded | queries/s |\n| clickhouse.longest_running_query_time | longest_query_time | seconds |\n| clickhouse.queries_latency | queries_time | microseconds |\n| clickhouse.select_queries_latency | selects_time | microseconds |\n| clickhouse.insert_queries_latency | inserts_time | microseconds |\n| clickhouse.io | reads, writes | bytes/s |\n| clickhouse.iops | reads, writes | ops/s |\n| clickhouse.io_errors | read, write | errors/s |\n| clickhouse.io_seeks | lseek | ops/s |\n| clickhouse.io_file_opens | file_open | ops/s |\n| clickhouse.replicated_parts_current_activity | fetch, send, check | parts |\n| clickhouse.replicas_max_absolute_dela | replication_delay | seconds |\n| clickhouse.replicated_readonly_tables | read_only | tables |\n| clickhouse.replicated_data_loss | data_loss | events |\n| clickhouse.replicated_part_fetches | successful, failed | fetches/s |\n| clickhouse.inserted_rows | inserted | rows/s |\n| clickhouse.inserted_bytes | inserted | bytes/s |\n| clickhouse.rejected_inserts | rejected | inserts/s |\n| clickhouse.delayed_inserts | delayed | inserts/s |\n| clickhouse.delayed_inserts_throttle_time | delayed_inserts_throttle_time | milliseconds |\n| clickhouse.selected_bytes | selected | bytes/s |\n| clickhouse.selected_rows | selected | rows/s |\n| clickhouse.selected_parts | selected | parts/s |\n| clickhouse.selected_ranges | selected | ranges/s |\n| clickhouse.selected_marks | selected | marks/s |\n| clickhouse.merges | merge | ops/s |\n| clickhouse.merges_latency | merges_time | milliseconds |\n| clickhouse.merged_uncompressed_bytes | merged_uncompressed | bytes/s |\n| clickhouse.merged_rows | merged | rows/s |\n| clickhouse.merge_tree_data_writer_inserted_rows | inserted | rows/s |\n| clickhouse.merge_tree_data_writer_uncompressed_bytes | inserted | bytes/s |\n| clickhouse.merge_tree_data_writer_compressed_bytes | written | bytes/s |\n| clickhouse.uncompressed_cache_requests | hits, misses | requests/s |\n| clickhouse.mark_cache_requests | hits, misses | requests/s |\n| clickhouse.max_part_count_for_partition | max_parts_partition | parts |\n| clickhouse.parts_count | temporary, pre_active, active, deleting, delete_on_destroy, outdated, wide, compact | parts |\n| distributed_connections | active | connections |\n| distributed_connections_attempts | connection | attempts/s |\n| distributed_connections_fail_retries | connection_retry | fails/s |\n| distributed_connections_fail_exhausted_retries | connection_retry_exhausted | fails/s |\n| distributed_files_to_insert | pending_insertions | files |\n| distributed_rejected_inserts | rejected | inserts/s |\n| distributed_delayed_inserts | delayed | inserts/s |\n| distributed_delayed_inserts_latency | delayed_time | milliseconds |\n| distributed_sync_insertion_timeout_exceeded | sync_insertion | timeouts/s |\n| distributed_async_insertions_failures | async_insertions | failures/s |\n| clickhouse.uptime | uptime | seconds |\n\n### Per disk\n\nThese metrics refer to the Disk.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk_name | Name of the disk as defined in the [server configuration](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-multiple-volumes_configure). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| clickhouse.disk_space_usage | free, used | bytes |\n\n### Per table\n\nThese metrics refer to the Database Table.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| database | Name of the database. |\n| table | Name of the table. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| clickhouse.database_table_size | size | bytes |\n| clickhouse.database_table_parts | parts | parts |\n| clickhouse.database_table_rows | rows | rows |\n\n",integration_type:"collector",id:"go.d.plugin-clickhouse-ClickHouse",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/clickhouse/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-cockroachdb",plugin_name:"go.d.plugin",module_name:"cockroachdb",monitored_instance:{name:"CockroachDB",link:"https://www.cockroachlabs.com/",icon_filename:"cockroachdb.svg",categories:["data-collection.database-servers"]},keywords:["cockroachdb","databases"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# CockroachDB\n\nPlugin: go.d.plugin\nModule: cockroachdb\n\n## Overview\n\nThis collector monitors CockroachDB servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/cockroachdb.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/cockroachdb.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8080/_status/vars | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080/_status/vars\n\n```\n{% /details %}\n##### HTTP authentication\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080/_status/vars\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nCockroachDB with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:8080/_status/vars\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080/_status/vars\n\n - name: remote\n url: http://203.0.113.10:8080/_status/vars\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `cockroachdb` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m cockroachdb\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ cockroachdb_used_storage_capacity ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cockroachdb.conf) | cockroachdb.storage_used_capacity_percentage | storage capacity utilization |\n| [ cockroachdb_used_usable_storage_capacity ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cockroachdb.conf) | cockroachdb.storage_used_capacity_percentage | storage usable space utilization |\n| [ cockroachdb_unavailable_ranges ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cockroachdb.conf) | cockroachdb.ranges_replication_problem | number of ranges with fewer live replicas than needed for quorum |\n| [ cockroachdb_underreplicated_ranges ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cockroachdb.conf) | cockroachdb.ranges_replication_problem | number of ranges with fewer live replicas than the replication target |\n| [ cockroachdb_open_file_descriptors_limit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cockroachdb.conf) | cockroachdb.process_file_descriptors | open file descriptors utilization (against softlimit) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per CockroachDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cockroachdb.process_cpu_time_combined_percentage | used | percentage |\n| cockroachdb.process_cpu_time_percentage | user, sys | percentage |\n| cockroachdb.process_cpu_time | user, sys | ms |\n| cockroachdb.process_memory | rss | KiB |\n| cockroachdb.process_file_descriptors | open | fd |\n| cockroachdb.process_uptime | uptime | seconds |\n| cockroachdb.host_disk_bandwidth | read, write | KiB |\n| cockroachdb.host_disk_operations | reads, writes | operations |\n| cockroachdb.host_disk_iops_in_progress | in_progress | iops |\n| cockroachdb.host_network_bandwidth | received, sent | kilobits |\n| cockroachdb.host_network_packets | received, sent | packets |\n| cockroachdb.live_nodes | live_nodes | nodes |\n| cockroachdb.node_liveness_heartbeats | successful, failed | heartbeats |\n| cockroachdb.total_storage_capacity | total | KiB |\n| cockroachdb.storage_capacity_usability | usable, unusable | KiB |\n| cockroachdb.storage_usable_capacity | available, used | KiB |\n| cockroachdb.storage_used_capacity_percentage | total, usable | percentage |\n| cockroachdb.sql_connections | active | connections |\n| cockroachdb.sql_bandwidth | received, sent | KiB |\n| cockroachdb.sql_statements_total | started, executed | statements |\n| cockroachdb.sql_errors | statement, transaction | errors |\n| cockroachdb.sql_started_ddl_statements | ddl | statements |\n| cockroachdb.sql_executed_ddl_statements | ddl | statements |\n| cockroachdb.sql_started_dml_statements | select, update, delete, insert | statements |\n| cockroachdb.sql_executed_dml_statements | select, update, delete, insert | statements |\n| cockroachdb.sql_started_tcl_statements | begin, commit, rollback, savepoint, savepoint_cockroach_restart, release_savepoint_cockroach_restart, rollback_to_savepoint_cockroach_restart | statements |\n| cockroachdb.sql_executed_tcl_statements | begin, commit, rollback, savepoint, savepoint_cockroach_restart, release_savepoint_cockroach_restart, rollback_to_savepoint_cockroach_restart | statements |\n| cockroachdb.sql_active_distributed_queries | active | queries |\n| cockroachdb.sql_distributed_flows | active, queued | flows |\n| cockroachdb.live_bytes | applications, system | KiB |\n| cockroachdb.logical_data | keys, values | KiB |\n| cockroachdb.logical_data_count | keys, values | num |\n| cockroachdb.kv_transactions | committed, fast-path_committed, aborted | transactions |\n| cockroachdb.kv_transaction_restarts | write_too_old, write_too_old_multiple, forwarded_timestamp, possible_reply, async_consensus_failure, read_within_uncertainty_interval, aborted, push_failure, unknown | restarts |\n| cockroachdb.ranges | ranges | ranges |\n| cockroachdb.ranges_replication_problem | unavailable, under_replicated, over_replicated | ranges |\n| cockroachdb.range_events | split, add, remove, merge | events |\n| cockroachdb.range_snapshot_events | generated, applied_raft_initiated, applied_learner, applied_preemptive | events |\n| cockroachdb.rocksdb_read_amplification | reads | reads/query |\n| cockroachdb.rocksdb_table_operations | compactions, flushes | operations |\n| cockroachdb.rocksdb_cache_usage | used | KiB |\n| cockroachdb.rocksdb_cache_operations | hits, misses | operations |\n| cockroachdb.rocksdb_cache_hit_rate | hit_rate | percentage |\n| cockroachdb.rocksdb_sstables | sstables | sstables |\n| cockroachdb.replicas | replicas | replicas |\n| cockroachdb.replicas_quiescence | quiescent, active | replicas |\n| cockroachdb.replicas_leaders | leaders, not_leaseholders | replicas |\n| cockroachdb.replicas_leaseholders | leaseholders | leaseholders |\n| cockroachdb.queue_processing_failures | gc, replica_gc, replication, split, consistency, raft_log, raft_snapshot, time_series_maintenance | failures |\n| cockroachdb.rebalancing_queries | avg | queries/s |\n| cockroachdb.rebalancing_writes | avg | writes/s |\n| cockroachdb.timeseries_samples | written | samples |\n| cockroachdb.timeseries_write_errors | write | errors |\n| cockroachdb.timeseries_write_bytes | written | KiB |\n| cockroachdb.slow_requests | acquiring_latches, acquiring_lease, in_raft | requests |\n| cockroachdb.code_heap_memory_usage | go, cgo | KiB |\n| cockroachdb.goroutines | goroutines | goroutines |\n| cockroachdb.gc_count | gc | invokes |\n| cockroachdb.gc_pause | pause | us |\n| cockroachdb.cgo_calls | cgo | calls |\n\n",integration_type:"collector",id:"go.d.plugin-cockroachdb-CockroachDB",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/cockroachdb/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-consul",plugin_name:"go.d.plugin",module_name:"consul",monitored_instance:{name:"Consul",link:"https://www.consul.io/",categories:["data-collection.service-discovery-registry"],icon_filename:"consul.svg"},alternative_monitored_instances:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["service networking platform","hashicorp"],most_popular:!0},overview:"# Consul\n\nPlugin: go.d.plugin\nModule: consul\n\n## Overview\n\nThis collector monitors [key metrics](https://developer.hashicorp.com/consul/docs/agent/telemetry#key-metrics) of Consul Agents: transaction timings, leadership changes, memory usage and more.\n\n\nIt periodically sends HTTP requests to [Consul REST API](https://developer.hashicorp.com/consul/api-docs).\n\nUsed endpoints:\n\n- [/operator/autopilot/health](https://developer.hashicorp.com/consul/api-docs/operator/autopilot#read-health)\n- [/agent/checks](https://developer.hashicorp.com/consul/api-docs/agent/check#list-checks)\n- [/agent/self](https://developer.hashicorp.com/consul/api-docs/agent#read-configuration)\n- [/agent/metrics](https://developer.hashicorp.com/consul/api-docs/agent#view-metrics)\n- [/coordinate/nodes](https://developer.hashicorp.com/consul/api-docs/coordinate#read-lan-coordinates-for-all-nodes)\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis collector discovers instances running on the local host, that provide metrics on port 8500.\n\nOn startup, it tries to collect metrics from:\n\n- http://localhost:8500\n- http://127.0.0.1:8500\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable Prometheus telemetry\n\n[Enable](https://developer.hashicorp.com/consul/docs/agent/config/config-files#telemetry-prometheus_retention_time) telemetry on your Consul agent, by increasing the value of `prometheus_retention_time` from `0`.\n\n\n#### Add required ACLs to Token\n\nRequired **only if authentication is enabled**.\n\n| ACL | Endpoint |\n|:---------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `operator:read` | [autopilot health status](https://developer.hashicorp.com/consul/api-docs/operator/autopilot#read-health) |\n| `node:read` | [checks](https://developer.hashicorp.com/consul/api-docs/agent/check#list-checks) |\n| `agent:read` | [configuration](https://developer.hashicorp.com/consul/api-docs/agent#read-configuration), [metrics](https://developer.hashicorp.com/consul/api-docs/agent#view-metrics), and [lan coordinates](https://developer.hashicorp.com/consul/api-docs/coordinate#read-lan-coordinates-for-all-nodes) |\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/consul.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/consul.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="All options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://localhost:8500 | yes |\n| acl_token | ACL token used in every request. | | no |\n| max_checks | Checks processing/charting limit. | | no |\n| max_filter | Checks processing/charting filter. Uses [simple patterns](/src/libnetdata/simple_pattern/README.md). | | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 1 | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8500\n acl_token: "ec15675e-2999-d789-832e-8c4794daa8d7"\n\n```\n##### Basic HTTP auth\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8500\n acl_token: "ec15675e-2999-d789-832e-8c4794daa8d7"\n username: foo\n password: bar\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8500\n acl_token: "ec15675e-2999-d789-832e-8c4794daa8d7"\n\n - name: remote\n url: http://203.0.113.10:8500\n acl_token: "ada7f751-f654-8872-7f93-498e799158b6"\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `consul` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m consul\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ consul_node_health_check_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.node_health_check_status | node health check ${label:check_name} has failed on server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_service_health_check_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.service_health_check_status | service health check ${label:check_name} for service ${label:service_name} has failed on server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_client_rpc_requests_exceeded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.client_rpc_requests_exceeded_rate | number of rate-limited RPC requests made by server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_client_rpc_requests_failed ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.client_rpc_requests_failed_rate | number of failed RPC requests made by server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_gc_pause_time ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.gc_pause_time | time spent in stop-the-world garbage collection pauses on server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_autopilot_health_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.autopilot_health_status | datacenter ${label:datacenter} cluster is unhealthy as reported by server ${label:node_name} |\n| [ consul_autopilot_server_health_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.autopilot_server_health_status | server ${label:node_name} from datacenter ${label:datacenter} is unhealthy |\n| [ consul_raft_leader_last_contact_time ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.raft_leader_last_contact_time | median time elapsed since leader server ${label:node_name} datacenter ${label:datacenter} was last able to contact the follower nodes |\n| [ consul_raft_leadership_transitions ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.raft_leadership_transitions_rate | there has been a leadership change and server ${label:node_name} datacenter ${label:datacenter} has become the leader |\n| [ consul_raft_thread_main_saturation ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.raft_thread_main_saturation_perc | average saturation of the main Raft goroutine on server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_raft_thread_fsm_saturation ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.raft_thread_fsm_saturation_perc | average saturation of the FSM Raft goroutine on server ${label:node_name} datacenter ${label:datacenter} |\n| [ consul_license_expiration_time ](https://github.com/netdata/netdata/blob/master/src/health/health.d/consul.conf) | consul.license_expiration_time | Consul Enterprise licence expiration time on node ${label:node_name} datacenter ${label:datacenter} |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe set of metrics depends on the [Consul Agent mode](https://developer.hashicorp.com/consul/docs/install/glossary#agent).\n\n\n### Per Consul instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | Leader | Follower | Client |\n|:------|:----------|:----|:---:|:---:|:---:|\n| consul.client_rpc_requests_rate | rpc | requests/s | \u2022 | \u2022 | \u2022 |\n| consul.client_rpc_requests_exceeded_rate | exceeded | requests/s | \u2022 | \u2022 | \u2022 |\n| consul.client_rpc_requests_failed_rate | failed | requests/s | \u2022 | \u2022 | \u2022 |\n| consul.memory_allocated | allocated | bytes | \u2022 | \u2022 | \u2022 |\n| consul.memory_sys | sys | bytes | \u2022 | \u2022 | \u2022 |\n| consul.gc_pause_time | gc_pause | seconds | \u2022 | \u2022 | \u2022 |\n| consul.kvs_apply_time | quantile_0.5, quantile_0.9, quantile_0.99 | ms | \u2022 | \u2022 | |\n| consul.kvs_apply_operations_rate | kvs_apply | ops/s | \u2022 | \u2022 | |\n| consul.txn_apply_time | quantile_0.5, quantile_0.9, quantile_0.99 | ms | \u2022 | \u2022 | |\n| consul.txn_apply_operations_rate | txn_apply | ops/s | \u2022 | \u2022 | |\n| consul.autopilot_health_status | healthy, unhealthy | status | \u2022 | \u2022 | |\n| consul.autopilot_failure_tolerance | failure_tolerance | servers | \u2022 | \u2022 | |\n| consul.autopilot_server_health_status | healthy, unhealthy | status | \u2022 | \u2022 | |\n| consul.autopilot_server_stable_time | stable | seconds | \u2022 | \u2022 | |\n| consul.autopilot_server_serf_status | active, failed, left, none | status | \u2022 | \u2022 | |\n| consul.autopilot_server_voter_status | voter, not_voter | status | \u2022 | \u2022 | |\n| consul.network_lan_rtt | min, max, avg | ms | \u2022 | \u2022 | |\n| consul.raft_commit_time | quantile_0.5, quantile_0.9, quantile_0.99 | ms | \u2022 | | |\n| consul.raft_commits_rate | commits | commits/s | \u2022 | | |\n| consul.raft_leader_last_contact_time | quantile_0.5, quantile_0.9, quantile_0.99 | ms | \u2022 | | |\n| consul.raft_leader_oldest_log_age | oldest_log_age | seconds | \u2022 | | |\n| consul.raft_follower_last_contact_leader_time | leader_last_contact | ms | | \u2022 | |\n| consul.raft_rpc_install_snapshot_time | quantile_0.5, quantile_0.9, quantile_0.99 | ms | | \u2022 | |\n| consul.raft_leader_elections_rate | leader | elections/s | \u2022 | \u2022 | |\n| consul.raft_leadership_transitions_rate | leadership | transitions/s | \u2022 | \u2022 | |\n| consul.server_leadership_status | leader, not_leader | status | \u2022 | \u2022 | |\n| consul.raft_thread_main_saturation_perc | quantile_0.5, quantile_0.9, quantile_0.99 | percentage | \u2022 | \u2022 | |\n| consul.raft_thread_fsm_saturation_perc | quantile_0.5, quantile_0.9, quantile_0.99 | percentage | \u2022 | \u2022 | |\n| consul.raft_fsm_last_restore_duration | last_restore_duration | ms | \u2022 | \u2022 | |\n| consul.raft_boltdb_freelist_bytes | freelist | bytes | \u2022 | \u2022 | |\n| consul.raft_boltdb_logs_per_batch_rate | written | logs/s | \u2022 | \u2022 | |\n| consul.raft_boltdb_store_logs_time | quantile_0.5, quantile_0.9, quantile_0.99 | ms | \u2022 | \u2022 | |\n| consul.license_expiration_time | license_expiration | seconds | \u2022 | \u2022 | \u2022 |\n\n### Per node check\n\nMetrics about checks on Node level.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| datacenter | Datacenter Identifier |\n| node_name | The node's name |\n| check_name | The check's name |\n\nMetrics:\n\n| Metric | Dimensions | Unit | Leader | Follower | Client |\n|:------|:----------|:----|:---:|:---:|:---:|\n| consul.node_health_check_status | passing, maintenance, warning, critical | status | \u2022 | \u2022 | \u2022 |\n\n### Per service check\n\nMetrics about checks at a Service level.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| datacenter | Datacenter Identifier |\n| node_name | The node's name |\n| check_name | The check's name |\n| service_name | The service's name |\n\nMetrics:\n\n| Metric | Dimensions | Unit | Leader | Follower | Client |\n|:------|:----------|:----|:---:|:---:|:---:|\n| consul.service_health_check_status | passing, maintenance, warning, critical | status | \u2022 | \u2022 | \u2022 |\n\n",integration_type:"collector",id:"go.d.plugin-consul-Consul",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/consul/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-coredns",plugin_name:"go.d.plugin",module_name:"coredns",monitored_instance:{name:"CoreDNS",link:"https://coredns.io/",icon_filename:"coredns.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["coredns","dns","kubernetes"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# CoreDNS\n\nPlugin: go.d.plugin\nModule: coredns\n\n## Overview\n\nThis collector monitors CoreDNS instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/coredns.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/coredns.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="All options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9153/metrics | yes |\n| per_server_stats | Server filter. | | no |\n| per_zone_stats | Zone filter. | | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 2 | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n##### per_server_stats\n\nMetrics of servers matching the selector will be collected.\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [matcher](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/matcher#supported-format).\n- Syntax:\n\n```yaml\nper_server_stats:\n includes:\n - pattern1\n - pattern2\n excludes:\n - pattern3\n - pattern4\n```\n\n\n##### per_zone_stats\n\nMetrics of zones matching the selector will be collected.\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [matcher](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/matcher#supported-format).\n- Syntax:\n\n```yaml\nper_zone_stats:\n includes:\n - pattern1\n - pattern2\n excludes:\n - pattern3\n - pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9153/metrics\n\n```\n{% /details %}\n##### Basic HTTP auth\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9153/metrics\n username: foo\n password: bar\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9153/metrics\n\n - name: remote\n url: http://203.0.113.10:9153/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `coredns` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m coredns\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per CoreDNS instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| coredns.dns_request_count_total | requests | requests/s |\n| coredns.dns_responses_count_total | responses | responses/s |\n| coredns.dns_request_count_total_per_status | processed, dropped | requests/s |\n| coredns.dns_no_matching_zone_dropped_total | dropped | requests/s |\n| coredns.dns_panic_count_total | panics | panics/s |\n| coredns.dns_requests_count_total_per_proto | udp, tcp | requests/s |\n| coredns.dns_requests_count_total_per_ip_family | v4, v6 | requests/s |\n| coredns.dns_requests_count_total_per_per_type | a, aaaa, mx, soa, cname, ptr, txt, ns, ds, dnskey, rrsig, nsec, nsec3, ixfr, any, other | requests/s |\n| coredns.dns_responses_count_total_per_rcode | noerror, formerr, servfail, nxdomain, notimp, refused, yxdomain, yxrrset, nxrrset, notauth, notzone, badsig, badkey, badtime, badmode, badname, badalg, badtrunc, badcookie, other | responses/s |\n\n### Per server\n\nThese metrics refer to the DNS server.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| server_name | Server name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| coredns.server_dns_request_count_total | requests | requests/s |\n| coredns.server_dns_responses_count_total | responses | responses/s |\n| coredns.server_request_count_total_per_status | processed, dropped | requests/s |\n| coredns.server_requests_count_total_per_proto | udp, tcp | requests/s |\n| coredns.server_requests_count_total_per_ip_family | v4, v6 | requests/s |\n| coredns.server_requests_count_total_per_per_type | a, aaaa, mx, soa, cname, ptr, txt, ns, ds, dnskey, rrsig, nsec, nsec3, ixfr, any, other | requests/s |\n| coredns.server_responses_count_total_per_rcode | noerror, formerr, servfail, nxdomain, notimp, refused, yxdomain, yxrrset, nxrrset, notauth, notzone, badsig, badkey, badtime, badmode, badname, badalg, badtrunc, badcookie, other | responses/s |\n\n### Per zone\n\nThese metrics refer to the DNS zone.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| zone_name | Zone name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| coredns.zone_dns_request_count_total | requests | requests/s |\n| coredns.zone_dns_responses_count_total | responses | responses/s |\n| coredns.zone_requests_count_total_per_proto | udp, tcp | requests/s |\n| coredns.zone_requests_count_total_per_ip_family | v4, v6 | requests/s |\n| coredns.zone_requests_count_total_per_per_type | a, aaaa, mx, soa, cname, ptr, txt, ns, ds, dnskey, rrsig, nsec, nsec3, ixfr, any, other | requests/s |\n| coredns.zone_responses_count_total_per_rcode | noerror, formerr, servfail, nxdomain, notimp, refused, yxdomain, yxrrset, nxrrset, notauth, notzone, badsig, badkey, badtime, badmode, badname, badalg, badtrunc, badcookie, other | responses/s |\n\n",integration_type:"collector",id:"go.d.plugin-coredns-CoreDNS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/coredns/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-couchbase",plugin_name:"go.d.plugin",module_name:"couchbase",monitored_instance:{name:"Couchbase",link:"https://www.couchbase.com/",icon_filename:"couchbase.svg",categories:["data-collection.database-servers"]},keywords:["couchbase","databases"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Couchbase\n\nPlugin: go.d.plugin\nModule: couchbase\n\n## Overview\n\nThis collector monitors Couchbase servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/couchbase.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/couchbase.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="All options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8091 | yes |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 2 | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8091\n\n```\n{% /details %}\n##### Basic HTTP auth\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8091\n username: foo\n password: bar\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8091\n\n - name: remote\n url: http://203.0.113.0:8091\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `couchbase` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m couchbase\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Couchbase instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| couchbase.bucket_quota_percent_used | a dimension per bucket | percentage |\n| couchbase.bucket_ops_per_sec | a dimension per bucket | ops/s |\n| couchbase.bucket_disk_fetches | a dimension per bucket | fetches |\n| couchbase.bucket_item_count | a dimension per bucket | items |\n| couchbase.bucket_disk_used_stats | a dimension per bucket | bytes |\n| couchbase.bucket_data_used | a dimension per bucket | bytes |\n| couchbase.bucket_mem_used | a dimension per bucket | bytes |\n| couchbase.bucket_vb_active_num_non_resident | a dimension per bucket | items |\n\n",integration_type:"collector",id:"go.d.plugin-couchbase-Couchbase",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/couchbase/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-couchdb",plugin_name:"go.d.plugin",module_name:"couchdb",monitored_instance:{name:"CouchDB",link:"https://couchdb.apache.org/",icon_filename:"couchdb.svg",categories:["data-collection.database-servers"]},keywords:["couchdb","databases"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# CouchDB\n\nPlugin: go.d.plugin\nModule: couchdb\n\n## Overview\n\nThis collector monitors CouchDB servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/couchdb.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/couchdb.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:5984 | yes |\n| node | CouchDB node name. Same as -name vm.args argument. | _local | no |\n| databases | List of database names for which db-specific stats should be displayed, space separated. | | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 2 | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:5984\n\n```\n{% /details %}\n##### Basic HTTP auth\n\nLocal server with basic HTTP authentication, node name and multiple databases defined. Make sure to match the node name with the `NODENAME` value in your CouchDB\'s `etc/vm.args` file. Typically, this is of the form `couchdb@fully.qualified.domain.name` in a cluster, or `couchdb@127.0.0.1` for a single-node server.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:5984\n node: couchdb@127.0.0.1\n databases: my-db other-db\n username: foo\n password: bar\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:5984\n\n - name: remote\n url: http://203.0.113.0:5984\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `couchdb` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m couchdb\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per CouchDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| couchdb.activity | db_reads, db_writes, view_reads | requests/s |\n| couchdb.request_methods | copy, delete, get, head, options, post, put | requests/s |\n| couchdb.response_codes | 200, 201, 202, 204, 206, 301, 302, 304, 400, 401, 403, 404, 406, 409, 412, 413, 414, 415, 416, 417, 500, 501, 503 | responses/s |\n| couchdb.response_code_classes | 2xx, 3xx, 4xx, 5xx | responses/s |\n| couchdb.active_tasks | indexer, db_compaction, replication, view_compaction | tasks |\n| couchdb.replicator_jobs | running, pending, crashed, internal_replication_jobs | jobs |\n| couchdb.open_files | files | files |\n| couchdb.erlang_vm_memory | atom, binaries, code, ets, procs, other | B |\n| couchdb.proccounts | os_procs, erl_procs | processes |\n| couchdb.peakmsgqueue | peak_size | messages |\n| couchdb.reductions | reductions | reductions |\n| couchdb.db_sizes_file | a dimension per database | KiB |\n| couchdb.db_sizes_external | a dimension per database | KiB |\n| couchdb.db_sizes_active | a dimension per database | KiB |\n| couchdb.db_doc_count | a dimension per database | docs |\n| couchdb.db_doc_del_count | a dimension per database | docs |\n\n",integration_type:"collector",id:"go.d.plugin-couchdb-CouchDB",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/couchdb/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-dns_query",plugin_name:"go.d.plugin",module_name:"dns_query",monitored_instance:{name:"DNS query",link:"",icon_filename:"network-wired.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["dns"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# DNS query\n\nPlugin: go.d.plugin\nModule: dns_query\n\n## Overview\n\nThis module monitors DNS query round-trip time (RTT).\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/dns_query.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/dns_query.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="All options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| domains | Domain or subdomains to query. The collector will choose a random domain from the list on every iteration. | | yes |\n| servers | Servers to query. | | yes |\n| port | DNS server port. | 53 | no |\n| network | Network protocol name. Available options: udp, tcp, tcp-tls. | udp | no |\n| record_types | Query record type. Available options: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, TXT, SRV. | A | no |\n| timeout | Query read timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: job1\n record_types:\n - A\n - AAAA\n domains:\n - google.com\n - github.com\n - reddit.com\n servers:\n - 8.8.8.8\n - 8.8.4.4\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `dns_query` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m dns_query\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ dns_query_query_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/dns_query.conf) | dns_query.query_status | DNS request type ${label:record_type} to server ${label:server} is unsuccessful |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per server\n\nThese metrics refer to the DNS server.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| server | DNS server address. |\n| network | Network protocol name (tcp, udp, tcp-tls). |\n| record_type | DNS record type (e.g. A, AAAA, CNAME). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dns_query.query_status | success, network_error, dns_error | status |\n| dns_query.query_time | query_time | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-dns_query-DNS_query",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/dnsquery/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-dnsdist",plugin_name:"go.d.plugin",module_name:"dnsdist",monitored_instance:{name:"DNSdist",link:"https://dnsdist.org/",icon_filename:"network-wired.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["dnsdist","dns"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# DNSdist\n\nPlugin: go.d.plugin\nModule: dnsdist\n\n## Overview\n\nThis collector monitors DNSDist servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable DNSdist built-in Webserver\n\nFor collecting metrics via HTTP, you need to [enable the built-in webserver](https://dnsdist.org/guides/webserver.html).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/dnsdist.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/dnsdist.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8083 | yes |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 1 | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8083\n headers:\n X-API-Key: your-api-key # static pre-shared authentication key for access to the REST API (api-key).\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8083\n headers:\n X-API-Key: \'your-api-key\' # static pre-shared authentication key for access to the REST API (api-key).\n\n - name: remote\n url: http://203.0.113.0:8083\n headers:\n X-API-Key: \'your-api-key\'\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `dnsdist` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m dnsdist\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per DNSdist instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dnsdist.queries | all, recursive, empty | queries/s |\n| dnsdist.queries_dropped | rule_drop, dynamic_blocked, no_policy, non_queries | queries/s |\n| dnsdist.packets_dropped | acl | packets/s |\n| dnsdist.answers | self_answered, nxdomain, refused, trunc_failures | answers/s |\n| dnsdist.backend_responses | responses | responses/s |\n| dnsdist.backend_commerrors | send_errors | errors/s |\n| dnsdist.backend_errors | timeouts, servfail, non_compliant | responses/s |\n| dnsdist.cache | hits, misses | answers/s |\n| dnsdist.servercpu | system_state, user_state | ms/s |\n| dnsdist.servermem | memory_usage | MiB |\n| dnsdist.query_latency | 1ms, 10ms, 50ms, 100ms, 1sec, slow | queries/s |\n| dnsdist.query_latency_avg | 100, 1k, 10k, 1000k | microseconds |\n\n",integration_type:"collector",id:"go.d.plugin-dnsdist-DNSdist",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/dnsdist/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-dnsmasq",plugin_name:"go.d.plugin",module_name:"dnsmasq",monitored_instance:{name:"Dnsmasq",link:"https://thekelleys.org.uk/dnsmasq/doc.html",icon_filename:"dnsmasq.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["dnsmasq","dns"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Dnsmasq\n\nPlugin: go.d.plugin\nModule: dnsmasq\n\n## Overview\n\nThis collector monitors Dnsmasq servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/dnsmasq.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/dnsmasq.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address in `ip:port` format. | 127.0.0.1:53 | yes |\n| protocol | DNS query transport protocol. Supported protocols: udp, tcp, tcp-tls. | udp | no |\n| timeout | DNS query timeout (dial, write and read) in seconds. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:53\n\n```\n{% /details %}\n##### Using TCP protocol\n\nLocal server with specific DNS query transport protocol.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:53\n protocol: tcp\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:53\n\n - name: remote\n address: 203.0.113.0:53\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `dnsmasq` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m dnsmasq\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Dnsmasq instance\n\nThe metrics apply to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dnsmasq.servers_queries | success, failed | queries/s |\n| dnsmasq.cache_performance | hist, misses | events/s |\n| dnsmasq.cache_operations | insertions, evictions | operations/s |\n| dnsmasq.cache_size | size | entries |\n\n",integration_type:"collector",id:"go.d.plugin-dnsmasq-Dnsmasq",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/dnsmasq/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-dnsmasq_dhcp",plugin_name:"go.d.plugin",module_name:"dnsmasq_dhcp",monitored_instance:{name:"Dnsmasq DHCP",link:"https://www.thekelleys.org.uk/dnsmasq/doc.html",icon_filename:"dnsmasq.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["dnsmasq","dhcp"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Dnsmasq DHCP\n\nPlugin: go.d.plugin\nModule: dnsmasq_dhcp\n\n## Overview\n\nThis collector monitors Dnsmasq DHCP leases databases, depending on your configuration.\n\nBy default, it uses:\n\n- `/var/lib/misc/dnsmasq.leases` to read leases.\n- `/etc/dnsmasq.conf` to detect dhcp-ranges.\n- `/etc/dnsmasq.d` to find additional configurations.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAll configured dhcp-ranges are detected automatically\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/dnsmasq_dhcp.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/dnsmasq_dhcp.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| leases_path | Path to dnsmasq DHCP leases file. | /var/lib/misc/dnsmasq.leases | no |\n| conf_path | Path to dnsmasq configuration file. | /etc/dnsmasq.conf | no |\n| conf_dir | Path to dnsmasq configuration directory. | /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: dnsmasq_dhcp\n leases_path: /var/lib/misc/dnsmasq.leases\n conf_path: /etc/dnsmasq.conf\n conf_dir: /etc/dnsmasq.d\n\n```\n{% /details %}\n##### Pi-hole\n\nDnsmasq DHCP on Pi-hole.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: dnsmasq_dhcp\n leases_path: /etc/pihole/dhcp.leases\n conf_path: /etc/dnsmasq.conf\n conf_dir: /etc/dnsmasq.d\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `dnsmasq_dhcp` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m dnsmasq_dhcp\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ dnsmasq_dhcp_dhcp_range_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/dnsmasq_dhcp.conf) | dnsmasq_dhcp.dhcp_range_utilization | DHCP range utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Dnsmasq DHCP instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dnsmasq_dhcp.dhcp_ranges | ipv4, ipv6 | ranges |\n| dnsmasq_dhcp.dhcp_hosts | ipv4, ipv6 | hosts |\n\n### Per dhcp range\n\nThese metrics refer to the DHCP range.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| dhcp_range | DHCP range in `START_IP:END_IP` format |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dnsmasq_dhcp.dhcp_range_utilization | used | percentage |\n| dnsmasq_dhcp.dhcp_range_allocated_leases | allocated | leases |\n\n",integration_type:"collector",id:"go.d.plugin-dnsmasq_dhcp-Dnsmasq_DHCP",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/dnsmasq_dhcp/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-docker",plugin_name:"go.d.plugin",module_name:"docker",alternative_monitored_instances:[],monitored_instance:{name:"Docker",link:"https://www.docker.com/",categories:["data-collection.containers-and-vms"],icon_filename:"docker.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["container"],most_popular:!0},overview:"# Docker\n\nPlugin: go.d.plugin\nModule: docker\n\n## Overview\n\nThis collector monitors Docker containers state, health status and more.\n\n\nIt connects to the Docker instance via a TCP or UNIX socket and executes the following commands:\n\n- [System info](https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemInfo).\n- [List images](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageList).\n- [List containers](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerList).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nRequires netdata user to be in the docker group.\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt discovers instances running on localhost by attempting to connect to a known Docker UNIX socket: `/var/run/docker.sock`.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nEnabling `collect_container_size` may result in high CPU usage depending on the version of Docker Engine.\n\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/docker.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/docker.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Docker daemon's listening address. When using a TCP socket, the format is: tcp://[ip]:[port] | unix:///var/run/docker.sock | yes |\n| timeout | Request timeout in seconds. | 2 | no |\n| collect_container_size | Whether to collect container writable layer size. | no | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n```yaml\njobs:\n - name: local\n address: 'unix:///var/run/docker.sock'\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'unix:///var/run/docker.sock'\n\n - name: remote\n address: 'tcp://203.0.113.10:2375'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `docker` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m docker\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ docker_container_unhealthy ](https://github.com/netdata/netdata/blob/master/src/health/health.d/docker.conf) | docker.container_health_status | ${label:container_name} docker container health status is unhealthy |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Docker instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| docker.containers_state | running, paused, stopped | containers |\n| docker.containers_health_status | healthy, unhealthy, not_running_unhealthy, starting, no_healthcheck | containers |\n| docker.images | active, dangling | images |\n| docker.images_size | size | bytes |\n\n### Per container\n\nMetrics related to containers. Each container provides its own set of the following metrics.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| container_name | The container's name |\n| image | The image name the container uses |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| docker.container_state | running, paused, exited, created, restarting, removing, dead | state |\n| docker.container_health_status | healthy, unhealthy, not_running_unhealthy, starting, no_healthcheck | status |\n| docker.container_writeable_layer_size | writeable_layer | size |\n\n",integration_type:"collector",id:"go.d.plugin-docker-Docker",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/docker/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-docker_engine",plugin_name:"go.d.plugin",module_name:"docker_engine",alternative_monitored_instances:[],monitored_instance:{name:"Docker Engine",link:"https://docs.docker.com/engine/",categories:["data-collection.containers-and-vms"],icon_filename:"docker.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["docker","container"],most_popular:!1},overview:"# Docker Engine\n\nPlugin: go.d.plugin\nModule: docker_engine\n\n## Overview\n\nThis collector monitors the activity and health of Docker Engine and Docker Swarm.\n\n\nThe [built-in](https://docs.docker.com/config/daemon/prometheus/) Prometheus exporter is used to get the metrics.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt discovers instances running on localhost by attempting to connect to a known Docker TCP socket: `http://127.0.0.1:9323/metrics`.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable built-in Prometheus exporter\n\nTo enable built-in Prometheus exporter, follow the [official documentation](https://docs.docker.com/config/daemon/prometheus/#configure-docker).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/docker_engine.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/docker_engine.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9323/metrics | yes |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| timeout | HTTP request timeout. | 1 | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9323/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9323/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nConfiguration with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9323/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9323/metrics\n\n - name: remote\n url: http://192.0.2.1:9323/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `docker_engine` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m docker_engine\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Docker Engine instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| docker_engine.engine_daemon_container_actions | changes, commit, create, delete, start | actions/s |\n| docker_engine.engine_daemon_container_states_containers | running, paused, stopped | containers |\n| docker_engine.builder_builds_failed_total | build_canceled, build_target_not_reachable_error, command_not_supported_error, dockerfile_empty_error, dockerfile_syntax_error, error_processing_commands_error, missing_onbuild_arguments_error, unknown_instruction_error | fails/s |\n| docker_engine.engine_daemon_health_checks_failed_total | fails | events/s |\n| docker_engine.swarm_manager_leader | is_leader | bool |\n| docker_engine.swarm_manager_object_store | nodes, services, tasks, networks, secrets, configs | objects |\n| docker_engine.swarm_manager_nodes_per_state | ready, down, unknown, disconnected | nodes |\n| docker_engine.swarm_manager_tasks_per_state | running, failed, ready, rejected, starting, shutdown, new, orphaned, preparing, pending, complete, remove, accepted, assigned | tasks |\n\n",integration_type:"collector",id:"go.d.plugin-docker_engine-Docker_Engine",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/docker_engine/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-dockerhub",plugin_name:"go.d.plugin",module_name:"dockerhub",monitored_instance:{name:"Docker Hub repository",link:"https://hub.docker.com/",icon_filename:"docker.svg",categories:["data-collection.containers-and-vms"]},keywords:["dockerhub"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Docker Hub repository\n\nPlugin: go.d.plugin\nModule: dockerhub\n\n## Overview\n\nThis collector keeps track of DockerHub repositories statistics such as the number of stars, pulls, current status, and more.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/dockerhub.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/dockerhub.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | DockerHub URL. | https://hub.docker.com/v2/repositories | yes |\n| repositories | List of repositories to monitor. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: dockerhub\n repositories:\n - 'user1/name1'\n - 'user2/name2'\n - 'user3/name3'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `dockerhub` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m dockerhub\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Docker Hub repository instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dockerhub.pulls_sum | sum | pulls |\n| dockerhub.pulls | a dimension per repository | pulls |\n| dockerhub.pulls_rate | a dimension per repository | pulls/s |\n| dockerhub.stars | a dimension per repository | stars |\n| dockerhub.status | a dimension per repository | status |\n| dockerhub.last_updated | a dimension per repository | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-dockerhub-Docker_Hub_repository",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/dockerhub/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-elasticsearch",module_name:"elasticsearch",plugin_name:"go.d.plugin",monitored_instance:{name:"Elasticsearch",link:"https://www.elastic.co/elasticsearch/",icon_filename:"elasticsearch.svg",categories:["data-collection.search-engines"]},keywords:["elastic","elasticsearch","opensearch","search engine"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Elasticsearch\n\nPlugin: go.d.plugin\nModule: elasticsearch\n\n## Overview\n\nThis collector monitors the performance and health of the Elasticsearch cluster.\n\n\nIt uses [Cluster APIs](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.html) to collect metrics.\n\nUsed endpoints:\n\n| Endpoint | Description | API |\n|------------------------|----------------------|-------------------------------------------------------------------------------------------------------------|\n| `/` | Node info | |\n| `/_nodes/stats` | Nodes metrics | [Nodes stats API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html) |\n| `/_nodes/_local/stats` | Local node metrics | [Nodes stats API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html) |\n| `/_cluster/health` | Cluster health stats | [Cluster health API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html) |\n| `/_cluster/stats` | Cluster metrics | [Cluster stats API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-stats.html) |\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by attempting to connect to port 9200:\n\n- http://127.0.0.1:9200\n- https://127.0.0.1:9200\n\n\n#### Limits\n\nBy default, this collector monitors only the node it is connected to. To monitor all cluster nodes, set the `cluster_mode` configuration option to `yes`.\n\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/elasticsearch.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/elasticsearch.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9200 | yes |\n| cluster_mode | Controls whether to collect metrics for all nodes in the cluster or only for the local node. | false | no |\n| collect_node_stats | Controls whether to collect nodes metrics. | true | no |\n| collect_cluster_health | Controls whether to collect cluster health metrics. | true | no |\n| collect_cluster_stats | Controls whether to collect cluster stats metrics. | true | no |\n| collect_indices_stats | Controls whether to collect indices metrics. | false | no |\n| timeout | HTTP request timeout. | 2 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic single node mode\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n\n```\n##### Cluster mode\n\nCluster mode example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n cluster_mode: yes\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nElasticsearch with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9200\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n\n - name: remote\n url: http://192.0.2.1:9200\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `elasticsearch` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m elasticsearch\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ elasticsearch_node_indices_search_time_query ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.node_indices_search_time | search performance is degraded, queries run slowly. |\n| [ elasticsearch_node_indices_search_time_fetch ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.node_indices_search_time | search performance is degraded, fetches run slowly. |\n| [ elasticsearch_cluster_health_status_red ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.cluster_health_status | cluster health status is red. |\n| [ elasticsearch_cluster_health_status_yellow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.cluster_health_status | cluster health status is yellow. |\n| [ elasticsearch_node_index_health_red ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.node_index_health | node index $label:index health status is red. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per node\n\nThese metrics refer to the cluster node.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cluster_name | Name of the cluster. Based on the [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name). |\n| node_name | Human-readable identifier for the node. Based on the [Node name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#node-name). |\n| host | Network host for the node, based on the [Network host setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#network.host). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| elasticsearch.node_indices_indexing | index | operations/s |\n| elasticsearch.node_indices_indexing_current | index | operations |\n| elasticsearch.node_indices_indexing_time | index | milliseconds |\n| elasticsearch.node_indices_search | queries, fetches | operations/s |\n| elasticsearch.node_indices_search_current | queries, fetches | operations |\n| elasticsearch.node_indices_search_time | queries, fetches | milliseconds |\n| elasticsearch.node_indices_refresh | refresh | operations/s |\n| elasticsearch.node_indices_refresh_time | refresh | milliseconds |\n| elasticsearch.node_indices_flush | flush | operations/s |\n| elasticsearch.node_indices_flush_time | flush | milliseconds |\n| elasticsearch.node_indices_fielddata_memory_usage | used | bytes |\n| elasticsearch.node_indices_fielddata_evictions | evictions | operations/s |\n| elasticsearch.node_indices_segments_count | segments | segments |\n| elasticsearch.node_indices_segments_memory_usage_total | used | bytes |\n| elasticsearch.node_indices_segments_memory_usage | terms, stored_fields, term_vectors, norms, points, doc_values, index_writer, version_map, fixed_bit_set | bytes |\n| elasticsearch.node_indices_translog_operations | total, uncommitted | operations |\n| elasticsearch.node_indices_translog_size | total, uncommitted | bytes |\n| elasticsearch.node_file_descriptors | open | fd |\n| elasticsearch.node_jvm_heap | inuse | percentage |\n| elasticsearch.node_jvm_heap_bytes | committed, used | bytes |\n| elasticsearch.node_jvm_buffer_pools_count | direct, mapped | pools |\n| elasticsearch.node_jvm_buffer_pool_direct_memory | total, used | bytes |\n| elasticsearch.node_jvm_buffer_pool_mapped_memory | total, used | bytes |\n| elasticsearch.node_jvm_gc_count | young, old | gc/s |\n| elasticsearch.node_jvm_gc_time | young, old | milliseconds |\n| elasticsearch.node_thread_pool_queued | generic, search, search_throttled, get, analyze, write, snapshot, warmer, refresh, listener, fetch_shard_started, fetch_shard_store, flush, force_merge, management | threads |\n| elasticsearch.node_thread_pool_rejected | generic, search, search_throttled, get, analyze, write, snapshot, warmer, refresh, listener, fetch_shard_started, fetch_shard_store, flush, force_merge, management | threads |\n| elasticsearch.node_cluster_communication_packets | received, sent | pps |\n| elasticsearch.node_cluster_communication_traffic | received, sent | bytes/s |\n| elasticsearch.node_http_connections | open | connections |\n| elasticsearch.node_breakers_trips | requests, fielddata, in_flight_requests, model_inference, accounting, parent | trips/s |\n\n### Per cluster\n\nThese metrics refer to the cluster.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cluster_name | Name of the cluster. Based on the [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| elasticsearch.cluster_health_status | green, yellow, red | status |\n| elasticsearch.cluster_number_of_nodes | nodes, data_nodes | nodes |\n| elasticsearch.cluster_shards_count | active_primary, active, relocating, initializing, unassigned, delayed_unaasigned | shards |\n| elasticsearch.cluster_pending_tasks | pending | tasks |\n| elasticsearch.cluster_number_of_in_flight_fetch | in_flight_fetch | fetches |\n| elasticsearch.cluster_indices_count | indices | indices |\n| elasticsearch.cluster_indices_shards_count | total, primaries, replication | shards |\n| elasticsearch.cluster_indices_docs_count | docs | docs |\n| elasticsearch.cluster_indices_store_size | size | bytes |\n| elasticsearch.cluster_indices_query_cache | hit, miss | events/s |\n| elasticsearch.cluster_nodes_by_role_count | coordinating_only, data, data_cold, data_content, data_frozen, data_hot, data_warm, ingest, master, ml, remote_cluster_client, voting_only | nodes |\n\n### Per index\n\nThese metrics refer to the index.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cluster_name | Name of the cluster. Based on the [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name). |\n| index | Name of the index. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| elasticsearch.node_index_health | green, yellow, red | status |\n| elasticsearch.node_index_shards_count | shards | shards |\n| elasticsearch.node_index_docs_count | docs | docs |\n| elasticsearch.node_index_store_size | store_size | bytes |\n\n",integration_type:"collector",id:"go.d.plugin-elasticsearch-Elasticsearch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/elasticsearch/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-opensearch",module_name:"elasticsearch",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenSearch",link:"https://opensearch.org/",icon_filename:"opensearch.svg",categories:["data-collection.search-engines"]},keywords:["elastic","elasticsearch","opensearch","search engine"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# OpenSearch\n\nPlugin: go.d.plugin\nModule: elasticsearch\n\n## Overview\n\nThis collector monitors the performance and health of the Elasticsearch cluster.\n\n\nIt uses [Cluster APIs](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.html) to collect metrics.\n\nUsed endpoints:\n\n| Endpoint | Description | API |\n|------------------------|----------------------|-------------------------------------------------------------------------------------------------------------|\n| `/` | Node info | |\n| `/_nodes/stats` | Nodes metrics | [Nodes stats API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html) |\n| `/_nodes/_local/stats` | Local node metrics | [Nodes stats API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-stats.html) |\n| `/_cluster/health` | Cluster health stats | [Cluster health API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html) |\n| `/_cluster/stats` | Cluster metrics | [Cluster stats API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-stats.html) |\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by attempting to connect to port 9200:\n\n- http://127.0.0.1:9200\n- https://127.0.0.1:9200\n\n\n#### Limits\n\nBy default, this collector monitors only the node it is connected to. To monitor all cluster nodes, set the `cluster_mode` configuration option to `yes`.\n\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/elasticsearch.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/elasticsearch.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9200 | yes |\n| cluster_mode | Controls whether to collect metrics for all nodes in the cluster or only for the local node. | false | no |\n| collect_node_stats | Controls whether to collect nodes metrics. | true | no |\n| collect_cluster_health | Controls whether to collect cluster health metrics. | true | no |\n| collect_cluster_stats | Controls whether to collect cluster stats metrics. | true | no |\n| collect_indices_stats | Controls whether to collect indices metrics. | false | no |\n| timeout | HTTP request timeout. | 2 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic single node mode\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n\n```\n##### Cluster mode\n\nCluster mode example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n cluster_mode: yes\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nElasticsearch with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9200\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9200\n\n - name: remote\n url: http://192.0.2.1:9200\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `elasticsearch` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m elasticsearch\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ elasticsearch_node_indices_search_time_query ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.node_indices_search_time | search performance is degraded, queries run slowly. |\n| [ elasticsearch_node_indices_search_time_fetch ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.node_indices_search_time | search performance is degraded, fetches run slowly. |\n| [ elasticsearch_cluster_health_status_red ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.cluster_health_status | cluster health status is red. |\n| [ elasticsearch_cluster_health_status_yellow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.cluster_health_status | cluster health status is yellow. |\n| [ elasticsearch_node_index_health_red ](https://github.com/netdata/netdata/blob/master/src/health/health.d/elasticsearch.conf) | elasticsearch.node_index_health | node index $label:index health status is red. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per node\n\nThese metrics refer to the cluster node.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cluster_name | Name of the cluster. Based on the [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name). |\n| node_name | Human-readable identifier for the node. Based on the [Node name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#node-name). |\n| host | Network host for the node, based on the [Network host setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#network.host). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| elasticsearch.node_indices_indexing | index | operations/s |\n| elasticsearch.node_indices_indexing_current | index | operations |\n| elasticsearch.node_indices_indexing_time | index | milliseconds |\n| elasticsearch.node_indices_search | queries, fetches | operations/s |\n| elasticsearch.node_indices_search_current | queries, fetches | operations |\n| elasticsearch.node_indices_search_time | queries, fetches | milliseconds |\n| elasticsearch.node_indices_refresh | refresh | operations/s |\n| elasticsearch.node_indices_refresh_time | refresh | milliseconds |\n| elasticsearch.node_indices_flush | flush | operations/s |\n| elasticsearch.node_indices_flush_time | flush | milliseconds |\n| elasticsearch.node_indices_fielddata_memory_usage | used | bytes |\n| elasticsearch.node_indices_fielddata_evictions | evictions | operations/s |\n| elasticsearch.node_indices_segments_count | segments | segments |\n| elasticsearch.node_indices_segments_memory_usage_total | used | bytes |\n| elasticsearch.node_indices_segments_memory_usage | terms, stored_fields, term_vectors, norms, points, doc_values, index_writer, version_map, fixed_bit_set | bytes |\n| elasticsearch.node_indices_translog_operations | total, uncommitted | operations |\n| elasticsearch.node_indices_translog_size | total, uncommitted | bytes |\n| elasticsearch.node_file_descriptors | open | fd |\n| elasticsearch.node_jvm_heap | inuse | percentage |\n| elasticsearch.node_jvm_heap_bytes | committed, used | bytes |\n| elasticsearch.node_jvm_buffer_pools_count | direct, mapped | pools |\n| elasticsearch.node_jvm_buffer_pool_direct_memory | total, used | bytes |\n| elasticsearch.node_jvm_buffer_pool_mapped_memory | total, used | bytes |\n| elasticsearch.node_jvm_gc_count | young, old | gc/s |\n| elasticsearch.node_jvm_gc_time | young, old | milliseconds |\n| elasticsearch.node_thread_pool_queued | generic, search, search_throttled, get, analyze, write, snapshot, warmer, refresh, listener, fetch_shard_started, fetch_shard_store, flush, force_merge, management | threads |\n| elasticsearch.node_thread_pool_rejected | generic, search, search_throttled, get, analyze, write, snapshot, warmer, refresh, listener, fetch_shard_started, fetch_shard_store, flush, force_merge, management | threads |\n| elasticsearch.node_cluster_communication_packets | received, sent | pps |\n| elasticsearch.node_cluster_communication_traffic | received, sent | bytes/s |\n| elasticsearch.node_http_connections | open | connections |\n| elasticsearch.node_breakers_trips | requests, fielddata, in_flight_requests, model_inference, accounting, parent | trips/s |\n\n### Per cluster\n\nThese metrics refer to the cluster.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cluster_name | Name of the cluster. Based on the [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| elasticsearch.cluster_health_status | green, yellow, red | status |\n| elasticsearch.cluster_number_of_nodes | nodes, data_nodes | nodes |\n| elasticsearch.cluster_shards_count | active_primary, active, relocating, initializing, unassigned, delayed_unaasigned | shards |\n| elasticsearch.cluster_pending_tasks | pending | tasks |\n| elasticsearch.cluster_number_of_in_flight_fetch | in_flight_fetch | fetches |\n| elasticsearch.cluster_indices_count | indices | indices |\n| elasticsearch.cluster_indices_shards_count | total, primaries, replication | shards |\n| elasticsearch.cluster_indices_docs_count | docs | docs |\n| elasticsearch.cluster_indices_store_size | size | bytes |\n| elasticsearch.cluster_indices_query_cache | hit, miss | events/s |\n| elasticsearch.cluster_nodes_by_role_count | coordinating_only, data, data_cold, data_content, data_frozen, data_hot, data_warm, ingest, master, ml, remote_cluster_client, voting_only | nodes |\n\n### Per index\n\nThese metrics refer to the index.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cluster_name | Name of the cluster. Based on the [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#cluster-name). |\n| index | Name of the index. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| elasticsearch.node_index_health | green, yellow, red | status |\n| elasticsearch.node_index_shards_count | shards | shards |\n| elasticsearch.node_index_docs_count | docs | docs |\n| elasticsearch.node_index_store_size | store_size | bytes |\n\n",integration_type:"collector",id:"go.d.plugin-elasticsearch-OpenSearch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/elasticsearch/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-envoy",plugin_name:"go.d.plugin",module_name:"envoy",monitored_instance:{name:"Envoy",link:"https://www.envoyproxy.io/",icon_filename:"envoy.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["envoy","proxy"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Envoy\n\nPlugin: go.d.plugin\nModule: envoy\n\n## Overview\n\nThis collector monitors Envoy proxies. It collects server, cluster, and listener metrics.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Envoy instances running on localhost.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/envoy.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/envoy.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9091/stats/prometheus | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9901/stats/prometheus\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9901/stats/prometheus\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9901/stats/prometheus\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9901/stats/prometheus\n\n - name: remote\n url: http://192.0.2.1:9901/stats/prometheus\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `envoy` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m envoy\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Envoy instance\n\nEnvoy exposes metrics in Prometheus format. All metric labels are added to charts.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| envoy.server_state | live, draining, pre_initializing, initializing | state |\n| envoy.server_connections_count | connections | connections |\n| envoy.server_parent_connections_count | connections | connections |\n| envoy.server_memory_allocated_size | allocated | bytes |\n| envoy.server_memory_heap_size | heap | bytes |\n| envoy.server_memory_physical_size | physical | bytes |\n| envoy.server_uptime | uptime | seconds |\n| envoy.cluster_manager_cluster_count | active, not_active | clusters |\n| envoy.cluster_manager_cluster_changes_rate | added, modified, removed | clusters/s |\n| envoy.cluster_manager_cluster_updates_rate | cluster | updates/s |\n| envoy.cluster_manager_cluster_updated_via_merge_rate | via_merge | updates/s |\n| envoy.cluster_manager_update_merge_cancelled_rate | merge_cancelled | updates/s |\n| envoy.cluster_manager_update_out_of_merge_window_rate | out_of_merge_window | updates/s |\n| envoy.cluster_membership_endpoints_count | healthy, degraded, excluded | endpoints |\n| envoy.cluster_membership_changes_rate | membership | changes/s |\n| envoy.cluster_membership_updates_rate | success, failure, empty, no_rebuild | updates/s |\n| envoy.cluster_upstream_cx_active_count | active | connections |\n| envoy.cluster_upstream_cx_rate | created | connections/s |\n| envoy.cluster_upstream_cx_http_rate | http1, http2, http3 | connections/s |\n| envoy.cluster_upstream_cx_destroy_rate | local, remote | connections/s |\n| envoy.cluster_upstream_cx_connect_fail_rate | failed | connections/s |\n| envoy.cluster_upstream_cx_connect_timeout_rate | timeout | connections/s |\n| envoy.cluster_upstream_cx_bytes_rate | received, sent | bytes/s |\n| envoy.cluster_upstream_cx_bytes_buffered_size | received, send | bytes |\n| envoy.cluster_upstream_rq_active_count | active | requests |\n| envoy.cluster_upstream_rq_rate | requests | requests/s |\n| envoy.cluster_upstream_rq_failed_rate | cancelled, maintenance_mode, timeout, max_duration_reached, per_try_timeout, reset_local, reset_remote | requests/s |\n| envoy.cluster_upstream_rq_pending_active_count | active_pending | requests |\n| envoy.cluster_upstream_rq_pending_rate | pending | requests/s |\n| envoy.cluster_upstream_rq_pending_failed_rate | overflow, failure_eject | requests/s |\n| envoy.cluster_upstream_rq_retry_rate | request | retries/s |\n| envoy.cluster_upstream_rq_retry_success_rate | success | retries/s |\n| envoy.cluster_upstream_rq_retry_backoff_rate | exponential, ratelimited | retries/s |\n| envoy.listener_manager_listeners_count | active, warming, draining | listeners |\n| envoy.listener_manager_listener_changes_rate | added, modified, removed, stopped | listeners/s |\n| envoy.listener_manager_listener_object_events_rate | create_success, create_failure, in_place_updated | objects/s |\n| envoy.listener_admin_downstream_cx_active_count | active | connections |\n| envoy.listener_admin_downstream_cx_rate | created | connections/s |\n| envoy.listener_admin_downstream_cx_destroy_rate | destroyed | connections/s |\n| envoy.listener_admin_downstream_cx_transport_socket_connect_timeout_rate | timeout | connections/s |\n| envoy.listener_admin_downstream_cx_rejected_rate | overflow, overload, global_overflow | connections/s |\n| envoy.listener_admin_downstream_listener_filter_remote_close_rate | closed | connections/s |\n| envoy.listener_admin_downstream_listener_filter_error_rate | read | errors/s |\n| envoy.listener_admin_downstream_pre_cx_active_count | active | sockets |\n| envoy.listener_admin_downstream_pre_cx_timeout_rate | timeout | sockets/s |\n| envoy.listener_downstream_cx_active_count | active | connections |\n| envoy.listener_downstream_cx_rate | created | connections/s |\n| envoy.listener_downstream_cx_destroy_rate | destroyed | connections/s |\n| envoy.listener_downstream_cx_transport_socket_connect_timeout_rate | timeout | connections/s |\n| envoy.listener_downstream_cx_rejected_rate | overflow, overload, global_overflow | connections/s |\n| envoy.listener_downstream_listener_filter_remote_close_rate | closed | connections/s |\n| envoy.listener_downstream_listener_filter_error_rate | read | errors/s |\n| envoy.listener_downstream_pre_cx_active_count | active | sockets |\n| envoy.listener_downstream_pre_cx_timeout_rate | timeout | sockets/s |\n\n",integration_type:"collector",id:"go.d.plugin-envoy-Envoy",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/envoy/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-fail2ban",plugin_name:"go.d.plugin",module_name:"fail2ban",monitored_instance:{name:"Fail2ban",link:"https://github.com/fail2ban/fail2ban#readme",icon_filename:"fail2ban.png",categories:["data-collection.authentication-and-authorization"]},keywords:["fail2ban","security","authentication","authorization"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Fail2ban\n\nPlugin: go.d.plugin\nModule: fail2ban\n\n## Overview\n\nThis collector tracks two main metrics for each jail: currently banned IPs and active failure incidents. It relies on the [`fail2ban-client`](https://linux.die.net/man/1/fail2ban-client) CLI tool but avoids directly executing the binary. Instead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment. This approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/fail2ban.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/fail2ban.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| timeout | fail2ban-client binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: fail2ban\n update_every: 5 # Collect Fail2Ban jails statistics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `fail2ban` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m fail2ban\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per jail\n\nThese metrics refer to the Jail.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| jail | Jail's name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| fail2ban.jail_banned_ips | banned | addresses |\n| fail2ban.jail_active_failures | active_failures | failures |\n\n",integration_type:"collector",id:"go.d.plugin-fail2ban-Fail2ban",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/fail2ban/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-filecheck",plugin_name:"go.d.plugin",module_name:"filecheck",monitored_instance:{name:"Files and directories",link:"",icon_filename:"filesystem.svg",categories:["data-collection.other"]},keywords:["files","directories"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Files and directories\n\nPlugin: go.d.plugin\nModule: filecheck\n\n## Overview\n\nThis collector monitors the existence, last modification time, and size of arbitrary files and directories on the system.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThis collector requires the DAC_READ_SEARCH capability when monitoring files not normally accessible to the Netdata user, but it is set automatically during installation, so no manual configuration is needed.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/filecheck.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/filecheck.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| files | List of files to monitor. | | yes |\n| dirs | List of directories to monitor. | | yes |\n| discovery_every | Files and directories discovery interval. | 60 | no |\n\n##### files\n\nFiles matching the selector will be monitored.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match)\n- Syntax:\n\n```yaml\nfiles:\n includes:\n - pattern1\n - pattern2\n excludes:\n - pattern3\n - pattern4\n```\n\n\n##### dirs\n\nDirectories matching the selector will be monitored.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match)\n- Syntax:\n\n```yaml\ndirs:\n includes:\n - pattern1\n - pattern2\n excludes:\n - pattern3\n - pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Files\n\nFiles monitoring example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: files_example\n files:\n include:\n - '/path/to/file1'\n - '/path/to/file2'\n - '/path/to/*.log'\n\n```\n{% /details %}\n##### Directories\n\nDirectories monitoring example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: files_example\n dirs:\n collect_dir_size: no\n include:\n - '/path/to/dir1'\n - '/path/to/dir2'\n - '/path/to/dir3*'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `filecheck` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m filecheck\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per file\n\nThese metrics refer to the File.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| file_path | File absolute path |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filecheck.file_existence_status | exist, not_exist | status |\n| filecheck.file_modification_time_ago | mtime_ago | seconds |\n| filecheck.file_size_bytes | size | bytes |\n\n### Per directory\n\nThese metrics refer to the Directory.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| dir_path | Directory absolute path |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| filecheck.dir_existence_status | exist, not_exist | status |\n| filecheck.dir_modification_time_ago | mtime_ago | seconds |\n| filecheck.dir_size_bytes | size | bytes |\n| filecheck.dir_files count | files | files |\n\n",integration_type:"collector",id:"go.d.plugin-filecheck-Files_and_directories",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/filecheck/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-fluentd",plugin_name:"go.d.plugin",module_name:"fluentd",monitored_instance:{name:"Fluentd",link:"https://www.fluentd.org/",icon_filename:"fluentd.svg",categories:["data-collection.logs-servers"]},keywords:["fluentd","logging"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Fluentd\n\nPlugin: go.d.plugin\nModule: fluentd\n\n## Overview\n\nThis collector monitors Fluentd servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable monitor agent\n\nTo enable monitor agent, follow the [official documentation](https://docs.fluentd.org/v1.0/articles/monitoring-rest-api).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/fluentd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/fluentd.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:24220 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:24220\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:24220\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nFluentd with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:24220\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:24220\n\n - name: remote\n url: http://192.0.2.1:24220\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `fluentd` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m fluentd\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Fluentd instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| fluentd.retry_count | a dimension per plugin | count |\n| fluentd.buffer_queue_length | a dimension per plugin | queue_length |\n| fluentd.buffer_total_queued_size | a dimension per plugin | queued_size |\n\n",integration_type:"collector",id:"go.d.plugin-fluentd-Fluentd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/fluentd/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-freeradius",plugin_name:"go.d.plugin",module_name:"freeradius",monitored_instance:{name:"FreeRADIUS",link:"https://freeradius.org/",categories:["data-collection.authentication-and-authorization"],icon_filename:"freeradius.svg"},keywords:["freeradius","radius"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# FreeRADIUS\n\nPlugin: go.d.plugin\nModule: freeradius\n\n## Overview\n\nThis collector monitors FreeRADIUS servers.\n\nIt collect metrics by sending [status-server](https://wiki.freeradius.org/config/Status) messages to the server.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt automatically detects FreeRadius instances running on localhost.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable status server\n\nTo enable status server, follow the [official documentation](https://wiki.freeradius.org/config/Status).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/freeradius.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/freeradius.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address. | 127.0.0.1 | yes |\n| port | Server port. | 18121 | no |\n| secret | FreeRADIUS secret. | adminsecret | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1\n port: 18121\n secert: adminsecret\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1\n port: 18121\n secert: adminsecret\n\n - name: remote\n address: 192.0.2.1\n port: 18121\n secert: adminsecret\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `freeradius` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m freeradius\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per FreeRADIUS instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| freeradius.authentication | requests, responses | packets/s |\n| freeradius.authentication_access_responses | accepts, rejects, challenges | packets/s |\n| freeradius.bad_authentication | dropped, duplicate, invalid, malformed, unknown-types | packets/s |\n| freeradius.proxy_authentication | requests, responses | packets/s |\n| freeradius.proxy_authentication_access_responses | accepts, rejects, challenges | packets/s |\n| freeradius.proxy_bad_authentication | dropped, duplicate, invalid, malformed, unknown-types | packets/s |\n| freeradius.accounting | requests, responses | packets/s |\n| freeradius.bad_accounting | dropped, duplicate, invalid, malformed, unknown-types | packets/s |\n| freeradius.proxy_accounting | requests, responses | packets/s |\n| freeradius.proxy_bad_accounting | dropped, duplicate, invalid, malformed, unknown-types | packets/s |\n\n",integration_type:"collector",id:"go.d.plugin-freeradius-FreeRADIUS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/freeradius/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-geth",plugin_name:"go.d.plugin",module_name:"geth",monitored_instance:{name:"Go-ethereum",link:"https://github.com/ethereum/go-ethereum",icon_filename:"geth.png",categories:["data-collection.blockchain-servers"]},keywords:["geth","ethereum","blockchain"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Go-ethereum\n\nPlugin: go.d.plugin\nModule: geth\n\n## Overview\n\nThis collector monitors Go-ethereum instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Go-ethereum instances running on localhost.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/geth.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/geth.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:6060/debug/metrics/prometheus | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:6060/debug/metrics/prometheus\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:6060/debug/metrics/prometheus\n username: username\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:6060/debug/metrics/prometheus\n\n - name: remote\n url: http://192.0.2.1:6060/debug/metrics/prometheus\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `geth` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m geth\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Go-ethereum instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| geth.eth_db_chaindata_ancient_io_rate | reads, writes | bytes/s |\n| geth.eth_db_chaindata_ancient_io | reads, writes | bytes |\n| geth.eth_db_chaindata_disk_io | reads, writes | bytes |\n| geth.goroutines | goroutines | goroutines |\n| geth.eth_db_chaindata_disk_io_rate | reads, writes | bytes/s |\n| geth.chaindata_db_size | level_db, ancient_db | bytes |\n| geth.chainhead | block, receipt, header | block |\n| geth.tx_pool_pending | invalid, pending, local, discard, no_funds, ratelimit, replace | transactions |\n| geth.tx_pool_current | invalid, pending, local, pool | transactions |\n| geth.tx_pool_queued | discard, eviction, no_funds, ratelimit | transactions |\n| geth.p2p_bandwidth | ingress, egress | bytes/s |\n| geth.reorgs | executed | reorgs |\n| geth.reorgs_blocks | added, dropped | blocks |\n| geth.p2p_peers | peers | peers |\n| geth.p2p_peers_calls | dials, serves | calls/s |\n| geth.rpc_calls | failed, successful | calls/s |\n\n",integration_type:"collector",id:"go.d.plugin-geth-Go-ethereum",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/geth/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-haproxy",plugin_name:"go.d.plugin",module_name:"haproxy",monitored_instance:{name:"HAProxy",link:"https://www.haproxy.org/",icon_filename:"haproxy.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["haproxy","web","webserver","http","proxy"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# HAProxy\n\nPlugin: go.d.plugin\nModule: haproxy\n\n## Overview\n\nThis collector monitors HAProxy servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable PROMEX addon.\n\nTo enable PROMEX addon, follow the [official documentation](https://github.com/haproxy/haproxy/tree/master/addons/promex).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/haproxy.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/haproxy.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8404/metrics\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8404/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nNGINX Plus with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:8404/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8404/metrics\n\n - name: remote\n url: http://192.0.2.1:8404/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `haproxy` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m haproxy\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per HAProxy instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| haproxy.backend_current_sessions | a dimension per proxy | sessions |\n| haproxy.backend_sessions | a dimension per proxy | sessions/s |\n| haproxy.backend_response_time_average | a dimension per proxy | milliseconds |\n| haproxy.backend_queue_time_average | a dimension per proxy | milliseconds |\n| haproxy.backend_current_queue | a dimension per proxy | requests |\n\n### Per proxy\n\nThese metrics refer to the Proxy.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| haproxy.backend_http_responses | 1xx, 2xx, 3xx, 4xx, 5xx, other | responses/s |\n| haproxy.backend_network_io | in, out | bytes/s |\n\n",integration_type:"collector",id:"go.d.plugin-haproxy-HAProxy",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/haproxy/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-hddtemp",plugin_name:"go.d.plugin",module_name:"hddtemp",monitored_instance:{name:"HDD temperature",link:"https://linux.die.net/man/8/hddtemp",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"hard-drive.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["hardware","hdd temperature","disk temperature","temperature"],most_popular:!1},overview:"# HDD temperature\n\nPlugin: go.d.plugin\nModule: hddtemp\n\n## Overview\n\nThis collector monitors disk temperatures.\n\n\nIt retrieves temperature data for attached disks by querying the hddtemp daemon at regular intervals.\n\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, this collector will attempt to connect to the `hddtemp` daemon on `127.0.0.1:7634`\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install hddtemp\n\nInstall `hddtemp` using your distribution\'s package manager.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/hddtemp.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/hddtemp.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | The IP address and port where the hddtemp daemon listens for connections. | 127.0.0.1:7634 | yes |\n| timeout | Connection, read, and write timeout duration in seconds. The timeout includes name resolution. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:7634\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:7634\n\n - name: remote\n address: 203.0.113.0:7634\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `hddtemp` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m hddtemp\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per disk\n\nThese metrics refer to the Disk.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk_id | Disk identifier. It is derived from the device path (e.g. sda or ata-HUP722020APA330_BFJ0WS3F) |\n| model | Disk model |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hddtemp.disk_temperature | temperature | Celsius |\n| hddtemp.disk_temperature_sensor_status | ok, err, na, unk, nos, slp | status |\n\n",integration_type:"collector",id:"go.d.plugin-hddtemp-HDD_temperature",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/hddtemp/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-hfs",plugin_name:"go.d.plugin",module_name:"hfs",monitored_instance:{name:"Hadoop Distributed File System (HDFS)",link:"https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html",icon_filename:"hadoop.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["hdfs","hadoop"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Hadoop Distributed File System (HDFS)\n\nPlugin: go.d.plugin\nModule: hfs\n\n## Overview\n\nThis collector monitors HDFS nodes.\n\nNetdata accesses HDFS metrics over `Java Management Extensions` (JMX) through the web interface of an HDFS daemon.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/hdfs.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/hdfs.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9870/jmx | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9870/jmx\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9870/jmx\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9870/jmx\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9870/jmx\n\n - name: remote\n url: http://192.0.2.1:9870/jmx\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `hfs` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m hfs\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ hdfs_capacity_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/hdfs.conf) | hdfs.capacity | summary datanodes space capacity utilization |\n| [ hdfs_missing_blocks ](https://github.com/netdata/netdata/blob/master/src/health/health.d/hdfs.conf) | hdfs.blocks | number of missing blocks |\n| [ hdfs_stale_nodes ](https://github.com/netdata/netdata/blob/master/src/health/health.d/hdfs.conf) | hdfs.data_nodes | number of datanodes marked stale due to delayed heartbeat |\n| [ hdfs_dead_nodes ](https://github.com/netdata/netdata/blob/master/src/health/health.d/hdfs.conf) | hdfs.data_nodes | number of datanodes which are currently dead |\n| [ hdfs_num_failed_volumes ](https://github.com/netdata/netdata/blob/master/src/health/health.d/hdfs.conf) | hdfs.num_failed_volumes | number of failed volumes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Hadoop Distributed File System (HDFS) instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | DataNode | NameNode |\n|:------|:----------|:----|:---:|:---:|\n| hdfs.heap_memory | committed, used | MiB | \u2022 | \u2022 |\n| hdfs.gc_count_total | gc | events/s | \u2022 | \u2022 |\n| hdfs.gc_time_total | ms | ms | \u2022 | \u2022 |\n| hdfs.gc_threshold | info, warn | events/s | \u2022 | \u2022 |\n| hdfs.threads | new, runnable, blocked, waiting, timed_waiting, terminated | num | \u2022 | \u2022 |\n| hdfs.logs_total | info, error, warn, fatal | logs/s | \u2022 | \u2022 |\n| hdfs.rpc_bandwidth | received, sent | kilobits/s | \u2022 | \u2022 |\n| hdfs.rpc_calls | calls | calls/s | \u2022 | \u2022 |\n| hdfs.open_connections | open | connections | \u2022 | \u2022 |\n| hdfs.call_queue_length | length | num | \u2022 | \u2022 |\n| hdfs.avg_queue_time | time | ms | \u2022 | \u2022 |\n| hdfs.avg_processing_time | time | ms | \u2022 | \u2022 |\n| hdfs.capacity | remaining, used | KiB | | \u2022 |\n| hdfs.used_capacity | dfs, non_dfs | KiB | | \u2022 |\n| hdfs.load | load | load | | \u2022 |\n| hdfs.volume_failures_total | failures | events/s | | \u2022 |\n| hdfs.files_total | files | num | | \u2022 |\n| hdfs.blocks_total | blocks | num | | \u2022 |\n| hdfs.blocks | corrupt, missing, under_replicated | num | | \u2022 |\n| hdfs.data_nodes | live, dead, stale | num | | \u2022 |\n| hdfs.datanode_capacity | remaining, used | KiB | \u2022 | |\n| hdfs.datanode_used_capacity | dfs, non_dfs | KiB | \u2022 | |\n| hdfs.datanode_failed_volumes | failed volumes | num | \u2022 | |\n| hdfs.datanode_bandwidth | reads, writes | KiB/s | \u2022 | |\n\n",integration_type:"collector",id:"go.d.plugin-hfs-Hadoop_Distributed_File_System_(HDFS)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/hdfs/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-hpssa",plugin_name:"go.d.plugin",module_name:"hpssa",monitored_instance:{name:"HPE Smart Arrays",link:"https://buy.hpe.com/us/en/options/controller-controller-options/smart-array-controllers-smart-host-bus-adapters/c/7109730",icon_filename:"hp.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["storage","raid-controller","hp","hpssa","array"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# HPE Smart Arrays\n\nPlugin: go.d.plugin\nModule: hpssa\n\n## Overview\n\nMonitors the health of HPE Smart Arrays by tracking the status of controllers, arrays, logical and physical drives in your storage system.\nIt relies on the `ssacli` CLI tool but avoids directly executing the binary.\nInstead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment.\nThis approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\nExecuted commands:\n- `ssacli ctrl all show config detail`\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install ssacli\n\nSee [official installation instructions](https://support.hpe.com/connect/s/softwaredetails?language=en_US&collectionId=MTX-0cb3f808e2514d3d).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/ssacli.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/ssacli.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| timeout | ssacli binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: hpssa\n update_every: 5 # Collect HPE Smart Array statistics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `hpssa` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m hpssa\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per controller\n\nThese metrics refer to the Controller.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| slot | Slot number |\n| model | Controller model |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hpssa.controller_status | ok, nok | status |\n| hpssa.controller_temperature | temperature | Celsius |\n| hpssa.controller_cache_module_presence_status | present, not_present | status |\n| hpssa.controller_cache_module_status | ok, nok | status |\n| hpssa.controller_cache_module_temperature | temperature | Celsius |\n| hpssa.controller_cache_module_battery_status | ok, nok | status |\n\n### Per array\n\nThese metrics refer to the Array.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| slot | Slot number |\n| array_id | Array id |\n| interface_type | Array interface type (e.g. SATA) |\n| array_type | Array type (e.g. Data) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hpssa.array_status | ok, nok | status |\n\n### Per logical drive\n\nThese metrics refer to the Logical Drive.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| slot | Slot number |\n| array_id | Array id |\n| logical_drive_id | Logical Drive id (number) |\n| disk_name | Disk name (e.g. /dev/sda) |\n| drive_type | Drive type (e.g. Data) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hpssa.logical_drive_status | ok, nok | status |\n\n### Per physical drive\n\nThese metrics refer to the Physical Drive.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| slot | Slot number |\n| array_id | Array id or "na" if unassigned |\n| logical_drive_id | Logical Drive id or "na" if unassigned |\n| location | Drive location in port:box:bay format (e.g. 1I:1:1) |\n| interface_type | Drive interface type (e.g. SATA) |\n| drive_type | Drive type (e.g. Data Drive, Unassigned Drive) |\n| model | Drive model |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hpssa.physical_drive_status | ok, nok | status |\n| hpssa.physical_drive_temperature | temperature | status |\n\n',integration_type:"collector",id:"go.d.plugin-hpssa-HPE_Smart_Arrays",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/hpssa/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-httpcheck",plugin_name:"go.d.plugin",module_name:"httpcheck",monitored_instance:{name:"HTTP Endpoints",link:"",icon_filename:"globe.svg",categories:["data-collection.synthetic-checks"]},keywords:["webserver"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# HTTP Endpoints\n\nPlugin: go.d.plugin\nModule: httpcheck\n\n## Overview\n\nThis collector monitors HTTP servers availability and response time.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/httpcheck.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/httpcheck.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| status_accepted | HTTP accepted response statuses. Anything else will result in \'bad status\' in the status chart. | [200] | no |\n| response_match | If the status code is accepted, the content of the response will be matched against this regular expression. | | no |\n| headers_match | This option defines a set of rules that check for specific key-value pairs in the HTTP headers of the response. | [] | no |\n| headers_match.exclude | This option determines whether the rule should check for the presence of the specified key-value pair or the absence of it. | no | no |\n| headers_match.key | The exact name of the HTTP header to check for. | | yes |\n| headers_match.value | The [pattern](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/matcher#supported-format) to match against the value of the specified header. | | no |\n| cookie_file | Path to cookie file. See [cookie file format](https://everything.curl.dev/http/cookies/fileformat). | | no |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080\n\n```\n{% /details %}\n##### With HTTP request headers\n\nConfiguration with HTTP request headers that will be sent by the client.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080\n headers:\n Host: localhost:8080\n User-Agent: netdata/go.d.plugin\n Accept: */*\n\n```\n{% /details %}\n##### With `status_accepted`\n\nA basic example configuration with non-default status_accepted.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080\n status_accepted:\n - 200\n - 204\n\n```\n{% /details %}\n##### With `header_match`\n\nExample configurations with `header_match`. See the value [pattern](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/matcher#supported-format) syntax.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n # The "X-Robots-Tag" header must be present in the HTTP response header,\n # but the value of the header does not matter.\n # This config checks for the presence of the header regardless of its value.\n - name: local\n url: http://127.0.0.1:8080\n header_match:\n - key: X-Robots-Tag\n\n # The "X-Robots-Tag" header must be present in the HTTP response header\n # only if its value is equal to "noindex, nofollow".\n # This config checks both the presence of the header and its value.\n - name: local\n url: http://127.0.0.1:8080\n header_match:\n - key: X-Robots-Tag\n value: \'= noindex,nofollow\'\n\n # The "X-Robots-Tag" header must not be present in the HTTP response header\n # but the value of the header does not matter.\n # This config checks for the presence of the header regardless of its value.\n - name: local\n url: http://127.0.0.1:8080\n header_match:\n - key: X-Robots-Tag\n exclude: yes\n\n # The "X-Robots-Tag" header must not be present in the HTTP response header\n # only if its value is equal to "noindex, nofollow".\n # This config checks both the presence of the header and its value.\n - name: local\n url: http://127.0.0.1:8080\n header_match:\n - key: X-Robots-Tag\n exclude: yes\n value: \'= noindex,nofollow\'\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:8080\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080\n\n - name: remote\n url: http://192.0.2.1:8080\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `httpcheck` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m httpcheck\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per target\n\nThe metrics refer to the monitored target.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| url | url value that is set in the configuration file. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| httpcheck.response_time | time | ms |\n| httpcheck.response_length | length | characters |\n| httpcheck.status | success, timeout, redirect, no_connection, bad_content, bad_header, bad_status | boolean |\n| httpcheck.in_state | time | boolean |\n\n",integration_type:"collector",id:"go.d.plugin-httpcheck-HTTP_Endpoints",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/httpcheck/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-intelgpu",plugin_name:"go.d.plugin",module_name:"intelgpu",monitored_instance:{name:"Intel GPU",link:"https://www.intel.com/",icon_filename:"microchip.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:["intel","gpu","hardware"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Intel GPU\n\nPlugin: go.d.plugin\nModule: intelgpu\n\n## Overview\n\nThis collector gathers performance metrics for Intel integrated GPUs.\nIt relies on the [`intel_gpu_top`](https://manpages.debian.org/testing/intel-gpu-tools/intel_gpu_top.1.en.html) CLI tool but avoids directly executing the binary.\nInstead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment.\nThis approach eliminates the need to grant the CAP_PERFMON capability to `intel_gpu_top`, improving security and potentially simplifying permission management.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install intel-gpu-tools\n\nInstall `intel-gpu-tools` using your distribution\'s package manager.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/intelgpu.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/intelgpu.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| device | Select a specific GPU using [supported filter](https://manpages.debian.org/testing/intel-gpu-tools/intel_gpu_top.1.en.html#DESCRIPTION). | | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: intelgpu\n update_every: 5 # Collect Intel iGPU metrics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `intelgpu` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m intelgpu\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Intel GPU instance\n\nThese metrics refer to the Intel GPU.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| intelgpu.frequency | frequency | MHz |\n| intelgpu.power | gpu, package | Watts |\n\n### Per engine\n\nThese metrics refer to the GPU hardware engine.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| engine_class | Engine class (Render/3D, Blitter, VideoEnhance, Video, Compute). |\n| engine_instance | Engine instance (e.g. Render/3D/0, Video/0, Video/1). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| intelgpu.engine_busy_perc | busy | percentage |\n\n",integration_type:"collector",id:"go.d.plugin-intelgpu-Intel_GPU",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/intelgpu/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-isc_dhcpd",plugin_name:"go.d.plugin",module_name:"isc_dhcpd",monitored_instance:{name:"ISC DHCP",link:"https://www.isc.org/dhcp/",categories:["data-collection.dns-and-dhcp-servers"],icon_filename:"isc.png"},keywords:["dhcpd","dhcp"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# ISC DHCP\n\nPlugin: go.d.plugin\nModule: isc_dhcpd\n\n## Overview\n\nThis collector monitors ISC DHCP lease usage by reading the DHCP client lease database (dhcpd.leases).\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/isc_dhcpd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/isc_dhcpd.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| leases_path | Path to DHCP client lease database. | /var/lib/dhcp/dhcpd.leases | no |\n| pools | List of IP pools to monitor. | | yes |\n\n##### pools\n\nList of IP pools to monitor.\n\n- IP range syntax: see [supported formats](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/iprange#supported-formats).\n- Syntax:\n\n```yaml\npools:\n - name: "POOL_NAME1"\n networks: "SPACE SEPARATED LIST OF IP RANGES"\n - name: "POOL_NAME2"\n networks: "SPACE SEPARATED LIST OF IP RANGES"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n pools:\n - name: lan\n networks: "192.168.0.0/24 192.168.1.0/24 192.168.2.0/24"\n - name: wifi\n networks: "10.0.0.0/24"\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `isc_dhcpd` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m isc_dhcpd\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ISC DHCP instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| isc_dhcpd.active_leases_total | active | leases |\n\n### Per ISC DHCP instance\n\nThese metrics refer to the DHCP pool.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| dhcp_pool_name | The DHCP pool name defined in the collector configuration. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| isc_dhcpd.dhcp_pool_utilization | utilization | percent |\n| isc_dhcpd.dhcp_pool_active_leases | active | leases |\n\n",integration_type:"collector",id:"go.d.plugin-isc_dhcpd-ISC_DHCP",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/isc_dhcpd/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-k8s_kubelet",plugin_name:"go.d.plugin",module_name:"k8s_kubelet",monitored_instance:{name:"Kubelet",link:"https://kubernetes.io/docs/concepts/overview/components/#kubelet",icon_filename:"kubernetes.svg",categories:["data-collection.kubernetes"]},keywords:["kubelet","kubernetes","k8s"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Kubelet\n\nPlugin: go.d.plugin\nModule: k8s_kubelet\n\n## Overview\n\nThis collector monitors Kubelet instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/k8s_kubelet.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/k8s_kubelet.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:10255/metrics | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:10255/metrics\n\n```\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:10250/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `k8s_kubelet` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m k8s_kubelet\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ kubelet_node_config_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/kubelet.conf) | k8s_kubelet.kubelet_node_config_error | the node is experiencing a configuration-related error (0: false, 1: true) |\n| [ kubelet_token_requests ](https://github.com/netdata/netdata/blob/master/src/health/health.d/kubelet.conf) | k8s_kubelet.kubelet_token_requests | number of failed Token() requests to the alternate token source |\n| [ kubelet_token_requests ](https://github.com/netdata/netdata/blob/master/src/health/health.d/kubelet.conf) | k8s_kubelet.kubelet_token_requests | number of failed Token() requests to the alternate token source |\n| [ kubelet_operations_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/kubelet.conf) | k8s_kubelet.kubelet_operations_errors | number of Docker or runtime operation errors |\n| [ kubelet_operations_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/kubelet.conf) | k8s_kubelet.kubelet_operations_errors | number of Docker or runtime operation errors |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Kubelet instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s_kubelet.apiserver_audit_requests_rejected | rejected | requests/s |\n| k8s_kubelet.apiserver_storage_data_key_generation_failures | failures | events/s |\n| k8s_kubelet.apiserver_storage_data_key_generation_latencies | 5_\xb5s, 10_\xb5s, 20_\xb5s, 40_\xb5s, 80_\xb5s, 160_\xb5s, 320_\xb5s, 640_\xb5s, 1280_\xb5s, 2560_\xb5s, 5120_\xb5s, 10240_\xb5s, 20480_\xb5s, 40960_\xb5s, +Inf | observes/s |\n| k8s_kubelet.apiserver_storage_data_key_generation_latencies_percent | 5_\xb5s, 10_\xb5s, 20_\xb5s, 40_\xb5s, 80_\xb5s, 160_\xb5s, 320_\xb5s, 640_\xb5s, 1280_\xb5s, 2560_\xb5s, 5120_\xb5s, 10240_\xb5s, 20480_\xb5s, 40960_\xb5s, +Inf | percentage |\n| k8s_kubelet.apiserver_storage_envelope_transformation_cache_misses | cache misses | events/s |\n| k8s_kubelet.kubelet_containers_running | total | running_containers |\n| k8s_kubelet.kubelet_pods_running | total | running_pods |\n| k8s_kubelet.kubelet_pods_log_filesystem_used_bytes | a dimension per namespace and pod | B |\n| k8s_kubelet.kubelet_runtime_operations | a dimension per operation type | operations/s |\n| k8s_kubelet.kubelet_runtime_operations_errors | a dimension per operation type | errors/s |\n| k8s_kubelet.kubelet_docker_operations | a dimension per operation type | operations/s |\n| k8s_kubelet.kubelet_docker_operations_errors | a dimension per operation type | errors/s |\n| k8s_kubelet.kubelet_node_config_error | experiencing_error | bool |\n| k8s_kubelet.kubelet_pleg_relist_interval_microseconds | 0.5, 0.9, 0.99 | microseconds |\n| k8s_kubelet.kubelet_pleg_relist_latency_microseconds | 0.5, 0.9, 0.99 | microseconds |\n| k8s_kubelet.kubelet_token_requests | total, failed | token_requests/s |\n| k8s_kubelet.rest_client_requests_by_code | a dimension per HTTP status code | requests/s |\n| k8s_kubelet.rest_client_requests_by_method | a dimension per HTTP method | requests/s |\n\n### Per volume manager\n\nThese metrics refer to the Volume Manager.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s_kubelet.volume_manager_total_volumes | actual, desired | state |\n\n",integration_type:"collector",id:"go.d.plugin-k8s_kubelet-Kubelet",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/k8s_kubelet/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-k8s_kubeproxy",plugin_name:"go.d.plugin",module_name:"k8s_kubeproxy",monitored_instance:{name:"Kubeproxy",link:"https://kubernetes.io/docs/concepts/overview/components/#kube-proxy",icon_filename:"kubernetes.svg",categories:["data-collection.kubernetes"]},keywords:["kubeproxy","kubernetes","k8s"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Kubeproxy\n\nPlugin: go.d.plugin\nModule: k8s_kubeproxy\n\n## Overview\n\nThis collector monitors Kubeproxy instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/k8s_kubeproxy.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/k8s_kubeproxy.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:10249/metrics | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:10249/metrics\n\n```\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:10249/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `k8s_kubeproxy` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m k8s_kubeproxy\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Kubeproxy instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s_kubeproxy.kubeproxy_sync_proxy_rules | sync_proxy_rules | events/s |\n| k8s_kubeproxy.kubeproxy_sync_proxy_rules_latency_microsecond | 0.001, 0.002, 0.004, 0.008, 0.016, 0.032, 0.064, 0.128, 0.256, 0.512, 1.024, 2.048, 4.096, 8.192, 16.384, +Inf | observes/s |\n| k8s_kubeproxy.kubeproxy_sync_proxy_rules_latency | 0.001, 0.002, 0.004, 0.008, 0.016, 0.032, 0.064, 0.128, 0.256, 0.512, 1.024, 2.048, 4.096, 8.192, 16.384, +Inf | percentage |\n| k8s_kubeproxy.rest_client_requests_by_code | a dimension per HTTP status code | requests/s |\n| k8s_kubeproxy.rest_client_requests_by_method | a dimension per HTTP method | requests/s |\n| k8s_kubeproxy.http_request_duration | 0.5, 0.9, 0.99 | microseconds |\n\n",integration_type:"collector",id:"go.d.plugin-k8s_kubeproxy-Kubeproxy",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/k8s_kubeproxy/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-k8s_state",plugin_name:"go.d.plugin",module_name:"k8s_state",monitored_instance:{name:"Kubernetes Cluster State",link:"https://kubernetes.io/",icon_filename:"kubernetes.svg",categories:["data-collection.kubernetes"]},keywords:["kubernetes","k8s"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Kubernetes Cluster State\n\nPlugin: go.d.plugin\nModule: k8s_state\n\n## Overview\n\nThis collector monitors Kubernetes Nodes, Pods and Containers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/k8s_state.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/k8s_state.conf\n```\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `k8s_state` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m k8s_state\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per node\n\nThese metrics refer to the Node.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| k8s_cluster_id | Cluster ID. This is equal to the kube-system namespace UID. |\n| k8s_cluster_name | Cluster name. Cluster name discovery only works in GKE. |\n| k8s_node_name | Node name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s_state.node_allocatable_cpu_requests_utilization | requests | % |\n| k8s_state.node_allocatable_cpu_requests_used | requests | millicpu |\n| k8s_state.node_allocatable_cpu_limits_utilization | limits | % |\n| k8s_state.node_allocatable_cpu_limits_used | limits | millicpu |\n| k8s_state.node_allocatable_mem_requests_utilization | requests | % |\n| k8s_state.node_allocatable_mem_requests_used | requests | bytes |\n| k8s_state.node_allocatable_mem_limits_utilization | limits | % |\n| k8s_state.node_allocatable_mem_limits_used | limits | bytes |\n| k8s_state.node_allocatable_pods_utilization | allocated | % |\n| k8s_state.node_allocatable_pods_usage | available, allocated | pods |\n| k8s_state.node_condition | a dimension per condition | status |\n| k8s_state.node_schedulability | schedulable, unschedulable | state |\n| k8s_state.node_pods_readiness | ready | % |\n| k8s_state.node_pods_readiness_state | ready, unready | pods |\n| k8s_state.node_pods_condition | pod_ready, pod_scheduled, pod_initialized, containers_ready | pods |\n| k8s_state.node_pods_phase | running, failed, succeeded, pending | pods |\n| k8s_state.node_containers | containers, init_containers | containers |\n| k8s_state.node_containers_state | running, waiting, terminated | containers |\n| k8s_state.node_init_containers_state | running, waiting, terminated | containers |\n| k8s_state.node_age | age | seconds |\n\n### Per pod\n\nThese metrics refer to the Pod.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| k8s_cluster_id | Cluster ID. This is equal to the kube-system namespace UID. |\n| k8s_cluster_name | Cluster name. Cluster name discovery only works in GKE. |\n| k8s_node_name | Node name. |\n| k8s_namespace | Namespace. |\n| k8s_controller_kind | Controller kind (ReplicaSet, DaemonSet, StatefulSet, Job, etc.). |\n| k8s_controller_name | Controller name. |\n| k8s_pod_name | Pod name. |\n| k8s_qos_class | Pod QOS class (burstable, guaranteed, besteffort). |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s_state.pod_cpu_requests_used | requests | millicpu |\n| k8s_state.pod_cpu_limits_used | limits | millicpu |\n| k8s_state.pod_mem_requests_used | requests | bytes |\n| k8s_state.pod_mem_limits_used | limits | bytes |\n| k8s_state.pod_condition | pod_ready, pod_scheduled, pod_initialized, containers_ready | state |\n| k8s_state.pod_phase | running, failed, succeeded, pending | state |\n| k8s_state.pod_age | age | seconds |\n| k8s_state.pod_containers | containers, init_containers | containers |\n| k8s_state.pod_containers_state | running, waiting, terminated | containers |\n| k8s_state.pod_init_containers_state | running, waiting, terminated | containers |\n\n### Per container\n\nThese metrics refer to the Pod container.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| k8s_cluster_id | Cluster ID. This is equal to the kube-system namespace UID. |\n| k8s_cluster_name | Cluster name. Cluster name discovery only works in GKE. |\n| k8s_node_name | Node name. |\n| k8s_namespace | Namespace. |\n| k8s_controller_kind | Controller kind (ReplicaSet, DaemonSet, StatefulSet, Job, etc.). |\n| k8s_controller_name | Controller name. |\n| k8s_pod_name | Pod name. |\n| k8s_qos_class | Pod QOS class (burstable, guaranteed, besteffort). |\n| k8s_container_name | Container name. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| k8s_state.pod_container_readiness_state | ready | state |\n| k8s_state.pod_container_restarts | restarts | restarts |\n| k8s_state.pod_container_state | running, waiting, terminated | state |\n| k8s_state.pod_container_waiting_state_reason | a dimension per reason | state |\n| k8s_state.pod_container_terminated_state_reason | a dimension per reason | state |\n\n",integration_type:"collector",id:"go.d.plugin-k8s_state-Kubernetes_Cluster_State",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/k8s_state/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-lighttpd",plugin_name:"go.d.plugin",module_name:"lighttpd",monitored_instance:{name:"Lighttpd",link:"https://www.lighttpd.net/",icon_filename:"lighttpd.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["webserver"],related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"weblog"},{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Lighttpd\n\nPlugin: go.d.plugin\nModule: lighttpd\n\n## Overview\n\nThis collector monitors the activity and performance of Lighttpd servers, and collects metrics such as the number of connections, workers, requests and more.\n\n\nIt sends HTTP requests to the Lighttpd location [server-status](https://redmine.lighttpd.net/projects/lighttpd/wiki/Mod_status), \nwhich is a built-in location that provides metrics about the Lighttpd server.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Lighttpd instances running on localhost that are listening on port 80.\nOn startup, it tries to collect metrics from:\n\n- http://localhost/server-status?auto\n- http://127.0.0.1/server-status?auto\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable Lighttpd status support\n\nTo enable status support, see the [official documentation](https://redmine.lighttpd.net/projects/lighttpd/wiki/Mod_status).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/lighttpd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/lighttpd.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/server-status?auto | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nLighttpd with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1/server-status?auto\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n\n - name: remote\n url: http://192.0.2.1/server-status?auto\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `lighttpd` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m lighttpd\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Lighttpd instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| lighttpd.requests | requests | requests/s |\n| lighttpd.net | sent | kilobits/s |\n| lighttpd.workers | idle, busy | servers |\n| lighttpd.scoreboard | waiting, open, close, hard_error, keepalive, read, read_post, write, handle_request, request_start, request_end | connections |\n| lighttpd.uptime | uptime | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-lighttpd-Lighttpd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/lighttpd/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-litespeed",plugin_name:"go.d.plugin",module_name:"litespeed",monitored_instance:{name:"Litespeed",link:"https://www.litespeedtech.com/products/litespeed-web-server",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"litespeed.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["litespeed","web","server"],most_popular:!1},overview:"# Litespeed\n\nPlugin: go.d.plugin\nModule: litespeed\n\n## Overview\n\nExamine Litespeed metrics for insights into web server operations. Analyze request rates, response times, and error rates for efficient web service delivery.\n\nThe collector uses the statistics under /tmp/lshttpd to gather the metrics.\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf no configuration is present, the collector will attempt to read files under /tmp/lshttpd/.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/litespeed.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/litespeed.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| reports_dir | Directory containing Litespeed's real-time statistics files. | /tmp/lshttpd/ | no |\n\n{% /details %}\n#### Examples\n\n##### Set the path to statistics\n\nChange the path for the litespeed stats files\n\n```yaml\nlocal:\n name: 'local'\n path: '/tmp/lshttpd'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `litespeed` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m litespeed\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Litespeed instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| litespeed.requests | requests | requests/s |\n| litespeed.requests_processing | processing | requests |\n| litespeed.net_throughput | in, out | kilobits/s |\n| litespeed.net_ssl_throughput | in, out | kilobits/s |\n| litespeed.connections | free, used | conns |\n| litespeed.ssl_connections | free, used | conns |\n| litespeed.public_cache | hits | hits/s |\n| litespeed.private_cache | hits | hits/s |\n| litespeed.static | hits | hits/s |\n\n",integration_type:"collector",id:"go.d.plugin-litespeed-Litespeed",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/litespeed/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-logind",plugin_name:"go.d.plugin",module_name:"logind",monitored_instance:{name:"systemd-logind users",link:"https://www.freedesktop.org/software/systemd/man/systemd-logind.service.html",icon_filename:"users.svg",categories:["data-collection.systemd"]},keywords:["logind","systemd"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# systemd-logind users\n\nPlugin: go.d.plugin\nModule: logind\n\n## Overview\n\nThis collector monitors number of sessions and users as reported by the `org.freedesktop.login1` DBus API.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/logind.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/logind.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `logind` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m logind\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per systemd-logind users instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| logind.sessions | remote, local | sessions |\n| logind.sessions_type | console, graphical, other | sessions |\n| logind.sessions_state | online, closing, active | sessions |\n| logind.users_state | offline, closing, online, lingering, active | users |\n\n",integration_type:"collector",id:"go.d.plugin-logind-systemd-logind_users",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/logind/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-logstash",plugin_name:"go.d.plugin",module_name:"logstash",monitored_instance:{name:"Logstash",link:"https://www.elastic.co/products/logstash",icon_filename:"elastic-logstash.svg",categories:["data-collection.logs-servers"]},keywords:["logstatsh"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Logstash\n\nPlugin: go.d.plugin\nModule: logstash\n\n## Overview\n\nThis collector monitors Logstash instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/logstatsh.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/logstatsh.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://localhost:9600 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://localhost:9600\n\n```\n{% /details %}\n##### HTTP authentication\n\nHTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://localhost:9600\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nHTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://localhost:9600\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://localhost:9600\n\n - name: remote\n url: http://192.0.2.1:9600\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `logstash` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m logstash\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Logstash instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| logstash.jvm_threads | threads | count |\n| logstash.jvm_mem_heap_used | in_use | percentage |\n| logstash.jvm_mem_heap | committed, used | KiB |\n| logstash.jvm_mem_pools_eden | committed, used | KiB |\n| logstash.jvm_mem_pools_survivor | committed, used | KiB |\n| logstash.jvm_mem_pools_old | committed, used | KiB |\n| logstash.jvm_gc_collector_count | eden, old | counts/s |\n| logstash.jvm_gc_collector_time | eden, old | ms |\n| logstash.open_file_descriptors | open | fd |\n| logstash.event | in, filtered, out | events/s |\n| logstash.event_duration | event, queue | seconds |\n| logstash.uptime | uptime | seconds |\n\n### Per pipeline\n\nThese metrics refer to the pipeline.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| pipeline | pipeline name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| logstash.pipeline_event | in, filtered, out | events/s |\n| logstash.pipeline_event_duration | event, queue | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-logstash-Logstash",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/logstash/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-lvm",plugin_name:"go.d.plugin",module_name:"lvm",monitored_instance:{name:"LVM logical volumes",link:"",icon_filename:"filesystem.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["lvm","lvs"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# LVM logical volumes\n\nPlugin: go.d.plugin\nModule: lvm\n\n## Overview\n\nThis collector monitors the health of LVM logical volumes. It relies on the [`lvs`](https://man7.org/linux/man-pages/man8/lvs.8.html) CLI tool but avoids directly executing the binary. Instead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment. This approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/lvm.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/lvm.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| timeout | lvs binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: lvm\n update_every: 5 # Collect logical volume statistics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `lvm` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m lvm\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ lvm_lv_data_space_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/lvm.conf) | lvm.lv_data_space_utilization | LVM logical volume high data space usage (LV ${label:lv_name} VG ${label:vg_name} Type ${label:volume_type}) |\n| [ lvm_lv_metadata_space_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/lvm.conf) | lvm.lv_metadata_space_utilization | LVM logical volume high metadata space usage (LV ${label:lv_name} VG ${label:vg_name} Type ${label:volume_type}) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per logical volume\n\nThese metrics refer to the LVM logical volume.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| lv_name | Logical volume name |\n| vg_name | Volume group name |\n| volume_type | Type of the volume |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| lvm.lv_data_space_utilization | utilization | % |\n| lvm.lv_metadata_space_utilization | utilization | % |\n\n",integration_type:"collector",id:"go.d.plugin-lvm-LVM_logical_volumes",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/lvm/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-megacli",plugin_name:"go.d.plugin",module_name:"megacli",monitored_instance:{name:"MegaCLI MegaRAID",link:"https://wikitech.wikimedia.org/wiki/MegaCli",icon_filename:"hard-drive.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["storage","raid-controller","manage-disks"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# MegaCLI MegaRAID\n\nPlugin: go.d.plugin\nModule: megacli\n\n## Overview\n\nMonitors the health of MegaCLI Hardware RAID by tracking the status of RAID adapters, physical drives, and backup batteries in your storage system.\nIt relies on the `megacli` CLI tool but avoids directly executing the binary.\nInstead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment.\nThis approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\nExecuted commands:\n- `megacli -LDPDInfo -aAll -NoLog`\n- `megacli -AdpBbuCmd -aAll -NoLog`\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/megacli.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/megacli.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| timeout | megacli binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: megacli\n update_every: 5 # Collect MegaCli Hardware RAID statistics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `megacli` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m megacli\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ megacli_adapter_health_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/megacli.conf) | megacli.adapter_health_state | MegaCLI adapter ${label:adapter_number} is in the degraded state |\n| [ megacli_phys_drive_media_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/megacli.conf) | megacli.phys_drive_media_errors | MegaCLI physical drive adapter ${label:adapter_number} slot ${label:slot_number} media errors |\n| [ megacli_phys_drive_predictive_failures ](https://github.com/netdata/netdata/blob/master/src/health/health.d/megacli.conf) | megacli.phys_drive_predictive_failures | MegaCLI physical drive (adapter ${label:adapter_number} slot ${label:slot_number}) predictive failures |\n| [ megacli_bbu_charge ](https://github.com/netdata/netdata/blob/master/src/health/health.d/megacli.conf) | megacli.bbu_charge | MegaCLI Backup Battery Unit (adapter ${label:adapter_number}) average charge over the last minute |\n| [ megacli_bbu_recharge_cycles ](https://github.com/netdata/netdata/blob/master/src/health/health.d/megacli.conf) | megacli.bbu_recharge_cycles | MegaCLI Backup Battery Unit (adapter ${label:adapter_number}) average charge over the last minute |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per adapter\n\nThese metrics refer to the MegaCLI Adapter.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| adapter_number | Adapter number |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| megacli.adapter_health_state | optimal, degraded, partially_degraded, failed | state |\n\n### Per physical drive\n\nThese metrics refer to the MegaCLI Physical Drive.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| adapter_number | Adapter number |\n| wwn | World Wide Name |\n| slot_number | Slot number |\n| drive_position | Position (e.g. DiskGroup: 0, Span: 0, Arm: 2) |\n| drive_type | Type (e.g. SATA) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| megacli.phys_drive_media_errors_rate | media_errors | errors/s |\n| megacli.phys_drive_predictive_failures_rate | predictive_failures | failures/s |\n\n### Per backup battery unit\n\nThese metrics refer to the MegaCLI Backup Battery Unit.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| adapter_number | Adapter number |\n| battery_type | Battery type (e.g. BBU) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| megacli.bbu_relative_charge | charge | percentage |\n| megacli.bbu_recharge_cycles | recharge | cycles |\n| megacli.bbu_temperature | temperature | Celsius |\n\n",integration_type:"collector",id:"go.d.plugin-megacli-MegaCLI_MegaRAID",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/megacli/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-mongodb",plugin_name:"go.d.plugin",module_name:"mongodb",monitored_instance:{name:"MongoDB",link:"https://www.mongodb.com/",icon_filename:"mongodb.svg",categories:["data-collection.database-servers"]},keywords:["mongodb","databases"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# MongoDB\n\nPlugin: go.d.plugin\nModule: mongodb\n\n## Overview\n\nThis collector monitors MongoDB servers.\n\nExecuted queries:\n\n- [serverStatus](https://docs.mongodb.com/manual/reference/command/serverStatus/)\n- [dbStats](https://docs.mongodb.com/manual/reference/command/dbStats/)\n- [replSetGetStatus](https://www.mongodb.com/docs/manual/reference/command/replSetGetStatus/)\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Create a read-only user\n\nCreate a read-only user for Netdata in the admin database.\n\n- Authenticate as the admin user:\n\n ```bash\n use admin\n db.auth("admin", "")\n ```\n\n- Create a user:\n\n ```bash\n db.createUser({\n "user":"netdata",\n "pwd": "",\n "roles" : [\n {role: \'read\', db: \'admin\' },\n {role: \'clusterMonitor\', db: \'admin\'},\n {role: \'read\', db: \'local\' }\n ]\n })\n ```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/mongodb.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/mongodb.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| uri | MongoDB connection string. See [URI syntax](https://www.mongodb.com/docs/manual/reference/connection-string/). | mongodb://localhost:27017 | yes |\n| timeout | Query timeout in seconds. | 1 | no |\n| databases | Databases selector. Determines which database metrics will be collected. | | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n uri: mongodb://netdata:password@localhost:27017\n\n```\n{% /details %}\n##### With databases metrics\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n uri: mongodb://netdata:password@localhost:27017\n databases:\n includes:\n - "* *"\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n uri: mongodb://netdata:password@localhost:27017\n\n - name: remote\n uri: mongodb://netdata:password@203.0.113.0:27017\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `mongodb` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m mongodb\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n- WireTiger metrics are available only if [WiredTiger](https://docs.mongodb.com/v6.0/core/wiredtiger/) is used as the\n storage engine.\n- Sharding metrics are available on shards only\n for [mongos](https://www.mongodb.com/docs/manual/reference/program/mongos/).\n\n\n### Per MongoDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mongodb.operations_rate | reads, writes, commands | operations/s |\n| mongodb.operations_latency_time | reads, writes, commands | milliseconds |\n| mongodb.operations_by_type_rate | insert, query, update, delete, getmore, command | operations/s |\n| mongodb.document_operations_rate | inserted, deleted, returned, updated | operations/s |\n| mongodb.scanned_indexes_rate | scanned | indexes/s |\n| mongodb.scanned_documents_rate | scanned | documents/s |\n| mongodb.active_clients_count | readers, writers | clients |\n| mongodb.queued_operations_count | reads, writes | operations |\n| mongodb.cursors_open_count | open | cursors |\n| mongodb.cursors_open_no_timeout_count | open_no_timeout | cursors |\n| mongodb.cursors_opened_rate | opened | cursors/s |\n| mongodb.cursors_timed_out_rate | timed_out | cursors/s |\n| mongodb.cursors_by_lifespan_count | le_1s, 1s_5s, 5s_15s, 15s_30s, 30s_1m, 1m_10m, ge_10m | cursors |\n| mongodb.transactions_count | active, inactive, open, prepared | transactions |\n| mongodb.transactions_rate | started, aborted, committed, prepared | transactions/s |\n| mongodb.connections_usage | available, used | connections |\n| mongodb.connections_by_state_count | active, threaded, exhaust_is_master, exhaust_hello, awaiting_topology_changes | connections |\n| mongodb.connections_rate | created | connections/s |\n| mongodb.asserts_rate | regular, warning, msg, user, tripwire, rollovers | asserts/s |\n| mongodb.network_traffic_rate | in, out | bytes/s |\n| mongodb.network_requests_rate | requests | requests/s |\n| mongodb.network_slow_dns_resolutions_rate | slow_dns | resolutions/s |\n| mongodb.network_slow_ssl_handshakes_rate | slow_ssl | handshakes/s |\n| mongodb.memory_resident_size | used | bytes |\n| mongodb.memory_virtual_size | used | bytes |\n| mongodb.memory_page_faults_rate | pgfaults | pgfaults/s |\n| mongodb.memory_tcmalloc_stats | allocated, central_cache_freelist, transfer_cache_freelist, thread_cache_freelists, pageheap_freelist, pageheap_unmapped | bytes |\n| mongodb.wiredtiger_concurrent_read_transactions_usage | available, used | transactions |\n| mongodb.wiredtiger_concurrent_write_transactions_usage | available, used | transactions |\n| mongodb.wiredtiger_cache_usage | used | bytes |\n| mongodb.wiredtiger_cache_dirty_space_size | dirty | bytes |\n| mongodb.wiredtiger_cache_io_rate | read, written | pages/s |\n| mongodb.wiredtiger_cache_evictions_rate | unmodified, modified | pages/s |\n| mongodb.sharding_nodes_count | shard_aware, shard_unaware | nodes |\n| mongodb.sharding_sharded_databases_count | partitioned, unpartitioned | databases |\n| mongodb.sharding_sharded_collections_count | partitioned, unpartitioned | collections |\n\n### Per lock type\n\nThese metrics refer to the lock type.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| lock_type | lock type (e.g. global, database, collection, mutex) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mongodb.lock_acquisitions_rate | shared, exclusive, intent_shared, intent_exclusive | acquisitions/s |\n\n### Per commit type\n\nThese metrics refer to the commit type.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| commit_type | commit type (e.g. noShards, singleShard, singleWriteShard) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mongodb.transactions_commits_rate | success, fail | commits/s |\n| mongodb.transactions_commits_duration_time | commits | milliseconds |\n\n### Per database\n\nThese metrics refer to the database.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| database | database name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mongodb.database_collection_count | collections | collections |\n| mongodb.database_indexes_count | indexes | indexes |\n| mongodb.database_views_count | views | views |\n| mongodb.database_documents_count | documents | documents |\n| mongodb.database_data_size | data_size | bytes |\n| mongodb.database_storage_size | storage_size | bytes |\n| mongodb.database_index_size | index_size | bytes |\n\n### Per replica set member\n\nThese metrics refer to the replica set member.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| repl_set_member | replica set member name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mongodb.repl_set_member_state | primary, startup, secondary, recovering, startup2, unknown, arbiter, down, rollback, removed | state |\n| mongodb.repl_set_member_health_status | up, down | status |\n| mongodb.repl_set_member_replication_lag_time | replication_lag | milliseconds |\n| mongodb.repl_set_member_heartbeat_latency_time | heartbeat_latency | milliseconds |\n| mongodb.repl_set_member_ping_rtt_time | ping_rtt | milliseconds |\n| mongodb.repl_set_member_uptime | uptime | seconds |\n\n### Per shard\n\nThese metrics refer to the shard.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| shard_id | shard id |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mongodb.sharding_shard_chunks_count | chunks | chunks |\n\n",integration_type:"collector",id:"go.d.plugin-mongodb-MongoDB",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/mongodb/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-mariadb",plugin_name:"go.d.plugin",module_name:"mysql",monitored_instance:{name:"MariaDB",link:"https://mariadb.org/",icon_filename:"mariadb.svg",categories:["data-collection.database-servers"]},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["db","database","mysql","maria","mariadb","sql"],most_popular:!0},overview:'# MariaDB\n\nPlugin: go.d.plugin\nModule: mysql\n\n## Overview\n\nThis collector monitors the health and performance of MySQL servers and collects general statistics, replication and user metrics.\n\n\nIt connects to the MySQL instance via a TCP or UNIX socket and executes the following commands:\n\nExecuted queries:\n\n- `SELECT VERSION();`\n- `SHOW GLOBAL STATUS;`\n- `SHOW GLOBAL VARIABLES;`\n- `SHOW SLAVE STATUS;` or `SHOW ALL SLAVES STATUS;` (MariaDBv10.2+) or `SHOW REPLICA STATUS;` (MySQL 8.0.22+)\n- `SHOW USER_STATISTICS;` (MariaDBv10.1.1+)\n- `SELECT TIME,USER FROM INFORMATION_SCHEMA.PROCESSLIST;`\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by trying to connect as root and netdata using known MySQL TCP and UNIX sockets:\n\n- /var/run/mysqld/mysqld.sock\n- /var/run/mysqld/mysql.sock\n- /var/lib/mysql/mysql.sock\n- /tmp/mysql.sock\n- 127.0.0.1:3306\n- "[::1]:3306"\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n',setup:'## Setup\n\n### Prerequisites\n\n#### Create netdata user\n\nA user account should have the\nfollowing [permissions](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html):\n\n- [`USAGE`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_usage)\n- [`REPLICATION CLIENT`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-client)\n- [`PROCESS`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_process)\n\nTo create the `netdata` user with these permissions, execute the following in the MySQL shell:\n\n```mysql\nCREATE USER \'netdata\'@\'localhost\';\nGRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO \'netdata\'@\'localhost\';\nFLUSH PRIVILEGES;\n```\n\nThe `netdata` user will have the ability to connect to the MySQL server on localhost without a password. It will only\nbe able to gather statistics without being able to alter or affect operations in any way.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/mysql.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/mysql.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| dsn | MySQL server DSN (Data Source Name). See [DSN syntax](https://github.com/go-sql-driver/mysql#dsn-data-source-name). | root@tcp(localhost:3306)/ | yes |\n| my.cnf | Specifies the my.cnf file to read the connection settings from the [client] section. | | no |\n| timeout | Query timeout in seconds. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@tcp(127.0.0.1:3306)/\n\n```\n{% /details %}\n##### Unix socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@unix(/var/lib/mysql/mysql.sock)/\n\n```\n{% /details %}\n##### Connection with password\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netconfig:password@tcp(127.0.0.1:3306)/\n\n```\n{% /details %}\n##### my.cnf\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n my.cnf: \'/etc/my.cnf\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@tcp(127.0.0.1:3306)/\n\n - name: remote\n dsn: netconfig:password@tcp(203.0.113.0:3306)/\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `mysql` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m mysql\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ mysql_10s_slow_queries ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.queries | number of slow queries in the last 10 seconds |\n| [ mysql_10s_table_locks_immediate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | number of table immediate locks in the last 10 seconds |\n| [ mysql_10s_table_locks_waited ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | number of table waited locks in the last 10 seconds |\n| [ mysql_10s_waited_locks_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | ratio of waited table locks over the last 10 seconds |\n| [ mysql_connections ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.connections_active | client connections utilization |\n| [ mysql_replication ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.slave_status | replication status (0: stopped, 1: working) |\n| [ mysql_replication_lag ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.slave_behind | difference between the timestamp of the latest transaction processed by the SQL thread and the timestamp of the same transaction when it was processed on the master |\n| [ mysql_galera_cluster_size_max_2m ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_size | maximum galera cluster size in the last 2 minutes starting one minute ago |\n| [ mysql_galera_cluster_size ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_size | current galera cluster size, compared to the maximum size in the last 2 minutes |\n| [ mysql_galera_cluster_state_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_state | galera node state is either Donor/Desynced or Joined |\n| [ mysql_galera_cluster_state_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_state | galera node state is either Undefined or Joining or Error |\n| [ mysql_galera_cluster_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_status | galera node is part of a nonoperational component. This occurs in cases of multiple membership changes that result in a loss of Quorum or in cases of split-brain situations. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per MariaDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.net | in, out | kilobits/s | \u2022 | \u2022 | \u2022 |\n| mysql.queries | queries, questions, slow_queries | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.queries_type | select, delete, update, insert, replace | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.handlers | commit, delete, prepare, read_first, read_key, read_next, read_prev, read_rnd, read_rnd_next, rollback, savepoint, savepointrollback, update, write | handlers/s | \u2022 | \u2022 | \u2022 |\n| mysql.table_open_cache_overflows | open_cache | overflows/s | \u2022 | \u2022 | \u2022 |\n| mysql.table_locks | immediate, waited | locks/s | \u2022 | \u2022 | \u2022 |\n| mysql.join_issues | full_join, full_range_join, range, range_check, scan | joins/s | \u2022 | \u2022 | \u2022 |\n| mysql.sort_issues | merge_passes, range, scan | issues/s | \u2022 | \u2022 | \u2022 |\n| mysql.tmp | disk_tables, files, tables | events/s | \u2022 | \u2022 | \u2022 |\n| mysql.connections | all, aborted | connections/s | \u2022 | \u2022 | \u2022 |\n| mysql.connections_active | active, limit, max_active | connections | \u2022 | \u2022 | \u2022 |\n| mysql.threads | connected, cached, running | threads | \u2022 | \u2022 | \u2022 |\n| mysql.threads_created | created | threads/s | \u2022 | \u2022 | \u2022 |\n| mysql.thread_cache_misses | misses | misses | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io | read, write | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io_ops | reads, writes, fsyncs | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io_pending_ops | reads, writes, fsyncs | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_log | waits, write_requests, writes | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_cur_row_lock | current waits | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_rows | inserted, read, updated, deleted | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_pages | data, dirty, free, misc, total | pages | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_pages_flushed | flush_pages | requests/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_bytes | data, dirty | MiB | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_read_ahead | all, evicted | pages/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_read_ahead_rnd | read-ahead | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_ops | disk_reads, wait_free | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log | fsyncs, writes | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log_fsync_writes | fsyncs | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log_io | write | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_deadlocks | deadlocks | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.files | files | files | \u2022 | \u2022 | \u2022 |\n| mysql.files_rate | files | files/s | \u2022 | \u2022 | \u2022 |\n| mysql.connection_errors | accept, internal, max, peer_addr, select, tcpwrap | errors/s | \u2022 | \u2022 | \u2022 |\n| mysql.opened_tables | tables | tables/s | \u2022 | \u2022 | \u2022 |\n| mysql.open_tables | cache, tables | tables | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_fetch_query_duration | duration | milliseconds | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_queries_count | system, user | queries | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_longest_query_duration | duration | seconds | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_ops | hits, lowmem_prunes, inserts, not_cached | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.qcache | queries | queries | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_freemem | free | MiB | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_memblocks | free, total | blocks | \u2022 | \u2022 | \u2022 |\n| mysql.galera_writesets | rx, tx | writesets/s | \u2022 | \u2022 | \u2022 |\n| mysql.galera_bytes | rx, tx | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.galera_queue | rx, tx | writesets | \u2022 | \u2022 | \u2022 |\n| mysql.galera_conflicts | bf_aborts, cert_fails | transactions | \u2022 | \u2022 | \u2022 |\n| mysql.galera_flow_control | paused | ms | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_status | primary, non_primary, disconnected | status | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_state | undefined, joining, donor, joined, synced, error | state | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_size | nodes | nodes | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_weight | weight | weight | \u2022 | \u2022 | \u2022 |\n| mysql.galera_connected | connected | boolean | \u2022 | \u2022 | \u2022 |\n| mysql.galera_ready | ready | boolean | \u2022 | \u2022 | \u2022 |\n| mysql.galera_open_transactions | open | transactions | \u2022 | \u2022 | \u2022 |\n| mysql.galera_thread_count | threads | threads | \u2022 | \u2022 | \u2022 |\n| mysql.key_blocks | unused, used, not_flushed | blocks | \u2022 | \u2022 | \u2022 |\n| mysql.key_requests | reads, writes | requests/s | \u2022 | \u2022 | \u2022 |\n| mysql.key_disk_ops | reads, writes | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.binlog_cache | disk, all | transactions/s | \u2022 | \u2022 | \u2022 |\n| mysql.binlog_stmt_cache | disk, all | statements/s | \u2022 | \u2022 | \u2022 |\n\n### Per connection\n\nThese metrics refer to the replication connection.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.slave_behind | seconds | seconds | \u2022 | \u2022 | \u2022 |\n| mysql.slave_status | sql_running, io_running | boolean | \u2022 | \u2022 | \u2022 |\n\n### Per user\n\nThese metrics refer to the MySQL user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| user | username |\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.userstats_cpu | used | percentage | | \u2022 | \u2022 |\n| mysql.userstats_rows | read, sent, updated, inserted, deleted | operations/s | | \u2022 | \u2022 |\n| mysql.userstats_commands | select, update, other | commands/s | | \u2022 | \u2022 |\n| mysql.userstats_denied_commands | denied | commands/s | | \u2022 | \u2022 |\n| mysql.userstats_created_transactions | commit, rollback | transactions/s | | \u2022 | \u2022 |\n| mysql.userstats_binlog_written | written | B/s | | \u2022 | \u2022 |\n| mysql.userstats_empty_queries | empty | queries/s | | \u2022 | \u2022 |\n| mysql.userstats_connections | created | connections/s | | \u2022 | \u2022 |\n| mysql.userstats_lost_connections | lost | connections/s | | \u2022 | \u2022 |\n| mysql.userstats_denied_connections | denied | connections/s | | \u2022 | \u2022 |\n\n",integration_type:"collector",id:"go.d.plugin-mysql-MariaDB",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/mysql/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-mysql",plugin_name:"go.d.plugin",module_name:"mysql",monitored_instance:{name:"MySQL",link:"https://www.mysql.com/",categories:["data-collection.database-servers"],icon_filename:"mysql.svg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["db","database","mysql","maria","mariadb","sql"],most_popular:!0},overview:'# MySQL\n\nPlugin: go.d.plugin\nModule: mysql\n\n## Overview\n\nThis collector monitors the health and performance of MySQL servers and collects general statistics, replication and user metrics.\n\n\nIt connects to the MySQL instance via a TCP or UNIX socket and executes the following commands:\n\nExecuted queries:\n\n- `SELECT VERSION();`\n- `SHOW GLOBAL STATUS;`\n- `SHOW GLOBAL VARIABLES;`\n- `SHOW SLAVE STATUS;` or `SHOW ALL SLAVES STATUS;` (MariaDBv10.2+) or `SHOW REPLICA STATUS;` (MySQL 8.0.22+)\n- `SHOW USER_STATISTICS;` (MariaDBv10.1.1+)\n- `SELECT TIME,USER FROM INFORMATION_SCHEMA.PROCESSLIST;`\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by trying to connect as root and netdata using known MySQL TCP and UNIX sockets:\n\n- /var/run/mysqld/mysqld.sock\n- /var/run/mysqld/mysql.sock\n- /var/lib/mysql/mysql.sock\n- /tmp/mysql.sock\n- 127.0.0.1:3306\n- "[::1]:3306"\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n',setup:'## Setup\n\n### Prerequisites\n\n#### Create netdata user\n\nA user account should have the\nfollowing [permissions](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html):\n\n- [`USAGE`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_usage)\n- [`REPLICATION CLIENT`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-client)\n- [`PROCESS`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_process)\n\nTo create the `netdata` user with these permissions, execute the following in the MySQL shell:\n\n```mysql\nCREATE USER \'netdata\'@\'localhost\';\nGRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO \'netdata\'@\'localhost\';\nFLUSH PRIVILEGES;\n```\n\nThe `netdata` user will have the ability to connect to the MySQL server on localhost without a password. It will only\nbe able to gather statistics without being able to alter or affect operations in any way.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/mysql.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/mysql.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| dsn | MySQL server DSN (Data Source Name). See [DSN syntax](https://github.com/go-sql-driver/mysql#dsn-data-source-name). | root@tcp(localhost:3306)/ | yes |\n| my.cnf | Specifies the my.cnf file to read the connection settings from the [client] section. | | no |\n| timeout | Query timeout in seconds. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@tcp(127.0.0.1:3306)/\n\n```\n{% /details %}\n##### Unix socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@unix(/var/lib/mysql/mysql.sock)/\n\n```\n{% /details %}\n##### Connection with password\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netconfig:password@tcp(127.0.0.1:3306)/\n\n```\n{% /details %}\n##### my.cnf\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n my.cnf: \'/etc/my.cnf\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@tcp(127.0.0.1:3306)/\n\n - name: remote\n dsn: netconfig:password@tcp(203.0.113.0:3306)/\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `mysql` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m mysql\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ mysql_10s_slow_queries ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.queries | number of slow queries in the last 10 seconds |\n| [ mysql_10s_table_locks_immediate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | number of table immediate locks in the last 10 seconds |\n| [ mysql_10s_table_locks_waited ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | number of table waited locks in the last 10 seconds |\n| [ mysql_10s_waited_locks_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | ratio of waited table locks over the last 10 seconds |\n| [ mysql_connections ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.connections_active | client connections utilization |\n| [ mysql_replication ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.slave_status | replication status (0: stopped, 1: working) |\n| [ mysql_replication_lag ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.slave_behind | difference between the timestamp of the latest transaction processed by the SQL thread and the timestamp of the same transaction when it was processed on the master |\n| [ mysql_galera_cluster_size_max_2m ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_size | maximum galera cluster size in the last 2 minutes starting one minute ago |\n| [ mysql_galera_cluster_size ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_size | current galera cluster size, compared to the maximum size in the last 2 minutes |\n| [ mysql_galera_cluster_state_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_state | galera node state is either Donor/Desynced or Joined |\n| [ mysql_galera_cluster_state_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_state | galera node state is either Undefined or Joining or Error |\n| [ mysql_galera_cluster_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_status | galera node is part of a nonoperational component. This occurs in cases of multiple membership changes that result in a loss of Quorum or in cases of split-brain situations. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per MariaDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.net | in, out | kilobits/s | \u2022 | \u2022 | \u2022 |\n| mysql.queries | queries, questions, slow_queries | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.queries_type | select, delete, update, insert, replace | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.handlers | commit, delete, prepare, read_first, read_key, read_next, read_prev, read_rnd, read_rnd_next, rollback, savepoint, savepointrollback, update, write | handlers/s | \u2022 | \u2022 | \u2022 |\n| mysql.table_open_cache_overflows | open_cache | overflows/s | \u2022 | \u2022 | \u2022 |\n| mysql.table_locks | immediate, waited | locks/s | \u2022 | \u2022 | \u2022 |\n| mysql.join_issues | full_join, full_range_join, range, range_check, scan | joins/s | \u2022 | \u2022 | \u2022 |\n| mysql.sort_issues | merge_passes, range, scan | issues/s | \u2022 | \u2022 | \u2022 |\n| mysql.tmp | disk_tables, files, tables | events/s | \u2022 | \u2022 | \u2022 |\n| mysql.connections | all, aborted | connections/s | \u2022 | \u2022 | \u2022 |\n| mysql.connections_active | active, limit, max_active | connections | \u2022 | \u2022 | \u2022 |\n| mysql.threads | connected, cached, running | threads | \u2022 | \u2022 | \u2022 |\n| mysql.threads_created | created | threads/s | \u2022 | \u2022 | \u2022 |\n| mysql.thread_cache_misses | misses | misses | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io | read, write | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io_ops | reads, writes, fsyncs | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io_pending_ops | reads, writes, fsyncs | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_log | waits, write_requests, writes | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_cur_row_lock | current waits | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_rows | inserted, read, updated, deleted | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_pages | data, dirty, free, misc, total | pages | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_pages_flushed | flush_pages | requests/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_bytes | data, dirty | MiB | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_read_ahead | all, evicted | pages/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_read_ahead_rnd | read-ahead | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_ops | disk_reads, wait_free | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log | fsyncs, writes | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log_fsync_writes | fsyncs | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log_io | write | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_deadlocks | deadlocks | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.files | files | files | \u2022 | \u2022 | \u2022 |\n| mysql.files_rate | files | files/s | \u2022 | \u2022 | \u2022 |\n| mysql.connection_errors | accept, internal, max, peer_addr, select, tcpwrap | errors/s | \u2022 | \u2022 | \u2022 |\n| mysql.opened_tables | tables | tables/s | \u2022 | \u2022 | \u2022 |\n| mysql.open_tables | cache, tables | tables | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_fetch_query_duration | duration | milliseconds | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_queries_count | system, user | queries | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_longest_query_duration | duration | seconds | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_ops | hits, lowmem_prunes, inserts, not_cached | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.qcache | queries | queries | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_freemem | free | MiB | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_memblocks | free, total | blocks | \u2022 | \u2022 | \u2022 |\n| mysql.galera_writesets | rx, tx | writesets/s | \u2022 | \u2022 | \u2022 |\n| mysql.galera_bytes | rx, tx | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.galera_queue | rx, tx | writesets | \u2022 | \u2022 | \u2022 |\n| mysql.galera_conflicts | bf_aborts, cert_fails | transactions | \u2022 | \u2022 | \u2022 |\n| mysql.galera_flow_control | paused | ms | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_status | primary, non_primary, disconnected | status | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_state | undefined, joining, donor, joined, synced, error | state | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_size | nodes | nodes | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_weight | weight | weight | \u2022 | \u2022 | \u2022 |\n| mysql.galera_connected | connected | boolean | \u2022 | \u2022 | \u2022 |\n| mysql.galera_ready | ready | boolean | \u2022 | \u2022 | \u2022 |\n| mysql.galera_open_transactions | open | transactions | \u2022 | \u2022 | \u2022 |\n| mysql.galera_thread_count | threads | threads | \u2022 | \u2022 | \u2022 |\n| mysql.key_blocks | unused, used, not_flushed | blocks | \u2022 | \u2022 | \u2022 |\n| mysql.key_requests | reads, writes | requests/s | \u2022 | \u2022 | \u2022 |\n| mysql.key_disk_ops | reads, writes | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.binlog_cache | disk, all | transactions/s | \u2022 | \u2022 | \u2022 |\n| mysql.binlog_stmt_cache | disk, all | statements/s | \u2022 | \u2022 | \u2022 |\n\n### Per connection\n\nThese metrics refer to the replication connection.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.slave_behind | seconds | seconds | \u2022 | \u2022 | \u2022 |\n| mysql.slave_status | sql_running, io_running | boolean | \u2022 | \u2022 | \u2022 |\n\n### Per user\n\nThese metrics refer to the MySQL user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| user | username |\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.userstats_cpu | used | percentage | | \u2022 | \u2022 |\n| mysql.userstats_rows | read, sent, updated, inserted, deleted | operations/s | | \u2022 | \u2022 |\n| mysql.userstats_commands | select, update, other | commands/s | | \u2022 | \u2022 |\n| mysql.userstats_denied_commands | denied | commands/s | | \u2022 | \u2022 |\n| mysql.userstats_created_transactions | commit, rollback | transactions/s | | \u2022 | \u2022 |\n| mysql.userstats_binlog_written | written | B/s | | \u2022 | \u2022 |\n| mysql.userstats_empty_queries | empty | queries/s | | \u2022 | \u2022 |\n| mysql.userstats_connections | created | connections/s | | \u2022 | \u2022 |\n| mysql.userstats_lost_connections | lost | connections/s | | \u2022 | \u2022 |\n| mysql.userstats_denied_connections | denied | connections/s | | \u2022 | \u2022 |\n\n",integration_type:"collector",id:"go.d.plugin-mysql-MySQL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/mysql/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-percona_mysql",plugin_name:"go.d.plugin",module_name:"mysql",monitored_instance:{name:"Percona MySQL",link:"https://www.percona.com/software/mysql-database/percona-server",icon_filename:"percona.svg",categories:["data-collection.database-servers"]},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},info_provided_to_referring_integrations:{description:""},keywords:["db","database","mysql","maria","mariadb","sql"],most_popular:!1},overview:'# Percona MySQL\n\nPlugin: go.d.plugin\nModule: mysql\n\n## Overview\n\nThis collector monitors the health and performance of MySQL servers and collects general statistics, replication and user metrics.\n\n\nIt connects to the MySQL instance via a TCP or UNIX socket and executes the following commands:\n\nExecuted queries:\n\n- `SELECT VERSION();`\n- `SHOW GLOBAL STATUS;`\n- `SHOW GLOBAL VARIABLES;`\n- `SHOW SLAVE STATUS;` or `SHOW ALL SLAVES STATUS;` (MariaDBv10.2+) or `SHOW REPLICA STATUS;` (MySQL 8.0.22+)\n- `SHOW USER_STATISTICS;` (MariaDBv10.1.1+)\n- `SELECT TIME,USER FROM INFORMATION_SCHEMA.PROCESSLIST;`\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by trying to connect as root and netdata using known MySQL TCP and UNIX sockets:\n\n- /var/run/mysqld/mysqld.sock\n- /var/run/mysqld/mysql.sock\n- /var/lib/mysql/mysql.sock\n- /tmp/mysql.sock\n- 127.0.0.1:3306\n- "[::1]:3306"\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n',setup:'## Setup\n\n### Prerequisites\n\n#### Create netdata user\n\nA user account should have the\nfollowing [permissions](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html):\n\n- [`USAGE`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_usage)\n- [`REPLICATION CLIENT`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-client)\n- [`PROCESS`](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_process)\n\nTo create the `netdata` user with these permissions, execute the following in the MySQL shell:\n\n```mysql\nCREATE USER \'netdata\'@\'localhost\';\nGRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO \'netdata\'@\'localhost\';\nFLUSH PRIVILEGES;\n```\n\nThe `netdata` user will have the ability to connect to the MySQL server on localhost without a password. It will only\nbe able to gather statistics without being able to alter or affect operations in any way.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/mysql.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/mysql.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| dsn | MySQL server DSN (Data Source Name). See [DSN syntax](https://github.com/go-sql-driver/mysql#dsn-data-source-name). | root@tcp(localhost:3306)/ | yes |\n| my.cnf | Specifies the my.cnf file to read the connection settings from the [client] section. | | no |\n| timeout | Query timeout in seconds. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@tcp(127.0.0.1:3306)/\n\n```\n{% /details %}\n##### Unix socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@unix(/var/lib/mysql/mysql.sock)/\n\n```\n{% /details %}\n##### Connection with password\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netconfig:password@tcp(127.0.0.1:3306)/\n\n```\n{% /details %}\n##### my.cnf\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n my.cnf: \'/etc/my.cnf\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: netdata@tcp(127.0.0.1:3306)/\n\n - name: remote\n dsn: netconfig:password@tcp(203.0.113.0:3306)/\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `mysql` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m mysql\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ mysql_10s_slow_queries ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.queries | number of slow queries in the last 10 seconds |\n| [ mysql_10s_table_locks_immediate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | number of table immediate locks in the last 10 seconds |\n| [ mysql_10s_table_locks_waited ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | number of table waited locks in the last 10 seconds |\n| [ mysql_10s_waited_locks_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.table_locks | ratio of waited table locks over the last 10 seconds |\n| [ mysql_connections ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.connections_active | client connections utilization |\n| [ mysql_replication ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.slave_status | replication status (0: stopped, 1: working) |\n| [ mysql_replication_lag ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.slave_behind | difference between the timestamp of the latest transaction processed by the SQL thread and the timestamp of the same transaction when it was processed on the master |\n| [ mysql_galera_cluster_size_max_2m ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_size | maximum galera cluster size in the last 2 minutes starting one minute ago |\n| [ mysql_galera_cluster_size ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_size | current galera cluster size, compared to the maximum size in the last 2 minutes |\n| [ mysql_galera_cluster_state_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_state | galera node state is either Donor/Desynced or Joined |\n| [ mysql_galera_cluster_state_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_state | galera node state is either Undefined or Joining or Error |\n| [ mysql_galera_cluster_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mysql.conf) | mysql.galera_cluster_status | galera node is part of a nonoperational component. This occurs in cases of multiple membership changes that result in a loss of Quorum or in cases of split-brain situations. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per MariaDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.net | in, out | kilobits/s | \u2022 | \u2022 | \u2022 |\n| mysql.queries | queries, questions, slow_queries | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.queries_type | select, delete, update, insert, replace | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.handlers | commit, delete, prepare, read_first, read_key, read_next, read_prev, read_rnd, read_rnd_next, rollback, savepoint, savepointrollback, update, write | handlers/s | \u2022 | \u2022 | \u2022 |\n| mysql.table_open_cache_overflows | open_cache | overflows/s | \u2022 | \u2022 | \u2022 |\n| mysql.table_locks | immediate, waited | locks/s | \u2022 | \u2022 | \u2022 |\n| mysql.join_issues | full_join, full_range_join, range, range_check, scan | joins/s | \u2022 | \u2022 | \u2022 |\n| mysql.sort_issues | merge_passes, range, scan | issues/s | \u2022 | \u2022 | \u2022 |\n| mysql.tmp | disk_tables, files, tables | events/s | \u2022 | \u2022 | \u2022 |\n| mysql.connections | all, aborted | connections/s | \u2022 | \u2022 | \u2022 |\n| mysql.connections_active | active, limit, max_active | connections | \u2022 | \u2022 | \u2022 |\n| mysql.threads | connected, cached, running | threads | \u2022 | \u2022 | \u2022 |\n| mysql.threads_created | created | threads/s | \u2022 | \u2022 | \u2022 |\n| mysql.thread_cache_misses | misses | misses | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io | read, write | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io_ops | reads, writes, fsyncs | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_io_pending_ops | reads, writes, fsyncs | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_log | waits, write_requests, writes | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_cur_row_lock | current waits | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_rows | inserted, read, updated, deleted | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_pages | data, dirty, free, misc, total | pages | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_pages_flushed | flush_pages | requests/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_bytes | data, dirty | MiB | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_read_ahead | all, evicted | pages/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_read_ahead_rnd | read-ahead | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_buffer_pool_ops | disk_reads, wait_free | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log | fsyncs, writes | operations | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log_fsync_writes | fsyncs | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_os_log_io | write | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.innodb_deadlocks | deadlocks | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.files | files | files | \u2022 | \u2022 | \u2022 |\n| mysql.files_rate | files | files/s | \u2022 | \u2022 | \u2022 |\n| mysql.connection_errors | accept, internal, max, peer_addr, select, tcpwrap | errors/s | \u2022 | \u2022 | \u2022 |\n| mysql.opened_tables | tables | tables/s | \u2022 | \u2022 | \u2022 |\n| mysql.open_tables | cache, tables | tables | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_fetch_query_duration | duration | milliseconds | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_queries_count | system, user | queries | \u2022 | \u2022 | \u2022 |\n| mysql.process_list_longest_query_duration | duration | seconds | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_ops | hits, lowmem_prunes, inserts, not_cached | queries/s | \u2022 | \u2022 | \u2022 |\n| mysql.qcache | queries | queries | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_freemem | free | MiB | \u2022 | \u2022 | \u2022 |\n| mysql.qcache_memblocks | free, total | blocks | \u2022 | \u2022 | \u2022 |\n| mysql.galera_writesets | rx, tx | writesets/s | \u2022 | \u2022 | \u2022 |\n| mysql.galera_bytes | rx, tx | KiB/s | \u2022 | \u2022 | \u2022 |\n| mysql.galera_queue | rx, tx | writesets | \u2022 | \u2022 | \u2022 |\n| mysql.galera_conflicts | bf_aborts, cert_fails | transactions | \u2022 | \u2022 | \u2022 |\n| mysql.galera_flow_control | paused | ms | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_status | primary, non_primary, disconnected | status | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_state | undefined, joining, donor, joined, synced, error | state | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_size | nodes | nodes | \u2022 | \u2022 | \u2022 |\n| mysql.galera_cluster_weight | weight | weight | \u2022 | \u2022 | \u2022 |\n| mysql.galera_connected | connected | boolean | \u2022 | \u2022 | \u2022 |\n| mysql.galera_ready | ready | boolean | \u2022 | \u2022 | \u2022 |\n| mysql.galera_open_transactions | open | transactions | \u2022 | \u2022 | \u2022 |\n| mysql.galera_thread_count | threads | threads | \u2022 | \u2022 | \u2022 |\n| mysql.key_blocks | unused, used, not_flushed | blocks | \u2022 | \u2022 | \u2022 |\n| mysql.key_requests | reads, writes | requests/s | \u2022 | \u2022 | \u2022 |\n| mysql.key_disk_ops | reads, writes | operations/s | \u2022 | \u2022 | \u2022 |\n| mysql.binlog_cache | disk, all | transactions/s | \u2022 | \u2022 | \u2022 |\n| mysql.binlog_stmt_cache | disk, all | statements/s | \u2022 | \u2022 | \u2022 |\n\n### Per connection\n\nThese metrics refer to the replication connection.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.slave_behind | seconds | seconds | \u2022 | \u2022 | \u2022 |\n| mysql.slave_status | sql_running, io_running | boolean | \u2022 | \u2022 | \u2022 |\n\n### Per user\n\nThese metrics refer to the MySQL user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| user | username |\n\nMetrics:\n\n| Metric | Dimensions | Unit | MySQL | MariaDB | Percona |\n|:------|:----------|:----|:---:|:---:|:---:|\n| mysql.userstats_cpu | used | percentage | | \u2022 | \u2022 |\n| mysql.userstats_rows | read, sent, updated, inserted, deleted | operations/s | | \u2022 | \u2022 |\n| mysql.userstats_commands | select, update, other | commands/s | | \u2022 | \u2022 |\n| mysql.userstats_denied_commands | denied | commands/s | | \u2022 | \u2022 |\n| mysql.userstats_created_transactions | commit, rollback | transactions/s | | \u2022 | \u2022 |\n| mysql.userstats_binlog_written | written | B/s | | \u2022 | \u2022 |\n| mysql.userstats_empty_queries | empty | queries/s | | \u2022 | \u2022 |\n| mysql.userstats_connections | created | connections/s | | \u2022 | \u2022 |\n| mysql.userstats_lost_connections | lost | connections/s | | \u2022 | \u2022 |\n| mysql.userstats_denied_connections | denied | connections/s | | \u2022 | \u2022 |\n\n",integration_type:"collector",id:"go.d.plugin-mysql-Percona_MySQL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/mysql/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-nginx",plugin_name:"go.d.plugin",module_name:"nginx",monitored_instance:{name:"NGINX",link:"https://www.nginx.com/",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"nginx.svg"},related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"go.d.plugin",module_name:"web_log"},{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},alternative_monitored_instances:[],info_provided_to_referring_integrations:{description:""},keywords:["nginx","web","webserver","http","proxy"],most_popular:!0},overview:"# NGINX\n\nPlugin: go.d.plugin\nModule: nginx\n\n## Overview\n\nThis collector monitors the activity and performance of NGINX servers, and collects metrics such as the number of connections, their status, and client requests.\n\n\nIt sends HTTP requests to the NGINX location [stub-status](https://nginx.org/en/docs/http/ngx_http_stub_status_module.html), which is a built-in location that provides metrics about the NGINX server.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects NGINX instances running on localhost that are listening on port 80.\nOn startup, it tries to collect metrics from:\n\n- http://127.0.0.1/basic_status\n- http://localhost/stub_status\n- http://127.0.0.1/stub_status\n- http://127.0.0.1/nginx_status\n- http://127.0.0.1/status\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable status support\n\nConfigure [ngx_http_stub_status_module](https://nginx.org/en/docs/http/ngx_http_stub_status_module.html).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/nginx.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/nginx.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/stub_status | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/stub_status\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/stub_status\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nNGINX with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/stub_status\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/stub_status\n\n - name: remote\n url: http://192.0.2.1/stub_status\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `nginx` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m nginx\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per NGINX instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginx.connections | active | connections |\n| nginx.connections_status | reading, writing, idle | connections |\n| nginx.connections_accepted_handled | accepted, handled | connections/s |\n| nginx.requests | requests | requests/s |\n\n",integration_type:"collector",id:"go.d.plugin-nginx-NGINX",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/nginx/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-nginxplus",plugin_name:"go.d.plugin",module_name:"nginxplus",monitored_instance:{name:"NGINX Plus",link:"https://www.nginx.com/products/nginx/",icon_filename:"nginxplus.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["nginxplus","nginx","web","webserver","http","proxy"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# NGINX Plus\n\nPlugin: go.d.plugin\nModule: nginxplus\n\n## Overview\n\nThis collector monitors NGINX Plus servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Config API\n\nTo configure API, see the [official documentation](https://docs.nginx.com/nginx/admin-guide/monitoring/live-activity-monitoring/#configuring-the-api).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/nginxplus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/nginxplus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nNGINX Plus with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1\n\n - name: remote\n url: http://192.0.2.1\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `nginxplus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m nginxplus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per NGINX Plus instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.client_connections_rate | accepted, dropped | connections/s |\n| nginxplus.client_connections_count | active, idle | connections |\n| nginxplus.ssl_handshakes_rate | successful, failed | handshakes/s |\n| nginxplus.ssl_handshakes_failures_rate | no_common_protocol, no_common_cipher, timeout, peer_rejected_cert | failures/s |\n| nginxplus.ssl_verification_errors_rate | no_cert, expired_cert, revoked_cert, hostname_mismatch, other | errors/s |\n| nginxplus.ssl_session_reuses_rate | ssl_session | reuses/s |\n| nginxplus.http_requests_rate | requests | requests/s |\n| nginxplus.http_requests_count | requests | requests |\n| nginxplus.uptime | uptime | seconds |\n\n### Per http server zone\n\nThese metrics refer to the HTTP server zone.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| http_server_zone | HTTP server zone name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.http_server_zone_requests_rate | requests | requests/s |\n| nginxplus.http_server_zone_responses_per_code_class_rate | 1xx, 2xx, 3xx, 4xx, 5xx | responses/s |\n| nginxplus.http_server_zone_traffic_rate | received, sent | bytes/s |\n| nginxplus.http_server_zone_requests_processing_count | processing | requests |\n| nginxplus.http_server_zone_requests_discarded_rate | discarded | requests/s |\n\n### Per http location zone\n\nThese metrics refer to the HTTP location zone.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| http_location_zone | HTTP location zone name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.http_location_zone_requests_rate | requests | requests/s |\n| nginxplus.http_location_zone_responses_per_code_class_rate | 1xx, 2xx, 3xx, 4xx, 5xx | responses/s |\n| nginxplus.http_location_zone_traffic_rate | received, sent | bytes/s |\n| nginxplus.http_location_zone_requests_discarded_rate | discarded | requests/s |\n\n### Per http upstream\n\nThese metrics refer to the HTTP upstream.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| http_upstream_name | HTTP upstream name |\n| http_upstream_zone | HTTP upstream zone name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.http_upstream_peers_count | peers | peers |\n| nginxplus.http_upstream_zombies_count | zombie | servers |\n| nginxplus.http_upstream_keepalive_count | keepalive | connections |\n\n### Per http upstream server\n\nThese metrics refer to the HTTP upstream server.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| http_upstream_name | HTTP upstream name |\n| http_upstream_zone | HTTP upstream zone name |\n| http_upstream_server_address | HTTP upstream server address (e.g. 127.0.0.1:81) |\n| http_upstream_server_name | HTTP upstream server name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.http_upstream_server_requests_rate | requests | requests/s |\n| nginxplus.http_upstream_server_responses_per_code_class_rate | 1xx, 2xx, 3xx, 4xx, 5xx | responses/s |\n| nginxplus.http_upstream_server_response_time | response | milliseconds |\n| nginxplus.http_upstream_server_response_header_time | header | milliseconds |\n| nginxplus.http_upstream_server_traffic_rate | received, sent | bytes/s |\n| nginxplus.http_upstream_server_state | up, down, draining, unavail, checking, unhealthy | state |\n| nginxplus.http_upstream_server_connections_count | active | connections |\n| nginxplus.http_upstream_server_downtime | downtime | seconds |\n\n### Per http cache\n\nThese metrics refer to the HTTP cache.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| http_cache | HTTP cache name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.http_cache_state | warm, cold | state |\n| nginxplus.http_cache_iops | served, written, bypass | responses/s |\n| nginxplus.http_cache_io | served, written, bypass | bytes/s |\n| nginxplus.http_cache_size | size | bytes |\n\n### Per stream server zone\n\nThese metrics refer to the Stream server zone.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| stream_server_zone | Stream server zone name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.stream_server_zone_connections_rate | accepted | connections/s |\n| nginxplus.stream_server_zone_sessions_per_code_class_rate | 2xx, 4xx, 5xx | sessions/s |\n| nginxplus.stream_server_zone_traffic_rate | received, sent | bytes/s |\n| nginxplus.stream_server_zone_connections_processing_count | processing | connections |\n| nginxplus.stream_server_zone_connections_discarded_rate | discarded | connections/s |\n\n### Per stream upstream\n\nThese metrics refer to the Stream upstream.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| stream_upstream_name | Stream upstream name |\n| stream_upstream_zone | Stream upstream zone name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.stream_upstream_peers_count | peers | peers |\n| nginxplus.stream_upstream_zombies_count | zombie | servers |\n\n### Per stream upstream server\n\nThese metrics refer to the Stream upstream server.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| stream_upstream_name | Stream upstream name |\n| stream_upstream_zone | Stream upstream zone name |\n| stream_upstream_server_address | Stream upstream server address (e.g. 127.0.0.1:12346) |\n| stream_upstream_server_name | Stream upstream server name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.stream_upstream_server_connections_rate | forwarded | connections/s |\n| nginxplus.stream_upstream_server_traffic_rate | received, sent | bytes/s |\n| nginxplus.stream_upstream_server_state | up, down, unavail, checking, unhealthy | state |\n| nginxplus.stream_upstream_server_downtime | downtime | seconds |\n| nginxplus.stream_upstream_server_connections_count | active | connections |\n\n### Per resolver zone\n\nThese metrics refer to the resolver zone.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| resolver_zone | resolver zone name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxplus.resolver_zone_requests_rate | name, srv, addr | requests/s |\n| nginxplus.resolver_zone_responses_rate | noerror, formerr, servfail, nxdomain, notimp, refused, timedout, unknown | responses/s |\n\n",integration_type:"collector",id:"go.d.plugin-nginxplus-NGINX_Plus",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/nginxplus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-nginxvts",plugin_name:"go.d.plugin",module_name:"nginxvts",monitored_instance:{name:"NGINX VTS",link:"https://www.nginx.com/",icon_filename:"nginx.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["webserver"],related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"weblog"},{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# NGINX VTS\n\nPlugin: go.d.plugin\nModule: nginxvts\n\n## Overview\n\nThis collector monitors NGINX servers with [virtual host traffic status module](https://github.com/vozlt/nginx-module-vts).\n\n\nIt sends HTTP requests to the NGINX VTS location [status](https://github.com/vozlt/nginx-module-vts#synopsis), \nwhich is a built-in location that provides metrics about the NGINX VTS server.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects NGINX instances running on localhost.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure nginx-vts module\n\nTo configure nginx-vts, see the [https://github.com/vozlt/nginx-module-vts#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/nginxvts.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/nginxvts.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/status/format/json | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/status/format/json\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/server-status?auto\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1/status/format/json\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/status/format/json\n\n - name: remote\n url: http://192.0.2.1/status/format/json\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `nginxvts` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m nginxvts\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per NGINX VTS instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nginxvts.requests_total | requests | requests/s |\n| nginxvts.active_connections | active | connections |\n| nginxvts.connections_total | reading, writing, waiting, accepted, handled | connections/s |\n| nginxvts.uptime | uptime | seconds |\n| nginxvts.shm_usage | max, used | bytes |\n| nginxvts.shm_used_node | used | nodes |\n| nginxvts.server_requests_total | requests | requests/s |\n| nginxvts.server_responses_total | 1xx, 2xx, 3xx, 4xx, 5xx | responses/s |\n| nginxvts.server_traffic_total | in, out | bytes/s |\n| nginxvts.server_cache_total | miss, bypass, expired, stale, updating, revalidated, hit, scarce | events/s |\n\n",integration_type:"collector",id:"go.d.plugin-nginxvts-NGINX_VTS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/nginxvts/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-ntpd",plugin_name:"go.d.plugin",module_name:"ntpd",monitored_instance:{name:"NTPd",link:"https://www.ntp.org/documentation/4.2.8-series/ntpd",icon_filename:"ntp.png",categories:["data-collection.system-clock-and-ntp"]},keywords:["ntpd","ntp","time"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# NTPd\n\nPlugin: go.d.plugin\nModule: ntpd\n\n## Overview\n\nThis collector monitors the system variables of the local `ntpd` daemon (optional incl. variables of the polled peers) using the NTP Control Message Protocol via UDP socket, similar to `ntpq`, the [standard NTP query program](https://doc.ntp.org/current-stable/ntpq.html).\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/ntpd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/ntpd.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address in IP:PORT format. | 127.0.0.1:123 | yes |\n| timeout | Connection/read/write timeout. | 1 | no |\n| collect_peers | Determines whether peer metrics will be collected. | no | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:123\n\n```\n{% /details %}\n##### With peers metrics\n\nCollect peers metrics.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:123\n collect_peers: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:123\n\n - name: remote\n address: 203.0.113.0:123\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `ntpd` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m ntpd\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per NTPd instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ntpd.sys_offset | offset | milliseconds |\n| ntpd.sys_jitter | system, clock | milliseconds |\n| ntpd.sys_frequency | frequency | ppm |\n| ntpd.sys_wander | clock | ppm |\n| ntpd.sys_rootdelay | delay | milliseconds |\n| ntpd.sys_rootdisp | dispersion | milliseconds |\n| ntpd.sys_stratum | stratum | stratum |\n| ntpd.sys_tc | current, minimum | log2 |\n| ntpd.sys_precision | precision | log2 |\n\n### Per peer\n\nThese metrics refer to the NTPd peer.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| peer_address | peer's source IP address |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ntpd.peer_offset | offset | milliseconds |\n| ntpd.peer_delay | delay | milliseconds |\n| ntpd.peer_dispersion | dispersion | milliseconds |\n| ntpd.peer_jitter | jitter | milliseconds |\n| ntpd.peer_xleave | xleave | milliseconds |\n| ntpd.peer_rootdelay | rootdelay | milliseconds |\n| ntpd.peer_rootdisp | dispersion | milliseconds |\n| ntpd.peer_stratum | stratum | stratum |\n| ntpd.peer_hmode | hmode | hmode |\n| ntpd.peer_pmode | pmode | pmode |\n| ntpd.peer_hpoll | hpoll | log2 |\n| ntpd.peer_ppoll | ppoll | log2 |\n| ntpd.peer_precision | precision | log2 |\n\n",integration_type:"collector",id:"go.d.plugin-ntpd-NTPd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/ntpd/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-nvidia_smi",plugin_name:"go.d.plugin",module_name:"nvidia_smi",monitored_instance:{name:"Nvidia GPU",link:"https://www.nvidia.com/en-us/",icon_filename:"nvidia.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:["nvidia","gpu","hardware"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Nvidia GPU\n\nPlugin: go.d.plugin\nModule: nvidia_smi\n\n## Overview\n\nThis collector monitors GPUs performance metrics using\nthe [nvidia-smi](https://developer.nvidia.com/nvidia-system-management-interface) CLI tool.\n\n> **Warning**: under development, [loop mode](https://github.com/netdata/netdata/issues/14522) not implemented yet.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable in go.d.conf.\n\nThis collector is disabled by default. You need to explicitly enable it in the `go.d.conf` file.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/nvidia_smi.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/nvidia_smi.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| binary_path | Path to nvidia_smi binary. The default is "nvidia_smi" and the executable is looked for in the directories specified in the PATH environment variable. | nvidia_smi | no |\n| timeout | nvidia_smi binary execution timeout. | 2 | no |\n| use_csv_format | Used format when requesting GPU information. XML is used if set to \'no\'. | no | no |\n\n{% /details %}\n#### Examples\n\n##### CSV format\n\nUse CSV format when requesting GPU information.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: nvidia_smi\n use_csv_format: yes\n\n```\n{% /details %}\n##### Custom binary path\n\nThe executable is not in the directories specified in the PATH environment variable.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: nvidia_smi\n binary_path: /usr/local/sbin/nvidia_smi\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `nvidia_smi` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m nvidia_smi\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per gpu\n\nThese metrics refer to the GPU.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| uuid | GPU id (e.g. 00000000:00:04.0) |\n| product_name | GPU product name (e.g. NVIDIA A100-SXM4-40GB) |\n\nMetrics:\n\n| Metric | Dimensions | Unit | XML | CSV |\n|:------|:----------|:----|:---:|:---:|\n| nvidia_smi.gpu_pcie_bandwidth_usage | rx, tx | B/s | \u2022 | |\n| nvidia_smi.gpu_pcie_bandwidth_utilization | rx, tx | % | \u2022 | |\n| nvidia_smi.gpu_fan_speed_perc | fan_speed | % | \u2022 | \u2022 |\n| nvidia_smi.gpu_utilization | gpu | % | \u2022 | \u2022 |\n| nvidia_smi.gpu_memory_utilization | memory | % | \u2022 | \u2022 |\n| nvidia_smi.gpu_decoder_utilization | decoder | % | \u2022 | |\n| nvidia_smi.gpu_encoder_utilization | encoder | % | \u2022 | |\n| nvidia_smi.gpu_frame_buffer_memory_usage | free, used, reserved | B | \u2022 | \u2022 |\n| nvidia_smi.gpu_bar1_memory_usage | free, used | B | \u2022 | |\n| nvidia_smi.gpu_temperature | temperature | Celsius | \u2022 | \u2022 |\n| nvidia_smi.gpu_voltage | voltage | V | \u2022 | |\n| nvidia_smi.gpu_clock_freq | graphics, video, sm, mem | MHz | \u2022 | \u2022 |\n| nvidia_smi.gpu_power_draw | power_draw | Watts | \u2022 | \u2022 |\n| nvidia_smi.gpu_performance_state | P0-P15 | state | \u2022 | \u2022 |\n| nvidia_smi.gpu_mig_mode_current_status | enabled, disabled | status | \u2022 | |\n| nvidia_smi.gpu_mig_devices_count | mig | devices | \u2022 | |\n\n### Per mig\n\nThese metrics refer to the Multi-Instance GPU (MIG).\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| uuid | GPU id (e.g. 00000000:00:04.0) |\n| product_name | GPU product name (e.g. NVIDIA A100-SXM4-40GB) |\n| gpu_instance_id | GPU instance id (e.g. 1) |\n\nMetrics:\n\n| Metric | Dimensions | Unit | XML | CSV |\n|:------|:----------|:----|:---:|:---:|\n| nvidia_smi.gpu_mig_frame_buffer_memory_usage | free, used, reserved | B | \u2022 | |\n| nvidia_smi.gpu_mig_bar1_memory_usage | free, used | B | \u2022 | |\n\n",integration_type:"collector",id:"go.d.plugin-nvidia_smi-Nvidia_GPU",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/nvidia_smi/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-nvme",plugin_name:"go.d.plugin",module_name:"nvme",monitored_instance:{name:"NVMe devices",link:"",icon_filename:"nvme.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["nvme"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# NVMe devices\n\nPlugin: go.d.plugin\nModule: nvme\n\n## Overview\n\nThis collector monitors the health of NVMe devices. It relies on the [`nvme`](https://github.com/linux-nvme/nvme-cli#nvme-cli) CLI tool but avoids directly executing the binary. Instead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment. This approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install nvme-cli\n\nSee [Distro Support](https://github.com/linux-nvme/nvme-cli#distro-support). Install `nvme-cli` using your distribution\'s package manager.\n\n\n#### For Netdata running in a Docker container: grant NVMe device access\n\nYour NVMe devices need to be accessible within the Docker container for Netdata to monitor them.\n\nInclude the following option in your `docker run` command or add the device mapping in your `docker-compose.yml` file:\n\n- `docker run`\n\n ```bash\n --device \'/dev/nvme0n1:/dev/nvme0n1\'\n ```\n\n- `docker-compose.yml`\n\n ```yaml\n services:\n netdata:\n devices:\n - "/dev/nvme0n1:/dev/nvme0n1"\n ```\n\n**Note**: Replace `/dev/nvme0n1` with your actual NVMe device name.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/nvme.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/nvme.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| timeout | nvme binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: nvme\n update_every: 5 # Collect NVMe metrics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `nvme` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m nvme\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ nvme_device_critical_warnings_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/nvme.conf) | nvme.device_critical_warnings_state | NVMe device ${label:device} has critical warnings |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per device\n\nThese metrics refer to the NVME device.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | NVMe device name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nvme.device_estimated_endurance_perc | used | % |\n| nvme.device_available_spare_perc | spare | % |\n| nvme.device_composite_temperature | temperature | celsius |\n| nvme.device_io_transferred_count | read, written | bytes |\n| nvme.device_power_cycles_count | power | cycles |\n| nvme.device_power_on_time | power-on | seconds |\n| nvme.device_critical_warnings_state | available_spare, temp_threshold, nvm_subsystem_reliability, read_only, volatile_mem_backup_failed, persistent_memory_read_only | state |\n| nvme.device_unsafe_shutdowns_count | unsafe | shutdowns |\n| nvme.device_media_errors_rate | media | errors/s |\n| nvme.device_error_log_entries_rate | error_log | entries/s |\n| nvme.device_warning_composite_temperature_time | wctemp | seconds |\n| nvme.device_critical_composite_temperature_time | cctemp | seconds |\n| nvme.device_thermal_mgmt_temp1_transitions_rate | temp1 | transitions/s |\n| nvme.device_thermal_mgmt_temp2_transitions_rate | temp2 | transitions/s |\n| nvme.device_thermal_mgmt_temp1_time | temp1 | seconds |\n| nvme.device_thermal_mgmt_temp2_time | temp2 | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-nvme-NVMe_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/nvme/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-openvpn",plugin_name:"go.d.plugin",module_name:"openvpn",monitored_instance:{name:"OpenVPN",link:"https://openvpn.net/",icon_filename:"openvpn.svg",categories:["data-collection.vpns"]},keywords:["openvpn","vpn"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# OpenVPN\n\nPlugin: go.d.plugin\nModule: openvpn\n\n## Overview\n\nThis collector monitors OpenVPN servers.\n\nIt uses OpenVPN [Management Interface](https://openvpn.net/community-resources/management-interface/) to collect metrics.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable in go.d.conf.\n\nThis collector is disabled by default. You need to explicitly enable it in [go.d.conf](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d.conf).\n\nFrom the documentation for the OpenVPN Management Interface:\n> Currently, the OpenVPN daemon can at most support a single management client any one time.\n\nIt is disabled to not break other tools which use `Management Interface`.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/openvpn.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/openvpn.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address in IP:PORT format. | 127.0.0.1:7505 | yes |\n| timeout | Connection, read, and write timeout duration in seconds. The timeout includes name resolution. | 1 | no |\n| per_user_stats | User selector. Determines which user metrics will be collected. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:7505\n\n```\n{% /details %}\n##### With user metrics\n\nCollect metrics of all users.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:7505\n per_user_stats:\n includes:\n - "* *"\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:7505\n\n - name: remote\n address: 203.0.113.0:7505\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `openvpn` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m openvpn\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per OpenVPN instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| openvpn.active_clients | clients | clients |\n| openvpn.total_traffic | in, out | kilobits/s |\n\n### Per user\n\nThese metrics refer to the VPN user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| username | VPN username |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| openvpn.user_traffic | in, out | kilobits/s |\n| openvpn.user_connection_time | time | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-openvpn-OpenVPN",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/openvpn/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-openvpn_status_log",plugin_name:"go.d.plugin",module_name:"openvpn_status_log",monitored_instance:{name:"OpenVPN status log",link:"https://openvpn.net/",icon_filename:"openvpn.svg",categories:["data-collection.vpns"]},keywords:["openvpn","vpn"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# OpenVPN status log\n\nPlugin: go.d.plugin\nModule: openvpn_status_log\n\n## Overview\n\nThis collector monitors OpenVPN server.\n\nIt parses server log files and provides summary and per user metrics.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/openvpn_status_log.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/openvpn_status_log.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| log_path | Path to status log. | /var/log/openvpn/status.log | yes |\n| per_user_stats | User selector. Determines which user metrics will be collected. | | no |\n\n{% /details %}\n#### Examples\n\n##### With user metrics\n\nCollect metrics of all users.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n per_user_stats:\n includes:\n - "* *"\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `openvpn_status_log` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m openvpn_status_log\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per OpenVPN status log instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| openvpn.active_clients | clients | clients |\n| openvpn.total_traffic | in, out | kilobits/s |\n\n### Per user\n\nThese metrics refer to the VPN user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| username | VPN username |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| openvpn.user_traffic | in, out | kilobits/s |\n| openvpn.user_connection_time | time | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-openvpn_status_log-OpenVPN_status_log",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/openvpn_status_log/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-pgbouncer",plugin_name:"go.d.plugin",module_name:"pgbouncer",monitored_instance:{name:"PgBouncer",link:"https://www.pgbouncer.org/",icon_filename:"postgres.svg",categories:["data-collection.database-servers"]},keywords:["pgbouncer"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# PgBouncer\n\nPlugin: go.d.plugin\nModule: pgbouncer\n\n## Overview\n\nThis collector monitors PgBouncer servers.\n\nExecuted queries:\n\n- `SHOW VERSION;`\n- `SHOW CONFIG;`\n- `SHOW DATABASES;`\n- `SHOW STATS;`\n- `SHOW POOLS;`\n\nInformation about the queries can be found in the [PgBouncer Documentation](https://www.pgbouncer.org/usage.html).\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Create netdata user\n\nCreate a user with `stats_users` permissions to query your PgBouncer instance.\n\nTo create the `netdata` user:\n\n- Add `netdata` user to the `pgbouncer.ini` file:\n\n ```text\n stats_users = netdata\n ```\n\n- Add a password for the `netdata` user to the `userlist.txt` file:\n\n ```text\n "netdata" ""\n ```\n\n- To verify the credentials, run the following command\n\n ```bash\n psql -h localhost -U netdata -p 6432 pgbouncer -c "SHOW VERSION;" >/dev/null 2>&1 && echo OK || echo FAIL\n ```\n\n When it prompts for a password, enter the password you added to `userlist.txt`.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/pgbouncer.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/pgbouncer.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| dsn | PgBouncer server DSN (Data Source Name). See [DSN syntax](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING). | postgres://postgres:postgres@127.0.0.1:6432/pgbouncer | yes |\n| timeout | Query timeout in seconds. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: \'postgres://postgres:postgres@127.0.0.1:6432/pgbouncer\'\n\n```\n{% /details %}\n##### Unix socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: \'host=/tmp dbname=pgbouncer user=postgres port=6432\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: \'postgres://postgres:postgres@127.0.0.1:6432/pgbouncer\'\n\n - name: remote\n dsn: \'postgres://postgres:postgres@203.0.113.10:6432/pgbouncer\'\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `pgbouncer` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m pgbouncer\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per PgBouncer instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| pgbouncer.client_connections_utilization | used | percentage |\n\n### Per database\n\nThese metrics refer to the database.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| database | database name |\n| postgres_database | Postgres database name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| pgbouncer.db_client_connections | active, waiting, cancel_req | connections |\n| pgbouncer.db_server_connections | active, idle, used, tested, login | connections |\n| pgbouncer.db_server_connections_utilization | used | percentage |\n| pgbouncer.db_clients_wait_time | time | seconds |\n| pgbouncer.db_client_max_wait_time | time | seconds |\n| pgbouncer.db_transactions | transactions | transactions/s |\n| pgbouncer.db_transactions_time | time | seconds |\n| pgbouncer.db_transaction_avg_time | time | seconds |\n| pgbouncer.db_queries | queries | queries/s |\n| pgbouncer.db_queries_time | time | seconds |\n| pgbouncer.db_query_avg_time | time | seconds |\n| pgbouncer.db_network_io | received, sent | B/s |\n\n",integration_type:"collector",id:"go.d.plugin-pgbouncer-PgBouncer",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/pgbouncer/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-phpdaemon",plugin_name:"go.d.plugin",module_name:"phpdaemon",monitored_instance:{name:"phpDaemon",link:"https://github.com/kakserpom/phpdaemon",icon_filename:"php.svg",categories:["data-collection.apm"]},keywords:["phpdaemon","php"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# phpDaemon\n\nPlugin: go.d.plugin\nModule: phpdaemon\n\n## Overview\n\nThis collector monitors phpDaemon instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Enable phpDaemon's HTTP server\n\nStatistics expected to be in JSON format.\n\n
    \nphpDaemon configuration\n\nInstruction from [@METAJIJI](https://github.com/METAJIJI).\n\nTo enable `phpd` statistics on http, you must enable the http server and write an application.\nApplication is important, because standalone application [ServerStatus.php](https://github.com/kakserpom/phpdaemon/blob/master/PHPDaemon/Applications/ServerStatus.php) provides statistics in html format and unusable for `netdata`.\n\n```php\n// /opt/phpdaemon/conf/phpd.conf\n\npath /opt/phpdaemon/conf/AppResolver.php;\nPool:HTTPServer {\n privileged;\n listen '127.0.0.1';\n port 8509;\n}\n```\n\n```php\n// /opt/phpdaemon/conf/AppResolver.php\n\nattrs->server['DOCUMENT_URI'], $m)) {\n return $m[1];\n }\n }\n}\n\nreturn new MyAppResolver;\n```\n\n```php\n/opt/phpdaemon/conf/PHPDaemon/Applications/FullStatus.php\n\nheader('Content-Type: application/javascript; charset=utf-8');\n\n $stat = Daemon::getStateOfWorkers();\n $stat['uptime'] = time() - Daemon::$startTime;\n echo json_encode($stat);\n }\n}\n```\n\n
    \n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/phpdaemon.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/phpdaemon.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8509/FullStatus | yes |\n| timeout | HTTP request timeout. | 2 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8509/FullStatus\n\n```\n{% /details %}\n##### HTTP authentication\n\nHTTP authentication.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8509/FullStatus\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nHTTPS with self-signed certificate.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8509/FullStatus\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8509/FullStatus\n\n - name: remote\n url: http://192.0.2.1:8509/FullStatus\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `phpdaemon` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m phpdaemon\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per phpDaemon instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| phpdaemon.workers | alive, shutdown | workers |\n| phpdaemon.alive_workers | idle, busy, reloading | workers |\n| phpdaemon.idle_workers | preinit, init, initialized | workers |\n| phpdaemon.uptime | time | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-phpdaemon-phpDaemon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/phpdaemon/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-phpfpm",plugin_name:"go.d.plugin",module_name:"phpfpm",monitored_instance:{name:"PHP-FPM",link:"https://php-fpm.org/",icon_filename:"php.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["phpfpm","php"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# PHP-FPM\n\nPlugin: go.d.plugin\nModule: phpfpm\n\n## Overview\n\nThis collector monitors PHP-FPM instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable status page\n\nUncomment the `pm.status_path = /status` variable in the `php-fpm` config file.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/phpfpm.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/phpfpm.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/status?full&json | yes |\n| socket | Server Unix socket. | | no |\n| address | Server address in IP:PORT format. | | no |\n| fcgi_path | Status path. | /status | no |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### HTTP\n\nCollecting data from a local instance over HTTP.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://localhost/status?full&json\n\n```\n{% /details %}\n##### Unix socket\n\nCollecting data from a local instance over Unix socket.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n socket: \'/tmp/php-fpm.sock\'\n\n```\n{% /details %}\n##### TCP socket\n\nCollecting data from a local instance over TCP socket.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:9000\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://localhost/status?full&json\n\n - name: remote\n url: http://203.0.113.10/status?full&json\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `phpfpm` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m phpfpm\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per PHP-FPM instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| phpfpm.connections | active, max_active, idle | connections |\n| phpfpm.requests | requests | requests/s |\n| phpfpm.performance | max_children_reached, slow_requests | status |\n| phpfpm.request_duration | min, max, avg | milliseconds |\n| phpfpm.request_cpu | min, max, avg | percentage |\n| phpfpm.request_mem | min, max, avg | KB |\n\n",integration_type:"collector",id:"go.d.plugin-phpfpm-PHP-FPM",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/phpfpm/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-pihole",plugin_name:"go.d.plugin",module_name:"pihole",monitored_instance:{name:"Pi-hole",link:"https://pi-hole.net",icon_filename:"pihole.png",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["pihole"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Pi-hole\n\nPlugin: go.d.plugin\nModule: pihole\n\n## Overview\n\nThis collector monitors Pi-hole instances using [PHP API](https://github.com/pi-hole/AdminLTE).\n\nThe data provided by the API is for the last 24 hours. All collected values refer to this time period and not to the\nmodule's collection interval.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/pihole.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/pihole.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1 | yes |\n| setup_vars_path | Path to setupVars.conf. This file is used to get the web password. | /etc/pihole/setupVars.conf | no |\n| timeout | HTTP request timeout. | 5 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nRemote instance with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://203.0.113.11\n tls_skip_verify: yes\n password: 1ebd33f882f9aa5fac26a7cb74704742f91100228eb322e41b7bd6e6aeb8f74b\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1\n\n - name: remote\n url: http://203.0.113.10\n password: 1ebd33f882f9aa5fac26a7cb74704742f91100228eb322e41b7bd6e6aeb8f74b\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `pihole` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m pihole\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ pihole_blocklist_last_update ](https://github.com/netdata/netdata/blob/master/src/health/health.d/pihole.conf) | pihole.blocklist_last_update | gravity.list (blocklist) file last update time |\n| [ pihole_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/pihole.conf) | pihole.unwanted_domains_blocking_status | unwanted domains blocking is disabled |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Pi-hole instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| pihole.dns_queries_total | queries | queries |\n| pihole.dns_queries | cached, blocked, forwarded | queries |\n| pihole.dns_queries_percentage | cached, blocked, forwarded | percentage |\n| pihole.unique_clients | unique | clients |\n| pihole.domains_on_blocklist | blocklist | domains |\n| pihole.blocklist_last_update | ago | seconds |\n| pihole.unwanted_domains_blocking_status | enabled, disabled | status |\n| pihole.dns_queries_types | a, aaaa, any, ptr, soa, srv, txt | percentage |\n| pihole.dns_queries_forwarded_destination | cached, blocked, other | percentage |\n\n",integration_type:"collector",id:"go.d.plugin-pihole-Pi-hole",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/pihole/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-pika",plugin_name:"go.d.plugin",module_name:"pika",monitored_instance:{name:"Pika",link:"https://github.com/OpenAtomFoundation/pika",icon_filename:"pika.svg",categories:["data-collection.database-servers"]},keywords:["pika","databases"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Pika\n\nPlugin: go.d.plugin\nModule: pika\n\n## Overview\n\nThis collector monitors Pika servers.\n\nIt collects information and statistics about the server executing the following commands:\n\n- [`INFO ALL`](https://github.com/OpenAtomFoundation/pika/wiki/pika-info%E4%BF%A1%E6%81%AF%E8%AF%B4%E6%98%8E)\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/pika.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/pika.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Pika server address. | redis://@localhost:9221 | yes |\n| timeout | Dial (establishing new connections), read (socket reads) and write (socket writes) timeout in seconds. | 1 | no |\n| username | Username used for authentication. | | no |\n| password | Password used for authentication. | | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certificate authority that client use when verifying server certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'redis://@localhost:9221'\n\n```\n{% /details %}\n##### TCP socket with password\n\nAn example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'redis://:password@127.0.0.1:9221'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'redis://:password@127.0.0.1:9221'\n\n - name: remote\n address: 'redis://user:password@203.0.113.0:9221'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `pika` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m pika\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Pika instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| pika.connections | accepted | connections |\n| pika.clients | connected | clients |\n| pika.memory | used | bytes |\n| pika.connected_replicas | connected | replicas |\n| pika.commands | processed | commands/s |\n| pika.commands_calls | a dimension per command | calls/s |\n| pika.database_strings_keys | a dimension per database | keys |\n| pika.database_strings_expires_keys | a dimension per database | keys |\n| pika.database_strings_invalid_keys | a dimension per database | keys |\n| pika.database_hashes_keys | a dimension per database | keys |\n| pika.database_hashes_expires_keys | a dimension per database | keys |\n| pika.database_hashes_invalid_keys | a dimension per database | keys |\n| pika.database_lists_keys | a dimension per database | keys |\n| pika.database_lists_expires_keys | a dimension per database | keys |\n| pika.database_lists_invalid_keys | a dimension per database | keys |\n| pika.database_zsets_keys | a dimension per database | keys |\n| pika.database_zsets_expires_keys | a dimension per database | keys |\n| pika.database_zsets_invalid_keys | a dimension per database | keys |\n| pika.database_sets_keys | a dimension per database | keys |\n| pika.database_sets_expires_keys | a dimension per database | keys |\n| pika.database_sets_invalid_keys | a dimension per database | keys |\n| pika.uptime | uptime | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-pika-Pika",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/pika/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-ping",plugin_name:"go.d.plugin",module_name:"ping",monitored_instance:{name:"Ping",link:"",icon_filename:"globe.svg",categories:["data-collection.synthetic-checks"]},keywords:["ping"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:'# Ping\n\nPlugin: go.d.plugin\nModule: ping\n\n## Overview\n\nThis module measures round-trip time and packet loss by sending ping messages to network hosts.\n\nThere are two operational modes:\n\n- privileged (send raw ICMP ping, default). Requires\n CAP_NET_RAW [capability](https://man7.org/linux/man-pages/man7/capabilities.7.html) or root privileges:\n > **Note**: set automatically during Netdata installation.\n\n ```bash\n sudo setcap CAP_NET_RAW=eip /usr/libexec/netdata/plugins.d/go.d.plugin\n ```\n\n- unprivileged (send UDP ping, Linux only).\n Requires configuring [ping_group_range](https://www.man7.org/linux/man-pages/man7/icmp.7.html):\n\n ```bash\n sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"\n ```\n To persist the change add `net.ipv4.ping_group_range="0 2147483647"` to `/etc/sysctl.conf` and\n execute `sudo sysctl -p`.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn\'t support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n',setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/ping.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/ping.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| hosts | Network hosts. | | yes |\n| network | Allows configuration of DNS resolution. Supported options: ip (select IPv4 or IPv6), ip4 (select IPv4), ip6 (select IPv6). | ip | no |\n| privileged | Ping packets type. "no" means send an "unprivileged" UDP ping, "yes" - raw ICMP ping. | yes | no |\n| packets | Number of ping packets to send. | 5 | no |\n| interval | Timeout between sending ping packets. | 100ms | no |\n\n{% /details %}\n#### Examples\n\n##### IPv4 hosts\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: example\n hosts:\n - 192.0.2.0\n - 192.0.2.1\n\n```\n{% /details %}\n##### Unprivileged mode\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: example\n privileged: no\n hosts:\n - 192.0.2.0\n - 192.0.2.1\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nMultiple instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: example1\n hosts:\n - 192.0.2.0\n - 192.0.2.1\n\n - name: example2\n packets: 10\n hosts:\n - 192.0.2.3\n - 192.0.2.4\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `ping` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m ping\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ping_host_reachable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ping.conf) | ping.host_packet_loss | network host ${lab1el:host} reachability status |\n| [ ping_packet_loss ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ping.conf) | ping.host_packet_loss | packet loss percentage to the network host ${label:host} over the last 10 minutes |\n| [ ping_host_latency ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ping.conf) | ping.host_rtt | average latency to the network host ${label:host} over the last 10 seconds |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per host\n\nThese metrics refer to the remote host.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| host | remote host |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ping.host_rtt | min, max, avg | milliseconds |\n| ping.host_std_dev_rtt | std_dev | milliseconds |\n| ping.host_packet_loss | loss | percentage |\n| ping.host_packets | received, sent | packets |\n\n",integration_type:"collector",id:"go.d.plugin-ping-Ping",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/ping/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-portcheck",plugin_name:"go.d.plugin",module_name:"portcheck",monitored_instance:{name:"TCP Endpoints",link:"",icon_filename:"globe.svg",categories:["data-collection.synthetic-checks"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# TCP Endpoints\n\nPlugin: go.d.plugin\nModule: portcheck\n\n## Overview\n\nThis collector monitors TCP services availability and response time.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/portcheck.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/portcheck.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| host | Remote host address in IPv4, IPv6 format, or DNS name. | | yes |\n| ports | Remote host ports. Must be specified in numeric format. | | yes |\n| timeout | HTTP request timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Check SSH and telnet\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: server1\n host: 127.0.0.1\n ports:\n - 22\n - 23\n\n```\n{% /details %}\n##### Check webserver with IPv6 address\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: server2\n host: "[2001:DB8::1]"\n ports:\n - 80\n - 8080\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nMultiple instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: server1\n host: 127.0.0.1\n ports:\n - 22\n - 23\n\n - name: server2\n host: 203.0.113.10\n ports:\n - 22\n - 23\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `portcheck` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m portcheck\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ portcheck_service_reachable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/portcheck.conf) | portcheck.status | TCP host ${label:host} port ${label:port} liveness status |\n| [ portcheck_connection_timeouts ](https://github.com/netdata/netdata/blob/master/src/health/health.d/portcheck.conf) | portcheck.status | percentage of timed-out TCP connections to host ${label:host} port ${label:port} in the last 5 minutes |\n| [ portcheck_connection_fails ](https://github.com/netdata/netdata/blob/master/src/health/health.d/portcheck.conf) | portcheck.status | percentage of failed TCP connections to host ${label:host} port ${label:port} in the last 5 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per tcp endpoint\n\nThese metrics refer to the TCP endpoint.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| host | host |\n| port | port |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| portcheck.status | success, failed, timeout | boolean |\n| portcheck.state_duration | time | seconds |\n| portcheck.latency | time | ms |\n\n",integration_type:"collector",id:"go.d.plugin-portcheck-TCP_Endpoints",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/portcheck/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-postgres",plugin_name:"go.d.plugin",module_name:"postgres",monitored_instance:{name:"PostgreSQL",link:"https://www.postgresql.org/",categories:["data-collection.database-servers"],icon_filename:"postgres.svg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},alternative_monitored_instances:[],info_provided_to_referring_integrations:{description:""},keywords:["db","database","postgres","postgresql","sql"],most_popular:!0},overview:"# PostgreSQL\n\nPlugin: go.d.plugin\nModule: postgres\n\n## Overview\n\nThis collector monitors the activity and performance of Postgres servers, collects replication statistics, metrics for each database, table and index, and more.\n\n\nIt establishes a connection to the Postgres instance via a TCP or UNIX socket.\nTo collect metrics for database tables and indexes, it establishes an additional connection for each discovered database.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by trying to connect as root and netdata using known PostgreSQL TCP and UNIX sockets:\n\n- 127.0.0.1:5432\n- /var/run/postgresql/\n\n\n#### Limits\n\nTable and index metrics are not collected for databases with more than 50 tables or 250 indexes.\nThese limits can be changed in the configuration file.\n\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Create netdata user\n\nCreate a user with granted `pg_monitor`\nor `pg_read_all_stat` [built-in role](https://www.postgresql.org/docs/current/predefined-roles.html).\n\nTo create the `netdata` user with these permissions, execute the following in the psql session, as a user with CREATEROLE privileges:\n\n```postgresql\nCREATE USER netdata;\nGRANT pg_monitor TO netdata;\n```\n\nAfter creating the new user, restart the Netdata agent with `sudo systemctl restart netdata`, or\nthe [appropriate method](/docs/netdata-agent/start-stop-restart.md) for your\nsystem.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/postgres.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/postgres.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| dsn | Postgres server DSN (Data Source Name). See [DSN syntax](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING). | postgres://postgres:postgres@127.0.0.1:5432/postgres | yes |\n| timeout | Query timeout in seconds. | 2 | no |\n| collect_databases_matching | Databases selector. Determines which database metrics will be collected. Syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/matcher#simple-patterns-matcher). | | no |\n| max_db_tables | Maximum number of tables in the database. Table metrics will not be collected for databases that have more tables than max_db_tables. 0 means no limit. | 50 | no |\n| max_db_indexes | Maximum number of indexes in the database. Index metrics will not be collected for databases that have more indexes than max_db_indexes. 0 means no limit. | 250 | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n```yaml\njobs:\n - name: local\n dsn: 'postgresql://netdata@127.0.0.1:5432/postgres'\n\n```\n##### Unix socket\n\nAn example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n dsn: 'host=/var/run/postgresql dbname=postgres user=netdata'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n dsn: 'postgresql://netdata@127.0.0.1:5432/postgres'\n\n - name: remote\n dsn: 'postgresql://netdata@203.0.113.0:5432/postgres'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `postgres` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m postgres\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ postgres_total_connection_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.connections_utilization | average total connection utilization over the last minute |\n| [ postgres_acquired_locks_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.locks_utilization | average acquired locks utilization over the last minute |\n| [ postgres_txid_exhaustion_perc ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.txid_exhaustion_perc | percent towards TXID wraparound |\n| [ postgres_db_cache_io_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.db_cache_io_ratio | average cache hit ratio in db ${label:database} over the last minute |\n| [ postgres_db_transactions_rollback_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.db_cache_io_ratio | average aborted transactions percentage in db ${label:database} over the last five minutes |\n| [ postgres_db_deadlocks_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.db_deadlocks_rate | number of deadlocks detected in db ${label:database} in the last minute |\n| [ postgres_table_cache_io_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_cache_io_ratio | average cache hit ratio in db ${label:database} table ${label:table} over the last minute |\n| [ postgres_table_index_cache_io_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_index_cache_io_ratio | average index cache hit ratio in db ${label:database} table ${label:table} over the last minute |\n| [ postgres_table_toast_cache_io_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_toast_cache_io_ratio | average TOAST hit ratio in db ${label:database} table ${label:table} over the last minute |\n| [ postgres_table_toast_index_cache_io_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_toast_index_cache_io_ratio | average index TOAST hit ratio in db ${label:database} table ${label:table} over the last minute |\n| [ postgres_table_bloat_size_perc ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_bloat_size_perc | bloat size percentage in db ${label:database} table ${label:table} |\n| [ postgres_table_last_autovacuum_time ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_autovacuum_since_time | time elapsed since db ${label:database} table ${label:table} was vacuumed by the autovacuum daemon |\n| [ postgres_table_last_autoanalyze_time ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.table_autoanalyze_since_time | time elapsed since db ${label:database} table ${label:table} was analyzed by the autovacuum daemon |\n| [ postgres_index_bloat_size_perc ](https://github.com/netdata/netdata/blob/master/src/health/health.d/postgres.conf) | postgres.index_bloat_size_perc | bloat size percentage in db ${label:database} table ${label:table} index ${label:index} |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per PostgreSQL instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postgres.connections_utilization | used | percentage |\n| postgres.connections_usage | available, used | connections |\n| postgres.connections_state_count | active, idle, idle_in_transaction, idle_in_transaction_aborted, disabled | connections |\n| postgres.transactions_duration | a dimension per bucket | transactions/s |\n| postgres.queries_duration | a dimension per bucket | queries/s |\n| postgres.locks_utilization | used | percentage |\n| postgres.checkpoints_rate | scheduled, requested | checkpoints/s |\n| postgres.checkpoints_time | write, sync | milliseconds |\n| postgres.bgwriter_halts_rate | maxwritten | events/s |\n| postgres.buffers_io_rate | checkpoint, backend, bgwriter | B/s |\n| postgres.buffers_backend_fsync_rate | fsync | calls/s |\n| postgres.buffers_allocated_rate | allocated | B/s |\n| postgres.wal_io_rate | write | B/s |\n| postgres.wal_files_count | written, recycled | files |\n| postgres.wal_archiving_files_count | ready, done | files/s |\n| postgres.autovacuum_workers_count | analyze, vacuum_analyze, vacuum, vacuum_freeze, brin_summarize | workers |\n| postgres.txid_exhaustion_towards_autovacuum_perc | emergency_autovacuum | percentage |\n| postgres.txid_exhaustion_perc | txid_exhaustion | percentage |\n| postgres.txid_exhaustion_oldest_txid_num | xid | xid |\n| postgres.catalog_relations_count | ordinary_table, index, sequence, toast_table, view, materialized_view, composite_type, foreign_table, partitioned_table, partitioned_index | relations |\n| postgres.catalog_relations_size | ordinary_table, index, sequence, toast_table, view, materialized_view, composite_type, foreign_table, partitioned_table, partitioned_index | B |\n| postgres.uptime | uptime | seconds |\n| postgres.databases_count | databases | databases |\n\n### Per repl application\n\nThese metrics refer to the replication application.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| application | application name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postgres.replication_app_wal_lag_size | sent_lag, write_lag, flush_lag, replay_lag | B |\n| postgres.replication_app_wal_lag_time | write_lag, flush_lag, replay_lag | seconds |\n\n### Per repl slot\n\nThese metrics refer to the replication slot.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| slot | replication slot name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postgres.replication_slot_files_count | wal_keep, pg_replslot_files | files |\n\n### Per database\n\nThese metrics refer to the database.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| database | database name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postgres.db_transactions_ratio | committed, rollback | percentage |\n| postgres.db_transactions_rate | committed, rollback | transactions/s |\n| postgres.db_connections_utilization | used | percentage |\n| postgres.db_connections_count | connections | connections |\n| postgres.db_cache_io_ratio | miss | percentage |\n| postgres.db_io_rate | memory, disk | B/s |\n| postgres.db_ops_fetched_rows_ratio | fetched | percentage |\n| postgres.db_ops_read_rows_rate | returned, fetched | rows/s |\n| postgres.db_ops_write_rows_rate | inserted, deleted, updated | rows/s |\n| postgres.db_conflicts_rate | conflicts | queries/s |\n| postgres.db_conflicts_reason_rate | tablespace, lock, snapshot, bufferpin, deadlock | queries/s |\n| postgres.db_deadlocks_rate | deadlocks | deadlocks/s |\n| postgres.db_locks_held_count | access_share, row_share, row_exclusive, share_update, share, share_row_exclusive, exclusive, access_exclusive | locks |\n| postgres.db_locks_awaited_count | access_share, row_share, row_exclusive, share_update, share, share_row_exclusive, exclusive, access_exclusive | locks |\n| postgres.db_temp_files_created_rate | created | files/s |\n| postgres.db_temp_files_io_rate | written | B/s |\n| postgres.db_size | size | B |\n\n### Per table\n\nThese metrics refer to the database table.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| database | database name |\n| schema | schema name |\n| table | table name |\n| parent_table | parent table name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postgres.table_rows_dead_ratio | dead | percentage |\n| postgres.table_rows_count | live, dead | rows |\n| postgres.table_ops_rows_rate | inserted, deleted, updated | rows/s |\n| postgres.table_ops_rows_hot_ratio | hot | percentage |\n| postgres.table_ops_rows_hot_rate | hot | rows/s |\n| postgres.table_cache_io_ratio | miss | percentage |\n| postgres.table_io_rate | memory, disk | B/s |\n| postgres.table_index_cache_io_ratio | miss | percentage |\n| postgres.table_index_io_rate | memory, disk | B/s |\n| postgres.table_toast_cache_io_ratio | miss | percentage |\n| postgres.table_toast_io_rate | memory, disk | B/s |\n| postgres.table_toast_index_cache_io_ratio | miss | percentage |\n| postgres.table_toast_index_io_rate | memory, disk | B/s |\n| postgres.table_scans_rate | index, sequential | scans/s |\n| postgres.table_scans_rows_rate | index, sequential | rows/s |\n| postgres.table_autovacuum_since_time | time | seconds |\n| postgres.table_vacuum_since_time | time | seconds |\n| postgres.table_autoanalyze_since_time | time | seconds |\n| postgres.table_analyze_since_time | time | seconds |\n| postgres.table_null_columns | null | columns |\n| postgres.table_size | size | B |\n| postgres.table_bloat_size_perc | bloat | percentage |\n| postgres.table_bloat_size | bloat | B |\n\n### Per index\n\nThese metrics refer to the table index.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| database | database name |\n| schema | schema name |\n| table | table name |\n| parent_table | parent table name |\n| index | index name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postgres.index_size | size | B |\n| postgres.index_bloat_size_perc | bloat | percentage |\n| postgres.index_bloat_size | bloat | B |\n| postgres.index_usage_status | used, unused | status |\n\n",integration_type:"collector",id:"go.d.plugin-postgres-PostgreSQL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/postgres/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-powerdns",plugin_name:"go.d.plugin",module_name:"powerdns",monitored_instance:{name:"PowerDNS Authoritative Server",link:"https://doc.powerdns.com/authoritative/",icon_filename:"powerdns.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["powerdns","dns"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# PowerDNS Authoritative Server\n\nPlugin: go.d.plugin\nModule: powerdns\n\n## Overview\n\nThis collector monitors PowerDNS Authoritative Server instances.\nIt collects metrics from [the internal webserver](https://doc.powerdns.com/authoritative/http-api/index.html#webserver).\n\nUsed endpoints:\n\n- [`/api/v1/servers/localhost/statistics`](https://doc.powerdns.com/authoritative/http-api/statistics.html)\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable webserver\n\nFollow [webserver](https://doc.powerdns.com/authoritative/http-api/index.html#webserver) documentation.\n\n\n#### Enable HTTP API\n\nFollow [HTTP API](https://doc.powerdns.com/authoritative/http-api/index.html#enabling-the-api) documentation.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/powerdns.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/powerdns.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8081 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8081\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8081\n username: admin\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8081\n\n - name: remote\n url: http://203.0.113.0:8081\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `powerdns` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m powerdns\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per PowerDNS Authoritative Server instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| powerdns.questions_in | udp, tcp | questions/s |\n| powerdns.questions_out | udp, tcp | questions/s |\n| powerdns.cache_usage | query-cache-hit, query-cache-miss, packetcache-hit, packetcache-miss | events/s |\n| powerdns.cache_size | query-cache, packet-cache, key-cache, meta-cache | entries |\n| powerdns.latency | latency | microseconds |\n\n",integration_type:"collector",id:"go.d.plugin-powerdns-PowerDNS_Authoritative_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/powerdns/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-powerdns_recursor",plugin_name:"go.d.plugin",module_name:"powerdns_recursor",monitored_instance:{name:"PowerDNS Recursor",link:"https://doc.powerdns.com/recursor/",icon_filename:"powerdns.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["powerdns","dns"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# PowerDNS Recursor\n\nPlugin: go.d.plugin\nModule: powerdns_recursor\n\n## Overview\n\nThis collector monitors PowerDNS Recursor instances.\n\nIt collects metrics from [the internal webserver](https://doc.powerdns.com/recursor/http-api/index.html#built-in-webserver-and-http-api).\n\nUsed endpoints:\n\n- [`/api/v1/servers/localhost/statistics`](https://doc.powerdns.com/recursor/common/api/endpoint-statistics.html)\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable webserver\n\nFollow [webserver](https://doc.powerdns.com/recursor/http-api/index.html#webserver) documentation.\n\n\n#### Enable HTTP API\n\nFollow [HTTP API](https://doc.powerdns.com/recursor/http-api/index.html#enabling-the-api) documentation.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/powerdns_recursor.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/powerdns_recursor.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8081 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8081\n\n```\n{% /details %}\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8081\n username: admin\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8081\n\n - name: remote\n url: http://203.0.113.0:8081\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `powerdns_recursor` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m powerdns_recursor\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per PowerDNS Recursor instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| powerdns_recursor.questions_in | total, tcp, ipv6 | questions/s |\n| powerdns_recursor.questions_out | udp, tcp, ipv6, throttled | questions/s |\n| powerdns_recursor.answer_time | 0-1ms, 1-10ms, 10-100ms, 100-1000ms, slow | queries/s |\n| powerdns_recursor.timeouts | total, ipv4, ipv6 | timeouts/s |\n| powerdns_recursor.drops | over-capacity-drops, query-pipe-full-drops, too-old-drops, truncated-drops, empty-queries | drops/s |\n| powerdns_recursor.cache_usage | cache-hits, cache-misses, packet-cache-hits, packet-cache-misses | events/s |\n| powerdns_recursor.cache_size | cache, packet-cache, negative-cache | entries |\n\n",integration_type:"collector",id:"go.d.plugin-powerdns_recursor-PowerDNS_Recursor",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/powerdns_recursor/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-4d_server",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"4D Server",link:"https://github.com/ThomasMaul/Prometheus_4D_Exporter",icon_filename:"4d_server.png",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# 4D Server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor 4D Server performance metrics for efficient application management and optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [4D Server exporter](https://github.com/ThomasMaul/Prometheus_4D_Exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [4D Server exporter](https://github.com/ThomasMaul/Prometheus_4D_Exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-4D_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-8430ft-modem",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"8430FT modem",link:"https://github.com/dernasherbrezon/8430ft_exporter",icon_filename:"mtc.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# 8430FT modem\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep track of vital metrics from the MTS 8430FT modem for streamlined network performance and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [8430FT Exporter](https://github.com/dernasherbrezon/8430ft_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [8430FT Exporter](https://github.com/dernasherbrezon/8430ft_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-8430FT_modem",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-a10-acos",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"A10 ACOS network devices",link:"https://github.com/a10networks/PrometheusExporter",icon_filename:"a10-networks.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# A10 ACOS network devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor A10 Networks device metrics for comprehensive management and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [A10-Networks Prometheus Exporter](https://github.com/a10networks/PrometheusExporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [A10-Networks Prometheus Exporter](https://github.com/a10networks/PrometheusExporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-A10_ACOS_network_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-amd_smi",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AMD CPU & GPU",link:"https://github.com/amd/amd_smi_exporter",icon_filename:"amd.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AMD CPU & GPU\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor AMD System Management Interface performance for optimized hardware management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AMD SMI Exporter](https://github.com/amd/amd_smi_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AMD SMI Exporter](https://github.com/amd/amd_smi_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AMD_CPU_&_GPU",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-apicast",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"APIcast",link:"https://github.com/3scale/apicast",icon_filename:"apicast.png",categories:["data-collection.web-servers-and-web-proxies"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# APIcast\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor APIcast performance metrics to optimize API gateway operations and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [APIcast](https://github.com/3scale/apicast).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [APIcast](https://github.com/3scale/apicast) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-APIcast",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-arm_hwcpipe",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ARM HWCPipe",link:"https://github.com/ylz-at/arm-hwcpipe-exporter",icon_filename:"arm.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ARM HWCPipe\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep track of ARM running Android devices and get metrics for efficient performance optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ARM HWCPipe Exporter](https://github.com/ylz-at/arm-hwcpipe-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ARM HWCPipe Exporter](https://github.com/ylz-at/arm-hwcpipe-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ARM_HWCPipe",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_ec2",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS EC2 Compute instances",link:"https://github.com/O1ahmad/aws_ec2_exporter",icon_filename:"aws-ec2.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS EC2 Compute instances\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack AWS EC2 instances key metrics for optimized performance and cost management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS EC2 Exporter](https://github.com/O1ahmad/aws_ec2_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS EC2 Exporter](https://github.com/O1ahmad/aws_ec2_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_EC2_Compute_instances",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_ec2_spot",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS EC2 Spot Instance",link:"https://github.com/patcadelina/ec2-spot-exporter",icon_filename:"aws-ec2.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS EC2 Spot Instance\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor AWS EC2 Spot instances'' performance metrics for efficient resource allocation and cost optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS EC2 Spot Exporter](https://github.com/patcadelina/ec2-spot-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS EC2 Spot Exporter](https://github.com/patcadelina/ec2-spot-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_EC2_Spot_Instance",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_ecs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS ECS",link:"https://github.com/bevers222/ecs-exporter",icon_filename:"amazon-ecs.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS ECS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on AWS ECS services and resources for optimized container management and orchestration.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS ECS exporter](https://github.com/bevers222/ecs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS ECS exporter](https://github.com/bevers222/ecs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_ECS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_health",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS Health events",link:"https://github.com/vladvasiliu/aws-health-exporter-rs",icon_filename:"aws.svg",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS Health events\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack AWS service health metrics for proactive incident management and resolution.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS Health Exporter](https://github.com/vladvasiliu/aws-health-exporter-rs).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS Health Exporter](https://github.com/vladvasiliu/aws-health-exporter-rs) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_Health_events",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_quota",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS Quota",link:"https://github.com/emylincon/aws_quota_exporter",icon_filename:"aws.svg",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS Quota\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor AWS service quotas for effective resource usage and cost management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [aws_quota_exporter](https://github.com/emylincon/aws_quota_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [aws_quota_exporter](https://github.com/emylincon/aws_quota_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_Quota",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_rds",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS RDS",link:"https://github.com/percona/rds_exporter",icon_filename:"aws-rds.svg",categories:["data-collection.database-servers"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS RDS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Amazon RDS (Relational Database Service) metrics for efficient cloud database management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [rds_exporter](https://github.com/percona/rds_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [rds_exporter](https://github.com/percona/rds_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_RDS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_s3",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS S3 buckets",link:"https://github.com/ribbybibby/s3_exporter",icon_filename:"aws-s3.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS S3 buckets\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor AWS S3 storage metrics for optimized performance, data management, and cost efficiency.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS S3 Exporter](https://github.com/ribbybibby/s3_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS S3 Exporter](https://github.com/ribbybibby/s3_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_S3_buckets",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_sqs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS SQS",link:"https://github.com/jmal98/sqs-exporter",icon_filename:"aws-sqs.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS SQS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack AWS SQS messaging metrics for efficient message processing and queue management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS SQS Exporter](https://github.com/jmal98/sqs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS SQS Exporter](https://github.com/jmal98/sqs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_SQS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_instance_health",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AWS instance health",link:"https://github.com/bobtfish/aws-instance-health-exporter",icon_filename:"aws.svg",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","aws services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AWS instance health\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor the health of AWS instances for improved performance and availability.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AWS instance health exporter](https://github.com/bobtfish/aws-instance-health-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AWS instance health exporter](https://github.com/bobtfish/aws-instance-health-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AWS_instance_health",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-airthings_waveplus",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Airthings Waveplus air sensor",link:"https://github.com/jeremybz/waveplus_exporter",icon_filename:"airthings.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Airthings Waveplus air sensor\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Waveplus radon sensor metrics for efficient indoor air quality monitoring and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Waveplus Radon Sensor Exporter](https://github.com/jeremybz/waveplus_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Waveplus Radon Sensor Exporter](https://github.com/jeremybz/waveplus_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Airthings_Waveplus_air_sensor",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-akami_edgedns",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Akamai Edge DNS Traffic",link:"https://github.com/akamai/akamai-edgedns-traffic-exporter",icon_filename:"akamai.svg",categories:["data-collection.dns-and-dhcp-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Akamai Edge DNS Traffic\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack and analyze Akamai Edge DNS traffic for enhanced performance and security.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Akamai Edge DNS Traffic Exporter](https://github.com/akamai/akamai-edgedns-traffic-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Akamai Edge DNS Traffic Exporter](https://github.com/akamai/akamai-edgedns-traffic-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Akamai_Edge_DNS_Traffic",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-akami_gtm",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Akamai Global Traffic Management",link:"https://github.com/akamai/akamai-gtm-metrics-exporter",icon_filename:"akamai.svg",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Akamai Global Traffic Management\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor vital metrics of Akamai Global Traffic Management (GTM) for optimized load balancing and failover.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Akamai Global Traffic Management Metrics Exporter](https://github.com/akamai/akamai-gtm-metrics-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Akamai Global Traffic Management Metrics Exporter](https://github.com/akamai/akamai-gtm-metrics-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Akamai_Global_Traffic_Management",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-akami_cloudmonitor",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Akami Cloudmonitor",link:"https://github.com/ExpressenAB/cloudmonitor_exporter",icon_filename:"akamai.svg",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Akami Cloudmonitor\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Akamai cloudmonitor provider metrics for comprehensive cloud performance management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cloudmonitor exporter](https://github.com/ExpressenAB/cloudmonitor_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cloudmonitor exporter](https://github.com/ExpressenAB/cloudmonitor_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Akami_Cloudmonitor",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-alamos_fe2",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Alamos FE2 server",link:"https://github.com/codemonauts/prometheus-fe2-exporter",icon_filename:"alamos_fe2.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Alamos FE2 server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Alamos FE2 systems for improved performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Alamos FE2 Exporter](https://github.com/codemonauts/prometheus-fe2-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Alamos FE2 Exporter](https://github.com/codemonauts/prometheus-fe2-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Alamos_FE2_server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-alibaba-cloud",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Alibaba Cloud",link:"https://github.com/aylei/aliyun-exporter",icon_filename:"alibaba-cloud.svg",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Alibaba Cloud\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Alibaba Cloud services and resources for efficient management and cost optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Alibaba Cloud Exporter](https://github.com/aylei/aliyun-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Alibaba Cloud Exporter](https://github.com/aylei/aliyun-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Alibaba_Cloud",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-altaro_backup",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Altaro Backup",link:"https://github.com/raph2i/altaro_backup_exporter",icon_filename:"altaro.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Altaro Backup\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Altaro Backup performance metrics to ensure smooth data protection and recovery operations.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Altaro Backup Exporter](https://github.com/raph2i/altaro_backup_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Altaro Backup Exporter](https://github.com/raph2i/altaro_backup_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Altaro_Backup",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aaisp",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Andrews & Arnold line status",link:"https://github.com/daveio/aaisp-exporter",icon_filename:"andrewsarnold.jpg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Andrews & Arnold line status\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Andrews & Arnold Ltd (AAISP) metrics for improved network performance and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Andrews & Arnold line status exporter](https://github.com/daveio/aaisp-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Andrews & Arnold line status exporter](https://github.com/daveio/aaisp-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Andrews_&_Arnold_line_status",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-airflow",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Apache Airflow",link:"https://github.com/shalb/airflow-exporter",icon_filename:"airflow.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Apache Airflow\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Apache Airflow metrics to optimize task scheduling and workflow management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Airflow exporter](https://github.com/shalb/airflow-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Airflow exporter](https://github.com/shalb/airflow-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Apache_Airflow",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-flink",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Apache Flink",link:"https://github.com/matsumana/flink_exporter",icon_filename:"apache_flink.png",categories:["data-collection.apm"]},keywords:["web server","http","https"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Apache Flink\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Apache Flink metrics for efficient stream processing and application management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Apache Flink Metrics Reporter](https://github.com/matsumana/flink_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Apache Flink Metrics Reporter](https://github.com/matsumana/flink_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Apache_Flink",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-apple_timemachine",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Apple Time Machine",link:"https://github.com/znerol/prometheus-timemachine-exporter",icon_filename:"apple.svg",categories:["data-collection.macos-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Apple Time Machine\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Apple Time Machine backup metrics for efficient data protection and recovery.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Apple Time Machine Exporter](https://github.com/znerol/prometheus-timemachine-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Apple Time Machine Exporter](https://github.com/znerol/prometheus-timemachine-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Apple_Time_Machine",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aruba",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Aruba devices",link:"https://github.com/slashdoom/aruba_exporter",icon_filename:"aruba.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","aruba devices"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Aruba devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Aruba Networks devices performance metrics for comprehensive network management and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Aruba Exporter](https://github.com/slashdoom/aruba_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Aruba Exporter](https://github.com/slashdoom/aruba_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Aruba_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-arvancloud_cdn",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ArvanCloud CDN",link:"https://github.com/arvancloud/ar-prometheus-exporter",icon_filename:"arvancloud.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ArvanCloud CDN\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack and analyze ArvanCloud CDN and cloud services performance metrics for optimized delivery and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ArvanCloud exporter](https://github.com/arvancloud/ar-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ArvanCloud exporter](https://github.com/arvancloud/ar-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ArvanCloud_CDN",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-audisto",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Audisto",link:"https://github.com/ZeitOnline/audisto_exporter",icon_filename:"audisto.svg",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Audisto\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Audisto SEO and website metrics for improved search performance and optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Audisto exporter](https://github.com/ZeitOnline/audisto_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Audisto exporter](https://github.com/ZeitOnline/audisto_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Audisto",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-authlog",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"AuthLog",link:"https://github.com/woblerr/authlog_exporter",icon_filename:"linux.png",categories:["data-collection.logs-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# AuthLog\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor authentication logs for security insights and efficient access management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [AuthLog Exporter](https://github.com/woblerr/authlog_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [AuthLog Exporter](https://github.com/woblerr/authlog_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-AuthLog",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-azure_ad_app_passwords",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Azure AD App passwords",link:"https://github.com/vladvasiliu/azure-app-secrets-monitor",icon_filename:"azure.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","azure services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Azure AD App passwords\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nSafeguard and track Azure App secrets for enhanced security and access management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Azure App Secrets monitor](https://github.com/vladvasiliu/azure-app-secrets-monitor).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Azure App Secrets monitor](https://github.com/vladvasiliu/azure-app-secrets-monitor) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Azure_AD_App_passwords",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-azure_elastic_sql",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Azure Elastic Pool SQL",link:"https://github.com/benclapp/azure_elastic_sql_exporter",icon_filename:"azure-elastic-sql.png",categories:["data-collection.cloud-provider-managed"]},keywords:["database","relational db","data querying"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Azure Elastic Pool SQL\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Azure Elastic SQL performance metrics for efficient database management and query optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Azure Elastic SQL Exporter](https://github.com/benclapp/azure_elastic_sql_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Azure Elastic SQL Exporter](https://github.com/benclapp/azure_elastic_sql_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Azure_Elastic_Pool_SQL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-azure_res",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Azure Resources",link:"https://github.com/FXinnovation/azure_metrics_exporter",icon_filename:"azure.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","azure services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Azure Resources\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Azure resources vital metrics for efficient cloud management and cost optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Azure Resources Exporter](https://github.com/FXinnovation/azure_metrics_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Azure Resources Exporter](https://github.com/FXinnovation/azure_metrics_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Azure_Resources",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-azure_sql",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Azure SQL",link:"https://github.com/iamseth/azure_sql_exporter",icon_filename:"azure-sql.png",categories:["data-collection.cloud-provider-managed"]},keywords:["database","relational db","data querying"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Azure SQL\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Azure SQL performance metrics for efficient database management and query performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Azure SQL exporter](https://github.com/iamseth/azure_sql_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Azure SQL exporter](https://github.com/iamseth/azure_sql_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Azure_SQL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-azure_service_bus",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Azure Service Bus",link:"https://github.com/marcinbudny/servicebus_exporter",icon_filename:"azure-service-bus.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","azure services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Azure Service Bus\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Azure Service Bus messaging metrics for optimized communication and integration.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Azure Service Bus Exporter](https://github.com/marcinbudny/servicebus_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Azure Service Bus Exporter](https://github.com/marcinbudny/servicebus_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Azure_Service_Bus",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-azure_app",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Azure application",link:"https://github.com/RobustPerception/azure_metrics_exporter",icon_filename:"azure.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","azure services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Azure application\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Azure Monitor metrics for comprehensive resource management and performance optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Azure Monitor exporter](https://github.com/RobustPerception/azure_metrics_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Azure Monitor exporter](https://github.com/RobustPerception/azure_metrics_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Azure_application",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-bosh",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"BOSH",link:"https://github.com/bosh-prometheus/bosh_exporter",icon_filename:"bosh.png",categories:["data-collection.provisioning-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# BOSH\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on BOSH deployment metrics for improved cloud orchestration and resource management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [BOSH exporter](https://github.com/bosh-prometheus/bosh_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [BOSH exporter](https://github.com/bosh-prometheus/bosh_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-BOSH",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-bigquery",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"BigQuery",link:"https://github.com/m-lab/prometheus-bigquery-exporter",icon_filename:"bigquery.png",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# BigQuery\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Google BigQuery metrics for optimized data processing and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [BigQuery Exporter](https://github.com/m-lab/prometheus-bigquery-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [BigQuery Exporter](https://github.com/m-lab/prometheus-bigquery-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-BigQuery",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-bird",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Bird Routing Daemon",link:"https://github.com/czerwonk/bird_exporter",icon_filename:"bird.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Bird Routing Daemon\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Bird Routing Daemon metrics for optimized network routing and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Bird Routing Daemon Exporter](https://github.com/czerwonk/bird_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Bird Routing Daemon Exporter](https://github.com/czerwonk/bird_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Bird_Routing_Daemon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-blackbox",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Blackbox",link:"https://github.com/prometheus/blackbox_exporter",icon_filename:"prometheus.svg",categories:["data-collection.synthetic-checks"]},keywords:["blackbox"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Blackbox\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack external service availability and response times with Blackbox monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Blackbox exporter](https://github.com/prometheus/blackbox_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Blackbox exporter](https://github.com/prometheus/blackbox_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Blackbox",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-bobcat",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Bobcat Miner 300",link:"https://github.com/pperzyna/bobcat_exporter",icon_filename:"bobcat.jpg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Bobcat Miner 300\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Bobcat equipment metrics for optimized performance and maintenance management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Bobcat Exporter](https://github.com/pperzyna/bobcat_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Bobcat Exporter](https://github.com/pperzyna/bobcat_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Bobcat_Miner_300",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-borg",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Borg backup",link:"https://github.com/k0ral/borg-exporter",icon_filename:"borg.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Borg backup\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Borg backup performance metrics for efficient data protection and recovery.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Borg backup exporter](https://github.com/k0ral/borg-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Borg backup exporter](https://github.com/k0ral/borg-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Borg_backup",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-bungeecord",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"BungeeCord",link:"https://github.com/weihao/bungeecord-prometheus-exporter",icon_filename:"bungee.png",categories:["data-collection.gaming"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# BungeeCord\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack BungeeCord proxy server metrics for efficient load balancing and performance management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [BungeeCord Prometheus Exporter](https://github.com/weihao/bungeecord-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [BungeeCord Prometheus Exporter](https://github.com/weihao/bungeecord-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-BungeeCord",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cvmfs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"CVMFS clients",link:"https://github.com/guilbaults/cvmfs-exporter",icon_filename:"cvmfs.png",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# CVMFS clients\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack CernVM File System metrics for optimized distributed file system performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [CVMFS exporter](https://github.com/guilbaults/cvmfs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [CVMFS exporter](https://github.com/guilbaults/cvmfs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-CVMFS_clients",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-celery",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Celery",link:"https://github.com/ZeitOnline/celery_redis_prometheus",icon_filename:"celery.png",categories:["data-collection.task-queues"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Celery\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Celery task queue metrics for optimized task processing and resource management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Celery Exporter](https://github.com/ZeitOnline/celery_redis_prometheus).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Celery Exporter](https://github.com/ZeitOnline/celery_redis_prometheus) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Celery",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-certificate_transparency",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Certificate Transparency",link:"https://github.com/Hsn723/ct-exporter",icon_filename:"ct.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Certificate Transparency\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack certificate transparency log metrics for enhanced\nSSL/TLS certificate management and security.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ct-exporter](https://github.com/Hsn723/ct-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ct-exporter](https://github.com/Hsn723/ct-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Certificate_Transparency",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-checkpoint",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Checkpoint device",link:"https://github.com/RespiroConsulting/CheckPointExporter",icon_filename:"checkpoint.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Checkpoint device\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Check Point firewall and security metrics for enhanced network protection and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Checkpoint exporter](https://github.com/RespiroConsulting/CheckPointExporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Checkpoint exporter](https://github.com/RespiroConsulting/CheckPointExporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Checkpoint_device",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-chia",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Chia",link:"https://github.com/chia-network/chia-exporter",icon_filename:"chia.png",categories:["data-collection.blockchain-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Chia\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Chia blockchain metrics for optimized farming and resource allocation.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Chia Exporter](https://github.com/chia-network/chia-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Chia Exporter](https://github.com/chia-network/chia-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Chia",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-clm5ip",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Christ Elektronik CLM5IP power panel",link:"https://github.com/christmann/clm5ip_exporter/",icon_filename:"christelec.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Christ Elektronik CLM5IP power panel\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Christ Elektronik CLM5IP device metrics for efficient performance and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Christ Elektronik CLM5IP Exporter](https://github.com/christmann/clm5ip_exporter/).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Christ Elektronik CLM5IP Exporter](https://github.com/christmann/clm5ip_exporter/) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Christ_Elektronik_CLM5IP_power_panel",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cilium_agent",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cilium Agent",link:"https://github.com/cilium/cilium",icon_filename:"cilium.png",categories:["data-collection.kubernetes"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cilium Agent\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Cilium Agent metrics for optimized network security and connectivity.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cilium Agent](https://github.com/cilium/cilium).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cilium Agent](https://github.com/cilium/cilium) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cilium_Agent",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cilium_operator",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cilium Operator",link:"https://github.com/cilium/cilium",icon_filename:"cilium.png",categories:["data-collection.kubernetes"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cilium Operator\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Cilium Operator metrics for efficient Kubernetes network security management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cilium Operator](https://github.com/cilium/cilium).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cilium Operator](https://github.com/cilium/cilium) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cilium_Operator",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cilium_proxy",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cilium Proxy",link:"https://github.com/cilium/proxy",icon_filename:"cilium.png",categories:["data-collection.kubernetes"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cilium Proxy\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Cilium Proxy metrics for enhanced network security and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cilium Proxy](https://github.com/cilium/proxy).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cilium Proxy](https://github.com/cilium/proxy) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cilium_Proxy",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cisco_aci",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cisco ACI",link:"https://github.com/RavuAlHemio/prometheus_aci_exporter",icon_filename:"cisco.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","cisco devices"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cisco ACI\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Cisco ACI infrastructure metrics for optimized network performance and resource management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cisco ACI Exporter](https://github.com/RavuAlHemio/prometheus_aci_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cisco ACI Exporter](https://github.com/RavuAlHemio/prometheus_aci_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cisco_ACI",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-citrix_netscaler",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Citrix NetScaler",link:"https://github.com/rokett/Citrix-NetScaler-Exporter",icon_filename:"citrix.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Citrix NetScaler\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on NetScaler performance metrics for efficient application delivery and load balancing.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Citrix NetScaler Exporter](https://github.com/rokett/Citrix-NetScaler-Exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Citrix NetScaler Exporter](https://github.com/rokett/Citrix-NetScaler-Exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Citrix_NetScaler",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-clamd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ClamAV daemon",link:"https://github.com/sergeymakinen/clamav_exporter",icon_filename:"clamav.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ClamAV daemon\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack ClamAV antivirus metrics for enhanced threat detection and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ClamAV daemon stats exporter](https://github.com/sergeymakinen/clamav_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ClamAV daemon stats exporter](https://github.com/sergeymakinen/clamav_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ClamAV_daemon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-clamscan",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Clamscan results",link:"https://github.com/FortnoxAB/clamscan-exporter",icon_filename:"clamav.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Clamscan results\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor ClamAV scanning performance metrics for efficient malware detection and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [clamscan-exporter](https://github.com/FortnoxAB/clamscan-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [clamscan-exporter](https://github.com/FortnoxAB/clamscan-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Clamscan_results",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-clash",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Clash",link:"https://github.com/elonzh/clash_exporter",icon_filename:"clash.png",categories:["data-collection.web-servers-and-web-proxies"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Clash\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Clash proxy server metrics for optimized network performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Clash exporter](https://github.com/elonzh/clash_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Clash exporter](https://github.com/elonzh/clash_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Clash",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-aws_cloudwatch",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"CloudWatch",link:"https://github.com/prometheus/cloudwatch_exporter",icon_filename:"aws-cloudwatch.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# CloudWatch\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor AWS CloudWatch metrics for comprehensive AWS resource management and performance optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [CloudWatch exporter](https://github.com/prometheus/cloudwatch_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [CloudWatch exporter](https://github.com/prometheus/cloudwatch_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-CloudWatch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cloud_foundry",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cloud Foundry",link:"https://github.com/bosh-prometheus/cf_exporter",icon_filename:"cloud-foundry.svg",categories:["data-collection.provisioning-systems"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cloud Foundry\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Cloud Foundry platform metrics for optimized application deployment and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cloud Foundry exporter](https://github.com/bosh-prometheus/cf_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cloud Foundry exporter](https://github.com/bosh-prometheus/cf_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cloud_Foundry",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cloud_foundry_firebase",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cloud Foundry Firehose",link:"https://github.com/bosh-prometheus/firehose_exporter",icon_filename:"cloud-foundry.svg",categories:["data-collection.provisioning-systems"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cloud Foundry Firehose\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Cloud Foundry Firehose metrics for comprehensive platform diagnostics and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cloud Foundry Firehose exporter](https://github.com/bosh-prometheus/firehose_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cloud Foundry Firehose exporter](https://github.com/bosh-prometheus/firehose_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cloud_Foundry_Firehose",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cloudflare_pcap",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cloudflare PCAP",link:"https://github.com/wehkamp/docker-prometheus-cloudflare-exporter",icon_filename:"cloudflare.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cloudflare PCAP\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Cloudflare CDN and security metrics for optimized content delivery and protection.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cloudflare exporter](https://github.com/wehkamp/docker-prometheus-cloudflare-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cloudflare exporter](https://github.com/wehkamp/docker-prometheus-cloudflare-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cloudflare_PCAP",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cmon",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ClusterControl CMON",link:"https://github.com/severalnines/cmon_exporter",icon_filename:"cluster-control.svg",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ClusterControl CMON\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack CMON metrics for Severalnines Cluster Control for efficient monitoring and management of database operations.\n\n\nMetrics are gathered by periodically sending HTTP requests to [CMON Exporter](https://github.com/severalnines/cmon_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [CMON Exporter](https://github.com/severalnines/cmon_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ClusterControl_CMON",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-collectd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Collectd",link:"https://github.com/prometheus/collectd_exporter",icon_filename:"collectd.png",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Collectd\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor system and application metrics with Collectd for comprehensive performance analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Collectd exporter](https://github.com/prometheus/collectd_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Collectd exporter](https://github.com/prometheus/collectd_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Collectd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-concourse",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Concourse",link:"https://concourse-ci.org",icon_filename:"concourse.png",categories:["data-collection.ci-cd-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Concourse\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Concourse CI/CD pipeline metrics for optimized workflow management and deployment.\n\n\nMetrics are gathered by periodically sending HTTP requests to the Concourse built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure built-in Prometheus exporter\n\nTo configure the built-in Prometheus exporter, follow the [official documentation](https://concourse-ci.org/metrics.html#configuring-metrics).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Concourse",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ftbeerpi",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"CraftBeerPi",link:"https://github.com/jo-hannes/craftbeerpi_exporter",icon_filename:"craftbeer.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# CraftBeerPi\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on CraftBeerPi homebrewing metrics for optimized brewing process management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [CraftBeerPi exporter](https://github.com/jo-hannes/craftbeerpi_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [CraftBeerPi exporter](https://github.com/jo-hannes/craftbeerpi_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-CraftBeerPi",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-crowdsec",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Crowdsec",link:"https://docs.crowdsec.net/docs/observability/prometheus",icon_filename:"crowdsec.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Crowdsec\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Crowdsec security metrics for efficient threat detection and response.\n\n\nMetrics are gathered by periodically sending HTTP requests to the Crowdsec build-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure built-in Prometheus exporter\n\nTo configure the built-in Prometheus exporter, follow the [official documentation](https://docs.crowdsec.net/docs/observability/prometheus/).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Crowdsec",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-crypto",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Crypto exchanges",link:"https://github.com/ix-ai/crypto-exporter",icon_filename:"crypto.png",categories:["data-collection.blockchain-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Crypto exchanges\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack cryptocurrency market metrics for informed investment and trading decisions.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Crypto exporter](https://github.com/ix-ai/crypto-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Crypto exporter](https://github.com/ix-ai/crypto-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Crypto_exchanges",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cryptowatch",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Cryptowatch",link:"https://github.com/nbarrientos/cryptowat_exporter",icon_filename:"cryptowatch.png",categories:["data-collection.blockchain-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Cryptowatch\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Cryptowatch market data metrics for comprehensive cryptocurrency market analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cryptowat Exporter](https://github.com/nbarrientos/cryptowat_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cryptowat Exporter](https://github.com/nbarrientos/cryptowat_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Cryptowatch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-custom",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Custom Exporter",link:"https://github.com/orange-cloudfoundry/custom_exporter",icon_filename:"customdata.png",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Custom Exporter\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nCreate and monitor custom metrics tailored to your specific use case and requirements.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Custom Exporter](https://github.com/orange-cloudfoundry/custom_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Custom Exporter](https://github.com/orange-cloudfoundry/custom_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Custom_Exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ddwrt",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"DDWRT Routers",link:"https://github.com/camelusferus/ddwrt_collector",icon_filename:"ddwrt.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# DDWRT Routers\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on DD-WRT router metrics for efficient network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ddwrt-collector](https://github.com/camelusferus/ddwrt_collector).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ddwrt-collector](https://github.com/camelusferus/ddwrt_collector) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-DDWRT_Routers",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dmarc",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"DMARC",link:"https://github.com/jgosmann/dmarc-metrics-exporter",icon_filename:"dmarc.png",categories:["data-collection.mail-servers"]},keywords:["email authentication","policy","reporting"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# DMARC\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack DMARC email authentication metrics for improved email security and deliverability.\n\n\nMetrics are gathered by periodically sending HTTP requests to [dmarc-metrics-exporter](https://github.com/jgosmann/dmarc-metrics-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [dmarc-metrics-exporter](https://github.com/jgosmann/dmarc-metrics-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-DMARC",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dnsbl",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"DNSBL",link:"https://github.com/Luzilla/dnsbl_exporter/",icon_filename:"dnsbl.png",categories:["data-collection.dns-and-dhcp-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# DNSBL\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor DNSBL metrics for efficient domain reputation and security management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [dnsbl-exporter](https://github.com/Luzilla/dnsbl_exporter/).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [dnsbl-exporter](https://github.com/Luzilla/dnsbl_exporter/) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-DNSBL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dell_emc_ecs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dell EMC ECS cluster",link:"https://github.com/paychex/prometheus-emcecs-exporter",icon_filename:"dell.svg",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dell EMC ECS cluster\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Dell EMC ECS object storage metrics for optimized storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Dell EMC ECS Exporter](https://github.com/paychex/prometheus-emcecs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Dell EMC ECS Exporter](https://github.com/paychex/prometheus-emcecs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dell_EMC_ECS_cluster",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dell_emc_isilon",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dell EMC Isilon cluster",link:"https://github.com/paychex/prometheus-isilon-exporter",icon_filename:"dell.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dell EMC Isilon cluster\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Dell EMC Isilon scale-out NAS metrics for efficient storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Dell EMC Isilon Exporter](https://github.com/paychex/prometheus-isilon-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Dell EMC Isilon Exporter](https://github.com/paychex/prometheus-isilon-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dell_EMC_Isilon_cluster",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dell_emc_xtremio",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dell EMC XtremIO cluster",link:"https://github.com/cthiel42/prometheus-xtremio-exporter",icon_filename:"dell.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dell EMC XtremIO cluster\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Dell/EMC XtremIO storage metrics for optimized data management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Dell/EMC XtremIO Exporter](https://github.com/cthiel42/prometheus-xtremio-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Dell/EMC XtremIO Exporter](https://github.com/cthiel42/prometheus-xtremio-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dell_EMC_XtremIO_cluster",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dell_powermax",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dell PowerMax",link:"https://github.com/kckecheng/powermax_exporter",icon_filename:"powermax.png",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dell PowerMax\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Dell EMC PowerMax storage array metrics for efficient storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [PowerMax Exporter](https://github.com/kckecheng/powermax_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [PowerMax Exporter](https://github.com/kckecheng/powermax_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dell_PowerMax",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dependency_track",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dependency-Track",link:"https://github.com/jetstack/dependency-track-exporter",icon_filename:"dependency-track.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dependency-Track\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Dependency-Track metrics for efficient vulnerability management and software supply chain analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Dependency-Track Exporter](https://github.com/jetstack/dependency-track-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Dependency-Track Exporter](https://github.com/jetstack/dependency-track-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dependency-Track",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-digitalocean",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"DigitalOcean",link:"https://github.com/metalmatze/digitalocean_exporter",icon_filename:"digitalocean.svg",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# DigitalOcean\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack DigitalOcean cloud provider metrics for optimized resource management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [DigitalOcean Exporter](https://github.com/metalmatze/digitalocean_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [DigitalOcean Exporter](https://github.com/metalmatze/digitalocean_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-DigitalOcean",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-discourse",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Discourse",link:"https://github.com/discourse/discourse-prometheus",icon_filename:"discourse.svg",categories:["data-collection.media-streaming-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Discourse\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Discourse forum metrics for efficient community management and engagement.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Discourse Exporter](https://github.com/discourse/discourse-prometheus).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Discourse Exporter](https://github.com/discourse/discourse-prometheus) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Discourse",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dutch_electricity_smart_meter",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dutch Electricity Smart Meter",link:"https://github.com/TobiasDeBruijn/prometheus-p1-exporter",icon_filename:"dutch-electricity.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dutch Electricity Smart Meter\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Dutch smart meter P1 port metrics for efficient energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [P1Exporter - Dutch Electricity Smart Meter Exporter](https://github.com/TobiasDeBruijn/prometheus-p1-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [P1Exporter - Dutch Electricity Smart Meter Exporter](https://github.com/TobiasDeBruijn/prometheus-p1-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dutch_Electricity_Smart_Meter",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-dynatrace",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Dynatrace",link:"https://github.com/Apside-TOP/dynatrace_exporter",icon_filename:"dynatrace.svg",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Dynatrace\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Dynatrace APM metrics for comprehensive application performance management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Dynatrace Exporter](https://github.com/Apside-TOP/dynatrace_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Dynatrace Exporter](https://github.com/Apside-TOP/dynatrace_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Dynatrace",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-eos_web",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"EOS",link:"https://eos-web.web.cern.ch/eos-web/",icon_filename:"eos.png",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# EOS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor CERN EOS metrics for efficient storage management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [EOS exporter](https://github.com/cern-eos/eos_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [EOS exporter](https://github.com/cern-eos/eos_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-EOS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-eaton_ups",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Eaton UPS",link:"https://github.com/psyinfra/prometheus-eaton-ups-exporter",icon_filename:"eaton.svg",categories:["data-collection.ups"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Eaton UPS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Eaton uninterruptible power supply (UPS) metrics for efficient power management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Prometheus Eaton UPS Exporter](https://github.com/psyinfra/prometheus-eaton-ups-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Prometheus Eaton UPS Exporter](https://github.com/psyinfra/prometheus-eaton-ups-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Eaton_UPS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-elgato_keylight",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Elgato Key Light devices.",link:"https://github.com/mdlayher/keylight_exporter",icon_filename:"elgato.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Elgato Key Light devices.\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Elgato Key Light metrics for optimized lighting control and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Elgato Key Light exporter](https://github.com/mdlayher/keylight_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Elgato Key Light exporter](https://github.com/mdlayher/keylight_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Elgato_Key_Light_devices.",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-energomera",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Energomera smart power meters",link:"https://github.com/peak-load/energomera_exporter",icon_filename:"energomera.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Energomera smart power meters\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Energomera electricity meter metrics for efficient energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Energomera electricity meter exporter](https://github.com/peak-load/energomera_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [energomera-exporter Energomera electricity meter exporter](https://github.com/peak-load/energomera_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Energomera_smart_power_meters",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-excel",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Excel spreadsheet",link:"https://github.com/MarcusCalidus/excel-exporter",icon_filename:"excel.png",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Excel spreadsheet\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nExport Prometheus metrics to Excel for versatile data analysis and reporting.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Excel Exporter](https://github.com/MarcusCalidus/excel-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Excel Exporter](https://github.com/MarcusCalidus/excel-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Excel_spreadsheet",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-frrouting",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"FRRouting",link:"https://github.com/tynany/frr_exporter",icon_filename:"frrouting.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# FRRouting\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Free Range Routing (FRR) metrics for optimized network routing and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [FRRouting Exporter](https://github.com/tynany/frr_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [FRRouting Exporter](https://github.com/tynany/frr_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-FRRouting",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-fastd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Fastd",link:"https://github.com/freifunk-darmstadt/fastd-exporter",icon_filename:"fastd.png",categories:["data-collection.vpns"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Fastd\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Fastd VPN metrics for efficient virtual private network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Fastd Exporter](https://github.com/freifunk-darmstadt/fastd-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Fastd Exporter](https://github.com/freifunk-darmstadt/fastd-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Fastd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-fortigate",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Fortigate firewall",link:"https://github.com/bluecmd/fortigate_exporter",icon_filename:"fortinet.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Fortigate firewall\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Fortigate firewall metrics for enhanced network protection and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [fortigate_exporter](https://github.com/bluecmd/fortigate_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [fortigate_exporter](https://github.com/bluecmd/fortigate_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Fortigate_firewall",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-freebsd_nfs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"FreeBSD NFS",link:"https://github.com/Axcient/freebsd-nfs-exporter",icon_filename:"freebsd.svg",categories:["data-collection.freebsd"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# FreeBSD NFS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor FreeBSD Network File System metrics for efficient file sharing management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [FreeBSD NFS Exporter](https://github.com/Axcient/freebsd-nfs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [FreeBSD NFS Exporter](https://github.com/Axcient/freebsd-nfs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-FreeBSD_NFS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-freebsd_rctl",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"FreeBSD RCTL-RACCT",link:"https://github.com/yo000/rctl_exporter",icon_filename:"freebsd.svg",categories:["data-collection.freebsd"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# FreeBSD RCTL-RACCT\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on FreeBSD Resource Container metrics for optimized resource management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [FreeBSD RCTL Exporter](https://github.com/yo000/rctl_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [FreeBSD RCTL Exporter](https://github.com/yo000/rctl_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-FreeBSD_RCTL-RACCT",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-freifunk",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Freifunk network",link:"https://github.com/xperimental/freifunk-exporter",icon_filename:"freifunk.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Freifunk network\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Freifunk community network metrics for optimized network performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Freifunk Exporter](https://github.com/xperimental/freifunk-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Freifunk Exporter](https://github.com/xperimental/freifunk-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Freifunk_network",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-fritzbox",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Fritzbox network devices",link:"https://github.com/pdreker/fritz_exporter",icon_filename:"avm.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Fritzbox network devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack AVM Fritzbox router metrics for efficient home network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Fritzbox exporter](https://github.com/pdreker/fritz_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Fritzbox exporter](https://github.com/pdreker/fritz_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Fritzbox_network_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gcp_gce",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"GCP GCE",link:"https://github.com/O1ahmad/gcp-gce-exporter",icon_filename:"gcp-gce.svg",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# GCP GCE\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Google Cloud Platform Compute Engine metrics for efficient cloud resource management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [GCP GCE Exporter](https://github.com/O1ahmad/gcp-gce-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [GCP GCE Exporter](https://github.com/O1ahmad/gcp-gce-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-GCP_GCE",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gcp_quota",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"GCP Quota",link:"https://github.com/mintel/gcp-quota-exporter",icon_filename:"gcp.png",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# GCP Quota\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Google Cloud Platform quota metrics for optimized resource usage and cost management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [GCP Quota Exporter](https://github.com/mintel/gcp-quota-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [GCP Quota Exporter](https://github.com/mintel/gcp-quota-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-GCP_Quota",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gtp",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"GTP",link:"https://github.com/wmnsk/gtp_exporter",icon_filename:"gtpu.png",categories:["data-collection.telephony-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# GTP\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on GTP (GPRS Tunneling Protocol) metrics for optimized mobile data communication and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [GTP Exporter](https://github.com/wmnsk/gtp_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [GTP Exporter](https://github.com/wmnsk/gtp_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-GTP",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-generic_cli",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Generic Command Line Output",link:"https://github.com/MarioMartReq/generic-exporter",icon_filename:"cli.svg",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Generic Command Line Output\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack custom command line output metrics for tailored monitoring and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Generic Command Line Output Exporter](https://github.com/MarioMartReq/generic-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Generic Command Line Output Exporter](https://github.com/MarioMartReq/generic-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Generic_Command_Line_Output",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-enclosure",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Generic storage enclosure tool",link:"https://github.com/Gandi/jbod-rs",icon_filename:"storage-enclosure.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Generic storage enclosure tool\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor storage enclosure metrics for efficient storage device management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [jbod - Generic storage enclosure tool](https://github.com/Gandi/jbod-rs).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [jbod - Generic storage enclosure tool](https://github.com/Gandi/jbod-rs) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Generic_storage_enclosure_tool",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-github_ratelimit",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"GitHub API rate limit",link:"https://github.com/lunarway/github-ratelimit-exporter",icon_filename:"github.svg",categories:["data-collection.other"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# GitHub API rate limit\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor GitHub API rate limit metrics for efficient\nAPI usage and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [GitHub API rate limit Exporter](https://github.com/lunarway/github-ratelimit-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [GitHub API rate limit Exporter](https://github.com/lunarway/github-ratelimit-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-GitHub_API_rate_limit",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-github_repo",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"GitHub repository",link:"https://github.com/githubexporter/github-exporter",icon_filename:"github.svg",categories:["data-collection.other"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# GitHub repository\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack GitHub repository metrics for optimized project and user analytics monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [GitHub Exporter](https://github.com/githubexporter/github-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [GitHub Exporter](https://github.com/githubexporter/github-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-GitHub_repository",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gitlab_runner",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"GitLab Runner",link:"https://gitlab.com/gitlab-org/gitlab-runner",icon_filename:"gitlab.png",categories:["data-collection.ci-cd-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# GitLab Runner\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on GitLab CI/CD job metrics for efficient development and deployment management.\n\n\nMetrics are gathered by periodically sending HTTP requests to GitLab built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure built-in Prometheus exporter\n\nTo configure the built-in Prometheus exporter, follow the [official documentation](https://docs.gitlab.com/runner/monitoring/#configuration-of-the-metrics-http-server).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-GitLab_Runner",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gobetween",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Gobetween",link:"https://github.com/yyyar/gobetween",icon_filename:"gobetween.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Gobetween\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Gobetween load balancer metrics for optimized network traffic management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to Gobetween built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Gobetween",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gcp",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Google Cloud Platform",link:"https://github.com/DazWilkin/gcp-exporter",icon_filename:"gcp.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Google Cloud Platform\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Google Cloud Platform metrics for comprehensive cloud resource management and performance optimization.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Google Cloud Platform Exporter](https://github.com/DazWilkin/gcp-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Google Cloud Platform Exporter](https://github.com/DazWilkin/gcp-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Google_Cloud_Platform",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-google_pagespeed",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Google Pagespeed",link:"https://github.com/foomo/pagespeed_exporter",icon_filename:"google.svg",categories:["data-collection.apm"]},keywords:["cloud services","cloud computing","google cloud services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Google Pagespeed\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Google PageSpeed Insights performance metrics for efficient web page optimization and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Pagespeed exporter](https://github.com/foomo/pagespeed_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Pagespeed exporter](https://github.com/foomo/pagespeed_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Google_Pagespeed",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gcp_stackdriver",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Google Stackdriver",link:"https://github.com/prometheus-community/stackdriver_exporter",icon_filename:"gcp-stackdriver.svg",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","google cloud services"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Google Stackdriver\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Google Stackdriver monitoring metrics for optimized cloud performance and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Google Stackdriver exporter](https://github.com/prometheus-community/stackdriver_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Google Stackdriver exporter](https://github.com/prometheus-community/stackdriver_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Google_Stackdriver",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-grafana",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Grafana",link:"https://grafana.com/",icon_filename:"grafana.png",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Grafana\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Grafana dashboard and visualization metrics for optimized monitoring and data analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to Grafana built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Grafana",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-graylog",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Graylog Server",link:"https://github.com/Graylog2/graylog2-server/",icon_filename:"graylog.svg",categories:["data-collection.logs-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Graylog Server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Graylog server metrics for efficient log management and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to Graylog built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure built-in Prometheus exporter\n\nTo configure the built-in Prometheus exporter, follow the [official documentation](https://go2docs.graylog.org/5-0/interacting_with_your_log_data/metrics.html#PrometheusMetricExporting).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Graylog_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hana",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"HANA",link:"https://github.com/jenningsloy318/hana_exporter",icon_filename:"sap.svg",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# HANA\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack SAP HANA database metrics for efficient data storage and query performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [HANA Exporter](https://github.com/jenningsloy318/hana_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [HANA Exporter](https://github.com/jenningsloy318/hana_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-HANA",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hdsentinel",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"HDSentinel",link:"https://github.com/qusielle/hdsentinel-exporter",icon_filename:"harddisk.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# HDSentinel\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Hard Disk Sentinel metrics for efficient storage device health management and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [HDSentinel Exporter](https://github.com/qusielle/hdsentinel-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [HDSentinel Exporter](https://github.com/qusielle/hdsentinel-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-HDSentinel",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hhvm",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"HHVM",link:"https://github.com/wikimedia/operations-software-hhvm_exporter",icon_filename:"hhvm.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# HHVM\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor HipHop Virtual Machine metrics for efficient\nPHP execution and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [HHVM Exporter](https://github.com/wikimedia/operations-software-hhvm_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [HHVM Exporter](https://github.com/wikimedia/operations-software-hhvm_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-HHVM",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hp_ilo",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"HP iLO",link:"https://github.com/infinityworks/hpilo-exporter",icon_filename:"hp.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# HP iLO\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor HP Integrated Lights Out (iLO) metrics for efficient server management and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [HP iLO Metrics Exporter](https://github.com/infinityworks/hpilo-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [HP iLO Metrics Exporter](https://github.com/infinityworks/hpilo-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-HP_iLO",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-halon",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Halon",link:"https://github.com/tobiasbp/halon_exporter",icon_filename:"halon.svg",categories:["data-collection.mail-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Halon\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Halon email security and delivery metrics for optimized email management and protection.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Halon exporter](https://github.com/tobiasbp/halon_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Halon exporter](https://github.com/tobiasbp/halon_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Halon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hashicorp_vault",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"HashiCorp Vault secrets",link:"https://github.com/tomtom-international/vault-assessment-prometheus-exporter",icon_filename:"vault.svg",categories:["data-collection.authentication-and-authorization"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# HashiCorp Vault secrets\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack HashiCorp Vault security assessment metrics for efficient secrets management and security.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Vault Assessment Prometheus Exporter](https://github.com/tomtom-international/vault-assessment-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Vault Assessment Prometheus Exporter](https://github.com/tomtom-international/vault-assessment-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-HashiCorp_Vault_secrets",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hasura_graphql",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Hasura GraphQL Server",link:"https://github.com/zolamk/hasura-exporter",icon_filename:"hasura.svg",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Hasura GraphQL Server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Hasura GraphQL engine metrics for optimized\nAPI performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Hasura Exporter](https://github.com/zolamk/hasura-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Hasura Exporter](https://github.com/zolamk/hasura-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Hasura_GraphQL_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-helium_hotspot",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Helium hotspot",link:"https://github.com/tedder/helium_hotspot_exporter",icon_filename:"helium.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Helium hotspot\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Helium hotspot metrics for optimized LoRaWAN network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Helium hotspot exporter](https://github.com/tedder/helium_hotspot_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Helium hotspot exporter](https://github.com/tedder/helium_hotspot_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Helium_hotspot",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-helium_miner",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Helium miner (validator)",link:"https://github.com/tedder/miner_exporter",icon_filename:"helium.svg",categories:["data-collection.blockchain-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Helium miner (validator)\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Helium miner and validator metrics for efficient blockchain performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Helium miner (validator) exporter](https://github.com/tedder/miner_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Helium miner (validator) exporter](https://github.com/tedder/miner_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Helium_miner_(validator)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hitron_cgm",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Hitron CGN series CPE",link:"https://github.com/yrro/hitron-exporter",icon_filename:"hitron.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Hitron CGN series CPE\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Hitron CGNV4 gateway metrics for efficient network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Hitron CGNV4 exporter](https://github.com/yrro/hitron-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Hitron CGNV4 exporter](https://github.com/yrro/hitron-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Hitron_CGN_series_CPE",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hitron_coda",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Hitron CODA Cable Modem",link:"https://github.com/hairyhenderson/hitron_coda_exporter",icon_filename:"hitron.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Hitron CODA Cable Modem\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Hitron CODA cable modem metrics for optimized internet connectivity and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Hitron CODA Cable Modem Exporter](https://github.com/hairyhenderson/hitron_coda_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Hitron CODA Cable Modem Exporter](https://github.com/hairyhenderson/hitron_coda_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Hitron_CODA_Cable_Modem",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-homebridge",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Homebridge",link:"https://github.com/lstrojny/homebridge-prometheus-exporter",icon_filename:"homebridge.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Homebridge\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Homebridge smart home metrics for efficient home automation management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Homebridge Prometheus Exporter](https://github.com/lstrojny/homebridge-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Homebridge Prometheus Exporter](https://github.com/lstrojny/homebridge-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Homebridge",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-homey",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Homey",link:"https://github.com/rickardp/homey-prometheus-exporter",icon_filename:"homey.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Homey\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Homey smart home controller metrics for efficient home automation and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Homey Exporter](https://github.com/rickardp/homey-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Homey Exporter](https://github.com/rickardp/homey-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Homey",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-honeypot",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Honeypot",link:"https://github.com/Intrinsec/honeypot_exporter",icon_filename:"intrinsec.svg",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Honeypot\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor honeypot metrics for efficient threat detection and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Intrinsec honeypot_exporter](https://github.com/Intrinsec/honeypot_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Intrinsec honeypot_exporter](https://github.com/Intrinsec/honeypot_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Honeypot",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hilink",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Huawei devices",link:"https://github.com/eliecharra/hilink-exporter",icon_filename:"huawei.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Huawei devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Huawei HiLink device metrics for optimized connectivity and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Huawei Hilink exporter](https://github.com/eliecharra/hilink-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Huawei Hilink exporter](https://github.com/eliecharra/hilink-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Huawei_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-hubble",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Hubble",link:"https://github.com/cilium/hubble",icon_filename:"hubble.png",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Hubble\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Hubble network observability metrics for efficient network visibility and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to Hubble built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure built-in Prometheus exporter\n\nTo configure the built-in Prometheus exporter, follow the [official documentation](https://docs.cilium.io/en/stable/observability/metrics/#hubble-metrics).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Hubble",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ibm_aix_njmon",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IBM AIX systems Njmon",link:"https://github.com/crooks/njmon_exporter",icon_filename:"ibm.svg",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IBM AIX systems Njmon\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on NJmon system performance monitoring metrics for efficient IT infrastructure management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [NJmon](https://github.com/crooks/njmon_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [NJmon](https://github.com/crooks/njmon_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IBM_AIX_systems_Njmon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ibm_cex",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IBM CryptoExpress (CEX) cards",link:"https://github.com/ibm-s390-cloud/k8s-cex-dev-plugin",icon_filename:"ibm.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IBM CryptoExpress (CEX) cards\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack IBM Z Crypto Express device metrics for optimized cryptographic performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [IBM Z CEX Device Plugin Prometheus Exporter](https://github.com/ibm-s390-cloud/k8s-cex-dev-plugin).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [IBM Z CEX Device Plugin Prometheus Exporter](https://github.com/ibm-s390-cloud/k8s-cex-dev-plugin) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IBM_CryptoExpress_(CEX)_cards",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ibm_mq",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IBM MQ",link:"https://github.com/agebhar1/mq_exporter",icon_filename:"ibm.svg",categories:["data-collection.message-brokers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IBM MQ\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on IBM MQ message queue metrics for efficient message transport and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [MQ Exporter](https://github.com/agebhar1/mq_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [MQ Exporter](https://github.com/agebhar1/mq_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IBM_MQ",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ibm_spectrum",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IBM Spectrum",link:"https://github.com/topine/ibm-spectrum-exporter",icon_filename:"ibm.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IBM Spectrum\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor IBM Spectrum storage metrics for efficient data management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [IBM Spectrum Exporter](https://github.com/topine/ibm-spectrum-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [IBM Spectrum Exporter](https://github.com/topine/ibm-spectrum-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IBM_Spectrum",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ibm_spectrum_virtualize",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IBM Spectrum Virtualize",link:"https://github.com/bluecmd/spectrum_virtualize_exporter",icon_filename:"ibm.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IBM Spectrum Virtualize\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor IBM Spectrum Virtualize metrics for efficient storage virtualization and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [spectrum_virtualize_exporter](https://github.com/bluecmd/spectrum_virtualize_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [spectrum_virtualize_exporter](https://github.com/bluecmd/spectrum_virtualize_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IBM_Spectrum_Virtualize",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ibm_zhmc",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IBM Z Hardware Management Console",link:"https://github.com/zhmcclient/zhmc-prometheus-exporter",icon_filename:"ibm.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IBM Z Hardware Management Console\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor IBM Z Hardware Management Console metrics for efficient mainframe management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [IBM Z HMC Exporter](https://github.com/zhmcclient/zhmc-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [IBM Z HMC Exporter](https://github.com/zhmcclient/zhmc-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IBM_Z_Hardware_Management_Console",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-iota",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IOTA full node",link:"https://github.com/crholliday/iota-prom-exporter",icon_filename:"iota.svg",categories:["data-collection.blockchain-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IOTA full node\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on IOTA cryptocurrency network metrics for efficient blockchain performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [IOTA Exporter](https://github.com/crholliday/iota-prom-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [IOTA Exporter](https://github.com/crholliday/iota-prom-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IOTA_full_node",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ipmi",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"IPMI (By SoundCloud)",link:"https://github.com/prometheus-community/ipmi_exporter",icon_filename:"soundcloud.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# IPMI (By SoundCloud)\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor IPMI metrics externally for efficient server hardware management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SoundCloud IPMI Exporter (querying IPMI externally, blackbox-exporter style)](https://github.com/prometheus-community/ipmi_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SoundCloud IPMI Exporter (querying IPMI externally, blackbox-exporter style)](https://github.com/prometheus-community/ipmi_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-IPMI_(By_SoundCloud)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-influxdb",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"InfluxDB",link:"https://github.com/prometheus/influxdb_exporter",icon_filename:"influxdb.svg",categories:["data-collection.database-servers"]},keywords:["database","dbms","data storage"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# InfluxDB\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor InfluxDB time-series database metrics for efficient data storage and query performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [InfluxDB exporter](https://github.com/prometheus/influxdb_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [InfluxDB exporter](https://github.com/prometheus/influxdb_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-InfluxDB",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-jmx",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"JMX",link:"https://github.com/prometheus/jmx_exporter",icon_filename:"java.svg",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# JMX\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Java Management Extensions (JMX) metrics for efficient Java application management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [JMX Exporter](https://github.com/prometheus/jmx_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [JMX Exporter](https://github.com/prometheus/jmx_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-JMX",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-jarvis",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Jarvis Standing Desk",link:"https://github.com/hairyhenderson/jarvis_exporter/",icon_filename:"jarvis.jpg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Jarvis Standing Desk\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Jarvis standing desk usage metrics for efficient workspace ergonomics and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Jarvis Standing Desk Exporter](https://github.com/hairyhenderson/jarvis_exporter/).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Jarvis Standing Desk Exporter](https://github.com/hairyhenderson/jarvis_exporter/) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Jarvis_Standing_Desk",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-jenkins",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Jenkins",link:"https://www.jenkins.io/",icon_filename:"jenkins.svg",categories:["data-collection.ci-cd-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Jenkins\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Jenkins continuous integration server metrics for efficient development and build management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Jenkins exporter](https://github.com/simplesurance/jenkins-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Jenkins exporter](https://github.com/simplesurance/jenkins-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Jenkins",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-jetbrains_fls",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"JetBrains Floating License Server",link:"https://github.com/mkreu/jetbrains-fls-exporter",icon_filename:"jetbrains.png",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# JetBrains Floating License Server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor JetBrains floating license server metrics for efficient software licensing management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [JetBrains Floating License Server Export](https://github.com/mkreu/jetbrains-fls-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [JetBrains Floating License Server Export](https://github.com/mkreu/jetbrains-fls-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-JetBrains_Floating_License_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-kafka",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Kafka",link:"https://github.com/danielqsj/kafka_exporter/",icon_filename:"kafka.svg",categories:["data-collection.message-brokers"]},keywords:["big data","stream processing","message broker"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Kafka\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Kafka message queue metrics for optimized data streaming and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Kafka Exporter](https://github.com/danielqsj/kafka_exporter/).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Kafka Exporter](https://github.com/danielqsj/kafka_exporter/) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Kafka",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-kafka_connect",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Kafka Connect",link:"https://github.com/findelabs/kafka-connect-exporter-rs",icon_filename:"kafka.svg",categories:["data-collection.message-brokers"]},keywords:["big data","stream processing","message broker"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Kafka Connect\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Kafka Connect metrics for efficient data streaming and integration.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Kafka Connect exporter](https://github.com/findelabs/kafka-connect-exporter-rs).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Kafka Connect exporter](https://github.com/findelabs/kafka-connect-exporter-rs) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Kafka_Connect",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-kafka_consumer_lag",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Kafka Consumer Lag",link:"https://github.com/omarsmak/kafka-consumer-lag-monitoring",icon_filename:"kafka.svg",categories:["data-collection.service-discovery-registry"]},keywords:["big data","stream processing","message broker"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Kafka Consumer Lag\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Kafka consumer lag metrics for efficient message queue management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Kafka Consumer Lag Monitoring](https://github.com/omarsmak/kafka-consumer-lag-monitoring).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Kafka Consumer Lag Monitoring](https://github.com/omarsmak/kafka-consumer-lag-monitoring) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Kafka_Consumer_Lag",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-kafka_zookeeper",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Kafka ZooKeeper",link:"https://github.com/cloudflare/kafka_zookeeper_exporter",icon_filename:"kafka.svg",categories:["data-collection.message-brokers"]},keywords:["big data","stream processing","message broker"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Kafka ZooKeeper\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Kafka ZooKeeper metrics for optimized distributed coordination and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Kafka ZooKeeper Exporter](https://github.com/cloudflare/kafka_zookeeper_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Kafka ZooKeeper Exporter](https://github.com/cloudflare/kafka_zookeeper_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Kafka_ZooKeeper",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-kannel",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Kannel",link:"https://github.com/apostvav/kannel_exporter",icon_filename:"kannel.png",categories:["data-collection.telephony-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Kannel\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Kannel SMS gateway and WAP gateway metrics for efficient mobile communication and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Kannel Exporter](https://github.com/apostvav/kannel_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Kannel Exporter](https://github.com/apostvav/kannel_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Kannel",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-keepalived",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Keepalived",link:"https://github.com/gen2brain/keepalived_exporter",icon_filename:"keepalived.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Keepalived\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Keepalived metrics for efficient high-availability and load balancing management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Keepalived Exporter](https://github.com/gen2brain/keepalived_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Keepalived Exporter](https://github.com/gen2brain/keepalived_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Keepalived",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-korral",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Kubernetes Cluster Cloud Cost",link:"https://github.com/agilestacks/korral",icon_filename:"kubernetes.svg",categories:["data-collection.kubernetes"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Kubernetes Cluster Cloud Cost\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Kubernetes cloud cost metrics for efficient cloud resource management and budgeting.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Kubernetes Cloud Cost Exporter](https://github.com/agilestacks/korral).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Kubernetes Cloud Cost Exporter](https://github.com/agilestacks/korral) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Kubernetes_Cluster_Cloud_Cost",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ldap",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"LDAP",link:"https://github.com/titisan/ldap_exporter",icon_filename:"ldap.png",categories:["data-collection.authentication-and-authorization"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# LDAP\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Lightweight Directory Access Protocol (LDAP) metrics for efficient directory service management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [LDAP Exporter](https://github.com/titisan/ldap_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [LDAP Exporter](https://github.com/titisan/ldap_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-LDAP",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-lagerist",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Lagerist Disk latency",link:"https://github.com/Svedrin/lagerist",icon_filename:"linux.png",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Lagerist Disk latency\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack disk latency metrics for efficient storage performance and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Lagerist Disk latency exporter](https://github.com/Svedrin/lagerist).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Lagerist Disk latency exporter](https://github.com/Svedrin/lagerist) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Lagerist_Disk_latency",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-linode",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Linode",link:"https://github.com/DazWilkin/linode-exporter",icon_filename:"linode.svg",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Linode\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Linode cloud hosting metrics for efficient virtual server management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Linode Exporter](https://github.com/DazWilkin/linode-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Linode Exporter](https://github.com/DazWilkin/linode-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Linode",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-lustre",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Lustre metadata",link:"https://github.com/GSI-HPC/prometheus-cluster-exporter",icon_filename:"lustre.png",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Lustre metadata\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Lustre clustered file system for efficient management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Cluster Exporter](https://github.com/GSI-HPC/prometheus-cluster-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Cluster Exporter](https://github.com/GSI-HPC/prometheus-cluster-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Lustre_metadata",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-lynis",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Lynis audit reports",link:"https://github.com/MauveSoftware/lynis_exporter",icon_filename:"lynis.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Lynis audit reports\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Lynis security auditing tool metrics for efficient system security and compliance management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [lynis_exporter](https://github.com/MauveSoftware/lynis_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [lynis_exporter](https://github.com/MauveSoftware/lynis_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Lynis_audit_reports",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mp707",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"MP707 USB thermometer",link:"https://github.com/nradchenko/mp707_exporter",icon_filename:"thermometer.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# MP707 USB thermometer\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack MP707 power strip metrics for efficient energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [MP707 exporter](https://github.com/nradchenko/mp707_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [MP707 exporter](https://github.com/nradchenko/mp707_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-MP707_USB_thermometer",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mqtt_blackbox",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"MQTT Blackbox",link:"https://github.com/inovex/mqtt_blackbox_exporter",icon_filename:"mqtt.svg",categories:["data-collection.message-brokers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# MQTT Blackbox\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack MQTT message transport performance using blackbox testing methods.\n\n\nMetrics are gathered by periodically sending HTTP requests to [MQTT Blackbox Exporter](https://github.com/inovex/mqtt_blackbox_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [MQTT Blackbox Exporter](https://github.com/inovex/mqtt_blackbox_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-MQTT_Blackbox",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-machbase",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Machbase",link:"https://github.com/MACHBASE/prometheus-machbase-exporter",icon_filename:"machbase.png",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Machbase\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Machbase time-series database metrics for efficient data storage and query performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Machbase Exporter](https://github.com/MACHBASE/prometheus-machbase-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Machbase Exporter](https://github.com/MACHBASE/prometheus-machbase-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Machbase",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-maildir",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Maildir",link:"https://github.com/cherti/mailexporter",icon_filename:"mailserver.svg",categories:["data-collection.mail-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Maildir\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack mail server metrics for optimized email management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [mailexporter](https://github.com/cherti/mailexporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [mailexporter](https://github.com/cherti/mailexporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Maildir",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-meilisearch",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Meilisearch",link:"https://github.com/scottaglia/meilisearch_exporter",icon_filename:"meilisearch.svg",categories:["data-collection.search-engines"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Meilisearch\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Meilisearch search engine metrics for efficient search performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Meilisearch Exporter](https://github.com/scottaglia/meilisearch_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Meilisearch Exporter](https://github.com/scottaglia/meilisearch_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Meilisearch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-memcached",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Memcached (community)",link:"https://github.com/prometheus/memcached_exporter",icon_filename:"memcached.svg",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Memcached (community)\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Memcached in-memory key-value store metrics for efficient caching performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Memcached exporter](https://github.com/prometheus/memcached_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Memcached exporter](https://github.com/prometheus/memcached_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Memcached_(community)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-meraki",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Meraki dashboard",link:"https://github.com/TheHolm/meraki-dashboard-promethus-exporter",icon_filename:"meraki.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Meraki dashboard\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Cisco Meraki cloud-managed networking device metrics for efficient network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Meraki dashboard data exporter using API](https://github.com/TheHolm/meraki-dashboard-promethus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Meraki dashboard data exporter using API](https://github.com/TheHolm/meraki-dashboard-promethus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Meraki_dashboard",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mesos",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Mesos",link:"http://github.com/mesosphere/mesos_exporter",icon_filename:"mesos.svg",categories:["data-collection.task-queues"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Mesos\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Apache Mesos cluster manager metrics for efficient resource management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Mesos exporter](http://github.com/mesosphere/mesos_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Mesos exporter](http://github.com/mesosphere/mesos_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Mesos",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mikrotik",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"MikroTik devices",link:"https://github.com/swoga/mikrotik-exporter",icon_filename:"mikrotik.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# MikroTik devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on MikroTik RouterOS metrics for efficient network device management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [mikrotik-exporter](https://github.com/swoga/mikrotik-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [nshttpd/mikrotik-exporter, swoga/m](https://github.com/swoga/mikrotik-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-MikroTik_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-routeros",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Mikrotik RouterOS devices",link:"https://github.com/welbymcroberts/routeros_exporter",icon_filename:"routeros.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Mikrotik RouterOS devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack MikroTik RouterOS metrics for efficient network device management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [RouterOS exporter](https://github.com/welbymcroberts/routeros_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [RouterOS exporter](https://github.com/welbymcroberts/routeros_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Mikrotik_RouterOS_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-minecraft",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Minecraft",link:"https://github.com/sladkoff/minecraft-prometheus-exporter",icon_filename:"minecraft.png",categories:["data-collection.gaming"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Minecraft\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Minecraft server metrics for efficient game server management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Minecraft Exporter](https://github.com/sladkoff/minecraft-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Minecraft Exporter](https://github.com/sladkoff/minecraft-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Minecraft",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-modbus_rtu",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Modbus protocol",link:"https://github.com/dernasherbrezon/modbusrtu_exporter",icon_filename:"modbus.svg",categories:["data-collection.iot-devices"]},keywords:["database","dbms","data storage"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Modbus protocol\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Modbus RTU protocol metrics for efficient industrial automation and control performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [modbusrtu_exporter](https://github.com/dernasherbrezon/modbusrtu_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [modbusrtu_exporter](https://github.com/dernasherbrezon/modbusrtu_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Modbus_protocol",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mogilefs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"MogileFS",link:"https://github.com/KKBOX/mogilefs-exporter",icon_filename:"filesystem.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# MogileFS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor MogileFS distributed file system metrics for efficient storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [MogileFS Exporter](https://github.com/KKBOX/mogilefs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [MogileFS Exporter](https://github.com/KKBOX/mogilefs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-MogileFS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-monnit_mqtt",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Monnit Sensors MQTT",link:"https://github.com/braxton9460/monnit-mqtt-exporter",icon_filename:"monnit.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Monnit Sensors MQTT\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Monnit sensor data via MQTT for efficient IoT device monitoring and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Monnit Sensors MQTT Exporter WIP](https://github.com/braxton9460/monnit-mqtt-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Monnit Sensors MQTT Exporter WIP](https://github.com/braxton9460/monnit-mqtt-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Monnit_Sensors_MQTT",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nrpe",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NRPE daemon",link:"https://github.com/canonical/nrpe_exporter",icon_filename:"nrpelinux.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NRPE daemon\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Nagios Remote Plugin Executor (NRPE) metrics for efficient system and network monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [NRPE exporter](https://github.com/canonical/nrpe_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [NRPE exporter](https://github.com/canonical/nrpe_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NRPE_daemon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nsxt",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NSX-T",link:"https://github.com/jk8s/nsxt_exporter",icon_filename:"vmware-nsx.svg",categories:["data-collection.containers-and-vms"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NSX-T\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack VMware NSX-T software-defined networking metrics for efficient network virtualization and security management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [NSX-T Exporter](https://github.com/jk8s/nsxt_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [NSX-T Exporter](https://github.com/jk8s/nsxt_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NSX-T",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nvml",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NVML",link:"https://github.com/oko/nvml-exporter-rs",icon_filename:"nvidia.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NVML\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on NVIDIA Management Library (NVML) GPU metrics for efficient GPU performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [NVML exporter](https://github.com/oko/nvml-exporter-rs).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [NVML exporter](https://github.com/oko/nvml-exporter-rs) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NVML",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-naemon",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Naemon",link:"https://github.com/Griesbacher/Iapetos",icon_filename:"naemon.svg",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Naemon\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Naemon or Nagios network monitoring metrics for efficient IT infrastructure management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Naemon / Nagios Exporter](https://github.com/Griesbacher/Iapetos).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Naemon / Nagios Exporter](https://github.com/Griesbacher/Iapetos) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Naemon",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nagios",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Nagios",link:"https://github.com/wbollock/nagios_exporter",icon_filename:"nagios.png",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Nagios\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Nagios network monitoring metrics for efficient\nIT infrastructure management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Nagios exporter](https://github.com/wbollock/nagios_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Nagios exporter](https://github.com/wbollock/nagios_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Nagios",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nature_remo",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Nature Remo E lite devices",link:"https://github.com/kenfdev/remo-exporter",icon_filename:"nature-remo.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Nature Remo E lite devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Nature Remo E series smart home device metrics for efficient home automation and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Nature Remo E series Exporter](https://github.com/kenfdev/remo-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Nature Remo E series Exporter](https://github.com/kenfdev/remo-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Nature_Remo_E_lite_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-netapp_solidfire",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NetApp Solidfire",link:"https://github.com/mjavier2k/solidfire-exporter",icon_filename:"netapp.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NetApp Solidfire\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack NetApp Solidfire storage system metrics for efficient data storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [NetApp Solidfire Exporter](https://github.com/mjavier2k/solidfire-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [NetApp Solidfire Exporter](https://github.com/mjavier2k/solidfire-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NetApp_Solidfire",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-netflow",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NetFlow",link:"https://github.com/paihu/netflow_exporter",icon_filename:"netflow.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NetFlow\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack NetFlow network traffic metrics for efficient network monitoring and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [netflow exporter](https://github.com/paihu/netflow_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [netflow exporter](https://github.com/paihu/netflow_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NetFlow",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-netmeter",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NetMeter",link:"https://github.com/ssbostan/netmeter-exporter",icon_filename:"netmeter.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NetMeter\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor NetMeter network traffic metrics for efficient network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [NetMeter Exporter](https://github.com/ssbostan/netmeter-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [NetMeter Exporter](https://github.com/ssbostan/netmeter-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NetMeter",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-netapp_ontap",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Netapp ONTAP API",link:"https://github.com/sapcc/netapp-api-exporter",icon_filename:"netapp.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Netapp ONTAP API\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on NetApp ONTAP storage system metrics for efficient data storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Netapp ONTAP API Exporter](https://github.com/sapcc/netapp-api-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Netapp ONTAP API Exporter](https://github.com/sapcc/netapp-api-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Netapp_ONTAP_API",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-netatmo",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Netatmo sensors",link:"https://github.com/xperimental/netatmo-exporter",icon_filename:"netatmo.svg",categories:["data-collection.iot-devices"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Netatmo sensors\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Netatmo smart home device metrics for efficient home automation and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Netatmo exporter](https://github.com/xperimental/netatmo-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Netatmo exporter](https://github.com/xperimental/netatmo-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Netatmo_sensors",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-newrelic",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"New Relic",link:"https://github.com/jfindley/newrelic_exporter",icon_filename:"newrelic.svg",categories:["data-collection.observability"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# New Relic\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor New Relic application performance management metrics for efficient application monitoring and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [New Relic exporter](https://github.com/jfindley/newrelic_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [New Relic exporter](https://github.com/jfindley/newrelic_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-New_Relic",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nextdns",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"NextDNS",link:"https://github.com/raylas/nextdns-exporter",icon_filename:"nextdns.png",categories:["data-collection.dns-and-dhcp-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# NextDNS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack NextDNS DNS resolver and security platform metrics for efficient DNS management and security.\n\n\nMetrics are gathered by periodically sending HTTP requests to [nextdns-exporter](https://github.com/raylas/nextdns-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [nextdns-exporter](https://github.com/raylas/nextdns-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-NextDNS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nextcloud",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Nextcloud servers",link:"https://github.com/xperimental/nextcloud-exporter",icon_filename:"nextcloud.png",categories:["data-collection.cloud-provider-managed"]},keywords:["cloud services","cloud computing","scalability"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Nextcloud servers\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Nextcloud cloud storage metrics for efficient file hosting and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Nextcloud exporter](https://github.com/xperimental/nextcloud-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Nextcloud exporter](https://github.com/xperimental/nextcloud-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Nextcloud_servers",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-obs_studio",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OBS Studio",link:"https://github.com/lukegb/obs_studio_exporter",icon_filename:"obs-studio.png",categories:["data-collection.media-streaming-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OBS Studio\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack OBS Studio live streaming and recording software metrics for efficient video production and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OBS Studio Exporter](https://github.com/lukegb/obs_studio_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OBS Studio Exporter](https://github.com/lukegb/obs_studio_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OBS_Studio",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-odbc",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ODBC",link:"https://github.com/MACHBASE/prometheus-odbc-exporter",icon_filename:"odbc.svg",categories:["data-collection.database-servers"]},keywords:["database","dbms","data storage"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ODBC\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Open Database Connectivity (ODBC) metrics for efficient database connection and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ODBC Exporter](https://github.com/MACHBASE/prometheus-odbc-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ODBC Exporter](https://github.com/MACHBASE/prometheus-odbc-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ODBC",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-otrs",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OTRS",link:"https://github.com/JulianDroste/otrs_exporter",icon_filename:"otrs.png",categories:["data-collection.notifications"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OTRS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor OTRS (Open-Source Ticket Request System) metrics for efficient helpdesk management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OTRS Exporter](https://github.com/JulianDroste/otrs_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OTRS Exporter](https://github.com/JulianDroste/otrs_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OTRS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openhab",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenHAB",link:"https://github.com/pdreker/openhab_exporter",icon_filename:"openhab.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenHAB\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack openHAB smart home automation system metrics for efficient home automation and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OpenHAB exporter](https://github.com/pdreker/openhab_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OpenHAB exporter](https://github.com/pdreker/openhab_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenHAB",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openldap",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenLDAP (community)",link:"https://github.com/tomcz/openldap_exporter",icon_filename:"openldap.svg",categories:["data-collection.authentication-and-authorization"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenLDAP (community)\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor OpenLDAP directory service metrics for efficient directory management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OpenLDAP Metrics Exporter](https://github.com/tomcz/openldap_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OpenLDAP Metrics Exporter](https://github.com/tomcz/openldap_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenLDAP_(community)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openrc",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenRC",link:"https://git.sr.ht/~tomleb/openrc-exporter",icon_filename:"linux.png",categories:["data-collection.linux-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenRC\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on OpenRC init system metrics for efficient system startup and service management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [openrc-exporter](https://git.sr.ht/~tomleb/openrc-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [openrc-exporter](https://git.sr.ht/~tomleb/openrc-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenRC",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openrct2",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenRCT2",link:"https://github.com/terinjokes/openrct2-prometheus-exporter",icon_filename:"openRCT2.png",categories:["data-collection.gaming"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenRCT2\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack OpenRCT2 game metrics for efficient game server management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OpenRCT2 Prometheus Exporter](https://github.com/terinjokes/openrct2-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OpenRCT2 Prometheus Exporter](https://github.com/terinjokes/openrct2-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenRCT2",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openroadm",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenROADM devices",link:"https://github.com/utdal/openroadm_exporter",icon_filename:"openroadm.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:["network monitoring","network performance","traffic analysis"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenROADM devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor OpenROADM optical transport network metrics using the NETCONF protocol for efficient network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OpenROADM NETCONF Exporter WIP](https://github.com/utdal/openroadm_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OpenROADM NETCONF Exporter WIP](https://github.com/utdal/openroadm_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenROADM_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openstack",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenStack",link:"https://github.com/CanonicalLtd/prometheus-openstack-exporter",icon_filename:"openstack.svg",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenStack\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack OpenStack cloud computing platform metrics for efficient infrastructure management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Openstack exporter](https://github.com/CanonicalLtd/prometheus-openstack-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Openstack exporter](https://github.com/CanonicalLtd/prometheus-openstack-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenStack",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openvas",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenVAS",link:"https://github.com/ModeClearCode/openvas_exporter",icon_filename:"openVAS.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenVAS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor OpenVAS vulnerability scanner metrics for efficient security assessment and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OpenVAS exporter](https://github.com/ModeClearCode/openvas_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OpenVAS exporter](https://github.com/ModeClearCode/openvas_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenVAS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openweathermap",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"OpenWeatherMap",link:"https://github.com/Tenzer/openweathermap-exporter",icon_filename:"openweather.png",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# OpenWeatherMap\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack OpenWeatherMap weather data and air pollution metrics for efficient environmental monitoring and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [OpenWeatherMap Exporter](https://github.com/Tenzer/openweathermap-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [OpenWeatherMap Exporter](https://github.com/Tenzer/openweathermap-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-OpenWeatherMap",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-openvswitch",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Open vSwitch",link:"https://github.com/digitalocean/openvswitch_exporter",icon_filename:"ovs.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Open vSwitch\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Open vSwitch software-defined networking metrics for efficient network virtualization and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Open vSwitch Exporter](https://github.com/digitalocean/openvswitch_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Open vSwitch Exporter](https://github.com/digitalocean/openvswitch_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Open_vSwitch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-oracledb",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Oracle DB (community)",link:"https://github.com/iamseth/oracledb_exporter",icon_filename:"oracle.svg",categories:["data-collection.database-servers"]},keywords:["oracle","database","dbms","data storage"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Oracle DB (community)\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Oracle Database metrics for efficient database management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Oracle DB Exporter](https://github.com/iamseth/oracledb_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Oracle DB Exporter](https://github.com/iamseth/oracledb_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Oracle_DB_(community)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-patroni",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Patroni",link:"https://github.com/gopaytech/patroni_exporter",icon_filename:"patroni.png",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Patroni\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Patroni PostgreSQL high-availability metrics for efficient database management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Patroni Exporter](https://github.com/gopaytech/patroni_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Patroni Exporter](https://github.com/gopaytech/patroni_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Patroni",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-pws",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Personal Weather Station",link:"https://github.com/JohnOrthoefer/pws-exporter",icon_filename:"wunderground.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Personal Weather Station\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack personal weather station metrics for efficient weather monitoring and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Personal Weather Station Exporter](https://github.com/JohnOrthoefer/pws-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Personal Weather Station Exporter](https://github.com/JohnOrthoefer/pws-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Personal_Weather_Station",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-pgpool2",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Pgpool-II",link:"https://github.com/pgpool/pgpool2_exporter",icon_filename:"pgpool2.png",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Pgpool-II\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Pgpool-II PostgreSQL middleware metrics for efficient database connection management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Pgpool-II Exporter](https://github.com/pgpool/pgpool2_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Pgpool-II Exporter](https://github.com/pgpool/pgpool2_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Pgpool-II",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-philips_hue",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Philips Hue",link:"https://github.com/aexel90/hue_exporter",icon_filename:"hue.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Philips Hue\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Philips Hue smart lighting metrics for efficient home automation and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Philips Hue Exporter](https://github.com/aexel90/hue_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Philips Hue Exporter](https://github.com/aexel90/hue_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Philips_Hue",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-pimoroni_enviro_plus",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Pimoroni Enviro+",link:"https://github.com/terradolor/prometheus-enviro-exporter",icon_filename:"pimorino.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Pimoroni Enviro+\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Pimoroni Enviro+ air quality and environmental metrics for efficient environmental monitoring and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Pimoroni Enviro+ Exporter](https://github.com/terradolor/prometheus-enviro-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Pimoroni Enviro+ Exporter](https://github.com/terradolor/prometheus-enviro-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Pimoroni_Enviro+",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-pingdom",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Pingdom",link:"https://github.com/veepee-oss/pingdom_exporter",icon_filename:"solarwinds.svg",categories:["data-collection.synthetic-checks"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Pingdom\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Pingdom website monitoring service metrics for efficient website performance management and diagnostics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Pingdom Exporter](https://github.com/veepee-oss/pingdom_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Pingdom Exporter](https://github.com/veepee-oss/pingdom_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Pingdom",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-podman",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Podman",link:"https://github.com/containers/prometheus-podman-exporter",icon_filename:"podman.png",categories:["data-collection.containers-and-vms"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Podman\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Podman container runtime metrics for efficient container management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [PODMAN exporter](https://github.com/containers/prometheus-podman-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [PODMAN exporter](https://github.com/containers/prometheus-podman-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Podman",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-powerpal",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Powerpal devices",link:"https://github.com/aashley/powerpal_exporter",icon_filename:"powerpal.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Powerpal devices\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Powerpal smart meter metrics for efficient energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Powerpal Exporter](https://github.com/aashley/powerpal_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Powerpal Exporter](https://github.com/aashley/powerpal_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Powerpal_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-proftpd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ProFTPD",link:"https://github.com/transnano/proftpd_exporter",icon_filename:"proftpd.png",categories:["data-collection.ftp-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ProFTPD\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor ProFTPD FTP server metrics for efficient file transfer and server performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ProFTPD Exporter](https://github.com/transnano/proftpd_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ProFTPD Exporter](https://github.com/transnano/proftpd_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ProFTPD",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-generic",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Prometheus endpoint",link:"https://prometheus.io/",icon_filename:"prometheus.svg",categories:["data-collection.generic-data-collection"]},keywords:["prometheus","openmetrics"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Prometheus endpoint\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nThis generic Prometheus collector gathers metrics from any [`Prometheus`](https://prometheus.io/) endpoints.\n\n\nIt collects metrics by periodically sending HTTP requests to the target instance.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Prometheus_endpoint",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-proxmox",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Proxmox VE",link:"https://github.com/prometheus-pve/prometheus-pve-exporter",icon_filename:"proxmox.png",categories:["data-collection.containers-and-vms"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Proxmox VE\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Proxmox Virtual Environment metrics for efficient virtualization and container management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Proxmox VE Exporter](https://github.com/prometheus-pve/prometheus-pve-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Proxmox VE Exporter](https://github.com/prometheus-pve/prometheus-pve-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Proxmox_VE",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-radius",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"RADIUS",link:"https://github.com/devon-mar/radius-exporter",icon_filename:"radius.png",categories:["data-collection.authentication-and-authorization"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# RADIUS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on RADIUS (Remote Authentication Dial-In User Service) protocol metrics for efficient authentication and access management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [RADIUS exporter](https://github.com/devon-mar/radius-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [RADIUS exporter](https://github.com/devon-mar/radius-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-RADIUS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ripe_atlas",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"RIPE Atlas",link:"https://github.com/czerwonk/atlas_exporter",icon_filename:"ripe.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# RIPE Atlas\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on RIPE Atlas Internet measurement platform metrics for efficient network monitoring and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [RIPE Atlas Exporter](https://github.com/czerwonk/atlas_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [RIPE Atlas Exporter](https://github.com/czerwonk/atlas_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-RIPE_Atlas",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-radio_thermostat",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Radio Thermostat",link:"https://github.com/andrewlow/radio-thermostat-exporter",icon_filename:"radiots.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Radio Thermostat\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Radio Thermostat smart thermostat metrics for efficient home automation and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Radio Thermostat Exporter](https://github.com/andrewlow/radio-thermostat-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Radio Thermostat Exporter](https://github.com/andrewlow/radio-thermostat-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Radio_Thermostat",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-rancher",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Rancher",link:"https://github.com/infinityworksltd/prometheus-rancher-exporter",icon_filename:"rancher.svg",categories:["data-collection.kubernetes"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Rancher\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Rancher container orchestration platform metrics for efficient container management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Rancher Exporter](https://github.com/infinityworksltd/prometheus-rancher-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Rancher Exporter](https://github.com/infinityworksltd/prometheus-rancher-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Rancher",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-raritan_pdu",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Raritan PDU",link:"https://github.com/psyinfra/prometheus-raritan-pdu-exporter",icon_filename:"raritan.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Raritan PDU\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Raritan Power Distribution Unit (PDU) metrics for efficient power management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Raritan PDU Exporter](https://github.com/psyinfra/prometheus-raritan-pdu-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Raritan PDU Exporter](https://github.com/psyinfra/prometheus-raritan-pdu-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Raritan_PDU",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-redis_queue",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Redis Queue",link:"https://github.com/mdawar/rq-exporter",icon_filename:"rq.png",categories:["data-collection.message-brokers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Redis Queue\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Python RQ (Redis Queue) job queue metrics for efficient task management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Python RQ Exporter](https://github.com/mdawar/rq-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Python RQ Exporter](https://github.com/mdawar/rq-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Redis_Queue",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sabnzbd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SABnzbd",link:"https://github.com/msroest/sabnzbd_exporter",icon_filename:"sabnzbd.png",categories:["data-collection.media-streaming-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SABnzbd\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SABnzbd Usenet client metrics for efficient file downloads and resource management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SABnzbd Exporter](https://github.com/msroest/sabnzbd_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SABnzbd Exporter](https://github.com/msroest/sabnzbd_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SABnzbd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sma_inverter",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SMA Inverters",link:"https://github.com/dr0ps/sma_inverter_exporter",icon_filename:"sma.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SMA Inverters\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SMA solar inverter metrics for efficient solar energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [sma-exporter](https://github.com/dr0ps/sma_inverter_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [sma-exporter](https://github.com/dr0ps/sma_inverter_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SMA_Inverters",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sonic",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SONiC NOS",link:"https://github.com/kamelnetworks/sonic_exporter",icon_filename:"sonic.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SONiC NOS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Software for Open Networking in the Cloud (SONiC) metrics for efficient network switch management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SONiC Exporter](https://github.com/kamelnetworks/sonic_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SONiC Exporter](https://github.com/kamelnetworks/sonic_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SONiC_NOS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sql",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SQL Database agnostic",link:"https://github.com/free/sql_exporter",icon_filename:"sql.svg",categories:["data-collection.database-servers"]},keywords:["database","relational db","data querying"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SQL Database agnostic\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nQuery SQL databases for efficient database performance monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SQL Exporter](https://github.com/free/sql_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SQL Exporter](https://github.com/free/sql_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SQL_Database_agnostic",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ssh",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SSH",link:"https://github.com/Nordstrom/ssh_exporter",icon_filename:"ssh.png",categories:["data-collection.authentication-and-authorization"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SSH\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SSH server metrics for efficient secure shell server management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SSH Exporter](https://github.com/Nordstrom/ssh_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SSH Exporter](https://github.com/Nordstrom/ssh_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SSH",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ssl",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SSL Certificate",link:"https://github.com/ribbybibby/ssl_exporter",icon_filename:"ssl.svg",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SSL Certificate\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack SSL/TLS certificate metrics for efficient web security and certificate management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SSL Certificate exporter](https://github.com/ribbybibby/ssl_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SSL Certificate exporter](https://github.com/ribbybibby/ssl_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SSL_Certificate",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-salicru_eqx",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Salicru EQX inverter",link:"https://github.com/alejandroscf/prometheus_salicru_exporter",icon_filename:"salicru.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Salicru EQX inverter\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Salicru EQX solar inverter metrics for efficient solar energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Salicru EQX inverter](https://github.com/alejandroscf/prometheus_salicru_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Salicru EQX inverter](https://github.com/alejandroscf/prometheus_salicru_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Salicru_EQX_inverter",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sense_energy",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Sense Energy",link:"https://github.com/ejsuncy/sense_energy_prometheus_exporter",icon_filename:"sense.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Sense Energy\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on Sense Energy smart meter metrics for efficient energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Sense Energy exporter](https://github.com/ejsuncy/sense_energy_prometheus_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Sense Energy exporter](https://github.com/ejsuncy/sense_energy_prometheus_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Sense_Energy",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sentry",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Sentry",link:"https://github.com/snakecharmer/sentry_exporter",icon_filename:"sentry.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Sentry\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Sentry error tracking and monitoring platform metrics for efficient application performance and error management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Sentry Exporter](https://github.com/snakecharmer/sentry_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Sentry Exporter](https://github.com/snakecharmer/sentry_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Sentry",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-servertech",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"ServerTech",link:"https://github.com/tynany/servertech_exporter",icon_filename:"servertech.png",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# ServerTech\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Server Technology power distribution unit (PDU) metrics for efficient power management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ServerTech Exporter](https://github.com/tynany/servertech_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ServerTech Exporter](https://github.com/tynany/servertech_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-ServerTech",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-shell_cmd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Shell command",link:"https://github.com/tomwilkie/prom-run",icon_filename:"crunner.svg",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Shell command\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack custom command output metrics for tailored monitoring and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Command runner exporter](https://github.com/tomwilkie/prom-run).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Command runner exporter](https://github.com/tomwilkie/prom-run) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Shell_command",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-shelly",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Shelly humidity sensor",link:"https://github.com/aexel90/shelly_exporter",icon_filename:"shelly.jpg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Shelly humidity sensor\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Shelly smart home device metrics for efficient home automation and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Shelly Exporter](https://github.com/aexel90/shelly_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Shelly Exporter](https://github.com/aexel90/shelly_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Shelly_humidity_sensor",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sia",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Sia",link:"https://github.com/tbenz9/sia_exporter",icon_filename:"sia.png",categories:["data-collection.blockchain-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Sia\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Sia decentralized storage platform metrics for efficient storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Sia Exporter](https://github.com/tbenz9/sia_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Sia Exporter](https://github.com/tbenz9/sia_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Sia",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-s7_plc",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Siemens S7 PLC",link:"https://github.com/MarcusCalidus/s7-plc-exporter",icon_filename:"siemens.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Siemens S7 PLC\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Siemens S7 Programmable Logic Controller (PLC) metrics for efficient industrial automation and control.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Siemens S7 PLC exporter](https://github.com/MarcusCalidus/s7-plc-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Siemens S7 PLC exporter](https://github.com/MarcusCalidus/s7-plc-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Siemens_S7_PLC",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-site24x7",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Site 24x7",link:"https://github.com/svenstaro/site24x7_exporter",icon_filename:"site24x7.svg",categories:["data-collection.synthetic-checks"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Site 24x7\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Site24x7 website and infrastructure monitoring metrics for efficient performance tracking and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [site24x7 Exporter](https://github.com/svenstaro/site24x7_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [site24x7 Exporter](https://github.com/svenstaro/site24x7_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Site_24x7",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-slurm",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Slurm",link:"https://github.com/vpenso/prometheus-slurm-exporter",icon_filename:"slurm.png",categories:["data-collection.task-queues"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Slurm\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Slurm workload manager metrics for efficient high-performance computing (HPC) and cluster management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [slurm exporter](https://github.com/vpenso/prometheus-slurm-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [slurm exporter](https://github.com/vpenso/prometheus-slurm-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Slurm",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-smartrg808ac",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SmartRG 808AC Cable Modem",link:"https://github.com/AdamIsrael/smartrg808ac_exporter",icon_filename:"smartr.jpeg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SmartRG 808AC Cable Modem\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SmartRG SR808ac router metrics for efficient network device management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [smartrg808ac_exporter](https://github.com/AdamIsrael/smartrg808ac_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [smartrg808ac_exporter](https://github.com/AdamIsrael/smartrg808ac_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SmartRG_808AC_Cable_Modem",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sml",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Smart meters SML",link:"https://github.com/mweinelt/sml-exporter",icon_filename:"sml.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Smart meters SML\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Smart Message Language (SML) metrics for efficient smart metering and energy management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SML Exporter](https://github.com/mweinelt/sml-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SML Exporter](https://github.com/mweinelt/sml-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Smart_meters_SML",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-softether",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SoftEther VPN Server",link:"https://github.com/dalance/softether_exporter",icon_filename:"softether.svg",categories:["data-collection.vpns"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SoftEther VPN Server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SoftEther VPN Server metrics for efficient virtual private network (VPN) management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SoftEther Exporter](https://github.com/dalance/softether_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SoftEther Exporter](https://github.com/dalance/softether_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SoftEther_VPN_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-solaredge",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"SolarEdge inverters",link:"https://github.com/dave92082/SolarEdge-Exporter",icon_filename:"solaredge.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# SolarEdge inverters\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack SolarEdge solar inverter metrics for efficient solar energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [SolarEdge Exporter](https://github.com/dave92082/SolarEdge-Exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [SolarEdge Exporter](https://github.com/dave92082/SolarEdge-Exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-SolarEdge_inverters",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-lsx",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Solar logging stick",link:"https://gitlab.com/bhavin192/lsx-exporter",icon_filename:"solar.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Solar logging stick\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor solar energy metrics using a solar logging stick for efficient solar energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Solar logging stick exporter](https://gitlab.com/bhavin192/lsx-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Solar logging stick exporter](https://gitlab.com/bhavin192/lsx-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Solar_logging_stick",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-solis",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Solis Ginlong 5G inverters",link:"https://github.com/candlerb/solis_exporter",icon_filename:"solis.jpg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Solis Ginlong 5G inverters\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Solis solar inverter metrics for efficient solar energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Solis Exporter](https://github.com/candlerb/solis_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Solis Exporter](https://github.com/candlerb/solis_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Solis_Ginlong_5G_inverters",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-spacelift",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Spacelift",link:"https://github.com/spacelift-io/prometheus-exporter",icon_filename:"spacelift.png",categories:["data-collection.provisioning-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Spacelift\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Spacelift infrastructure-as-code (IaC) platform metrics for efficient infrastructure automation and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Spacelift Exporter](https://github.com/spacelift-io/prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Spacelift Exporter](https://github.com/spacelift-io/prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Spacelift",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-speedify",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Speedify CLI",link:"https://github.com/willshen/speedify_exporter",icon_filename:"speedify.png",categories:["data-collection.vpns"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Speedify CLI\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Speedify VPN metrics for efficient virtual private network (VPN) management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Speedify Exporter](https://github.com/willshen/speedify_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Speedify Exporter](https://github.com/willshen/speedify_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Speedify_CLI",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sphinx",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Sphinx",link:"https://github.com/foxdalas/sphinx_exporter",icon_filename:"sphinx.png",categories:["data-collection.search-engines"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Sphinx\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Sphinx search engine metrics for efficient search and indexing performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Sphinx Exporter](https://github.com/foxdalas/sphinx_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Sphinx Exporter](https://github.com/foxdalas/sphinx_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Sphinx",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-starlink",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Starlink (SpaceX)",link:"https://github.com/danopstech/starlink_exporter",icon_filename:"starlink.svg",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Starlink (SpaceX)\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SpaceX Starlink satellite internet metrics for efficient internet service management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Starlink Exporter (SpaceX)](https://github.com/danopstech/starlink_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Starlink Exporter (SpaceX)](https://github.com/danopstech/starlink_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Starlink_(SpaceX)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-starwind_vsan",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Starwind VSAN VSphere Edition",link:"https://github.com/evoicefire/starwind-vsan-exporter",icon_filename:"starwind.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Starwind VSAN VSphere Edition\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on StarWind Virtual SAN metrics for efficient storage virtualization and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Starwind vSAN Exporter](https://github.com/evoicefire/starwind-vsan-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Starwind vSAN Exporter](https://github.com/evoicefire/starwind-vsan-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Starwind_VSAN_VSphere_Edition",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-statuspage",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"StatusPage",link:"https://github.com/vladvasiliu/statuspage-exporter",icon_filename:"statuspage.png",categories:["data-collection.notifications"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# StatusPage\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor StatusPage.io incident and status metrics for efficient incident management and communication.\n\n\nMetrics are gathered by periodically sending HTTP requests to [StatusPage Exporter](https://github.com/vladvasiliu/statuspage-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [StatusPage Exporter](https://github.com/vladvasiliu/statuspage-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-StatusPage",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-steam_a2s",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Steam",link:"https://github.com/armsnyder/a2s-exporter",icon_filename:"a2s.png",categories:["data-collection.gaming"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Steam\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nGain insights into Steam A2S-supported game servers for performance and availability through real-time metric monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [A2S Exporter](https://github.com/armsnyder/a2s-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [A2S Exporter](https://github.com/armsnyder/a2s-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Steam",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-storidge",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Storidge",link:"https://github.com/Storidge/cio-user-docs/blob/master/integrations/prometheus.md",icon_filename:"storidge.png",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Storidge\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Storidge storage metrics for efficient storage management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Storidge exporter](https://github.com/Storidge/cio-user-docs/blob/master/integrations/prometheus.md).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Storidge exporter](https://github.com/Storidge/cio-user-docs/blob/master/integrations/prometheus.md) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Storidge",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-stream_generic",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Stream",link:"https://github.com/carlpett/stream_exporter",icon_filename:"stream.png",categories:["data-collection.media-streaming-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Stream\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor streaming metrics for efficient media streaming and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Stream exporter](https://github.com/carlpett/stream_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Stream exporter](https://github.com/carlpett/stream_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Stream",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sunspec",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Sunspec Solar Energy",link:"https://github.com/inosion/prometheus-sunspec-exporter",icon_filename:"sunspec.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Sunspec Solar Energy\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor SunSpec Alliance solar energy metrics for efficient solar energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Sunspec Solar Energy Exporter](https://github.com/inosion/prometheus-sunspec-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Sunspec Solar Energy Exporter](https://github.com/inosion/prometheus-sunspec-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Sunspec_Solar_Energy",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-suricata",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Suricata",link:"https://github.com/corelight/suricata_exporter",icon_filename:"suricata.png",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Suricata\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Suricata network intrusion detection and prevention system (IDS/IPS) metrics for efficient network security and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Suricata Exporter](https://github.com/corelight/suricata_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Suricata Exporter](https://github.com/corelight/suricata_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Suricata",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-synology_activebackup",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Synology ActiveBackup",link:"https://github.com/codemonauts/activebackup-prometheus-exporter",icon_filename:"synology.png",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Synology ActiveBackup\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Synology Active Backup metrics for efficient backup and data protection management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Synology ActiveBackup Exporter](https://github.com/codemonauts/activebackup-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Synology ActiveBackup Exporter](https://github.com/codemonauts/activebackup-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Synology_ActiveBackup",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-sysload",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Sysload",link:"https://github.com/egmc/sysload_exporter",icon_filename:"sysload.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Sysload\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor system load metrics for efficient system performance and resource management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Sysload Exporter](https://github.com/egmc/sysload_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Sysload Exporter](https://github.com/egmc/sysload_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Sysload",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-trex",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"T-Rex NVIDIA GPU Miner",link:"https://github.com/dennisstritzke/trex_exporter",icon_filename:"trex.png",categories:["data-collection.hardware-devices-and-sensors"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# T-Rex NVIDIA GPU Miner\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor T-Rex NVIDIA GPU miner metrics for efficient cryptocurrency mining and GPU performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [T-Rex NVIDIA GPU Miner Exporter](https://github.com/dennisstritzke/trex_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [T-Rex NVIDIA GPU Miner Exporter](https://github.com/dennisstritzke/trex_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-T-Rex_NVIDIA_GPU_Miner",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tacas",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"TACACS",link:"https://github.com/devon-mar/tacacs-exporter",icon_filename:"tacacs.png",categories:["data-collection.authentication-and-authorization"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# TACACS\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Terminal Access Controller Access-Control System (TACACS) protocol metrics for efficient network authentication and authorization management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [TACACS Exporter](https://github.com/devon-mar/tacacs-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [TACACS Exporter](https://github.com/devon-mar/tacacs-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-TACACS",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tplink_p110",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"TP-Link P110",link:"https://github.com/ijohanne/prometheus-tplink-p110-exporter",icon_filename:"tplink.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# TP-Link P110\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack TP-Link P110 smart plug metrics for efficient energy management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [TP-Link P110 Exporter](https://github.com/ijohanne/prometheus-tplink-p110-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [TP-Link P110 Exporter](https://github.com/ijohanne/prometheus-tplink-p110-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-TP-Link_P110",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tado",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Tado smart heating solution",link:"https://github.com/eko/tado-exporter",icon_filename:"tado.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Tado smart heating solution\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Tado smart thermostat metrics for efficient home heating and cooling management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Tado\\xB0 Exporter](https://github.com/eko/tado-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Tado Exporter](https://github.com/eko/tado-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Tado_smart_heating_solution",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tankerkoenig",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Tankerkoenig API",link:"https://github.com/lukasmalkmus/tankerkoenig_exporter",icon_filename:"tanker.png",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Tankerkoenig API\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Tankerknig API fuel price metrics for efficient fuel price monitoring and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Tankerknig API Exporter](https://github.com/lukasmalkmus/tankerkoenig_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Tankerknig API Exporter](https://github.com/lukasmalkmus/tankerkoenig_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Tankerkoenig_API",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tesla_powerwall",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Tesla Powerwall",link:"https://github.com/foogod/powerwall_exporter",icon_filename:"tesla.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Tesla Powerwall\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Tesla Powerwall metrics for efficient home energy storage and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Tesla Powerwall Exporter](https://github.com/foogod/powerwall_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Tesla Powerwall Exporter](https://github.com/foogod/powerwall_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Tesla_Powerwall",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tesla_wall_connector",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Tesla Wall Connector",link:"https://github.com/benclapp/tesla_wall_connector_exporter",icon_filename:"tesla.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Tesla Wall Connector\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Tesla Wall Connector charging station metrics for efficient electric vehicle charging management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Tesla Wall Connector Exporter](https://github.com/benclapp/tesla_wall_connector_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Tesla Wall Connector Exporter](https://github.com/benclapp/tesla_wall_connector_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Tesla_Wall_Connector",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-tesla_vehicle",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Tesla vehicle",link:"https://github.com/wywywywy/tesla-prometheus-exporter",icon_filename:"tesla.png",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Tesla vehicle\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Tesla vehicle metrics for efficient electric vehicle management and monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Tesla exporter](https://github.com/wywywywy/tesla-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Tesla exporter](https://github.com/wywywywy/tesla-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Tesla_vehicle",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-traceroute",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Traceroute",link:"https://github.com/jeanfabrice/prometheus-tcptraceroute-exporter",icon_filename:"traceroute.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Traceroute\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nExport traceroute metrics for efficient network path analysis and performance monitoring.\n\n\nMetrics are gathered by periodically sending HTTP requests to [traceroute exporter](https://github.com/jeanfabrice/prometheus-tcptraceroute-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [traceroute exporter](https://github.com/jeanfabrice/prometheus-tcptraceroute-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Traceroute",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-twincat_ads_webservice",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"TwinCAT ADS Web Service",link:"https://github.com/MarcusCalidus/twincat-ads-webservice-exporter",icon_filename:"twincat.png",categories:["data-collection.generic-data-collection"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# TwinCAT ADS Web Service\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor TwinCAT ADS (Automation Device Specification) Web Service metrics for efficient industrial automation and control.\n\n\nMetrics are gathered by periodically sending HTTP requests to [TwinCAT ADS Web Service exporter](https://github.com/MarcusCalidus/twincat-ads-webservice-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [TwinCAT ADS Web Service exporter](https://github.com/MarcusCalidus/twincat-ads-webservice-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-TwinCAT_ADS_Web_Service",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-twitch",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Twitch",link:"https://github.com/damoun/twitch_exporter",icon_filename:"twitch.svg",categories:["data-collection.media-streaming-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Twitch\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Twitch streaming platform metrics for efficient live streaming management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Twitch exporter](https://github.com/damoun/twitch_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Twitch exporter](https://github.com/damoun/twitch_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Twitch",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-ubiquity_ufiber",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Ubiquiti UFiber OLT",link:"https://github.com/swoga/ufiber-exporter",icon_filename:"ubiquiti.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Ubiquiti UFiber OLT\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Ubiquiti UFiber GPON (Gigabit Passive Optical Network) device metrics for efficient fiber-optic network management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [ufiber-exporter](https://github.com/swoga/ufiber-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [ufiber-exporter](https://github.com/swoga/ufiber-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Ubiquiti_UFiber_OLT",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-uptimerobot",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Uptimerobot",link:"https://github.com/wosc/prometheus-uptimerobot",icon_filename:"uptimerobot.svg",categories:["data-collection.synthetic-checks"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Uptimerobot\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor UptimeRobot website uptime monitoring metrics for efficient website availability tracking and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Uptimerobot Exporter](https://github.com/wosc/prometheus-uptimerobot).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Uptimerobot Exporter](https://github.com/wosc/prometheus-uptimerobot) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Uptimerobot",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-vscode",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"VSCode",link:"https://github.com/guicaulada/vscode-exporter",icon_filename:"vscode.svg",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# VSCode\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Visual Studio Code editor metrics for efficient development environment management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [VSCode Exporter](https://github.com/guicaulada/vscode-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [VSCode Exporter](https://github.com/guicaulada/vscode-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-VSCode",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-vault_pki",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Vault PKI",link:"https://github.com/aarnaud/vault-pki-exporter",icon_filename:"vault.svg",categories:["data-collection.security-systems"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Vault PKI\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor HashiCorp Vault Public Key Infrastructure (PKI) metrics for efficient certificate management and security.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Vault PKI Exporter](https://github.com/aarnaud/vault-pki-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Vault PKI Exporter](https://github.com/aarnaud/vault-pki-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Vault_PKI",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-vertica",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Vertica",link:"https://github.com/vertica/vertica-prometheus-exporter",icon_filename:"vertica.svg",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Vertica\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Vertica analytics database platform metrics for efficient database performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [vertica-prometheus-exporter](https://github.com/vertica/vertica-prometheus-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [vertica-prometheus-exporter](https://github.com/vertica/vertica-prometheus-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Vertica",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-warp10",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Warp10",link:"https://github.com/centreon/warp10-sensision-exporter",icon_filename:"warp10.svg",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Warp10\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Warp 10 time-series database metrics for efficient time-series data management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Warp10 Exporter](https://github.com/centreon/warp10-sensision-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Warp10 Exporter](https://github.com/centreon/warp10-sensision-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Warp10",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-xmpp_blackbox",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"XMPP Server",link:"https://github.com/horazont/xmpp-blackbox-exporter",icon_filename:"xmpp.svg",categories:["data-collection.message-brokers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# XMPP Server\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor XMPP (Extensible Messaging and Presence Protocol) server metrics for efficient messaging and communication management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [XMPP Server Exporter](https://github.com/horazont/xmpp-blackbox-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [XMPP Server Exporter](https://github.com/horazont/xmpp-blackbox-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-XMPP_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-xiaomi_mi_flora",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Xiaomi Mi Flora",link:"https://github.com/xperimental/flowercare-exporter",icon_filename:"xiaomi.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Xiaomi Mi Flora\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep tabs on MiFlora plant monitor metrics for efficient plant care and growth management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [MiFlora / Flower Care Exporter](https://github.com/xperimental/flowercare-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [MiFlora / Flower Care Exporter](https://github.com/xperimental/flowercare-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Xiaomi_Mi_Flora",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-yourls",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"YOURLS URL Shortener",link:"https://github.com/just1not2/prometheus-exporter-yourls",icon_filename:"yourls.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# YOURLS URL Shortener\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor YOURLS (Your Own URL Shortener) metrics for efficient URL shortening service management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [YOURLS exporter](https://github.com/just1not2/prometheus-exporter-yourls).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [YOURLS exporter](https://github.com/just1not2/prometheus-exporter-yourls) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-YOURLS_URL_Shortener",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-zerto",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Zerto",link:"https://github.com/claranet/zerto-exporter",icon_filename:"zerto.png",categories:["data-collection.cloud-provider-managed"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Zerto\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Zerto disaster recovery and data protection metrics for efficient backup and recovery management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Zerto Exporter](https://github.com/claranet/zerto-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Zerto Exporter](https://github.com/claranet/zerto-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Zerto",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-zulip",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Zulip",link:"https://github.com/brokenpip3/zulip-exporter",icon_filename:"zulip.png",categories:["data-collection.media-streaming-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Zulip\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Zulip open-source group chat application metrics for efficient team communication management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Zulip Exporter](https://github.com/brokenpip3/zulip-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Zulip Exporter](https://github.com/brokenpip3/zulip-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Zulip",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-zyxel_gs1200",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"Zyxel GS1200-8",link:"https://github.com/robinelfrink/gs1200-exporter",icon_filename:"zyxel.png",categories:["data-collection.networking-stack-and-network-interfaces"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# Zyxel GS1200-8\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Zyxel GS1200 network switch metrics for efficient network device management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [Zyxel GS1200 Exporter](https://github.com/robinelfrink/gs1200-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [Zyxel GS1200 Exporter](https://github.com/robinelfrink/gs1200-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-Zyxel_GS1200-8",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-bpftrace",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"bpftrace variables",link:"https://github.com/andreasgerstmayr/bpftrace_exporter",icon_filename:"bpftrace.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# bpftrace variables\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack bpftrace metrics for advanced performance analysis and troubleshooting.\n\n\nMetrics are gathered by periodically sending HTTP requests to [bpftrace exporter](https://github.com/andreasgerstmayr/bpftrace_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [bpftrace exporter](https://github.com/andreasgerstmayr/bpftrace_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-bpftrace_variables",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-cadvisor",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"cAdvisor",link:"https://github.com/google/cadvisor",icon_filename:"cadvisor.png",categories:["data-collection.containers-and-vms"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# cAdvisor\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor container resource usage and performance metrics with cAdvisor for efficient container management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [cAdvisor](https://github.com/google/cadvisor).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [cAdvisor](https://github.com/google/cadvisor) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-cAdvisor",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-etcd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"etcd",link:"https://etcd.io/",icon_filename:"etcd.svg",categories:["data-collection.service-discovery-registry"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# etcd\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack etcd database metrics for optimized distributed key-value store management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to etcd built-in Prometheus exporter.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-etcd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-gpsd",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"gpsd",link:"https://github.com/natesales/gpsd-exporter",icon_filename:"gpsd.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# gpsd\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor GPSD (GPS daemon) metrics for efficient GPS data management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [gpsd exporter](https://github.com/natesales/gpsd-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [gpsd exporter](https://github.com/natesales/gpsd-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-gpsd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-iqair",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"iqAir AirVisual air quality monitors",link:"https://github.com/Packetslave/iqair_exporter",icon_filename:"iqair.svg",categories:["data-collection.iot-devices"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# iqAir AirVisual air quality monitors\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor air quality data from IQAir devices for efficient environmental monitoring and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [IQair Exporter](https://github.com/Packetslave/iqair_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [IQair Exporter](https://github.com/Packetslave/iqair_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-iqAir_AirVisual_air_quality_monitors",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-jolokia",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"jolokia",link:"https://github.com/aklinkert/jolokia_exporter",icon_filename:"jolokia.png",categories:["data-collection.apm"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# jolokia\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor Jolokia JVM metrics for optimized Java application performance and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [jolokia_exporter](https://github.com/aklinkert/jolokia_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [jolokia_exporter](https://github.com/aklinkert/jolokia_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-jolokia",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-journald",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"journald",link:"https://github.com/dead-claudia/journald-exporter",icon_filename:"linux.png",categories:["data-collection.logs-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# journald\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on systemd-journald metrics for efficient log management and analysis.\n\n\nMetrics are gathered by periodically sending HTTP requests to [journald-exporter](https://github.com/dead-claudia/journald-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [journald-exporter](https://github.com/dead-claudia/journald-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-journald",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-loki",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"loki",link:"https://github.com/grafana/loki",icon_filename:"loki.png",categories:["data-collection.logs-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# loki\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack Loki metrics.\n\n\nMetrics are gathered by periodically sending HTTP requests to [loki](https://github.com/grafana/loki).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Loki\n\nInstall [loki](https://github.com/grafana/loki) according to its documentation.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-loki",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mosquitto",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"mosquitto",link:"https://github.com/sapcc/mosquitto-exporter",icon_filename:"mosquitto.svg",categories:["data-collection.message-brokers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# mosquitto\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nKeep an eye on Mosquitto MQTT broker metrics for efficient IoT message transport and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [mosquitto exporter](https://github.com/sapcc/mosquitto-exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [mosquitto exporter](https://github.com/sapcc/mosquitto-exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-mosquitto",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-mtail",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"mtail",link:"https://github.com/google/mtail",icon_filename:"mtail.png",categories:["data-collection.logs-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# mtail\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor log data metrics using mtail log data extractor and parser.\n\n\nMetrics are gathered by periodically sending HTTP requests to [mtail](https://github.com/google/mtail).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [mtail](https://github.com/google/mtail) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-mtail",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-nftables",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"nftables",link:"https://github.com/Sheridan/nftables_exporter",icon_filename:"nftables.png",categories:["data-collection.linux-systems.firewall-metrics"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# nftables\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor nftables firewall metrics for efficient network security and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [nftables_exporter](https://github.com/Sheridan/nftables_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [nftables_exporter](https://github.com/Sheridan/nftables_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-nftables",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-pgbackrest",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"pgBackRest",link:"https://github.com/woblerr/pgbackrest_exporter",icon_filename:"pgbackrest.png",categories:["data-collection.database-servers"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# pgBackRest\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nMonitor pgBackRest PostgreSQL backup metrics for efficient database backup and management.\n\n\nMetrics are gathered by periodically sending HTTP requests to [pgBackRest Exporter](https://github.com/woblerr/pgbackrest_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [pgBackRest Exporter](https://github.com/woblerr/pgbackrest_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-pgBackRest",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-prometheus-strongswan",module_name:"prometheus",plugin_name:"go.d.plugin",monitored_instance:{name:"strongSwan",link:"https://github.com/jlti-dev/ipsec_exporter",icon_filename:"strongswan.svg",categories:["data-collection.vpns"]},keywords:[],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1,community:!0},overview:"# strongSwan\n\nPlugin: go.d.plugin\nModule: prometheus\n\n## Overview\n\nTrack strongSwan VPN and IPSec metrics using the vici interface for efficient virtual private network (VPN) management and performance.\n\n\nMetrics are gathered by periodically sending HTTP requests to [strongSwan/IPSec/vici Exporter](https://github.com/jlti-dev/ipsec_exporter).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on the local host by trying to connect to known ports that are [allocated to exporters](https://github.com/prometheus/prometheus/wiki/Default-port-allocations).\nThe full list of endpoints is available in the collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/config/go.d/prometheus.conf).\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Exporter\n\nInstall [strongSwan/IPSec/vici Exporter](https://github.com/jlti-dev/ipsec_exporter) by following the instructions mentioned in the exporter README.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/prometheus.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/prometheus.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| selector | Time series selector (filter). | | no |\n| fallback_type | Time series selector (filter). | | no |\n| max_time_series | Global time series limit. If an endpoint returns number of time series > limit the data is not processed. | 2000 | no |\n| max_time_series_per_metric | Time series per metric (metric name) limit. Metrics with number of time series > limit are skipped. | 200 | no |\n| timeout | HTTP request timeout. | 10 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### selector\n\nThis option allows you to filter out unwanted time series. Only metrics matching the selector will be collected.\n\n- Logic: (pattern1 OR pattern2) AND !(pattern3 or pattern4)\n- Pattern syntax: [selector](/src/go/collectors/go.d.plugin/pkg/prometheus/selector/README.md).\n- Option syntax:\n\n```yaml\nselector:\n allow:\n - pattern1\n - pattern2\n deny:\n - pattern3\n - pattern4\n```\n\n\n##### fallback_type\n\nThis option allows you to process Untyped metrics as Counter or Gauge instead of ignoring them.\n\n- Metric name pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match).\n- Option syntax:\n\n```yaml\nfallback_type:\n counter:\n - metric_name_pattern1\n - metric_name_pattern2\n gauge:\n - metric_name_pattern3\n - metric_name_pattern4\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nA basic example configuration.\n\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n```\n##### Read metrics from a file\n\nAn example configuration to read metrics from a file.\n\n{% details open=true summary="Config" %}\n```yaml\n# use "file://" scheme\njobs:\n - name: myapp\n url: file:///opt/metrics/myapp/metrics.txt\n\n```\n{% /details %}\n##### HTTP authentication\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nBasic HTTP authentication.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:9090/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n> **Note**: Change the port of the monitored application on which it provides metrics.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:9090/metrics\n\n - name: remote\n url: http://192.0.2.1:9090/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `prometheus` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m prometheus\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThis collector has built-in grouping logic based on the [type of metrics](https://prometheus.io/docs/concepts/metric_types/).\n\n| Metric | Chart | Dimension(s) | Algorithm |\n|---------------------------|-------------------------------------------|----------------------|-------------|\n| Gauge | for each label set | one, the metric name | absolute |\n| Counter | for each label set | one, the metric name | incremental |\n| Summary (quantiles) | for each label set (excluding 'quantile') | for each quantile | absolute |\n| Summary (sum and count) | for each label set | the metric name | incremental |\n| Histogram (buckets) | for each label set (excluding 'le') | for each bucket | incremental |\n| Histogram (sum and count) | for each label set | the metric name | incremental |\n\nUntyped metrics (have no '# TYPE') processing:\n\n- As Counter or Gauge depending on pattern match when 'fallback_type' is used.\n- As Counter if it has suffix '_total'.\n- As Summary if it has 'quantile' label.\n- As Histogram if it has 'le' label.\n\n**The rest are ignored**.\n\n",integration_type:"collector",id:"go.d.plugin-prometheus-strongSwan",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/prometheus/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-proxysql",plugin_name:"go.d.plugin",module_name:"proxysql",monitored_instance:{name:"ProxySQL",link:"https://www.proxysql.com/",icon_filename:"proxysql.png",categories:["data-collection.database-servers"]},keywords:["proxysql","databases","sql"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# ProxySQL\n\nPlugin: go.d.plugin\nModule: proxysql\n\n## Overview\n\nThis collector monitors ProxySQL servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/proxysql.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/proxysql.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| dsn | Data Source Name. See [DSN syntax](https://github.com/go-sql-driver/mysql#dsn-data-source-name). | stats:stats@tcp(127.0.0.1:6032)/ | yes |\n| timeout | Query timeout in seconds. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: stats:stats@tcp(127.0.0.1:6032)/\n\n```\n{% /details %}\n##### my.cnf\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n my.cnf: \'/etc/my.cnf\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n dsn: stats:stats@tcp(127.0.0.1:6032)/\n\n - name: remote\n dsn: stats:stats@tcp(203.0.113.0:6032)/\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `proxysql` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m proxysql\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ProxySQL instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| proxysql.client_connections_count | connected, non_idle, hostgroup_locked | connections |\n| proxysql.client_connections_rate | created, aborted | connections/s |\n| proxysql.server_connections_count | connected | connections |\n| proxysql.server_connections_rate | created, aborted, delayed | connections/s |\n| proxysql.backends_traffic | recv, sent | B/s |\n| proxysql.clients_traffic | recv, sent | B/s |\n| proxysql.active_transactions_count | client | connections |\n| proxysql.questions_rate | questions | questions/s |\n| proxysql.slow_queries_rate | slow | queries/s |\n| proxysql.queries_rate | autocommit, autocommit_filtered, commit_filtered, rollback, rollback_filtered, backend_change_user, backend_init_db, backend_set_names, frontend_init_db, frontend_set_names, frontend_use_db | queries/s |\n| proxysql.backend_statements_count | total, unique | statements |\n| proxysql.backend_statements_rate | prepare, execute, close | statements/s |\n| proxysql.client_statements_count | total, unique | statements |\n| proxysql.client_statements_rate | prepare, execute, close | statements/s |\n| proxysql.cached_statements_count | cached | statements |\n| proxysql.query_cache_entries_count | entries | entries |\n| proxysql.query_cache_memory_used | used | B |\n| proxysql.query_cache_io | in, out | B/s |\n| proxysql.query_cache_requests_rate | read, write, read_success | requests/s |\n| proxysql.mysql_monitor_workers_count | workers, auxiliary | threads |\n| proxysql.mysql_monitor_workers_rate | started | workers/s |\n| proxysql.mysql_monitor_connect_checks_rate | succeed, failed | checks/s |\n| proxysql.mysql_monitor_ping_checks_rate | succeed, failed | checks/s |\n| proxysql.mysql_monitor_read_only_checks_rate | succeed, failed | checks/s |\n| proxysql.mysql_monitor_replication_lag_checks_rate | succeed, failed | checks/s |\n| proxysql.jemalloc_memory_used | active, allocated, mapped, metadata, resident, retained | B |\n| proxysql.memory_used | auth, sqlite3, query_digest, query_rules, firewall_users_table, firewall_users_config, firewall_rules_table, firewall_rules_config, mysql_threads, admin_threads, cluster_threads | B |\n| proxysql.uptime | uptime | seconds |\n\n### Per command\n\nThese metrics refer to the SQL command.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| command | SQL command. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| proxysql.mysql_command_execution_rate | uptime | seconds |\n| proxysql.mysql_command_execution_time | time | microseconds |\n| proxysql.mysql_command_execution_duration | 100us, 500us, 1ms, 5ms, 10ms, 50ms, 100ms, 500ms, 1s, 5s, 10s, +Inf | microseconds |\n\n### Per user\n\nThese metrics refer to the user.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| user | username from the mysql_users table |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| proxysql.mysql_user_connections_utilization | used | percentage |\n| proxysql.mysql_user_connections_count | used | connections |\n\n### Per backend\n\nThese metrics refer to the backend server.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| host | backend server host |\n| port | backend server port |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| proxysql.backend_status | online, shunned, offline_soft, offline_hard | status |\n| proxysql.backend_connections_usage | free, used | connections |\n| proxysql.backend_connections_rate | succeed, failed | connections/s |\n| proxysql.backend_queries_rate | queries | queries/s |\n| proxysql.backend_traffic | recv, send | B/s |\n| proxysql.backend_latency | latency | microseconds |\n\n",integration_type:"collector",id:"go.d.plugin-proxysql-ProxySQL",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/proxysql/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-pulsar",plugin_name:"go.d.plugin",module_name:"pulsar",monitored_instance:{name:"Apache Pulsar",link:"https://pulsar.apache.org/",icon_filename:"pulsar.svg",categories:["data-collection.message-brokers"]},keywords:["pulsar"],related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"}]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Apache Pulsar\n\nPlugin: go.d.plugin\nModule: pulsar\n\n## Overview\n\nThis collector monitors Pulsar servers.\n\n\nIt collects broker statistics using Pulsar's [Prometheus endpoint](https://pulsar.apache.org/docs/en/deploy-monitoring/#broker-stats).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Pulsar instances running on localhost.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/pulsar.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/pulsar.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8080/metrics | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1:8080/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8080/metrics\n\n - name: remote\n url: http://192.0.2.1:8080/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `pulsar` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m pulsar\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n- topic_* metrics are available when `exposeTopicLevelMetricsInPrometheus` is set to true.\n- subscription_* and namespace_subscription metrics are available when `exposeTopicLevelMetricsInPrometheus` si set to true.\n- replication_* and namespace_replication_* metrics are available when replication is configured and `replicationMetricsEnabled` is set to true.\n\n\n### Per Apache Pulsar instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| pulsar.broker_components | namespaces, topics, subscriptions, producers, consumers | components |\n| pulsar.messages_rate | publish, dispatch | messages/s |\n| pulsar.throughput_rate | publish, dispatch | KiB/s |\n| pulsar.storage_size | used | KiB |\n| pulsar.storage_operations_rate | read, write | message batches/s |\n| pulsar.msg_backlog | backlog | messages |\n| pulsar.storage_write_latency | <=0.5ms, <=1ms, <=5ms, =10ms, <=20ms, <=50ms, <=100ms, <=200ms, <=1s, >1s | entries/s |\n| pulsar.entry_size | <=128B, <=512B, <=1KB, <=2KB, <=4KB, <=16KB, <=100KB, <=1MB, >1MB | entries/s |\n| pulsar.subscription_delayed | delayed | message batches |\n| pulsar.subscription_msg_rate_redeliver | redelivered | messages/s |\n| pulsar.subscription_blocked_on_unacked_messages | blocked | subscriptions |\n| pulsar.replication_rate | in, out | messages/s |\n| pulsar.replication_throughput_rate | in, out | KiB/s |\n| pulsar.replication_backlog | backlog | messages |\n\n### Per namespace\n\nTBD\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| pulsar.namespace_broker_components | topics, subscriptions, producers, consumers | components |\n| pulsar.namespace_messages_rate | publish, dispatch | messages/s |\n| pulsar.namespace_throughput_rate | publish, dispatch | KiB/s |\n| pulsar.namespace_storage_size | used | KiB |\n| pulsar.namespace_storage_operations_rate | read, write | message batches/s |\n| pulsar.namespace_msg_backlog | backlog | messages |\n| pulsar.namespace_storage_write_latency | <=0.5ms, <=1ms, <=5ms, =10ms, <=20ms, <=50ms, <=100ms, <=200ms, <=1s, >1s | entries/s |\n| pulsar.namespace_entry_size | <=128B, <=512B, <=1KB, <=2KB, <=4KB, <=16KB, <=100KB, <=1MB, >1MB | entries/s |\n| pulsar.namespace_subscription_delayed | delayed | message batches |\n| pulsar.namespace_subscription_msg_rate_redeliver | redelivered | messages/s |\n| pulsar.namespace_subscription_blocked_on_unacked_messages | blocked | subscriptions |\n| pulsar.namespace_replication_rate | in, out | messages/s |\n| pulsar.namespace_replication_throughput_rate | in, out | KiB/s |\n| pulsar.namespace_replication_backlog | backlog | messages |\n| pulsar.topic_producers | a dimension per topic | producers |\n| pulsar.topic_subscriptions | a dimension per topic | subscriptions |\n| pulsar.topic_consumers | a dimension per topic | consumers |\n| pulsar.topic_messages_rate_in | a dimension per topic | publishes/s |\n| pulsar.topic_messages_rate_out | a dimension per topic | dispatches/s |\n| pulsar.topic_throughput_rate_in | a dimension per topic | KiB/s |\n| pulsar.topic_throughput_rate_out | a dimension per topic | KiB/s |\n| pulsar.topic_storage_size | a dimension per topic | KiB |\n| pulsar.topic_storage_read_rate | a dimension per topic | message batches/s |\n| pulsar.topic_storage_write_rate | a dimension per topic | message batches/s |\n| pulsar.topic_msg_backlog | a dimension per topic | messages |\n| pulsar.topic_subscription_delayed | a dimension per topic | message batches |\n| pulsar.topic_subscription_msg_rate_redeliver | a dimension per topic | messages/s |\n| pulsar.topic_subscription_blocked_on_unacked_messages | a dimension per topic | blocked subscriptions |\n| pulsar.topic_replication_rate_in | a dimension per topic | messages/s |\n| pulsar.topic_replication_rate_out | a dimension per topic | messages/s |\n| pulsar.topic_replication_throughput_rate_in | a dimension per topic | messages/s |\n| pulsar.topic_replication_throughput_rate_out | a dimension per topic | messages/s |\n| pulsar.topic_replication_backlog | a dimension per topic | messages |\n\n",integration_type:"collector",id:"go.d.plugin-pulsar-Apache_Pulsar",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/pulsar/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-rabbitmq",plugin_name:"go.d.plugin",module_name:"rabbitmq",monitored_instance:{name:"RabbitMQ",link:"https://www.rabbitmq.com/",icon_filename:"rabbitmq.svg",categories:["data-collection.message-brokers"]},keywords:["rabbitmq","message brokers"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# RabbitMQ\n\nPlugin: go.d.plugin\nModule: rabbitmq\n\n## Overview\n\nThis collector monitors RabbitMQ instances.\n\nIt collects data using an HTTP-based API provided by the [management plugin](https://www.rabbitmq.com/management.html).\nThe following endpoints are used:\n\n- `/api/overview`\n- `/api/node/{node_name}`\n- `/api/vhosts`\n- `/api/queues` (disabled by default)\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable management plugin.\n\nThe management plugin is included in the RabbitMQ distribution, but disabled.\nTo enable see [Management Plugin](https://www.rabbitmq.com/management.html#getting-started) documentation.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/rabbitmq.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/rabbitmq.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://localhost:15672 | yes |\n| collect_queues_metrics | Collect stats per vhost per queues. Enabling this can introduce serious overhead on both Netdata and RabbitMQ if many queues are configured and used. | no | no |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:15672\n\n```\n{% /details %}\n##### Basic HTTP auth\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:15672\n username: admin\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:15672\n\n - name: remote\n url: http://192.0.2.0:15672\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `rabbitmq` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m rabbitmq\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per RabbitMQ instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| rabbitmq.messages_count | ready, unacknowledged | messages |\n| rabbitmq.messages_rate | ack, publish, publish_in, publish_out, confirm, deliver, deliver_no_ack, get, get_no_ack, deliver_get, redeliver, return_unroutable | messages/s |\n| rabbitmq.objects_count | channels, consumers, connections, queues, exchanges | messages |\n| rabbitmq.connection_churn_rate | created, closed | operations/s |\n| rabbitmq.channel_churn_rate | created, closed | operations/s |\n| rabbitmq.queue_churn_rate | created, deleted, declared | operations/s |\n| rabbitmq.file_descriptors_count | available, used | fd |\n| rabbitmq.sockets_count | available, used | sockets |\n| rabbitmq.erlang_processes_count | available, used | processes |\n| rabbitmq.erlang_run_queue_processes_count | length | processes |\n| rabbitmq.memory_usage | used | bytes |\n| rabbitmq.disk_space_free_size | free | bytes |\n\n### Per vhost\n\nThese metrics refer to the virtual host.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vhost | virtual host name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| rabbitmq.vhost_messages_count | ready, unacknowledged | messages |\n| rabbitmq.vhost_messages_rate | ack, publish, publish_in, publish_out, confirm, deliver, deliver_no_ack, get, get_no_ack, deliver_get, redeliver, return_unroutable | messages/s |\n\n### Per queue\n\nThese metrics refer to the virtual host queue.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vhost | virtual host name |\n| queue | queue name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| rabbitmq.queue_messages_count | ready, unacknowledged, paged_out, persistent | messages |\n| rabbitmq.queue_messages_rate | ack, publish, publish_in, publish_out, confirm, deliver, deliver_no_ack, get, get_no_ack, deliver_get, redeliver, return_unroutable | messages/s |\n\n",integration_type:"collector",id:"go.d.plugin-rabbitmq-RabbitMQ",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/rabbitmq/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-redis",plugin_name:"go.d.plugin",module_name:"redis",monitored_instance:{name:"Redis",link:"https://redis.com/",categories:["data-collection.database-servers"],icon_filename:"redis.svg"},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"},{plugin_name:"cgroups.plugin",module_name:"cgroups"}]}},alternative_monitored_instances:[],info_provided_to_referring_integrations:{description:""},keywords:["redis","databases"],most_popular:!0},overview:"# Redis\n\nPlugin: go.d.plugin\nModule: redis\n\n## Overview\n\nThis collector monitors the health and performance of Redis servers and collects general statistics, CPU and memory consumption, replication information, command statistics, and more.\n\n\nIt connects to the Redis instance via a TCP or UNIX socket and executes the following commands:\n\n- [INFO ALL](https://redis.io/commands/info)\n- [PING](https://redis.io/commands/ping/)\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by attempting to connect using known Redis TCP and UNIX sockets:\n\n- 127.0.0.1:6379\n- /tmp/redis.sock\n- /var/run/redis/redis.sock\n- /var/lib/redis/redis.sock\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/redis.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/redis.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Redis server address. | redis://@localhost:6379 | yes |\n| timeout | Dial (establishing new connections), read (socket reads) and write (socket writes) timeout in seconds. | 1 | no |\n| username | Username used for authentication. | | no |\n| password | Password used for authentication. | | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certificate authority that client use when verifying server certificates. | | no |\n| tls_cert | Client tls certificate. | | no |\n| tls_key | Client tls key. | | no |\n\n{% /details %}\n#### Examples\n\n##### TCP socket\n\nAn example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'redis://@127.0.0.1:6379'\n\n```\n{% /details %}\n##### Unix socket\n\nAn example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'unix://@/tmp/redis.sock'\n\n```\n{% /details %}\n##### TCP socket with password\n\nAn example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'redis://:password@127.0.0.1:6379'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n address: 'redis://:password@127.0.0.1:6379'\n\n - name: remote\n address: 'redis://user:password@203.0.113.0:6379'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `redis` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m redis\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ redis_connections_rejected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/redis.conf) | redis.connections | connections rejected because of maxclients limit in the last minute |\n| [ redis_bgsave_slow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/redis.conf) | redis.bgsave_now | duration of the on-going RDB save operation |\n| [ redis_bgsave_broken ](https://github.com/netdata/netdata/blob/master/src/health/health.d/redis.conf) | redis.bgsave_health | status of the last RDB save operation (0: ok, 1: error) |\n| [ redis_master_link_down ](https://github.com/netdata/netdata/blob/master/src/health/health.d/redis.conf) | redis.master_link_down_since_time | time elapsed since the link between master and slave is down |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Redis instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| redis.connections | accepted, rejected | connections/s |\n| redis.clients | connected, blocked, tracking, in_timeout_table | clients |\n| redis.ping_latency | min, max, avg | seconds |\n| redis.commands | processes | commands/s |\n| redis.keyspace_lookup_hit_rate | lookup_hit_rate | percentage |\n| redis.memory | max, used, rss, peak, dataset, lua, scripts | bytes |\n| redis.mem_fragmentation_ratio | mem_fragmentation | ratio |\n| redis.key_eviction_events | evicted | keys/s |\n| redis.net | received, sent | kilobits/s |\n| redis.rdb_changes | changes | operations |\n| redis.bgsave_now | current_bgsave_time | seconds |\n| redis.bgsave_health | last_bgsave | status |\n| redis.bgsave_last_rdb_save_since_time | last_bgsave_time | seconds |\n| redis.aof_file_size | current, base | bytes |\n| redis.commands_calls | a dimension per command | calls |\n| redis.commands_usec | a dimension per command | microseconds |\n| redis.commands_usec_per_sec | a dimension per command | microseconds/s |\n| redis.key_expiration_events | expired | keys/s |\n| redis.database_keys | a dimension per database | keys |\n| redis.database_expires_keys | a dimension per database | keys |\n| redis.connected_replicas | connected | replicas |\n| redis.master_link_status | up, down | status |\n| redis.master_last_io_since_time | time | seconds |\n| redis.master_link_down_since_time | time | seconds |\n| redis.uptime | uptime | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-redis-Redis",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/redis/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-rspamd",plugin_name:"go.d.plugin",module_name:"rspamd",monitored_instance:{name:"Rspamd",link:"https://rspamd.com/",categories:["data-collection.security-systems"],icon_filename:"globe.svg"},related_resources:{integrations:{list:[{plugin_name:"go.d.plugin",module_name:"httpcheck"},{plugin_name:"apps.plugin",module_name:"apps"}]}},alternative_monitored_instances:[],info_provided_to_referring_integrations:{description:""},keywords:["spam","rspamd","email"],most_popular:!1},overview:"# Rspamd\n\nPlugin: go.d.plugin\nModule: rspamd\n\n## Overview\n\nThis collector monitors the activity and performance of Rspamd servers. It gathers various metrics including scanned emails, learned messages, spam/ham counts, and actions taken on emails (reject, rewrite, etc.).\n\n\nIt retrieves statistics from Rspamd's [built-in web server](https://rspamd.com/doc/workers/controller.html) by making HTTP requests to the `/stat` endpoint.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects Rspamd instances running on localhost that are listening on port 11334.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/rspamd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/rspamd.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:11334 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:11334\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:11334\n username: username\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:11334\n\n - name: remote\n url: http://192.0.2.1:11334\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `rspamd` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m rspamd\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Rspamd instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| rspamd.classifications | ham, spam | messages/s |\n| rspamd.actions | reject, soft_reject, rewrite_subject, add_header, greylist, custom, discard, quarantine, no_action | messages/s |\n| rspamd.scans | scanned | messages/s |\n| rspamd.learns | learned | messages/s |\n| rspamd.connections | connections | connections/s |\n| rspamd.control_connections | control_connections | connections/s |\n\n",integration_type:"collector",id:"go.d.plugin-rspamd-Rspamd",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/rspamd/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-scaleio",plugin_name:"go.d.plugin",module_name:"scaleio",monitored_instance:{name:"Dell EMC ScaleIO",link:"https://www.dell.com/en-ca/dt/storage/scaleio/scaleioreadynode.htm",icon_filename:"dell.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["scaleio"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Dell EMC ScaleIO\n\nPlugin: go.d.plugin\nModule: scaleio\n\n## Overview\n\nThis collector monitors ScaleIO (VxFlex OS) instances via VxFlex OS Gateway API.\n\nIt collects metrics for the following ScaleIO components:\n\n- System\n- Storage Pool\n- Sdc\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/scaleio.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/scaleio.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | https://127.0.0.1:80 | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | yes |\n| password | Password for basic HTTP authentication. | | yes |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1\n username: admin\n password: password\n tls_skip_verify: yes # self-signed certificate\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instance.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1\n username: admin\n password: password\n tls_skip_verify: yes # self-signed certificate\n\n - name: remote\n url: https://203.0.113.10\n username: admin\n password: password\n tls_skip_verify: yes\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `scaleio` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m scaleio\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Dell EMC ScaleIO instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| scaleio.system_capacity_total | total | KiB |\n| scaleio.system_capacity_in_use | in_use | KiB |\n| scaleio.system_capacity_usage | thick, decreased, thin, snapshot, spare, unused | KiB |\n| scaleio.system_capacity_available_volume_allocation | available | KiB |\n| scaleio.system_capacity_health_state | protected, degraded, in_maintenance, failed, unavailable | KiB |\n| scaleio.system_workload_primary_bandwidth_total | total | KiB/s |\n| scaleio.system_workload_primary_bandwidth | read, write | KiB/s |\n| scaleio.system_workload_primary_iops_total | total | iops/s |\n| scaleio.system_workload_primary_iops | read, write | iops/s |\n| scaleio.system_workload_primary_io_size_total | io_size | KiB |\n| scaleio.system_rebalance | read, write | KiB/s |\n| scaleio.system_rebalance_left | left | KiB |\n| scaleio.system_rebalance_time_until_finish | time | seconds |\n| scaleio.system_rebuild | read, write | KiB/s |\n| scaleio.system_rebuild_left | left | KiB |\n| scaleio.system_defined_components | devices, fault_sets, protection_domains, rfcache_devices, sdc, sds, snapshots, storage_pools, volumes, vtrees | components |\n| scaleio.system_components_volumes_by_type | thick, thin | volumes |\n| scaleio.system_components_volumes_by_mapping | mapped, unmapped | volumes |\n\n### Per storage pool\n\nThese metrics refer to the storage pool.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| scaleio.storage_pool_capacity_total | total | KiB |\n| scaleio.storage_pool_capacity_in_use | in_use | KiB |\n| scaleio.storage_pool_capacity_usage | thick, decreased, thin, snapshot, spare, unused | KiB |\n| scaleio.storage_pool_capacity_utilization | used | percentage |\n| scaleio.storage_pool_capacity_available_volume_allocation | available | KiB |\n| scaleio.storage_pool_capacity_health_state | protected, degraded, in_maintenance, failed, unavailable | KiB |\n| scaleio.storage_pool_components | devices, snapshots, volumes, vtrees | components |\n\n### Per sdc\n\nThese metrics refer to the SDC (ScaleIO Data Client).\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| scaleio.sdc_mdm_connection_state | connected | boolean |\n| scaleio.sdc_bandwidth | read, write | KiB/s |\n| scaleio.sdc_iops | read, write | iops/s |\n| scaleio.sdc_io_size | read, write | KiB |\n| scaleio.sdc_num_of_mapped_volumed | mapped | volumes |\n\n",integration_type:"collector",id:"go.d.plugin-scaleio-Dell_EMC_ScaleIO",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/scaleio/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-sensors",plugin_name:"go.d.plugin",module_name:"sensors",monitored_instance:{name:"Linux Sensors (lm-sensors)",link:"https://hwmon.wiki.kernel.org/lm_sensors",icon_filename:"microchip.svg",categories:["data-collection.hardware-devices-and-sensors"]},keywords:["sensors","temperature","voltage","current","power","fan","energy","humidity"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Linux Sensors (lm-sensors)\n\nPlugin: go.d.plugin\nModule: sensors\n\n## Overview\n\nThis collector gathers real-time system sensor statistics, including temperature, voltage, current, power, fan speed, energy consumption, and humidity, utilizing the [sensors](https://linux.die.net/man/1/sensors) binary.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe following type of sensors are auto-detected:\n\n- temperature\n- fan\n- voltage\n- current\n- power\n- energy\n- humidity\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install lm-sensors\n\n- Install `lm-sensors` using your distribution\'s package manager.\n- Run `sensors-detect` to detect hardware monitoring chips.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/sensors.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/sensors.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| binary_path | Path to the `sensors` binary. If an absolute path is provided, the collector will use it directly; otherwise, it will search for the binary in directories specified in the PATH environment variable. | /usr/bin/sensors | yes |\n| timeout | Timeout for executing the binary, specified in seconds. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom binary path\n\nThe executable is not in the directories specified in the PATH environment variable.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: sensors\n binary_path: /usr/local/sbin/sensors\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `sensors` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m sensors\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per sensor\n\nThese metrics refer to the sensor.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| chip | The hardware component responsible for the sensor monitoring. |\n| feature | The specific sensor or monitoring point provided by the chip. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| sensors.sensor_temperature | temperature | Celsius |\n| sensors.sensor_voltage | voltage | Volts |\n| sensors.sensor_current | current | Amperes |\n| sensors.sensor_power | power | Watts |\n| sensors.sensor_fan_speed | fan | RPM |\n| sensors.sensor_energy | energy | Joules |\n| sensors.sensor_humidity | humidity | percent |\n\n",integration_type:"collector",id:"go.d.plugin-sensors-Linux_Sensors_(lm-sensors)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/sensors/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-smartctl",plugin_name:"go.d.plugin",module_name:"smartctl",monitored_instance:{name:"S.M.A.R.T.",link:"https://linux.die.net/man/8/smartd",icon_filename:"smart.png",categories:["data-collection.hardware-devices-and-sensors"]},keywords:["smart","S.M.A.R.T.","SCSI devices","ATA devices"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# S.M.A.R.T.\n\nPlugin: go.d.plugin\nModule: smartctl\n\n## Overview\n\nThis collector monitors the health status of storage devices by analyzing S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) counters.\nIt relies on the [`smartctl`](https://linux.die.net/man/8/smartctl) CLI tool but avoids directly executing the binary.\nInstead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment.\nThis approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\nExecuted commands:\n- `smartctl --json --scan`\n- `smartctl --json --all {deviceName} --device {deviceType} --nocheck {powerMode}`\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install smartmontools (v7.0+)\n\nInstall `smartmontools` version 7.0 or later using your distribution\'s package manager. Version 7.0 introduced the `--json` output mode, which is required for this collector to function properly.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/smartctl.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/smartctl.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | interval for updating Netdata charts, measured in seconds. Collector might use cached data if less than **Devices poll interval**. | 10 | no |\n| timeout | smartctl binary execution timeout. | 5 | no |\n| scan_every | interval for discovering new devices using `smartctl --scan`, measured in seconds. | 900 | no |\n| poll_devices_every | interval for gathering data for every device, measured in seconds. Data is cached for this interval. | 300 | no |\n| device_selector | Specifies a pattern to match the \'info name\' of devices as reported by `smartctl --scan --json`. | * | no |\n\n{% /details %}\n#### Examples\n\n##### Custom devices poll interval\n\nAllows you to override the default devices poll interval (data collection).\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: smartctl\n devices_poll_interval: 60 # Collect S.M.A.R.T statistics every 60 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `smartctl` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m smartctl\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per controller\n\nThese metrics refer to the Storage Device.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device_name | Device name |\n| device_type | Device type |\n| model_name | Model name |\n| serial_number | Serial number |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| smartctl.device_smart_status | passed, failed | status |\n| smartctl.device_ata_smart_error_log_count | error_log | logs |\n| smartctl.device_power_on_time | power_on_time | seconds |\n| smartctl.device_temperature | temperature | Celsius |\n| smartctl.device_power_cycles_count | power | cycles |\n| smartctl.device_smart_attr_{attribute_name} | {attribute_name} | {attribute_unit} |\n| smartctl.device_smart_attr_{attribute_name}_normalized | {attribute_name} | value |\n\n",integration_type:"collector",id:"go.d.plugin-smartctl-S.M.A.R.T.",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/smartctl/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-snmp",plugin_name:"go.d.plugin",module_name:"snmp",monitored_instance:{name:"SNMP devices",link:"",icon_filename:"snmp.png",categories:["data-collection.generic-data-collection"]},keywords:["snmp"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# SNMP devices\n\nPlugin: go.d.plugin\nModule: snmp\n\n## Overview\n\nThis collector monitors any SNMP devices and uses the [gosnmp](https://github.com/gosnmp/gosnmp) package.\n\nIt supports:\n\n- all SNMP versions: SNMPv1, SNMPv2c and SNMPv3.\n- any number of SNMP devices.\n- each SNMP device can be used to collect data for any number of charts.\n- each chart may have any number of dimensions.\n- each SNMP device may have a different update frequency.\n- each SNMP device will accept one or more batches to report values (you can set `max_request_size` per SNMP server, to control the size of batches).\n\nKeep in mind that many SNMP switches and routers are very slow. They may not be able to report values per second.\n`go.d.plugin` reports the time it took for the SNMP device to respond when executed in the debug mode.\n\nAlso, if many SNMP clients are used on the same SNMP device at the same time, values may be skipped.\nThis is a problem of the SNMP device, not this collector. In this case, consider reducing the frequency of data collection (increasing `update_every`).\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Find OIDs\n\nUse `snmpwalk`, like this:\n\n```sh\nsnmpwalk -t 20 -O fn -v 2c -c public 192.0.2.1\n```\n\n- `-t 20` is the timeout in seconds.\n- `-O fn` will display full OIDs in numeric format.\n- `-v 2c` is the SNMP version.\n- `-c public` is the SNMP community.\n- `192.0.2.1` is the SNMP device.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/snmp.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/snmp.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| hostname | Target ipv4 address. | 127.0.0.1 | yes |\n| community | SNMPv1/2 community string. | public | no |\n| options.version | SNMP version. Available versions: 1, 2, 3. | 2 | no |\n| options.port | Target port. | 161 | no |\n| options.retries | Retries to attempt. | 1 | no |\n| options.timeout | SNMP request/response timeout. | 10 | no |\n| options.max_request_size | Maximum number of OIDs allowed in one one SNMP request. | 60 | no |\n| user.name | SNMPv3 user name. | | no |\n| user.name | Security level of SNMPv3 messages. | | no |\n| user.auth_proto | Security level of SNMPv3 messages. | | no |\n| user.name | Authentication protocol for SNMPv3 messages. | | no |\n| user.auth_key | Authentication protocol pass phrase. | | no |\n| user.priv_proto | Privacy protocol for SNMPv3 messages. | | no |\n| user.priv_key | Privacy protocol pass phrase. | | no |\n| charts | List of charts. | [] | yes |\n| charts.id | Chart ID. Used to uniquely identify the chart. | | yes |\n| charts.title | Chart title. | Untitled chart | no |\n| charts.units | Chart units. | num | no |\n| charts.family | Chart family. | charts.id | no |\n| charts.type | Chart type (line, area, stacked). | line | no |\n| charts.priority | Chart priority. | 70000 | no |\n| charts.multiply_range | Used when you need to define many charts using incremental OIDs. | [] | no |\n| charts.dimensions | List of chart dimensions. | [] | yes |\n| charts.dimensions.oid | Collected metric OID. | | yes |\n| charts.dimensions.name | Dimension name. | | yes |\n| charts.dimensions.algorithm | Dimension algorithm (absolute, incremental). | absolute | no |\n| charts.dimensions.multiplier | Collected value multiplier, applied to convert it properly to units. | 1 | no |\n| charts.dimensions.divisor | Collected value divisor, applied to convert it properly to units. | 1 | no |\n\n##### user.auth_proto\n\nThe security of an SNMPv3 message as per RFC 3414 (`user.level`):\n\n| String value | Int value | Description |\n|:------------:|:---------:|------------------------------------------|\n| none | 1 | no message authentication or encryption |\n| authNoPriv | 2 | message authentication and no encryption |\n| authPriv | 3 | message authentication and encryption |\n\n\n##### user.name\n\nThe digest algorithm for SNMPv3 messages that require authentication (`user.auth_proto`):\n\n| String value | Int value | Description |\n|:------------:|:---------:|-------------------------------------------|\n| none | 1 | no message authentication |\n| md5 | 2 | MD5 message authentication (HMAC-MD5-96) |\n| sha | 3 | SHA message authentication (HMAC-SHA-96) |\n| sha224 | 4 | SHA message authentication (HMAC-SHA-224) |\n| sha256 | 5 | SHA message authentication (HMAC-SHA-256) |\n| sha384 | 6 | SHA message authentication (HMAC-SHA-384) |\n| sha512 | 7 | SHA message authentication (HMAC-SHA-512) |\n\n\n##### user.priv_proto\n\nThe encryption algorithm for SNMPv3 messages that require privacy (`user.priv_proto`):\n\n| String value | Int value | Description |\n|:------------:|:---------:|-------------------------------------------------------------------------|\n| none | 1 | no message encryption |\n| des | 2 | ES encryption (CBC-DES) |\n| aes | 3 | 128-bit AES encryption (CFB-AES-128) |\n| aes192 | 4 | 192-bit AES encryption (CFB-AES-192) with "Blumenthal" key localization |\n| aes256 | 5 | 256-bit AES encryption (CFB-AES-256) with "Blumenthal" key localization |\n| aes192c | 6 | 192-bit AES encryption (CFB-AES-192) with "Reeder" key localization |\n| aes256c | 7 | 256-bit AES encryption (CFB-AES-256) with "Reeder" key localization |\n\n\n{% /details %}\n#### Examples\n\n##### SNMPv1/2\n\nIn this example:\n\n- the SNMP device is `192.0.2.1`.\n- the SNMP version is `2`.\n- the SNMP community is `public`.\n- we will update the values every 10 seconds.\n- we define 2 charts `bandwidth_port1` and `bandwidth_port2`, each having 2 dimensions: `in` and `out`.\n\n> **SNMPv1**: just set `options.version` to 1.\n> **Note**: the algorithm chosen is `incremental`, because the collected values show the total number of bytes transferred, which we need to transform into kbps. To chart gauges (e.g. temperature), use `absolute` instead.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: switch\n update_every: 10\n hostname: 192.0.2.1\n community: public\n options:\n version: 2\n charts:\n - id: "bandwidth_port1"\n title: "Switch Bandwidth for port 1"\n units: "kilobits/s"\n type: "area"\n family: "ports"\n dimensions:\n - name: "in"\n oid: "1.3.6.1.2.1.2.2.1.10.1"\n algorithm: "incremental"\n multiplier: 8\n divisor: 1000\n - name: "out"\n oid: "1.3.6.1.2.1.2.2.1.16.1"\n multiplier: -8\n divisor: 1000\n - id: "bandwidth_port2"\n title: "Switch Bandwidth for port 2"\n units: "kilobits/s"\n type: "area"\n family: "ports"\n dimensions:\n - name: "in"\n oid: "1.3.6.1.2.1.2.2.1.10.2"\n algorithm: "incremental"\n multiplier: 8\n divisor: 1000\n - name: "out"\n oid: "1.3.6.1.2.1.2.2.1.16.2"\n multiplier: -8\n divisor: 1000\n\n```\n{% /details %}\n##### SNMPv3\n\nTo use SNMPv3:\n\n- use `user` instead of `community`.\n- set `options.version` to 3.\n\nThe rest of the configuration is the same as in the SNMPv1/2 example.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: switch\n update_every: 10\n hostname: 192.0.2.1\n options:\n version: 3\n user:\n name: username\n level: authPriv\n auth_proto: sha256\n auth_key: auth_protocol_passphrase\n priv_proto: aes256\n priv_key: priv_protocol_passphrase\n\n```\n{% /details %}\n##### Multiply range\n\nIf you need to define many charts using incremental OIDs, you can use the `charts.multiply_range` option.\n\nThis is like the SNMPv1/2 example, but the option will multiply the current chart from 1 to 24 inclusive, producing 24 charts in total for the 24 ports of the switch `192.0.2.1`.\n\nEach of the 24 new charts will have its id (1-24) appended at:\n\n- its chart unique `id`, i.e. `bandwidth_port_1` to `bandwidth_port_24`.\n- its title, i.e. `Switch Bandwidth for port 1` to `Switch Bandwidth for port 24`.\n- its `oid` (for all dimensions), i.e. dimension in will be `1.3.6.1.2.1.2.2.1.10.1` to `1.3.6.1.2.1.2.2.1.10.24`.\n- its `priority` will be incremented for each chart so that the charts will appear on the dashboard in this order.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: switch\n update_every: 10\n hostname: "192.0.2.1"\n community: public\n options:\n version: 2\n charts:\n - id: "bandwidth_port"\n title: "Switch Bandwidth for port"\n units: "kilobits/s"\n type: "area"\n family: "ports"\n multiply_range: [1, 24]\n dimensions:\n - name: "in"\n oid: "1.3.6.1.2.1.2.2.1.10"\n algorithm: "incremental"\n multiplier: 8\n divisor: 1000\n - name: "out"\n oid: "1.3.6.1.2.1.2.2.1.16"\n multiplier: -8\n divisor: 1000\n\n```\n{% /details %}\n##### Multiple devices with a common configuration\n\nYAML supports [anchors](https://yaml.org/spec/1.2.2/#3222-anchors-and-aliases). \nThe `&` defines and names an anchor, and the `*` uses it. `<<: *anchor` means, inject the anchor, then extend. We can use anchors to share the common configuration for multiple devices.\n\nThe following example:\n\n- adds an `anchor` to the first job.\n- injects (copies) the first job configuration to the second and updates `name` and `hostname` parameters.\n- injects (copies) the first job configuration to the third and updates `name` and `hostname` parameters.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - &anchor\n name: switch\n update_every: 10\n hostname: "192.0.2.1"\n community: public\n options:\n version: 2\n charts:\n - id: "bandwidth_port1"\n title: "Switch Bandwidth for port 1"\n units: "kilobits/s"\n type: "area"\n family: "ports"\n dimensions:\n - name: "in"\n oid: "1.3.6.1.2.1.2.2.1.10.1"\n algorithm: "incremental"\n multiplier: 8\n divisor: 1000\n - name: "out"\n oid: "1.3.6.1.2.1.2.2.1.16.1"\n multiplier: -8\n divisor: 1000\n - <<: *anchor\n name: switch2\n hostname: "192.0.2.2"\n - <<: *anchor\n name: switch3\n hostname: "192.0.2.3"\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `snmp` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m snmp\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nThe metrics that will be collected are defined in the configuration file.\n",integration_type:"collector",id:"go.d.plugin-snmp-SNMP_devices",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/snmp/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-squidlog",plugin_name:"go.d.plugin",module_name:"squidlog",monitored_instance:{name:"Squid log files",link:"https://www.lighttpd.net/",icon_filename:"squid.png",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["squid","logs"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# Squid log files\n\nPlugin: go.d.plugin\nModule: squidlog\n\n## Overview\n\nhis collector monitors Squid servers by parsing their access log files.\n\n\nIt automatically detects log files of Squid severs running on localhost.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/squidlog.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/squidlog.conf\n```\n#### Options\n\nSquid [log format codes](http://www.squid-cache.org/Doc/config/logformat/).\n\nSquidlog is aware how to parse and interpret the following codes:\n\n| field | squid format code | description |\n|----------------|-------------------|---------------------------------------------------------------|\n| resp_time | %tr | Response time (milliseconds). |\n| client_address | %>a | Client source IP address. |\n| client_address | %>A | Client FQDN. |\n| cache_code | %Ss | Squid request status (TCP_MISS etc). |\n| http_code | %>Hs | The HTTP response status code from Content Gateway to client. |\n| resp_size | %Hs | Cache code and http code. |\n| hierarchy | %Sh/% **Note**: don't use `$` and `%` prefixes for mapped field names.\n\n```yaml\nparser:\n log_type: ltsv\n ltsv_config:\n mapping:\n label1: field1\n label2: field2\n```\n\n\n##### parser.regexp_config.pattern\n\nUse pattern with subexpressions names. These names should be **known fields**.\n\n> **Note**: don't use `$` and `%` prefixes for mapped field names.\n\nSyntax:\n\n```yaml\nparser:\n log_type: regexp\n regexp_config:\n pattern: PATTERN\n```\n\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `squidlog` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m squidlog\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Squid log files instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| squidlog.requests | requests | requests/s |\n| squidlog.excluded_requests | unmatched | requests/s |\n| squidlog.type_requests | success, bad, redirect, error | requests/s |\n| squidlog.http_status_code_class_responses | 1xx, 2xx, 3xx, 4xx, 5xx | responses/s |\n| squidlog.http_status_code_responses | a dimension per HTTP response code | responses/s |\n| squidlog.bandwidth | sent | kilobits/s |\n| squidlog.response_time | min, max, avg | milliseconds |\n| squidlog.uniq_clients | clients | clients |\n| squidlog.cache_result_code_requests | a dimension per cache result code | requests/s |\n| squidlog.cache_result_code_transport_tag_requests | a dimension per cache result delivery transport tag | requests/s |\n| squidlog.cache_result_code_handling_tag_requests | a dimension per cache result handling tag | requests/s |\n| squidlog.cache_code_object_tag_requests | a dimension per cache result produced object tag | requests/s |\n| squidlog.cache_code_load_source_tag_requests | a dimension per cache result load source tag | requests/s |\n| squidlog.cache_code_error_tag_requests | a dimension per cache result error tag | requests/s |\n| squidlog.http_method_requests | a dimension per HTTP method | requests/s |\n| squidlog.mime_type_requests | a dimension per MIME type | requests/s |\n| squidlog.hier_code_requests | a dimension per hierarchy code | requests/s |\n| squidlog.server_address_forwarded_requests | a dimension per server address | requests/s |\n\n",integration_type:"collector",id:"go.d.plugin-squidlog-Squid_log_files",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/squidlog/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-storcli",plugin_name:"go.d.plugin",module_name:"storcli",monitored_instance:{name:"StoreCLI RAID",link:"https://docs.broadcom.com/doc/12352476",icon_filename:"hard-drive.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["storage","raid-controller","manage-disks"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# StoreCLI RAID\n\nPlugin: go.d.plugin\nModule: storcli\n\n## Overview\n\nMonitors the health of StoreCLI Hardware RAID by tracking the status of RAID adapters, physical drives, and backup batteries in your storage system.\nIt relies on the [`storcli`](https://docs.broadcom.com/doc/12352476) CLI tool but avoids directly executing the binary.\nInstead, it utilizes `ndsudo`, a Netdata helper specifically designed to run privileged commands securely within the Netdata environment.\nThis approach eliminates the need to use `sudo`, improving security and potentially simplifying permission management.\n\nExecuted commands:\n- `storcli /cALL show all J nolog`\n- `storcli /cALL/eALL/sALL show all J nolog`\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/storcli.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/storcli.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| timeout | storcli binary execution timeout. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom update_every\n\nAllows you to override the default data collection interval.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: storcli\n update_every: 5 # Collect StorCLI RAID statistics every 5 seconds\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `storcli` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m storcli\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ storcli_controller_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/storcli.conf) | storcli.controller_status | RAID controller ${label:controller_number} health status is not optimal |\n| [ storcli_controller_bbu_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/storcli.conf) | storcli.controller_bbu_status | RAID controller ${label:controller_number} BBU is unhealthy |\n| [ storcli_phys_drive_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/storcli.conf) | storcli.phys_drive_errors | RAID physical drive c${label:controller_number}/e${label:enclosure_number}/s${label:slot_number} errors |\n| [ storcli_phys_drive_predictive_failures ](https://github.com/netdata/netdata/blob/master/src/health/health.d/storcli.conf) | storcli.phys_drive_predictive_failures | RAID physical drive c${label:controller_number}/e${label:enclosure_number}/s${label:slot_number} predictive failures |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per controller\n\nThese metrics refer to the Controller.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| controller_number | Controller number (index) |\n| model | Controller model |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| storcli.controller_status | optimal, degraded, partially_degraded, failed | status |\n| storcli.controller_bbu_status | healthy, unhealthy, na | status |\n\n### Per physical drive\n\nThese metrics refer to the Physical Drive.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| controller_number | Controller number (index) |\n| enclosure_number | Enclosure number (index) |\n| slot_number | Slot number (index) |\n| media type | Media type (e.g. HDD) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| storcli.phys_drive_errors | media, other | errors/s |\n| storcli.phys_drive_predictive_failures | predictive_failures | failures/s |\n| storcli.phys_drive_smart_alert_status | active, inactive | status |\n| storcli.phys_drive_temperature | temperature | Celsius |\n\n### Per bbu\n\nThese metrics refer to the Backup Battery Unit.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| controller_number | Controller number (index) |\n| bbu_number | BBU number (index) |\n| model | BBU model |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| storcli.bbu_temperature | temperature | Celsius |\n\n",integration_type:"collector",id:"go.d.plugin-storcli-StoreCLI_RAID",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/storcli/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-supervisord",plugin_name:"go.d.plugin",module_name:"supervisord",monitored_instance:{name:"Supervisor",link:"http://supervisord.org/",icon_filename:"supervisord.png",categories:["data-collection.processes-and-system-services"]},keywords:["supervisor"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Supervisor\n\nPlugin: go.d.plugin\nModule: supervisord\n\n## Overview\n\nThis collector monitors Supervisor instances.\n\nIt can collect metrics from:\n\n- [unix socket](http://supervisord.org/configuration.html?highlight=unix_http_server#unix-http-server-section-values)\n- [internal http server](http://supervisord.org/configuration.html?highlight=unix_http_server#inet-http-server-section-settings)\n\nUsed methods:\n\n- [`supervisor.getAllProcessInfo`](http://supervisord.org/api.html#supervisor.rpcinterface.SupervisorNamespaceRPCInterface.getAllProcessInfo)\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/supervisord.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/supervisord.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:9001/RPC2 | yes |\n| timeout | System bus requests timeout. | 1 | no |\n\n{% /details %}\n#### Examples\n\n##### HTTP\n\nCollect metrics via HTTP.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n url: 'http://127.0.0.1:9001/RPC2'\n\n```\n{% /details %}\n##### Socket\n\nCollect metrics via Unix socket.\n\n{% details open=true summary=\"Config\" %}\n```yaml\n- name: local\n url: 'unix:///run/supervisor.sock'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollect metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: local\n url: 'http://127.0.0.1:9001/RPC2'\n\n - name: remote\n url: 'http://192.0.2.1:9001/RPC2'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `supervisord` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m supervisord\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Supervisor instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| supervisord.summary_processes | running, non-running | processes |\n\n### Per process group\n\nThese metrics refer to the process group.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| supervisord.processes | running, non-running | processes |\n| supervisord.process_state_code | a dimension per process | code |\n| supervisord.process_exit_status | a dimension per process | exit status |\n| supervisord.process_uptime | a dimension per process | seconds |\n| supervisord.process_downtime | a dimension per process | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-supervisord-Supervisor",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/supervisord/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-systemdunits",plugin_name:"go.d.plugin",module_name:"systemdunits",monitored_instance:{name:"Systemd Units",link:"https://www.freedesktop.org/wiki/Software/systemd/",icon_filename:"systemd.svg",categories:["data-collection.systemd"]},keywords:["systemd"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Systemd Units\n\nPlugin: go.d.plugin\nModule: systemdunits\n\n## Overview\n\nThis collector monitors the state of Systemd units and unit files.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/systemdunits.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/systemdunits.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| timeout | System bus requests timeout. | 1 | no |\n| include | Systemd units selector. | *.service | no |\n| skip_transient | If set, skip data collection for systemd transient units. | false | no |\n| collect_unit_files | If set to true, collect the state of installed unit files. Enabling this may increase system overhead. | false | no |\n| collect_unit_files_every | Interval for querying systemd about unit files and their enablement state, measured in seconds. Data is cached for this interval to reduce system overhead. | 300 | no |\n| include_unit_files | Systemd unit files selector. | *.service | no |\n\n##### include\n\nSystemd units matching the selector will be monitored.\n\n- Logic: (pattern1 OR pattern2)\n- Pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match)\n- Syntax:\n\n```yaml\nincludes:\n - pattern1\n - pattern2\n```\n\n\n##### include_unit_files\n\nSystemd unit files matching the selector will be monitored.\n\n- Logic: (pattern1 OR pattern2)\n- Pattern syntax: [shell file name pattern](https://golang.org/pkg/path/filepath/#Match)\n- Syntax:\n\n```yaml\nincludes:\n - pattern1\n - pattern2\n```\n\n\n{% /details %}\n#### Examples\n\n##### Service units\n\nCollect state of all service type units.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: service\n include:\n - '*.service'\n\n```\n{% /details %}\n##### One specific unit\n\nCollect state of one specific unit.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: my-specific-service\n include:\n - 'my-specific.service'\n\n```\n{% /details %}\n##### All unit types\n\nCollect state of all units.\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: my-specific-service-unit\n include:\n - '*'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollect state of all service and socket type units.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name: service\n include:\n - '*.service'\n\n - name: socket\n include:\n - '*.socket'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `systemdunits` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m systemdunits\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ systemd_service_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.service_unit_state | systemd service unit in the failed state |\n| [ systemd_socket_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.socket_unit_state | systemd socket unit in the failed state |\n| [ systemd_target_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.target_unit_state | systemd target unit in the failed state |\n| [ systemd_path_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.path_unit_state | systemd path unit in the failed state |\n| [ systemd_device_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.device_unit_state | systemd device unit in the failed state |\n| [ systemd_mount_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.mount_unit_state | systemd mount unit in the failed state |\n| [ systemd_automount_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.automount_unit_state | systemd automount unit in the failed state |\n| [ systemd_swap_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.swap_unit_state | systemd swap unit in the failed state |\n| [ systemd_scope_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.scope_unit_state | systemd scope unit in the failed state |\n| [ systemd_slice_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.slice_unit_state | systemd slice unit in the failed state |\n| [ systemd_timer_unit_failed_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/systemdunits.conf) | systemd.timer_unit_state | systemd timer unit in the failed state |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per unit\n\nThese metrics refer to the systemd unit.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| unit_name | systemd unit name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| systemd.service_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.socket_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.target_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.path_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.device_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.mount_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.automount_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.swap_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.timer_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.scope_unit_state | active, inactive, activating, deactivating, failed | state |\n| systemd.slice_unit_state | active, inactive, activating, deactivating, failed | state |\n\n### Per unit file\n\nThese metrics refer to the systemd unit file.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| unit_file_name | systemd unit file name |\n| unit_file_type | systemd unit file type |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| systemd.unit_file_state | enabled, enabled-runtime, linked, linked-runtime, alias, masked, masked-runtime, static, disabled, indirect, generated, transient, bad | state |\n\n",integration_type:"collector",id:"go.d.plugin-systemdunits-Systemd_Units",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/systemdunits/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-tengine",plugin_name:"go.d.plugin",module_name:"tengine",monitored_instance:{name:"Tengine",link:"https://tengine.taobao.org/",icon_filename:"tengine.jpeg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["tengine","web","webserver"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Tengine\n\nPlugin: go.d.plugin\nModule: tengine\n\n## Overview\n\nThis collector monitors Tengine servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable ngx_http_reqstat_module module.\n\nTo enable the module, see the [official documentation](ngx_http_reqstat_module](https://tengine.taobao.org/document/http_reqstat.html).\nThe default line format is the only supported format.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/tengine.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/tengine.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1/us | yes |\n| timeout | HTTP request timeout. | 2 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/us\n\n```\n{% /details %}\n##### HTTP authentication\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/us\n username: foo\n password: bar\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nTengine with enabled HTTPS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: https://127.0.0.1/us\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1/us\n\n - name: remote\n url: http://203.0.113.10/us\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `tengine` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m tengine\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Tengine instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| tengine.bandwidth_total | in, out | B/s |\n| tengine.connections_total | accepted | connections/s |\n| tengine.requests_total | processed | requests/s |\n| tengine.requests_per_response_code_family_total | 2xx, 3xx, 4xx, 5xx, other | requests/s |\n| tengine.requests_per_response_code_detailed_total | 200, 206, 302, 304, 403, 404, 419, 499, 500, 502, 503, 504, 508, other | requests/s |\n| tengine.requests_upstream_total | requests | requests/s |\n| tengine.tries_upstream_total | calls | calls/s |\n| tengine.requests_upstream_per_response_code_family_total | 4xx, 5xx | requests/s |\n\n",integration_type:"collector",id:"go.d.plugin-tengine-Tengine",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/tengine/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-traefik",plugin_name:"go.d.plugin",module_name:"traefik",monitored_instance:{name:"Traefik",link:"Traefik",icon_filename:"traefik.svg",categories:["data-collection.web-servers-and-web-proxies"]},keywords:["traefik","proxy","webproxy"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Traefik\n\nPlugin: go.d.plugin\nModule: traefik\n\n## Overview\n\nThis collector monitors Traefik servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable built-in Prometheus exporter\n\nTo enable see [Prometheus exporter](https://doc.traefik.io/traefik/observability/metrics/prometheus/) documentation.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/traefik.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/traefik.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="All options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8082/metrics | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8082/metrics\n\n```\n{% /details %}\n##### Basic HTTP auth\n\nLocal server with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8082/metrics\n username: foo\n password: bar\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n http://127.0.0.1:8082/metrics\n\n - name: remote\n http://192.0.2.0:8082/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `traefik` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m traefik\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per entrypoint, protocol\n\nThese metrics refer to the endpoint.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| traefik.entrypoint_requests | 1xx, 2xx, 3xx, 4xx, 5xx | requests/s |\n| traefik.entrypoint_request_duration_average | 1xx, 2xx, 3xx, 4xx, 5xx | milliseconds |\n| traefik.entrypoint_open_connections | a dimension per HTTP method | connections |\n\n",integration_type:"collector",id:"go.d.plugin-traefik-Traefik",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/traefik/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-unbound",plugin_name:"go.d.plugin",module_name:"unbound",monitored_instance:{name:"Unbound",link:"https://nlnetlabs.nl/projects/unbound/about/",icon_filename:"unbound.png",categories:["data-collection.dns-and-dhcp-servers"]},keywords:["unbound","dns"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Unbound\n\nPlugin: go.d.plugin\nModule: unbound\n\n## Overview\n\nThis collector monitors Unbound servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable remote control interface\n\nSet `control-enable` to yes in [unbound.conf](https://nlnetlabs.nl/documentation/unbound/unbound.conf).\n\n\n#### Check permissions and adjust if necessary\n\nIf using unix socket:\n\n- socket should be readable and writeable by `netdata` user\n\nIf using ip socket and TLS is disabled:\n\n- socket should be accessible via network\n\nIf TLS is enabled, in addition:\n\n- `control-key-file` should be readable by `netdata` user\n- `control-cert-file` should be readable by `netdata` user\n\nFor auto-detection parameters from `unbound.conf`:\n\n- `unbound.conf` should be readable by `netdata` user\n- if you have several configuration files (include feature) all of them should be readable by `netdata` user\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/unbound.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/unbound.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address in IP:PORT format. | 127.0.0.1:8953 | yes |\n| timeout | Connection/read/write/ssl handshake timeout. | 1 | no |\n| conf_path | Absolute path to the unbound configuration file. | /etc/unbound/unbound.conf | no |\n| cumulative_stats | Statistics collection mode. Should have the same value as the `statistics-cumulative` parameter in the unbound configuration file. | no | no |\n| use_tls | Whether to use TLS or not. | yes | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | yes | no |\n| tls_ca | Certificate authority that client use when verifying server certificates. | | no |\n| tls_cert | Client tls certificate. | /etc/unbound/unbound_control.pem | no |\n| tls_key | Client tls key. | /etc/unbound/unbound_control.key | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:8953\n\n```\n{% /details %}\n##### Unix socket\n\nConnecting through Unix socket.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: socket\n address: /var/run/unbound.sock\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:8953\n\n - name: remote\n address: 203.0.113.11:8953\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `unbound` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m unbound\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Unbound instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| unbound.queries | queries | queries |\n| unbound.queries_ip_ratelimited | ratelimited | queries |\n| unbound.dnscrypt_queries | crypted, cert, cleartext, malformed | queries |\n| unbound.cache | hits, miss | events |\n| unbound.cache_percentage | hits, miss | percentage |\n| unbound.prefetch | prefetches | prefetches |\n| unbound.expired | expired | replies |\n| unbound.zero_ttl_replies | zero_ttl | replies |\n| unbound.recursive_replies | recursive | replies |\n| unbound.recursion_time | avg, median | milliseconds |\n| unbound.request_list_usage | avg, max | queries |\n| unbound.current_request_list_usage | all, users | queries |\n| unbound.request_list_jostle_list | overwritten, dropped | queries |\n| unbound.tcpusage | usage | buffers |\n| unbound.uptime | time | seconds |\n| unbound.cache_memory | message, rrset, dnscrypt_nonce, dnscrypt_shared_secret | KB |\n| unbound.mod_memory | iterator, respip, validator, subnet, ipsec | KB |\n| unbound.mem_streamwait | streamwait | KB |\n| unbound.cache_count | infra, key, msg, rrset, dnscrypt_nonce, shared_secret | items |\n| unbound.type_queries | a dimension per query type | queries |\n| unbound.class_queries | a dimension per query class | queries |\n| unbound.opcode_queries | a dimension per query opcode | queries |\n| unbound.flag_queries | qr, aa, tc, rd, ra, z, ad, cd | queries |\n| unbound.rcode_answers | a dimension per reply rcode | replies |\n\n### Per thread\n\nThese metrics refer to threads.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| unbound.thread_queries | queries | queries |\n| unbound.thread_queries_ip_ratelimited | ratelimited | queries |\n| unbound.thread_dnscrypt_queries | crypted, cert, cleartext, malformed | queries |\n| unbound.thread_cache | hits, miss | events |\n| unbound.thread_cache_percentage | hits, miss | percentage |\n| unbound.thread_prefetch | prefetches | prefetches |\n| unbound.thread_expired | expired | replies |\n| unbound.thread_zero_ttl_replies | zero_ttl | replies |\n| unbound.thread_recursive_replies | recursive | replies |\n| unbound.thread_recursion_time | avg, median | milliseconds |\n| unbound.thread_request_list_usage | avg, max | queries |\n| unbound.thread_current_request_list_usage | all, users | queries |\n| unbound.thread_request_list_jostle_list | overwritten, dropped | queries |\n| unbound.thread_tcpusage | usage | buffers |\n\n",integration_type:"collector",id:"go.d.plugin-unbound-Unbound",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/unbound/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-upsd",plugin_name:"go.d.plugin",module_name:"upsd",monitored_instance:{name:"UPS (NUT)",link:"",icon_filename:"plug-circle-bolt.svg",categories:["data-collection.ups"]},keywords:["ups","nut"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# UPS (NUT)\n\nPlugin: go.d.plugin\nModule: upsd\n\n## Overview\n\nThis collector monitors Uninterruptible Power Supplies by polling the UPS daemon using the NUT network protocol.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/upsd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/upsd.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | UPS daemon address in IP:PORT format. | 127.0.0.1:3493 | yes |\n| timeout | Connection/read/write timeout in seconds. The timeout includes name resolution, if required. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:3493\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:3493\n\n - name: remote\n address: 203.0.113.0:3493\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `upsd` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m upsd\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ upsd_10min_ups_load ](https://github.com/netdata/netdata/blob/master/src/health/health.d/upsd.conf) | upsd.ups_load | UPS ${label:ups_name} average load over the last 10 minutes |\n| [ upsd_ups_battery_charge ](https://github.com/netdata/netdata/blob/master/src/health/health.d/upsd.conf) | upsd.ups_battery_charge | UPS ${label:ups_name} average battery charge over the last minute |\n| [ upsd_ups_last_collected_secs ](https://github.com/netdata/netdata/blob/master/src/health/health.d/upsd.conf) | upsd.ups_load | UPS ${label:ups_name} number of seconds since the last successful data collection |\n",metrics:'## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ups\n\nThese metrics refer to the UPS unit.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| ups_name | UPS name. |\n| battery_type | Battery type (chemistry). "battery.type" variable value. |\n| device_model | Device model. "device.mode" variable value. |\n| device_serial | Device serial number. "device.serial" variable value. |\n| device_manufacturer | Device manufacturer. "device.mfr" variable value. |\n| device_type | Device type (ups, pdu, scd, psu, ats). "device.type" variable value. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| upsd.ups_load | load | percentage |\n| upsd.ups_load_usage | load_usage | Watts |\n| upsd.ups_status | on_line, on_battery, low_battery, high_battery, replace_battery, charging, discharging, bypass, calibration, offline, overloaded, trim_input_voltage, boost_input_voltage, forced_shutdown, other | status |\n| upsd.ups_temperature | temperature | Celsius |\n| upsd.ups_battery_charge | charge | percentage |\n| upsd.ups_battery_estimated_runtime | runtime | seconds |\n| upsd.ups_battery_voltage | voltage | Volts |\n| upsd.ups_battery_voltage_nominal | nominal_voltage | Volts |\n| upsd.ups_input_voltage | voltage | Volts |\n| upsd.ups_input_voltage_nominal | nominal_voltage | Volts |\n| upsd.ups_input_current | current | Ampere |\n| upsd.ups_input_current_nominal | nominal_current | Ampere |\n| upsd.ups_input_frequency | frequency | Hz |\n| upsd.ups_input_frequency_nominal | nominal_frequency | Hz |\n| upsd.ups_output_voltage | voltage | Volts |\n| upsd.ups_output_voltage_nominal | nominal_voltage | Volts |\n| upsd.ups_output_current | current | Ampere |\n| upsd.ups_output_current_nominal | nominal_current | Ampere |\n| upsd.ups_output_frequency | frequency | Hz |\n| upsd.ups_output_frequency_nominal | nominal_frequency | Hz |\n\n',integration_type:"collector",id:"go.d.plugin-upsd-UPS_(NUT)",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/upsd/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-vcsa",plugin_name:"go.d.plugin",module_name:"vcsa",monitored_instance:{name:"vCenter Server Appliance",link:"https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.vcsa.doc/GUID-223C2821-BD98-4C7A-936B-7DBE96291BA4.html",icon_filename:"vmware.svg",categories:["data-collection.containers-and-vms"]},keywords:["vmware"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# vCenter Server Appliance\n\nPlugin: go.d.plugin\nModule: vcsa\n\n## Overview\n\nThis collector monitors [health statistics](https://developer.vmware.com/apis/vsphere-automation/latest/appliance/health/) of vCenter Server Appliance servers.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/vcsa.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/vcsa.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 5 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | yes |\n| password | Password for basic HTTP authentication. | | yes |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | false | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | false | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: vcsa1\n url: https://203.0.113.1\n username: admin@vsphere.local\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nTwo instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: vcsa1\n url: https://203.0.113.1\n username: admin@vsphere.local\n password: password\n\n - name: vcsa2\n url: https://203.0.113.10\n username: admin@vsphere.local\n password: password\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `vcsa` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m vcsa\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ vcsa_system_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.system_health_status | VCSA overall system status is orange. One or more components are degraded. |\n| [ vcsa_system_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.system_health_status | VCSA overall system status is red. One or more components are unavailable or will stop functioning soon. |\n| [ vcsa_applmgmt_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.applmgmt_health_status | VCSA ApplMgmt component status is orange. It is degraded, and may have serious problems. |\n| [ vcsa_applmgmt_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.applmgmt_health_status | VCSA ApplMgmt component status is red. It is unavailable, or will stop functioning soon. |\n| [ vcsa_load_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.load_health_status | VCSA Load component status is orange. It is degraded, and may have serious problems. |\n| [ vcsa_load_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.load_health_status | VCSA Load component status is red. It is unavailable, or will stop functioning soon. |\n| [ vcsa_mem_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.mem_health_status | VCSA Memory component status is orange. It is degraded, and may have serious problems. |\n| [ vcsa_mem_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.mem_health_status | VCSA Memory component status is red. It is unavailable, or will stop functioning soon. |\n| [ vcsa_swap_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.swap_health_status | VCSA Swap component status is orange. It is degraded, and may have serious problems. |\n| [ vcsa_swap_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.swap_health_status | VCSA Swap component status is red. It is unavailable, or will stop functioning soon. |\n| [ vcsa_database_storage_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.database_storage_health_status | VCSA Database Storage component status is orange. It is degraded, and may have serious problems. |\n| [ vcsa_database_storage_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.database_storage_health_status | VCSA Database Storage component status is red. It is unavailable, or will stop functioning soon. |\n| [ vcsa_storage_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.storage_health_status | VCSA Storage component status is orange. It is degraded, and may have serious problems. |\n| [ vcsa_storage_health_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.storage_health_status | VCSA Storage component status is red. It is unavailable, or will stop functioning soon. |\n| [ vcsa_software_packages_health_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vcsa.conf) | vcsa.software_packages_health_status | VCSA software packages security updates are available. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per vCenter Server Appliance instance\n\nThese metrics refer to the entire monitored application.\n
    \nSee health statuses\nOverall System Health:\n\n| Status | Description |\n|:-------:|:-------------------------------------------------------------------------------------------------------------------------|\n| green | All components in the appliance are healthy. |\n| yellow | One or more components in the appliance might become overloaded soon. |\n| orange | One or more components in the appliance might be degraded. |\n| red | One or more components in the appliance might be in an unusable status and the appliance might become unresponsive soon. |\n| gray | No health data is available. |\n| unknown | Collector failed to decode status. |\n\nComponents Health:\n\n| Status | Description |\n|:-------:|:-------------------------------------------------------------|\n| green | The component is healthy. |\n| yellow | The component is healthy, but may have some problems. |\n| orange | The component is degraded, and may have serious problems. |\n| red | The component is unavailable, or will stop functioning soon. |\n| gray | No health data is available. |\n| unknown | Collector failed to decode status. |\n\nSoftware Updates Health:\n\n| Status | Description |\n|:-------:|:-----------------------------------------------------|\n| green | No updates available. |\n| orange | Non-security patches might be available. |\n| red | Security patches might be available. |\n| gray | An error retrieving information on software updates. |\n| unknown | Collector failed to decode status. |\n\n
    \n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| vcsa.system_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.applmgmt_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.load_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.mem_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.swap_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.database_storage_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.storage_health_status | green, red, yellow, orange, gray, unknown | status |\n| vcsa.software_packages_health_status | green, red, orange, gray, unknown | status |\n\n",integration_type:"collector",id:"go.d.plugin-vcsa-vCenter_Server_Appliance",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/vcsa/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-vernemq",plugin_name:"go.d.plugin",module_name:"vernemq",monitored_instance:{name:"VerneMQ",link:"https://vernemq.com",icon_filename:"vernemq.svg",categories:["data-collection.message-brokers"]},keywords:["vernemq","message brokers"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# VerneMQ\n\nPlugin: go.d.plugin\nModule: vernemq\n\n## Overview\n\nThis collector monitors VerneMQ instances.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/vernemq.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/vernemq.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | http://127.0.0.1:8888/metrics | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8888/metrics\n\n```\n{% /details %}\n##### HTTP authentication\n\nLocal instance with basic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8888/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nLocal and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n url: http://127.0.0.1:8888/metrics\n\n - name: remote\n url: http://203.0.113.10:8888/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `vernemq` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m vernemq\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ vernemq_socket_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.socket_errors | number of socket errors in the last minute |\n| [ vernemq_queue_message_drop ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.queue_undelivered_messages | number of dropped messaged due to full queues in the last minute |\n| [ vernemq_queue_message_expired ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.queue_undelivered_messages | number of messages which expired before delivery in the last minute |\n| [ vernemq_queue_message_unhandled ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.queue_undelivered_messages | number of unhandled messages (connections with clean session=true) in the last minute |\n| [ vernemq_average_scheduler_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.average_scheduler_utilization | average scheduler utilization over the last 10 minutes |\n| [ vernemq_cluster_dropped ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.cluster_dropped | amount of traffic dropped during communication with the cluster nodes in the last minute |\n| [ vernemq_netsplits ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vvernemq.netsplits | number of detected netsplits (split brain situation) in the last minute |\n| [ vernemq_mqtt_connack_sent_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_connack_sent_reason | number of sent unsuccessful v3/v5 CONNACK packets in the last minute |\n| [ vernemq_mqtt_disconnect_received_reason_not_normal ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_disconnect_received_reason | number of received not normal v5 DISCONNECT packets in the last minute |\n| [ vernemq_mqtt_disconnect_sent_reason_not_normal ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_disconnect_sent_reason | number of sent not normal v5 DISCONNECT packets in the last minute |\n| [ vernemq_mqtt_subscribe_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_subscribe_error | number of failed v3/v5 SUBSCRIBE operations in the last minute |\n| [ vernemq_mqtt_subscribe_auth_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_subscribe_auth_error | number of unauthorized v3/v5 SUBSCRIBE attempts in the last minute |\n| [ vernemq_mqtt_unsubscribe_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_unsubscribe_error | number of failed v3/v5 UNSUBSCRIBE operations in the last minute |\n| [ vernemq_mqtt_publish_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_publish_errors | number of failed v3/v5 PUBLISH operations in the last minute |\n| [ vernemq_mqtt_publish_auth_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_publish_auth_errors | number of unauthorized v3/v5 PUBLISH attempts in the last minute |\n| [ vernemq_mqtt_puback_received_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_puback_received_reason | number of received unsuccessful v5 PUBACK packets in the last minute |\n| [ vernemq_mqtt_puback_sent_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_puback_sent_reason | number of sent unsuccessful v5 PUBACK packets in the last minute |\n| [ vernemq_mqtt_puback_unexpected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_puback_invalid_error | number of received unexpected v3/v5 PUBACK packets in the last minute |\n| [ vernemq_mqtt_pubrec_received_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubrec_received_reason | number of received unsuccessful v5 PUBREC packets in the last minute |\n| [ vernemq_mqtt_pubrec_sent_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubrec_sent_reason | number of sent unsuccessful v5 PUBREC packets in the last minute |\n| [ vernemq_mqtt_pubrec_invalid_error ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubrec_invalid_error | number of received unexpected v3 PUBREC packets in the last minute |\n| [ vernemq_mqtt_pubrel_received_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubrel_received_reason | number of received unsuccessful v5 PUBREL packets in the last minute |\n| [ vernemq_mqtt_pubrel_sent_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubrel_sent_reason | number of sent unsuccessful v5 PUBREL packets in the last minute |\n| [ vernemq_mqtt_pubcomp_received_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubcomp_received_reason | number of received unsuccessful v5 PUBCOMP packets in the last minute |\n| [ vernemq_mqtt_pubcomp_sent_reason_unsuccessful ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubcomp_sent_reason | number of sent unsuccessful v5 PUBCOMP packets in the last minute |\n| [ vernemq_mqtt_pubcomp_unexpected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vernemq.conf) | vernemq.mqtt_pubcomp_invalid_error | number of received unexpected v3/v5 PUBCOMP packets in the last minute |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per VerneMQ instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| vernemq.sockets | open | sockets |\n| vernemq.socket_operations | open, close | sockets/s |\n| vernemq.client_keepalive_expired | closed | sockets/s |\n| vernemq.socket_close_timeout | closed | sockets/s |\n| vernemq.socket_errors | errors | errors/s |\n| vernemq.queue_processes | queue_processes | queue processes |\n| vernemq.queue_processes_operations | setup, teardown | events/s |\n| vernemq.queue_process_init_from_storage | queue_processes | queue processes/s |\n| vernemq.queue_messages | received, sent | messages/s |\n| vernemq.queue_undelivered_messages | dropped, expired, unhandled | messages/s |\n| vernemq.router_subscriptions | subscriptions | subscriptions |\n| vernemq.router_matched_subscriptions | local, remote | subscriptions/s |\n| vernemq.router_memory | used | KiB |\n| vernemq.average_scheduler_utilization | utilization | percentage |\n| vernemq.system_utilization_scheduler | a dimension per scheduler | percentage |\n| vernemq.system_processes | processes | processes |\n| vernemq.system_reductions | reductions | ops/s |\n| vernemq.system_context_switches | context_switches | ops/s |\n| vernemq.system_io | received, sent | kilobits/s |\n| vernemq.system_run_queue | ready | processes |\n| vernemq.system_gc_count | gc | ops/s |\n| vernemq.system_gc_words_reclaimed | words_reclaimed | ops/s |\n| vernemq.system_allocated_memory | processes, system | KiB |\n| vernemq.bandwidth | received, sent | kilobits/s |\n| vernemq.retain_messages | messages | messages |\n| vernemq.retain_memory | used | KiB |\n| vernemq.cluster_bandwidth | received, sent | kilobits/s |\n| vernemq.cluster_dropped | dropped | kilobits/s |\n| vernemq.netsplit_unresolved | unresolved | netsplits |\n| vernemq.netsplits | resolved, detected | netsplits/s |\n| vernemq.mqtt_auth | received, sent | packets/s |\n| vernemq.mqtt_auth_received_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_auth_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_connect | connect, connack | packets/s |\n| vernemq.mqtt_connack_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_disconnect | received, sent | packets/s |\n| vernemq.mqtt_disconnect_received_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_disconnect_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_subscribe | subscribe, suback | packets/s |\n| vernemq.mqtt_subscribe_error | failed | ops/s |\n| vernemq.mqtt_subscribe_auth_error | unauth | attempts/s |\n| vernemq.mqtt_unsubscribe | unsubscribe, unsuback | packets/s |\n| vernemq.mqtt_unsubscribe_error | mqtt_unsubscribe_error | ops/s |\n| vernemq.mqtt_publish | received, sent | packets/s |\n| vernemq.mqtt_publish_errors | failed | ops/s |\n| vernemq.mqtt_publish_auth_errors | unauth | attempts/s |\n| vernemq.mqtt_puback | received, sent | packets/s |\n| vernemq.mqtt_puback_received_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_puback_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_puback_invalid_error | unexpected | messages/s |\n| vernemq.mqtt_pubrec | received, sent | packets/s |\n| vernemq.mqtt_pubrec_received_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_pubrec_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_pubrec_invalid_error | unexpected | messages/s |\n| vernemq.mqtt_pubrel | received, sent | packets/s |\n| vernemq.mqtt_pubrel_received_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_pubrel_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_pubcom | received, sent | packets/s |\n| vernemq.mqtt_pubcomp_received_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_pubcomp_sent_reason | a dimensions per reason | packets/s |\n| vernemq.mqtt_pubcomp_invalid_error | unexpected | messages/s |\n| vernemq.mqtt_ping | pingreq, pingresp | packets/s |\n| vernemq.node_uptime | time | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-vernemq-VerneMQ",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/vernemq/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-vsphere",plugin_name:"go.d.plugin",module_name:"vsphere",monitored_instance:{name:"VMware vCenter Server",link:"https://www.vmware.com/products/vcenter-server.html",icon_filename:"vmware.svg",categories:["data-collection.containers-and-vms"]},keywords:["vmware","esxi","vcenter"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!0},overview:"# VMware vCenter Server\n\nPlugin: go.d.plugin\nModule: vsphere\n\n## Overview\n\nThis collector monitors hosts and vms performance statistics from `vCenter` servers.\n\n> **Warning**: The `vsphere` collector cannot re-login and continue collecting metrics after a vCenter reboot.\n> go.d.plugin needs to be restarted.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default `update_every` is 20 seconds, and it doesn't make sense to decrease the value.\n**VMware real-time statistics are generated at the 20-second specificity**.\n\nIt is likely that 20 seconds is not enough for big installations and the value should be tuned.\n\nTo get a better view we recommend running the collector in debug mode and seeing how much time it will take to collect metrics.\n\n
    \nExample (all not related debug lines were removed)\n\n```\n[ilyam@pc]$ ./go.d.plugin -d -m vsphere\n[ DEBUG ] vsphere[vsphere] discover.go:94 discovering : starting resource discovering process\n[ DEBUG ] vsphere[vsphere] discover.go:102 discovering : found 3 dcs, process took 49.329656ms\n[ DEBUG ] vsphere[vsphere] discover.go:109 discovering : found 12 folders, process took 49.538688ms\n[ DEBUG ] vsphere[vsphere] discover.go:116 discovering : found 3 clusters, process took 47.722692ms\n[ DEBUG ] vsphere[vsphere] discover.go:123 discovering : found 2 hosts, process took 52.966995ms\n[ DEBUG ] vsphere[vsphere] discover.go:130 discovering : found 2 vms, process took 49.832979ms\n[ INFO ] vsphere[vsphere] discover.go:140 discovering : found 3 dcs, 12 folders, 3 clusters (2 dummy), 2 hosts, 3 vms, process took 249.655993ms\n[ DEBUG ] vsphere[vsphere] build.go:12 discovering : building : starting building resources process\n[ INFO ] vsphere[vsphere] build.go:23 discovering : building : built 3/3 dcs, 12/12 folders, 3/3 clusters, 2/2 hosts, 3/3 vms, process took 63.3\xb5s\n[ DEBUG ] vsphere[vsphere] hierarchy.go:10 discovering : hierarchy : start setting resources hierarchy process\n[ INFO ] vsphere[vsphere] hierarchy.go:18 discovering : hierarchy : set 3/3 clusters, 2/2 hosts, 3/3 vms, process took 6.522\xb5s\n[ DEBUG ] vsphere[vsphere] filter.go:24 discovering : filtering : starting filtering resources process\n[ DEBUG ] vsphere[vsphere] filter.go:45 discovering : filtering : removed 0 unmatched hosts\n[ DEBUG ] vsphere[vsphere] filter.go:56 discovering : filtering : removed 0 unmatched vms\n[ INFO ] vsphere[vsphere] filter.go:29 discovering : filtering : filtered 0/2 hosts, 0/3 vms, process took 42.973\xb5s\n[ DEBUG ] vsphere[vsphere] metric_lists.go:14 discovering : metric lists : starting resources metric lists collection process\n[ INFO ] vsphere[vsphere] metric_lists.go:30 discovering : metric lists : collected metric lists for 2/2 hosts, 3/3 vms, process took 275.60764ms\n[ INFO ] vsphere[vsphere] discover.go:74 discovering : discovered 2/2 hosts, 3/3 vms, the whole process took 525.614041ms\n[ INFO ] vsphere[vsphere] discover.go:11 starting discovery process, will do discovery every 5m0s\n[ DEBUG ] vsphere[vsphere] collect.go:11 starting collection process\n[ DEBUG ] vsphere[vsphere] scrape.go:48 scraping : scraped metrics for 2/2 hosts, process took 96.257374ms\n[ DEBUG ] vsphere[vsphere] scrape.go:60 scraping : scraped metrics for 3/3 vms, process took 57.879697ms\n[ DEBUG ] vsphere[vsphere] collect.go:23 metrics collected, process took 154.77997ms\n```\n\n
    \n\nThere you can see that discovering took `525.614041ms`, and collecting metrics took `154.77997ms`. Discovering is a separate thread, it doesn't affect collecting.\n`update_every` and `timeout` parameters should be adjusted based on these numbers.\n\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/vsphere.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/vsphere.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 20 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | vCenter server URL. | | yes |\n| host_include | Hosts selector (filter). | | no |\n| vm_include | Virtual machines selector (filter). | | no |\n| discovery_interval | Hosts and VMs discovery interval. | 300 | no |\n| timeout | HTTP request timeout. | 20 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n##### host_include\n\nMetrics of hosts matching the selector will be collected.\n\n- Include pattern syntax: \"/Datacenter pattern/Cluster pattern/Host pattern\".\n- Match pattern syntax: [simple patterns](/src/libnetdata/simple_pattern/README.md#simple-patterns).\n- Syntax:\n\n ```yaml\n host_include:\n - '/DC1/*' # select all hosts from datacenter DC1\n - '/DC2/*/!Host2 *' # select all hosts from datacenter DC2 except HOST2\n - '/DC3/Cluster3/*' # select all hosts from datacenter DC3 cluster Cluster3\n ```\n\n\n##### vm_include\n\nMetrics of VMs matching the selector will be collected.\n\n- Include pattern syntax: \"/Datacenter pattern/Cluster pattern/Host pattern/VM pattern\".\n- Match pattern syntax: [simple patterns](/src/libnetdata/simple_pattern/README.md#simple-patterns).\n- Syntax:\n\n ```yaml\n vm_include:\n - '/DC1/*' # select all VMs from datacenter DC\n - '/DC2/*/*/!VM2 *' # select all VMs from datacenter DC2 except VM2\n - '/DC3/Cluster3/*' # select all VMs from datacenter DC3 cluster Cluster3\n ```\n\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name : vcenter1\n url : https://203.0.113.1\n username : admin@vsphere.local\n password : somepassword\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\njobs:\n - name : vcenter1\n url : https://203.0.113.1\n username : admin@vsphere.local\n password : somepassword\n\n - name : vcenter2\n url : https://203.0.113.10\n username : admin@vsphere.local\n password : somepassword\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `vsphere` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m vsphere\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ vsphere_vm_cpu_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vsphere.conf) | vsphere.vm_cpu_utilization | Virtual Machine CPU utilization |\n| [ vsphere_vm_mem_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vsphere.conf) | vsphere.vm_mem_utilization | Virtual Machine memory utilization |\n| [ vsphere_host_cpu_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vsphere.conf) | vsphere.host_cpu_utilization | ESXi Host CPU utilization |\n| [ vsphere_host_mem_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/vsphere.conf) | vsphere.host_mem_utilization | ESXi Host memory utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per virtual machine\n\nThese metrics refer to the Virtual Machine.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| datacenter | Datacenter name |\n| cluster | Cluster name |\n| host | Host name |\n| vm | Virtual Machine name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| vsphere.vm_cpu_utilization | used | percentage |\n| vsphere.vm_mem_utilization | used | percentage |\n| vsphere.vm_mem_usage | granted, consumed, active, shared | KiB |\n| vsphere.vm_mem_swap_usage | swapped | KiB |\n| vsphere.vm_mem_swap_io | in, out | KiB/s |\n| vsphere.vm_disk_io | read, write | KiB/s |\n| vsphere.vm_disk_max_latency | latency | milliseconds |\n| vsphere.vm_net_traffic | received, sent | KiB/s |\n| vsphere.vm_net_packets | received, sent | packets |\n| vsphere.vm_net_drops | received, sent | packets |\n| vsphere.vm_overall_status | green, red, yellow, gray | status |\n| vsphere.vm_system_uptime | uptime | seconds |\n\n### Per host\n\nThese metrics refer to the ESXi host.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| datacenter | Datacenter name |\n| cluster | Cluster name |\n| host | Host name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| vsphere.host_cpu_utilization | used | percentage |\n| vsphere.host_mem_utilization | used | percentage |\n| vsphere.host_mem_usage | granted, consumed, active, shared, sharedcommon | KiB |\n| vsphere.host_mem_swap_io | in, out | KiB/s |\n| vsphere.host_disk_io | read, write | KiB/s |\n| vsphere.host_disk_max_latency | latency | milliseconds |\n| vsphere.host_net_traffic | received, sent | KiB/s |\n| vsphere.host_net_packets | received, sent | packets |\n| vsphere.host_net_drops | received, sent | packets |\n| vsphere.host_net_errors | received, sent | errors |\n| vsphere.host_overall_status | green, red, yellow, gray | status |\n| vsphere.host_system_uptime | uptime | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-vsphere-VMware_vCenter_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/vsphere/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-web_log",plugin_name:"go.d.plugin",module_name:"web_log",monitored_instance:{name:"Web server log files",link:"",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"webservers.svg"},keywords:["webserver","apache","httpd","nginx","lighttpd","logs"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# Web server log files\n\nPlugin: go.d.plugin\nModule: web_log\n\n## Overview\n\nThis collector monitors web servers by parsing their log files.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt automatically detects log files of web servers running on localhost.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/web_log.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/web_log.conf\n```\n#### Options\n\nWeblog is aware of how to parse and interpret the following fields (**known fields**):\n\n> [nginx](https://nginx.org/en/docs/varindex.html)\n>\n> [apache](https://httpd.apache.org/docs/current/mod/mod_log_config.html)\n\n| nginx | apache | description |\n|-------------------------|----------|------------------------------------------------------------------------------------------|\n| $host ($http_host) | %v | Name of the server which accepted a request. |\n| $server_port | %p | Port of the server which accepted a request. |\n| $scheme | - | Request scheme. "http" or "https". |\n| $remote_addr | %a (%h) | Client address. |\n| $request | %r | Full original request line. The line is "$request_method $request_uri $server_protocol". |\n| $request_method | %m | Request method. Usually "GET" or "POST". |\n| $request_uri | %U | Full original request URI. |\n| $server_protocol | %H | Request protocol. Usually "HTTP/1.0", "HTTP/1.1", or "HTTP/2.0". |\n| $status | %s (%>s) | Response status code. |\n| $request_length | %I | Bytes received from a client, including request and headers. |\n| $bytes_sent | %O | Bytes sent to a client, including request and headers. |\n| $body_bytes_sent | %B (%b) | Bytes sent to a client, not counting the response header. |\n| $request_time | %D | Request processing time. |\n| $upstream_response_time | - | Time spent on receiving the response from the upstream server. |\n| $ssl_protocol | - | Protocol of an established SSL connection. |\n| $ssl_cipher | - | String of ciphers used for an established SSL connection. |\n\nNotes:\n\n- Apache `%h` logs the IP address if [HostnameLookups](https://httpd.apache.org/docs/2.4/mod/core.html#hostnamelookups) is Off. The web log collector counts hostnames as IPv4 addresses. We recommend either to disable HostnameLookups or use `%a` instead of `%h`.\n- Since httpd 2.0, unlike 1.3, the `%b` and `%B` format strings do not represent the number of bytes sent to the client, but simply the size in bytes of the HTTP response. It will differ, for instance, if the connection is aborted, or if SSL is used. The `%O` format provided by [`mod_logio`](https://httpd.apache.org/docs/2.4/mod/mod_logio.html) will log the actual number of bytes sent over the network.\n- To get `%I` and `%O` working you need to enable `mod_logio` on Apache.\n- NGINX logs URI with query parameters, Apache doesnt.\n- `$request` is parsed into `$request_method`, `$request_uri` and `$server_protocol`. If you have `$request` in your log format, there is no sense to have others.\n- Don\'t use both `$bytes_sent` and `$body_bytes_sent` (`%O` and `%B` or `%b`). The module does not distinguish between these parameters.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| path | Path to the web server log file. | | yes |\n| exclude_path | Path to exclude. | *.gz | no |\n| url_patterns | List of URL patterns. | [] | no |\n| url_patterns.name | Used as a dimension name. | | yes |\n| url_patterns.pattern | Used to match against full original request URI. Pattern syntax in [matcher](https://github.com/netdata/netdata/tree/master/src/go/collectors/go.d.plugin/pkg/matcher#supported-format). | | yes |\n| parser | Log parser configuration. | | no |\n| parser.log_type | Log parser type. | auto | no |\n| parser.csv_config | CSV log parser config. | | no |\n| parser.csv_config.delimiter | CSV field delimiter. | , | no |\n| parser.csv_config.format | CSV log format. | | no |\n| parser.ltsv_config | LTSV log parser config. | | no |\n| parser.ltsv_config.field_delimiter | LTSV field delimiter. | \\t | no |\n| parser.ltsv_config.value_delimiter | LTSV value delimiter. | : | no |\n| parser.ltsv_config.mapping | LTSV fields mapping to **known fields**. | | yes |\n| parser.json_config | JSON log parser config. | | no |\n| parser.json_config.mapping | JSON fields mapping to **known fields**. | | yes |\n| parser.regexp_config | RegExp log parser config. | | no |\n| parser.regexp_config.pattern | RegExp pattern with named groups. | | yes |\n\n##### url_patterns\n\n"URL pattern" scope metrics will be collected for each URL pattern. \n\nOption syntax:\n\n```yaml\nurl_patterns:\n - name: name1\n pattern: pattern1\n - name: name2\n pattern: pattern2\n```\n\n\n##### parser.log_type\n\nWeblog supports 5 different log parsers:\n\n| Parser type | Description |\n|-------------|-------------------------------------------|\n| auto | Use CSV and auto-detect format |\n| csv | A comma-separated values |\n| json | [JSON](https://www.json.org/json-en.html) |\n| ltsv | [LTSV](http://ltsv.org/) |\n| regexp | Regular expression with named groups |\n\nSyntax:\n\n```yaml\nparser:\n log_type: auto\n```\n\nIf `log_type` parameter set to `auto` (which is default), weblog will try to auto-detect appropriate log parser and log format using the last line of the log file.\n\n- checks if format is `CSV` (using regexp).\n- checks if format is `JSON` (using regexp).\n- assumes format is `CSV` and tries to find appropriate `CSV` log format using predefined list of formats. It tries to parse the line using each of them in the following order (the first one matches is used later):\n\n ```sh\n $host:$server_port $remote_addr - - [$time_local] "$request" $status $body_bytes_sent - - $request_length $request_time $upstream_response_time\n $host:$server_port $remote_addr - - [$time_local] "$request" $status $body_bytes_sent - - $request_length $request_time\n $host:$server_port $remote_addr - - [$time_local] "$request" $status $body_bytes_sent $request_length $request_time $upstream_response_time\n $host:$server_port $remote_addr - - [$time_local] "$request" $status $body_bytes_sent $request_length $request_time\n $host:$server_port $remote_addr - - [$time_local] "$request" $status $body_bytes_sent\n $remote_addr - - [$time_local] "$request" $status $body_bytes_sent - - $request_length $request_time $upstream_response_time\n $remote_addr - - [$time_local] "$request" $status $body_bytes_sent - - $request_length $request_time\n $remote_addr - - [$time_local] "$request" $status $body_bytes_sent $request_length $request_time $upstream_response_time\n $remote_addr - - [$time_local] "$request" $status $body_bytes_sent $request_length $request_time\n $remote_addr - - [$time_local] "$request" $status $body_bytes_sent\n ```\n\n If you\'re using the default Apache/NGINX log format, auto-detect will work for you. If it doesn\'t work you need to set the format manually.\n\n\n##### parser.csv_config.format\n\n\n\n##### parser.ltsv_config.mapping\n\nThe mapping is a dictionary where the key is a field, as in logs, and the value is the corresponding **known field**.\n\n> **Note**: don\'t use `$` and `%` prefixes for mapped field names.\n\n```yaml\nparser:\n log_type: ltsv\n ltsv_config:\n mapping:\n label1: field1\n label2: field2\n```\n\n\n##### parser.json_config.mapping\n\nThe mapping is a dictionary where the key is a field, as in logs, and the value is the corresponding **known field**.\n\n> **Note**: don\'t use `$` and `%` prefixes for mapped field names.\n\n```yaml\nparser:\n log_type: json\n json_config:\n mapping:\n label1: field1\n label2: field2\n```\n\n\n##### parser.regexp_config.pattern\n\nUse pattern with subexpressions names. These names should be **known fields**.\n\n> **Note**: don\'t use `$` and `%` prefixes for mapped field names.\n\nSyntax:\n\n```yaml\nparser:\n log_type: regexp\n regexp_config:\n pattern: PATTERN\n```\n\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `web_log` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m web_log\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ web_log_1m_unmatched ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.excluded_requests | percentage of unparsed log lines over the last minute |\n| [ web_log_1m_requests ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.type_requests | ratio of successful HTTP requests over the last minute (1xx, 2xx, 304, 401) |\n| [ web_log_1m_redirects ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.type_requests | ratio of redirection HTTP requests over the last minute (3xx except 304) |\n| [ web_log_1m_bad_requests ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.type_requests | ratio of client error HTTP requests over the last minute (4xx except 401) |\n| [ web_log_1m_internal_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.type_requests | ratio of server error HTTP requests over the last minute (5xx) |\n| [ web_log_web_slow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.request_processing_time | average HTTP response time over the last 1 minute |\n| [ web_log_5m_requests_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/web_log.conf) | web_log.type_requests | ratio of successful HTTP requests over over the last 5 minutes, compared with the previous 5 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Web server log files instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| web_log.requests | requests | requests/s |\n| web_log.excluded_requests | unmatched | requests/s |\n| web_log.type_requests | success, bad, redirect, error | requests/s |\n| web_log.status_code_class_responses | 1xx, 2xx, 3xx, 4xx, 5xx | responses/s |\n| web_log.status_code_class_1xx_responses | a dimension per 1xx code | responses/s |\n| web_log.status_code_class_2xx_responses | a dimension per 2xx code | responses/s |\n| web_log.status_code_class_3xx_responses | a dimension per 3xx code | responses/s |\n| web_log.status_code_class_4xx_responses | a dimension per 4xx code | responses/s |\n| web_log.status_code_class_5xx_responses | a dimension per 5xx code | responses/s |\n| web_log.bandwidth | received, sent | kilobits/s |\n| web_log.request_processing_time | min, max, avg | milliseconds |\n| web_log.requests_processing_time_histogram | a dimension per bucket | requests/s |\n| web_log.upstream_response_time | min, max, avg | milliseconds |\n| web_log.upstream_responses_time_histogram | a dimension per bucket | requests/s |\n| web_log.current_poll_uniq_clients | ipv4, ipv6 | clients |\n| web_log.vhost_requests | a dimension per vhost | requests/s |\n| web_log.port_requests | a dimension per port | requests/s |\n| web_log.scheme_requests | http, https | requests/s |\n| web_log.http_method_requests | a dimension per HTTP method | requests/s |\n| web_log.http_version_requests | a dimension per HTTP version | requests/s |\n| web_log.ip_proto_requests | ipv4, ipv6 | requests/s |\n| web_log.ssl_proto_requests | a dimension per SSL protocol | requests/s |\n| web_log.ssl_cipher_suite_requests | a dimension per SSL cipher suite | requests/s |\n| web_log.url_pattern_requests | a dimension per URL pattern | requests/s |\n| web_log.custom_field_pattern_requests | a dimension per custom field pattern | requests/s |\n\n### Per custom time field\n\nTBD\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| web_log.custom_time_field_summary | min, max, avg | milliseconds |\n| web_log.custom_time_field_histogram | a dimension per bucket | observations |\n\n### Per custom numeric field\n\nTBD\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| web_log.custom_numeric_field_{{field_name}}_summary | min, max, avg | {{units}} |\n\n### Per URL pattern\n\nTBD\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| web_log.url_pattern_status_code_responses | a dimension per pattern | responses/s |\n| web_log.url_pattern_http_method_requests | a dimension per HTTP method | requests/s |\n| web_log.url_pattern_bandwidth | received, sent | kilobits/s |\n| web_log.url_pattern_request_processing_time | min, max, avg | milliseconds |\n\n",integration_type:"collector",id:"go.d.plugin-web_log-Web_server_log_files",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/weblog/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-whoisquery",plugin_name:"go.d.plugin",module_name:"whoisquery",monitored_instance:{name:"Domain expiration date",link:"",icon_filename:"globe.svg",categories:["data-collection.synthetic-checks"]},keywords:["whois"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# Domain expiration date\n\nPlugin: go.d.plugin\nModule: whoisquery\n\n## Overview\n\nThis collector monitors the remaining time before the domain expires.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/whoisquery.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/whoisquery.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| source | Domain address. | | yes |\n| days_until_expiration_warning | Number of days before the alarm status is warning. | 30 | no |\n| days_until_expiration_critical | Number of days before the alarm status is critical. | 15 | no |\n| timeout | The query timeout in seconds. | 5 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nBasic configuration example\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: my_site\n source: my_site.com\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define more than one job, their names must be unique.\n\nCheck the expiration status of the multiple domains.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: my_site1\n source: my_site1.com\n\n - name: my_site2\n source: my_site2.com\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `whoisquery` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m whoisquery\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ whoisquery_days_until_expiration ](https://github.com/netdata/netdata/blob/master/src/health/health.d/whoisquery.conf) | whoisquery.time_until_expiration | time until the domain name registration expires |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per domain\n\nThese metrics refer to the configured source.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| domain | Configured source |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| whoisquery.time_until_expiration | expiry | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-whoisquery-Domain_expiration_date",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/whoisquery/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-windows-ad",plugin_name:"go.d.plugin",module_name:"windows",monitored_instance:{name:"Active Directory",link:"https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview",icon_filename:"windows.svg",categories:["data-collection.windows-systems"]},keywords:["windows","microsoft","active directory","ad","adcs","adfs"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# Active Directory\n\nPlugin: go.d.plugin\nModule: windows\n\n## Overview\n\nThis collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).\n\n\nIt collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).\n\nUsing the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nData collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Windows exporter\n\nTo install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/windows.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/windows.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: https://192.0.2.1:9182/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Virtual Node\n\nThe Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.\nYou can create a virtual node for all your Windows machines and control them as separate entities.\n\nTo make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:\n\n> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.\n\n```yaml\n# /etc/netdata/vnodes/vnodes.conf\n- hostname: win_server\n guid: \n```\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n vnode: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from multiple remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server1\n url: http://192.0.2.1:9182/metrics\n\n - name: win_server2\n url: http://192.0.2.2:9182/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m windows\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |\n| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |\n| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |\n| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\nSupported collectors:\n\n- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)\n- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)\n- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)\n- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)\n- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)\n- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)\n- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)\n- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)\n- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)\n- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)\n- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)\n- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)\n- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)\n- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)\n- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)\n- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)\n- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)\n- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)\n- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)\n- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)\n- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)\n- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)\n- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)\n- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)\n- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)\n\n\n### Per Active Directory instance\n\nThese metrics refer to the entire monitored host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |\n| windows.memory_utilization | available, used | bytes |\n| windows.memory_page_faults | page_faults | events/s |\n| windows.memory_swap_utilization | available, used | bytes |\n| windows.memory_swap_operations | read, write | operations/s |\n| windows.memory_swap_pages | read, written | pages/s |\n| windows.memory_cached | cached | KiB |\n| windows.memory_cache_faults | cache_faults | events/s |\n| windows.memory_system_pool | paged, non-paged | bytes |\n| windows.tcp_conns_established | ipv4, ipv6 | connections |\n| windows.tcp_conns_active | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |\n| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |\n| windows.tcp_segments_received | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |\n| windows.os_processes | processes | number |\n| windows.os_users | users | users |\n| windows.os_visible_memory_usage | free, used | bytes |\n| windows.os_paging_files_usage | free, used | bytes |\n| windows.system_threads | threads | number |\n| windows.system_uptime | time | seconds |\n| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |\n| windows.processes_cpu_utilization | a dimension per process | percentage |\n| windows.processes_handles | a dimension per process | handles |\n| windows.processes_io_bytes | a dimension per process | bytes/s |\n| windows.processes_io_operations | a dimension per process | operations/s |\n| windows.processes_page_faults | a dimension per process | pgfaults/s |\n| windows.processes_page_file_bytes | a dimension per process | bytes |\n| windows.processes_pool_bytes | a dimension per process | bytes |\n| windows.processes_threads | a dimension per process | threads |\n| ad.database_operations | add, delete, modify, recycle | operations/s |\n| ad.directory_operations | read, write, search | operations/s |\n| ad.name_cache_lookups | lookups | lookups/s |\n| ad.name_cache_hits | hits | hits/s |\n| ad.atq_average_request_latency | time | seconds |\n| ad.atq_outstanding_requests | outstanding | requests |\n| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |\n| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |\n| ad.dra_replication_properties_updated | inbound, outbound | properties/s |\n| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |\n| ad.dra_replication_pending_syncs | pending | syncs |\n| ad.dra_replication_sync_requests | requests | requests/s |\n| ad.ds_threads | in_use | threads |\n| ad.ldap_last_bind_time | last_bind | seconds |\n| ad.binds | binds | binds/s |\n| ad.ldap_searches | searches | searches/s |\n| adfs.ad_login_connection_failures | connection | failures/s |\n| adfs.certificate_authentications | authentications | authentications/s |\n| adfs.db_artifact_failures | connection | failures/s |\n| adfs.db_artifact_query_time_seconds | query_time | seconds/s |\n| adfs.db_config_failures | connection | failures/s |\n| adfs.db_config_query_time_seconds | query_time | seconds/s |\n| adfs.device_authentications | authentications | authentications/s |\n| adfs.external_authentications | success, failure | authentications/s |\n| adfs.federated_authentications | authentications | authentications/s |\n| adfs.federation_metadata_requests | requests | requests/s |\n| adfs.oauth_authorization_requests | requests | requests/s |\n| adfs.oauth_client_authentications | success, failure | authentications/s |\n| adfs.oauth_client_credentials_requests | success, failure | requests/s |\n| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |\n| adfs.oauth_client_windows_authentications | success, failure | authentications/s |\n| adfs.oauth_logon_certificate_requests | success, failure | requests/s |\n| adfs.oauth_password_grant_requests | success, failure | requests/s |\n| adfs.oauth_token_requests_success | success | requests/s |\n| adfs.passive_requests | passive | requests/s |\n| adfs.passport_authentications | passport | authentications/s |\n| adfs.password_change_requests | success, failure | requests/s |\n| adfs.samlp_token_requests_success | success | requests/s |\n| adfs.sso_authentications | success, failure | authentications/s |\n| adfs.token_requests | requests | requests/s |\n| adfs.userpassword_authentications | success, failure | authentications/s |\n| adfs.windows_integrated_authentications | authentications | authentications/s |\n| adfs.wsfed_token_requests_success | success | requests/s |\n| adfs.wstrust_token_requests_success | success | requests/s |\n| exchange.activesync_ping_cmds_pending | pending | commands |\n| exchange.activesync_requests | received | requests/s |\n| exchange.activesync_sync_cmds | processed | commands/s |\n| exchange.autodiscover_requests | processed | requests/s |\n| exchange.avail_service_requests | serviced | requests/s |\n| exchange.owa_current_unique_users | logged-in | users |\n| exchange.owa_requests_total | handled | requests/s |\n| exchange.rpc_active_user_count | active | users |\n| exchange.rpc_avg_latency | latency | seconds |\n| exchange.rpc_connection_count | connections | connections |\n| exchange.rpc_operations | operations | operations/s |\n| exchange.rpc_requests | processed | requests |\n| exchange.rpc_user_count | users | users |\n| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_poison | low, high, none, normal | messages/s |\n| hyperv.vms_health | ok, critical | vms |\n| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |\n| hyperv.root_partition_attached_devices | attached | devices |\n| hyperv.root_partition_deposited_pages | deposited | pages |\n| hyperv.root_partition_skipped_interrupts | skipped | interrupts |\n| hyperv.root_partition_device_dma_errors | illegal_dma | requests |\n| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |\n| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |\n| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |\n| hyperv.root_partition_address_space | address_spaces | address spaces |\n| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |\n| hyperv.root_partition_virtual_tlb_pages | used | pages |\n\n### Per cpu core\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| core | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |\n| windows.cpu_core_interrupts | interrupts | interrupts/s |\n| windows.cpu_core_dpcs | dpcs | dpcs/s |\n| windows.cpu_core_cstate | c1, c2, c3 | percentage |\n\n### Per logical disk\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.logical_disk_utilization | free, used | bytes |\n| windows.logical_disk_bandwidth | read, write | bytes/s |\n| windows.logical_disk_operations | reads, writes | operations/s |\n| windows.logical_disk_latency | read, write | seconds |\n\n### Per network device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| nic | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.net_nic_bandwidth | received, sent | kilobits/s |\n| windows.net_nic_packets | received, sent | packets/s |\n| windows.net_nic_errors | inbound, outbound | errors/s |\n| windows.net_nic_discarded | inbound, outbound | discards/s |\n\n### Per thermalzone\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thermalzone | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.thermalzone_temperature | temperature | celsius |\n\n### Per service\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |\n| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |\n\n### Per website\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| website | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| iis.website_traffic | received, sent | bytes/s |\n| iis.website_requests_rate | requests | requests/s |\n| iis.website_active_connections_count | active | connections |\n| iis.website_users_count | anonymous, non_anonymous | users |\n| iis.website_connection_attempts_rate | connection | attempts/s |\n| iis.website_isapi_extension_requests_count | isapi | requests |\n| iis.website_isapi_extension_requests_rate | isapi | requests/s |\n| iis.website_ftp_file_transfer_rate | received, sent | files/s |\n| iis.website_logon_attempts_rate | logon | attempts/s |\n| iis.website_errors_rate | document_locked, document_not_found | errors/s |\n| iis.website_uptime | document_locked, document_not_found | seconds |\n\n### Per mssql instance\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.instance_accessmethods_page_splits | page | splits/s |\n| mssql.instance_cache_hit_ratio | hit_ratio | percentage |\n| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |\n| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |\n| mssql.instance_bufman_iops | read, written | iops |\n| mssql.instance_blocked_processes | blocked | processes |\n| mssql.instance_user_connection | user | connections |\n| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |\n| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |\n| mssql.instance_memmgr_pending_memory_grants | pending | processes |\n| mssql.instance_memmgr_server_memory | memory | bytes |\n| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |\n| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |\n| mssql.instance_sqlstats_batch_requests | batch | requests/s |\n| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |\n| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |\n| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |\n\n### Per database\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n| database | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.database_active_transactions | active | transactions |\n| mssql.database_backup_restore_operations | backup | operations/s |\n| mssql.database_data_files_size | size | bytes |\n| mssql.database_log_flushed | flushed | bytes/s |\n| mssql.database_log_flushes | log | flushes/s |\n| mssql.database_transactions | transactions | transactions/s |\n| mssql.database_write_transactions | write | transactions/s |\n\n### Per certificate template\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cert_template | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adcs.cert_template_requests | requests | requests/s |\n| adcs.cert_template_failed_requests | failed | requests/s |\n| adcs.cert_template_issued_requests | issued | requests/s |\n| adcs.cert_template_pending_requests | pending | requests/s |\n| adcs.cert_template_request_processing_time | processing_time | seconds |\n| adcs.cert_template_retrievals | retrievals | retrievals/s |\n| adcs.cert_template_retrieval_processing_time | processing_time | seconds |\n| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |\n| adcs.cert_template_request_policy_module_processing | processing_time | seconds |\n| adcs.cert_template_challenge_responses | challenge | responses/s |\n| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |\n| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |\n| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |\n\n### Per process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| process | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netframework.clrexception_thrown | exceptions | exceptions/s |\n| netframework.clrexception_filters | filters | filters/s |\n| netframework.clrexception_finallys | finallys | finallys/s |\n| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |\n| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |\n| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |\n| netframework.clrinterop_interop_stubs_created | created | stubs/s |\n| netframework.clrjit_methods | jit-compiled | methods/s |\n| netframework.clrjit_time | time | percentage |\n| netframework.clrjit_standard_failures | failures | failures/s |\n| netframework.clrjit_il_bytes | compiled_msil | bytes/s |\n| netframework.clrloading_loader_heap_size | committed | bytes |\n| netframework.clrloading_appdomains_loaded | loaded | domain/s |\n| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |\n| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |\n| netframework.clrloading_classes_loaded | loaded | classes/s |\n| netframework.clrloading_class_load_failures | class_load | failures/s |\n| netframework.clrlocksandthreads_queue_length | threads | threads/s |\n| netframework.clrlocksandthreads_current_logical_threads | logical | threads |\n| netframework.clrlocksandthreads_current_physical_threads | physical | threads |\n| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |\n| netframework.clrlocksandthreads_contentions | contentions | contentions/s |\n| netframework.clrmemory_allocated_bytes | allocated | bytes/s |\n| netframework.clrmemory_finalization_survivors | survived | objects |\n| netframework.clrmemory_heap_size | heap | bytes |\n| netframework.clrmemory_promoted | promoted | bytes |\n| netframework.clrmemory_number_gc_handles | used | handles |\n| netframework.clrmemory_collections | gc | gc/s |\n| netframework.clrmemory_induced_gc | gc | gc/s |\n| netframework.clrmemory_number_pinned_objects | pinned | objects |\n| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |\n| netframework.clrmemory_committed | committed | bytes |\n| netframework.clrmemory_reserved | reserved | bytes |\n| netframework.clrmemory_gc_time | time | percentage |\n| netframework.clrremoting_channels | registered | channels/s |\n| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |\n| netframework.clrremoting_context_bound_objects | allocated | objects/s |\n| netframework.clrremoting_context_proxies | objects | objects/s |\n| netframework.clrremoting_contexts | contexts | contexts |\n| netframework.clrremoting_remote_calls | rpc | calls/s |\n| netframework.clrsecurity_link_time_checks | linktime | checks/s |\n| netframework.clrsecurity_checks_time | time | percentage |\n| netframework.clrsecurity_stack_walk_depth | stack | depth |\n| netframework.clrsecurity_runtime_checks | runtime | checks/s |\n\n### Per exchange workload\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.workload_active_tasks | active | tasks |\n| exchange.workload_completed_tasks | completed | tasks/s |\n| exchange.workload_queued_tasks | queued | tasks/s |\n| exchange.workload_yielded_tasks | yielded | tasks/s |\n| exchange.workload_activity_status | active, paused | status |\n\n### Per ldap process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |\n| exchange.ldap_read_time | read | seconds |\n| exchange.ldap_search_time | search | seconds |\n| exchange.ldap_write_time | write | seconds |\n| exchange.ldap_timeout_errors | timeout | errors/s |\n\n### Per http proxy\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.http_proxy_avg_auth_latency | latency | seconds |\n| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |\n| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |\n| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |\n| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |\n| exchange.http_proxy_requests | processed | requests/s |\n\n### Per vm\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_name | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |\n| hyperv.vm_memory_physical | assigned_memory | MiB |\n| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |\n| hyperv.vm_memory_pressure_current | pressure | percentage |\n| hyperv.vm_vid_physical_pages_allocated | allocated | pages |\n| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |\n\n### Per vm device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_device_bytes | read, written | bytes/s |\n| hyperv.vm_device_operations | read, write | operations/s |\n| hyperv.vm_device_errors | errors | errors/s |\n\n### Per vm interface\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_interface | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_interface_bytes | received, sent | bytes/s |\n| hyperv.vm_interface_packets | received, sent | packets/s |\n| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |\n\n### Per vswitch\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vswitch | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vswitch_bytes | received, sent | bytes/s |\n| hyperv.vswitch_packets | received, sent | packets/s |\n| hyperv.vswitch_directed_packets | received, sent | packets/s |\n| hyperv.vswitch_broadcast_packets | received, sent | packets/s |\n| hyperv.vswitch_multicast_packets | received, sent | packets/s |\n| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_packets_flooded | flooded | packets/s |\n| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |\n| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |\n\n",integration_type:"collector",id:"go.d.plugin-windows-Active_Directory",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-windows-hyperv",plugin_name:"go.d.plugin",module_name:"windows",monitored_instance:{name:"HyperV",link:"https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/hyper-v-technology-overview",icon_filename:"windows.svg",categories:["data-collection.windows-systems"]},keywords:["windows","microsoft","hyperv","virtualization","vm"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# HyperV\n\nPlugin: go.d.plugin\nModule: windows\n\n## Overview\n\nThis collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).\n\n\nIt collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).\n\nUsing the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nData collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Windows exporter\n\nTo install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/windows.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/windows.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: https://192.0.2.1:9182/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Virtual Node\n\nThe Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.\nYou can create a virtual node for all your Windows machines and control them as separate entities.\n\nTo make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:\n\n> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.\n\n```yaml\n# /etc/netdata/vnodes/vnodes.conf\n- hostname: win_server\n guid: \n```\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n vnode: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from multiple remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server1\n url: http://192.0.2.1:9182/metrics\n\n - name: win_server2\n url: http://192.0.2.2:9182/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m windows\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |\n| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |\n| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |\n| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\nSupported collectors:\n\n- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)\n- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)\n- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)\n- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)\n- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)\n- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)\n- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)\n- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)\n- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)\n- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)\n- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)\n- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)\n- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)\n- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)\n- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)\n- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)\n- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)\n- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)\n- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)\n- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)\n- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)\n- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)\n- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)\n- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)\n- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)\n\n\n### Per Active Directory instance\n\nThese metrics refer to the entire monitored host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |\n| windows.memory_utilization | available, used | bytes |\n| windows.memory_page_faults | page_faults | events/s |\n| windows.memory_swap_utilization | available, used | bytes |\n| windows.memory_swap_operations | read, write | operations/s |\n| windows.memory_swap_pages | read, written | pages/s |\n| windows.memory_cached | cached | KiB |\n| windows.memory_cache_faults | cache_faults | events/s |\n| windows.memory_system_pool | paged, non-paged | bytes |\n| windows.tcp_conns_established | ipv4, ipv6 | connections |\n| windows.tcp_conns_active | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |\n| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |\n| windows.tcp_segments_received | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |\n| windows.os_processes | processes | number |\n| windows.os_users | users | users |\n| windows.os_visible_memory_usage | free, used | bytes |\n| windows.os_paging_files_usage | free, used | bytes |\n| windows.system_threads | threads | number |\n| windows.system_uptime | time | seconds |\n| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |\n| windows.processes_cpu_utilization | a dimension per process | percentage |\n| windows.processes_handles | a dimension per process | handles |\n| windows.processes_io_bytes | a dimension per process | bytes/s |\n| windows.processes_io_operations | a dimension per process | operations/s |\n| windows.processes_page_faults | a dimension per process | pgfaults/s |\n| windows.processes_page_file_bytes | a dimension per process | bytes |\n| windows.processes_pool_bytes | a dimension per process | bytes |\n| windows.processes_threads | a dimension per process | threads |\n| ad.database_operations | add, delete, modify, recycle | operations/s |\n| ad.directory_operations | read, write, search | operations/s |\n| ad.name_cache_lookups | lookups | lookups/s |\n| ad.name_cache_hits | hits | hits/s |\n| ad.atq_average_request_latency | time | seconds |\n| ad.atq_outstanding_requests | outstanding | requests |\n| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |\n| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |\n| ad.dra_replication_properties_updated | inbound, outbound | properties/s |\n| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |\n| ad.dra_replication_pending_syncs | pending | syncs |\n| ad.dra_replication_sync_requests | requests | requests/s |\n| ad.ds_threads | in_use | threads |\n| ad.ldap_last_bind_time | last_bind | seconds |\n| ad.binds | binds | binds/s |\n| ad.ldap_searches | searches | searches/s |\n| adfs.ad_login_connection_failures | connection | failures/s |\n| adfs.certificate_authentications | authentications | authentications/s |\n| adfs.db_artifact_failures | connection | failures/s |\n| adfs.db_artifact_query_time_seconds | query_time | seconds/s |\n| adfs.db_config_failures | connection | failures/s |\n| adfs.db_config_query_time_seconds | query_time | seconds/s |\n| adfs.device_authentications | authentications | authentications/s |\n| adfs.external_authentications | success, failure | authentications/s |\n| adfs.federated_authentications | authentications | authentications/s |\n| adfs.federation_metadata_requests | requests | requests/s |\n| adfs.oauth_authorization_requests | requests | requests/s |\n| adfs.oauth_client_authentications | success, failure | authentications/s |\n| adfs.oauth_client_credentials_requests | success, failure | requests/s |\n| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |\n| adfs.oauth_client_windows_authentications | success, failure | authentications/s |\n| adfs.oauth_logon_certificate_requests | success, failure | requests/s |\n| adfs.oauth_password_grant_requests | success, failure | requests/s |\n| adfs.oauth_token_requests_success | success | requests/s |\n| adfs.passive_requests | passive | requests/s |\n| adfs.passport_authentications | passport | authentications/s |\n| adfs.password_change_requests | success, failure | requests/s |\n| adfs.samlp_token_requests_success | success | requests/s |\n| adfs.sso_authentications | success, failure | authentications/s |\n| adfs.token_requests | requests | requests/s |\n| adfs.userpassword_authentications | success, failure | authentications/s |\n| adfs.windows_integrated_authentications | authentications | authentications/s |\n| adfs.wsfed_token_requests_success | success | requests/s |\n| adfs.wstrust_token_requests_success | success | requests/s |\n| exchange.activesync_ping_cmds_pending | pending | commands |\n| exchange.activesync_requests | received | requests/s |\n| exchange.activesync_sync_cmds | processed | commands/s |\n| exchange.autodiscover_requests | processed | requests/s |\n| exchange.avail_service_requests | serviced | requests/s |\n| exchange.owa_current_unique_users | logged-in | users |\n| exchange.owa_requests_total | handled | requests/s |\n| exchange.rpc_active_user_count | active | users |\n| exchange.rpc_avg_latency | latency | seconds |\n| exchange.rpc_connection_count | connections | connections |\n| exchange.rpc_operations | operations | operations/s |\n| exchange.rpc_requests | processed | requests |\n| exchange.rpc_user_count | users | users |\n| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_poison | low, high, none, normal | messages/s |\n| hyperv.vms_health | ok, critical | vms |\n| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |\n| hyperv.root_partition_attached_devices | attached | devices |\n| hyperv.root_partition_deposited_pages | deposited | pages |\n| hyperv.root_partition_skipped_interrupts | skipped | interrupts |\n| hyperv.root_partition_device_dma_errors | illegal_dma | requests |\n| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |\n| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |\n| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |\n| hyperv.root_partition_address_space | address_spaces | address spaces |\n| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |\n| hyperv.root_partition_virtual_tlb_pages | used | pages |\n\n### Per cpu core\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| core | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |\n| windows.cpu_core_interrupts | interrupts | interrupts/s |\n| windows.cpu_core_dpcs | dpcs | dpcs/s |\n| windows.cpu_core_cstate | c1, c2, c3 | percentage |\n\n### Per logical disk\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.logical_disk_utilization | free, used | bytes |\n| windows.logical_disk_bandwidth | read, write | bytes/s |\n| windows.logical_disk_operations | reads, writes | operations/s |\n| windows.logical_disk_latency | read, write | seconds |\n\n### Per network device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| nic | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.net_nic_bandwidth | received, sent | kilobits/s |\n| windows.net_nic_packets | received, sent | packets/s |\n| windows.net_nic_errors | inbound, outbound | errors/s |\n| windows.net_nic_discarded | inbound, outbound | discards/s |\n\n### Per thermalzone\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thermalzone | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.thermalzone_temperature | temperature | celsius |\n\n### Per service\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |\n| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |\n\n### Per website\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| website | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| iis.website_traffic | received, sent | bytes/s |\n| iis.website_requests_rate | requests | requests/s |\n| iis.website_active_connections_count | active | connections |\n| iis.website_users_count | anonymous, non_anonymous | users |\n| iis.website_connection_attempts_rate | connection | attempts/s |\n| iis.website_isapi_extension_requests_count | isapi | requests |\n| iis.website_isapi_extension_requests_rate | isapi | requests/s |\n| iis.website_ftp_file_transfer_rate | received, sent | files/s |\n| iis.website_logon_attempts_rate | logon | attempts/s |\n| iis.website_errors_rate | document_locked, document_not_found | errors/s |\n| iis.website_uptime | document_locked, document_not_found | seconds |\n\n### Per mssql instance\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.instance_accessmethods_page_splits | page | splits/s |\n| mssql.instance_cache_hit_ratio | hit_ratio | percentage |\n| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |\n| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |\n| mssql.instance_bufman_iops | read, written | iops |\n| mssql.instance_blocked_processes | blocked | processes |\n| mssql.instance_user_connection | user | connections |\n| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |\n| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |\n| mssql.instance_memmgr_pending_memory_grants | pending | processes |\n| mssql.instance_memmgr_server_memory | memory | bytes |\n| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |\n| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |\n| mssql.instance_sqlstats_batch_requests | batch | requests/s |\n| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |\n| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |\n| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |\n\n### Per database\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n| database | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.database_active_transactions | active | transactions |\n| mssql.database_backup_restore_operations | backup | operations/s |\n| mssql.database_data_files_size | size | bytes |\n| mssql.database_log_flushed | flushed | bytes/s |\n| mssql.database_log_flushes | log | flushes/s |\n| mssql.database_transactions | transactions | transactions/s |\n| mssql.database_write_transactions | write | transactions/s |\n\n### Per certificate template\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cert_template | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adcs.cert_template_requests | requests | requests/s |\n| adcs.cert_template_failed_requests | failed | requests/s |\n| adcs.cert_template_issued_requests | issued | requests/s |\n| adcs.cert_template_pending_requests | pending | requests/s |\n| adcs.cert_template_request_processing_time | processing_time | seconds |\n| adcs.cert_template_retrievals | retrievals | retrievals/s |\n| adcs.cert_template_retrieval_processing_time | processing_time | seconds |\n| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |\n| adcs.cert_template_request_policy_module_processing | processing_time | seconds |\n| adcs.cert_template_challenge_responses | challenge | responses/s |\n| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |\n| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |\n| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |\n\n### Per process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| process | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netframework.clrexception_thrown | exceptions | exceptions/s |\n| netframework.clrexception_filters | filters | filters/s |\n| netframework.clrexception_finallys | finallys | finallys/s |\n| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |\n| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |\n| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |\n| netframework.clrinterop_interop_stubs_created | created | stubs/s |\n| netframework.clrjit_methods | jit-compiled | methods/s |\n| netframework.clrjit_time | time | percentage |\n| netframework.clrjit_standard_failures | failures | failures/s |\n| netframework.clrjit_il_bytes | compiled_msil | bytes/s |\n| netframework.clrloading_loader_heap_size | committed | bytes |\n| netframework.clrloading_appdomains_loaded | loaded | domain/s |\n| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |\n| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |\n| netframework.clrloading_classes_loaded | loaded | classes/s |\n| netframework.clrloading_class_load_failures | class_load | failures/s |\n| netframework.clrlocksandthreads_queue_length | threads | threads/s |\n| netframework.clrlocksandthreads_current_logical_threads | logical | threads |\n| netframework.clrlocksandthreads_current_physical_threads | physical | threads |\n| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |\n| netframework.clrlocksandthreads_contentions | contentions | contentions/s |\n| netframework.clrmemory_allocated_bytes | allocated | bytes/s |\n| netframework.clrmemory_finalization_survivors | survived | objects |\n| netframework.clrmemory_heap_size | heap | bytes |\n| netframework.clrmemory_promoted | promoted | bytes |\n| netframework.clrmemory_number_gc_handles | used | handles |\n| netframework.clrmemory_collections | gc | gc/s |\n| netframework.clrmemory_induced_gc | gc | gc/s |\n| netframework.clrmemory_number_pinned_objects | pinned | objects |\n| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |\n| netframework.clrmemory_committed | committed | bytes |\n| netframework.clrmemory_reserved | reserved | bytes |\n| netframework.clrmemory_gc_time | time | percentage |\n| netframework.clrremoting_channels | registered | channels/s |\n| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |\n| netframework.clrremoting_context_bound_objects | allocated | objects/s |\n| netframework.clrremoting_context_proxies | objects | objects/s |\n| netframework.clrremoting_contexts | contexts | contexts |\n| netframework.clrremoting_remote_calls | rpc | calls/s |\n| netframework.clrsecurity_link_time_checks | linktime | checks/s |\n| netframework.clrsecurity_checks_time | time | percentage |\n| netframework.clrsecurity_stack_walk_depth | stack | depth |\n| netframework.clrsecurity_runtime_checks | runtime | checks/s |\n\n### Per exchange workload\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.workload_active_tasks | active | tasks |\n| exchange.workload_completed_tasks | completed | tasks/s |\n| exchange.workload_queued_tasks | queued | tasks/s |\n| exchange.workload_yielded_tasks | yielded | tasks/s |\n| exchange.workload_activity_status | active, paused | status |\n\n### Per ldap process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |\n| exchange.ldap_read_time | read | seconds |\n| exchange.ldap_search_time | search | seconds |\n| exchange.ldap_write_time | write | seconds |\n| exchange.ldap_timeout_errors | timeout | errors/s |\n\n### Per http proxy\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.http_proxy_avg_auth_latency | latency | seconds |\n| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |\n| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |\n| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |\n| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |\n| exchange.http_proxy_requests | processed | requests/s |\n\n### Per vm\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_name | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |\n| hyperv.vm_memory_physical | assigned_memory | MiB |\n| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |\n| hyperv.vm_memory_pressure_current | pressure | percentage |\n| hyperv.vm_vid_physical_pages_allocated | allocated | pages |\n| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |\n\n### Per vm device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_device_bytes | read, written | bytes/s |\n| hyperv.vm_device_operations | read, write | operations/s |\n| hyperv.vm_device_errors | errors | errors/s |\n\n### Per vm interface\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_interface | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_interface_bytes | received, sent | bytes/s |\n| hyperv.vm_interface_packets | received, sent | packets/s |\n| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |\n\n### Per vswitch\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vswitch | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vswitch_bytes | received, sent | bytes/s |\n| hyperv.vswitch_packets | received, sent | packets/s |\n| hyperv.vswitch_directed_packets | received, sent | packets/s |\n| hyperv.vswitch_broadcast_packets | received, sent | packets/s |\n| hyperv.vswitch_multicast_packets | received, sent | packets/s |\n| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_packets_flooded | flooded | packets/s |\n| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |\n| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |\n\n",integration_type:"collector",id:"go.d.plugin-windows-HyperV",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-windows-msexchange",plugin_name:"go.d.plugin",module_name:"windows",monitored_instance:{name:"MS Exchange",link:"https://www.microsoft.com/en-us/microsoft-365/exchange/email",icon_filename:"exchange.svg",categories:["data-collection.windows-systems"]},keywords:["windows","microsoft","mail"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# MS Exchange\n\nPlugin: go.d.plugin\nModule: windows\n\n## Overview\n\nThis collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).\n\n\nIt collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).\n\nUsing the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nData collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Windows exporter\n\nTo install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/windows.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/windows.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: https://192.0.2.1:9182/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Virtual Node\n\nThe Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.\nYou can create a virtual node for all your Windows machines and control them as separate entities.\n\nTo make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:\n\n> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.\n\n```yaml\n# /etc/netdata/vnodes/vnodes.conf\n- hostname: win_server\n guid: \n```\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n vnode: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from multiple remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server1\n url: http://192.0.2.1:9182/metrics\n\n - name: win_server2\n url: http://192.0.2.2:9182/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m windows\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |\n| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |\n| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |\n| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\nSupported collectors:\n\n- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)\n- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)\n- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)\n- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)\n- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)\n- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)\n- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)\n- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)\n- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)\n- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)\n- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)\n- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)\n- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)\n- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)\n- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)\n- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)\n- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)\n- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)\n- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)\n- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)\n- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)\n- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)\n- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)\n- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)\n- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)\n\n\n### Per Active Directory instance\n\nThese metrics refer to the entire monitored host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |\n| windows.memory_utilization | available, used | bytes |\n| windows.memory_page_faults | page_faults | events/s |\n| windows.memory_swap_utilization | available, used | bytes |\n| windows.memory_swap_operations | read, write | operations/s |\n| windows.memory_swap_pages | read, written | pages/s |\n| windows.memory_cached | cached | KiB |\n| windows.memory_cache_faults | cache_faults | events/s |\n| windows.memory_system_pool | paged, non-paged | bytes |\n| windows.tcp_conns_established | ipv4, ipv6 | connections |\n| windows.tcp_conns_active | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |\n| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |\n| windows.tcp_segments_received | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |\n| windows.os_processes | processes | number |\n| windows.os_users | users | users |\n| windows.os_visible_memory_usage | free, used | bytes |\n| windows.os_paging_files_usage | free, used | bytes |\n| windows.system_threads | threads | number |\n| windows.system_uptime | time | seconds |\n| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |\n| windows.processes_cpu_utilization | a dimension per process | percentage |\n| windows.processes_handles | a dimension per process | handles |\n| windows.processes_io_bytes | a dimension per process | bytes/s |\n| windows.processes_io_operations | a dimension per process | operations/s |\n| windows.processes_page_faults | a dimension per process | pgfaults/s |\n| windows.processes_page_file_bytes | a dimension per process | bytes |\n| windows.processes_pool_bytes | a dimension per process | bytes |\n| windows.processes_threads | a dimension per process | threads |\n| ad.database_operations | add, delete, modify, recycle | operations/s |\n| ad.directory_operations | read, write, search | operations/s |\n| ad.name_cache_lookups | lookups | lookups/s |\n| ad.name_cache_hits | hits | hits/s |\n| ad.atq_average_request_latency | time | seconds |\n| ad.atq_outstanding_requests | outstanding | requests |\n| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |\n| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |\n| ad.dra_replication_properties_updated | inbound, outbound | properties/s |\n| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |\n| ad.dra_replication_pending_syncs | pending | syncs |\n| ad.dra_replication_sync_requests | requests | requests/s |\n| ad.ds_threads | in_use | threads |\n| ad.ldap_last_bind_time | last_bind | seconds |\n| ad.binds | binds | binds/s |\n| ad.ldap_searches | searches | searches/s |\n| adfs.ad_login_connection_failures | connection | failures/s |\n| adfs.certificate_authentications | authentications | authentications/s |\n| adfs.db_artifact_failures | connection | failures/s |\n| adfs.db_artifact_query_time_seconds | query_time | seconds/s |\n| adfs.db_config_failures | connection | failures/s |\n| adfs.db_config_query_time_seconds | query_time | seconds/s |\n| adfs.device_authentications | authentications | authentications/s |\n| adfs.external_authentications | success, failure | authentications/s |\n| adfs.federated_authentications | authentications | authentications/s |\n| adfs.federation_metadata_requests | requests | requests/s |\n| adfs.oauth_authorization_requests | requests | requests/s |\n| adfs.oauth_client_authentications | success, failure | authentications/s |\n| adfs.oauth_client_credentials_requests | success, failure | requests/s |\n| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |\n| adfs.oauth_client_windows_authentications | success, failure | authentications/s |\n| adfs.oauth_logon_certificate_requests | success, failure | requests/s |\n| adfs.oauth_password_grant_requests | success, failure | requests/s |\n| adfs.oauth_token_requests_success | success | requests/s |\n| adfs.passive_requests | passive | requests/s |\n| adfs.passport_authentications | passport | authentications/s |\n| adfs.password_change_requests | success, failure | requests/s |\n| adfs.samlp_token_requests_success | success | requests/s |\n| adfs.sso_authentications | success, failure | authentications/s |\n| adfs.token_requests | requests | requests/s |\n| adfs.userpassword_authentications | success, failure | authentications/s |\n| adfs.windows_integrated_authentications | authentications | authentications/s |\n| adfs.wsfed_token_requests_success | success | requests/s |\n| adfs.wstrust_token_requests_success | success | requests/s |\n| exchange.activesync_ping_cmds_pending | pending | commands |\n| exchange.activesync_requests | received | requests/s |\n| exchange.activesync_sync_cmds | processed | commands/s |\n| exchange.autodiscover_requests | processed | requests/s |\n| exchange.avail_service_requests | serviced | requests/s |\n| exchange.owa_current_unique_users | logged-in | users |\n| exchange.owa_requests_total | handled | requests/s |\n| exchange.rpc_active_user_count | active | users |\n| exchange.rpc_avg_latency | latency | seconds |\n| exchange.rpc_connection_count | connections | connections |\n| exchange.rpc_operations | operations | operations/s |\n| exchange.rpc_requests | processed | requests |\n| exchange.rpc_user_count | users | users |\n| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_poison | low, high, none, normal | messages/s |\n| hyperv.vms_health | ok, critical | vms |\n| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |\n| hyperv.root_partition_attached_devices | attached | devices |\n| hyperv.root_partition_deposited_pages | deposited | pages |\n| hyperv.root_partition_skipped_interrupts | skipped | interrupts |\n| hyperv.root_partition_device_dma_errors | illegal_dma | requests |\n| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |\n| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |\n| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |\n| hyperv.root_partition_address_space | address_spaces | address spaces |\n| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |\n| hyperv.root_partition_virtual_tlb_pages | used | pages |\n\n### Per cpu core\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| core | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |\n| windows.cpu_core_interrupts | interrupts | interrupts/s |\n| windows.cpu_core_dpcs | dpcs | dpcs/s |\n| windows.cpu_core_cstate | c1, c2, c3 | percentage |\n\n### Per logical disk\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.logical_disk_utilization | free, used | bytes |\n| windows.logical_disk_bandwidth | read, write | bytes/s |\n| windows.logical_disk_operations | reads, writes | operations/s |\n| windows.logical_disk_latency | read, write | seconds |\n\n### Per network device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| nic | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.net_nic_bandwidth | received, sent | kilobits/s |\n| windows.net_nic_packets | received, sent | packets/s |\n| windows.net_nic_errors | inbound, outbound | errors/s |\n| windows.net_nic_discarded | inbound, outbound | discards/s |\n\n### Per thermalzone\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thermalzone | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.thermalzone_temperature | temperature | celsius |\n\n### Per service\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |\n| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |\n\n### Per website\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| website | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| iis.website_traffic | received, sent | bytes/s |\n| iis.website_requests_rate | requests | requests/s |\n| iis.website_active_connections_count | active | connections |\n| iis.website_users_count | anonymous, non_anonymous | users |\n| iis.website_connection_attempts_rate | connection | attempts/s |\n| iis.website_isapi_extension_requests_count | isapi | requests |\n| iis.website_isapi_extension_requests_rate | isapi | requests/s |\n| iis.website_ftp_file_transfer_rate | received, sent | files/s |\n| iis.website_logon_attempts_rate | logon | attempts/s |\n| iis.website_errors_rate | document_locked, document_not_found | errors/s |\n| iis.website_uptime | document_locked, document_not_found | seconds |\n\n### Per mssql instance\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.instance_accessmethods_page_splits | page | splits/s |\n| mssql.instance_cache_hit_ratio | hit_ratio | percentage |\n| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |\n| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |\n| mssql.instance_bufman_iops | read, written | iops |\n| mssql.instance_blocked_processes | blocked | processes |\n| mssql.instance_user_connection | user | connections |\n| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |\n| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |\n| mssql.instance_memmgr_pending_memory_grants | pending | processes |\n| mssql.instance_memmgr_server_memory | memory | bytes |\n| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |\n| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |\n| mssql.instance_sqlstats_batch_requests | batch | requests/s |\n| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |\n| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |\n| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |\n\n### Per database\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n| database | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.database_active_transactions | active | transactions |\n| mssql.database_backup_restore_operations | backup | operations/s |\n| mssql.database_data_files_size | size | bytes |\n| mssql.database_log_flushed | flushed | bytes/s |\n| mssql.database_log_flushes | log | flushes/s |\n| mssql.database_transactions | transactions | transactions/s |\n| mssql.database_write_transactions | write | transactions/s |\n\n### Per certificate template\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cert_template | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adcs.cert_template_requests | requests | requests/s |\n| adcs.cert_template_failed_requests | failed | requests/s |\n| adcs.cert_template_issued_requests | issued | requests/s |\n| adcs.cert_template_pending_requests | pending | requests/s |\n| adcs.cert_template_request_processing_time | processing_time | seconds |\n| adcs.cert_template_retrievals | retrievals | retrievals/s |\n| adcs.cert_template_retrieval_processing_time | processing_time | seconds |\n| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |\n| adcs.cert_template_request_policy_module_processing | processing_time | seconds |\n| adcs.cert_template_challenge_responses | challenge | responses/s |\n| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |\n| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |\n| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |\n\n### Per process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| process | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netframework.clrexception_thrown | exceptions | exceptions/s |\n| netframework.clrexception_filters | filters | filters/s |\n| netframework.clrexception_finallys | finallys | finallys/s |\n| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |\n| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |\n| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |\n| netframework.clrinterop_interop_stubs_created | created | stubs/s |\n| netframework.clrjit_methods | jit-compiled | methods/s |\n| netframework.clrjit_time | time | percentage |\n| netframework.clrjit_standard_failures | failures | failures/s |\n| netframework.clrjit_il_bytes | compiled_msil | bytes/s |\n| netframework.clrloading_loader_heap_size | committed | bytes |\n| netframework.clrloading_appdomains_loaded | loaded | domain/s |\n| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |\n| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |\n| netframework.clrloading_classes_loaded | loaded | classes/s |\n| netframework.clrloading_class_load_failures | class_load | failures/s |\n| netframework.clrlocksandthreads_queue_length | threads | threads/s |\n| netframework.clrlocksandthreads_current_logical_threads | logical | threads |\n| netframework.clrlocksandthreads_current_physical_threads | physical | threads |\n| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |\n| netframework.clrlocksandthreads_contentions | contentions | contentions/s |\n| netframework.clrmemory_allocated_bytes | allocated | bytes/s |\n| netframework.clrmemory_finalization_survivors | survived | objects |\n| netframework.clrmemory_heap_size | heap | bytes |\n| netframework.clrmemory_promoted | promoted | bytes |\n| netframework.clrmemory_number_gc_handles | used | handles |\n| netframework.clrmemory_collections | gc | gc/s |\n| netframework.clrmemory_induced_gc | gc | gc/s |\n| netframework.clrmemory_number_pinned_objects | pinned | objects |\n| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |\n| netframework.clrmemory_committed | committed | bytes |\n| netframework.clrmemory_reserved | reserved | bytes |\n| netframework.clrmemory_gc_time | time | percentage |\n| netframework.clrremoting_channels | registered | channels/s |\n| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |\n| netframework.clrremoting_context_bound_objects | allocated | objects/s |\n| netframework.clrremoting_context_proxies | objects | objects/s |\n| netframework.clrremoting_contexts | contexts | contexts |\n| netframework.clrremoting_remote_calls | rpc | calls/s |\n| netframework.clrsecurity_link_time_checks | linktime | checks/s |\n| netframework.clrsecurity_checks_time | time | percentage |\n| netframework.clrsecurity_stack_walk_depth | stack | depth |\n| netframework.clrsecurity_runtime_checks | runtime | checks/s |\n\n### Per exchange workload\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.workload_active_tasks | active | tasks |\n| exchange.workload_completed_tasks | completed | tasks/s |\n| exchange.workload_queued_tasks | queued | tasks/s |\n| exchange.workload_yielded_tasks | yielded | tasks/s |\n| exchange.workload_activity_status | active, paused | status |\n\n### Per ldap process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |\n| exchange.ldap_read_time | read | seconds |\n| exchange.ldap_search_time | search | seconds |\n| exchange.ldap_write_time | write | seconds |\n| exchange.ldap_timeout_errors | timeout | errors/s |\n\n### Per http proxy\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.http_proxy_avg_auth_latency | latency | seconds |\n| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |\n| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |\n| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |\n| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |\n| exchange.http_proxy_requests | processed | requests/s |\n\n### Per vm\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_name | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |\n| hyperv.vm_memory_physical | assigned_memory | MiB |\n| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |\n| hyperv.vm_memory_pressure_current | pressure | percentage |\n| hyperv.vm_vid_physical_pages_allocated | allocated | pages |\n| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |\n\n### Per vm device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_device_bytes | read, written | bytes/s |\n| hyperv.vm_device_operations | read, write | operations/s |\n| hyperv.vm_device_errors | errors | errors/s |\n\n### Per vm interface\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_interface | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_interface_bytes | received, sent | bytes/s |\n| hyperv.vm_interface_packets | received, sent | packets/s |\n| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |\n\n### Per vswitch\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vswitch | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vswitch_bytes | received, sent | bytes/s |\n| hyperv.vswitch_packets | received, sent | packets/s |\n| hyperv.vswitch_directed_packets | received, sent | packets/s |\n| hyperv.vswitch_broadcast_packets | received, sent | packets/s |\n| hyperv.vswitch_multicast_packets | received, sent | packets/s |\n| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_packets_flooded | flooded | packets/s |\n| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |\n| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |\n\n",integration_type:"collector",id:"go.d.plugin-windows-MS_Exchange",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-windows-mssql",plugin_name:"go.d.plugin",module_name:"windows",monitored_instance:{name:"MS SQL Server",link:"https://www.microsoft.com/en-us/sql-server/",icon_filename:"mssql.svg",categories:["data-collection.windows-systems"]},keywords:["windows","microsoft","mssql","database","db"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# MS SQL Server\n\nPlugin: go.d.plugin\nModule: windows\n\n## Overview\n\nThis collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).\n\n\nIt collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).\n\nUsing the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nData collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Windows exporter\n\nTo install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/windows.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/windows.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: https://192.0.2.1:9182/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Virtual Node\n\nThe Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.\nYou can create a virtual node for all your Windows machines and control them as separate entities.\n\nTo make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:\n\n> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.\n\n```yaml\n# /etc/netdata/vnodes/vnodes.conf\n- hostname: win_server\n guid: \n```\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n vnode: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from multiple remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server1\n url: http://192.0.2.1:9182/metrics\n\n - name: win_server2\n url: http://192.0.2.2:9182/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m windows\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |\n| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |\n| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |\n| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\nSupported collectors:\n\n- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)\n- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)\n- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)\n- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)\n- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)\n- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)\n- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)\n- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)\n- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)\n- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)\n- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)\n- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)\n- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)\n- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)\n- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)\n- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)\n- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)\n- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)\n- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)\n- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)\n- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)\n- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)\n- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)\n- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)\n- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)\n\n\n### Per Active Directory instance\n\nThese metrics refer to the entire monitored host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |\n| windows.memory_utilization | available, used | bytes |\n| windows.memory_page_faults | page_faults | events/s |\n| windows.memory_swap_utilization | available, used | bytes |\n| windows.memory_swap_operations | read, write | operations/s |\n| windows.memory_swap_pages | read, written | pages/s |\n| windows.memory_cached | cached | KiB |\n| windows.memory_cache_faults | cache_faults | events/s |\n| windows.memory_system_pool | paged, non-paged | bytes |\n| windows.tcp_conns_established | ipv4, ipv6 | connections |\n| windows.tcp_conns_active | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |\n| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |\n| windows.tcp_segments_received | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |\n| windows.os_processes | processes | number |\n| windows.os_users | users | users |\n| windows.os_visible_memory_usage | free, used | bytes |\n| windows.os_paging_files_usage | free, used | bytes |\n| windows.system_threads | threads | number |\n| windows.system_uptime | time | seconds |\n| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |\n| windows.processes_cpu_utilization | a dimension per process | percentage |\n| windows.processes_handles | a dimension per process | handles |\n| windows.processes_io_bytes | a dimension per process | bytes/s |\n| windows.processes_io_operations | a dimension per process | operations/s |\n| windows.processes_page_faults | a dimension per process | pgfaults/s |\n| windows.processes_page_file_bytes | a dimension per process | bytes |\n| windows.processes_pool_bytes | a dimension per process | bytes |\n| windows.processes_threads | a dimension per process | threads |\n| ad.database_operations | add, delete, modify, recycle | operations/s |\n| ad.directory_operations | read, write, search | operations/s |\n| ad.name_cache_lookups | lookups | lookups/s |\n| ad.name_cache_hits | hits | hits/s |\n| ad.atq_average_request_latency | time | seconds |\n| ad.atq_outstanding_requests | outstanding | requests |\n| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |\n| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |\n| ad.dra_replication_properties_updated | inbound, outbound | properties/s |\n| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |\n| ad.dra_replication_pending_syncs | pending | syncs |\n| ad.dra_replication_sync_requests | requests | requests/s |\n| ad.ds_threads | in_use | threads |\n| ad.ldap_last_bind_time | last_bind | seconds |\n| ad.binds | binds | binds/s |\n| ad.ldap_searches | searches | searches/s |\n| adfs.ad_login_connection_failures | connection | failures/s |\n| adfs.certificate_authentications | authentications | authentications/s |\n| adfs.db_artifact_failures | connection | failures/s |\n| adfs.db_artifact_query_time_seconds | query_time | seconds/s |\n| adfs.db_config_failures | connection | failures/s |\n| adfs.db_config_query_time_seconds | query_time | seconds/s |\n| adfs.device_authentications | authentications | authentications/s |\n| adfs.external_authentications | success, failure | authentications/s |\n| adfs.federated_authentications | authentications | authentications/s |\n| adfs.federation_metadata_requests | requests | requests/s |\n| adfs.oauth_authorization_requests | requests | requests/s |\n| adfs.oauth_client_authentications | success, failure | authentications/s |\n| adfs.oauth_client_credentials_requests | success, failure | requests/s |\n| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |\n| adfs.oauth_client_windows_authentications | success, failure | authentications/s |\n| adfs.oauth_logon_certificate_requests | success, failure | requests/s |\n| adfs.oauth_password_grant_requests | success, failure | requests/s |\n| adfs.oauth_token_requests_success | success | requests/s |\n| adfs.passive_requests | passive | requests/s |\n| adfs.passport_authentications | passport | authentications/s |\n| adfs.password_change_requests | success, failure | requests/s |\n| adfs.samlp_token_requests_success | success | requests/s |\n| adfs.sso_authentications | success, failure | authentications/s |\n| adfs.token_requests | requests | requests/s |\n| adfs.userpassword_authentications | success, failure | authentications/s |\n| adfs.windows_integrated_authentications | authentications | authentications/s |\n| adfs.wsfed_token_requests_success | success | requests/s |\n| adfs.wstrust_token_requests_success | success | requests/s |\n| exchange.activesync_ping_cmds_pending | pending | commands |\n| exchange.activesync_requests | received | requests/s |\n| exchange.activesync_sync_cmds | processed | commands/s |\n| exchange.autodiscover_requests | processed | requests/s |\n| exchange.avail_service_requests | serviced | requests/s |\n| exchange.owa_current_unique_users | logged-in | users |\n| exchange.owa_requests_total | handled | requests/s |\n| exchange.rpc_active_user_count | active | users |\n| exchange.rpc_avg_latency | latency | seconds |\n| exchange.rpc_connection_count | connections | connections |\n| exchange.rpc_operations | operations | operations/s |\n| exchange.rpc_requests | processed | requests |\n| exchange.rpc_user_count | users | users |\n| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_poison | low, high, none, normal | messages/s |\n| hyperv.vms_health | ok, critical | vms |\n| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |\n| hyperv.root_partition_attached_devices | attached | devices |\n| hyperv.root_partition_deposited_pages | deposited | pages |\n| hyperv.root_partition_skipped_interrupts | skipped | interrupts |\n| hyperv.root_partition_device_dma_errors | illegal_dma | requests |\n| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |\n| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |\n| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |\n| hyperv.root_partition_address_space | address_spaces | address spaces |\n| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |\n| hyperv.root_partition_virtual_tlb_pages | used | pages |\n\n### Per cpu core\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| core | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |\n| windows.cpu_core_interrupts | interrupts | interrupts/s |\n| windows.cpu_core_dpcs | dpcs | dpcs/s |\n| windows.cpu_core_cstate | c1, c2, c3 | percentage |\n\n### Per logical disk\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.logical_disk_utilization | free, used | bytes |\n| windows.logical_disk_bandwidth | read, write | bytes/s |\n| windows.logical_disk_operations | reads, writes | operations/s |\n| windows.logical_disk_latency | read, write | seconds |\n\n### Per network device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| nic | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.net_nic_bandwidth | received, sent | kilobits/s |\n| windows.net_nic_packets | received, sent | packets/s |\n| windows.net_nic_errors | inbound, outbound | errors/s |\n| windows.net_nic_discarded | inbound, outbound | discards/s |\n\n### Per thermalzone\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thermalzone | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.thermalzone_temperature | temperature | celsius |\n\n### Per service\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |\n| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |\n\n### Per website\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| website | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| iis.website_traffic | received, sent | bytes/s |\n| iis.website_requests_rate | requests | requests/s |\n| iis.website_active_connections_count | active | connections |\n| iis.website_users_count | anonymous, non_anonymous | users |\n| iis.website_connection_attempts_rate | connection | attempts/s |\n| iis.website_isapi_extension_requests_count | isapi | requests |\n| iis.website_isapi_extension_requests_rate | isapi | requests/s |\n| iis.website_ftp_file_transfer_rate | received, sent | files/s |\n| iis.website_logon_attempts_rate | logon | attempts/s |\n| iis.website_errors_rate | document_locked, document_not_found | errors/s |\n| iis.website_uptime | document_locked, document_not_found | seconds |\n\n### Per mssql instance\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.instance_accessmethods_page_splits | page | splits/s |\n| mssql.instance_cache_hit_ratio | hit_ratio | percentage |\n| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |\n| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |\n| mssql.instance_bufman_iops | read, written | iops |\n| mssql.instance_blocked_processes | blocked | processes |\n| mssql.instance_user_connection | user | connections |\n| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |\n| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |\n| mssql.instance_memmgr_pending_memory_grants | pending | processes |\n| mssql.instance_memmgr_server_memory | memory | bytes |\n| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |\n| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |\n| mssql.instance_sqlstats_batch_requests | batch | requests/s |\n| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |\n| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |\n| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |\n\n### Per database\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n| database | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.database_active_transactions | active | transactions |\n| mssql.database_backup_restore_operations | backup | operations/s |\n| mssql.database_data_files_size | size | bytes |\n| mssql.database_log_flushed | flushed | bytes/s |\n| mssql.database_log_flushes | log | flushes/s |\n| mssql.database_transactions | transactions | transactions/s |\n| mssql.database_write_transactions | write | transactions/s |\n\n### Per certificate template\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cert_template | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adcs.cert_template_requests | requests | requests/s |\n| adcs.cert_template_failed_requests | failed | requests/s |\n| adcs.cert_template_issued_requests | issued | requests/s |\n| adcs.cert_template_pending_requests | pending | requests/s |\n| adcs.cert_template_request_processing_time | processing_time | seconds |\n| adcs.cert_template_retrievals | retrievals | retrievals/s |\n| adcs.cert_template_retrieval_processing_time | processing_time | seconds |\n| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |\n| adcs.cert_template_request_policy_module_processing | processing_time | seconds |\n| adcs.cert_template_challenge_responses | challenge | responses/s |\n| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |\n| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |\n| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |\n\n### Per process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| process | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netframework.clrexception_thrown | exceptions | exceptions/s |\n| netframework.clrexception_filters | filters | filters/s |\n| netframework.clrexception_finallys | finallys | finallys/s |\n| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |\n| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |\n| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |\n| netframework.clrinterop_interop_stubs_created | created | stubs/s |\n| netframework.clrjit_methods | jit-compiled | methods/s |\n| netframework.clrjit_time | time | percentage |\n| netframework.clrjit_standard_failures | failures | failures/s |\n| netframework.clrjit_il_bytes | compiled_msil | bytes/s |\n| netframework.clrloading_loader_heap_size | committed | bytes |\n| netframework.clrloading_appdomains_loaded | loaded | domain/s |\n| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |\n| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |\n| netframework.clrloading_classes_loaded | loaded | classes/s |\n| netframework.clrloading_class_load_failures | class_load | failures/s |\n| netframework.clrlocksandthreads_queue_length | threads | threads/s |\n| netframework.clrlocksandthreads_current_logical_threads | logical | threads |\n| netframework.clrlocksandthreads_current_physical_threads | physical | threads |\n| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |\n| netframework.clrlocksandthreads_contentions | contentions | contentions/s |\n| netframework.clrmemory_allocated_bytes | allocated | bytes/s |\n| netframework.clrmemory_finalization_survivors | survived | objects |\n| netframework.clrmemory_heap_size | heap | bytes |\n| netframework.clrmemory_promoted | promoted | bytes |\n| netframework.clrmemory_number_gc_handles | used | handles |\n| netframework.clrmemory_collections | gc | gc/s |\n| netframework.clrmemory_induced_gc | gc | gc/s |\n| netframework.clrmemory_number_pinned_objects | pinned | objects |\n| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |\n| netframework.clrmemory_committed | committed | bytes |\n| netframework.clrmemory_reserved | reserved | bytes |\n| netframework.clrmemory_gc_time | time | percentage |\n| netframework.clrremoting_channels | registered | channels/s |\n| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |\n| netframework.clrremoting_context_bound_objects | allocated | objects/s |\n| netframework.clrremoting_context_proxies | objects | objects/s |\n| netframework.clrremoting_contexts | contexts | contexts |\n| netframework.clrremoting_remote_calls | rpc | calls/s |\n| netframework.clrsecurity_link_time_checks | linktime | checks/s |\n| netframework.clrsecurity_checks_time | time | percentage |\n| netframework.clrsecurity_stack_walk_depth | stack | depth |\n| netframework.clrsecurity_runtime_checks | runtime | checks/s |\n\n### Per exchange workload\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.workload_active_tasks | active | tasks |\n| exchange.workload_completed_tasks | completed | tasks/s |\n| exchange.workload_queued_tasks | queued | tasks/s |\n| exchange.workload_yielded_tasks | yielded | tasks/s |\n| exchange.workload_activity_status | active, paused | status |\n\n### Per ldap process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |\n| exchange.ldap_read_time | read | seconds |\n| exchange.ldap_search_time | search | seconds |\n| exchange.ldap_write_time | write | seconds |\n| exchange.ldap_timeout_errors | timeout | errors/s |\n\n### Per http proxy\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.http_proxy_avg_auth_latency | latency | seconds |\n| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |\n| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |\n| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |\n| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |\n| exchange.http_proxy_requests | processed | requests/s |\n\n### Per vm\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_name | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |\n| hyperv.vm_memory_physical | assigned_memory | MiB |\n| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |\n| hyperv.vm_memory_pressure_current | pressure | percentage |\n| hyperv.vm_vid_physical_pages_allocated | allocated | pages |\n| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |\n\n### Per vm device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_device_bytes | read, written | bytes/s |\n| hyperv.vm_device_operations | read, write | operations/s |\n| hyperv.vm_device_errors | errors | errors/s |\n\n### Per vm interface\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_interface | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_interface_bytes | received, sent | bytes/s |\n| hyperv.vm_interface_packets | received, sent | packets/s |\n| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |\n\n### Per vswitch\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vswitch | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vswitch_bytes | received, sent | bytes/s |\n| hyperv.vswitch_packets | received, sent | packets/s |\n| hyperv.vswitch_directed_packets | received, sent | packets/s |\n| hyperv.vswitch_broadcast_packets | received, sent | packets/s |\n| hyperv.vswitch_multicast_packets | received, sent | packets/s |\n| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_packets_flooded | flooded | packets/s |\n| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |\n| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |\n\n",integration_type:"collector",id:"go.d.plugin-windows-MS_SQL_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-windows-dotnet",plugin_name:"go.d.plugin",module_name:"windows",monitored_instance:{name:"NET Framework",link:"https://dotnet.microsoft.com/en-us/download/dotnet-framework",icon_filename:"dotnet.svg",categories:["data-collection.windows-systems"]},keywords:["windows","microsoft","dotnet"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# NET Framework\n\nPlugin: go.d.plugin\nModule: windows\n\n## Overview\n\nThis collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).\n\n\nIt collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).\n\nUsing the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nData collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Windows exporter\n\nTo install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/windows.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/windows.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: https://192.0.2.1:9182/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Virtual Node\n\nThe Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.\nYou can create a virtual node for all your Windows machines and control them as separate entities.\n\nTo make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:\n\n> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.\n\n```yaml\n# /etc/netdata/vnodes/vnodes.conf\n- hostname: win_server\n guid: \n```\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n vnode: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from multiple remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server1\n url: http://192.0.2.1:9182/metrics\n\n - name: win_server2\n url: http://192.0.2.2:9182/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m windows\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |\n| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |\n| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |\n| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\nSupported collectors:\n\n- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)\n- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)\n- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)\n- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)\n- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)\n- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)\n- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)\n- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)\n- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)\n- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)\n- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)\n- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)\n- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)\n- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)\n- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)\n- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)\n- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)\n- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)\n- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)\n- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)\n- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)\n- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)\n- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)\n- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)\n- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)\n\n\n### Per Active Directory instance\n\nThese metrics refer to the entire monitored host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |\n| windows.memory_utilization | available, used | bytes |\n| windows.memory_page_faults | page_faults | events/s |\n| windows.memory_swap_utilization | available, used | bytes |\n| windows.memory_swap_operations | read, write | operations/s |\n| windows.memory_swap_pages | read, written | pages/s |\n| windows.memory_cached | cached | KiB |\n| windows.memory_cache_faults | cache_faults | events/s |\n| windows.memory_system_pool | paged, non-paged | bytes |\n| windows.tcp_conns_established | ipv4, ipv6 | connections |\n| windows.tcp_conns_active | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |\n| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |\n| windows.tcp_segments_received | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |\n| windows.os_processes | processes | number |\n| windows.os_users | users | users |\n| windows.os_visible_memory_usage | free, used | bytes |\n| windows.os_paging_files_usage | free, used | bytes |\n| windows.system_threads | threads | number |\n| windows.system_uptime | time | seconds |\n| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |\n| windows.processes_cpu_utilization | a dimension per process | percentage |\n| windows.processes_handles | a dimension per process | handles |\n| windows.processes_io_bytes | a dimension per process | bytes/s |\n| windows.processes_io_operations | a dimension per process | operations/s |\n| windows.processes_page_faults | a dimension per process | pgfaults/s |\n| windows.processes_page_file_bytes | a dimension per process | bytes |\n| windows.processes_pool_bytes | a dimension per process | bytes |\n| windows.processes_threads | a dimension per process | threads |\n| ad.database_operations | add, delete, modify, recycle | operations/s |\n| ad.directory_operations | read, write, search | operations/s |\n| ad.name_cache_lookups | lookups | lookups/s |\n| ad.name_cache_hits | hits | hits/s |\n| ad.atq_average_request_latency | time | seconds |\n| ad.atq_outstanding_requests | outstanding | requests |\n| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |\n| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |\n| ad.dra_replication_properties_updated | inbound, outbound | properties/s |\n| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |\n| ad.dra_replication_pending_syncs | pending | syncs |\n| ad.dra_replication_sync_requests | requests | requests/s |\n| ad.ds_threads | in_use | threads |\n| ad.ldap_last_bind_time | last_bind | seconds |\n| ad.binds | binds | binds/s |\n| ad.ldap_searches | searches | searches/s |\n| adfs.ad_login_connection_failures | connection | failures/s |\n| adfs.certificate_authentications | authentications | authentications/s |\n| adfs.db_artifact_failures | connection | failures/s |\n| adfs.db_artifact_query_time_seconds | query_time | seconds/s |\n| adfs.db_config_failures | connection | failures/s |\n| adfs.db_config_query_time_seconds | query_time | seconds/s |\n| adfs.device_authentications | authentications | authentications/s |\n| adfs.external_authentications | success, failure | authentications/s |\n| adfs.federated_authentications | authentications | authentications/s |\n| adfs.federation_metadata_requests | requests | requests/s |\n| adfs.oauth_authorization_requests | requests | requests/s |\n| adfs.oauth_client_authentications | success, failure | authentications/s |\n| adfs.oauth_client_credentials_requests | success, failure | requests/s |\n| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |\n| adfs.oauth_client_windows_authentications | success, failure | authentications/s |\n| adfs.oauth_logon_certificate_requests | success, failure | requests/s |\n| adfs.oauth_password_grant_requests | success, failure | requests/s |\n| adfs.oauth_token_requests_success | success | requests/s |\n| adfs.passive_requests | passive | requests/s |\n| adfs.passport_authentications | passport | authentications/s |\n| adfs.password_change_requests | success, failure | requests/s |\n| adfs.samlp_token_requests_success | success | requests/s |\n| adfs.sso_authentications | success, failure | authentications/s |\n| adfs.token_requests | requests | requests/s |\n| adfs.userpassword_authentications | success, failure | authentications/s |\n| adfs.windows_integrated_authentications | authentications | authentications/s |\n| adfs.wsfed_token_requests_success | success | requests/s |\n| adfs.wstrust_token_requests_success | success | requests/s |\n| exchange.activesync_ping_cmds_pending | pending | commands |\n| exchange.activesync_requests | received | requests/s |\n| exchange.activesync_sync_cmds | processed | commands/s |\n| exchange.autodiscover_requests | processed | requests/s |\n| exchange.avail_service_requests | serviced | requests/s |\n| exchange.owa_current_unique_users | logged-in | users |\n| exchange.owa_requests_total | handled | requests/s |\n| exchange.rpc_active_user_count | active | users |\n| exchange.rpc_avg_latency | latency | seconds |\n| exchange.rpc_connection_count | connections | connections |\n| exchange.rpc_operations | operations | operations/s |\n| exchange.rpc_requests | processed | requests |\n| exchange.rpc_user_count | users | users |\n| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_poison | low, high, none, normal | messages/s |\n| hyperv.vms_health | ok, critical | vms |\n| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |\n| hyperv.root_partition_attached_devices | attached | devices |\n| hyperv.root_partition_deposited_pages | deposited | pages |\n| hyperv.root_partition_skipped_interrupts | skipped | interrupts |\n| hyperv.root_partition_device_dma_errors | illegal_dma | requests |\n| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |\n| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |\n| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |\n| hyperv.root_partition_address_space | address_spaces | address spaces |\n| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |\n| hyperv.root_partition_virtual_tlb_pages | used | pages |\n\n### Per cpu core\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| core | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |\n| windows.cpu_core_interrupts | interrupts | interrupts/s |\n| windows.cpu_core_dpcs | dpcs | dpcs/s |\n| windows.cpu_core_cstate | c1, c2, c3 | percentage |\n\n### Per logical disk\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.logical_disk_utilization | free, used | bytes |\n| windows.logical_disk_bandwidth | read, write | bytes/s |\n| windows.logical_disk_operations | reads, writes | operations/s |\n| windows.logical_disk_latency | read, write | seconds |\n\n### Per network device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| nic | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.net_nic_bandwidth | received, sent | kilobits/s |\n| windows.net_nic_packets | received, sent | packets/s |\n| windows.net_nic_errors | inbound, outbound | errors/s |\n| windows.net_nic_discarded | inbound, outbound | discards/s |\n\n### Per thermalzone\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thermalzone | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.thermalzone_temperature | temperature | celsius |\n\n### Per service\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |\n| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |\n\n### Per website\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| website | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| iis.website_traffic | received, sent | bytes/s |\n| iis.website_requests_rate | requests | requests/s |\n| iis.website_active_connections_count | active | connections |\n| iis.website_users_count | anonymous, non_anonymous | users |\n| iis.website_connection_attempts_rate | connection | attempts/s |\n| iis.website_isapi_extension_requests_count | isapi | requests |\n| iis.website_isapi_extension_requests_rate | isapi | requests/s |\n| iis.website_ftp_file_transfer_rate | received, sent | files/s |\n| iis.website_logon_attempts_rate | logon | attempts/s |\n| iis.website_errors_rate | document_locked, document_not_found | errors/s |\n| iis.website_uptime | document_locked, document_not_found | seconds |\n\n### Per mssql instance\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.instance_accessmethods_page_splits | page | splits/s |\n| mssql.instance_cache_hit_ratio | hit_ratio | percentage |\n| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |\n| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |\n| mssql.instance_bufman_iops | read, written | iops |\n| mssql.instance_blocked_processes | blocked | processes |\n| mssql.instance_user_connection | user | connections |\n| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |\n| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |\n| mssql.instance_memmgr_pending_memory_grants | pending | processes |\n| mssql.instance_memmgr_server_memory | memory | bytes |\n| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |\n| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |\n| mssql.instance_sqlstats_batch_requests | batch | requests/s |\n| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |\n| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |\n| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |\n\n### Per database\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n| database | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.database_active_transactions | active | transactions |\n| mssql.database_backup_restore_operations | backup | operations/s |\n| mssql.database_data_files_size | size | bytes |\n| mssql.database_log_flushed | flushed | bytes/s |\n| mssql.database_log_flushes | log | flushes/s |\n| mssql.database_transactions | transactions | transactions/s |\n| mssql.database_write_transactions | write | transactions/s |\n\n### Per certificate template\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cert_template | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adcs.cert_template_requests | requests | requests/s |\n| adcs.cert_template_failed_requests | failed | requests/s |\n| adcs.cert_template_issued_requests | issued | requests/s |\n| adcs.cert_template_pending_requests | pending | requests/s |\n| adcs.cert_template_request_processing_time | processing_time | seconds |\n| adcs.cert_template_retrievals | retrievals | retrievals/s |\n| adcs.cert_template_retrieval_processing_time | processing_time | seconds |\n| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |\n| adcs.cert_template_request_policy_module_processing | processing_time | seconds |\n| adcs.cert_template_challenge_responses | challenge | responses/s |\n| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |\n| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |\n| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |\n\n### Per process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| process | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netframework.clrexception_thrown | exceptions | exceptions/s |\n| netframework.clrexception_filters | filters | filters/s |\n| netframework.clrexception_finallys | finallys | finallys/s |\n| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |\n| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |\n| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |\n| netframework.clrinterop_interop_stubs_created | created | stubs/s |\n| netframework.clrjit_methods | jit-compiled | methods/s |\n| netframework.clrjit_time | time | percentage |\n| netframework.clrjit_standard_failures | failures | failures/s |\n| netframework.clrjit_il_bytes | compiled_msil | bytes/s |\n| netframework.clrloading_loader_heap_size | committed | bytes |\n| netframework.clrloading_appdomains_loaded | loaded | domain/s |\n| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |\n| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |\n| netframework.clrloading_classes_loaded | loaded | classes/s |\n| netframework.clrloading_class_load_failures | class_load | failures/s |\n| netframework.clrlocksandthreads_queue_length | threads | threads/s |\n| netframework.clrlocksandthreads_current_logical_threads | logical | threads |\n| netframework.clrlocksandthreads_current_physical_threads | physical | threads |\n| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |\n| netframework.clrlocksandthreads_contentions | contentions | contentions/s |\n| netframework.clrmemory_allocated_bytes | allocated | bytes/s |\n| netframework.clrmemory_finalization_survivors | survived | objects |\n| netframework.clrmemory_heap_size | heap | bytes |\n| netframework.clrmemory_promoted | promoted | bytes |\n| netframework.clrmemory_number_gc_handles | used | handles |\n| netframework.clrmemory_collections | gc | gc/s |\n| netframework.clrmemory_induced_gc | gc | gc/s |\n| netframework.clrmemory_number_pinned_objects | pinned | objects |\n| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |\n| netframework.clrmemory_committed | committed | bytes |\n| netframework.clrmemory_reserved | reserved | bytes |\n| netframework.clrmemory_gc_time | time | percentage |\n| netframework.clrremoting_channels | registered | channels/s |\n| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |\n| netframework.clrremoting_context_bound_objects | allocated | objects/s |\n| netframework.clrremoting_context_proxies | objects | objects/s |\n| netframework.clrremoting_contexts | contexts | contexts |\n| netframework.clrremoting_remote_calls | rpc | calls/s |\n| netframework.clrsecurity_link_time_checks | linktime | checks/s |\n| netframework.clrsecurity_checks_time | time | percentage |\n| netframework.clrsecurity_stack_walk_depth | stack | depth |\n| netframework.clrsecurity_runtime_checks | runtime | checks/s |\n\n### Per exchange workload\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.workload_active_tasks | active | tasks |\n| exchange.workload_completed_tasks | completed | tasks/s |\n| exchange.workload_queued_tasks | queued | tasks/s |\n| exchange.workload_yielded_tasks | yielded | tasks/s |\n| exchange.workload_activity_status | active, paused | status |\n\n### Per ldap process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |\n| exchange.ldap_read_time | read | seconds |\n| exchange.ldap_search_time | search | seconds |\n| exchange.ldap_write_time | write | seconds |\n| exchange.ldap_timeout_errors | timeout | errors/s |\n\n### Per http proxy\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.http_proxy_avg_auth_latency | latency | seconds |\n| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |\n| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |\n| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |\n| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |\n| exchange.http_proxy_requests | processed | requests/s |\n\n### Per vm\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_name | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |\n| hyperv.vm_memory_physical | assigned_memory | MiB |\n| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |\n| hyperv.vm_memory_pressure_current | pressure | percentage |\n| hyperv.vm_vid_physical_pages_allocated | allocated | pages |\n| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |\n\n### Per vm device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_device_bytes | read, written | bytes/s |\n| hyperv.vm_device_operations | read, write | operations/s |\n| hyperv.vm_device_errors | errors | errors/s |\n\n### Per vm interface\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_interface | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_interface_bytes | received, sent | bytes/s |\n| hyperv.vm_interface_packets | received, sent | packets/s |\n| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |\n\n### Per vswitch\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vswitch | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vswitch_bytes | received, sent | bytes/s |\n| hyperv.vswitch_packets | received, sent | packets/s |\n| hyperv.vswitch_directed_packets | received, sent | packets/s |\n| hyperv.vswitch_broadcast_packets | received, sent | packets/s |\n| hyperv.vswitch_multicast_packets | received, sent | packets/s |\n| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_packets_flooded | flooded | packets/s |\n| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |\n| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |\n\n",integration_type:"collector",id:"go.d.plugin-windows-NET_Framework",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-windows",plugin_name:"go.d.plugin",module_name:"windows",monitored_instance:{name:"Windows",link:"https://www.microsoft.com/en-us/windows",categories:["data-collection.windows-systems"],icon_filename:"windows.svg"},keywords:["windows","microsoft"],most_popular:!0,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# Windows\n\nPlugin: go.d.plugin\nModule: windows\n\n## Overview\n\nThis collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).\n\n\nIt collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).\n\nUsing the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nData collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install Windows exporter\n\nTo install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/windows.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/windows.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| url | Server URL. | | yes |\n| timeout | HTTP request timeout. | 1 | no |\n| username | Username for basic HTTP authentication. | | no |\n| password | Password for basic HTTP authentication. | | no |\n| proxy_url | Proxy URL. | | no |\n| proxy_username | Username for proxy basic HTTP authentication. | | no |\n| proxy_password | Password for proxy basic HTTP authentication. | | no |\n| method | HTTP request method. | GET | no |\n| body | HTTP request body. | | no |\n| headers | HTTP request headers. | | no |\n| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n##### HTTP authentication\n\nBasic HTTP authentication.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: http://192.0.2.1:9182/metrics\n username: username\n password: password\n\n```\n{% /details %}\n##### HTTPS with self-signed certificate\n\nDo not validate server certificate chain and hostname.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n url: https://192.0.2.1:9182/metrics\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Virtual Node\n\nThe Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.\nYou can create a virtual node for all your Windows machines and control them as separate entities.\n\nTo make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:\n\n> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.\n\n```yaml\n# /etc/netdata/vnodes/vnodes.conf\n- hostname: win_server\n guid: \n```\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server\n vnode: win_server\n url: http://192.0.2.1:9182/metrics\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from multiple remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: win_server1\n url: http://192.0.2.1:9182/metrics\n\n - name: win_server2\n url: http://192.0.2.2:9182/metrics\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m windows\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |\n| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |\n| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |\n| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |\n| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |\n| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThe collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).\n\nSupported collectors:\n\n- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)\n- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)\n- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)\n- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)\n- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)\n- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)\n- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)\n- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)\n- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)\n- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)\n- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)\n- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)\n- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)\n- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)\n- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)\n- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)\n- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)\n- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)\n- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)\n- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)\n- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)\n- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)\n- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)\n- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)\n- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)\n\n\n### Per Active Directory instance\n\nThese metrics refer to the entire monitored host.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |\n| windows.memory_utilization | available, used | bytes |\n| windows.memory_page_faults | page_faults | events/s |\n| windows.memory_swap_utilization | available, used | bytes |\n| windows.memory_swap_operations | read, write | operations/s |\n| windows.memory_swap_pages | read, written | pages/s |\n| windows.memory_cached | cached | KiB |\n| windows.memory_cache_faults | cache_faults | events/s |\n| windows.memory_system_pool | paged, non-paged | bytes |\n| windows.tcp_conns_established | ipv4, ipv6 | connections |\n| windows.tcp_conns_active | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |\n| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |\n| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |\n| windows.tcp_segments_received | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |\n| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |\n| windows.os_processes | processes | number |\n| windows.os_users | users | users |\n| windows.os_visible_memory_usage | free, used | bytes |\n| windows.os_paging_files_usage | free, used | bytes |\n| windows.system_threads | threads | number |\n| windows.system_uptime | time | seconds |\n| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |\n| windows.processes_cpu_utilization | a dimension per process | percentage |\n| windows.processes_handles | a dimension per process | handles |\n| windows.processes_io_bytes | a dimension per process | bytes/s |\n| windows.processes_io_operations | a dimension per process | operations/s |\n| windows.processes_page_faults | a dimension per process | pgfaults/s |\n| windows.processes_page_file_bytes | a dimension per process | bytes |\n| windows.processes_pool_bytes | a dimension per process | bytes |\n| windows.processes_threads | a dimension per process | threads |\n| ad.database_operations | add, delete, modify, recycle | operations/s |\n| ad.directory_operations | read, write, search | operations/s |\n| ad.name_cache_lookups | lookups | lookups/s |\n| ad.name_cache_hits | hits | hits/s |\n| ad.atq_average_request_latency | time | seconds |\n| ad.atq_outstanding_requests | outstanding | requests |\n| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |\n| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |\n| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |\n| ad.dra_replication_properties_updated | inbound, outbound | properties/s |\n| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |\n| ad.dra_replication_pending_syncs | pending | syncs |\n| ad.dra_replication_sync_requests | requests | requests/s |\n| ad.ds_threads | in_use | threads |\n| ad.ldap_last_bind_time | last_bind | seconds |\n| ad.binds | binds | binds/s |\n| ad.ldap_searches | searches | searches/s |\n| adfs.ad_login_connection_failures | connection | failures/s |\n| adfs.certificate_authentications | authentications | authentications/s |\n| adfs.db_artifact_failures | connection | failures/s |\n| adfs.db_artifact_query_time_seconds | query_time | seconds/s |\n| adfs.db_config_failures | connection | failures/s |\n| adfs.db_config_query_time_seconds | query_time | seconds/s |\n| adfs.device_authentications | authentications | authentications/s |\n| adfs.external_authentications | success, failure | authentications/s |\n| adfs.federated_authentications | authentications | authentications/s |\n| adfs.federation_metadata_requests | requests | requests/s |\n| adfs.oauth_authorization_requests | requests | requests/s |\n| adfs.oauth_client_authentications | success, failure | authentications/s |\n| adfs.oauth_client_credentials_requests | success, failure | requests/s |\n| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |\n| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |\n| adfs.oauth_client_windows_authentications | success, failure | authentications/s |\n| adfs.oauth_logon_certificate_requests | success, failure | requests/s |\n| adfs.oauth_password_grant_requests | success, failure | requests/s |\n| adfs.oauth_token_requests_success | success | requests/s |\n| adfs.passive_requests | passive | requests/s |\n| adfs.passport_authentications | passport | authentications/s |\n| adfs.password_change_requests | success, failure | requests/s |\n| adfs.samlp_token_requests_success | success | requests/s |\n| adfs.sso_authentications | success, failure | authentications/s |\n| adfs.token_requests | requests | requests/s |\n| adfs.userpassword_authentications | success, failure | authentications/s |\n| adfs.windows_integrated_authentications | authentications | authentications/s |\n| adfs.wsfed_token_requests_success | success | requests/s |\n| adfs.wstrust_token_requests_success | success | requests/s |\n| exchange.activesync_ping_cmds_pending | pending | commands |\n| exchange.activesync_requests | received | requests/s |\n| exchange.activesync_sync_cmds | processed | commands/s |\n| exchange.autodiscover_requests | processed | requests/s |\n| exchange.avail_service_requests | serviced | requests/s |\n| exchange.owa_current_unique_users | logged-in | users |\n| exchange.owa_requests_total | handled | requests/s |\n| exchange.rpc_active_user_count | active | users |\n| exchange.rpc_avg_latency | latency | seconds |\n| exchange.rpc_connection_count | connections | connections |\n| exchange.rpc_operations | operations | operations/s |\n| exchange.rpc_requests | processed | requests |\n| exchange.rpc_user_count | users | users |\n| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |\n| exchange.transport_queues_poison | low, high, none, normal | messages/s |\n| hyperv.vms_health | ok, critical | vms |\n| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |\n| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |\n| hyperv.root_partition_attached_devices | attached | devices |\n| hyperv.root_partition_deposited_pages | deposited | pages |\n| hyperv.root_partition_skipped_interrupts | skipped | interrupts |\n| hyperv.root_partition_device_dma_errors | illegal_dma | requests |\n| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |\n| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |\n| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |\n| hyperv.root_partition_address_space | address_spaces | address spaces |\n| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |\n| hyperv.root_partition_virtual_tlb_pages | used | pages |\n\n### Per cpu core\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| core | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |\n| windows.cpu_core_interrupts | interrupts | interrupts/s |\n| windows.cpu_core_dpcs | dpcs | dpcs/s |\n| windows.cpu_core_cstate | c1, c2, c3 | percentage |\n\n### Per logical disk\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| disk | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.logical_disk_utilization | free, used | bytes |\n| windows.logical_disk_bandwidth | read, write | bytes/s |\n| windows.logical_disk_operations | reads, writes | operations/s |\n| windows.logical_disk_latency | read, write | seconds |\n\n### Per network device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| nic | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.net_nic_bandwidth | received, sent | kilobits/s |\n| windows.net_nic_packets | received, sent | packets/s |\n| windows.net_nic_errors | inbound, outbound | errors/s |\n| windows.net_nic_discarded | inbound, outbound | discards/s |\n\n### Per thermalzone\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| thermalzone | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.thermalzone_temperature | temperature | celsius |\n\n### Per service\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| service | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |\n| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |\n\n### Per website\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| website | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| iis.website_traffic | received, sent | bytes/s |\n| iis.website_requests_rate | requests | requests/s |\n| iis.website_active_connections_count | active | connections |\n| iis.website_users_count | anonymous, non_anonymous | users |\n| iis.website_connection_attempts_rate | connection | attempts/s |\n| iis.website_isapi_extension_requests_count | isapi | requests |\n| iis.website_isapi_extension_requests_rate | isapi | requests/s |\n| iis.website_ftp_file_transfer_rate | received, sent | files/s |\n| iis.website_logon_attempts_rate | logon | attempts/s |\n| iis.website_errors_rate | document_locked, document_not_found | errors/s |\n| iis.website_uptime | document_locked, document_not_found | seconds |\n\n### Per mssql instance\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.instance_accessmethods_page_splits | page | splits/s |\n| mssql.instance_cache_hit_ratio | hit_ratio | percentage |\n| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |\n| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |\n| mssql.instance_bufman_iops | read, written | iops |\n| mssql.instance_blocked_processes | blocked | processes |\n| mssql.instance_user_connection | user | connections |\n| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |\n| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |\n| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |\n| mssql.instance_memmgr_pending_memory_grants | pending | processes |\n| mssql.instance_memmgr_server_memory | memory | bytes |\n| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |\n| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |\n| mssql.instance_sqlstats_batch_requests | batch | requests/s |\n| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |\n| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |\n| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |\n\n### Per database\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| mssql_instance | TBD |\n| database | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mssql.database_active_transactions | active | transactions |\n| mssql.database_backup_restore_operations | backup | operations/s |\n| mssql.database_data_files_size | size | bytes |\n| mssql.database_log_flushed | flushed | bytes/s |\n| mssql.database_log_flushes | log | flushes/s |\n| mssql.database_transactions | transactions | transactions/s |\n| mssql.database_write_transactions | write | transactions/s |\n\n### Per certificate template\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cert_template | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| adcs.cert_template_requests | requests | requests/s |\n| adcs.cert_template_failed_requests | failed | requests/s |\n| adcs.cert_template_issued_requests | issued | requests/s |\n| adcs.cert_template_pending_requests | pending | requests/s |\n| adcs.cert_template_request_processing_time | processing_time | seconds |\n| adcs.cert_template_retrievals | retrievals | retrievals/s |\n| adcs.cert_template_retrieval_processing_time | processing_time | seconds |\n| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |\n| adcs.cert_template_request_policy_module_processing | processing_time | seconds |\n| adcs.cert_template_challenge_responses | challenge | responses/s |\n| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |\n| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |\n| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |\n\n### Per process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| process | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netframework.clrexception_thrown | exceptions | exceptions/s |\n| netframework.clrexception_filters | filters | filters/s |\n| netframework.clrexception_finallys | finallys | finallys/s |\n| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |\n| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |\n| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |\n| netframework.clrinterop_interop_stubs_created | created | stubs/s |\n| netframework.clrjit_methods | jit-compiled | methods/s |\n| netframework.clrjit_time | time | percentage |\n| netframework.clrjit_standard_failures | failures | failures/s |\n| netframework.clrjit_il_bytes | compiled_msil | bytes/s |\n| netframework.clrloading_loader_heap_size | committed | bytes |\n| netframework.clrloading_appdomains_loaded | loaded | domain/s |\n| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |\n| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |\n| netframework.clrloading_classes_loaded | loaded | classes/s |\n| netframework.clrloading_class_load_failures | class_load | failures/s |\n| netframework.clrlocksandthreads_queue_length | threads | threads/s |\n| netframework.clrlocksandthreads_current_logical_threads | logical | threads |\n| netframework.clrlocksandthreads_current_physical_threads | physical | threads |\n| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |\n| netframework.clrlocksandthreads_contentions | contentions | contentions/s |\n| netframework.clrmemory_allocated_bytes | allocated | bytes/s |\n| netframework.clrmemory_finalization_survivors | survived | objects |\n| netframework.clrmemory_heap_size | heap | bytes |\n| netframework.clrmemory_promoted | promoted | bytes |\n| netframework.clrmemory_number_gc_handles | used | handles |\n| netframework.clrmemory_collections | gc | gc/s |\n| netframework.clrmemory_induced_gc | gc | gc/s |\n| netframework.clrmemory_number_pinned_objects | pinned | objects |\n| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |\n| netframework.clrmemory_committed | committed | bytes |\n| netframework.clrmemory_reserved | reserved | bytes |\n| netframework.clrmemory_gc_time | time | percentage |\n| netframework.clrremoting_channels | registered | channels/s |\n| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |\n| netframework.clrremoting_context_bound_objects | allocated | objects/s |\n| netframework.clrremoting_context_proxies | objects | objects/s |\n| netframework.clrremoting_contexts | contexts | contexts |\n| netframework.clrremoting_remote_calls | rpc | calls/s |\n| netframework.clrsecurity_link_time_checks | linktime | checks/s |\n| netframework.clrsecurity_checks_time | time | percentage |\n| netframework.clrsecurity_stack_walk_depth | stack | depth |\n| netframework.clrsecurity_runtime_checks | runtime | checks/s |\n\n### Per exchange workload\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.workload_active_tasks | active | tasks |\n| exchange.workload_completed_tasks | completed | tasks/s |\n| exchange.workload_queued_tasks | queued | tasks/s |\n| exchange.workload_yielded_tasks | yielded | tasks/s |\n| exchange.workload_activity_status | active, paused | status |\n\n### Per ldap process\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |\n| exchange.ldap_read_time | read | seconds |\n| exchange.ldap_search_time | search | seconds |\n| exchange.ldap_write_time | write | seconds |\n| exchange.ldap_timeout_errors | timeout | errors/s |\n\n### Per http proxy\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| workload | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exchange.http_proxy_avg_auth_latency | latency | seconds |\n| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |\n| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |\n| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |\n| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |\n| exchange.http_proxy_requests | processed | requests/s |\n\n### Per vm\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_name | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |\n| hyperv.vm_memory_physical | assigned_memory | MiB |\n| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |\n| hyperv.vm_memory_pressure_current | pressure | percentage |\n| hyperv.vm_vid_physical_pages_allocated | allocated | pages |\n| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |\n\n### Per vm device\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_device_bytes | read, written | bytes/s |\n| hyperv.vm_device_operations | read, write | operations/s |\n| hyperv.vm_device_errors | errors | errors/s |\n\n### Per vm interface\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vm_interface | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vm_interface_bytes | received, sent | bytes/s |\n| hyperv.vm_interface_packets | received, sent | packets/s |\n| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |\n\n### Per vswitch\n\nTBD\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| vswitch | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| hyperv.vswitch_bytes | received, sent | bytes/s |\n| hyperv.vswitch_packets | received, sent | packets/s |\n| hyperv.vswitch_directed_packets | received, sent | packets/s |\n| hyperv.vswitch_broadcast_packets | received, sent | packets/s |\n| hyperv.vswitch_multicast_packets | received, sent | packets/s |\n| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |\n| hyperv.vswitch_packets_flooded | flooded | packets/s |\n| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |\n| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |\n\n",integration_type:"collector",id:"go.d.plugin-windows-Windows",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-wireguard",plugin_name:"go.d.plugin",module_name:"wireguard",monitored_instance:{name:"WireGuard",link:"https://www.wireguard.com/",categories:["data-collection.vpns"],icon_filename:"wireguard.svg"},keywords:["wireguard","vpn","security"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# WireGuard\n\nPlugin: go.d.plugin\nModule: wireguard\n\n## Overview\n\nThis collector monitors WireGuard VPN devices and peers traffic.\n\n\nIt connects to the local WireGuard instance using [wireguard-go client](https://github.com/WireGuard/wireguard-go).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThis collector requires the CAP_NET_ADMIN capability, but it is set automatically during installation, so no manual configuration is needed.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt automatically detects instances running on localhost.\n\n\n#### Limits\n\nDoesn't work if Netdata or WireGuard is installed in the container.\n\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/wireguard.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/wireguard.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `wireguard` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m wireguard\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per device\n\nThese metrics refer to the VPN network interface.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | VPN network interface |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| wireguard.device_network_io | receive, transmit | B/s |\n| wireguard.device_peers | peers | peers |\n\n### Per peer\n\nThese metrics refer to the VPN peer.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | VPN network interface |\n| public_key | Public key of a peer |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| wireguard.peer_network_io | receive, transmit | B/s |\n| wireguard.peer_latest_handshake_ago | time | seconds |\n\n",integration_type:"collector",id:"go.d.plugin-wireguard-WireGuard",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/wireguard/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-x509check",plugin_name:"go.d.plugin",module_name:"x509check",monitored_instance:{name:"X.509 certificate",link:"",categories:["data-collection.synthetic-checks"],icon_filename:"lock.svg"},keywords:["x509","certificate"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[]}}},overview:"# X.509 certificate\n\nPlugin: go.d.plugin\nModule: x509check\n\n## Overview\n\n\n\nThis collectors monitors x509 certificates expiration time and revocation status.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/x509check.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/x509check.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| source | Certificate source. Allowed schemes: https, tcp, tcp4, tcp6, udp, udp4, udp6, file, smtp. | | no |\n| days_until_expiration_warning | Number of days before the alarm status is warning. | 30 | no |\n| days_until_expiration_critical | Number of days before the alarm status is critical. | 15 | no |\n| check_revocation_status | Whether to check the revocation status of the certificate. | no | no |\n| timeout | SSL connection timeout. | 2 | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Website certificate\n\nWebsite certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: my_site_cert\n source: https://my_site.org:443\n\n```\n{% /details %}\n##### Local file certificate\n\nLocal file certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: my_file_cert\n source: file:///home/me/cert.pem\n\n```\n{% /details %}\n##### SMTP certificate\n\nSMTP certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: my_smtp_cert\n source: smtp://smtp.my_mail.org:587\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define more than one job, their names must be unique.\n\nCheck the expiration status of the multiple websites\' certificates.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: my_site_cert1\n source: https://my_site1.org:443\n\n - name: my_site_cert2\n source: https://my_site1.org:443\n\n - name: my_site_cert3\n source: https://my_site3.org:443\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `x509check` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m x509check\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ x509check_days_until_expiration ](https://github.com/netdata/netdata/blob/master/src/health/health.d/x509check.conf) | x509check.time_until_expiration | time until x509 certificate expires |\n| [ x509check_revocation_status ](https://github.com/netdata/netdata/blob/master/src/health/health.d/x509check.conf) | x509check.revocation_status | x509 certificate revocation status (0: revoked, 1: valid) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per source\n\nThese metrics refer to the configured source.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| source | Configured source. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| x509check.time_until_expiration | expiry | seconds |\n| x509check.revocation_status | revoked | boolean |\n\n",integration_type:"collector",id:"go.d.plugin-x509check-X.509_certificate",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/x509check/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-zfspool",plugin_name:"go.d.plugin",module_name:"zfspool",monitored_instance:{name:"ZFS Pools",link:"",icon_filename:"filesystem.svg",categories:["data-collection.storage-mount-points-and-filesystems"]},keywords:["zfs pools","pools","zfs","filesystem"],related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},most_popular:!1},overview:"# ZFS Pools\n\nPlugin: go.d.plugin\nModule: zfspool\n\n## Overview\n\nThis collector monitors the health and space usage of ZFS pools using the command line tool [zpool](https://openzfs.github.io/openzfs-docs/man/master/8/zpool-list.8.html).\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/zfspool.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/zfspool.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 10 | no |\n| binary_path | Path to the `zpool` binary. If an absolute path is provided, the collector will use it directly; otherwise, it will search for the binary in directories specified in the PATH environment variable. | /usr/bin/zpool | yes |\n| timeout | Timeout for executing the binary, specified in seconds. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Custom binary path\n\nThe executable is not in the directories specified in the PATH environment variable.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: zfspool\n binary_path: /usr/local/sbin/zpool\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `zfspool` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m zfspool\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ zfs_pool_space_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.pool_space_utilization | ZFS pool ${label:pool} is nearing capacity. Current space usage is above the threshold. |\n| [ zfs_pool_health_state_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.pool_health_state | ZFS pool ${label:pool} state is degraded |\n| [ zfs_pool_health_state_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.pool_health_state | ZFS pool ${label:pool} state is faulted or unavail |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per zfs pool\n\nThese metrics refer to the ZFS pool.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| pool | Zpool name |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| zfspool.pool_space_utilization | utilization | % |\n| zfspool.pool_space_usage | free, used | bytes |\n| zfspool.pool_fragmentation | fragmentation | % |\n| zfspool.pool_health_state | online, degraded, faulted, offline, unavail, removed, suspended | state |\n\n",integration_type:"collector",id:"go.d.plugin-zfspool-ZFS_Pools",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/zfspool/metadata.yaml",related_resources:""},{meta:{id:"collector-go.d.plugin-zookeeper",plugin_name:"go.d.plugin",module_name:"zookeeper",monitored_instance:{name:"ZooKeeper",link:"https://zookeeper.apache.org/",categories:["data-collection.service-discovery-registry"],icon_filename:"zookeeper.svg"},keywords:["zookeeper"],most_popular:!1,info_provided_to_referring_integrations:{description:""},related_resources:{integrations:{list:[{plugin_name:"apps.plugin",module_name:"apps"}]}}},overview:"# ZooKeeper\n\nPlugin: go.d.plugin\nModule: zookeeper\n\n## Overview\n\n\n\nIt connects to the Zookeeper instance via a TCP and executes the following commands:\n\n- [mntr](https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, it detects instances running on localhost by attempting to connect using known ZooKeeper TCP sockets:\n\n- 127.0.0.1:2181\n- 127.0.0.1:2182\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Whitelist `mntr` command\n\nAdd `mntr` to Zookeeper\'s [4lw.commands.whitelist](https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `go.d/zookeeper.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config go.d/zookeeper.conf\n```\n#### Options\n\nThe following options can be defined globally: update_every, autodetection_retry.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1 | no |\n| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |\n| address | Server address. The format is IP:PORT. | 127.0.0.1:2181 | yes |\n| timeout | Connection/read/write/ssl handshake timeout. | 1 | no |\n| use_tls | Whether to use TLS or not. | no | no |\n| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |\n| tls_ca | Certification authority that the client uses when verifying the server\'s certificates. | | no |\n| tls_cert | Client TLS certificate. | | no |\n| tls_key | Client TLS key. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nLocal server.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:2181\n\n```\n{% /details %}\n##### TLS with self-signed certificate\n\nZookeeper with TLS and self-signed certificate.\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:2181\n use_tls: yes\n tls_skip_verify: yes\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\njobs:\n - name: local\n address: 127.0.0.1:2181\n\n - name: remote\n address: 192.0.2.1:2181\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `zookeeper` collector, run the `go.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `go.d.plugin` to debug the collector:\n\n ```bash\n ./go.d.plugin -d -m zookeeper\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ZooKeeper instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| zookeeper.requests | outstanding | requests |\n| zookeeper.requests_latency | min, avg, max | ms |\n| zookeeper.connections | alive | connections |\n| zookeeper.packets | received, sent | pps |\n| zookeeper.file_descriptor | open | file descriptors |\n| zookeeper.nodes | znode, ephemerals | nodes |\n| zookeeper.watches | watches | watches |\n| zookeeper.approximate_data_size | size | KiB |\n| zookeeper.server_state | state | state |\n\n",integration_type:"collector",id:"go.d.plugin-zookeeper-ZooKeeper",edit_link:"https://github.com/netdata/netdata/blob/master/src/go/collectors/go.d.plugin/modules/zookeeper/metadata.yaml",related_resources:""},{meta:{plugin_name:"idlejitter.plugin",module_name:"idlejitter.plugin",monitored_instance:{name:"Idle OS Jitter",link:"",categories:["data-collection.synthetic-checks"],icon_filename:"syslog.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["latency","jitter"],most_popular:!1},overview:"# Idle OS Jitter\n\nPlugin: idlejitter.plugin\nModule: idlejitter.plugin\n\n## Overview\n\nMonitor delays in timing for user processes caused by scheduling limitations to optimize the system to run latency sensitive applications with minimal jitter, improving consistency and quality of service.\n\n\nA thread is spawned that requests to sleep for fixed amount of time. When the system wakes it up, it measures how many microseconds have passed. The difference between the requested and the actual duration of the sleep, is the idle jitter. This is done dozens of times per second to ensure we have a representative sample.\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration will run by default on all supported systems.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nThis integration only supports a single configuration option, and most users will not need to change it.\n\n\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| loop time in ms | Specifies the target time for the data collection thread to sleep, measured in miliseconds. | 20 | no |\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Idle OS Jitter instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.idlejitter | min, max, average | microseconds lost/s |\n\n",integration_type:"collector",id:"idlejitter.plugin-idlejitter.plugin-Idle_OS_Jitter",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/idlejitter.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"ioping.plugin",module_name:"ioping.plugin",monitored_instance:{name:"IOPing",link:"https://github.com/koct9i/ioping",categories:["data-collection.synthetic-checks"],icon_filename:"syslog.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# IOPing\n\nPlugin: ioping.plugin\nModule: ioping.plugin\n\n## Overview\n\nMonitor IOPing metrics for efficient disk I/O latency tracking. Keep track of read/write speeds, latency, and error rates for optimized disk operations.\n\nPlugin uses `ioping` command.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install ioping\n\nYou can install the command by passing the argument `install` to the plugin (`/usr/libexec/netdata/plugins.d/ioping.plugin install`).\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `ioping.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config ioping.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Data collection frequency. | 1s | no |\n| destination | The directory/file/device to ioping. | | yes |\n| request_size | The request size in bytes to ioping the destination (symbolic modifiers are supported) | 4k | no |\n| ioping_opts | Options passed to `ioping` commands. | -T 1000000 | no |\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\nThis example has the minimum configuration necessary to have the plugin running.\n\n{% details open=true summary="Config" %}\n```yaml\ndestination="/dev/sda"\n\n```\n{% /details %}\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ioping_disk_latency ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ioping.conf) | ioping.latency | average I/O latency over the last 10 seconds |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per disk\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ioping.latency | latency | microseconds |\n\n",integration_type:"collector",id:"ioping.plugin-ioping.plugin-IOPing",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/ioping.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"macos.plugin",module_name:"mach_smi",monitored_instance:{name:"macOS",link:"https://www.apple.com/macos",categories:["data-collection.macos-systems"],icon_filename:"macos.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["macos","apple","darwin"],most_popular:!1},overview:"# macOS\n\nPlugin: macos.plugin\nModule: mach_smi\n\n## Overview\n\nMonitor macOS metrics for efficient operating system performance.\n\nThe plugin uses three different methods to collect data:\n - The function `sysctlbyname` is called to collect network, swap, loadavg, and boot time.\n - The functtion `host_statistic` is called to collect CPU and Virtual memory data;\n - The function `IOServiceGetMatchingServices` to collect storage information.\n\n\nThis collector is only supported on the following platforms:\n\n- macOS\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nThere are three sections in the file which you can configure:\n\n- `[plugin:macos:sysctl]` - Enable or disable monitoring for network, swap, loadavg, and boot time.\n- `[plugin:macos:mach_smi]` - Enable or disable monitoring for CPU and Virtual memory.\n- `[plugin:macos:iokit]` - Enable or disable monitoring for storage device.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enable load average | Enable or disable monitoring of load average metrics (load1, load5, load15). | yes | no |\n| system swap | Enable or disable monitoring of system swap metrics (free, used). | yes | no |\n| bandwidth | Enable or disable monitoring of network bandwidth metrics (received, sent). | yes | no |\n| ipv4 TCP packets | Enable or disable monitoring of IPv4 TCP total packets metrics (received, sent). | yes | no |\n| ipv4 TCP errors | Enable or disable monitoring of IPv4 TCP packets metrics (Input Errors, Checksum, Retransmission segments). | yes | no |\n| ipv4 TCP handshake issues | Enable or disable monitoring of IPv4 TCP handshake metrics (Established Resets, Active Opens, Passive Opens, Attempt Fails). | yes | no |\n| ECN packets | Enable or disable monitoring of ECN statistics metrics (InCEPkts, InNoECTPkts). | auto | no |\n| TCP SYN cookies | Enable or disable monitoring of TCP SYN cookies metrics (received, sent, failed). | auto | no |\n| TCP out-of-order queue | Enable or disable monitoring of TCP out-of-order queue metrics (inqueue). | auto | no |\n| TCP connection aborts | Enable or disable monitoring of TCP connection aborts metrics (Bad Data, User closed, No memory, Timeout). | auto | no |\n| ipv4 UDP packets | Enable or disable monitoring of ipv4 UDP packets metrics (sent, received.). | yes | no |\n| ipv4 UDP errors | Enable or disable monitoring of ipv4 UDP errors metrics (Recieved Buffer error, Input Errors, No Ports, IN Checksum Errors, Ignore Multi). | yes | no |\n| ipv4 icmp packets | Enable or disable monitoring of IPv4 ICMP packets metrics (sent, received, in error, OUT error, IN Checksum error). | yes | no |\n| ipv4 icmp messages | Enable or disable monitoring of ipv4 ICMP messages metrics (I/O messages, I/O Errors, In Checksum). | yes | no |\n| ipv4 packets | Enable or disable monitoring of ipv4 packets metrics (received, sent, forwarded, delivered). | yes | no |\n| ipv4 fragments sent | Enable or disable monitoring of IPv4 fragments sent metrics (ok, fails, creates). | yes | no |\n| ipv4 fragments assembly | Enable or disable monitoring of IPv4 fragments assembly metrics (ok, failed, all). | yes | no |\n| ipv4 errors | Enable or disable monitoring of IPv4 errors metrics (I/O discard, I/O HDR errors, In Addr errors, In Unknown protos, OUT No Routes). | yes | no |\n| ipv6 packets | Enable or disable monitoring of IPv6 packets metrics (received, sent, forwarded, delivered). | auto | no |\n| ipv6 fragments sent | Enable or disable monitoring of IPv6 fragments sent metrics (ok, failed, all). | auto | no |\n| ipv6 fragments assembly | Enable or disable monitoring of IPv6 fragments assembly metrics (ok, failed, timeout, all). | auto | no |\n| ipv6 errors | Enable or disable monitoring of IPv6 errors metrics (I/O Discards, In Hdr Errors, In Addr Errors, In Truncaedd Packets, I/O No Routes). | auto | no |\n| icmp | Enable or disable monitoring of ICMP metrics (sent, received). | auto | no |\n| icmp redirects | Enable or disable monitoring of ICMP redirects metrics (received, sent). | auto | no |\n| icmp errors | Enable or disable monitoring of ICMP metrics (I/O Errors, In Checksums, In Destination Unreachable, In Packet too big, In Time Exceeds, In Parm Problem, Out Dest Unreachable, Out Timee Exceeds, Out Parm Problems.). | auto | no |\n| icmp echos | Enable or disable monitoring of ICMP echos metrics (I/O Echos, I/O Echo Reply). | auto | no |\n| icmp router | Enable or disable monitoring of ICMP router metrics (I/O Solicits, I/O Advertisements). | auto | no |\n| icmp neighbor | Enable or disable monitoring of ICMP neighbor metrics (I/O Solicits, I/O Advertisements). | auto | no |\n| icmp types | Enable or disable monitoring of ICMP types metrics (I/O Type1, I/O Type128, I/O Type129, Out Type133, Out Type135, In Type136, Out Type145). | auto | no |\n| space usage for all disks | Enable or disable monitoring of space usage for all disks metrics (available, used, reserved for root). | yes | no |\n| inodes usage for all disks | Enable or disable monitoring of inodes usage for all disks metrics (available, used, reserved for root). | yes | no |\n| bandwidth | Enable or disable monitoring of bandwidth metrics (received, sent). | yes | no |\n| system uptime | Enable or disable monitoring of system uptime metrics (uptime). | yes | no |\n| cpu utilization | Enable or disable monitoring of CPU utilization metrics (user, nice, system, idel). | yes | no |\n| system ram | Enable or disable monitoring of system RAM metrics (Active, Wired, throttled, compressor, inactive, purgeable, speculative, free). | yes | no |\n| swap i/o | Enable or disable monitoring of SWAP I/O metrics (I/O Swap). | yes | no |\n| memory page faults | Enable or disable monitoring of memory page faults metrics (memory, cow, I/O page, compress, decompress, zero fill, reactivate, purge). | yes | no |\n| disk i/o | Enable or disable monitoring of disk I/O metrics (In, Out). | yes | no |\n\n{% /details %}\n#### Examples\n\n##### Disable swap monitoring.\n\nA basic example that discards swap monitoring\n\n{% details open=true summary="Config" %}\n```yaml\n[plugin:macos:sysctl]\n system swap = no\n[plugin:macos:mach_smi]\n swap i/o = no\n\n```\n{% /details %}\n##### Disable complete Machine SMI section.\n\nA basic example that discards swap monitoring\n\n{% details open=true summary="Config" %}\n```yaml\n[plugin:macos:mach_smi]\n cpu utilization = no\n system ram = no\n swap i/o = no\n memory page faults = no\n disk i/o = no\n\n```\n{% /details %}\n',troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ interface_speed ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | network interface ${label:device} current speed |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per macOS instance\n\nThese metrics refer to hardware and network monitoring.\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.cpu | user, nice, system, idle | percentage |\n| system.ram | active, wired, throttled, compressor, inactive, purgeable, speculative, free | MiB |\n| mem.swapio | io, out | KiB/s |\n| mem.pgfaults | memory, cow, pagein, pageout, compress, decompress, zero_fill, reactivate, purge | faults/s |\n| system.load | load1, load5, load15 | load |\n| mem.swap | free, used | MiB |\n| system.ipv4 | received, sent | kilobits/s |\n| ipv4.tcppackets | received, sent | packets/s |\n| ipv4.tcperrors | InErrs, InCsumErrors, RetransSegs | packets/s |\n| ipv4.tcphandshake | EstabResets, ActiveOpens, PassiveOpens, AttemptFails | events/s |\n| ipv4.tcpconnaborts | baddata, userclosed, nomemory, timeout | connections/s |\n| ipv4.tcpofo | inqueue | packets/s |\n| ipv4.tcpsyncookies | received, sent, failed | packets/s |\n| ipv4.ecnpkts | CEP, NoECTP | packets/s |\n| ipv4.udppackets | received, sent | packets/s |\n| ipv4.udperrors | RcvbufErrors, InErrors, NoPorts, InCsumErrors, IgnoredMulti | events/s |\n| ipv4.icmp | received, sent | packets/s |\n| ipv4.icmp_errors | InErrors, OutErrors, InCsumErrors | packets/s |\n| ipv4.icmpmsg | InEchoReps, OutEchoReps, InEchos, OutEchos | packets/s |\n| ipv4.packets | received, sent, forwarded, delivered | packets/s |\n| ipv4.fragsout | ok, failed, created | packets/s |\n| ipv4.fragsin | ok, failed, all | packets/s |\n| ipv4.errors | InDiscards, OutDiscards, InHdrErrors, OutNoRoutes, InAddrErrors, InUnknownProtos | packets/s |\n| ipv6.packets | received, sent, forwarded, delivers | packets/s |\n| ipv6.fragsout | ok, failed, all | packets/s |\n| ipv6.fragsin | ok, failed, timeout, all | packets/s |\n| ipv6.errors | InDiscards, OutDiscards, InHdrErrors, InAddrErrors, InTruncatedPkts, InNoRoutes, OutNoRoutes | packets/s |\n| ipv6.icmp | received, sent | messages/s |\n| ipv6.icmpredir | received, sent | redirects/s |\n| ipv6.icmperrors | InErrors, OutErrors, InCsumErrors, InDestUnreachs, InPktTooBigs, InTimeExcds, InParmProblems, OutDestUnreachs, OutTimeExcds, OutParmProblems | errors/s |\n| ipv6.icmpechos | InEchos, OutEchos, InEchoReplies, OutEchoReplies | messages/s |\n| ipv6.icmprouter | InSolicits, OutSolicits, InAdvertisements, OutAdvertisements | messages/s |\n| ipv6.icmpneighbor | InSolicits, OutSolicits, InAdvertisements, OutAdvertisements | messages/s |\n| ipv6.icmptypes | InType1, InType128, InType129, InType136, OutType1, OutType128, OutType129, OutType133, OutType135, OutType143 | messages/s |\n| system.uptime | uptime | seconds |\n| system.io | in, out | KiB/s |\n\n### Per disk\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.io | read, writes | KiB/s |\n| disk.ops | read, writes | operations/s |\n| disk.util | utilization | % of time working |\n| disk.iotime | reads, writes | milliseconds/s |\n| disk.await | reads, writes | milliseconds/operation |\n| disk.avgsz | reads, writes | KiB/operation |\n| disk.svctm | svctm | milliseconds/operation |\n\n### Per mount point\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.space | avail, used, reserved_for_root | GiB |\n| disk.inodes | avail, used, reserved_for_root | inodes |\n\n### Per network device\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| net.net | received, sent | kilobits/s |\n| net.packets | received, sent, multicast_received, multicast_sent | packets/s |\n| net.errors | inbound, outbound | errors/s |\n| net.drops | inbound | drops/s |\n| net.events | frames, collisions, carrier | events/s |\n\n",integration_type:"collector",id:"macos.plugin-mach_smi-macOS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/macos.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"nfacct.plugin",module_name:"nfacct.plugin",monitored_instance:{name:"Netfilter",link:"https://www.netfilter.org/",categories:["data-collection.linux-systems.firewall-metrics"],icon_filename:"netfilter.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# Netfilter\n\nPlugin: nfacct.plugin\nModule: nfacct.plugin\n\n## Overview\n\nMonitor Netfilter metrics for optimal packet filtering and manipulation. Keep tabs on packet counts, dropped packets, and error rates to secure network operations.\n\nNetdata uses libmnl (https://www.netfilter.org/projects/libmnl/index.html) to collect information.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThis plugin needs setuid.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis plugin uses socket to connect with netfilter to collect data\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install required packages\n\nInstall `libmnl-dev` and `libnetfilter-acct-dev` using the package manager of your system.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:nfacct]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| command options | Additinal parameters for collector | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Netfilter instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netfilter.netlink_new | new, ignore, invalid | connections/s |\n| netfilter.netlink_changes | insert, delete, delete_list | changes/s |\n| netfilter.netlink_search | searched, search_restart, found | searches/s |\n| netfilter.netlink_errors | icmp_error, insert_failed, drop, early_drop | events/s |\n| netfilter.netlink_expect | created, deleted, new | expectations/s |\n| netfilter.nfacct_packets | a dimension per nfacct object | packets/s |\n| netfilter.nfacct_bytes | a dimension per nfacct object | kilobytes/s |\n\n",integration_type:"collector",id:"nfacct.plugin-nfacct.plugin-Netfilter",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/nfacct.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"perf.plugin",module_name:"perf.plugin",monitored_instance:{name:"CPU performance",link:"https://kernel.org/",categories:["data-collection.linux-systems"],icon_filename:"bolt.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["linux","cpu performance","cpu cache","perf.plugin"],most_popular:!1},overview:"# CPU performance\n\nPlugin: perf.plugin\nModule: perf.plugin\n\n## Overview\n\nThis collector monitors CPU performance metrics about cycles, instructions, migrations, cache operations and more.\n\nIt uses syscall (2) to open a file descriptor to monitor the perf events.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nIt needs setuid to use the necessary syscall to collect perf events. Netdata sets the permission during installation time.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Install perf plugin\n\nIf you are [using our official native DEB/RPM packages](/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure the `netdata-plugin-perf` package is installed.\n\n\n#### Enable the perf plugin\n\nThe plugin is disabled by default because the number of PMUs is usually quite limited and it is not desired to allow Netdata to struggle silently for PMUs, interfering with other performance monitoring software.\n\nTo enable it, use `edit-config` from the Netdata [config directory](/docs/netdata-agent/configuration/README.md), which is typically at `/etc/netdata`, to edit the `netdata.conf` file.\n\n```bash\ncd /etc/netdata # Replace this path with your Netdata config directory, if different\nsudo ./edit-config netdata.conf\n```\n\nChange the value of the `perf` setting to `yes` in the `[plugins]` section. Save the file and restart the Netdata Agent with `sudo systemctl restart netdata`, or the [appropriate method](/packaging/installer/README.md#maintaining-a-netdata-agent-installation) for your system.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:perf]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nYou can get the available options running:\n\n```bash\n/usr/libexec/netdata/plugins.d/perf.plugin --help\n````\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| command options | Command options that specify charts shown by the plugin. `cycles`, `instructions`, `branch`, `cache`, `bus`, `stalled`, `migrations`, `alignment`, `emulation`, `L1D`, `L1D-prefetch`, `L1I`, `LL`, `DTLB`, `ITLB`, `PBU`. | 1 | yes |\n\n{% /details %}\n#### Examples\n\n##### All metrics\n\nMonitor all metrics available.\n\n```yaml\n[plugin:perf]\n command options = all\n\n```\n##### CPU cycles\n\nMonitor CPU cycles.\n\n{% details open=true summary="Config" %}\n```yaml\n[plugin:perf]\n command options = cycles\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\n\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per CPU performance instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| perf.cpu_cycles | cpu, ref_cpu | cycles/s |\n| perf.instructions | instructions | instructions/s |\n| perf.instructions_per_cycle | ipc | instructions/cycle |\n| perf.branch_instructions | instructions, misses | instructions/s |\n| perf.cache | references, misses | operations/s |\n| perf.bus_cycles | bus | cycles/s |\n| perf.stalled_cycles | frontend, backend | cycles/s |\n| perf.migrations | migrations | migrations |\n| perf.alignment_faults | faults | faults |\n| perf.emulation_faults | faults | faults |\n| perf.l1d_cache | read_access, read_misses, write_access, write_misses | events/s |\n| perf.l1d_cache_prefetch | prefetches | prefetches/s |\n| perf.l1i_cache | read_access, read_misses | events/s |\n| perf.ll_cache | read_access, read_misses, write_access, write_misses | events/s |\n| perf.dtlb_cache | read_access, read_misses, write_access, write_misses | events/s |\n| perf.itlb_cache | read_access, read_misses | events/s |\n| perf.pbu_cache | read_access | events/s |\n\n",integration_type:"collector",id:"perf.plugin-perf.plugin-CPU_performance",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/perf.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/diskstats",monitored_instance:{name:"Disk Statistics",link:"",categories:["data-collection.linux-systems.disk-metrics"],icon_filename:"hard-drive.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["disk","disks","io","bcache","block devices"],most_popular:!1},overview:"# Disk Statistics\n\nPlugin: proc.plugin\nModule: /proc/diskstats\n\n## Overview\n\nDetailed statistics for each of your system's disk devices and partitions.\nThe data is reported by the kernel and can be used to monitor disk activity on a Linux system.\n\nGet valuable insight into how your disks are performing and where potential bottlenecks might be.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 10min_disk_backlog ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.backlog | average backlog size of the ${label:device} disk over the last 10 minutes |\n| [ 10min_disk_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.util | average percentage of time ${label:device} disk was busy over the last 10 minutes |\n| [ bcache_cache_dirty ](https://github.com/netdata/netdata/blob/master/src/health/health.d/bcache.conf) | disk.bcache_cache_alloc | percentage of cache space used for dirty data and metadata (this usually means your SSD cache is too small) |\n| [ bcache_cache_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/bcache.conf) | disk.bcache_cache_read_races | number of times data was read from the cache, the bucket was reused and invalidated in the last 10 minutes (when this occurs the data is reread from the backing device) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Disk Statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.io | in, out | KiB/s |\n\n### Per disk\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | TBD |\n| mount_point | TBD |\n| device_type | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| disk.io | reads, writes | KiB/s |\n| disk_ext.io | discards | KiB/s |\n| disk.ops | reads, writes | operations/s |\n| disk_ext.ops | discards, flushes | operations/s |\n| disk.qops | operations | operations |\n| disk.backlog | backlog | milliseconds |\n| disk.busy | busy | milliseconds |\n| disk.util | utilization | % of time working |\n| disk.mops | reads, writes | merged operations/s |\n| disk_ext.mops | discards | merged operations/s |\n| disk.iotime | reads, writes | milliseconds/s |\n| disk_ext.iotime | discards, flushes | milliseconds/s |\n| disk.await | reads, writes | milliseconds/operation |\n| disk_ext.await | discards, flushes | milliseconds/operation |\n| disk.avgsz | reads, writes | KiB/operation |\n| disk_ext.avgsz | discards | KiB/operation |\n| disk.svctm | svctm | milliseconds/operation |\n| disk.bcache_cache_alloc | ununsed, dirty, clean, metadata, undefined | percentage |\n| disk.bcache_hit_ratio | 5min, 1hour, 1day, ever | percentage |\n| disk.bcache_rates | congested, writeback | KiB/s |\n| disk.bcache_size | dirty | MiB |\n| disk.bcache_usage | avail | percentage |\n| disk.bcache_cache_read_races | races, errors | operations/s |\n| disk.bcache | hits, misses, collisions, readaheads | operations/s |\n| disk.bcache_bypass | hits, misses | operations/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/diskstats-Disk_Statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/interrupts",monitored_instance:{name:"Interrupts",link:"",categories:["data-collection.linux-systems.cpu-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["interrupts"],most_popular:!1},overview:"# Interrupts\n\nPlugin: proc.plugin\nModule: /proc/interrupts\n\n## Overview\n\nMonitors `/proc/interrupts`, a file organized by CPU and then by the type of interrupt.\nThe numbers reported are the counts of the interrupts that have occurred of each type.\n\nAn interrupt is a signal to the processor emitted by hardware or software indicating an event that needs\nimmediate attention. The processor then interrupts its current activities and executes the interrupt handler\nto deal with the event. This is part of the way a computer multitasks and handles concurrent processing.\n\nThe types of interrupts include:\n\n- **I/O interrupts**: These are caused by I/O devices like the keyboard, mouse, printer, etc. For example, when\n you type something on the keyboard, an interrupt is triggered so the processor can handle the new input.\n\n- **Timer interrupts**: These are generated at regular intervals by the system's timer circuit. It's primarily\n used to switch the CPU among different tasks.\n\n- **Software interrupts**: These are generated by a program requiring disk I/O operations, or other system resources.\n\n- **Hardware interrupts**: These are caused by hardware conditions such as power failure, overheating, etc.\n\nMonitoring `/proc/interrupts` can be used for:\n\n- **Performance tuning**: If an interrupt is happening very frequently, it could be a sign that a device is not\n configured correctly, or there is a software bug causing unnecessary interrupts. This could lead to system\n performance degradation.\n\n- **System troubleshooting**: If you're seeing a lot of unexpected interrupts, it could be a sign of a hardware problem.\n\n- **Understanding system behavior**: More generally, keeping an eye on what interrupts are occurring can help you\n understand what your system is doing. It can provide insights into the system's interaction with hardware,\n drivers, and other parts of the kernel.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Interrupts instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.interrupts | a dimension per device | interrupts/s |\n\n### Per cpu core\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cpu | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.interrupts | a dimension per device | interrupts/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/interrupts-Interrupts",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/loadavg",monitored_instance:{name:"System Load Average",link:"",categories:["data-collection.linux-systems.system-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["load","load average"],most_popular:!1},overview:"# System Load Average\n\nPlugin: proc.plugin\nModule: /proc/loadavg\n\n## Overview\n\nThe `/proc/loadavg` file provides information about the system load average.\n\nThe load average is a measure of the amount of computational work that a system performs. It is a\nrepresentation of the average system load over a period of time.\n\nThis file contains three numbers representing the system load averages for the last 1, 5, and 15 minutes,\nrespectively. It also includes the currently running processes and the total number of processes.\n\nMonitoring the load average can be used for:\n\n- **System performance**: If the load average is too high, it may indicate that your system is overloaded.\n On a system with a single CPU, if the load average is 1, it means the single CPU is fully utilized. If the\n load averages are consistently higher than the number of CPUs/cores, it may indicate that your system is\n overloaded and tasks are waiting for CPU time.\n\n- **Troubleshooting**: If the load average is unexpectedly high, it can be a sign of a problem. This could be\n due to a runaway process, a software bug, or a hardware issue.\n\n- **Capacity planning**: By monitoring the load average over time, you can understand the trends in your\n system's workload. This can help with capacity planning and scaling decisions.\n\nRemember that load average not only considers CPU usage, but also includes processes waiting for disk I/O.\nTherefore, high load averages could be due to I/O contention as well as CPU contention.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ load_cpu_number ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | number of active CPU cores in the system |\n| [ load_average_15 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system fifteen-minute load average |\n| [ load_average_5 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system five-minute load average |\n| [ load_average_1 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system one-minute load average |\n| [ active_processes ](https://github.com/netdata/netdata/blob/master/src/health/health.d/processes.conf) | system.active_processes | system process IDs (PID) space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per System Load Average instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.load | load1, load5, load15 | load |\n| system.active_processes | active | processes |\n\n",integration_type:"collector",id:"proc.plugin-/proc/loadavg-System_Load_Average",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/mdstat",monitored_instance:{name:"MD RAID",link:"",categories:["data-collection.linux-systems.disk-metrics"],icon_filename:"hard-drive.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["raid","mdadm","mdstat","raid"],most_popular:!1},overview:"# MD RAID\n\nPlugin: proc.plugin\nModule: /proc/mdstat\n\n## Overview\n\nThis integration monitors the status of MD RAID devices.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ mdstat_last_collected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.disks | number of seconds since the last successful data collection |\n| [ mdstat_disks ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.disks | number of devices in the down state for the ${label:device} ${label:raid_level} array. Any number > 0 indicates that the array is degraded. |\n| [ mdstat_mismatch_cnt ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.mismatch_cnt | number of unsynchronized blocks for the ${label:device} ${label:raid_level} array |\n| [ mdstat_nonredundant_last_collected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.nonredundant | number of seconds since the last successful data collection |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per MD RAID instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| md.health | a dimension per md array | failed disks |\n\n### Per md array\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | TBD |\n| raid_level | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| md.disks | inuse, down | disks |\n| md.mismatch_cnt | count | unsynchronized blocks |\n| md.status | check, resync, recovery, reshape | percent |\n| md.expected_time_until_operation_finish | finish_in | seconds |\n| md.operation_speed | speed | KiB/s |\n| md.nonredundant | available | boolean |\n\n",integration_type:"collector",id:"proc.plugin-/proc/mdstat-MD_RAID",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/meminfo",monitored_instance:{name:"Memory Usage",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["memory","ram","available","committed"],most_popular:!1},overview:"# Memory Usage\n\nPlugin: proc.plugin\nModule: /proc/meminfo\n\n## Overview\n\n`/proc/meminfo` provides detailed information about the system's current memory usage. It includes information\nabout different types of memory, RAM, Swap, ZSwap, HugePages, Transparent HugePages (THP), Kernel memory,\nSLAB memory, memory mappings, and more.\n\nMonitoring /proc/meminfo can be useful for:\n\n- **Performance Tuning**: Understanding your system's memory usage can help you make decisions about system\n tuning and optimization. For example, if your system is frequently low on free memory, it might benefit\n from more RAM.\n\n- **Troubleshooting**: If your system is experiencing problems, `/proc/meminfo` can provide clues about\n whether memory usage is a factor. For example, if your system is slow and cached swap is high, it could\n mean that your system is swapping out a lot of memory to disk, which can degrade performance.\n\n- **Capacity Planning**: By monitoring memory usage over time, you can understand trends and make informed\n decisions about future capacity needs.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | system.ram | system memory utilization |\n| [ ram_available ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | mem.available | percentage of estimated amount of RAM available for userspace processes, without causing swapping |\n| [ used_swap ](https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf) | mem.swap | swap memory utilization |\n| [ 1hour_memory_hw_corrupted ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.hwcorrupt | amount of memory corrupted due to a hardware failure |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Memory Usage instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ram | free, used, cached, buffers | MiB |\n| mem.available | avail | MiB |\n| mem.swap | free, used | MiB |\n| mem.swap_cached | cached | MiB |\n| mem.zswap | in-ram, on-disk | MiB |\n| mem.hwcorrupt | HardwareCorrupted | MiB |\n| mem.commited | Commited_AS | MiB |\n| mem.writeback | Dirty, Writeback, FuseWriteback, NfsWriteback, Bounce | MiB |\n| mem.kernel | Slab, KernelStack, PageTables, VmallocUsed, Percpu | MiB |\n| mem.slab | reclaimable, unreclaimable | MiB |\n| mem.hugepages | free, used, surplus, reserved | MiB |\n| mem.thp | anonymous, shmem | MiB |\n| mem.thp_details | ShmemPmdMapped, FileHugePages, FilePmdMapped | MiB |\n| mem.reclaiming | Active, Inactive, Active(anon), Inactive(anon), Active(file), Inactive(file), Unevictable, Mlocked | MiB |\n| mem.high_low | high_used, low_used, high_free, low_free | MiB |\n| mem.cma | used, free | MiB |\n| mem.directmaps | 4k, 2m, 4m, 1g | MiB |\n\n",integration_type:"collector",id:"proc.plugin-/proc/meminfo-Memory_Usage",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/dev",monitored_instance:{name:"Network interfaces",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["network interfaces"],most_popular:!1},overview:"# Network interfaces\n\nPlugin: proc.plugin\nModule: /proc/net/dev\n\n## Overview\n\nMonitor network interface metrics about bandwidth, state, errors and more.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ interface_speed ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | network interface ${label:device} current speed |\n| [ 1m_received_traffic_overflow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | average inbound utilization for the network interface ${label:device} over the last minute |\n| [ 1m_sent_traffic_overflow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | average outbound utilization for the network interface ${label:device} over the last minute |\n| [ inbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes |\n| [ outbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes |\n| [ wifi_inbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes |\n| [ wifi_outbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes |\n| [ 1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.packets | average number of packets received by the network interface ${label:device} over the last minute |\n| [ 10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |\n| [ 10min_fifo_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.fifo | number of FIFO errors for the network interface ${label:device} in the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Network interfaces instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.net | received, sent | kilobits/s |\n\n### Per network device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| interface_type | TBD |\n| device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| net.net | received, sent | kilobits/s |\n| net.speed | speed | kilobits/s |\n| net.duplex | full, half, unknown | state |\n| net.operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |\n| net.carrier | up, down | state |\n| net.mtu | mtu | octets |\n| net.packets | received, sent, multicast | packets/s |\n| net.errors | inbound, outbound | errors/s |\n| net.drops | inbound, outbound | drops/s |\n| net.fifo | receive, transmit | errors |\n| net.compressed | received, sent | packets/s |\n| net.events | frames, collisions, carrier | events/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/dev-Network_interfaces",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/ip_vs_stats",monitored_instance:{name:"IP Virtual Server",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ip virtual server"],most_popular:!1},overview:"# IP Virtual Server\n\nPlugin: proc.plugin\nModule: /proc/net/ip_vs_stats\n\n## Overview\n\nThis integration monitors IP Virtual Server statistics\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per IP Virtual Server instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipvs.sockets | connections | connections/s |\n| ipvs.packets | received, sent | packets/s |\n| ipvs.net | received, sent | kilobits/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/ip_vs_stats-IP_Virtual_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/netstat",monitored_instance:{name:"Network statistics",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ip","udp","udplite","icmp","netstat","snmp"],most_popular:!1},overview:"# Network statistics\n\nPlugin: proc.plugin\nModule: /proc/net/netstat\n\n## Overview\n\nThis integration provides metrics from the `netstat`, `snmp` and `snmp6` modules.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 1m_tcp_syn_queue_drops ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_syn_queue | average number of SYN requests was dropped due to the full TCP SYN queue over the last minute (SYN cookies were not enabled) |\n| [ 1m_tcp_syn_queue_cookies ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_syn_queue | average number of sent SYN cookies due to the full TCP SYN queue over the last minute |\n| [ 1m_tcp_accept_queue_overflows ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_accept_queue | average number of overflows in the TCP accept queue over the last minute |\n| [ 1m_tcp_accept_queue_drops ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_accept_queue | average number of dropped packets in the TCP accept queue over the last minute |\n| [ tcp_connections ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_conn.conf) | ip.tcpsock | TCP connections utilization |\n| [ 1m_ip_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of sent TCP RESETS over the last minute |\n| [ 10s_ip_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of sent TCP RESETS over the last 10 seconds. This can indicate a port scan, or that a service running on this host has crashed. Netdata will not send a clear notification for this alarm. |\n| [ 1m_ip_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of received TCP RESETS over the last minute |\n| [ 10s_ip_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of received TCP RESETS over the last 10 seconds. This can be an indication that a service this host needs has crashed. Netdata will not send a clear notification for this alarm. |\n| [ 1m_ipv4_udp_receive_buffer_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP receive buffer errors over the last minute |\n| [ 1m_ipv4_udp_send_buffer_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP send buffer errors over the last minute |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Network statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ip | received, sent | kilobits/s |\n| ip.tcpmemorypressures | pressures | events/s |\n| ip.tcpconnaborts | baddata, userclosed, nomemory, timeout, linger, failed | connections/s |\n| ip.tcpreorders | timestamp, sack, fack, reno | packets/s |\n| ip.tcpofo | inqueue, dropped, merged, pruned | packets/s |\n| ip.tcpsyncookies | received, sent, failed | packets/s |\n| ip.tcp_syn_queue | drops, cookies | packets/s |\n| ip.tcp_accept_queue | overflows, drops | packets/s |\n| ip.tcpsock | connections | active connections |\n| ip.tcppackets | received, sent | packets/s |\n| ip.tcperrors | InErrs, InCsumErrors, RetransSegs | packets/s |\n| ip.tcpopens | active, passive | connections/s |\n| ip.tcphandshake | EstabResets, OutRsts, AttemptFails, SynRetrans | events/s |\n| ipv4.packets | received, sent, forwarded, delivered | packets/s |\n| ipv4.errors | InDiscards, OutDiscards, InNoRoutes, OutNoRoutes, InHdrErrors, InAddrErrors, InTruncatedPkts, InCsumErrors | packets/s |\n| ipv4.bcast | received, sent | kilobits/s |\n| ipv4.bcastpkts | received, sent | packets/s |\n| ipv4.mcast | received, sent | kilobits/s |\n| ipv4.mcastpkts | received, sent | packets/s |\n| ipv4.icmp | received, sent | packets/s |\n| ipv4.icmpmsg | InEchoReps, OutEchoReps, InDestUnreachs, OutDestUnreachs, InRedirects, OutRedirects, InEchos, OutEchos, InRouterAdvert, OutRouterAdvert, InRouterSelect, OutRouterSelect, InTimeExcds, OutTimeExcds, InParmProbs, OutParmProbs, InTimestamps, OutTimestamps, InTimestampReps, OutTimestampReps | packets/s |\n| ipv4.icmp_errors | InErrors, OutErrors, InCsumErrors | packets/s |\n| ipv4.udppackets | received, sent | packets/s |\n| ipv4.udperrors | RcvbufErrors, SndbufErrors, InErrors, NoPorts, InCsumErrors, IgnoredMulti | events/s |\n| ipv4.udplite | received, sent | packets/s |\n| ipv4.udplite_errors | RcvbufErrors, SndbufErrors, InErrors, NoPorts, InCsumErrors, IgnoredMulti | packets/s |\n| ipv4.ecnpkts | CEP, NoECTP, ECTP0, ECTP1 | packets/s |\n| ipv4.fragsin | ok, failed, all | packets/s |\n| ipv4.fragsout | ok, failed, created | packets/s |\n| system.ipv6 | received, sent | kilobits/s |\n| ipv6.packets | received, sent, forwarded, delivers | packets/s |\n| ipv6.errors | InDiscards, OutDiscards, InHdrErrors, InAddrErrors, InUnknownProtos, InTooBigErrors, InTruncatedPkts, InNoRoutes, OutNoRoutes | packets/s |\n| ipv6.bcast | received, sent | kilobits/s |\n| ipv6.mcast | received, sent | kilobits/s |\n| ipv6.mcastpkts | received, sent | packets/s |\n| ipv6.udppackets | received, sent | packets/s |\n| ipv6.udperrors | RcvbufErrors, SndbufErrors, InErrors, NoPorts, InCsumErrors, IgnoredMulti | events/s |\n| ipv6.udplitepackets | received, sent | packets/s |\n| ipv6.udpliteerrors | RcvbufErrors, SndbufErrors, InErrors, NoPorts, InCsumErrors | events/s |\n| ipv6.icmp | received, sent | messages/s |\n| ipv6.icmpredir | received, sent | redirects/s |\n| ipv6.icmperrors | InErrors, OutErrors, InCsumErrors, InDestUnreachs, InPktTooBigs, InTimeExcds, InParmProblems, OutDestUnreachs, OutPktTooBigs, OutTimeExcds, OutParmProblems | errors/s |\n| ipv6.icmpechos | InEchos, OutEchos, InEchoReplies, OutEchoReplies | messages/s |\n| ipv6.groupmemb | InQueries, OutQueries, InResponses, OutResponses, InReductions, OutReductions | messages/s |\n| ipv6.icmprouter | InSolicits, OutSolicits, InAdvertisements, OutAdvertisements | messages/s |\n| ipv6.icmpneighbor | InSolicits, OutSolicits, InAdvertisements, OutAdvertisements | messages/s |\n| ipv6.icmpmldv2 | received, sent | reports/s |\n| ipv6.icmptypes | InType1, InType128, InType129, InType136, OutType1, OutType128, OutType129, OutType133, OutType135, OutType143 | messages/s |\n| ipv6.ect | InNoECTPkts, InECT1Pkts, InECT0Pkts, InCEPkts | packets/s |\n| ipv6.fragsin | ok, failed, timeout, all | packets/s |\n| ipv6.fragsout | ok, failed, all | packets/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/netstat-Network_statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/rpc/nfs",monitored_instance:{name:"NFS Client",link:"",categories:["data-collection.linux-systems.filesystem-metrics.nfs"],icon_filename:"nfs.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["nfs client","filesystem"],most_popular:!1},overview:"# NFS Client\n\nPlugin: proc.plugin\nModule: /proc/net/rpc/nfs\n\n## Overview\n\nThis integration provides statistics from the Linux kernel's NFS Client.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per NFS Client instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nfs.net | udp, tcp | operations/s |\n| nfs.rpc | calls, retransmits, auth_refresh | calls/s |\n| nfs.proc2 | a dimension per proc2 call | calls/s |\n| nfs.proc3 | a dimension per proc3 call | calls/s |\n| nfs.proc4 | a dimension per proc4 call | calls/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/rpc/nfs-NFS_Client",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/rpc/nfsd",monitored_instance:{name:"NFS Server",link:"",categories:["data-collection.linux-systems.filesystem-metrics.nfs"],icon_filename:"nfs.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["nfs server","filesystem"],most_popular:!1},overview:"# NFS Server\n\nPlugin: proc.plugin\nModule: /proc/net/rpc/nfsd\n\n## Overview\n\nThis integration provides statistics from the Linux kernel's NFS Server.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per NFS Server instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nfsd.readcache | hits, misses, nocache | reads/s |\n| nfsd.filehandles | stale | handles/s |\n| nfsd.io | read, write | kilobytes/s |\n| nfsd.threads | threads | threads |\n| nfsd.net | udp, tcp | packets/s |\n| nfsd.rpc | calls, bad_format, bad_auth | calls/s |\n| nfsd.proc2 | a dimension per proc2 call | calls/s |\n| nfsd.proc3 | a dimension per proc3 call | calls/s |\n| nfsd.proc4 | a dimension per proc4 call | calls/s |\n| nfsd.proc4ops | a dimension per proc4 operation | operations/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/rpc/nfsd-NFS_Server",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/sctp/snmp",monitored_instance:{name:"SCTP Statistics",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["sctp","stream control transmission protocol"],most_popular:!1},overview:"# SCTP Statistics\n\nPlugin: proc.plugin\nModule: /proc/net/sctp/snmp\n\n## Overview\n\nThis integration provides statistics about the Stream Control Transmission Protocol (SCTP).\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per SCTP Statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| sctp.established | established | associations |\n| sctp.transitions | active, passive, aborted, shutdown | transitions/s |\n| sctp.packets | received, sent | packets/s |\n| sctp.packet_errors | invalid, checksum | packets/s |\n| sctp.fragmentation | reassembled, fragmented | packets/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/sctp/snmp-SCTP_Statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/sockstat",monitored_instance:{name:"Socket statistics",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["sockets"],most_popular:!1},overview:"# Socket statistics\n\nPlugin: proc.plugin\nModule: /proc/net/sockstat\n\n## Overview\n\nThis integration provides socket statistics.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ tcp_orphans ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_orphans.conf) | ipv4.sockstat_tcp_sockets | orphan IPv4 TCP sockets utilization |\n| [ tcp_memory ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_mem.conf) | ipv4.sockstat_tcp_mem | TCP memory utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Socket statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ip.sockstat_sockets | used | sockets |\n| ipv4.sockstat_tcp_sockets | alloc, orphan, inuse, timewait | sockets |\n| ipv4.sockstat_tcp_mem | mem | KiB |\n| ipv4.sockstat_udp_sockets | inuse | sockets |\n| ipv4.sockstat_udp_mem | mem | sockets |\n| ipv4.sockstat_udplite_sockets | inuse | sockets |\n| ipv4.sockstat_raw_sockets | inuse | sockets |\n| ipv4.sockstat_frag_sockets | inuse | fragments |\n| ipv4.sockstat_frag_mem | mem | KiB |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/sockstat-Socket_statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/sockstat6",monitored_instance:{name:"IPv6 Socket Statistics",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ipv6 sockets"],most_popular:!1},overview:"# IPv6 Socket Statistics\n\nPlugin: proc.plugin\nModule: /proc/net/sockstat6\n\n## Overview\n\nThis integration provides IPv6 socket statistics.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per IPv6 Socket Statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipv6.sockstat6_tcp_sockets | inuse | sockets |\n| ipv6.sockstat6_udp_sockets | inuse | sockets |\n| ipv6.sockstat6_udplite_sockets | inuse | sockets |\n| ipv6.sockstat6_raw_sockets | inuse | sockets |\n| ipv6.sockstat6_frag_sockets | inuse | fragments |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/sockstat6-IPv6_Socket_Statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/softnet_stat",monitored_instance:{name:"Softnet Statistics",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["softnet"],most_popular:!1},overview:"# Softnet Statistics\n\nPlugin: proc.plugin\nModule: /proc/net/softnet_stat\n\n## Overview\n\n`/proc/net/softnet_stat` provides statistics that relate to the handling of network packets by softirq.\n\nIt provides information about:\n\n- Total number of processed packets (`processed`).\n- Times ksoftirq ran out of quota (`dropped`).\n- Times net_rx_action was rescheduled.\n- Number of times processed all lists before quota.\n- Number of times did not process all lists due to quota.\n- Number of times net_rx_action was rescheduled for GRO (Generic Receive Offload) cells.\n- Number of times GRO cells were processed.\n\nMonitoring the /proc/net/softnet_stat file can be useful for:\n\n- **Network performance monitoring**: By tracking the total number of processed packets and how many packets\n were dropped, you can gain insights into your system's network performance.\n\n- **Troubleshooting**: If you're experiencing network-related issues, this collector can provide valuable clues.\n For instance, a high number of dropped packets may indicate a network problem.\n\n- **Capacity planning**: If your system is consistently processing near its maximum capacity of network\n packets, it might be time to consider upgrading your network infrastructure.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 1min_netdev_backlog_exceeded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of dropped packets in the last minute due to exceeded net.core.netdev_max_backlog |\n| [ 1min_netdev_budget_ran_outs ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of times ksoftirq ran out of sysctl net.core.netdev_budget or net.core.netdev_budget_usecs with work remaining over the last minute (this can be a cause for dropped packets) |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Softnet Statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.softnet_stat | processed, dropped, squeezed, received_rps, flow_limit_count | events/s |\n\n### Per cpu core\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.softnet_stat | processed, dropped, squeezed, received_rps, flow_limit_count | events/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/softnet_stat-Softnet_Statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/stat/nf_conntrack",monitored_instance:{name:"Conntrack",link:"",categories:["data-collection.linux-systems.firewall-metrics"],icon_filename:"firewall.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["connection tracking mechanism","netfilter","conntrack"],most_popular:!1},overview:"# Conntrack\n\nPlugin: proc.plugin\nModule: /proc/net/stat/nf_conntrack\n\n## Overview\n\nThis integration monitors the connection tracking mechanism of Netfilter in the Linux Kernel.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ netfilter_conntrack_full ](https://github.com/netdata/netdata/blob/master/src/health/health.d/netfilter.conf) | netfilter.conntrack_sockets | netfilter connection tracker table size utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Conntrack instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netfilter.conntrack_sockets | connections | active connections |\n| netfilter.conntrack_new | new, ignore, invalid | connections/s |\n| netfilter.conntrack_changes | inserted, deleted, delete_list | changes/s |\n| netfilter.conntrack_expect | created, deleted, new | expectations/s |\n| netfilter.conntrack_search | searched, restarted, found | searches/s |\n| netfilter.conntrack_errors | icmp_error, error_failed, drop, early_drop | events/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/stat/nf_conntrack-Conntrack",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/stat/synproxy",monitored_instance:{name:"Synproxy",link:"",categories:["data-collection.linux-systems.firewall-metrics"],icon_filename:"firewall.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["synproxy"],most_popular:!1},overview:"# Synproxy\n\nPlugin: proc.plugin\nModule: /proc/net/stat/synproxy\n\n## Overview\n\nThis integration provides statistics about the Synproxy netfilter module.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Synproxy instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| netfilter.synproxy_syn_received | received | packets/s |\n| netfilter.synproxy_conn_reopened | reopened | connections/s |\n| netfilter.synproxy_cookies | valid, invalid, retransmits | cookies/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/stat/synproxy-Synproxy",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/net/wireless",monitored_instance:{name:"Wireless network interfaces",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["wireless devices"],most_popular:!1},overview:"# Wireless network interfaces\n\nPlugin: proc.plugin\nModule: /proc/net/wireless\n\n## Overview\n\nMonitor wireless devices with metrics about status, link quality, signal level, noise level and more.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per wireless device\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| wireless.status | status | status |\n| wireless.link_quality | link_quality | value |\n| wireless.signal_level | signal_level | dBm |\n| wireless.noise_level | noise_level | dBm |\n| wireless.discarded_packets | nwid, crypt, frag, retry, misc | packets/s |\n| wireless.missed_beacons | missed_beacons | frames/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/net/wireless-Wireless_network_interfaces",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/pagetypeinfo",monitored_instance:{name:"Page types",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["memory page types"],most_popular:!1},overview:"# Page types\n\nPlugin: proc.plugin\nModule: /proc/pagetypeinfo\n\n## Overview\n\nThis integration provides metrics about the system's memory page types\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Page types instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.pagetype_global | a dimension per pagesize | B |\n\n### Per node, zone, type\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| node_id | TBD |\n| node_zone | TBD |\n| node_type | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.pagetype | a dimension per pagesize | B |\n\n",integration_type:"collector",id:"proc.plugin-/proc/pagetypeinfo-Page_types",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/pressure",monitored_instance:{name:"Pressure Stall Information",link:"",categories:["data-collection.linux-systems.pressure-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["pressure"],most_popular:!1},overview:"# Pressure Stall Information\n\nPlugin: proc.plugin\nModule: /proc/pressure\n\n## Overview\n\nIntroduced in Linux kernel 4.20, `/proc/pressure` provides information about system pressure stall information\n(PSI). PSI is a feature that allows the system to track the amount of time the system is stalled due to\nresource contention, such as CPU, memory, or I/O.\n\nThe collectors monitored 3 separate files for CPU, memory, and I/O:\n\n- **cpu**: Tracks the amount of time tasks are stalled due to CPU contention.\n- **memory**: Tracks the amount of time tasks are stalled due to memory contention.\n- **io**: Tracks the amount of time tasks are stalled due to I/O contention.\n- **irq**: Tracks the amount of time tasks are stalled due to IRQ contention.\n\nEach of them provides metrics for stall time over the last 10 seconds, 1 minute, 5 minutes, and 15 minutes.\n\nMonitoring the /proc/pressure files can provide important insights into system performance and capacity planning:\n\n- **Identifying resource contention**: If these metrics are consistently high, it indicates that tasks are\n frequently being stalled due to lack of resources, which can significantly degrade system performance.\n\n- **Troubleshooting performance issues**: If a system is experiencing performance issues, these metrics can\n help identify whether resource contention is the cause.\n\n- **Capacity planning**: By monitoring these metrics over time, you can understand trends in resource\n utilization and make informed decisions about when to add more resources to your system.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Pressure Stall Information instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.cpu_some_pressure | some10, some60, some300 | percentage |\n| system.cpu_some_pressure_stall_time | time | ms |\n| system.cpu_full_pressure | some10, some60, some300 | percentage |\n| system.cpu_full_pressure_stall_time | time | ms |\n| system.memory_some_pressure | some10, some60, some300 | percentage |\n| system.memory_some_pressure_stall_time | time | ms |\n| system.memory_full_pressure | some10, some60, some300 | percentage |\n| system.memory_full_pressure_stall_time | time | ms |\n| system.io_some_pressure | some10, some60, some300 | percentage |\n| system.io_some_pressure_stall_time | time | ms |\n| system.io_full_pressure | some10, some60, some300 | percentage |\n| system.io_full_pressure_stall_time | time | ms |\n\n",integration_type:"collector",id:"proc.plugin-/proc/pressure-Pressure_Stall_Information",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/softirqs",monitored_instance:{name:"SoftIRQ statistics",link:"",categories:["data-collection.linux-systems.cpu-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["softirqs","interrupts"],most_popular:!1},overview:"# SoftIRQ statistics\n\nPlugin: proc.plugin\nModule: /proc/softirqs\n\n## Overview\n\nIn the Linux kernel, handling of hardware interrupts is split into two halves: the top half and the bottom half.\nThe top half is the routine that responds immediately to an interrupt, while the bottom half is deferred to be processed later.\n\nSoftirqs are a mechanism in the Linux kernel used to handle the bottom halves of interrupts, which can be\ndeferred and processed later in a context where it's safe to enable interrupts.\n\nThe actual work of handling the interrupt is offloaded to a softirq and executed later when the system\ndecides it's a good time to process them. This helps to keep the system responsive by not blocking the top\nhalf for too long, which could lead to missed interrupts.\n\nMonitoring `/proc/softirqs` is useful for:\n\n- **Performance tuning**: A high rate of softirqs could indicate a performance issue. For instance, a high\n rate of network softirqs (`NET_RX` and `NET_TX`) could indicate a network performance issue.\n\n- **Troubleshooting**: If a system is behaving unexpectedly, checking the softirqs could provide clues about\n what is going on. For example, a sudden increase in block device softirqs (BLOCK) might indicate a problem\n with a disk.\n\n- **Understanding system behavior**: Knowing what types of softirqs are happening can help you understand what\n your system is doing, particularly in terms of how it's interacting with hardware and how it's handling\n interrupts.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per SoftIRQ statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.softirqs | a dimension per softirq | softirqs/s |\n\n### Per cpu core\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cpu | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.softirqs | a dimension per softirq | softirqs/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/softirqs-SoftIRQ_statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/spl/kstat/zfs",monitored_instance:{name:"ZFS Pools",link:"",categories:["data-collection.linux-systems.filesystem-metrics.zfs"],icon_filename:"filesystem.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["zfs pools","pools","zfs","filesystem"],most_popular:!1},overview:"# ZFS Pools\n\nPlugin: proc.plugin\nModule: /proc/spl/kstat/zfs\n\n## Overview\n\nThis integration provides metrics about the state of ZFS pools.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ zfs_pool_state_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.state | ZFS pool ${label:pool} state is degraded |\n| [ zfs_pool_state_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.state | ZFS pool ${label:pool} state is faulted or unavail |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per zfs pool\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| pool | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| zfspool.state | online, degraded, faulted, offline, removed, unavail, suspended | boolean |\n\n",integration_type:"collector",id:"proc.plugin-/proc/spl/kstat/zfs-ZFS_Pools",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/spl/kstat/zfs/arcstats",monitored_instance:{name:"ZFS Adaptive Replacement Cache",link:"",categories:["data-collection.linux-systems.filesystem-metrics.zfs"],icon_filename:"filesystem.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["zfs arc","arc","zfs","filesystem"],most_popular:!1},overview:"# ZFS Adaptive Replacement Cache\n\nPlugin: proc.plugin\nModule: /proc/spl/kstat/zfs/arcstats\n\n## Overview\n\nThis integration monitors ZFS Adadptive Replacement Cache (ARC) statistics.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ zfs_memory_throttle ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfs.memory_ops | number of times ZFS had to limit the ARC growth in the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per ZFS Adaptive Replacement Cache instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| zfs.arc_size | arcsz, target, min, max | MiB |\n| zfs.l2_size | actual, size | MiB |\n| zfs.reads | arc, demand, prefetch, metadata, l2 | reads/s |\n| zfs.bytes | read, write | KiB/s |\n| zfs.hits | hits, misses | percentage |\n| zfs.hits_rate | hits, misses | events/s |\n| zfs.dhits | hits, misses | percentage |\n| zfs.dhits_rate | hits, misses | events/s |\n| zfs.phits | hits, misses | percentage |\n| zfs.phits_rate | hits, misses | events/s |\n| zfs.mhits | hits, misses | percentage |\n| zfs.mhits_rate | hits, misses | events/s |\n| zfs.l2hits | hits, misses | percentage |\n| zfs.l2hits_rate | hits, misses | events/s |\n| zfs.list_hits | mfu, mfu_ghost, mru, mru_ghost | hits/s |\n| zfs.arc_size_breakdown | recent, frequent | percentage |\n| zfs.memory_ops | direct, throttled, indirect | operations/s |\n| zfs.important_ops | evict_skip, deleted, mutex_miss, hash_collisions | operations/s |\n| zfs.actual_hits | hits, misses | percentage |\n| zfs.actual_hits_rate | hits, misses | events/s |\n| zfs.demand_data_hits | hits, misses | percentage |\n| zfs.demand_data_hits_rate | hits, misses | events/s |\n| zfs.prefetch_data_hits | hits, misses | percentage |\n| zfs.prefetch_data_hits_rate | hits, misses | events/s |\n| zfs.hash_elements | current, max | elements |\n| zfs.hash_chains | current, max | chains |\n\n",integration_type:"collector",id:"proc.plugin-/proc/spl/kstat/zfs/arcstats-ZFS_Adaptive_Replacement_Cache",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/stat",monitored_instance:{name:"System statistics",link:"",categories:["data-collection.linux-systems.system-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["cpu utilization","process counts"],most_popular:!1},overview:"# System statistics\n\nPlugin: proc.plugin\nModule: /proc/stat\n\n## Overview\n\nCPU utilization, states and frequencies and key Linux system performance metrics.\n\nThe `/proc/stat` file provides various types of system statistics:\n\n- The overall system CPU usage statistics\n- Per CPU core statistics\n- The total context switching of the system\n- The total number of processes running\n- The total CPU interrupts\n- The total CPU softirqs\n\nThe collector also reads:\n\n- `/proc/schedstat` for statistics about the process scheduler in the Linux kernel.\n- `/sys/devices/system/cpu/[X]/thermal_throttle/core_throttle_count` to get the count of thermal throttling events for a specific CPU core on Linux systems.\n- `/sys/devices/system/cpu/[X]/thermal_throttle/package_throttle_count` to get the count of thermal throttling events for a specific CPU package on a Linux system.\n- `/sys/devices/system/cpu/[X]/cpufreq/scaling_cur_freq` to get the current operating frequency of a specific CPU core.\n- `/sys/devices/system/cpu/[X]/cpufreq/stats/time_in_state` to get the amount of time the CPU has spent in each of its available frequency states.\n- `/sys/devices/system/cpu/[X]/cpuidle/state[X]/name` to get the names of the idle states for each CPU core in a Linux system.\n- `/sys/devices/system/cpu/[X]/cpuidle/state[X]/time` to get the total time each specific CPU core has spent in each idle state since the system was started.\n\n\n\n\nThis collector is only supported on the following platforms:\n\n- linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe collector auto-detects all metrics. No configuration is needed.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe collector disables cpu frequency and idle state monitoring when there are more than 128 CPU cores available.\n\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `plugin:proc:/proc/stat` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU utilization over the last 10 minutes (excluding iowait, nice and steal) |\n| [ 10min_cpu_iowait ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU iowait time over the last 10 minutes |\n| [ 20min_steal_cpu ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU steal time over the last 20 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per System statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.cpu | guest_nice, guest, steal, softirq, irq, user, system, nice, iowait, idle | percentage |\n| system.intr | interrupts | interrupts/s |\n| system.ctxt | switches | context switches/s |\n| system.forks | started | processes/s |\n| system.processes | running, blocked | processes |\n| cpu.core_throttling | a dimension per cpu core | events/s |\n| cpu.package_throttling | a dimension per package | events/s |\n| cpu.cpufreq | a dimension per cpu core | MHz |\n\n### Per cpu core\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| cpu | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| cpu.cpu | guest_nice, guest, steal, softirq, irq, user, system, nice, iowait, idle | percentage |\n| cpuidle.cpu_cstate_residency_time | a dimension per c-state | percentage |\n\n",integration_type:"collector",id:"proc.plugin-/proc/stat-System_statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/sys/kernel/random/entropy_avail",monitored_instance:{name:"Entropy",link:"",categories:["data-collection.linux-systems.system-metrics"],icon_filename:"syslog.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["entropy"],most_popular:!1},overview:"# Entropy\n\nPlugin: proc.plugin\nModule: /proc/sys/kernel/random/entropy_avail\n\n## Overview\n\nEntropy, a measure of the randomness or unpredictability of data.\n\nIn the context of cryptography, entropy is used to generate random numbers or keys that are essential for\nsecure communication and encryption. Without a good source of entropy, cryptographic protocols can become\nvulnerable to attacks that exploit the predictability of the generated keys.\n\nIn most operating systems, entropy is generated by collecting random events from various sources, such as\nhardware interrupts, mouse movements, keyboard presses, and disk activity. These events are fed into a pool\nof entropy, which is then used to generate random numbers when needed.\n\nThe `/dev/random` device in Linux is one such source of entropy, and it provides an interface for programs\nto access the pool of entropy. When a program requests random numbers, it reads from the `/dev/random` device,\nwhich blocks until enough entropy is available to generate the requested numbers. This ensures that the\ngenerated numbers are truly random and not predictable. \n\nHowever, if the pool of entropy gets depleted, the `/dev/random` device may block indefinitely, causing\nprograms that rely on random numbers to slow down or even freeze. This is especially problematic for\ncryptographic protocols that require a continuous stream of random numbers, such as SSL/TLS and SSH.\n\nTo avoid this issue, some systems use a hardware random number generator (RNG) to generate high-quality\nentropy. A hardware RNG generates random numbers by measuring physical phenomena, such as thermal noise or\nradioactive decay. These sources of randomness are considered to be more reliable and unpredictable than\nsoftware-based sources.\n\nOne such hardware RNG is the Trusted Platform Module (TPM), which is a dedicated hardware chip that is used\nfor cryptographic operations and secure boot. The TPM contains a built-in hardware RNG that generates\nhigh-quality entropy, which can be used to seed the pool of entropy in the operating system.\n\nAlternatively, software-based solutions such as `Haveged` can be used to generate additional entropy by\nexploiting sources of randomness in the system, such as CPU utilization and network traffic. These solutions\ncan help to mitigate the risk of entropy depletion, but they may not be as reliable as hardware-based solutions.\n\n\n\n\nThis collector is only supported on the following platforms:\n\n- linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ lowest_entropy ](https://github.com/netdata/netdata/blob/master/src/health/health.d/entropy.conf) | system.entropy | minimum number of bits of entropy available for the kernel\u2019s random number generator |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Entropy instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.entropy | entropy | entropy |\n\n",integration_type:"collector",id:"proc.plugin-/proc/sys/kernel/random/entropy_avail-Entropy",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/uptime",monitored_instance:{name:"System Uptime",link:"",categories:["data-collection.linux-systems.system-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["uptime"],most_popular:!1},overview:"# System Uptime\n\nPlugin: proc.plugin\nModule: /proc/uptime\n\n## Overview\n\nThe amount of time the system has been up (running).\n\nUptime is a critical aspect of overall system performance:\n\n- **Availability**: Uptime monitoring can show whether a server is consistently available or experiences frequent downtimes.\n- **Performance Monitoring**: While server uptime alone doesn't provide detailed performance data, analyzing the duration and frequency of downtimes can help identify patterns or trends.\n- **Proactive problem detection**: If server uptime monitoring reveals unexpected downtimes or a decreasing uptime trend, it can serve as an early warning sign of potential problems.\n- **Root cause analysis**: When investigating server downtime, the uptime metric alone may not provide enough information to pinpoint the exact cause.\n- **Load balancing**: Uptime data can indirectly indicate load balancing issues if certain servers have significantly lower uptimes than others.\n- **Optimize maintenance efforts**: Servers with consistently low uptimes or frequent downtimes may require more attention.\n- **Compliance requirements**: Server uptime data can be used to demonstrate compliance with regulatory requirements or SLAs that mandate a minimum level of server availability.\n\n\n\n\nThis collector is only supported on the following platforms:\n\n- linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per System Uptime instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.uptime | uptime | seconds |\n\n",integration_type:"collector",id:"proc.plugin-/proc/uptime-System_Uptime",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/proc/vmstat",monitored_instance:{name:"Memory Statistics",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["swap","page faults","oom","numa"],most_popular:!1},overview:"# Memory Statistics\n\nPlugin: proc.plugin\nModule: /proc/vmstat\n\n## Overview\n\nLinux Virtual memory subsystem.\n\nInformation about memory management, indicating how effectively the kernel allocates and frees\nmemory resources in response to system demands.\n\nMonitors page faults, which occur when a process requests a portion of its memory that isn't\nimmediately available. Monitoring these events can help diagnose inefficiencies in memory management and\nprovide insights into application behavior.\n\nTracks swapping activity \u2014 a vital aspect of memory management where the kernel moves data from RAM to\nswap space, and vice versa, based on memory demand and usage. It also monitors the utilization of zswap,\na compressed cache for swap pages, and provides insights into its usage and performance implications.\n\nIn the context of virtualized environments, it tracks the ballooning mechanism which is used to balance\nmemory resources between host and guest systems.\n\nFor systems using NUMA architecture, it provides insights into the local and remote memory accesses, which\ncan impact the performance based on the memory access times.\n\nThe collector also watches for 'Out of Memory' kills, a drastic measure taken by the system when it runs out\nof memory resources.\n\n\n\n\nThis collector is only supported on the following platforms:\n\n- linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ 30min_ram_swapped_out ](https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf) | mem.swapio | percentage of the system RAM swapped in the last 30 minutes |\n| [ oom_kill ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | mem.oom_kill | number of out of memory kills in the last 30 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Memory Statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.swapio | in, out | KiB/s |\n| system.pgpgio | in, out | KiB/s |\n| system.pgfaults | minor, major | faults/s |\n| mem.balloon | inflate, deflate, migrate | KiB/s |\n| mem.zswapio | in, out | KiB/s |\n| mem.ksm_cow | swapin, write | KiB/s |\n| mem.thp_faults | alloc, fallback, fallback_charge | events/s |\n| mem.thp_file | alloc, fallback, mapped, fallback_charge | events/s |\n| mem.thp_zero | alloc, failed | events/s |\n| mem.thp_collapse | alloc, failed | events/s |\n| mem.thp_split | split, failed, split_pmd, split_deferred | events/s |\n| mem.thp_swapout | swapout, fallback | events/s |\n| mem.thp_compact | success, fail, stall | events/s |\n| mem.oom_kill | kills | kills/s |\n| mem.numa | local, foreign, interleave, other, pte_updates, huge_pte_updates, hint_faults, hint_faults_local, pages_migrated | events/s |\n\n",integration_type:"collector",id:"proc.plugin-/proc/vmstat-Memory_Statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/block/zram",monitored_instance:{name:"ZRAM",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["zram"],most_popular:!1},overview:"# ZRAM\n\nPlugin: proc.plugin\nModule: /sys/block/zram\n\n## Overview\n\nzRAM, or compressed RAM, is a block device that uses a portion of your system's RAM as a block device.\nThe data written to this block device is compressed and stored in memory.\n\nThe collectors provides information about the operation and the effectiveness of zRAM on your system.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per zram device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.zram_usage | compressed, metadata | MiB |\n| mem.zram_savings | savings, original | MiB |\n| mem.zram_ratio | ratio | ratio |\n| mem.zram_efficiency | percent | percentage |\n\n",integration_type:"collector",id:"proc.plugin-/sys/block/zram-ZRAM",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/class/drm",monitored_instance:{name:"AMD GPU",link:"https://www.amd.com",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"amd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["amd","gpu","hardware"],most_popular:!1},overview:"# AMD GPU\n\nPlugin: proc.plugin\nModule: /sys/class/drm\n\n## Overview\n\nThis integration monitors AMD GPU metrics, such as utilization, clock frequency and memory usage.\n\nIt reads `/sys/class/drm` to collect metrics for every AMD GPU card instance it encounters.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per gpu\n\nThese metrics refer to the GPU.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| product_name | GPU product name (e.g. AMD RX 6600) |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| amdgpu.gpu_utilization | utilization | percentage |\n| amdgpu.gpu_mem_utilization | utilization | percentage |\n| amdgpu.gpu_clk_frequency | frequency | MHz |\n| amdgpu.gpu_mem_clk_frequency | frequency | MHz |\n| amdgpu.gpu_mem_vram_usage_perc | usage | percentage |\n| amdgpu.gpu_mem_vram_usage | free, used | bytes |\n| amdgpu.gpu_mem_vis_vram_usage_perc | usage | percentage |\n| amdgpu.gpu_mem_vis_vram_usage | free, used | bytes |\n| amdgpu.gpu_mem_gtt_usage_perc | usage | percentage |\n| amdgpu.gpu_mem_gtt_usage | free, used | bytes |\n\n",integration_type:"collector",id:"proc.plugin-/sys/class/drm-AMD_GPU",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/class/infiniband",monitored_instance:{name:"InfiniBand",link:"",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["infiniband","rdma"],most_popular:!1},overview:"# InfiniBand\n\nPlugin: proc.plugin\nModule: /sys/class/infiniband\n\n## Overview\n\nThis integration monitors InfiniBand network inteface statistics.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per infiniband port\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ib.bytes | Received, Sent | kilobits/s |\n| ib.packets | Received, Sent, Mcast_rcvd, Mcast_sent, Ucast_rcvd, Ucast_sent | packets/s |\n| ib.errors | Pkts_malformated, Pkts_rcvd_discarded, Pkts_sent_discarded, Tick_Wait_to_send, Pkts_missed_resource, Buffer_overrun, Link_Downed, Link_recovered, Link_integrity_err, Link_minor_errors, Pkts_rcvd_with_EBP, Pkts_rcvd_discarded_by_switch, Pkts_sent_discarded_by_switch | errors/s |\n| ib.hwerrors | Duplicated_packets, Pkt_Seq_Num_gap, Ack_timer_expired, Drop_missing_buffer, Drop_out_of_sequence, NAK_sequence_rcvd, CQE_err_Req, CQE_err_Resp, CQE_Flushed_err_Req, CQE_Flushed_err_Resp, Remote_access_err_Req, Remote_access_err_Resp, Remote_invalid_req, Local_length_err_Resp, RNR_NAK_Packets, CNP_Pkts_ignored, RoCE_ICRC_Errors | errors/s |\n| ib.hwpackets | RoCEv2_Congestion_sent, RoCEv2_Congestion_rcvd, IB_Congestion_handled, ATOMIC_req_rcvd, Connection_req_rcvd, Read_req_rcvd, Write_req_rcvd, RoCE_retrans_adaptive, RoCE_retrans_timeout, RoCE_slow_restart, RoCE_slow_restart_congestion, RoCE_slow_restart_count | packets/s |\n\n",integration_type:"collector",id:"proc.plugin-/sys/class/infiniband-InfiniBand",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/class/power_supply",monitored_instance:{name:"Power Supply",link:"",categories:["data-collection.linux-systems.power-supply-metrics"],icon_filename:"powersupply.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["psu","power supply"],most_popular:!1},overview:"# Power Supply\n\nPlugin: proc.plugin\nModule: /sys/class/power_supply\n\n## Overview\n\nThis integration monitors Power supply metrics, such as battery status, AC power status and more.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ linux_power_supply_capacity ](https://github.com/netdata/netdata/blob/master/src/health/health.d/linux_power_supply.conf) | powersupply.capacity | percentage of remaining power supply capacity |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per power device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| powersupply.capacity | capacity | percentage |\n| powersupply.power | power | W |\n| powersupply.charge | empty_design, empty, now, full, full_design | Ah |\n| powersupply.energy | empty_design, empty, now, full, full_design | Wh |\n| powersupply.voltage | min_design, min, now, max, max_design | V |\n\n",integration_type:"collector",id:"proc.plugin-/sys/class/power_supply-Power_Supply",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/devices/system/edac/mc",monitored_instance:{name:"Memory modules (DIMMs)",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["edac","ecc","dimm","ram","hardware"],most_popular:!1},overview:"# Memory modules (DIMMs)\n\nPlugin: proc.plugin\nModule: /sys/devices/system/edac/mc\n\n## Overview\n\nThe Error Detection and Correction (EDAC) subsystem is detecting and reporting errors in the system's memory,\nprimarily ECC (Error-Correcting Code) memory errors.\n\nThe collector provides data for:\n\n- Per memory controller (MC): correctable and uncorrectable errors. These can be of 2 kinds:\n - errors related to a DIMM\n - errors that cannot be associated with a DIMM\n\n- Per memory DIMM: correctable and uncorrectable errors. There are 2 kinds:\n - memory controllers that can identify the physical DIMMS and report errors directly for them,\n - memory controllers that report errors for memory address ranges that can be linked to dimms.\n In this case the DIMMS reported may be more than the physical DIMMS installed.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ecc_memory_mc_noinfo_correctable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_errors | memory controller ${label:controller} ECC correctable errors (unknown DIMM slot) |\n| [ ecc_memory_mc_noinfo_uncorrectable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_errors | memory controller ${label:controller} ECC uncorrectable errors (unknown DIMM slot) |\n| [ ecc_memory_dimm_correctable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_dimm_errors | DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC correctable errors |\n| [ ecc_memory_dimm_uncorrectable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_dimm_errors | DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC uncorrectable errors |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per memory controller\n\nThese metrics refer to the memory controller.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| controller | [mcX](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#mcx-directories) directory name of this memory controller. |\n| mc_name | Memory controller type. |\n| size_mb | The amount of memory in megabytes that this memory controller manages. |\n| max_location | Last available memory slot in this memory controller. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.edac_mc_errors | correctable, uncorrectable, correctable_noinfo, uncorrectable_noinfo | errors |\n\n### Per memory module\n\nThese metrics refer to the memory module (or rank, [depends on the memory controller](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#f5)).\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| controller | [mcX](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#mcx-directories) directory name of this memory controller. |\n| dimm | [dimmX or rankX](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#dimmx-or-rankx-directories) directory name of this memory module. |\n| dimm_dev_type | Type of DRAM device used in this memory module. For example, x1, x2, x4, x8. |\n| dimm_edac_mode | Used type of error detection and correction. For example, S4ECD4ED would mean a Chipkill with x4 DRAM. |\n| dimm_label | Label assigned to this memory module. |\n| dimm_location | Location of the memory module. |\n| dimm_mem_type | Type of the memory module. |\n| size | The amount of memory in megabytes that this memory module manages. |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.edac_mc_errors | correctable, uncorrectable | errors |\n\n",integration_type:"collector",id:"proc.plugin-/sys/devices/system/edac/mc-Memory_modules_(DIMMs)",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/devices/system/node",monitored_instance:{name:"Non-Uniform Memory Access",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["numa"],most_popular:!1},overview:"# Non-Uniform Memory Access\n\nPlugin: proc.plugin\nModule: /sys/devices/system/node\n\n## Overview\n\nInformation about NUMA (Non-Uniform Memory Access) nodes on the system.\n\nNUMA is a method of configuring a cluster of microprocessor in a multiprocessing system so that they can\nshare memory locally, improving performance and the ability of the system to be expanded. NUMA is used in a\nsymmetric multiprocessing (SMP) system.\n\nIn a NUMA system, processors, memory, and I/O devices are grouped together into cells, also known as nodes.\nEach node has its own memory and set of I/O devices, and one or more processors. While a processor can access\nmemory in any of the nodes, it does so faster when accessing memory within its own node.\n\nThe collector provides statistics on memory allocations for processes running on the NUMA nodes, revealing the\nefficiency of memory allocations in multi-node systems.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per numa node\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| numa_node | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.numa_nodes | hit, miss, local, foreign, interleave, other | events/s |\n\n",integration_type:"collector",id:"proc.plugin-/sys/devices/system/node-Non-Uniform_Memory_Access",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/fs/btrfs",monitored_instance:{name:"BTRFS",link:"",categories:["data-collection.linux-systems.filesystem-metrics.btrfs"],icon_filename:"filesystem.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["btrfs","filesystem"],most_popular:!1},overview:"# BTRFS\n\nPlugin: proc.plugin\nModule: /sys/fs/btrfs\n\n## Overview\n\nThis integration provides usage and error statistics from the BTRFS filesystem.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ btrfs_allocated ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.disk | percentage of allocated BTRFS physical disk space |\n| [ btrfs_data ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.data | utilization of BTRFS data space |\n| [ btrfs_metadata ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.metadata | utilization of BTRFS metadata space |\n| [ btrfs_system ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.system | utilization of BTRFS system space |\n| [ btrfs_device_read_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS read errors |\n| [ btrfs_device_write_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS write errors |\n| [ btrfs_device_flush_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS flush errors |\n| [ btrfs_device_corruption_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS corruption errors |\n| [ btrfs_device_generation_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS generation errors |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per btrfs filesystem\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| filesystem_uuid | TBD |\n| filesystem_label | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| btrfs.disk | unallocated, data_free, data_used, meta_free, meta_used, sys_free, sys_used | MiB |\n| btrfs.data | free, used | MiB |\n| btrfs.metadata | free, used, reserved | MiB |\n| btrfs.system | free, used | MiB |\n| btrfs.commits | commits | commits |\n| btrfs.commits_perc_time | commits | percentage |\n| btrfs.commit_timings | last, max | ms |\n\n### Per btrfs device\n\n\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device_id | TBD |\n| filesystem_uuid | TBD |\n| filesystem_label | TBD |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| btrfs.device_errors | write_errs, read_errs, flush_errs, corruption_errs, generation_errs | errors |\n\n",integration_type:"collector",id:"proc.plugin-/sys/fs/btrfs-BTRFS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"/sys/kernel/mm/ksm",monitored_instance:{name:"Kernel Same-Page Merging",link:"",categories:["data-collection.linux-systems.memory-metrics"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ksm","samepage","merging"],most_popular:!1},overview:"# Kernel Same-Page Merging\n\nPlugin: proc.plugin\nModule: /sys/kernel/mm/ksm\n\n## Overview\n\nKernel Samepage Merging (KSM) is a memory-saving feature in Linux that enables the kernel to examine the\nmemory of different processes and identify identical pages. It then merges these identical pages into a\nsingle page that the processes share. This is particularly useful for virtualization, where multiple virtual\nmachines might be running the same operating system or applications and have many identical pages.\n\nThe collector provides information about the operation and effectiveness of KSM on your system.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Kernel Same-Page Merging instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.ksm | shared, unshared, sharing, volatile | MiB |\n| mem.ksm_savings | savings, offered | MiB |\n| mem.ksm_ratios | savings | percentage |\n\n",integration_type:"collector",id:"proc.plugin-/sys/kernel/mm/ksm-Kernel_Same-Page_Merging",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"proc.plugin",module_name:"ipc",monitored_instance:{name:"Inter Process Communication",link:"",categories:["data-collection.linux-systems.ipc-metrics"],icon_filename:"network-wired.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ipc","semaphores","shared memory"],most_popular:!1},overview:"# Inter Process Communication\n\nPlugin: proc.plugin\nModule: ipc\n\n## Overview\n\nIPC stands for Inter-Process Communication. It is a mechanism which allows processes to communicate with each\nother and synchronize their actions.\n\nThis collector exposes information about:\n\n- Message Queues: This allows messages to be exchanged between processes. It's a more flexible method that\n allows messages to be placed onto a queue and read at a later time.\n\n- Shared Memory: This method allows for the fastest form of IPC because processes can exchange data by\n reading/writing into shared memory segments.\n\n- Semaphores: They are used to synchronize the operations performed by independent processes. So, if multiple\n processes are trying to access a single shared resource, semaphores can ensure that only one process\n accesses the resource at a given time.\n\n\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\n\n\nThere are no configuration options.\n\n#### Examples\nThere are no configuration examples.\n\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ semaphores_used ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf) | system.ipc_semaphores | IPC semaphore utilization |\n| [ semaphore_arrays_used ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf) | system.ipc_semaphore_arrays | IPC semaphore arrays utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Inter Process Communication instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.ipc_semaphores | semaphores | semaphores |\n| system.ipc_semaphore_arrays | arrays | arrays |\n| system.message_queue_message | a dimension per queue | messages |\n| system.message_queue_bytes | a dimension per queue | bytes |\n| system.shared_memory_segments | segments | segments |\n| system.shared_memory_bytes | bytes | bytes |\n\n",integration_type:"collector",id:"proc.plugin-ipc-Inter_Process_Communication",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/proc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"alarms",monitored_instance:{name:"Netdata Agent alarms",link:"/src/collectors/python.d.plugin/alarms/README.md",categories:["data-collection.other"],icon_filename:""},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["alarms","netdata"],most_popular:!1},overview:"# Netdata Agent alarms\n\nPlugin: python.d.plugin\nModule: alarms\n\n## Overview\n\nThis collector creates an 'Alarms' menu with one line plot of `alarms.status`.\n\n\nAlarm status is read from the Netdata agent rest api [`/api/v1/alarms?all`](https://learn.netdata.cloud/api#/alerts/alerts1).\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIt discovers instances of Netdata running on localhost, and gathers metrics from `http://127.0.0.1:19999/api/v1/alarms?all`. `CLEAR` status is mapped to `0`, `WARNING` to `1` and `CRITICAL` to `2`. Also, by default all alarms produced will be monitored.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/alarms.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/alarms.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| url | Netdata agent alarms endpoint to collect from. Can be local or remote so long as reachable by agent. | http://127.0.0.1:19999/api/v1/alarms?all | yes |\n| status_map | Mapping of alarm status to integer number that will be the metric value collected. | {"CLEAR": 0, "WARNING": 1, "CRITICAL": 2} | yes |\n| collect_alarm_values | set to true to include a chart with calculated alarm values over time. | no | yes |\n| alarm_status_chart_type | define the type of chart for plotting status over time e.g. \'line\' or \'stacked\'. | line | yes |\n| alarm_contains_words | A "," separated list of words you want to filter alarm names for. For example \'cpu,load\' would filter for only alarms with "cpu" or "load" in alarm name. Default includes all. | | yes |\n| alarm_excludes_words | A "," separated list of words you want to exclude based on alarm name. For example \'cpu,load\' would exclude all alarms with "cpu" or "load" in alarm name. Default excludes None. | | yes |\n| update_every | Sets the default data collection frequency. | 10 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\njobs:\n url: \'http://127.0.0.1:19999/api/v1/alarms?all\'\n\n```\n##### Advanced\n\nAn advanced example configuration with multiple jobs collecting different subsets of alarms for plotting on different charts.\n"ML" job will collect status and values for all alarms with "ml_" in the name. Default job will collect status for all other alarms.\n\n\n{% details open=true summary="Config" %}\n```yaml\nML:\n update_every: 5\n url: \'http://127.0.0.1:19999/api/v1/alarms?all\'\n status_map:\n CLEAR: 0\n WARNING: 1\n CRITICAL: 2\n collect_alarm_values: true\n alarm_status_chart_type: \'stacked\'\n alarm_contains_words: \'ml_\'\n\nDefault:\n update_every: 5\n url: \'http://127.0.0.1:19999/api/v1/alarms?all\'\n status_map:\n CLEAR: 0\n WARNING: 1\n CRITICAL: 2\n collect_alarm_values: false\n alarm_status_chart_type: \'stacked\'\n alarm_excludes_words: \'ml_\'\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `alarms` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin alarms debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Netdata Agent alarms instance\n\nThese metrics refer to the entire monitored application.\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| alarms.status | a dimension per alarm representing the latest status of the alarm. | status |\n| alarms.values | a dimension per alarm representing the latest collected value of the alarm. | value |\n\n",integration_type:"collector",id:"python.d.plugin-alarms-Netdata_Agent_alarms",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/alarms/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"am2320",monitored_instance:{name:"AM2320",link:"https://learn.adafruit.com/adafruit-am2320-temperature-humidity-i2c-sensor/overview",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"microchip.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["temperature","am2320","sensor","humidity"],most_popular:!1},overview:"# AM2320\n\nPlugin: python.d.plugin\nModule: am2320\n\n## Overview\n\nThis collector monitors AM2320 sensor metrics about temperature and humidity.\n\nIt retrieves temperature and humidity values by contacting an AM2320 sensor over i2c.\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAssuming prerequisites are met, the collector will try to connect to the sensor via i2c\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Sensor connection to a Raspberry Pi\n\nConnect the am2320 to the Raspberry Pi I2C pins\n\nRaspberry Pi 3B/4 Pins:\n\n- Board 3.3V (pin 1) to sensor VIN (pin 1)\n- Board SDA (pin 3) to sensor SDA (pin 2)\n- Board GND (pin 6) to sensor GND (pin 3)\n- Board SCL (pin 5) to sensor SCL (pin 4)\n\nYou may also need to add two I2C pullup resistors if your board does not already have them. The Raspberry Pi does have internal pullup resistors but it doesn't hurt to add them anyway. You can use 2.2K - 10K but we will just use 10K. The resistors go from VDD to SCL and SDA each.\n\n\n#### Software requirements\n\nInstall the Adafruit Circuit Python AM2320 library:\n\n`sudo pip3 install adafruit-circuitpython-am2320`\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/am2320.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/am2320.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### Local sensor\n\nA basic JOB configuration\n\n```yaml\nlocal_sensor:\n name: 'Local AM2320'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `am2320` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin am2320 debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per AM2320 instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| am2320.temperature | temperature | celsius |\n| am2320.humidity | humidity | percentage |\n\n",integration_type:"collector",id:"python.d.plugin-am2320-AM2320",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/am2320/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"beanstalk",monitored_instance:{name:"Beanstalk",link:"https://beanstalkd.github.io/",categories:["data-collection.message-brokers"],icon_filename:"beanstalk.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["beanstalk","beanstalkd","message"],most_popular:!1},overview:"# Beanstalk\n\nPlugin: python.d.plugin\nModule: beanstalk\n\n## Overview\n\nMonitor Beanstalk metrics to enhance job queueing and processing efficiency. Track job rates, processing times, and queue lengths for better task management.\n\nThe collector uses the `beanstalkc` python module to connect to a `beanstalkd` service and gather metrics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf no configuration is given, module will attempt to connect to beanstalkd on 127.0.0.1:11300 address.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### beanstalkc python module\n\nThe collector requires the `beanstalkc` python module to be installed.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/beanstalk.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/beanstalk.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| host | IP or URL to a beanstalk service. | 127.0.0.1 | no |\n| port | Port to the IP or URL to a beanstalk service. | 11300 | no |\n\n{% /details %}\n#### Examples\n\n##### Remote beanstalk server\n\nA basic remote beanstalk server\n\n```yaml\nremote:\n name: 'beanstalk'\n host: '1.2.3.4'\n port: 11300\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local_beanstalk'\n host: '127.0.0.1'\n port: 11300\n\nremote_job:\n name: 'remote_beanstalk'\n host: '192.0.2.1'\n port: 113000\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `beanstalk` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin beanstalk debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ beanstalk_server_buried_jobs ](https://github.com/netdata/netdata/blob/master/src/health/health.d/beanstalkd.conf) | beanstalk.current_jobs | number of buried jobs across all tubes. You need to manually kick them so they can be processed. Presence of buried jobs in a tube does not affect new jobs. |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Beanstalk instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| beanstalk.cpu_usage | user, system | cpu time |\n| beanstalk.jobs_rate | total, timeouts | jobs/s |\n| beanstalk.connections_rate | connections | connections/s |\n| beanstalk.commands_rate | put, peek, peek-ready, peek-delayed, peek-buried, reserve, use, watch, ignore, delete, bury, kick, stats, stats-job, stats-tube, list-tubes, list-tube-used, list-tubes-watched, pause-tube | commands/s |\n| beanstalk.current_tubes | tubes | tubes |\n| beanstalk.current_jobs | urgent, ready, reserved, delayed, buried | jobs |\n| beanstalk.current_connections | written, producers, workers, waiting | connections |\n| beanstalk.binlog | written, migrated | records/s |\n| beanstalk.uptime | uptime | seconds |\n\n### Per tube\n\nMetrics related to Beanstalk tubes. Each tube produces its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| beanstalk.jobs_rate | jobs | jobs/s |\n| beanstalk.jobs | urgent, ready, reserved, delayed, buried | jobs |\n| beanstalk.connections | using, waiting, watching | connections |\n| beanstalk.commands | deletes, pauses | commands/s |\n| beanstalk.pause | since, left | seconds |\n\n",integration_type:"collector",id:"python.d.plugin-beanstalk-Beanstalk",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/beanstalk/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"boinc",monitored_instance:{name:"BOINC",link:"https://boinc.berkeley.edu/",categories:["data-collection.distributed-computing-systems"],icon_filename:"bolt.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["boinc","distributed"],most_popular:!1},overview:"# BOINC\n\nPlugin: python.d.plugin\nModule: boinc\n\n## Overview\n\nThis collector monitors task counts for the Berkeley Open Infrastructure Networking Computing (BOINC) distributed computing client.\n\nIt uses the same RPC interface that the BOINC monitoring GUI does.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, the module will try to auto-detect the password to the RPC interface by looking in `/var/lib/boinc` for this file (this is the location most Linux distributions use for a system-wide BOINC installation), so things may just work without needing configuration for a local system.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Boinc RPC interface\n\nBOINC requires use of a password to access it's RPC interface. You can find this password in the `gui_rpc_auth.cfg` file in your BOINC directory.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/boinc.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/boinc.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| hostname | Define a hostname where boinc is running. | localhost | no |\n| port | The port of boinc RPC interface. | | no |\n| password | Provide a password to connect to a boinc RPC interface. | | no |\n\n{% /details %}\n#### Examples\n\n##### Configuration of a remote boinc instance\n\nA basic JOB configuration for a remote boinc instance\n\n```yaml\nremote:\n hostname: '1.2.3.4'\n port: 1234\n password: 'some-password'\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local'\n host: '127.0.0.1'\n port: 1234\n password: 'some-password'\n\nremote_job:\n name: 'remote'\n host: '192.0.2.1'\n port: 1234\n password: some-other-password\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `boinc` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin boinc debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ boinc_total_tasks ](https://github.com/netdata/netdata/blob/master/src/health/health.d/boinc.conf) | boinc.tasks | average number of total tasks over the last 10 minutes |\n| [ boinc_active_tasks ](https://github.com/netdata/netdata/blob/master/src/health/health.d/boinc.conf) | boinc.tasks | average number of active tasks over the last 10 minutes |\n| [ boinc_compute_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/boinc.conf) | boinc.states | average number of compute errors over the last 10 minutes |\n| [ boinc_upload_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/boinc.conf) | boinc.states | average number of failed uploads over the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per BOINC instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| boinc.tasks | Total, Active | tasks |\n| boinc.states | New, Downloading, Ready to Run, Compute Errors, Uploading, Uploaded, Aborted, Failed Uploads | tasks |\n| boinc.sched | Uninitialized, Preempted, Scheduled | tasks |\n| boinc.process | Uninitialized, Executing, Suspended, Aborted, Quit, Copy Pending | tasks |\n\n",integration_type:"collector",id:"python.d.plugin-boinc-BOINC",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/boinc/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"ceph",monitored_instance:{name:"Ceph",link:"https://ceph.io/",categories:["data-collection.storage-mount-points-and-filesystems"],icon_filename:"ceph.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["ceph","storage"],most_popular:!1},overview:"# Ceph\n\nPlugin: python.d.plugin\nModule: ceph\n\n## Overview\n\nThis collector monitors Ceph metrics about Cluster statistics, OSD usage, latency and Pool statistics.\n\nUses the `rados` python module to connect to a Ceph cluster.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### `rados` python module\n\nMake sure the `rados` python module is installed\n\n#### Granting read permissions to ceph group from keyring file\n\nExecute: `chmod 640 /etc/ceph/ceph.client.admin.keyring`\n\n#### Create a specific rados_id\n\nYou can optionally create a rados_id to use instead of admin\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/ceph.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/ceph.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| config_file | Ceph config file | | yes |\n| keyring_file | Ceph keyring file. netdata user must be added into ceph group and keyring file must be read group permission. | | yes |\n| rados_id | A rados user id to use for connecting to the Ceph cluster. | admin | no |\n\n{% /details %}\n#### Examples\n\n##### Basic local Ceph cluster\n\nA basic configuration to connect to a local Ceph cluster.\n\n```yaml\nlocal:\n config_file: '/etc/ceph/ceph.conf'\n keyring_file: '/etc/ceph/ceph.client.admin.keyring'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `ceph` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin ceph debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ceph_cluster_space_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ceph.conf) | ceph.general_usage | cluster disk space utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Ceph instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ceph.general_usage | avail, used | KiB |\n| ceph.general_objects | cluster | objects |\n| ceph.general_bytes | read, write | KiB/s |\n| ceph.general_operations | read, write | operations |\n| ceph.general_latency | apply, commit | milliseconds |\n| ceph.pool_usage | a dimension per Ceph Pool | KiB |\n| ceph.pool_objects | a dimension per Ceph Pool | objects |\n| ceph.pool_read_bytes | a dimension per Ceph Pool | KiB/s |\n| ceph.pool_write_bytes | a dimension per Ceph Pool | KiB/s |\n| ceph.pool_read_operations | a dimension per Ceph Pool | operations |\n| ceph.pool_write_operations | a dimension per Ceph Pool | operations |\n| ceph.osd_usage | a dimension per Ceph OSD | KiB |\n| ceph.osd_size | a dimension per Ceph OSD | KiB |\n| ceph.apply_latency | a dimension per Ceph OSD | milliseconds |\n| ceph.commit_latency | a dimension per Ceph OSD | milliseconds |\n\n",integration_type:"collector",id:"python.d.plugin-ceph-Ceph",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/ceph/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"changefinder",monitored_instance:{name:"python.d changefinder",link:"",categories:["data-collection.other"],icon_filename:""},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["change detection","anomaly detection","machine learning","ml"],most_popular:!1},overview:"# python.d changefinder\n\nPlugin: python.d.plugin\nModule: changefinder\n\n## Overview\n\nThis collector uses the Python [changefinder](https://github.com/shunsukeaihara/changefinder) library to\nperform [online](https://en.wikipedia.org/wiki/Online_machine_learning) [changepoint detection](https://en.wikipedia.org/wiki/Change_detection)\non your Netdata charts and/or dimensions.\n\n\nInstead of this collector just _collecting_ data, it also does some computation on the data it collects to return a changepoint score for each chart or dimension you configure it to work on. This is an [online](https://en.wikipedia.org/wiki/Online_machine_learning) machine learning algorithm so there is no batch step to train the model, instead it evolves over time as more data arrives. That makes this particular algorithm quite cheap to compute at each step of data collection (see the notes section below for more details) and it should scale fairly well to work on lots of charts or hosts (if running on a parent node for example).\n### Notes - It may take an hour or two (depending on your choice of `n_score_samples`) for the collector to 'settle' into it's\n typical behaviour in terms of the trained models and scores you will see in the normal running of your node. Mainly\n this is because it can take a while to build up a proper distribution of previous scores in over to convert the raw\n score returned by the ChangeFinder algorithm into a percentile based on the most recent `n_score_samples` that have\n already been produced. So when you first turn the collector on, it will have a lot of flags in the beginning and then\n should 'settle down' once it has built up enough history. This is a typical characteristic of online machine learning\n approaches which need some initial window of time before they can be useful.\n- As this collector does most of the work in Python itself, you may want to try it out first on a test or development\n system to get a sense of its performance characteristics on a node similar to where you would like to use it.\n- On a development n1-standard-2 (2 vCPUs, 7.5 GB memory) vm running Ubuntu 18.04 LTS and not doing any work some of the\n typical performance characteristics we saw from running this collector (with defaults) were:\n - A runtime (`netdata.runtime_changefinder`) of ~30ms.\n - Typically ~1% additional cpu usage.\n - About ~85mb of ram (`apps.mem`) being continually used by the `python.d.plugin` under default configuration.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default this collector will work over all `system.*` charts.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Python Requirements\n\nThis collector will only work with Python 3 and requires the packages below be installed.\n\n```bash\n# become netdata user\nsudo su -s /bin/bash netdata\n# install required packages for the netdata user\npip3 install --user numpy==1.19.5 changefinder==0.03 scipy==1.5.4\n```\n\n**Note**: if you need to tell Netdata to use Python 3 then you can pass the below command in the python plugin section\nof your `netdata.conf` file.\n\n```yaml\n[ plugin:python.d ]\n # update every = 1\n command options = -ppython3\n```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/changefinder.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/changefinder.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| charts_regex | what charts to pull data for - A regex like `system\\..*/` or `system\\..*/apps.cpu/apps.mem` etc. | system\\..* | yes |\n| charts_to_exclude | charts to exclude, useful if you would like to exclude some specific charts. note: should be a ',' separated string like 'chart.name,chart.name'. | | no |\n| mode | get ChangeFinder scores 'per_dim' or 'per_chart'. | per_chart | yes |\n| cf_r | default parameters that can be passed to the changefinder library. | 0.5 | no |\n| cf_order | default parameters that can be passed to the changefinder library. | 1 | no |\n| cf_smooth | default parameters that can be passed to the changefinder library. | 15 | no |\n| cf_threshold | the percentile above which scores will be flagged. | 99 | no |\n| n_score_samples | the number of recent scores to use when calculating the percentile of the changefinder score. | 14400 | no |\n| show_scores | set to true if you also want to chart the percentile scores in addition to the flags. (mainly useful for debugging or if you want to dive deeper on how the scores are evolving over time) | no | no |\n\n{% /details %}\n#### Examples\n\n##### Default\n\nDefault configuration.\n\n```yaml\nlocal:\n name: 'local'\n host: '127.0.0.1:19999'\n charts_regex: 'system\\..*'\n charts_to_exclude: ''\n mode: 'per_chart'\n cf_r: 0.5\n cf_order: 1\n cf_smooth: 15\n cf_threshold: 99\n n_score_samples: 14400\n show_scores: false\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `changefinder` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin changefinder debug trace\n ```\n\n### Debug Mode\n\n\n\n### Log Messages\n\n\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per python.d changefinder instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| changefinder.scores | a dimension per chart | score |\n| changefinder.flags | a dimension per chart | flag |\n\n",integration_type:"collector",id:"python.d.plugin-changefinder-python.d_changefinder",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/changefinder/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"dovecot",monitored_instance:{name:"Dovecot",link:"https://www.dovecot.org/",categories:["data-collection.mail-servers"],icon_filename:"dovecot.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["dovecot","imap","mail"],most_popular:!1},overview:"# Dovecot\n\nPlugin: python.d.plugin\nModule: dovecot\n\n## Overview\n\nThis collector monitors Dovecot metrics about sessions, logins, commands, page faults and more.\n\nIt uses the dovecot socket and executes the `EXPORT global` command to get the statistics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf no configuration is given, the collector will attempt to connect to dovecot using unix socket localized in `/var/run/dovecot/stats`\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Dovecot configuration\n\nThe Dovecot UNIX socket should have R/W permissions for user netdata, or Dovecot should be configured with a TCP/IP socket.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/dovecot.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/dovecot.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| socket | Use this socket to communicate with Devcot | /var/run/dovecot/stats | no |\n| host | Instead of using a socket, you can point the collector to an ip for devcot statistics. | | no |\n| port | Used in combination with host, configures the port devcot listens to. | | no |\n\n{% /details %}\n#### Examples\n\n##### Local TCP\n\nA basic TCP configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocaltcpip:\n name: 'local'\n host: '127.0.0.1'\n port: 24242\n\n```\n{% /details %}\n##### Local socket\n\nA basic local socket configuration\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalsocket:\n name: 'local'\n socket: '/var/run/dovecot/stats'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `dovecot` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin dovecot debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Dovecot instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| dovecot.sessions | active sessions | number |\n| dovecot.logins | logins | number |\n| dovecot.commands | commands | commands |\n| dovecot.faults | minor, major | faults |\n| dovecot.context_switches | voluntary, involuntary | switches |\n| dovecot.io | read, write | KiB/s |\n| dovecot.net | read, write | kilobits/s |\n| dovecot.syscalls | read, write | syscalls/s |\n| dovecot.lookup | path, attr | number/s |\n| dovecot.cache | hits | hits/s |\n| dovecot.auth | ok, failed | attempts |\n| dovecot.auth_cache | hit, miss | number |\n\n",integration_type:"collector",id:"python.d.plugin-dovecot-Dovecot",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/dovecot/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"example",monitored_instance:{name:"Example collector",link:"/src/collectors/python.d.plugin/example/README.md",categories:["data-collection.other"],icon_filename:""},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["example","netdata","python"],most_popular:!1},overview:"# Example collector\n\nPlugin: python.d.plugin\nModule: example\n\n## Overview\n\nExample collector that generates some random numbers as metrics.\n\nIf you want to write your own collector, read our [writing a new Python module](/src/collectors/python.d.plugin/README.md#how-to-write-a-new-module) tutorial.\n\n\nThe `get_data()` function uses `random.randint()` to generate a random number which will be collected as a metric.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/example.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/example.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| num_lines | The number of lines to create. | 4 | no |\n| lower | The lower bound of numbers to randomly sample from. | 0 | no |\n| upper | The upper bound of numbers to randomly sample from. | 100 | no |\n| update_every | Sets the default data collection frequency. | 1 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\nfour_lines:\n name: "Four Lines"\n update_every: 1\n priority: 60000\n penalty: yes\n autodetection_retry: 0\n num_lines: 4\n lower: 0\n upper: 100\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `example` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin example debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Example collector instance\n\nThese metrics refer to the entire monitored application.\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| example.random | random | number |\n\n",integration_type:"collector",id:"python.d.plugin-example-Example_collector",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/example/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"exim",monitored_instance:{name:"Exim",link:"https://www.exim.org/",categories:["data-collection.mail-servers"],icon_filename:"exim.jpg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["exim","mail","server"],most_popular:!1},overview:"# Exim\n\nPlugin: python.d.plugin\nModule: exim\n\n## Overview\n\nThis collector monitors Exim mail queue.\n\nIt uses the `exim` command line binary to get the statistics.\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAssuming setup prerequisites are met, the collector will try to gather statistics using the method described above, even without any configuration.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Exim configuration - local installation\n\nThe module uses the `exim` binary, which can only be executed as root by default. We need to allow other users to `exim` binary. We solve that adding `queue_list_requires_admin` statement in exim configuration and set to `false`, because it is `true` by default. On many Linux distributions, the default location of `exim` configuration is in `/etc/exim.conf`.\n\n1. Edit the `exim` configuration with your preferred editor and add:\n`queue_list_requires_admin = false`\n2. Restart `exim` and Netdata\n\n\n#### Exim configuration - WHM (CPanel) server\n\nOn a WHM server, you can reconfigure `exim` over the WHM interface with the following steps.\n\n1. Login to WHM\n2. Navigate to Service Configuration --\x3e Exim Configuration Manager --\x3e tab Advanced Editor\n3. Scroll down to the button **Add additional configuration setting** and click on it.\n4. In the new dropdown which will appear above we need to find and choose:\n`queue_list_requires_admin` and set to `false`\n5. Scroll to the end and click the **Save** button.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/exim.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/exim.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| command | Path and command to the `exim` binary | exim -bpc | no |\n\n{% /details %}\n#### Examples\n\n##### Local exim install\n\nA basic local exim install\n\n```yaml\nlocal:\n command: 'exim -bpc'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `exim` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin exim debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Exim instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| exim.qemails | emails | emails |\n\n",integration_type:"collector",id:"python.d.plugin-exim-Exim",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/exim/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"gearman",monitored_instance:{name:"Gearman",link:"http://gearman.org/",categories:["data-collection.distributed-computing-systems"],icon_filename:"gearman.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["gearman","gearman job server"],most_popular:!1},overview:"# Gearman\n\nPlugin: python.d.plugin\nModule: gearman\n\n## Overview\n\nMonitor Gearman metrics for proficient system task distribution. Track job counts, worker statuses, and queue lengths for effective distributed task management.\n\nThis collector connects to a Gearman instance via either TCP or unix socket.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nWhen no configuration file is found, the collector tries to connect to TCP/IP socket: localhost:4730.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Socket permissions\n\nThe gearman UNIX socket should have read permission for user netdata.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/gearman.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/gearman.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| host | URL or IP where gearman is running. | localhost | no |\n| port | Port of URL or IP where gearman is running. | 4730 | no |\n| tls | Use tls to connect to gearman. | false | no |\n| cert | Provide a certificate file if needed to connect to a TLS gearman instance. | | no |\n| key | Provide a key file if needed to connect to a TLS gearman instance. | | no |\n\n{% /details %}\n#### Examples\n\n##### Local gearman service\n\nA basic host and port gearman configuration for localhost.\n\n```yaml\nlocalhost:\n name: 'local'\n host: 'localhost'\n port: 4730\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local'\n host: 'localhost'\n port: 4730\n\nremote:\n name: 'remote'\n host: '192.0.2.1'\n port: 4730\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `gearman` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin gearman debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ gearman_workers_queued ](https://github.com/netdata/netdata/blob/master/src/health/health.d/gearman.conf) | gearman.single_job | average number of queued jobs over the last 10 minutes |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Gearman instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| gearman.total_jobs | Pending, Running | Jobs |\n\n### Per gearman job\n\nMetrics related to Gearman jobs. Each job produces its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| gearman.single_job | Pending, Idle, Runnning | Jobs |\n\n",integration_type:"collector",id:"python.d.plugin-gearman-Gearman",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/gearman/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"go_expvar",monitored_instance:{name:"Go applications (EXPVAR)",link:"https://pkg.go.dev/expvar",categories:["data-collection.apm"],icon_filename:"go.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["go","expvar","application"],most_popular:!1},overview:"# Go applications (EXPVAR)\n\nPlugin: python.d.plugin\nModule: go_expvar\n\n## Overview\n\nThis collector monitors Go applications that expose their metrics with the use of the `expvar` package from the Go standard library. It produces charts for Go runtime memory statistics and optionally any number of custom charts.\n\nIt connects via http to gather the metrics exposed via the `expvar` package.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable the go_expvar collector\n\nThe `go_expvar` collector is disabled by default. To enable it, use `edit-config` from the Netdata [config directory](/docs/netdata-agent/configuration/README.md), which is typically at `/etc/netdata`, to edit the `python.d.conf` file.\n\n```bash\ncd /etc/netdata # Replace this path with your Netdata config directory, if different\nsudo ./edit-config python.d.conf\n```\n\nChange the value of the `go_expvar` setting to `yes`. Save the file and restart the Netdata Agent with `sudo systemctl restart netdata`, or the [appropriate method](/packaging/installer/README.md#maintaining-a-netdata-agent-installation) for your system.\n\n\n#### Sample `expvar` usage in a Go application\n\nThe `expvar` package exposes metrics over HTTP and is very easy to use.\nConsider this minimal sample below:\n\n```go\npackage main\n\nimport (\n _ "expvar"\n "net/http"\n)\n\nfunc main() {\n http.ListenAndServe("127.0.0.1:8080", nil)\n}\n```\n\nWhen imported this way, the `expvar` package registers a HTTP handler at `/debug/vars` that\nexposes Go runtime\'s memory statistics in JSON format. You can inspect the output by opening\nthe URL in your browser (or by using `wget` or `curl`).\n\nSample output:\n\n```json\n{\n"cmdline": ["./expvar-demo-binary"],\n"memstats": {"Alloc":630856,"TotalAlloc":630856,"Sys":3346432,"Lookups":27, }\n}\n```\n\nYou can of course expose and monitor your own variables as well.\nHere is a sample Go application that exposes a few custom variables:\n\n```go\npackage main\n\nimport (\n "expvar"\n "net/http"\n "runtime"\n "time"\n)\n\nfunc main() {\n\n tick := time.NewTicker(1 * time.Second)\n num_go := expvar.NewInt("runtime.goroutines")\n counters := expvar.NewMap("counters")\n counters.Set("cnt1", new(expvar.Int))\n counters.Set("cnt2", new(expvar.Float))\n\n go http.ListenAndServe(":8080", nil)\n\n for {\n select {\n case <- tick.C:\n num_go.Set(int64(runtime.NumGoroutine()))\n counters.Add("cnt1", 1)\n counters.AddFloat("cnt2", 1.452)\n }\n }\n}\n```\n\nApart from the runtime memory stats, this application publishes two counters and the\nnumber of currently running Goroutines and updates these stats every second.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/go_expvar.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/go_expvar.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified. Each JOB can be used to monitor a different Go application.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| url | the URL and port of the expvar endpoint. Please include the whole path of the endpoint, as the expvar handler can be installed in a non-standard location. | | yes |\n| user | If the URL is password protected, this is the username to use. | | no |\n| pass | If the URL is password protected, this is the password to use. | | no |\n| collect_memstats | Enables charts for Go runtime\'s memory statistics. | | no |\n| extra_charts | Defines extra data/charts to monitor, please see the example below. | | no |\n\n{% /details %}\n#### Examples\n\n##### Monitor a Go app1 application\n\nThe example below sets a configuration for a Go application, called `app1`. Besides the `memstats`, the application also exposes two counters and the number of currently running Goroutines and updates these stats every second.\n\nThe `go_expvar` collector can monitor these as well with the use of the `extra_charts` configuration variable.\n\nThe `extra_charts` variable is a YaML list of Netdata chart definitions.\nEach chart definition has the following keys:\n\n```\nid: Netdata chart ID\noptions: a key-value mapping of chart options\nlines: a list of line definitions\n```\n\n**Note: please do not use dots in the chart or line ID field.\nSee [this issue](https://github.com/netdata/netdata/pull/1902#issuecomment-284494195) for explanation.**\n\nPlease see these two links to the official Netdata documentation for more information about the values:\n\n- [External plugins - charts](/src/collectors/plugins.d/README.md#chart)\n- [Chart variables](/src/collectors/python.d.plugin/README.md#global-variables-order-and-chart)\n\n**Line definitions**\n\nEach chart can define multiple lines (dimensions).\nA line definition is a key-value mapping of line options.\nEach line can have the following options:\n\n```\n# mandatory\nexpvar_key: the name of the expvar as present in the JSON output of /debug/vars endpoint\nexpvar_type: value type; supported are "float" or "int"\nid: the id of this line/dimension in Netdata\n\n# optional - Netdata defaults are used if these options are not defined\nname: \'\'\nalgorithm: absolute\nmultiplier: 1\ndivisor: 100 if expvar_type == float, 1 if expvar_type == int\nhidden: False\n```\n\nPlease see the following link for more information about the options and their default values:\n[External plugins - dimensions](/src/collectors/plugins.d/README.md#dimension)\n\nApart from top-level expvars, this plugin can also parse expvars stored in a multi-level map;\nAll dicts in the resulting JSON document are then flattened to one level.\nExpvar names are joined together with \'.\' when flattening.\n\nExample:\n\n```\n{\n "counters": {"cnt1": 1042, "cnt2": 1512.9839999999983},\n "runtime.goroutines": 5\n}\n```\n\nIn the above case, the exported variables will be available under `runtime.goroutines`,\n`counters.cnt1` and `counters.cnt2` expvar_keys. If the flattening results in a key collision,\nthe first defined key wins and all subsequent keys with the same name are ignored.\n\n\n```yaml\napp1:\n name : \'app1\'\n url : \'http://127.0.0.1:8080/debug/vars\'\n collect_memstats: true\n extra_charts:\n - id: "runtime_goroutines"\n options:\n name: num_goroutines\n title: "runtime: number of goroutines"\n units: goroutines\n family: runtime\n context: expvar.runtime.goroutines\n chart_type: line\n lines:\n - {expvar_key: \'runtime.goroutines\', expvar_type: int, id: runtime_goroutines}\n - id: "foo_counters"\n options:\n name: counters\n title: "some random counters"\n units: awesomeness\n family: counters\n context: expvar.foo.counters\n chart_type: line\n lines:\n - {expvar_key: \'counters.cnt1\', expvar_type: int, id: counters_cnt1}\n - {expvar_key: \'counters.cnt2\', expvar_type: float, id: counters_cnt2}\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `go_expvar` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin go_expvar debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Go applications (EXPVAR) instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| expvar.memstats.heap | alloc, inuse | KiB |\n| expvar.memstats.stack | inuse | KiB |\n| expvar.memstats.mspan | inuse | KiB |\n| expvar.memstats.mcache | inuse | KiB |\n| expvar.memstats.live_objects | live | objects |\n| expvar.memstats.sys | sys | KiB |\n| expvar.memstats.gc_pauses | avg | ns |\n\n",integration_type:"collector",id:"python.d.plugin-go_expvar-Go_applications_(EXPVAR)",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/go_expvar/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"icecast",monitored_instance:{name:"Icecast",link:"https://icecast.org/",categories:["data-collection.media-streaming-servers"],icon_filename:"icecast.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["icecast","streaming","media"],most_popular:!1},overview:"# Icecast\n\nPlugin: python.d.plugin\nModule: icecast\n\n## Overview\n\nThis collector monitors Icecast listener counts.\n\nIt connects to an icecast URL and uses the `status-json.xsl` endpoint to retrieve statistics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nWithout configuration, the collector attempts to connect to http://localhost:8443/status-json.xsl\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Icecast minimum version\n\nNeeds at least icecast version >= 2.4.0\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/icecast.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/icecast.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| url | The URL (and port) to the icecast server. Needs to also include `/status-json.xsl` | http://localhost:8443/status-json.xsl | no |\n| user | Username to use to connect to `url` if it's password protected. | | no |\n| pass | Password to use to connect to `url` if it's password protected. | | no |\n\n{% /details %}\n#### Examples\n\n##### Remote Icecast server\n\nConfigure a remote icecast server\n\n```yaml\nremote:\n url: 'http://1.2.3.4:8443/status-json.xsl'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `icecast` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin icecast debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Icecast instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| icecast.listeners | a dimension for each active source | listeners |\n\n",integration_type:"collector",id:"python.d.plugin-icecast-Icecast",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/icecast/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"ipfs",monitored_instance:{name:"IPFS",link:"https://ipfs.tech/",categories:["data-collection.storage-mount-points-and-filesystems"],icon_filename:"ipfs.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# IPFS\n\nPlugin: python.d.plugin\nModule: ipfs\n\n## Overview\n\nThis collector monitors IPFS server metrics about its quality and performance.\n\nIt connects to an http endpoint of the IPFS server to collect the metrics\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf the endpoint is accessible by the Agent, netdata will autodetect it\n\n#### Limits\n\nCalls to the following endpoints are disabled due to IPFS bugs:\n\n/api/v0/stats/repo (https://github.com/ipfs/go-ipfs/issues/3874)\n/api/v0/pin/ls (https://github.com/ipfs/go-ipfs/issues/7528)\n\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/ipfs.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/ipfs.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | The JOB's name as it will appear at the dashboard (by default is the job_name) | job_name | no |\n| url | URL to the IPFS API | no | yes |\n| repoapi | Collect repo metrics. | no | no |\n| pinapi | Set status of IPFS pinned object polling. | no | no |\n\n{% /details %}\n#### Examples\n\n##### Basic (default out-of-the-box)\n\nA basic example configuration, one job will run at a time. Autodetect mechanism uses it by default.\n\n```yaml\nlocalhost:\n name: 'local'\n url: 'http://localhost:5001'\n repoapi: no\n pinapi: no\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local'\n url: 'http://localhost:5001'\n repoapi: no\n pinapi: no\n\nremote_host:\n name: 'remote'\n url: 'http://192.0.2.1:5001'\n repoapi: no\n pinapi: no\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `ipfs` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin ipfs debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ ipfs_datastore_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipfs.conf) | ipfs.repo_size | IPFS datastore utilization |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per IPFS instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| ipfs.bandwidth | in, out | kilobits/s |\n| ipfs.peers | peers | peers |\n| ipfs.repo_size | avail, size | GiB |\n| ipfs.repo_objects | objects, pinned, recursive_pins | objects |\n\n",integration_type:"collector",id:"python.d.plugin-ipfs-IPFS",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/ipfs/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"memcached",monitored_instance:{name:"Memcached",link:"https://memcached.org/",categories:["data-collection.database-servers"],icon_filename:"memcached.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["memcached","memcache","cache","database"],most_popular:!1},overview:"# Memcached\n\nPlugin: python.d.plugin\nModule: memcached\n\n## Overview\n\nMonitor Memcached metrics for proficient in-memory key-value store operations. Track cache hits, misses, and memory usage for efficient data caching.\n\nIt reads server response to stats command ([stats interface](https://github.com/memcached/memcached/wiki/Commands#stats)).\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf no configuration is given, collector will attempt to connect to memcached instance on `127.0.0.1:11211` address.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/memcached.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/memcached.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| host | the host to connect to. | 127.0.0.1 | no |\n| port | the port to connect to. | 11211 | no |\n| update_every | Sets the default data collection frequency. | 10 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### localhost\n\nAn example configuration for localhost.\n\n```yaml\nlocalhost:\n name: 'local'\n host: 'localhost'\n port: 11211\n\n```\n##### localipv4\n\nAn example configuration for localipv4.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local'\n host: '127.0.0.1'\n port: 11211\n\n```\n{% /details %}\n##### localipv6\n\nAn example configuration for localipv6.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local'\n host: '::1'\n port: 11211\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `memcached` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin memcached debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ memcached_cache_memory_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memcached.conf) | memcached.cache | cache memory utilization |\n| [ memcached_cache_fill_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memcached.conf) | memcached.cache | average rate the cache fills up (positive), or frees up (negative) space over the last hour |\n| [ memcached_out_of_cache_space_time ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memcached.conf) | memcached.cache | estimated time the cache will run out of space if the system continues to add data at the same rate as the past hour |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Memcached instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| memcached.cache | available, used | MiB |\n| memcached.net | in, out | kilobits/s |\n| memcached.connections | current, rejected, total | connections/s |\n| memcached.items | current, total | items |\n| memcached.evicted_reclaimed | reclaimed, evicted | items |\n| memcached.get | hints, misses | requests |\n| memcached.get_rate | rate | requests/s |\n| memcached.set_rate | rate | requests/s |\n| memcached.delete | hits, misses | requests |\n| memcached.cas | hits, misses, bad value | requests |\n| memcached.increment | hits, misses | requests |\n| memcached.decrement | hits, misses | requests |\n| memcached.touch | hits, misses | requests |\n| memcached.touch_rate | rate | requests/s |\n\n",integration_type:"collector",id:"python.d.plugin-memcached-Memcached",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/memcached/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"monit",monitored_instance:{name:"Monit",link:"https://mmonit.com/monit/",categories:["data-collection.synthetic-checks"],icon_filename:"monit.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["monit","mmonit","supervision tool","monitrc"],most_popular:!1},overview:"# Monit\n\nPlugin: python.d.plugin\nModule: monit\n\n## Overview\n\nThis collector monitors Monit targets such as filesystems, directories, files, FIFO pipes and more.\n\n\nIt gathers data from Monit's XML interface.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, this collector will attempt to connect to Monit at `http://localhost:2812`\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/monit.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/monit.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 1 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | local | no |\n| url | The URL to fetch Monit's metrics. | http://localhost:2812 | yes |\n| user | Username in case the URL is password protected. | | no |\n| pass | Password in case the URL is password protected. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic configuration example.\n\n```yaml\nlocalhost:\n name : 'local'\n url : 'http://localhost:2812'\n\n```\n##### Basic Authentication\n\nExample using basic username and password in order to authenticate.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name : 'local'\n url : 'http://localhost:2812'\n user: 'foo'\n pass: 'bar'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local'\n url: 'http://localhost:2812'\n\nremote_job:\n name: 'remote'\n url: 'http://192.0.2.1:2812'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `monit` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin monit debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Monit instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| monit.filesystems | a dimension per target | filesystems |\n| monit.directories | a dimension per target | directories |\n| monit.files | a dimension per target | files |\n| monit.fifos | a dimension per target | pipes |\n| monit.programs | a dimension per target | programs |\n| monit.services | a dimension per target | processes |\n| monit.process_uptime | a dimension per target | seconds |\n| monit.process_threads | a dimension per target | threads |\n| monit.process_childrens | a dimension per target | children |\n| monit.hosts | a dimension per target | hosts |\n| monit.host_latency | a dimension per target | milliseconds |\n| monit.networks | a dimension per target | interfaces |\n\n",integration_type:"collector",id:"python.d.plugin-monit-Monit",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/monit/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"nsd",monitored_instance:{name:"Name Server Daemon",link:"https://nsd.docs.nlnetlabs.nl/en/latest/#",categories:["data-collection.dns-and-dhcp-servers"],icon_filename:"nsd.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["nsd","name server daemon"],most_popular:!1},overview:"# Name Server Daemon\n\nPlugin: python.d.plugin\nModule: nsd\n\n## Overview\n\nThis collector monitors NSD statistics like queries, zones, protocols, query types and more.\n\n\nIt uses the `nsd-control stats_noreset` command to gather metrics.\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf permissions are satisfied, the collector will be able to run `nsd-control stats_noreset`, thus collecting metrics.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### NSD version\n\nThe version of `nsd` must be 4.0+.\n\n\n#### Provide Netdata the permissions to run the command\n\nNetdata must have permissions to run the `nsd-control stats_noreset` command.\n\nYou can:\n\n- Add "netdata" user to "nsd" group:\n ```\n usermod -aG nsd netdata\n ```\n- Add Netdata to sudoers\n 1. Edit the sudoers file:\n ```\n visudo -f /etc/sudoers.d/netdata\n ```\n 2. Add the entry:\n ```\n Defaults:netdata !requiretty\n netdata ALL=(ALL) NOPASSWD: /usr/sbin/nsd-control stats_noreset\n ```\n\n > Note that you will need to set the `command` option to `sudo /usr/sbin/nsd-control stats_noreset` if you use this method.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/nsd.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/nsd.conf\n```\n#### Options\n\nThis particular collector does not need further configuration to work if permissions are satisfied, but you can always customize it\'s data collection behavior.\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 30 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| command | The command to run | nsd-control stats_noreset | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic configuration example.\n\n```yaml\nlocal:\n name: \'nsd_local\'\n command: \'nsd-control stats_noreset\'\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `nsd` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin nsd debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Name Server Daemon instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| nsd.queries | queries | queries/s |\n| nsd.zones | master, slave | zones |\n| nsd.protocols | udp, udp6, tcp, tcp6 | queries/s |\n| nsd.type | A, NS, CNAME, SOA, PTR, HINFO, MX, NAPTR, TXT, AAAA, SRV, ANY | queries/s |\n| nsd.transfer | NOTIFY, AXFR | queries/s |\n| nsd.rcode | NOERROR, FORMERR, SERVFAIL, NXDOMAIN, NOTIMP, REFUSED, YXDOMAIN | queries/s |\n\n",integration_type:"collector",id:"python.d.plugin-nsd-Name_Server_Daemon",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/nsd/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"openldap",monitored_instance:{name:"OpenLDAP",link:"https://www.openldap.org/",categories:["data-collection.authentication-and-authorization"],icon_filename:"statsd.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["openldap","RBAC","Directory access"],most_popular:!1},overview:"# OpenLDAP\n\nPlugin: python.d.plugin\nModule: openldap\n\n## Overview\n\nThis collector monitors OpenLDAP metrics about connections, operations, referrals and more.\n\nStatistics are taken from the monitoring interface of a openLDAP (slapd) server\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis collector doesn't work until all the prerequisites are checked.\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Configure the openLDAP server to expose metrics to monitor it.\n\nFollow instructions from https://www.openldap.org/doc/admin24/monitoringslapd.html to activate monitoring interface.\n\n\n#### Install python-ldap module\n\nInstall python ldap module \n\n1. From pip package manager\n\n```bash\npip install ldap\n```\n\n2. With apt package manager (in most deb based distros)\n\n\n```bash\napt-get install python-ldap\n```\n\n\n3. With yum package manager (in most rpm based distros)\n\n\n```bash\nyum install python-ldap\n```\n\n\n#### Insert credentials for Netdata to access openLDAP server\n\nUse the `ldappasswd` utility to set a password for the username you will use.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/openldap.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/openldap.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| username | The bind user with right to access monitor statistics | | yes |\n| password | The password for the binded user | | yes |\n| server | The listening address of the LDAP server. In case of TLS, use the hostname which the certificate is published for. | | yes |\n| port | The listening port of the LDAP server. Change to 636 port in case of TLS connection. | 389 | yes |\n| use_tls | Make True if a TLS connection is used over ldaps:// | no | no |\n| use_start_tls | Make True if a TLS connection is used over ldap:// | no | no |\n| cert_check | False if you want to ignore certificate check | True | yes |\n| timeout | Seconds to timeout if no connection exist | | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n```yaml\nusername: "cn=admin"\npassword: "pass"\nserver: "localhost"\nport: "389"\ncheck_cert: True\ntimeout: 1\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `openldap` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin openldap debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per OpenLDAP instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| openldap.total_connections | connections | connections/s |\n| openldap.traffic_stats | sent | KiB/s |\n| openldap.operations_status | completed, initiated | ops/s |\n| openldap.referrals | sent | referrals/s |\n| openldap.entries | sent | entries/s |\n| openldap.ldap_operations | bind, search, unbind, add, delete, modify, compare | ops/s |\n| openldap.waiters | write, read | waiters/s |\n\n",integration_type:"collector",id:"python.d.plugin-openldap-OpenLDAP",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/openldap/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"oracledb",monitored_instance:{name:"Oracle DB",link:"https://docs.oracle.com/en/database/oracle/oracle-database/",categories:["data-collection.database-servers"],icon_filename:"oracle.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["database","oracle","data warehouse","SQL"],most_popular:!1},overview:"# Oracle DB\n\nPlugin: python.d.plugin\nModule: oracledb\n\n## Overview\n\nThis collector monitors OracleDB database metrics about sessions, tables, memory and more.\n\nIt collects the metrics via the supported database client library\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nIn order for this collector to work, it needs a read-only user `netdata` in the RDBMS.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nWhen the requirements are met, databases on the local host on port 1521 will be auto-detected\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Install the python-oracledb package\n\nYou can follow the official guide below to install the required package:\n\nSource: https://python-oracledb.readthedocs.io/en/latest/user_guide/installation.html\n\n\n#### Create a read only user for netdata\n\nFollow the official instructions for your oracle RDBMS to create a read-only user for netdata. The operation may follow this approach\n\nConnect to your Oracle database with an administrative user and execute:\n\n```bash\nCREATE USER netdata IDENTIFIED BY ;\n\nGRANT CONNECT TO netdata;\nGRANT SELECT_CATALOG_ROLE TO netdata;\n```\n\n\n#### Edit the configuration\n\nEdit the configuration troubleshooting:\n\n1. Provide a valid user for the netdata collector to access the database\n2. Specify the network target this database is listening.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/oracledb.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/oracledb.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| user | The username for the user account. | no | yes |\n| password | The password for the user account. | no | yes |\n| server | The IP address or hostname (and port) of the Oracle Database Server. | no | yes |\n| service | The Oracle Database service name. To view the services available on your server run this query, `select SERVICE_NAME from gv$session where sid in (select sid from V$MYSTAT)`. | no | yes |\n| protocol | one of the strings \"tcp\" or \"tcps\" indicating whether to use unencrypted network traffic or encrypted network traffic | no | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration, two jobs described for two databases.\n\n```yaml\nlocal:\n user: 'netdata'\n password: 'secret'\n server: 'localhost:1521'\n service: 'XE'\n protocol: 'tcps'\n\nremote:\n user: 'netdata'\n password: 'secret'\n server: '10.0.0.1:1521'\n service: 'XE'\n protocol: 'tcps'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `oracledb` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin oracledb debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThese metrics refer to the entire monitored application.\n\n### Per Oracle DB instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| oracledb.session_count | total, active | sessions |\n| oracledb.session_limit_usage | usage | % |\n| oracledb.logons | logons | events/s |\n| oracledb.physical_disk_read_writes | reads, writes | events/s |\n| oracledb.sorts_on_disks | sorts | events/s |\n| oracledb.full_table_scans | full table scans | events/s |\n| oracledb.database_wait_time_ratio | wait time ratio | % |\n| oracledb.shared_pool_free_memory | free memory | % |\n| oracledb.in_memory_sorts_ratio | in-memory sorts | % |\n| oracledb.sql_service_response_time | time | seconds |\n| oracledb.user_rollbacks | rollbacks | events/s |\n| oracledb.enqueue_timeouts | enqueue timeouts | events/s |\n| oracledb.cache_hit_ration | buffer, cursor, library, row | % |\n| oracledb.global_cache_blocks | corrupted, lost | events/s |\n| oracledb.activity | parse count, execute count, user commits, user rollbacks | events/s |\n| oracledb.wait_time | application, configuration, administrative, concurrency, commit, network, user I/O, system I/O, scheduler, other | ms |\n| oracledb.tablespace_size | a dimension per active tablespace | KiB |\n| oracledb.tablespace_usage | a dimension per active tablespace | KiB |\n| oracledb.tablespace_usage_in_percent | a dimension per active tablespace | % |\n| oracledb.allocated_size | a dimension per active tablespace | B |\n| oracledb.allocated_usage | a dimension per active tablespace | B |\n| oracledb.allocated_usage_in_percent | a dimension per active tablespace | % |\n\n",integration_type:"collector",id:"python.d.plugin-oracledb-Oracle_DB",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/oracledb/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"pandas",monitored_instance:{name:"Pandas",link:"https://pandas.pydata.org/",categories:["data-collection.generic-data-collection"],icon_filename:"pandas.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["pandas","python"],most_popular:!1},overview:"# Pandas\n\nPlugin: python.d.plugin\nModule: pandas\n\n## Overview\n\n[Pandas](https://pandas.pydata.org/) is a de-facto standard in reading and processing most types of structured data in Python.\nIf you have metrics appearing in a CSV, JSON, XML, HTML, or [other supported format](https://pandas.pydata.org/docs/user_guide/io.html),\neither locally or via some HTTP endpoint, you can easily ingest and present those metrics in Netdata, by leveraging the Pandas collector.\n\nThis collector can be used to collect pretty much anything that can be read by Pandas, and then processed by Pandas.\n\n\nThe collector uses [pandas](https://pandas.pydata.org/) to pull data and do pandas-based preprocessing, before feeding to Netdata.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Python Requirements\n\nThis collector depends on some Python (Python 3 only) packages that can usually be installed via `pip` or `pip3`.\n\n```bash\nsudo pip install pandas requests\n```\n\nNote: If you would like to use [`pandas.read_sql`](https://pandas.pydata.org/docs/reference/api/pandas.read_sql.html) to query a database, you will need to install the below packages as well.\n\n```bash\nsudo pip install 'sqlalchemy<2.0' psycopg2-binary\n```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/pandas.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/pandas.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| chart_configs | an array of chart configuration dictionaries | [] | yes |\n| chart_configs.name | name of the chart to be displayed in the dashboard. | None | yes |\n| chart_configs.title | title of the chart to be displayed in the dashboard. | None | yes |\n| chart_configs.family | [family](/docs/dashboards-and-charts/netdata-charts.md#families) of the chart to be displayed in the dashboard. | None | yes |\n| chart_configs.context | [context](/docs/dashboards-and-charts/netdata-charts.md#contexts) of the chart to be displayed in the dashboard. | None | yes |\n| chart_configs.type | the type of the chart to be displayed in the dashboard. | None | yes |\n| chart_configs.units | the units of the chart to be displayed in the dashboard. | None | yes |\n| chart_configs.df_steps | a series of pandas operations (one per line) that each returns a dataframe. | None | yes |\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### Temperature API Example\n\nexample pulling some hourly temperature data, a chart for today forecast (mean,min,max) and another chart for current.\n\n{% details open=true summary=\"Config\" %}\n```yaml\ntemperature:\n name: \"temperature\"\n update_every: 5\n chart_configs:\n - name: \"temperature_forecast_by_city\"\n title: \"Temperature By City - Today Forecast\"\n family: \"temperature.today\"\n context: \"pandas.temperature\"\n type: \"line\"\n units: \"Celsius\"\n df_steps: >\n pd.DataFrame.from_dict(\n {city: requests.get(f'https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}&hourly=temperature_2m').json()['hourly']['temperature_2m']\n for (city,lat,lng)\n in [\n ('dublin', 53.3441, -6.2675),\n ('athens', 37.9792, 23.7166),\n ('london', 51.5002, -0.1262),\n ('berlin', 52.5235, 13.4115),\n ('paris', 48.8567, 2.3510),\n ('madrid', 40.4167, -3.7033),\n ('new_york', 40.71, -74.01),\n ('los_angeles', 34.05, -118.24),\n ]\n }\n );\n df.describe(); # get aggregate stats for each city;\n df.transpose()[['mean', 'max', 'min']].reset_index(); # just take mean, min, max;\n df.rename(columns={'index':'city'}); # some column renaming;\n df.pivot(columns='city').mean().to_frame().reset_index(); # force to be one row per city;\n df.rename(columns={0:'degrees'}); # some column renaming;\n pd.concat([df, df['city']+'_'+df['level_0']], axis=1); # add new column combining city and summary measurement label;\n df.rename(columns={0:'measurement'}); # some column renaming;\n df[['measurement', 'degrees']].set_index('measurement'); # just take two columns we want;\n df.sort_index(); # sort by city name;\n df.transpose(); # transpose so its just one wide row;\n - name: \"temperature_current_by_city\"\n title: \"Temperature By City - Current\"\n family: \"temperature.current\"\n context: \"pandas.temperature\"\n type: \"line\"\n units: \"Celsius\"\n df_steps: >\n pd.DataFrame.from_dict(\n {city: requests.get(f'https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lng}¤t_weather=true').json()['current_weather']\n for (city,lat,lng)\n in [\n ('dublin', 53.3441, -6.2675),\n ('athens', 37.9792, 23.7166),\n ('london', 51.5002, -0.1262),\n ('berlin', 52.5235, 13.4115),\n ('paris', 48.8567, 2.3510),\n ('madrid', 40.4167, -3.7033),\n ('new_york', 40.71, -74.01),\n ('los_angeles', 34.05, -118.24),\n ]\n }\n );\n df.transpose();\n df[['temperature']];\n df.transpose();\n\n```\n{% /details %}\n##### API CSV Example\n\nexample showing a read_csv from a url and some light pandas data wrangling.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nexample_csv:\n name: \"example_csv\"\n update_every: 2\n chart_configs:\n - name: \"london_system_cpu\"\n title: \"London System CPU - Ratios\"\n family: \"london_system_cpu\"\n context: \"pandas\"\n type: \"line\"\n units: \"n\"\n df_steps: >\n pd.read_csv('https://london.my-netdata.io/api/v1/data?chart=system.cpu&format=csv&after=-60', storage_options={'User-Agent': 'netdata'});\n df.drop('time', axis=1);\n df.mean().to_frame().transpose();\n df.apply(lambda row: (row.user / row.system), axis = 1).to_frame();\n df.rename(columns={0:'average_user_system_ratio'});\n df*100;\n\n```\n{% /details %}\n##### API JSON Example\n\nexample showing a read_json from a url and some light pandas data wrangling.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nexample_json:\n name: \"example_json\"\n update_every: 2\n chart_configs:\n - name: \"london_system_net\"\n title: \"London System Net - Total Bandwidth\"\n family: \"london_system_net\"\n context: \"pandas\"\n type: \"area\"\n units: \"kilobits/s\"\n df_steps: >\n pd.DataFrame(requests.get('https://london.my-netdata.io/api/v1/data?chart=system.net&format=json&after=-1').json()['data'], columns=requests.get('https://london.my-netdata.io/api/v1/data?chart=system.net&format=json&after=-1').json()['labels']);\n df.drop('time', axis=1);\n abs(df);\n df.sum(axis=1).to_frame();\n df.rename(columns={0:'total_bandwidth'});\n\n```\n{% /details %}\n##### XML Example\n\nexample showing a read_xml from a url and some light pandas data wrangling.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nexample_xml:\n name: \"example_xml\"\n update_every: 2\n line_sep: \"|\"\n chart_configs:\n - name: \"temperature_forcast\"\n title: \"Temperature Forecast\"\n family: \"temp\"\n context: \"pandas.temp\"\n type: \"line\"\n units: \"celsius\"\n df_steps: >\n pd.read_xml('http://metwdb-openaccess.ichec.ie/metno-wdb2ts/locationforecast?lat=54.7210798611;long=-8.7237392806', xpath='./product/time[1]/location/temperature', parser='etree')|\n df.rename(columns={'value': 'dublin'})|\n df[['dublin']]|\n\n```\n{% /details %}\n##### SQL Example\n\nexample showing a read_sql from a postgres database using sqlalchemy.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nsql:\n name: \"sql\"\n update_every: 5\n chart_configs:\n - name: \"sql\"\n title: \"SQL Example\"\n family: \"sql.example\"\n context: \"example\"\n type: \"line\"\n units: \"percent\"\n df_steps: >\n pd.read_sql_query(\n sql='\\\n select \\\n random()*100 as metric_1, \\\n random()*100 as metric_2 \\\n ',\n con=create_engine('postgresql://localhost/postgres?user=netdata&password=netdata')\n );\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `pandas` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin pandas debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nThis collector is expecting one row in the final pandas DataFrame. It is that first row that will be taken\nas the most recent values for each dimension on each chart using (`df.to_dict(orient='records')[0]`).\nSee [pd.to_dict()](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_dict.html).\"\n\n\n### Per Pandas instance\n\nThese metrics refer to the entire monitored application.\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n\n",integration_type:"collector",id:"python.d.plugin-pandas-Pandas",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/pandas/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"postfix",monitored_instance:{name:"Postfix",link:"https://www.postfix.org/",categories:["data-collection.mail-servers"],icon_filename:"postfix.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["postfix","mail","mail server"],most_popular:!1},overview:"# Postfix\n\nPlugin: python.d.plugin\nModule: postfix\n\n## Overview\n\nKeep an eye on Postfix metrics for efficient mail server operations. \nImprove your mail server performance with Netdata's real-time metrics and built-in alerts.\n\n\nMonitors MTA email queue statistics using [postqueue](http://www.postfix.org/postqueue.1.html) tool.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nPostfix has internal access controls that limit activities on the mail queue. By default, all users are allowed to view the queue. If your system is configured with stricter access controls, you need to grant the `netdata` user access to view the mail queue. In order to do it, add `netdata` to `authorized_mailq_users` in the `/etc/postfix/main.cf` file.\nSee the `authorized_mailq_users` setting in the [Postfix documentation](https://www.postfix.org/postconf.5.html) for more details.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe collector executes `postqueue -p` to get Postfix queue statistics.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThere is no configuration file.\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 1 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `postfix` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin postfix debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Postfix instance\n\nThese metrics refer to the entire monitored application.\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| postfix.qemails | emails | emails |\n| postfix.qsize | size | KiB |\n\n",integration_type:"collector",id:"python.d.plugin-postfix-Postfix",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/postfix/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"puppet",monitored_instance:{name:"Puppet",link:"https://www.puppet.com/",categories:["data-collection.ci-cd-systems"],icon_filename:"puppet.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["puppet","jvm heap"],most_popular:!1},overview:"# Puppet\n\nPlugin: python.d.plugin\nModule: puppet\n\n## Overview\n\nThis collector monitors Puppet metrics about JVM Heap, Non-Heap, CPU usage and file descriptors.'\n\n\nIt uses Puppet's metrics API endpoint to gather the metrics.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, this collector will use `https://fqdn.example.com:8140` as the URL to look for metrics.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/puppet.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/puppet.conf\n```\n#### Options\n\nThis particular collector does not need further configuration to work if permissions are satisfied, but you can always customize it's data collection behavior.\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n> Notes:\n> - Exact Fully Qualified Domain Name of the node should be used.\n> - Usually Puppet Server/DB startup time is VERY long. So, there should be quite reasonable retry count.\n> - A secured PuppetDB config may require a client certificate. This does not apply to the default PuppetDB configuration though.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| url | HTTP or HTTPS URL, exact Fully Qualified Domain Name of the node should be used. | https://fqdn.example.com:8081 | yes |\n| tls_verify | Control HTTPS server certificate verification. | False | no |\n| tls_ca_file | Optional CA (bundle) file to use | | no |\n| tls_cert_file | Optional client certificate file | | no |\n| tls_key_file | Optional client key file | | no |\n| update_every | Sets the default data collection frequency. | 30 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration\n\n```yaml\npuppetserver:\n url: 'https://fqdn.example.com:8140'\n autodetection_retry: 1\n\n```\n##### TLS Certificate\n\nAn example using a TLS certificate\n\n{% details open=true summary=\"Config\" %}\n```yaml\npuppetdb:\n url: 'https://fqdn.example.com:8081'\n tls_cert_file: /path/to/client.crt\n tls_key_file: /path/to/client.key\n autodetection_retry: 1\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\npuppetserver1:\n url: 'https://fqdn.example.com:8140'\n autodetection_retry: 1\n\npuppetserver2:\n url: 'https://fqdn.example2.com:8140'\n autodetection_retry: 1\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `puppet` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin puppet debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Puppet instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| puppet.jvm_heap | committed, used | MiB |\n| puppet.jvm_nonheap | committed, used | MiB |\n| puppet.cpu | execution, GC | percentage |\n| puppet.fdopen | used | descriptors |\n\n",integration_type:"collector",id:"python.d.plugin-puppet-Puppet",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/puppet/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"rethinkdbs",monitored_instance:{name:"RethinkDB",link:"https://rethinkdb.com/",categories:["data-collection.database-servers"],icon_filename:"rethinkdb.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["rethinkdb","database","db"],most_popular:!1},overview:"# RethinkDB\n\nPlugin: python.d.plugin\nModule: rethinkdbs\n\n## Overview\n\nThis collector monitors metrics about RethinkDB clusters and database servers.\n\nIt uses the `rethinkdb` python module to connect to a RethinkDB server instance and gather statistics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nWhen no configuration file is found, the collector tries to connect to 127.0.0.1:28015.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Required python module\n\nThe collector requires the `rethinkdb` python module to be installed.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/rethinkdbs.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/rethinkdbs.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| host | Hostname or ip of the RethinkDB server. | localhost | no |\n| port | Port to connect to the RethinkDB server. | 28015 | no |\n| user | The username to use to connect to the RethinkDB server. | admin | no |\n| password | The password to use to connect to the RethinkDB server. | | no |\n| timeout | Set a connect timeout to the RethinkDB server. | 2 | no |\n\n{% /details %}\n#### Examples\n\n##### Local RethinkDB server\n\nAn example of a configuration for a local RethinkDB server\n\n```yaml\nlocalhost:\n name: \'local\'\n host: \'127.0.0.1\'\n port: 28015\n user: "user"\n password: "pass"\n\n```\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `rethinkdbs` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin rethinkdbs debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per RethinkDB instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| rethinkdb.cluster_connected_servers | connected, missing | servers |\n| rethinkdb.cluster_clients_active | active | clients |\n| rethinkdb.cluster_queries | queries | queries/s |\n| rethinkdb.cluster_documents | reads, writes | documents/s |\n\n### Per database server\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| rethinkdb.client_connections | connections | connections |\n| rethinkdb.clients_active | active | clients |\n| rethinkdb.queries | queries | queries/s |\n| rethinkdb.documents | reads, writes | documents/s |\n\n",integration_type:"collector",id:"python.d.plugin-rethinkdbs-RethinkDB",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/rethinkdbs/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"retroshare",monitored_instance:{name:"RetroShare",link:"https://retroshare.cc/",categories:["data-collection.media-streaming-servers"],icon_filename:"retroshare.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["retroshare","p2p"],most_popular:!1},overview:"# RetroShare\n\nPlugin: python.d.plugin\nModule: retroshare\n\n## Overview\n\nThis collector monitors RetroShare statistics such as application bandwidth, peers, and DHT metrics.\n\nIt connects to the RetroShare web interface to gather metrics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe collector will attempt to connect and detect a RetroShare web interface through http://localhost:9090, even without any configuration.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### RetroShare web interface\n\nRetroShare needs to be configured to enable the RetroShare WEB Interface and allow access from the Netdata host.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/retroshare.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/retroshare.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| url | The URL to the RetroShare Web UI. | http://localhost:9090 | no |\n\n{% /details %}\n#### Examples\n\n##### Local RetroShare Web UI\n\nA basic configuration for a RetroShare server running on localhost.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocalhost:\n name: 'local retroshare'\n url: 'http://localhost:9090'\n\n```\n{% /details %}\n##### Remote RetroShare Web UI\n\nA basic configuration for a remote RetroShare server.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nremote:\n name: 'remote retroshare'\n url: 'http://1.2.3.4:9090'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `retroshare` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin retroshare debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ retroshare_dht_working ](https://github.com/netdata/netdata/blob/master/src/health/health.d/retroshare.conf) | retroshare.dht | number of DHT peers |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per RetroShare instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| retroshare.bandwidth | Upload, Download | kilobits/s |\n| retroshare.peers | All friends, Connected friends | peers |\n| retroshare.dht | DHT nodes estimated, RS nodes estimated | peers |\n\n",integration_type:"collector",id:"python.d.plugin-retroshare-RetroShare",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/retroshare/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"riakkv",monitored_instance:{name:"RiakKV",link:"https://riak.com/products/riak-kv/index.html",categories:["data-collection.database-servers"],icon_filename:"riak.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["database","nosql","big data"],most_popular:!1},overview:"# RiakKV\n\nPlugin: python.d.plugin\nModule: riakkv\n\n## Overview\n\nThis collector monitors RiakKV metrics about throughput, latency, resources and more.'\n\n\nThis collector reads the database stats from the `/stats` endpoint.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf the /stats endpoint is accessible, RiakKV instances on the local host running on port 8098 will be autodetected.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Configure RiakKV to enable /stats endpoint\n\nYou can follow the RiakKV configuration reference documentation for how to enable this.\n\nSource : https://docs.riak.com/riak/kv/2.2.3/configuring/reference/#client-interfaces\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/riakkv.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/riakkv.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| url | The url of the server | no | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic (default)\n\nA basic example configuration per job\n\n```yaml\nlocal:\nurl: 'http://localhost:8098/stats'\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal:\n url: 'http://localhost:8098/stats'\n\nremote:\n url: 'http://192.0.2.1:8098/stats'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `riakkv` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin riakkv debug trace\n ```\n\n",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ riakkv_1h_kv_get_mean_latency ](https://github.com/netdata/netdata/blob/master/src/health/health.d/riakkv.conf) | riak.kv.latency.get | average time between reception of client GET request and subsequent response to client over the last hour |\n| [ riakkv_kv_get_slow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/riakkv.conf) | riak.kv.latency.get | average time between reception of client GET request and subsequent response to the client over the last 3 minutes, compared to the average over the last hour |\n| [ riakkv_1h_kv_put_mean_latency ](https://github.com/netdata/netdata/blob/master/src/health/health.d/riakkv.conf) | riak.kv.latency.put | average time between reception of client PUT request and subsequent response to the client over the last hour |\n| [ riakkv_kv_put_slow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/riakkv.conf) | riak.kv.latency.put | average time between reception of client PUT request and subsequent response to the client over the last 3 minutes, compared to the average over the last hour |\n| [ riakkv_vm_high_process_count ](https://github.com/netdata/netdata/blob/master/src/health/health.d/riakkv.conf) | riak.vm | number of processes running in the Erlang VM |\n| [ riakkv_list_keys_active ](https://github.com/netdata/netdata/blob/master/src/health/health.d/riakkv.conf) | riak.core.fsm_active | number of currently running list keys finite state machines |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per RiakKV instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| riak.kv.throughput | gets, puts | operations/s |\n| riak.dt.vnode_updates | counters, sets, maps | operations/s |\n| riak.search | queries | queries/s |\n| riak.search.documents | indexed | documents/s |\n| riak.consistent.operations | gets, puts | operations/s |\n| riak.kv.latency.get | mean, median, 95, 99, 100 | ms |\n| riak.kv.latency.put | mean, median, 95, 99, 100 | ms |\n| riak.dt.latency.counter_merge | mean, median, 95, 99, 100 | ms |\n| riak.dt.latency.set_merge | mean, median, 95, 99, 100 | ms |\n| riak.dt.latency.map_merge | mean, median, 95, 99, 100 | ms |\n| riak.search.latency.query | median, min, 95, 99, 999, max | ms |\n| riak.search.latency.index | median, min, 95, 99, 999, max | ms |\n| riak.consistent.latency.get | mean, median, 95, 99, 100 | ms |\n| riak.consistent.latency.put | mean, median, 95, 99, 100 | ms |\n| riak.vm | processes | total |\n| riak.vm.memory.processes | allocated, used | MB |\n| riak.kv.siblings_encountered.get | mean, median, 95, 99, 100 | siblings |\n| riak.kv.objsize.get | mean, median, 95, 99, 100 | KB |\n| riak.search.vnodeq_size | mean, median, 95, 99, 100 | messages |\n| riak.search.index | errors | errors |\n| riak.core.protobuf_connections | active | connections |\n| riak.core.repairs | read | repairs |\n| riak.core.fsm_active | get, put, secondary index, list keys | fsms |\n| riak.core.fsm_rejected | get, put | fsms |\n| riak.search.index | bad_entry, extract_fail | writes |\n\n",integration_type:"collector",id:"python.d.plugin-riakkv-RiakKV",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/riakkv/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"samba",monitored_instance:{name:"Samba",link:"https://www.samba.org/samba/",categories:["data-collection.storage-mount-points-and-filesystems"],icon_filename:"samba.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["samba","file sharing"],most_popular:!1},overview:"# Samba\n\nPlugin: python.d.plugin\nModule: samba\n\n## Overview\n\nThis collector monitors the performance metrics of Samba file sharing.\n\nIt is using the `smbstatus` command-line tool.\n\nExecuted commands:\n\n- `sudo -n smbstatus -P`\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n`smbstatus` is used, which can only be executed by `root`. It uses `sudo` and assumes that it is configured such that the `netdata` user can execute `smbstatus` as root without a password.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nAfter all the permissions are satisfied, the `smbstatus -P` binary is executed.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Enable the samba collector\n\nThe `samba` collector is disabled by default. To enable it, use `edit-config` from the Netdata [config directory](/docs/netdata-agent/configuration/README.md), which is typically at `/etc/netdata`, to edit the `python.d.conf` file.\n\n```bash\ncd /etc/netdata # Replace this path with your Netdata config directory, if different\nsudo ./edit-config python.d.conf\n```\nChange the value of the `samba` setting to `yes`. Save the file and restart the Netdata Agent with `sudo systemctl restart netdata`, or the [appropriate method](/packaging/installer/README.md#maintaining-a-netdata-agent-installation) for your system.\n\n\n#### Permissions and programs\n\nTo run the collector you need:\n\n- `smbstatus` program\n- `sudo` program\n- `smbd` must be compiled with profiling enabled\n- `smbd` must be started either with the `-P 1` option or inside `smb.conf` using `smbd profiling level`\n\nThe module uses `smbstatus`, which can only be executed by `root`. It uses `sudo` and assumes that it is configured such that the `netdata` user can execute `smbstatus` as root without a password.\n\n- add to your `/etc/sudoers` file:\n\n `which smbstatus` shows the full path to the binary.\n\n ```bash\n netdata ALL=(root) NOPASSWD: /path/to/smbstatus\n ```\n\n- Reset Netdata's systemd unit [CapabilityBoundingSet](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Capabilities) (Linux distributions with systemd)\n\n The default CapabilityBoundingSet doesn't allow using `sudo`, and is quite strict in general. Resetting is not optimal, but a next-best solution given the inability to execute `smbstatus` using `sudo`.\n\n\n As the `root` user, do the following:\n\n ```cmd\n mkdir /etc/systemd/system/netdata.service.d\n echo -e '[Service]\\nCapabilityBoundingSet=~' | tee /etc/systemd/system/netdata.service.d/unset-capability-bounding-set.conf\n systemctl daemon-reload\n systemctl restart netdata.service\n ```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/samba.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/samba.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nmy_job_name:\n name: my_name\n update_every: 1\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `samba` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin samba debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Samba instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| syscall.rw | sendfile, recvfile | KiB/s |\n| smb2.rw | readout, writein, readin, writeout | KiB/s |\n| smb2.create_close | create, close | operations/s |\n| smb2.get_set_info | getinfo, setinfo | operations/s |\n| smb2.find | find | operations/s |\n| smb2.notify | notify | operations/s |\n| smb2.sm_counters | tcon, negprot, tdis, cancel, logoff, flush, lock, keepalive, break, sessetup | count |\n\n",integration_type:"collector",id:"python.d.plugin-samba-Samba",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/samba/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"spigotmc",monitored_instance:{name:"SpigotMC",link:"",categories:["data-collection.gaming"],icon_filename:"spigot.jfif"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["minecraft server","spigotmc server","spigot"],most_popular:!1},overview:"# SpigotMC\n\nPlugin: python.d.plugin\nModule: spigotmc\n\n## Overview\n\nThis collector monitors SpigotMC server performance, in the form of ticks per second average, memory utilization, and active users.\n\n\nIt sends the `tps`, `list` and `online` commands to the Server, and gathers the metrics from the responses.\n\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, this collector will attempt to connect to a Spigot server running on the local host on port `25575`.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Enable the Remote Console Protocol\n\nUnder your SpigotMC server\'s `server.properties` configuration file, you should set `enable-rcon` to `true`.\n\nThis will allow the Server to listen and respond to queries over the rcon protocol.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/spigotmc.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/spigotmc.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 1 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| host | The host\'s IP to connect to. | localhost | yes |\n| port | The port the remote console is listening on. | 25575 | yes |\n| password | Remote console password if any. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic configuration example.\n\n```yaml\nlocal:\n name: local_server\n url: 127.0.0.1\n port: 25575\n\n```\n##### Basic Authentication\n\nAn example using basic password for authentication with the remote console.\n\n{% details open=true summary="Config" %}\n```yaml\nlocal:\n name: local_server_pass\n url: 127.0.0.1\n port: 25575\n password: \'foobar\'\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary="Config" %}\n```yaml\nlocal_server:\n name : my_local_server\n url : 127.0.0.1\n port: 25575\n\nremote_server:\n name : another_remote_server\n url : 192.0.2.1\n port: 25575\n\n```\n{% /details %}\n',troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `spigotmc` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin spigotmc debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per SpigotMC instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| spigotmc.tps | 1 Minute Average, 5 Minute Average, 15 Minute Average | ticks |\n| spigotmc.users | Users | users |\n| spigotmc.mem | used, allocated, max | MiB |\n\n",integration_type:"collector",id:"python.d.plugin-spigotmc-SpigotMC",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/spigotmc/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"squid",monitored_instance:{name:"Squid",link:"http://www.squid-cache.org/",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"squid.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["squid","web delivery","squid caching proxy"],most_popular:!1},overview:"# Squid\n\nPlugin: python.d.plugin\nModule: squid\n\n## Overview\n\nThis collector monitors statistics about the Squid Clients and Servers, like bandwidth and requests.\n\n\nIt collects metrics from the endpoint where Squid exposes its `counters` data.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, this collector will try to autodetect where Squid presents its `counters` data, by trying various configurations.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Configure Squid's Cache Manager\n\nTake a look at [Squid's official documentation](https://wiki.squid-cache.org/Features/CacheManager/Index#controlling-access-to-the-cache-manager) on how to configure access to the Cache Manager.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/squid.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/squid.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 1 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | local | no |\n| host | The host to connect to. | | yes |\n| port | The port to connect to. | | yes |\n| request | The URL to request from Squid. | | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic configuration example.\n\n```yaml\nexample_job_name:\n name: 'local'\n host: 'localhost'\n port: 3128\n request: 'cache_object://localhost:3128/counters'\n\n```\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal_job:\n name: 'local'\n host: '127.0.0.1'\n port: 3128\n request: 'cache_object://127.0.0.1:3128/counters'\n\nremote_job:\n name: 'remote'\n host: '192.0.2.1'\n port: 3128\n request: 'cache_object://192.0.2.1:3128/counters'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `squid` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin squid debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Squid instance\n\nThese metrics refer to each monitored Squid instance.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| squid.clients_net | in, out, hits | kilobits/s |\n| squid.clients_requests | requests, hits, errors | requests/s |\n| squid.servers_net | in, out | kilobits/s |\n| squid.servers_requests | requests, errors | requests/s |\n\n",integration_type:"collector",id:"python.d.plugin-squid-Squid",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/squid/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"tomcat",monitored_instance:{name:"Tomcat",link:"https://tomcat.apache.org/",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"tomcat.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["apache","tomcat","webserver","websocket","jakarta","javaEE"],most_popular:!1},overview:"# Tomcat\n\nPlugin: python.d.plugin\nModule: tomcat\n\n## Overview\n\nThis collector monitors Tomcat metrics about bandwidth, processing time, threads and more.\n\n\nIt parses the information provided by the http endpoint of the `/manager/status` in XML format\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nYou need to provide the username and the password, to access the webserver's status page. Create a seperate user with read only rights for this particular endpoint\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf the Netdata Agent and the Tomcat webserver are in the same host, without configuration, module attempts to connect to http://localhost:8080/manager/status?XML=true, without any credentials. So it will probably fail.\n\n#### Limits\n\nThis module is not supporting SSL communication. If you want a Netdata Agent to monitor a Tomcat deployment, you shouldnt try to monitor it via public network (public internet). Credentials are passed by Netdata in an unsecure port\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Create a read-only `netdata` user, to monitor the `/status` endpoint.\n\nThis is necessary for configuring the collector.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/tomcat.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/tomcat.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.Additionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options per job\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| url | The URL of the Tomcat server's status endpoint. Always add the suffix ?XML=true. | no | yes |\n| user | A valid user with read permission to access the /manager/status endpoint of the server. Required if the endpoint is password protected | no | no |\n| pass | A valid password for the user in question. Required if the endpoint is password protected | no | no |\n| connector_name | The connector component that communicates with a web connector via the AJP protocol, e.g ajp-bio-8009 | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration\n\n```yaml\nlocalhost:\n name : 'local'\n url : 'http://localhost:8080/manager/status?XML=true'\n\n```\n##### Using an IPv4 endpoint\n\nA typical configuration using an IPv4 endpoint\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal_ipv4:\n name : 'local'\n url : 'http://127.0.0.1:8080/manager/status?XML=true'\n\n```\n{% /details %}\n##### Using an IPv6 endpoint\n\nA typical configuration using an IPv6 endpoint\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal_ipv6:\n name : 'local'\n url : 'http://[::1]:8080/manager/status?XML=true'\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `tomcat` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin tomcat debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Tomcat instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| tomcat.accesses | accesses, errors | requests/s |\n| tomcat.bandwidth | sent, received | KiB/s |\n| tomcat.processing_time | processing time | seconds |\n| tomcat.threads | current, busy | current threads |\n| tomcat.jvm | free, eden, survivor, tenured, code cache, compressed, metaspace | MiB |\n| tomcat.jvm_eden | used, committed, max | MiB |\n| tomcat.jvm_survivor | used, committed, max | MiB |\n| tomcat.jvm_tenured | used, committed, max | MiB |\n\n",integration_type:"collector",id:"python.d.plugin-tomcat-Tomcat",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/tomcat/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"tor",monitored_instance:{name:"Tor",link:"https://www.torproject.org/",categories:["data-collection.vpns"],icon_filename:"tor.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["tor","traffic","vpn"],most_popular:!1},overview:"# Tor\n\nPlugin: python.d.plugin\nModule: tor\n\n## Overview\n\nThis collector monitors Tor bandwidth traffic .\n\nIt connects to the Tor control port to collect traffic statistics.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nIf no configuration is provided the collector will try to connect to 127.0.0.1:9051 to detect a running tor instance.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Required python module\n\nThe `stem` python library needs to be installed.\n\n\n#### Required Tor configuration\n\nAdd to /etc/tor/torrc:\n\nControlPort 9051\n\nFor more options please read the manual.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/tor.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/tor.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| control_addr | Tor control IP address | 127.0.0.1 | no |\n| control_port | Tor control port. Can be either a tcp port, or a path to a socket file. | 9051 | no |\n| password | Tor control password | | no |\n\n{% /details %}\n#### Examples\n\n##### Local TCP\n\nA basic TCP configuration. `local_addr` is ommited and will default to `127.0.0.1`\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal_tcp:\n name: 'local'\n control_port: 9051\n password: # if required\n\n```\n{% /details %}\n##### Local socket\n\nA basic local socket configuration\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal_socket:\n name: 'local'\n control_port: '/var/run/tor/control'\n password: # if required\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `tor` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin tor debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Tor instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| tor.traffic | read, write | KiB/s |\n\n",integration_type:"collector",id:"python.d.plugin-tor-Tor",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/tor/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"uwsgi",monitored_instance:{name:"uWSGI",link:"https://github.com/unbit/uwsgi/tree/2.0.21",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"uwsgi.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["application server","python","web applications"],most_popular:!1},overview:"# uWSGI\n\nPlugin: python.d.plugin\nModule: uwsgi\n\n## Overview\n\nThis collector monitors uWSGI metrics about requests, workers, memory and more.\n\nIt collects every metric exposed from the stats server of uWSGI, either from the `stats.socket` or from the web server's TCP/IP socket.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis collector will auto-detect uWSGI instances deployed on the local host, running on port 1717, or exposing stats on socket `tmp/stats.socket`.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Enable the uWSGI Stats server\n\nMake sure that you uWSGI exposes it's metrics via a Stats server.\n\nSource: https://uwsgi-docs.readthedocs.io/en/latest/StatsServer.html\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/uwsgi.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/uwsgi.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | The JOB's name as it will appear at the dashboard (by default is the job_name) | job_name | no |\n| socket | The 'path/to/uwsgistats.sock' | no | no |\n| host | The host to connect to | no | no |\n| port | The port to connect to | no | no |\n\n{% /details %}\n#### Examples\n\n##### Basic (default out-of-the-box)\n\nA basic example configuration, one job will run at a time. Autodetect mechanism uses it by default. As all JOBs have the same name, only one can run at a time.\n\n{% details open=true summary=\"Config\" %}\n```yaml\nsocket:\n name : 'local'\n socket : '/tmp/stats.socket'\n\nlocalhost:\n name : 'local'\n host : 'localhost'\n port : 1717\n\nlocalipv4:\n name : 'local'\n host : '127.0.0.1'\n port : 1717\n\nlocalipv6:\n name : 'local'\n host : '::1'\n port : 1717\n\n```\n{% /details %}\n##### Multi-instance\n\n> **Note**: When you define multiple jobs, their names must be unique.\n\nCollecting metrics from local and remote instances.\n\n\n{% details open=true summary=\"Config\" %}\n```yaml\nlocal:\n name : 'local'\n host : 'localhost'\n port : 1717\n\nremote:\n name : 'remote'\n host : '192.0.2.1'\n port : 1717\n\n```\n{% /details %}\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `uwsgi` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin uwsgi debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per uWSGI instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| uwsgi.requests | a dimension per worker | requests/s |\n| uwsgi.tx | a dimension per worker | KiB/s |\n| uwsgi.avg_rt | a dimension per worker | milliseconds |\n| uwsgi.memory_rss | a dimension per worker | MiB |\n| uwsgi.memory_vsz | a dimension per worker | MiB |\n| uwsgi.exceptions | exceptions | exceptions |\n| uwsgi.harakiris | harakiris | harakiris |\n| uwsgi.respawns | respawns | respawns |\n\n",integration_type:"collector",id:"python.d.plugin-uwsgi-uWSGI",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/uwsgi/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"varnish",monitored_instance:{name:"Varnish",link:"https://varnish-cache.org/",categories:["data-collection.web-servers-and-web-proxies"],icon_filename:"varnish.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["varnish","varnishstat","varnishd","cache","web server","web cache"],most_popular:!1},overview:"# Varnish\n\nPlugin: python.d.plugin\nModule: varnish\n\n## Overview\n\nThis collector monitors Varnish metrics about HTTP accelerator global, Backends (VBE) and Storages (SMF, SMA, MSE) statistics.\n\nNote that both, Varnish-Cache (free and open source) and Varnish-Plus (Commercial/Enterprise version), are supported.\n\n\nIt uses the `varnishstat` tool in order to collect the metrics.\n\n\nThis collector is supported on all platforms.\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\n`netdata` user must be a member of the `varnish` group.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nBy default, if the permissions are satisfied, the `varnishstat` tool will be executed on the host.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Provide the necessary permissions\n\nIn order for the collector to work, you need to add the `netdata` user to the `varnish` user group, so that it can execute the `varnishstat` tool:\n\n```\nusermod -aG varnish netdata\n```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/varnish.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/varnish.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| instance_name | the name of the varnishd instance to get logs from. If not specified, the local host name is used. | | yes |\n| update_every | Sets the default data collection frequency. | 10 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nAn example configuration.\n\n```yaml\njob_name:\n instance_name: ''\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `varnish` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin varnish debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Varnish instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| varnish.session_connection | accepted, dropped | connections/s |\n| varnish.client_requests | received | requests/s |\n| varnish.all_time_hit_rate | hit, miss, hitpass | percentage |\n| varnish.current_poll_hit_rate | hit, miss, hitpass | percentage |\n| varnish.cached_objects_expired | objects | expired/s |\n| varnish.cached_objects_nuked | objects | nuked/s |\n| varnish.threads_total | None | number |\n| varnish.threads_statistics | created, failed, limited | threads/s |\n| varnish.threads_queue_len | in queue | requests |\n| varnish.backend_connections | successful, unhealthy, reused, closed, recycled, failed | connections/s |\n| varnish.backend_requests | sent | requests/s |\n| varnish.esi_statistics | errors, warnings | problems/s |\n| varnish.memory_usage | free, allocated | MiB |\n| varnish.uptime | uptime | seconds |\n\n### Per Backend\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| varnish.backend | header, body | kilobits/s |\n\n### Per Storage\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| varnish.storage_usage | free, allocated | KiB |\n| varnish.storage_alloc_objs | allocated | objects |\n\n",integration_type:"collector",id:"python.d.plugin-varnish-Varnish",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/varnish/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"w1sensor",monitored_instance:{name:"1-Wire Sensors",link:"https://www.analog.com/en/product-category/1wire-temperature-sensors.html",categories:["data-collection.hardware-devices-and-sensors"],icon_filename:"1-wire.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["temperature","sensor","1-wire"],most_popular:!1},overview:"# 1-Wire Sensors\n\nPlugin: python.d.plugin\nModule: w1sensor\n\n## Overview\n\nMonitor 1-Wire Sensors metrics with Netdata for optimal environmental conditions monitoring. Enhance your environmental monitoring with real-time insights and alerts.\n\nThe collector uses the wire, w1_gpio, and w1_therm kernel modules. Currently temperature sensors are supported and automatically detected.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThe collector will try to auto detect available 1-Wire devices.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Required Linux kernel modules\n\nMake sure `wire`, `w1_gpio`, and `w1_therm` kernel modules are loaded.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/w1sensor.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/w1sensor.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n| name | Job name. This value will overwrite the `job_name` value. JOBS with the same name are mutually exclusive. Only one of them will be allowed running at any time. This allows autodetection to try several alternatives and pick the one that works. | | no |\n| name_<1-Wire id> | This allows associating a human readable name with a sensor's 1-Wire identifier. | | no |\n\n{% /details %}\n#### Examples\n\n##### Provide human readable names\n\nAssociate two 1-Wire identifiers with human readable names.\n\n```yaml\nsensors:\n name_00000022276e: 'Machine room'\n name_00000022298f: 'Rack 12'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `w1sensor` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin w1sensor debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per 1-Wire Sensors instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| w1sensor.temp | a dimension per sensor | Celsius |\n\n",integration_type:"collector",id:"python.d.plugin-w1sensor-1-Wire_Sensors",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/w1sensor/metadata.yaml",related_resources:""},{meta:{plugin_name:"python.d.plugin",module_name:"zscores",monitored_instance:{name:"python.d zscores",link:"https://en.wikipedia.org/wiki/Standard_score",categories:["data-collection.other"],icon_filename:""},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["zscore","z-score","standard score","standard deviation","anomaly detection","statistical anomaly detection"],most_popular:!1},overview:"# python.d zscores\n\nPlugin: python.d.plugin\nModule: zscores\n\n## Overview\n\nBy using smoothed, rolling [Z-Scores](https://en.wikipedia.org/wiki/Standard_score) for selected metrics or charts you can narrow down your focus and shorten root cause analysis.\n\n\nThis collector uses the [Netdata rest api](/src/web/api/README.md) to get the `mean` and `stddev`\nfor each dimension on specified charts over a time range (defined by `train_secs` and `offset_secs`).\n\nFor each dimension it will calculate a Z-Score as `z = (x - mean) / stddev` (clipped at `z_clip`). Scores are then smoothed over\ntime (`z_smooth_n`) and, if `mode: 'per_chart'`, aggregated across dimensions to a smoothed, rolling chart level Z-Score at each time step.\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\n#### Python Requirements\n\nThis collector will only work with Python 3 and requires the below packages be installed.\n\n```bash\n# become netdata user\nsudo su -s /bin/bash netdata\n# install required packages\npip3 install numpy pandas requests netdata-pandas==0.0.38\n```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `python.d/zscores.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config python.d/zscores.conf\n```\n#### Options\n\nThere are 2 sections:\n\n* Global variables\n* One or more JOBS that can define multiple different instances to monitor.\n\nThe following options can be defined globally: priority, penalty, autodetection_retry, update_every, but can also be defined per JOB to override the global values.\n\nAdditionally, the following collapsed table contains all the options that can be configured inside a JOB definition.\n\nEvery configuration JOB starts with a `job_name` value which will appear in the dashboard, unless a `name` parameter is specified.\n\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| charts_regex | what charts to pull data for - A regex like `system\\..*/` or `system\\..*/apps.cpu/apps.mem` etc. | system\\..* | yes |\n| train_secs | length of time (in seconds) to base calculations off for mean and stddev. | 14400 | yes |\n| offset_secs | offset (in seconds) preceding latest data to ignore when calculating mean and stddev. | 300 | yes |\n| train_every_n | recalculate the mean and stddev every n steps of the collector. | 900 | yes |\n| z_smooth_n | smooth the z score (to reduce sensitivity to spikes) by averaging it over last n values. | 15 | yes |\n| z_clip | cap absolute value of zscore (before smoothing) for better stability. | 10 | yes |\n| z_abs | set z_abs: 'true' to make all zscores be absolute values only. | true | yes |\n| burn_in | burn in period in which to initially calculate mean and stddev on every step. | 2 | yes |\n| mode | mode can be to get a zscore 'per_dim' or 'per_chart'. | per_chart | yes |\n| per_chart_agg | per_chart_agg is how you aggregate from dimension to chart when mode='per_chart'. | mean | yes |\n| update_every | Sets the default data collection frequency. | 5 | no |\n| priority | Controls the order of charts at the netdata dashboard. | 60000 | no |\n| autodetection_retry | Sets the job re-check interval in seconds. | 0 | no |\n| penalty | Indicates whether to apply penalty to update_every in case of failures. | yes | no |\n\n{% /details %}\n#### Examples\n\n##### Default\n\nDefault configuration.\n\n```yaml\nlocal:\n name: 'local'\n host: '127.0.0.1:19999'\n charts_regex: 'system\\..*'\n charts_to_exclude: 'system.uptime'\n train_secs: 14400\n offset_secs: 300\n train_every_n: 900\n z_smooth_n: 15\n z_clip: 10\n z_abs: 'true'\n burn_in: 2\n mode: 'per_chart'\n per_chart_agg: 'mean'\n\n```\n",troubleshooting:"## Troubleshooting\n\n### Debug Mode\n\nTo troubleshoot issues with the `zscores` collector, run the `python.d.plugin` with the debug option enabled. The output\nshould give you clues as to why the collector isn't working.\n\n- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on\n your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.\n\n ```bash\n cd /usr/libexec/netdata/plugins.d/\n ```\n\n- Switch to the `netdata` user.\n\n ```bash\n sudo -u netdata -s\n ```\n\n- Run the `python.d.plugin` to debug the collector:\n\n ```bash\n ./python.d.plugin zscores debug trace\n ```\n\n",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per python.d zscores instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| zscores.z | a dimension per chart or dimension | z |\n| zscores.3stddev | a dimension per chart or dimension | count |\n\n",integration_type:"collector",id:"python.d.plugin-zscores-python.d_zscores",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/python.d.plugin/zscores/metadata.yaml",related_resources:""},{meta:{plugin_name:"slabinfo.plugin",module_name:"slabinfo.plugin",monitored_instance:{name:"Linux kernel SLAB allocator statistics",link:"https://kernel.org/",categories:["data-collection.linux-systems.kernel-metrics"],icon_filename:"linuxserver.svg"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:["linux kernel","slab","slub","slob","slabinfo"],most_popular:!1},overview:"# Linux kernel SLAB allocator statistics\n\nPlugin: slabinfo.plugin\nModule: slabinfo.plugin\n\n## Overview\n\nCollects metrics on kernel SLAB cache utilization to monitor the low-level performance impact of workloads in the kernel.\n\n\nThe plugin parses `/proc/slabinfo`\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector only supports collecting metrics from a single instance of this integration.\n\nThis integration requires read access to `/proc/slabinfo`, which is accessible only to the root user by default. Netdata uses Linux Capabilities to give the plugin access to this file. `CAP_DAC_READ_SEARCH` is added automatically during installation. This capability allows bypassing file read permission checks and directory read and execute permission checks. If file capabilities are not usable, then the plugin is instead installed with the SUID bit set in permissions sVko that it runs as root.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nDue to the large number of metrics generated by this integration, it is disabled by default and must be manually enabled inside `/etc/netdata/netdata.conf`\n\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Minimum setup\n\nIf you installed `netdata` using a package manager, it is also necessary to install the package `netdata-plugin-slabinfo`.\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugins]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="The main configuration file." %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| Enable plugin | As described above plugin is disabled by default, this option is used to enable plugin. | no | yes |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\nSLAB cache utilization metrics for the whole system.\n\n### Per Linux kernel SLAB allocator statistics instance\n\n\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| mem.slabmemory | a dimension per cache | B |\n| mem.slabfilling | a dimension per cache | % |\n| mem.slabwaste | a dimension per cache | B |\n\n",integration_type:"collector",id:"slabinfo.plugin-slabinfo.plugin-Linux_kernel_SLAB_allocator_statistics",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/slabinfo.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"tc.plugin",module_name:"tc.plugin",monitored_instance:{name:"tc QoS classes",link:"https://wiki.linuxfoundation.org/networking/iproute2",categories:["data-collection.linux-systems.network-metrics"],icon_filename:"netdata.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# tc QoS classes\n\nPlugin: tc.plugin\nModule: tc.plugin\n\n## Overview\n\nExamine tc metrics to gain insights into Linux traffic control operations. Study packet flow rates, queue lengths, and drop rates to optimize network traffic flow.\n\nThe plugin uses `tc` command to collect information about Traffic control.\n\nThis collector is only supported on the following platforms:\n\n- Linux\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs to access command `tc` to get the necessary metrics. To achieve this netdata modifies permission of file `/usr/libexec/netdata/plugins.d/tc-qos-helper.sh`.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Create `tc-qos-helper.conf`\n\nIn order to view tc classes, you need to create the file `/etc/netdata/tc-qos-helper.conf` with content:\n\n```conf\ntc_show="class"\n```\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:tc]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config option" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| script to run to get tc values | Path to script `tc-qos-helper.sh` | usr/libexec/netdata/plugins.d/tc-qos-helper.s | no |\n| enable show all classes and qdiscs for all interfaces | yes/no flag to control what data is presented. | yes | no |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic example configuration using classes defined in `/etc/iproute2/tc_cls`.\n\nAn example of class IDs mapped to names in that file can be:\n\n```conf\n2:1 Standard\n2:8 LowPriorityData\n2:10 HighThroughputData\n2:16 OAM\n2:18 LowLatencyData\n2:24 BroadcastVideo\n2:26 MultimediaStreaming\n2:32 RealTimeInteractive\n2:34 MultimediaConferencing\n2:40 Signalling\n2:46 Telephony\n2:48 NetworkControl\n```\n\nYou can read more about setting up the tc rules in rc.local in this [GitHub issue](https://github.com/netdata/netdata/issues/4563#issuecomment-455711973).\n\n\n```yaml\n[plugin:tc]\n script to run to get tc values = /usr/libexec/netdata/plugins.d/tc-qos-helper.sh\n enable show all classes and qdiscs for all interfaces = yes\n\n```\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per network device direction\n\nMetrics related to QoS network device directions. Each direction (in/out) produces its own set of the following metrics.\n\nLabels:\n\n| Label | Description |\n|:-----------|:----------------|\n| device | The network interface. |\n| device_name | The network interface name |\n| group | The device family |\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| tc.qos | a dimension per class | kilobits/s |\n| tc.qos_packets | a dimension per class | packets/s |\n| tc.qos_dropped | a dimension per class | packets/s |\n| tc.qos_tokens | a dimension per class | tokens |\n| tc.qos_ctokens | a dimension per class | ctokens |\n\n",integration_type:"collector",id:"tc.plugin-tc.plugin-tc_QoS_classes",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/tc.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"timex.plugin",module_name:"timex.plugin",monitored_instance:{name:"Timex",link:"",categories:["data-collection.system-clock-and-ntp"],icon_filename:"syslog.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# Timex\n\nPlugin: timex.plugin\nModule: timex.plugin\n\n## Overview\n\nExamine Timex metrics to gain insights into system clock operations. Study time sync status, clock drift, and adjustments to ensure accurate system timekeeping.\n\nIt uses system call adjtimex on Linux and ntp_adjtime on FreeBSD or Mac to monitor the system kernel clock synchronization state.\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis integration doesn't support auto-detection.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:"## Setup\n\n### Prerequisites\n\nNo action required.\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:timex]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\nAt least one option ('clock synchronization state', 'time offset') needs to be enabled for this collector to run.\n\n{% details open=true summary=\"Config options\" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n| clock synchronization state | Make chart showing system clock synchronization state. | yes | yes |\n| time offset | Make chart showing computed time offset between local system and reference clock | yes | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic\n\nA basic configuration example.\n\n{% details open=true summary=\"Config\" %}\n```yaml\n[plugin:timex]\n update every = 1\n clock synchronization state = yes\n time offset = yes\n\n```\n{% /details %}\n",troubleshooting:"",alerts:"## Alerts\n\n\nThe following alerts are available:\n\n| Alert name | On metric | Description |\n|:------------|:----------|:------------|\n| [ system_clock_sync_state ](https://github.com/netdata/netdata/blob/master/src/health/health.d/timex.conf) | system.clock_sync_state | when set to 0, the system kernel believes the system clock is not properly synchronized to a reliable server |\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Timex instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| system.clock_sync_state | state | state |\n| system.clock_status | unsync, clockerr | status |\n| system.clock_sync_offset | offset | milliseconds |\n\n",integration_type:"collector",id:"timex.plugin-timex.plugin-Timex",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/timex.plugin/metadata.yaml",related_resources:""},{meta:{plugin_name:"xenstat.plugin",module_name:"xenstat.plugin",monitored_instance:{name:"Xen XCP-ng",link:"https://xenproject.org/",categories:["data-collection.containers-and-vms"],icon_filename:"xen.png"},related_resources:{integrations:{list:[]}},info_provided_to_referring_integrations:{description:""},keywords:[],most_popular:!1},overview:"# Xen XCP-ng\n\nPlugin: xenstat.plugin\nModule: xenstat.plugin\n\n## Overview\n\nThis collector monitors XenServer and XCP-ng host and domains statistics.\n\n\n\nThis collector is supported on all platforms.\n\nThis collector supports collecting metrics from multiple instances of this integration, including remote instances.\n\nThe plugin needs setuid.\n\n### Default Behavior\n\n#### Auto-Detection\n\nThis plugin requires the `xen-dom0-libs-devel` and `yajl-devel` libraries to be installed.\n\n#### Limits\n\nThe default configuration for this integration does not impose any limits on data collection.\n\n#### Performance Impact\n\nThe default configuration for this integration is not expected to impose a significant performance impact on the system.\n",setup:'## Setup\n\n### Prerequisites\n\n#### Libraries\n\n1. Install `xen-dom0-libs-devel` and `yajl-devel` using the package manager of your system.\n\n Note: On Cent-OS systems you will need `centos-release-xen` repository and the required package for xen is `xen-devel`\n\n2. Re-install Netdata from source. The installer will detect that the required libraries are now available and will also build xenstat.plugin.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `netdata.conf`.\nConfiguration for this specific integration is located in the `[plugin:xenstat]` section within that file.\n\nThe file format is a modified INI syntax. The general structure is:\n\n```ini\n[section1]\n option1 = some value\n option2 = some other value\n\n[section2]\n option3 = some third value\n```\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config netdata.conf\n```\n#### Options\n\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| update every | Data collection frequency. | 1 | no |\n\n{% /details %}\n#### Examples\nThere are no configuration examples.\n\n',troubleshooting:"",alerts:"## Alerts\n\nThere are no alerts configured by default for this integration.\n",metrics:"## Metrics\n\nMetrics grouped by *scope*.\n\nThe scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.\n\n\n\n### Per Xen XCP-ng instance\n\nThese metrics refer to the entire monitored application.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| xenstat.mem | free, used | MiB |\n| xenstat.domains | domains | domains |\n| xenstat.cpus | cpus | cpus |\n| xenstat.cpu_freq | frequency | MHz |\n\n### Per xendomain\n\nMetrics related to Xen domains. Each domain provides its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| xendomain.states | running, blocked, paused, shutdown, crashed, dying | boolean |\n| xendomain.cpu | used | percentage |\n| xendomain.mem | maximum, current | MiB |\n| xendomain.vcpu | a dimension per vcpu | percentage |\n\n### Per xendomain vbd\n\nMetrics related to Xen domain Virtual Block Device. Each VBD provides its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| xendomain.oo_req_vbd | requests | requests/s |\n| xendomain.requests_vbd | read, write | requests/s |\n| xendomain.sectors_vbd | read, write | sectors/s |\n\n### Per xendomain network\n\nMetrics related to Xen domain network interfaces. Each network interface provides its own set of the following metrics.\n\nThis scope has no labels.\n\nMetrics:\n\n| Metric | Dimensions | Unit |\n|:------|:----------|:----|\n| xendomain.bytes_network | received, sent | kilobits/s |\n| xendomain.packets_network | received, sent | packets/s |\n| xendomain.errors_network | received, sent | errors/s |\n| xendomain.drops_network | received, sent | drops/s |\n\n",integration_type:"collector",id:"xenstat.plugin-xenstat.plugin-Xen_XCP-ng",edit_link:"https://github.com/netdata/netdata/blob/master/src/collectors/xenstat.plugin/metadata.yaml",related_resources:""},{id:"deploy-alpinelinux",meta:{name:"Alpine Linux",link:"https://www.alpinelinux.org/",categories:["deploy.operating-systems"],icon_filename:"alpine.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-amazonlinux",meta:{name:"Amazon Linux",link:"https://aws.amazon.com/amazon-linux-2/",categories:["deploy.operating-systems"],icon_filename:"amazonlinux.png"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 2 | Core | x86_64, aarch64 | |\n| 2023 | Core | x86_64, aarch64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-archlinux",meta:{name:"Arch Linux",link:"https://archlinux.org/",categories:["deploy.operating-systems"],icon_filename:"archlinux.png"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| latest | Intermediate | | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-centos",meta:{name:"CentOS",link:"https://www.centos.org/",categories:["deploy.operating-systems"],icon_filename:"centos.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 7 | Core | x86_64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-centos-stream",meta:{name:"CentOS Stream",link:"https://www.centos.org/centos-stream",categories:["deploy.operating-systems"],icon_filename:"centos.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 9 | Community | x86_64, aarch64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-debian",meta:{name:"Debian",link:"https://www.debian.org/",categories:["deploy.operating-systems"],icon_filename:"debian.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 12 | Core | i386, amd64, armhf, arm64 | |\n| 11 | Core | i386, amd64, armhf, arm64 | |\n| 10 | Core | i386, amd64, armhf, arm64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-docker",meta:{name:"Docker",link:"https://www.docker.com/",categories:["deploy.docker-kubernetes"],icon_filename:"docker.svg"},most_popular:!0,keywords:["docker","container","containers"],install_description:"Install and connect new Docker containers\nFind the commands for `docker run`, `docker compose` or `Docker Swarm`. On the last two you can copy the configs, then run `docker-compose up -d` in the same directory as the `docker-compose.yml`\n\n> Netdata container requires different privileges and mounts to provide functionality similar to that provided by Netdata installed on the host. More info [here](https://learn.netdata.cloud/docs/installing/docker?_gl=1*f2xcnf*_ga*MTI1MTUwMzU0OS4xNjg2NjM1MDA1*_ga_J69Z2JCTFB*MTY5MDMxMDIyMS40MS4xLjE2OTAzMTAzNjkuNTguMC4w#create-a-new-netdata-agent-container)\n> Netdata will use the hostname from the container in which it is run instead of that of the host system. To change the default hostname check [here](https://learn.netdata.cloud/docs/agent/packaging/docker?_gl=1*i5weve*_ga*MTI1MTUwMzU0OS4xNjg2NjM1MDA1*_ga_J69Z2JCTFB*MTY5MDMxMjM4Ny40Mi4xLjE2OTAzMTIzOTAuNTcuMC4w#change-the-default-hostname)\n",methods:[{method:"Docker CLI",commands:[{channel:"nightly",command:"docker run -d --name=netdata \\\n--pid=host \\\n--network=host \\\n-v netdataconfig:/etc/netdata \\\n-v netdatalib:/var/lib/netdata \\\n-v netdatacache:/var/cache/netdata \\\n-v /etc/passwd:/host/etc/passwd:ro \\\n-v /etc/group:/host/etc/group:ro \\\n-v /etc/localtime:/etc/localtime:ro \\\n-v /proc:/host/proc:ro \\\n-v /sys:/host/sys:ro \\\n-v /etc/os-release:/host/etc/os-release:ro \\\n-v /var/log:/host/var/log:ro \\\n-v /var/run/docker.sock:/var/run/docker.sock:ro \\\n--restart unless-stopped \\\n--cap-add SYS_PTRACE \\\n--cap-add SYS_ADMIN \\\n--security-opt apparmor=unconfined \\\n{% if $showClaimingOptions %}\n-e NETDATA_CLAIM_TOKEN={% claim_token %} \\\n-e NETDATA_CLAIM_URL={% claim_url %} \\\n-e NETDATA_CLAIM_ROOMS={% $claim_rooms %} \\\n{% /if %}\nnetdata/netdata:edge\n"},{channel:"stable",command:"docker run -d --name=netdata \\\n--pid=host \\\n--network=host \\\n-v netdataconfig:/etc/netdata \\\n-v netdatalib:/var/lib/netdata \\\n-v netdatacache:/var/cache/netdata \\\n-v /etc/passwd:/host/etc/passwd:ro \\\n-v /etc/group:/host/etc/group:ro \\\n-v /etc/localtime:/etc/localtime:ro \\\n-v /proc:/host/proc:ro \\\n-v /sys:/host/sys:ro \\\n-v /etc/os-release:/host/etc/os-release:ro \\\n-v /var/log:/host/var/log:ro \\\n-v /var/run/docker.sock:/var/run/docker.sock:ro \\\n--restart unless-stopped \\\n--cap-add SYS_PTRACE \\\n--cap-add SYS_ADMIN \\\n--security-opt apparmor=unconfined \\\n{% if $showClaimingOptions %}\n-e NETDATA_CLAIM_TOKEN={% claim_token %} \\\n-e NETDATA_CLAIM_URL={% claim_url %} \\\n-e NETDATA_CLAIM_ROOMS={% $claim_rooms %} \\\n{% /if %}\nnetdata/netdata:stable\n"}]},{method:"Docker Compose",commands:[{channel:"nightly",command:"version: '3'\nservices:\n netdata:\n image: netdata/netdata:edge\n container_name: netdata\n pid: host\n network_mode: host\n restart: unless-stopped\n cap_add:\n - SYS_PTRACE\n - SYS_ADMIN\n security_opt:\n - apparmor:unconfined\n volumes:\n - netdataconfig:/etc/netdata\n - netdatalib:/var/lib/netdata\n - netdatacache:/var/cache/netdata\n - /etc/passwd:/host/etc/passwd:ro\n - /etc/group:/host/etc/group:ro\n - /etc/localtime:/etc/localtime:ro\n - /proc:/host/proc:ro\n - /sys:/host/sys:ro\n - /etc/os-release:/host/etc/os-release:ro\n - /var/log:/host/var/log:ro\n - /var/run/docker.sock:/var/run/docker.sock:ro\n{% if $showClaimingOptions %}\n environment:\n - NETDATA_CLAIM_TOKEN={% claim_token %}\n - NETDATA_CLAIM_URL={% claim_url %}\n - NETDATA_CLAIM_ROOMS={% $claim_rooms %}\n{% /if %}\nvolumes:\n netdataconfig:\n netdatalib:\n netdatacache:\n"},{channel:"stable",command:"version: '3'\nservices:\n netdata:\n image: netdata/netdata:stable\n container_name: netdata\n pid: host\n network_mode: host\n restart: unless-stopped\n cap_add:\n - SYS_PTRACE\n - SYS_ADMIN\n security_opt:\n - apparmor:unconfined\n volumes:\n - netdataconfig:/etc/netdata\n - netdatalib:/var/lib/netdata\n - netdatacache:/var/cache/netdata\n - /etc/passwd:/host/etc/passwd:ro\n - /etc/group:/host/etc/group:ro\n - /etc/localtime:/etc/localtime:ro\n - /proc:/host/proc:ro\n - /sys:/host/sys:ro\n - /etc/os-release:/host/etc/os-release:ro\n - /var/log:/host/var/log:ro\n - /var/run/docker.sock:/var/run/docker.sock:ro\n{% if $showClaimingOptions %}\n environment:\n - NETDATA_CLAIM_TOKEN={% claim_token %}\n - NETDATA_CLAIM_URL={% claim_url %}\n - NETDATA_CLAIM_ROOMS={% $claim_rooms %}\n{% /if %}\nvolumes:\n netdataconfig:\n netdatalib:\n netdatacache:\n"}]},{method:"Docker Swarm",commands:[{channel:"nightly",command:"version: '3'\nservices:\n netdata:\n image: netdata/netdata:edge\n pid: host\n network_mode: host\n cap_add:\n - SYS_PTRACE\n - SYS_ADMIN\n security_opt:\n - apparmor:unconfined\n volumes:\n - netdataconfig:/etc/netdata\n - netdatalib:/var/lib/netdata\n - netdatacache:/var/cache/netdata\n - /etc/passwd:/host/etc/passwd:ro\n - /etc/group:/host/etc/group:ro\n - /etc/localtime:/etc/localtime:ro\n - /proc:/host/proc:ro\n - /sys:/host/sys:ro\n - /etc/os-release:/host/etc/os-release:ro\n - /etc/hostname:/etc/hostname:ro\n - /var/log:/host/var/log:ro\n - /var/run/docker.sock:/var/run/docker.sock:ro\n{% if $showClaimingOptions %}\n environment:\n - NETDATA_CLAIM_TOKEN={% claim_token %}\n - NETDATA_CLAIM_URL={% claim_url %}\n - NETDATA_CLAIM_ROOMS={% $claim_rooms %}\n{% /if %}\n deploy:\n mode: global\n restart_policy:\n condition: on-failure\nvolumes:\n netdataconfig:\n netdatalib:\n netdatacache:\n"},{channel:"stable",command:"version: '3'\nservices:\n netdata:\n image: netdata/netdata:stable\n pid: host\n network_mode: host\n cap_add:\n - SYS_PTRACE\n - SYS_ADMIN\n security_opt:\n - apparmor:unconfined\n volumes:\n - netdataconfig:/etc/netdata\n - netdatalib:/var/lib/netdata\n - netdatacache:/var/cache/netdata\n - /etc/passwd:/host/etc/passwd:ro\n - /etc/group:/host/etc/group:ro\n - /etc/localtime:/etc/localtime:ro\n - /proc:/host/proc:ro\n - /sys:/host/sys:ro\n - /etc/os-release:/host/etc/os-release:ro\n - /etc/hostname:/etc/hostname:ro\n - /var/log:/host/var/log:ro\n - /var/run/docker.sock:/var/run/docker.sock:ro\n{% if $showClaimingOptions %}\n environment:\n - NETDATA_CLAIM_TOKEN={% claim_token %}\n - NETDATA_CLAIM_URL={% claim_url %}\n - NETDATA_CLAIM_ROOMS={% $claim_rooms %}\n{% /if %}\n deploy:\n mode: global\n restart_policy:\n condition: on-failure\nvolumes:\n netdataconfig:\n netdatalib:\n netdatacache:\n"}]}],additional_info:"",related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 19.03 or newer | Core | linux/i386, linux/amd64, linux/arm/v7, linux/arm64, linux/ppc64le | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:3,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-fedora",meta:{name:"Fedora",link:"https://www.fedoraproject.org/",categories:["deploy.operating-systems"],icon_filename:"fedora.png"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 40 | Core | x86_64, aarch64 | |\n| 39 | Core | x86_64, aarch64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-freebsd",meta:{name:"FreeBSD",link:"https://www.freebsd.org/",categories:["deploy.operating-systems"],icon_filename:"freebsd.svg"},most_popular:!0,keywords:["freebsd"],install_description:"## Install dependencies\nPlease install the following packages using the command below:\n\n```pkg install bash e2fsprogs-libuuid git curl autoconf automake pkgconf pidof liblz4 libuv json-c cmake gmake```\nThis step needs root privileges. Please respond in the affirmative for any relevant prompts during the installation process.\n\nRun the following command on your node to install and claim Netdata:\n",methods:[{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"fetch",commands:[{channel:"nightly",command:"fetch -o /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"fetch -o /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:"Netdata can also be installed via [FreeBSD ports](https://www.freshports.org/net-mgmt/netdata).\n",related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 13-STABLE | Community | | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:6,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-kubernetes",meta:{name:"Kubernetes (Helm)",link:"",categories:["deploy.docker-kubernetes"],icon_filename:"kubernetes.svg"},keywords:["kubernetes","container","Orchestrator"],install_description:"**Use helm install to install Netdata on your Kubernetes cluster**\nFor a new installation use `helm install` or for existing clusters add the content below to your `override.yaml` and then run `helm upgrade -f override.yml netdata netdata/netdata`\n",methods:[{method:"Helm",commands:[{channel:"nightly",command:'helm install netdata netdata/netdata \\\n--set image.tag=edge{% if $showClaimingOptions %} \\\n--set parent.claiming.enabled="true" \\\n--set parent.claiming.token={% claim_token %} \\\n--set parent.claiming.rooms={% $claim_rooms %} \\\n--set child.claiming.enabled="true" \\\n--set child.claiming.token={% claim_token %} \\\n--set child.claiming.rooms={% $claim_rooms %}{% /if %}\n'},{channel:"stable",command:'helm install netdata netdata/netdata \\\n--set image.tag=stable{% if $showClaimingOptions %} \\\n--set parent.claiming.enabled="true" \\\n--set parent.claiming.token={% claim_token %} \\\n--set parent.claiming.rooms={% $claim_rooms %} \\\n--set child.claiming.enabled="true" \\\n--set child.claiming.token={% claim_token %} \\\n--set child.claiming.rooms={% $claim_rooms %}{% /if %}\n'}]},{method:"Existing Cluster",commands:[{channel:"nightly",command:"image:\n tag: edge\n\nrestarter:\n enabled: true\n{% if $showClaimingOptions %}\n\nparent:\n claiming:\n enabled: true\n token: {% claim_token %}\n rooms: {% $claim_rooms %}\n\nchild:\n claiming:\n enabled: true\n token: {% claim_token %}\n rooms: {% $claim_rooms %}\n{% /if %}\n"},{channel:"stable",command:"image:\n tag: stable\n\nrestarter:\n enabled: true\n{% if $showClaimingOptions %}\n\nparent:\n claiming:\n enabled: true\n token: {% claim_token %}\n rooms: {% $claim_rooms %}\n\nchild:\n claiming:\n enabled: true\n token: {% claim_token %}\n rooms: {% $claim_rooms %}\n{% /if %}\n"}]}],additional_info:"",related_resources:{},most_popular:!0,platform_info:"\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:4,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-linux-generic",meta:{name:"Linux",link:"",categories:["deploy.operating-systems"],icon_filename:"linux.svg"},keywords:["linux"],most_popular:!0,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-macos",meta:{name:"macOS",link:"",categories:["deploy.operating-systems"],icon_filename:"macos.svg"},most_popular:!0,keywords:["macOS","mac","apple"],install_description:"Run the following command on your Intel based OSX, macOS servers to install and claim Netdata:",methods:[{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 13 | Community | | |\n| 12 | Community | | |\n| 11 | Community | | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:5,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-manjarolinux",meta:{name:"Manjaro Linux",link:"https://manjaro.org/",categories:["deploy.operating-systems"],icon_filename:"manjaro.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| latest | Intermediate | | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-opensuse",meta:{name:"SUSE Linux",link:"https://www.suse.com/",categories:["deploy.operating-systems"],icon_filename:"openSUSE.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 15.6 | Core | x86_64, aarch64 | |\n| 15.5 | Core | x86_64, aarch64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-oraclelinux",meta:{name:"Oracle Linux",link:"https://www.oracle.com/linux/",categories:["deploy.operating-systems"],icon_filename:"oraclelinux.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 8 | Core | x86_64, aarch64 | |\n| 9 | Core | x86_64, aarch64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-rhel",meta:{name:"Red Hat Enterprise Linux",link:"https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux",categories:["deploy.operating-systems"],icon_filename:"rhel.png"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 9.x | Core | x86_64, aarch64 | |\n| 8.x | Core | x86_64, aarch64 | |\n| 7.x | Core | x86_64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-rockylinux",meta:{name:"Rocky Linux",link:"https://rockylinux.org/",categories:["deploy.operating-systems"],icon_filename:"rocky.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 9 | Core | x86_64, aarch64 | |\n| 8 | Core | x86_64, aarch64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-ubuntu",meta:{name:"Ubuntu",link:"https://ubuntu.com/",categories:["deploy.operating-systems"],icon_filename:"ubuntu.svg"},keywords:["linux"],most_popular:!1,install_description:"Run the following command on your node to install and claim Netdata:",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:'Did you know you can also deploy Netdata on your OS using {% goToCategory navigateToSettings=$navigateToSettings categoryId="deploy.docker-kubernetes" %}Kubernetes{% /goToCategory %} or {% goToCategory categoryId="deploy.docker-kubernetes" %}Docker{% /goToCategory %}?\n',related_resources:{},platform_info:"We build native packages for the following releases:\n\n| Version | Support Tier | Native Package Architectures | Notes |\n|:-------:|:------------:|:----------------------------:|:----- |\n| 24.04 | Core | amd64, armhf, arm64 | |\n| 23.10 | Core | amd64, armhf, arm64 | |\n| 22.04 | Core | amd64, armhf, arm64 | |\n| 20.04 | Core | amd64, armhf, arm64 | |\n\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:-1,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"deploy-windows",meta:{name:"Windows",link:"https://www.microsoft.com/en-us/windows",categories:["deploy.operating-systems"],icon_filename:"windows.svg"},keywords:["windows"],install_description:"1. Install [Windows Exporter](https://github.com/prometheus-community/windows_exporter) on every Windows host you want to monitor.\n2. Install Netdata agent on Linux, FreeBSD or Mac.\n3. Configure Netdata to collect data remotely from your Windows hosts by adding one job per host to windows.conf file. See the [configuration section](https://learn.netdata.cloud/docs/data-collection/monitor-anything/System%20Metrics/Windows-machines#configuration) for details.\n4. Enable [virtual nodes](https://learn.netdata.cloud/docs/data-collection/windows-systems#virtual-nodes) configuration so the windows nodes are displayed as separate nodes.\n",methods:[{method:"wget",commands:[{channel:"nightly",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]},{method:"curl",commands:[{channel:"nightly",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --nightly-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"},{channel:"stable",command:"curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --stable-channel{% if $showClaimingOptions %} --claim-token {% claim_token %} --claim-rooms {% $claim_rooms %} --claim-url {% claim_url %}{% /if %}\n"}]}],additional_info:"",related_resources:{},most_popular:!0,platform_info:"\nOn other releases of this distribution, a static binary will be installed in `/opt/netdata`.",quick_start:2,integration_type:"deploy",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/deploy.yaml"},{id:"export-appoptics",meta:{name:"AppOptics",link:"https://www.solarwinds.com/appoptics",categories:["export"],icon_filename:"solarwinds.svg",keywords:["app optics","AppOptics","Solarwinds"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# AppOptics\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-aws-kinesis",meta:{name:"AWS Kinesis",link:"https://aws.amazon.com/kinesis/",categories:["export"],icon_filename:"aws-kinesis.svg"},keywords:["exporter","AWS","Kinesis"],overview:"# AWS Kinesis\n\nExport metrics to AWS Kinesis Data Streams\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- First [install](https://docs.aws.amazon.com/en_us/sdk-for-cpp/v1/developer-guide/setup.html) AWS SDK for C++\n- Here are the instructions when building from source, to ensure 3rd party dependencies are installed:\n ```bash\n git clone --recursive https://github.com/aws/aws-sdk-cpp.git\n cd aws-sdk-cpp/\n git submodule update --init --recursive\n mkdir BUILT\n cd BUILT\n cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_ONLY=kinesis ..\n make\n make install\n ```\n- `libcrypto`, `libssl`, and `libcurl` are also required to compile Netdata with Kinesis support enabled.\n- Next, Netdata should be re-installed from the source. The installer will detect that the required libraries are now available.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nNetdata automatically computes a partition key for every record with the purpose to distribute records across available shards evenly.\nThe following options can be defined for this exporter.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | Netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 2 * update_every * 1000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:4242 10.11.14.3:4242 10.11.14.4:4242\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic configuration\n\n```yaml\n[kinesis:my_instance]\n enabled = yes\n destination = us-east-1\n\n```\n##### Configuration with AWS credentials\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[kinesis:my_instance]\n enabled = yes\n destination = us-east-1\n # AWS credentials\n aws_access_key_id = your_access_key_id\n aws_secret_access_key = your_secret_access_key\n # destination stream\n stream name = your_stream_name\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/aws_kinesis/metadata.yaml",troubleshooting:""},{id:"export-azure-data",meta:{name:"Azure Data Explorer",link:"https://azure.microsoft.com/en-us/pricing/details/data-explorer/",categories:["export"],icon_filename:"azuredataex.jpg",keywords:["Azure Data Explorer","Azure"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Azure Data Explorer\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-azure-event",meta:{name:"Azure Event Hub",link:"https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-about",categories:["export"],icon_filename:"azureeventhub.png",keywords:["Azure Event Hub","Azure"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Azure Event Hub\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-bigquery",meta:{name:"Google BigQuery",link:"https://cloud.google.com/bigquery/",categories:["export"],icon_filename:"bigquery.png",keywords:["export","Google BigQuery","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Google BigQuery\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-blueflood",meta:{name:"Blueflood",link:"http://blueflood.io/",categories:["export"],icon_filename:"blueflood.png",keywords:["export","Blueflood","graphite"]},keywords:["exporter","graphite","remote write","time series"],overview:"# Blueflood\n\nUse the Graphite connector for the exporting engine to archive your Netdata metrics to Graphite providers for long-term storage,\nfurther analysis, or correlation with data from other sources.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- You have already installed Netdata and Graphite.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic configuration\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n\n```\n##### Configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n username = my_username\n password = my_password\n\n```\n##### Detailed Configuration for a remote, secure host\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:https:netdata]\n enabled = yes\n username = my_username\n password = my_password\n destination = 10.10.1.114:2003\n # data source = average\n # prefix = netdata\n # hostname = my_hostname\n # update every = 10\n # buffer on failures = 10\n # timeout ms = 20000\n # send names instead of ids = yes\n # send charts matching = *\n # send hosts matching = localhost *\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/graphite/metadata.yaml",troubleshooting:""},{id:"export-chronix",meta:{name:"Chronix",link:"https://dbdb.io/db/chronix",categories:["export"],icon_filename:"chronix.png",keywords:["export","chronix","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Chronix\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-cortex",meta:{name:"Cortex",link:"https://cortexmetrics.io/",categories:["export"],icon_filename:"cortex.png",keywords:["export","cortex","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Cortex\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-crate",meta:{name:"CrateDB",link:"https://crate.io/",categories:["export"],icon_filename:"crate.svg",keywords:["export","CrateDB","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# CrateDB\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-elastic",meta:{name:"ElasticSearch",link:"https://www.elastic.co/",categories:["export"],icon_filename:"elasticsearch.svg",keywords:["export","ElasticSearch","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# ElasticSearch\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-gnocchi",meta:{name:"Gnocchi",link:"https://wiki.openstack.org/wiki/Gnocchi",categories:["export"],icon_filename:"gnocchi.svg",keywords:["export","Gnocchi","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Gnocchi\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-google-pubsub",meta:{name:"Google Cloud Pub Sub",link:"https://cloud.google.com/pubsub",categories:["export"],icon_filename:"pubsub.png"},keywords:["exporter","Google Cloud","Pub Sub"],overview:"# Google Cloud Pub Sub\n\nExport metrics to Google Cloud Pub/Sub Service\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- First [install](https://github.com/googleapis/google-cloud-cpp/) install Google Cloud Platform C++ Client Libraries\n- Pub/Sub support is also dependent on the dependencies of those libraries, like `protobuf`, `protoc`, and `grpc`\n- Next, Netdata should be re-installed from the source. The installer will detect that the required libraries are now available.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | pubsub.googleapis.com | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | Netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 2 * update_every * 1000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = pubsub.googleapis.com\n ```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Basic configuration\n\n- Set the destination option to a Pub/Sub service endpoint. pubsub.googleapis.com is the default one.\n- Create the credentials JSON file by following Google Cloud\'s authentication guide.\n- The user running the Agent (typically netdata) needs read access to google_cloud_credentials.json, which you can set\n `chmod 400 google_cloud_credentials.json; chown netdata google_cloud_credentials.json`\n- Set the credentials file option to the full path of the file.\n\n\n```yaml\n[pubsub:my_instance]\n enabled = yes\n destination = pubsub.googleapis.com\n credentials file = /etc/netdata/google_cloud_credentials.json\n project id = my_project\n topic id = my_topic\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/pubsub/metadata.yaml",troubleshooting:""},{id:"export-graphite",meta:{name:"Graphite",link:"https://graphite.readthedocs.io/en/latest/",categories:["export"],icon_filename:"graphite.png"},keywords:["exporter","graphite","remote write","time series"],overview:"# Graphite\n\nUse the Graphite connector for the exporting engine to archive your Netdata metrics to Graphite providers for long-term storage,\nfurther analysis, or correlation with data from other sources.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- You have already installed Netdata and Graphite.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic configuration\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n\n```\n##### Configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n username = my_username\n password = my_password\n\n```\n##### Detailed Configuration for a remote, secure host\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:https:netdata]\n enabled = yes\n username = my_username\n password = my_password\n destination = 10.10.1.114:2003\n # data source = average\n # prefix = netdata\n # hostname = my_hostname\n # update every = 10\n # buffer on failures = 10\n # timeout ms = 20000\n # send names instead of ids = yes\n # send charts matching = *\n # send hosts matching = localhost *\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/graphite/metadata.yaml",troubleshooting:""},{id:"export-influxdb",meta:{name:"InfluxDB",link:"https://www.influxdata.com/",categories:["export"],icon_filename:"influxdb.svg",keywords:["InfluxDB","Influx","export","graphite"]},keywords:["exporter","graphite","remote write","time series"],overview:"# InfluxDB\n\nUse the Graphite connector for the exporting engine to archive your Netdata metrics to Graphite providers for long-term storage,\nfurther analysis, or correlation with data from other sources.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- You have already installed Netdata and Graphite.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic configuration\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n\n```\n##### Configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n username = my_username\n password = my_password\n\n```\n##### Detailed Configuration for a remote, secure host\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:https:netdata]\n enabled = yes\n username = my_username\n password = my_password\n destination = 10.10.1.114:2003\n # data source = average\n # prefix = netdata\n # hostname = my_hostname\n # update every = 10\n # buffer on failures = 10\n # timeout ms = 20000\n # send names instead of ids = yes\n # send charts matching = *\n # send hosts matching = localhost *\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/graphite/metadata.yaml",troubleshooting:""},{id:"export-irondb",meta:{name:"IRONdb",link:"https://docs.circonus.com/irondb/",categories:["export"],icon_filename:"irondb.png",keywords:["export","IRONdb","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# IRONdb\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-json",meta:{name:"JSON",link:"",categories:["export"],icon_filename:"json.svg"},keywords:["exporter","json"],overview:"# JSON\n\nUse the JSON connector for the exporting engine to archive your agent's metrics to JSON document databases for long-term storage,\nfurther analysis, or correlation with data from other sources\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | pubsub.googleapis.com | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | Netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 2 * update_every * 1000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = localhost:5448\n ```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Basic configuration\n\n\n\n```yaml\n[json:my_json_instance]\n enabled = yes\n destination = localhost:5448\n\n```\n##### Configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `json:https:my_json_instance`.\n\n```yaml\n[json:my_json_instance]\n enabled = yes\n destination = localhost:5448\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/json/metadata.yaml",troubleshooting:""},{id:"export-kafka",meta:{name:"Kafka",link:"https://kafka.apache.org/",categories:["export"],icon_filename:"kafka.svg",keywords:["export","Kafka","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Kafka\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-kairosdb",meta:{name:"KairosDB",link:"https://kairosdb.github.io/",categories:["export"],icon_filename:"kairos.png",keywords:["KairosDB","kairos","export","graphite"]},keywords:["exporter","graphite","remote write","time series"],overview:"# KairosDB\n\nUse the Graphite connector for the exporting engine to archive your Netdata metrics to Graphite providers for long-term storage,\nfurther analysis, or correlation with data from other sources.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- You have already installed Netdata and Graphite.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic configuration\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n\n```\n##### Configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:netdata]\n enabled = yes\n destination = localhost:2003\n username = my_username\n password = my_password\n\n```\n##### Detailed Configuration for a remote, secure host\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[graphite:https:netdata]\n enabled = yes\n username = my_username\n password = my_password\n destination = 10.10.1.114:2003\n # data source = average\n # prefix = netdata\n # hostname = my_hostname\n # update every = 10\n # buffer on failures = 10\n # timeout ms = 20000\n # send names instead of ids = yes\n # send charts matching = *\n # send hosts matching = localhost *\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/graphite/metadata.yaml",troubleshooting:""},{id:"export-m3db",meta:{name:"M3DB",link:"https://m3db.io/",categories:["export"],icon_filename:"m3db.png",keywords:["export","M3DB","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# M3DB\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-metricfire",meta:{name:"MetricFire",link:"https://www.metricfire.com/",categories:["export"],icon_filename:"metricfire.png",keywords:["export","MetricFire","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# MetricFire\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-mongodb",meta:{name:"MongoDB",link:"https://www.mongodb.com/",categories:["export"],icon_filename:"mongodb.svg"},keywords:["exporter","MongoDB"],overview:"# MongoDB\n\nUse the MongoDB connector for the exporting engine to archive your agent's metrics to a MongoDB database\nfor long-term storage, further analysis, or correlation with data from other sources.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- To use MongoDB as an external storage for long-term archiving, you should first [install](http://mongoc.org/libmongoc/current/installing.html) libmongoc 1.7.0 or higher.\n- Next, re-install Netdata from the source, which detects that the required library is now available.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | localhost | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | Netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 2 * update_every * 1000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:27017 10.11.14.3:4242 10.11.14.4:27017\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Basic configuration\n\nThe default socket timeout depends on the exporting connector update interval.\nThe timeout is 500 ms shorter than the interval (but not less than 1000 ms). You can alter the timeout using the sockettimeoutms MongoDB URI option.\n\n\n```yaml\n[mongodb:my_instance]\n enabled = yes\n destination = mongodb://\n database = your_database_name\n collection = your_collection_name\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/mongodb/metadata.yaml",troubleshooting:""},{id:"export-newrelic",meta:{name:"New Relic",link:"https://newrelic.com/",categories:["export"],icon_filename:"newrelic.svg",keywords:["export","NewRelic","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# New Relic\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-opentsdb",meta:{name:"OpenTSDB",link:"https://github.com/OpenTSDB/opentsdb",categories:["export"],icon_filename:"opentsdb.png"},keywords:["exporter","OpenTSDB","scalable time series"],overview:"# OpenTSDB\n\nUse the OpenTSDB connector for the exporting engine to archive your Netdata metrics to OpenTSDB databases for long-term storage,\nfurther analysis, or correlation with data from other sources.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- OpenTSDB and Netdata, installed, configured and operational.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | Netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 2 * update_every * 1000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to OpenTSDB. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used (opentsdb = 4242).\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:4242 10.11.14.3:4242 10.11.14.4:4242\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Minimal configuration\n\nAdd `:http` or `:https` modifiers to the connector type if you need to use other than a plaintext protocol.\nFor example: `opentsdb:http:my_opentsdb_instance`, `opentsdb:https:my_opentsdb_instance`.\n\n\n```yaml\n[opentsdb:my_opentsdb_instance]\n enabled = yes\n destination = localhost:4242\n\n```\n##### HTTP authentication\n\n\n\n```yaml\n[opentsdb:my_opentsdb_instance]\n enabled = yes\n destination = localhost:4242\n username = my_username\n password = my_password\n\n```\n##### Using `send hosts matching`\n\n\n\n```yaml\n[opentsdb:my_opentsdb_instance]\n enabled = yes\n destination = localhost:4242\n send hosts matching = localhost *\n\n```\n##### Using `send charts matching`\n\n\n\n```yaml\n[opentsdb:my_opentsdb_instance]\n enabled = yes\n destination = localhost:4242\n send charts matching = *\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/opentsdb/metadata.yaml",troubleshooting:""},{id:"export-pgsql",meta:{name:"PostgreSQL",link:"https://www.postgresql.org/",categories:["export"],icon_filename:"postgres.svg",keywords:["export","PostgreSQL","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# PostgreSQL\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-prometheus-remote",meta:{name:"Prometheus Remote Write",link:"https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage",categories:["export"],icon_filename:"prometheus.svg"},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Prometheus Remote Write\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-quasar",meta:{name:"QuasarDB",link:"https://doc.quasar.ai/master/",categories:["export"],icon_filename:"quasar.jpeg",keywords:["export","quasar","quasarDB","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# QuasarDB\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-splunk",meta:{name:"Splunk SignalFx",link:"https://www.splunk.com/en_us/products/observability.html",categories:["export"],icon_filename:"splunk.svg",keywords:["export","splunk","signalfx","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Splunk SignalFx\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-thanos",meta:{name:"Thanos",link:"https://thanos.io/",categories:["export"],icon_filename:"thanos.png",keywords:["export","thanos","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Thanos\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-tikv",meta:{name:"TiKV",link:"https://tikv.org/",categories:["export"],icon_filename:"tikv.png",keywords:["export","TiKV","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# TiKV\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-timescaledb",meta:{name:"TimescaleDB",link:"https://www.timescale.com/",categories:["export"],icon_filename:"timescale.png",keywords:["export","TimescaleDB","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# TimescaleDB\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-victoria",meta:{name:"VictoriaMetrics",link:"https://victoriametrics.com/products/open-source/",categories:["export"],icon_filename:"victoriametrics.png",keywords:["export","victoriametrics","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# VictoriaMetrics\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-vmware",meta:{name:"VMware Aria",link:"https://www.vmware.com/products/aria-operations-for-applications.html",categories:["export"],icon_filename:"aria.png",keywords:["export","VMware","Aria","Tanzu","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# VMware Aria\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"export-wavefront",meta:{name:"Wavefront",link:"https://docs.wavefront.com/wavefront_data_ingestion.html",categories:["export"],icon_filename:"wavefront.png",keywords:["export","Wavefront","prometheus","remote write"]},keywords:["exporter","Prometheus","remote write","time series"],overview:"# Wavefront\n\nUse the Prometheus remote write exporting connector to archive your Netdata metrics to the external storage provider of your choice for long-term storage and further analysis.\n\n\n## Limitations\n\nThe remote write exporting connector does not support buffer on failures.\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Netdata and the external storage provider of your choice, installed, configured and operational.\n- `protobuf` and `snappy` libraries installed.\n- Netdata reinstalled after the libraries.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `exporting.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config exporting.conf\n```\n#### Options\n\nThe following options can be defined for this exporter.\n\n{% details open=true summary="Config options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| enabled | Enables or disables an exporting connector instance (yes/no). | no | yes |\n| destination | Accepts a space separated list of hostnames, IPs (IPv4 and IPv6) and ports to connect to. Netdata will use the first available to send the metrics. | no | yes |\n| username | Username for HTTP authentication | my_username | no |\n| password | Password for HTTP authentication | my_password | no |\n| data source | Selects the kind of data that will be sent to the external database. (as collected/average/sum) | | no |\n| hostname | The hostname to be used for sending data to the external database server. | [global].hostname | no |\n| prefix | The prefix to add to all metrics. | netdata | no |\n| update every | Frequency of sending sending data to the external database, in seconds. | 10 | no |\n| buffer on failures | The number of iterations (`update every` seconds) to buffer data, when the external database server is not available. | 10 | no |\n| timeout ms | The timeout in milliseconds to wait for the external database server to process the data. | 20000 | no |\n| send hosts matching | Hosts filter. Determines which hosts will be sent to the external database. The syntax is [simple patterns](https://github.com/netdata/netdata/tree/master/src/libnetdata/simple_pattern#simple-patterns). | localhost * | no |\n| send charts matching | One or more space separated patterns (use * as wildcard) checked against both chart id and chart name. | * | no |\n| send names instead of ids | Controls the metric names Netdata should send to the external database (yes/no). | | no |\n| send configured labels | Controls if host labels defined in the `[host labels]` section in `netdata.conf` should be sent to the external database (yes/no). | | no |\n| send automatic labels | Controls if automatically created labels, like `_os_name` or `_architecture` should be sent to the external database (yes/no). | | no |\n\n##### destination\n\nThe format of each item in this list, is: [PROTOCOL:]IP[:PORT].\n- PROTOCOL can be udp or tcp. tcp is the default and only supported by the current exporting engine.\n- IP can be XX.XX.XX.XX (IPv4), or [XX:XX...XX:XX] (IPv6). For IPv6 you can to enclose the IP in [] to separate it from the port.\n- PORT can be a number of a service name. If omitted, the default port for the exporting connector will be used.\n\nExample IPv4:\n ```yaml\n destination = 10.11.14.2:2003 10.11.14.3:4242 10.11.14.4:2003\n ```\nExample IPv6 and IPv4 together:\n```yaml\ndestination = [ffff:...:0001]:2003 10.11.12.1:2003\n```\nWhen multiple servers are defined, Netdata will try the next one when the previous one fails.\n\n\n##### update every\n\nNetdata will add some randomness to this number, to prevent stressing the external server when many Netdata servers\nsend data to the same database. This randomness does not affect the quality of the data, only the time they are sent.\n\n\n##### buffer on failures\n\nIf the server fails to receive the data after that many failures, data loss on the connector instance is expected (Netdata will also log it).\n\n\n##### send hosts matching\n\nIncludes one or more space separated patterns, using * as wildcard (any number of times within each pattern).\nThe patterns are checked against the hostname (the localhost is always checked as localhost), allowing us to\nfilter which hosts will be sent to the external database when this Netdata is a central Netdata aggregating multiple hosts.\n\nA pattern starting with `!` gives a negative match. So to match all hosts named `*db*` except hosts containing `*child*`,\nuse `!*child* *db*` (so, the order is important: the first pattern matching the hostname will be used - positive or negative).\n\n\n##### send charts matching\n\nA pattern starting with ! gives a negative match. So to match all charts named apps.* except charts ending in *reads,\nuse !*reads apps.* (so, the order is important: the first pattern matching the chart id or the chart name will be used,\npositive or negative). There is also a URL parameter filter that can be used while querying allmetrics. The URL parameter\nhas a higher priority than the configuration option.\n\n\n##### send names instead of ids\n\nNetdata supports names and IDs for charts and dimensions. Usually IDs are unique identifiers as read by the system and names\nare human friendly labels (also unique). Most charts and metrics have the same ID and name, but in several cases they are\ndifferent : disks with device-mapper, interrupts, QoS classes, statsd synthetic charts, etc.\n\n\n{% /details %}\n#### Examples\n\n##### Example configuration\n\nBasic example configuration for Prometheus remote write.\n\n```yaml\n[prometheus_remote_write:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n\n```\n##### Example configuration with HTTPS and HTTP authentication\n\nAdd `:https` modifier to the connector type if you need to use the TLS/SSL protocol. For example: `remote_write:https:my_instance`.\n\n```yaml\n[prometheus_remote_write:https:my_instance]\n enabled = yes\n destination = 10.11.14.2:2003\n remote write URL path = /receive\n username = my_username\n password = my_password\n\n```\n',integration_type:"exporter",edit_link:"https://github.com/netdata/netdata/blob/master/src/exporting/prometheus/metadata.yaml",troubleshooting:""},{id:"notify-alerta",meta:{name:"Alerta",link:"https://alerta.io/",categories:["notify.agent"],icon_filename:"alerta.png"},keywords:["Alerta"],overview:"# Alerta\n\nThe [Alerta](https://alerta.io/) monitoring system is a tool used to consolidate and de-duplicate alerts from multiple sources for quick \u2018at-a-glance\u2019 visualization. With just one system you can monitor alerts from many other monitoring tools on a single screen.\nYou can send Netdata alerts to Alerta to see alerts coming from many Netdata hosts or also from a multi-host Netdata configuration.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A working Alerta instance\n- An Alerta API key (if authentication in Alerta is enabled)\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_ALERTA | Set `SEND_ALERTA` to YES | | yes |\n| ALERTA_WEBHOOK_URL | set `ALERTA_WEBHOOK_URL` to the API url you defined when you installed the Alerta server. | | yes |\n| ALERTA_API_KEY | Set `ALERTA_API_KEY` to your API key. | | yes |\n| DEFAULT_RECIPIENT_ALERTA | Set `DEFAULT_RECIPIENT_ALERTA` to the default recipient environment you want the alert notifications to be sent to. All roles will default to this variable if left unconfigured. | | yes |\n| DEFAULT_RECIPIENT_CUSTOM | Set different recipient environments per role, by editing `DEFAULT_RECIPIENT_CUSTOM` with the environment name of your choice | | no |\n\n##### ALERTA_API_KEY\n\nYou will need an API key to send messages from any source, if Alerta is configured to use authentication (recommended). To create a new API key:\n1. Go to Configuration > API Keys.\n2. Create a new API key called "netdata" with `write:alerts` permission.\n\n\n##### DEFAULT_RECIPIENT_CUSTOM\n\nThe `DEFAULT_RECIPIENT_CUSTOM` can be edited in the following entries at the bottom of the same file:\n\n```conf\nrole_recipients_alerta[sysadmin]="Systems"\nrole_recipients_alerta[domainadmin]="Domains"\nrole_recipients_alerta[dba]="Databases Systems"\nrole_recipients_alerta[webmaster]="Marketing Development"\nrole_recipients_alerta[proxyadmin]="Proxy"\nrole_recipients_alerta[sitemgr]="Sites"\n```\n\nThe values you provide should be defined as environments in `/etc/alertad.conf` with `ALLOWED_ENVIRONMENTS` option.\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# alerta (alerta.io) global notification options\n\nSEND_ALERTA="YES"\nALERTA_WEBHOOK_URL="http://yourserver/alerta/api"\nALERTA_API_KEY="INSERT_YOUR_API_KEY_HERE"\nDEFAULT_RECIPIENT_ALERTA="Production"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/alerta/metadata.yaml"},{id:"notify-awssns",meta:{name:"AWS SNS",link:"https://aws.amazon.com/sns/",categories:["notify.agent"],icon_filename:"aws.svg"},keywords:["AWS SNS"],overview:"# AWS SNS\n\nAs part of its AWS suite, Amazon provides a notification broker service called 'Simple Notification Service' (SNS). Amazon SNS works similarly to Netdata's own notification system, allowing to dispatch a single notification to multiple subscribers of different types. Among other things, SNS supports sending notifications to:\n- Email addresses\n- Mobile Phones via SMS\n- HTTP or HTTPS web hooks\n- AWS Lambda functions\n- AWS SQS queues\n- Mobile applications via push notifications\nYou can send notifications through Amazon SNS using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n\n## Limitations\n\n- While Amazon SNS supports sending differently formatted messages for different delivery methods, Netdata does not currently support this functionality.\n- For email notification support, we recommend using Netdata's email notifications, as it is has the following benefits:\n - In most cases, it requires less configuration.\n - Netdata's emails are nicely pre-formatted and support features like threading, which requires a lot of manual effort in SNS.\n - It is less resource intensive and more cost-efficient than SNS.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The [Amazon Web Services CLI tools](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (awscli).\n- An actual home directory for the user you run Netdata as, instead of just using `/` as a home directory. The setup depends on the distribution, but `/var/lib/netdata` is the recommended directory. If you are using Netdata as a dedicated user, the permissions will already be correct.\n- An Amazon SNS topic to send notifications to with one or more subscribers. The Getting Started section of the Amazon SNS documentation covers the basics of how to set this up. Make note of the Topic ARN when you create the topic.\n- While not mandatory, it is highly recommended to create a dedicated IAM user on your account for Netdata to send notifications. This user needs to have programmatic access, and should only allow access to SNS. For an additional layer of security, you can create one for each system or group of systems.\n- Terminal access to the Agent you wish to configure.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| aws path | The full path of the aws command. If empty, the system `$PATH` will be searched for it. If not found, Amazon SNS notifications will be silently disabled. | | yes |\n| SEND_AWSNS | Set `SEND_AWSNS` to YES | YES | yes |\n| AWSSNS_MESSAGE_FORMAT | Set `AWSSNS_MESSAGE_FORMAT` to to the string that you want the alert to be sent into. | ${status} on ${host} at ${date}: ${chart} ${value_string} | yes |\n| DEFAULT_RECIPIENT_AWSSNS | Set `DEFAULT_RECIPIENT_AWSSNS` to the Topic ARN you noted down upon creating the Topic. | | yes |\n\n##### AWSSNS_MESSAGE_FORMAT\n\nThe supported variables are:\n\n| Variable name | Description |\n|:---------------------------:|:---------------------------------------------------------------------------------|\n| `${alarm}` | Like "name = value units" |\n| `${status_message}` | Like "needs attention", "recovered", "is critical" |\n| `${severity}` | Like "Escalated to CRITICAL", "Recovered from WARNING" |\n| `${raised_for}` | Like "(alarm was raised for 10 minutes)" |\n| `${host}` | The host generated this event |\n| `${url_host}` | Same as ${host} but URL encoded |\n| `${unique_id}` | The unique id of this event |\n| `${alarm_id}` | The unique id of the alarm that generated this event |\n| `${event_id}` | The incremental id of the event, for this alarm id |\n| `${when}` | The timestamp this event occurred |\n| `${name}` | The name of the alarm, as given in netdata health.d entries |\n| `${url_name}` | Same as ${name} but URL encoded |\n| `${chart}` | The name of the chart (type.id) |\n| `${url_chart}` | Same as ${chart} but URL encoded |\n| `${status}` | The current status : REMOVED, UNINITIALIZED, UNDEFINED, CLEAR, WARNING, CRITICAL |\n| `${old_status}` | The previous status: REMOVED, UNINITIALIZED, UNDEFINED, CLEAR, WARNING, CRITICAL |\n| `${value}` | The current value of the alarm |\n| `${old_value}` | The previous value of the alarm |\n| `${src}` | The line number and file the alarm has been configured |\n| `${duration}` | The duration in seconds of the previous alarm state |\n| `${duration_txt}` | Same as ${duration} for humans |\n| `${non_clear_duration}` | The total duration in seconds this is/was non-clear |\n| `${non_clear_duration_txt}` | Same as ${non_clear_duration} for humans |\n| `${units}` | The units of the value |\n| `${info}` | A short description of the alarm |\n| `${value_string}` | Friendly value (with units) |\n| `${old_value_string}` | Friendly old value (with units) |\n| `${image}` | The URL of an image to represent the status of the alarm |\n| `${color}` | A color in AABBCC format for the alarm |\n| `${goto_url}` | The URL the user can click to see the netdata dashboard |\n| `${calc_expression}` | The expression evaluated to provide the value for the alarm |\n| `${calc_param_values}` | The value of the variables in the evaluated expression |\n| `${total_warnings}` | The total number of alarms in WARNING state on the host |\n| `${total_critical}` | The total number of alarms in CRITICAL state on the host |\n\n\n##### DEFAULT_RECIPIENT_AWSSNS\n\nAll roles will default to this variable if left unconfigured.\n\nYou can have different recipient Topics per **role**, by editing `DEFAULT_RECIPIENT_AWSSNS` with the Topic ARN you want, in the following entries at the bottom of the same file:\n\n```conf\nrole_recipients_awssns[sysadmin]="arn:aws:sns:us-east-2:123456789012:Systems"\nrole_recipients_awssns[domainadmin]="arn:aws:sns:us-east-2:123456789012:Domains"\nrole_recipients_awssns[dba]="arn:aws:sns:us-east-2:123456789012:Databases"\nrole_recipients_awssns[webmaster]="arn:aws:sns:us-east-2:123456789012:Development"\nrole_recipients_awssns[proxyadmin]="arn:aws:sns:us-east-2:123456789012:Proxy"\nrole_recipients_awssns[sitemgr]="arn:aws:sns:us-east-2:123456789012:Sites"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\nAn example working configuration would be:\n\n```yaml\n```conf\n#------------------------------------------------------------------------------\n# Amazon SNS notifications\n\nSEND_AWSSNS="YES"\nAWSSNS_MESSAGE_FORMAT="${status} on ${host} at ${date}: ${chart} ${value_string}"\nDEFAULT_RECIPIENT_AWSSNS="arn:aws:sns:us-east-2:123456789012:MyTopic"\n```\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/awssns/metadata.yaml"},{id:"notify-cloud-awssns",meta:{name:"Amazon SNS",link:"https://aws.amazon.com/sns/",categories:["notify.cloud"],icon_filename:"awssns.png"},keywords:["awssns"],overview:"# Amazon SNS\n\nFrom the Cloud interface, you can manage your space's notification settings and from these you can add a specific configuration to get notifications delivered on AWS SNS.\n",setup:"## Setup\n\n### Prerequisites\n\nTo add AWS SNS notification you need:\n\n- A Netdata Cloud account\n- Access to the space as an **Admin**\n- The Space needs to be on a paid plan\n- Have an AWS account with AWS SNS access, for more details check [how to configure this on AWS SNS](#settings-on-aws-sns)\n\n### Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **AwsSns** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For AWS SNS:\n - Topic ARN - topic provided on AWS SNS (with region) for where to publish your notifications. For more details check [how to configure this on AWS SNS](#settings-on-aws-sns)\n\n### Settings on AWS SNS\n\nTo enable the webhook integration on AWS SNS you need:\n1. [Setting up access for Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-setting-up.html)\n2. Create a topic\n - On AWS SNS management console click on **Create topic**\n - On the **Details** section, the standard type and provide the topic name\n - On the **Access policy** section, change the **Publishers** option to **Only the specified AWS accounts** and provide the Netdata AWS account **(123269920060)** that will be used to publish notifications to the topic being created\n - Finally, click on **Create topic** on the bottom of the page\n3. Now, use the new **Topic ARN** while adding AWS SNS integration on your space.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-discord",meta:{name:"Discord",link:"https://discord.com/",categories:["notify.cloud"],icon_filename:"discord.png"},keywords:["discord","community"],overview:"# Discord\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on Discord.\n",setup:"## Setup\n\n### Prerequisites\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- You need to have a Discord server able to receive webhooks integrations.\n\n### Discord Server Configuration\nSteps to configure your Discord server to receive [webhook notifications](https://support.discord.com/hc/en-us/articles/228383668) from Netdata:\n1. Go to `Server Settings` --\x3e `Integrations`\n2. **Create Webhook** or **View Webhooks** if you already have some defined\n3. Specify the **Name** and **Channel** on your new webhook\n4. Use Webhook URL to add your notification configuration on Netdata UI\n\n### Netdata Configuration Steps\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Discord** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Discord:\n - Define the type channel you want to send notifications to: **Text channel** or **Forum channel**\n - Webhook URL - URL provided on Discord for the channel you want to receive your notifications.\n - Thread name - if the Discord channel is a **Forum channel** you will need to provide the thread name as well\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-mattermost",meta:{name:"Mattermost",link:"https://mattermost.com/",categories:["notify.cloud"],icon_filename:"mattermost.png"},keywords:["mattermost"],overview:"# Mattermost\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on Mattermost.\n",setup:"## Setup\n\n### Prerequisites\n\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- The Netdata Space needs to be on a paid plan\n- You need to have permissions on Mattermost to add new integrations.\n- You need to have a Mattermost app on your workspace to receive the webhooks.\n\n### Mattermost Server Configuration\n\nSteps to configure your Mattermost to receive notifications from Netdata:\n\n1. In Mattermost, go to Product menu > Integrations > Incoming Webhook\n - If you don\u2019t have the Integrations option, incoming webhooks may not be enabled on your Mattermost server or may be disabled for non-admins. They can be enabled by a System Admin from System Console > Integrations > Integration Management. Once incoming webhooks are enabled, continue with the steps below.\n2. Select Add Incoming Webhook and add a name and description for the webhook. The description can be up to 500 characters\n3. Select the channel to receive webhook payloads, then select Add to create the webhook\n4. You will end up with a webhook endpoint that looks like below:\n `https://your-mattermost-server.com/hooks/xxx-generatedkey-xxx`\n\n - Treat this endpoint as a secret. Anyone who has it will be able to post messages to your Mattermost instance.\n\nFor more details please check Mattermost's article [Incoming webhooks for Mattermost](https://developers.mattermost.com/integrate/webhooks/incoming/).\n\n### Netdata Configuration Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Mattermost** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Mattermost:\n - Webhook URL - URL provided on Mattermost for the channel you want to receive your notifications\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-microsoftteams",meta:{name:"Microsoft Teams",link:"https://www.microsoft.com/en-us/microsoft-teams",categories:["notify.cloud"],icon_filename:"teams.svg"},keywords:["microsoft","teams"],overview:"# Microsoft Teams\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications to a Microsoft Teams channel.\n",setup:"## Setup\n\n### Prerequisites\n\nTo add Microsoft Teams notifications integration to your Netdata Cloud space you will need the following:\n\n- A Netdata Cloud account.\n- Access to the Netdata Cloud space as an **Admin**.\n- The Space to be on a paid plan.\n- A [Microsoft 365 for Business Account](https://www.microsoft.com/en-us/microsoft-365/business). Note that this is a **paid** account.\n\n### Settings on Microsoft Teams\n\n- The integration gets enabled at a team's channel level.\n- Click on the `...` (aka three dots) icon showing up next to the channel name, it should appear when you hover over it.\n- Click on `Connectors`.\n- Look for the `Incoming Webhook` connector and click configure.\n- Provide a name for your Incoming Webhook Connector, for example _Netdata Alerts_. You can also customize it with a proper icon instead of using the default image.\n- Click `Create`.\n- The _Incoming Webhook URL_ is created.\n- That is the URL to be provided to the Netdata Cloud configuration.\n\n### Settings on Netdata Cloud\n\n1. Click on the **Space settings** cog (located above your profile icon).\n2. Click on the **Notification** tab.\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen).\n4. On the **Microsoft Teams** card click on **+ Add**.\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings:\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it.\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration.\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only.\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Microsoft Teams:\n - Microsoft Teams Incoming Webhook URL - the _Incoming Webhook URL_ that was generated earlier.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-mobile-app",meta:{name:"Netdata Mobile App",link:"https://netdata.cloud",categories:["notify.cloud"],icon_filename:"netdata.png"},keywords:["mobile-app","phone","personal-notifications"],overview:"# Netdata Mobile App\n\nFrom the Netdata Cloud UI, you can manage your user notification settings and enable the configuration to deliver notifications on the Netdata Mobile Application.\n",setup:"## Setup\n\n### Prerequisites\n- A Netdata Cloud account\n- You need to have the Netdata Mobile Application installed on your [Android](https://play.google.com/store/apps/details?id=cloud.netdata.android&pli=1) or [iOS](https://apps.apple.com/in/app/netdata-mobile/id6474659622) phone.\n\n### Netdata Mobile App Configuration\nSteps to login to the Netdata Mobile Application to receive alert and reachability and alert notifications:\n1. Download the Netdata Mobile Application from [Google Play Store](https://play.google.com/store/apps/details?id=cloud.netdata.android&pli=1) or the [iOS App Store](https://apps.apple.com/in/app/netdata-mobile/id6474659622)\n2. Open the App and Choose the Sign In Option\n - Sign In with Email Address: Enter the Email Address of your registered Netdata Cloud Account and Click on the Verification link received by Email on your mobile device.\n - Sign In with QR Code: Scan the QR Code from your `Netdata Cloud` UI under **User Settings** --\x3e **Notifications** --\x3e **Mobile App Notifications** --\x3e **Show QR Code**\n3. Start receiving alert and reachability notifications for your **Space(s)** on a **Paid Subscription plan**\n\n### Netdata Configuration Steps\n1. Click on the **User settings** on the bottom left of your screen (your profile icon)\n2. Click on the **Notifications** tab\n3. Enable **Mobile App Notifications** if disabled (Enabled by default)\n4. Use the **Show QR Code** Option to login to your mobile device by scanning the **QR Code**\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-opsgenie",meta:{name:"Opsgenie",link:"https://www.atlassian.com/software/opsgenie",categories:["notify.cloud"],icon_filename:"opsgenie.png"},keywords:["opsgenie","atlassian"],overview:"# Opsgenie\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on Opsgenie.\n",setup:"## Setup\n\n### Prerequisites\n\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- The Netdata Space needs to be on a paid plan\n- You need to have permissions on Opsgenie to add new integrations.\n\n### Opsgenie Server Configuration\n\nSteps to configure your Opsgenie to receive notifications from Netdata:\n\n1. Go to integrations tab of your team, click **Add integration**\n2. Pick **API** from available integrations. Copy your API Key and press **Save Integration**.\n3. Paste copied API key into the corresponding field in **Integration configuration** section of Opsgenie modal window in Netdata.\n\n### Netdata Configuration Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Opsgenie** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Opsgenie:\n - API Key - a key provided on Opsgenie for the channel you want to receive your notifications.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-pagerduty",meta:{name:"PagerDuty",link:"https://www.pagerduty.com/",categories:["notify.cloud"],icon_filename:"pagerduty.png"},keywords:["pagerduty"],overview:"# PagerDuty\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on PagerDuty.\n",setup:"## Setup\n\n### Prerequisites\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- The Netdata Space needs to be on a paid plan\n- You need to have a PagerDuty service to receive events using webhooks.\n\n\n### PagerDuty Server Configuration\nSteps to configure your PagerDuty to receive notifications from Netdata:\n\n1. Create a service to receive events from your services directory page on PagerDuty\n2. At step 3, select `Events API V2` Integration or **View Webhooks** if you already have some defined\n3. Once the service is created, you will be redirected to its configuration page, where you can copy the **Integration Key** and **Integration URL (Alert Events)** fields to add them to your notification configuration in the Netdata UI.\n\n### Netdata Configuration Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **PagerDuty** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For PagerDuty:\n - Integration Key - is a 32 character key provided by PagerDuty to receive events on your service.\n - Integration URL (Alert Events) - is the URL provided by PagerDuty where we will send notifications.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-rocketchat",meta:{name:"RocketChat",link:"https://www.rocket.chat/",categories:["notify.cloud"],icon_filename:"rocketchat.png"},keywords:["rocketchat"],overview:"# RocketChat\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on RocketChat.\n",setup:"## Setup\n\n### Prerequisites\n\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- The Netdata Space needs to be on a paid plan\n- You need to have permissions on Mattermost to add new integrations.\n- You need to have a RocketChat app on your workspace to receive the webhooks.\n\n### Mattermost Server Configuration\n\nSteps to configure your RocketChat to receive notifications from Netdata:\n\n1. In RocketChat, Navigate to Administration > Workspace > Integrations.\n2. Click **+New** at the top right corner.\n3. For more details about each parameter, check [create-a-new-incoming-webhook](https://docs.rocket.chat/use-rocket.chat/workspace-administration/integrations#create-a-new-incoming-webhook).\n4. After configuring integration, click Save.\n5. You will end up with a webhook endpoint that looks like below:\n `https://your-server.rocket.chat/hooks/YYYYYYYYYYYYYYYYYYYYYYYY/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`\n - Treat this endpoint as a secret. Anyone who has it will be able to post messages to your RocketChat instance.\n\n\nFor more details please check RocketChat's article Incoming webhooks for [RocketChat](https://docs.rocket.chat/use-rocket.chat/workspace-administration/integrations/).\n\n### Netdata Configuration Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **RocketChat** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For RocketChat:\n - Webhook URL - URL provided on RocketChat for the channel you want to receive your notifications.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-slack",meta:{name:"Slack",link:"https://slack.com/",categories:["notify.cloud"],icon_filename:"slack.png"},keywords:["slack"],overview:"# Slack\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on Slack.\n",setup:"## Setup\n\n### Prerequisites\n\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- The Netdata Space needs to be on a paid plan\n- You need to have a Slack app on your workspace to receive the Webhooks.\n\n### Slack Server Configuration\n\nSteps to configure your Slack to receive notifications from Netdata:\n\n1. Create an app to receive webhook integrations. Check [Create an app](https://api.slack.com/apps?new_app=1) from Slack documentation for further details\n2. Install the app on your workspace\n3. Configure Webhook URLs for your workspace\n - On your app go to **Incoming Webhooks** and click on **activate incoming webhooks**\n - At the bottom of **Webhook URLs for Your Workspace** section you have **Add New Webhook to Workspace**\n - After pressing that specify the channel where you want your notifications to be delivered\n - Once completed copy the Webhook URL that you will need to add to your notification configuration on Netdata UI\n\nFor more details please check Slacks's article [Incoming webhooks for Slack](https://slack.com/help/articles/115005265063-Incoming-webhooks-for-Slack).\n\n### Netdata Configuration Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Slack** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Slack:\n - Webhook URL - URL provided on Slack for the channel you want to receive your notifications.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-splunk",meta:{name:"Splunk",link:"https://splunk.com/",categories:["notify.cloud"],icon_filename:"splunk-black.svg"},keywords:["Splunk"],overview:"# Splunk\n\nFrom the Cloud interface, you can manage your space's notification settings and from these you can add a specific configuration to get notifications delivered on Splunk.\n",setup:"## Setup\n\n### Prerequisites\n\nTo add Splunk notification you need:\n\n- A Netdata Cloud account\n- Access to the space as an **Admin**\n- The Space needs to be on a paid plan\n- URI and token for your Splunk HTTP Event Collector. Refer to the [Splunk documentation](https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector) for detailed instructions.\n\n### Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Splunk** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n - **Notification settings** are Netdata specific settings\n - Configuration name - provide a descriptive name for your configuration to easily identify it.\n - Rooms - select the nodes or areas of your infrastructure you want to receive notifications about.\n - Notification - choose the type of notifications you want to receive: All Alerts and unreachable, All Alerts, Critical only.\n - **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Splunk:\n - HTTP Event Collector URI - The URI of your HTTP event collector in Splunk\n - HTTP Event Collector Token - the token that Splunk provided to you when you created the HTTP Event Collector\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-telegram",meta:{name:"Telegram",link:"https://telegram.org/",categories:["notify.cloud"],icon_filename:"telegram.svg"},keywords:["Telegram"],overview:"# Telegram\n\nFrom the Cloud interface, you can manage your space's notification settings and from these you can add a specific configuration to get notifications delivered on Telegram.\n",setup:"## Setup\n\n### Prerequisites\n\nTo add Telegram notification you need:\n\n- A Netdata Cloud account\n- Access to the space as an **Admin**\n- The Space needs to be on a paid plan\n- The Telegram bot token, chat ID and _optionally_ the topic ID\n\n### Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Telegram** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n - **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n - **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Telegram:\n - Bot Token - the token of your bot\n - Chat ID - the chat id where your bot will deliver messages to\n - Topic ID - the identifier of the chat topic to which your bot will send messages. If omitted or 0, messages will be sent to the General topic. If topics are not supported, messages will be sent to the chat.\n\n### Getting the Telegram bot token, chat ID and topic ID\n\n- Bot token: To create one bot, contact the [@BotFather](https://t.me/BotFather) bot and send the command `/newbot` and follow the instructions. **Start a conversation with your bot or invite it into the group where you want it to send notifications**.\n- To get the chat ID you have two options:\n - Contact the [@myidbot](https://t.me/myidbot) bot and send the `/getid` command to get your personal chat ID, or invite it into a group and use the `/getgroupid` command to get the group chat ID.\n - Alternatively, you can get the chat ID directly from the bot API. Send your bot a command in the chat you want to use, then check `https://api.telegram.org/bot{YourBotToken}/getUpdates`, eg. `https://api.telegram.org/bot111122223:7OpFlFFRzRBbrUUmIjj5HF9Ox2pYJZy5/getUpdates`\n- To get the topic ID, the easiest way is this: Post a message to that topic, then right-click on it and select `Copy Message Link`. Paste it on a scratchpad and notice that it has the following structure `https://t.me/c/XXXXXXXXXX/YY/ZZ`. The topic ID is `YY` (integer).\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-victorops",meta:{name:"Splunk VictorOps",link:"https://www.splunk.com/en_us/about-splunk/acquisitions/splunk-on-call.html",categories:["notify.cloud"],icon_filename:"victorops.svg"},keywords:["VictorOps","Splunk","On-Call"],overview:"# Splunk VictorOps\n\nFrom the Cloud interface, you can manage your space's notification settings and from there you can add a specific configuration to get notifications delivered on Splunk On-Call/VictorOps.\n",setup:"## Setup\n\n### Prerequisites\n\nTo add Splunk VictorOps notification (also known as Splunk On-Call) you need:\n\n- A Netdata Cloud account\n- Access to the space as an **Admin**\n- The Space needs to be on a paid plan\n- Destination URL for your Splunk VictorOps REST Endpoint Integration. Refer to the [VictorOps documentation](https://help.victorops.com/knowledge-base/rest-endpoint-integration-guide) for detailed instructions.\n\n### Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Splunk VictorOps** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n - **Notification settings** are Netdata specific settings\n - Configuration name - provide a descriptive name for your configuration to easily identify it.\n - Rooms - select the nodes or areas of your infrastructure you want to receive notifications about.\n - Notification - choose the type of notifications you want to receive: All Alerts and unreachable, All Alerts, Critical only.\n - **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Splunk VictorOps:\n - Destination URL - The URL provided by VictorOps of your REST endpoint.\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-cloud-webhook",meta:{name:"Webhook",link:"https://en.wikipedia.org/wiki/Webhook",categories:["notify.cloud"],icon_filename:"webhook.svg"},keywords:["generic webhooks","webhooks"],overview:"# Webhook\n\nFrom the Netdata Cloud UI, you can manage your space's notification settings and enable the configuration to deliver notifications on a webhook using a predefined schema.\n",setup:"## Setup\n\n### Prerequisites\n\n- A Netdata Cloud account\n- Access to the Netdata Space as an **Admin**\n- The Netdata Space needs to be on a paid plan\n- You need to have an app that allows you to receive webhooks following a predefined schema.\n\n### Netdata Configuration Steps\n\n1. Click on the **Space settings** cog (located above your profile icon)\n2. Click on the **Notification** tab\n3. Click on the **+ Add configuration** button (near the top-right corner of your screen)\n4. On the **Webhook** card click on **+ Add**\n5. A modal will be presented to you to enter the required details to enable the configuration:\n * **Notification settings** are Netdata specific settings\n - Configuration name - you can optionally provide a name for your configuration you can easily refer to it\n - Rooms - by specifying a list of Rooms you are select to which nodes or areas of your infrastructure you want to be notified using this configuration\n - Notification - you specify which notifications you want to be notified using this configuration: All Alerts and unreachable, All Alerts, Critical only\n * **Integration configuration** are the specific notification integration required settings, which vary by notification method. For Webhook:\n - Webhook URL - webhook URL is the url of the service that Netdata will send notifications to. In order to keep the communication secured, we only accept HTTPS urls.\n - Extra headers - these are optional key-value pairs that you can set to be included in the HTTP requests sent to the webhook URL.\n - Authentication Mechanism - Netdata webhook integration supports 3 different authentication mechanisms.\n * Mutual TLS (recommended) - default authentication mechanism used if no other method is selected.\n * Basic - the client sends a request with an Authorization header that includes a base64-encoded string in the format **username:password**. These will settings will be required inputs.\n * Bearer - the client sends a request with an Authorization header that includes a **bearer token**. This setting will be a required input.\n\n\n ### Webhook service\n\n A webhook integration allows your application to receive real-time alerts from Netdata by sending HTTP requests to a specified URL. In this document, we'll go over the steps to set up a generic webhook integration, including adding headers, and implementing different types of authorization mechanisms.\n\n #### Netdata webhook integration\n\n A webhook integration is a way for one service to notify another service about events that occur within it. This is done by sending an HTTP POST request to a specified URL (known as the \"webhook URL\") when an event occurs.\n\n Netdata webhook integration service will send alert and reachability notifications to the destination service as soon as they are detected.\n\n For alert notifications, the content sent to the destination service contains a JSON object with the following properties:\n\n | field | type | description |\n | :-- | :-- | :-- |\n | message | string | A summary message of the alert. |\n | alarm | string | The alarm the notification is about. |\n | info | string | Additional info related with the alert. |\n | chart | string | The chart associated with the alert. |\n | context | string | The chart context. |\n | space | string | The space where the node that raised the alert is assigned. |\n | Rooms | object[object(string,string)] | Object with list of Rooms names and urls where the node belongs to. |\n | family | string | Context family. |\n | class | string | Classification of the alert, e.g. \"Error\". |\n | severity | string | Alert severity, can be one of \"warning\", \"critical\" or \"clear\". |\n | date | string | Date of the alert in ISO8601 format. |\n | duration | string | Duration the alert has been raised. |\n | additional_active_critical_alerts | integer | Number of additional critical alerts currently existing on the same node. |\n | additional_active_warning_alerts | integer | Number of additional warning alerts currently existing on the same node. |\n | alarm_url | string | Netdata Cloud URL for this alarm. |\n\n For reachability notifications, the JSON object will contain the following properties:\n\n | field | type | description |\n | :-- | :-- | :-- |\n | message | string | A summary message of the reachability alert. |\n | url | string | Netdata Cloud URL for the host experiencing the reachability alert. |\n | host | string | the host experiencing the reachability alert. |\n | severity | string | severity for this notification. If host is reachable, severity will be 'info', if host is unreachable, it will be 'critical'. |\n | status | object | an object with the status information. |\n | status.reachable | boolean | true if host is reachable, false otherwise |\n | status.text | string | can be 'reachable' or 'unreachable' |\n\n #### Extra headers\n\n When setting up a webhook integration, the user can specify a set of headers to be included in the HTTP requests sent to the webhook URL.\n\n By default, the following headers will be sent in the HTTP request\n\n | **Header** | **Value** |\n |:-------------------------------:|-----------------------------|\n | Content-Type | application/json |\n\n #### Authentication mechanisms\n\n Netdata webhook integration supports 3 different authentication mechanisms:\n\n ##### Mutual TLS authentication (recommended)\n\n In mutual Transport Layer Security (mTLS) authentication, the client and the server authenticate each other using X.509 certificates. This ensures that the client is connecting to the intended server, and that the server is only accepting connections from authorized clients.\n\n This is the default authentication mechanism used if no other method is selected.\n\n To take advantage of mutual TLS, you can configure your server to verify Netdata's client certificate. In order to achieve this, the Netdata client sending the notification supports mutual TLS (mTLS) to identify itself with a client certificate that your server can validate.\n\n The steps to perform this validation are as follows:\n\n - Store Netdata CA certificate on a file in your disk. The content of this file should be:\n\n
    \n Netdata CA certificate\n\n ```\n -----BEGIN CERTIFICATE-----\n MIIF0jCCA7qgAwIBAgIUDV0rS5jXsyNX33evHEQOwn9fPo0wDQYJKoZIhvcNAQEN\n BQAwgYAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH\n Ew1TYW4gRnJhbmNpc2NvMRYwFAYDVQQKEw1OZXRkYXRhLCBJbmMuMRIwEAYDVQQL\n EwlDbG91ZCBTUkUxGDAWBgNVBAMTD05ldGRhdGEgUm9vdCBDQTAeFw0yMzAyMjIx\n MjQzMDBaFw0zMzAyMTkxMjQzMDBaMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMK\n Q2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEWMBQGA1UEChMNTmV0\n ZGF0YSwgSW5jLjESMBAGA1UECxMJQ2xvdWQgU1JFMRgwFgYDVQQDEw9OZXRkYXRh\n IFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwIg7z3R++\n ppQYYVVoMIDlhWO3qVTMsAQoJYEvVa6fqaImUBLW/k19LUaXgUJPohB7gBp1pkjs\n QfY5dBo8iFr7MDHtyiAFjcQV181sITTMBEJwp77R4slOXCvrreizhTt1gvf4S1zL\n qeHBYWEgH0RLrOAqD0jkOHwewVouO0k3Wf2lEbCq3qRk2HeDvkv0LR7sFC+dDms8\n fDHqb/htqhk+FAJELGRqLeaFq1Z5Eq1/9dk4SIeHgK5pdYqsjpBzOTmocgriw6he\n s7F3dOec1ZZdcBEAxOjbYt4e58JwuR81cWAVMmyot5JNCzYVL9e5Vc5n22qt2dmc\n Tzw2rLOPt9pT5bzbmyhcDuNg2Qj/5DySAQ+VQysx91BJRXyUimqE7DwQyLhpQU72\n jw29lf2RHdCPNmk8J1TNropmpz/aI7rkperPugdOmxzP55i48ECbvDF4Wtazi+l+\n 4kx7ieeLfEQgixy4lRUUkrgJlIDOGbw+d2Ag6LtOgwBiBYnDgYpvLucnx5cFupPY\n Cy3VlJ4EKUeQQSsz5kVmvotk9MED4sLx1As8V4e5ViwI5dCsRfKny7BeJ6XNPLnw\n PtMh1hbiqCcDmB1urCqXcMle4sRhKccReYOwkLjLLZ80A+MuJuIEAUUuEPCwywzU\n R7pagYsmvNgmwIIuJtB6mIJBShC7TpJG+wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC\n AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU9IbvOsPSUrpr8H2zSafYVQ9e\n Ft8wDQYJKoZIhvcNAQENBQADggIBABQ08aI31VKZs8jzg+y/QM5cvzXlVhcpkZsY\n 1VVBr0roSBw9Pld9SERrEHto8PVXbadRxeEs4sKivJBKubWAooQ6NTvEB9MHuGnZ\n VCU+N035Gq/mhBZgtIs/Zz33jTB2ju3G4Gm9VTZbVqd0OUxFs41Iqvi0HStC3/Io\n rKi7crubmp5f2cNW1HrS++ScbTM+VaKVgQ2Tg5jOjou8wtA+204iYXlFpw9Q0qnP\n qq6ix7TfLLeRVp6mauwPsAJUgHZluz7yuv3r7TBdukU4ZKUmfAGIPSebtB3EzXfH\n 7Y326xzv0hEpjvDHLy6+yFfTdBSrKPsMHgc9bsf88dnypNYL8TUiEHlcTgCGU8ts\n ud8sWN2M5FEWbHPNYRVfH3xgY2iOYZzn0i+PVyGryOPuzkRHTxDLPIGEWE5susM4\n X4bnNJyKH1AMkBCErR34CLXtAe2ngJlV/V3D4I8CQFJdQkn9tuznohUU/j80xvPH\n FOcDGQYmh4m2aIJtlNVP6+/92Siugb5y7HfslyRK94+bZBg2D86TcCJWaaZOFUrR\n Y3WniYXsqM5/JI4OOzu7dpjtkJUYvwtg7Qb5jmm8Ilf5rQZJhuvsygzX6+WM079y\n nsjoQAm6OwpTN5362vE9SYu1twz7KdzBlUkDhePEOgQkWfLHBJWwB+PvB1j/cUA3\n 5zrbwvQf\n -----END CERTIFICATE-----\n ```\n
    \n\n - Enable client certificate validation on the web server that is doing the TLS termination. Below we show you how to perform this configuration in `NGINX` and `Apache`\n\n **NGINX**\n\n ```bash\n server {\n listen 443 ssl default_server;\n\n # ... existing SSL configuration for server authentication ...\n ssl_verify_client on;\n ssl_client_certificate /path/to/Netdata_CA.pem;\n\n location / {\n if ($ssl_client_s_dn !~ \"CN=app.netdata.cloud\") {\n return 403;\n }\n # ... existing location configuration ...\n }\n }\n ```\n\n **Apache**\n\n ```bash\n Listen 443\n \n # ... existing SSL configuration for server authentication ...\n SSLVerifyClient require\n SSLCACertificateFile \"/path/to/Netdata_CA.pem\"\n \n \n Require expr \"%{SSL_CLIENT_S_DN_CN} == 'app.netdata.cloud'\"\n # ... existing directory configuration ...\n \n ```\n\n ##### Basic authentication\n\n In basic authorization, the client sends a request with an Authorization header that includes a base64-encoded string in the format username:password. The server then uses this information to authenticate the client. If this authentication method is selected, the user can set the user and password that will be used when connecting to the destination service.\n\n ##### Bearer token authentication\n\n In bearer token authentication, the client sends a request with an Authorization header that includes a bearer token. The server then uses this token to authenticate the client. Bearer tokens are typically generated by an authentication service, and are passed to the client after a successful authentication. If this method is selected, the user can set the token to be used for connecting to the destination service.\n\n ##### Challenge secret\n\n To validate that you have ownership of the web application that will receive the webhook events, we are using a challenge response check mechanism.\n\n This mechanism works as follows:\n\n - The challenge secret parameter that you provide is a shared secret between you and Netdata only.\n - On your request for creating a new Webhook integration, we will make a GET request to the url of the webhook, adding a query parameter `crc_token`, consisting of a random string.\n - You will receive this request on your application and it must construct an encrypted response, consisting of a base64-encoded HMAC SHA-256 hash created from the crc_token and the shared secret. The response will be in the format:\n\n ```json\n {\n \"response_token\": \"sha256=9GKoHJYmcHIkhD+C182QWN79YBd+D+Vkj4snmZrfNi4=\"\n }\n ```\n\n - We will compare your application's response with the hash that we will generate using the challenge secret, and if they are the same, the integration creation will succeed.\n\n We will do this validation everytime you update your integration configuration.\n\n - Response requirements:\n - A base64 encoded HMAC SHA-256 hash created from the crc_token and the shared secret.\n - Valid response_token and JSON format.\n - Latency less than 5 seconds.\n - 200 HTTP response code.\n\n **Example response token generation in Python:**\n\n Here you can see how to define a handler for a Flask application in python 3:\n\n ```python\n import base64\n import hashlib\n import hmac\n import json\n\n key ='YOUR_CHALLENGE_SECRET'\n\n @app.route('/webhooks/netdata')\n def webhook_challenge():\n token = request.args.get('crc_token').encode('ascii')\n\n # creates HMAC SHA-256 hash from incomming token and your consumer secret\n sha256_hash_digest = hmac.new(key.encode(),\n msg=token,\n digestmod=hashlib.sha256).digest()\n\n # construct response data with base64 encoded hash\n response = {\n 'response_token': 'sha256=' + base64.b64encode(sha256_hash_digest).decode('ascii')\n }\n\n # returns properly formatted json response\n return json.dumps(response)\n ```\n\n",integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-notifications/metadata.yaml",troubleshooting:""},{id:"notify-custom",meta:{name:"Custom",link:"",categories:["notify.agent"],icon_filename:"custom.png"},keywords:["custom"],overview:"# Custom\n\nNetdata Agent's alert notification feature allows you to send custom notifications to any endpoint you choose.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_CUSTOM | Set `SEND_CUSTOM` to YES | YES | yes |\n| DEFAULT_RECIPIENT_CUSTOM | This value is dependent on how you handle the `${to}` variable inside the `custom_sender()` function. | | yes |\n| custom_sender() | You can look at the other senders in `/usr/libexec/netdata/plugins.d/alarm-notify.sh` for examples of how to modify the function in this configuration file. | | no |\n\n##### DEFAULT_RECIPIENT_CUSTOM\n\nAll roles will default to this variable if left unconfigured. You can edit `DEFAULT_RECIPIENT_CUSTOM` with the variable you want, in the following entries at the bottom of the same file:\n```\nrole_recipients_custom[sysadmin]="systems"\nrole_recipients_custom[domainadmin]="domains"\nrole_recipients_custom[dba]="databases systems"\nrole_recipients_custom[webmaster]="marketing development"\nrole_recipients_custom[proxyadmin]="proxy-admin"\nrole_recipients_custom[sitemgr]="sites"\n```\n\n\n##### custom_sender()\n\nThe following is a sample custom_sender() function in health_alarm_notify.conf, to send an SMS via an imaginary HTTPS endpoint to the SMS gateway:\n```\ncustom_sender() {\n # example human readable SMS\n local msg="${host} ${status_message}: ${alarm} ${raised_for}"\n\n # limit it to 160 characters and encode it for use in a URL\n urlencode "${msg:0:160}" >/dev/null; msg="${REPLY}"\n\n # a space separated list of the recipients to send alarms to\n to="${1}"\n\n for phone in ${to}; do\n httpcode=$(docurl -X POST \\\n --data-urlencode "From=XXX" \\\n --data-urlencode "To=${phone}" \\\n --data-urlencode "Body=${msg}" \\\n -u "${accountsid}:${accounttoken}" \\\n https://domain.website.com/)\n\n if [ "${httpcode}" = "200" ]; then\n info "sent custom notification ${msg} to ${phone}"\n sent=$((sent + 1))\n else\n error "failed to send custom notification ${msg} to ${phone} with HTTP error code ${httpcode}."\n fi\n done\n}\n```\n\nThe supported variables that you can use for the function\'s `msg` variable are:\n\n| Variable name | Description |\n|:---------------------------:|:---------------------------------------------------------------------------------|\n| `${alarm}` | Like "name = value units" |\n| `${status_message}` | Like "needs attention", "recovered", "is critical" |\n| `${severity}` | Like "Escalated to CRITICAL", "Recovered from WARNING" |\n| `${raised_for}` | Like "(alarm was raised for 10 minutes)" |\n| `${host}` | The host generated this event |\n| `${url_host}` | Same as ${host} but URL encoded |\n| `${unique_id}` | The unique id of this event |\n| `${alarm_id}` | The unique id of the alarm that generated this event |\n| `${event_id}` | The incremental id of the event, for this alarm id |\n| `${when}` | The timestamp this event occurred |\n| `${name}` | The name of the alarm, as given in netdata health.d entries |\n| `${url_name}` | Same as ${name} but URL encoded |\n| `${chart}` | The name of the chart (type.id) |\n| `${url_chart}` | Same as ${chart} but URL encoded |\n| `${status}` | The current status : REMOVED, UNINITIALIZED, UNDEFINED, CLEAR, WARNING, CRITICAL |\n| `${old_status}` | The previous status: REMOVED, UNINITIALIZED, UNDEFINED, CLEAR, WARNING, CRITICAL |\n| `${value}` | The current value of the alarm |\n| `${old_value}` | The previous value of the alarm |\n| `${src}` | The line number and file the alarm has been configured |\n| `${duration}` | The duration in seconds of the previous alarm state |\n| `${duration_txt}` | Same as ${duration} for humans |\n| `${non_clear_duration}` | The total duration in seconds this is/was non-clear |\n| `${non_clear_duration_txt}` | Same as ${non_clear_duration} for humans |\n| `${units}` | The units of the value |\n| `${info}` | A short description of the alarm |\n| `${value_string}` | Friendly value (with units) |\n| `${old_value_string}` | Friendly old value (with units) |\n| `${image}` | The URL of an image to represent the status of the alarm |\n| `${color}` | A color in AABBCC format for the alarm |\n| `${goto_url}` | The URL the user can click to see the netdata dashboard |\n| `${calc_expression}` | The expression evaluated to provide the value for the alarm |\n| `${calc_param_values}` | The value of the variables in the evaluated expression |\n| `${total_warnings}` | The total number of alarms in WARNING state on the host |\n| `${total_critical}` | The total number of alarms in CRITICAL state on the host |\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# custom notifications\n\nSEND_CUSTOM="YES"\nDEFAULT_RECIPIENT_CUSTOM=""\n\n# The custom_sender() is a custom function to do whatever you need to do\ncustom_sender() {\n # example human readable SMS\n local msg="${host} ${status_message}: ${alarm} ${raised_for}"\n\n # limit it to 160 characters and encode it for use in a URL\n urlencode "${msg:0:160}" >/dev/null; msg="${REPLY}"\n\n # a space separated list of the recipients to send alarms to\n to="${1}"\n\n for phone in ${to}; do\n httpcode=$(docurl -X POST \\\n --data-urlencode "From=XXX" \\\n --data-urlencode "To=${phone}" \\\n --data-urlencode "Body=${msg}" \\\n -u "${accountsid}:${accounttoken}" \\\n https://domain.website.com/)\n\n if [ "${httpcode}" = "200" ]; then\n info "sent custom notification ${msg} to ${phone}"\n sent=$((sent + 1))\n else\n error "failed to send custom notification ${msg} to ${phone} with HTTP error code ${httpcode}."\n fi\n done\n}\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/custom/metadata.yaml"},{id:"notify-discord",meta:{name:"Discord",link:"https://discord.com/",categories:["notify.agent"],icon_filename:"discord.png"},keywords:["Discord"],overview:"# Discord\n\nSend notifications to Discord using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The incoming webhook URL as given by Discord. Create a webhook by following the official [Discord documentation](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks). You can use the same on all your Netdata servers (or you can have multiple if you like - your decision).\n- One or more Discord channels to post the messages to\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_DISCORD | Set `SEND_DISCORD` to YES | YES | yes |\n| DISCORD_WEBHOOK_URL | set `DISCORD_WEBHOOK_URL` to your webhook URL. | | yes |\n| DEFAULT_RECIPIENT_DISCORD | Set `DEFAULT_RECIPIENT_DISCORD` to the channel you want the alert notifications to be sent to. You can define multiple channels like this: `alerts` `systems`. | | yes |\n\n##### DEFAULT_RECIPIENT_DISCORD\n\nAll roles will default to this variable if left unconfigured.\nYou can then have different channels per role, by editing `DEFAULT_RECIPIENT_DISCORD` with the channel you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_discord[sysadmin]="systems"\nrole_recipients_discord[domainadmin]="domains"\nrole_recipients_discord[dba]="databases systems"\nrole_recipients_discord[webmaster]="marketing development"\nrole_recipients_discord[proxyadmin]="proxy-admin"\nrole_recipients_discord[sitemgr]="sites"\n```\n\nThe values you provide should already exist as Discord channels in your server.\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# discord (discordapp.com) global notification options\n\nSEND_DISCORD="YES"\nDISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/XXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\nDEFAULT_RECIPIENT_DISCORD="alerts"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/discord/metadata.yaml"},{id:"notify-dynatrace",meta:{name:"Dynatrace",link:"https://dynatrace.com",categories:["notify.agent"],icon_filename:"dynatrace.svg"},keywords:["Dynatrace"],overview:"# Dynatrace\n\nDynatrace allows you to receive notifications using their Events REST API. See the [Dynatrace documentation](https://www.dynatrace.com/support/help/dynatrace-api/environment-api/events-v2/post-event) about POSTing an event in the Events API for more details.\nYou can send notifications to Dynatrace using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A Dynatrace Server. You can use the same on all your Netdata servers but make sure the server is network visible from your Netdata hosts. The Dynatrace server should be with protocol prefixed (http:// or https://), for example: https://monitor.example.com.\n- An API Token. Generate a secure access API token that enables access to your Dynatrace monitoring data via the REST-based API. See [Dynatrace API - Authentication](https://www.dynatrace.com/support/help/extend-dynatrace/dynatrace-api/basics/dynatrace-api-authentication/) for more details.\n- An API Space. This is the URL part of the page you have access in order to generate the API Token. For example, the URL for a generated API token might look like: https://monitor.illumineit.com/e/2a93fe0e-4cd5-469a-9d0d-1a064235cfce/#settings/integration/apikeys;gf=all In that case, the Space is 2a93fe0e-4cd5-469a-9d0d-1a064235cfce.\n- A Server Tag. To generate one on your Dynatrace Server, go to Settings --\x3e Tags --\x3e Manually applied tags and create the Tag. The Netdata alarm is sent as a Dynatrace Event to be correlated with all those hosts tagged with this Tag you have created.\n- Terminal access to the Agent you wish to configure\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_DYNATRACE | Set `SEND_DYNATRACE` to YES | YES | yes |\n| DYNATRACE_SERVER | Set `DYNATRACE_SERVER` to the Dynatrace server with the protocol prefix, for example `https://monitor.example.com`. | | yes |\n| DYNATRACE_TOKEN | Set `DYNATRACE_TOKEN` to your Dynatrace API authentication token | | yes |\n| DYNATRACE_SPACE | Set `DYNATRACE_SPACE` to the API Space, it is the URL part of the page you have access in order to generate the API Token. | | yes |\n| DYNATRACE_TAG_VALUE | Set `DYNATRACE_TAG_VALUE` to your Dynatrace Server Tag. | | yes |\n| DYNATRACE_ANNOTATION_TYPE | `DYNATRACE_ANNOTATION_TYPE` can be left to its default value Netdata Alarm, but you can change it to better fit your needs. | Netdata Alarm | no |\n| DYNATRACE_EVENT | Set `DYNATRACE_EVENT` to the Dynatrace eventType you want. | Netdata Alarm | no |\n\n##### DYNATRACE_SPACE\n\nFor example, the URL for a generated API token might look like: https://monitor.illumineit.com/e/2a93fe0e-4cd5-469a-9d0d-1a064235cfce/#settings/integration/apikeys;gf=all In that case, the Space is 2a93fe0e-4cd5-469a-9d0d-1a064235cfce.\n\n\n##### DYNATRACE_EVENT\n\n`AVAILABILITY_EVENT`, `CUSTOM_ALERT`, `CUSTOM_ANNOTATION`, `CUSTOM_CONFIGURATION`, `CUSTOM_DEPLOYMENT`, `CUSTOM_INFO`, `ERROR_EVENT`,\n`MARKED_FOR_TERMINATION`, `PERFORMANCE_EVENT`, `RESOURCE_CONTENTION_EVENT`.\nYou can read more [here](https://www.dynatrace.com/support/help/dynatrace-api/environment-api/events-v2/post-event#request-body-objects).\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# Dynatrace global notification options\n\nSEND_DYNATRACE="YES"\nDYNATRACE_SERVER="https://monitor.example.com"\nDYNATRACE_TOKEN="XXXXXXX"\nDYNATRACE_SPACE="2a93fe0e-4cd5-469a-9d0d-1a064235cfce"\nDYNATRACE_TAG_VALUE="SERVERTAG"\nDYNATRACE_ANNOTATION_TYPE="Netdata Alert"\nDYNATRACE_EVENT="AVAILABILITY_EVENT"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/dynatrace/metadata.yaml"},{id:"notify-email",meta:{name:"Email",link:"",categories:["notify.agent"],icon_filename:"email.png"},keywords:["email"],overview:"# Email\n\nSend notifications via Email using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A working sendmail command is required for email alerts to work. Almost all MTAs provide a sendmail interface. Netdata sends all emails as user netdata, so make sure your sendmail works for local users.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| EMAIL_SENDER | You can change `EMAIL_SENDER` to the email address sending the notifications. | netdata | no |\n| SEND_EMAIL | Set `SEND_EMAIL` to YES | YES | yes |\n| DEFAULT_RECIPIENT_EMAIL | Set `DEFAULT_RECIPIENT_EMAIL` to the email address you want the email to be sent by default. You can define multiple email addresses like this: `alarms@example.com` `systems@example.com`. | root | yes |\n\n##### DEFAULT_RECIPIENT_EMAIL\n\nAll roles will default to this variable if left unconfigured.\nThe `DEFAULT_RECIPIENT_CUSTOM` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_email[sysadmin]="systems@example.com"\nrole_recipients_email[domainadmin]="domains@example.com"\nrole_recipients_email[dba]="databases@example.com systems@example.com"\nrole_recipients_email[webmaster]="marketing@example.com development@example.com"\nrole_recipients_email[proxyadmin]="proxy-admin@example.com"\nrole_recipients_email[sitemgr]="sites@example.com"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# email global notification options\n\nEMAIL_SENDER="example@domain.com"\nSEND_EMAIL="YES"\nDEFAULT_RECIPIENT_EMAIL="recipient@example.com"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/email/metadata.yaml"},{id:"notify-flock",meta:{name:"Flock",link:"https://support.flock.com/",categories:["notify.agent"],icon_filename:"flock.png"},keywords:["Flock"],overview:"# Flock\n\nSend notifications to Flock using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The incoming webhook URL as given by flock.com. You can use the same on all your Netdata servers (or you can have multiple if you like). Read more about flock webhooks and how to get one [here](https://admin.flock.com/webhooks).\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_FLOCK | Set `SEND_FLOCK` to YES | YES | yes |\n| FLOCK_WEBHOOK_URL | set `FLOCK_WEBHOOK_URL` to your webhook URL. | | yes |\n| DEFAULT_RECIPIENT_FLOCK | Set `DEFAULT_RECIPIENT_FLOCK` to the Flock channel you want the alert notifications to be sent to. All roles will default to this variable if left unconfigured. | | yes |\n\n##### DEFAULT_RECIPIENT_FLOCK\n\nYou can have different channels per role, by editing DEFAULT_RECIPIENT_FLOCK with the channel you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_flock[sysadmin]="systems"\nrole_recipients_flock[domainadmin]="domains"\nrole_recipients_flock[dba]="databases systems"\nrole_recipients_flock[webmaster]="marketing development"\nrole_recipients_flock[proxyadmin]="proxy-admin"\nrole_recipients_flock[sitemgr]="sites"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# flock (flock.com) global notification options\n\nSEND_FLOCK="YES"\nFLOCK_WEBHOOK_URL="https://api.flock.com/hooks/sendMessage/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\nDEFAULT_RECIPIENT_FLOCK="alarms"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/flock/metadata.yaml"},{id:"notify-gotify",meta:{name:"Gotify",link:"https://gotify.net/",categories:["notify.agent"],icon_filename:"gotify.png"},keywords:["gotify"],overview:"# Gotify\n\n[Gotify](https://gotify.net/) is a self-hosted push notification service created for sending and receiving messages in real time.\nYou can send alerts to your Gotify instance using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- An application token. You can generate a new token in the Gotify Web UI.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_GOTIFY | Set `SEND_GOTIFY` to YES | YES | yes |\n| GOTIFY_APP_TOKEN | set `GOTIFY_APP_TOKEN` to the app token you generated. | | yes |\n| GOTIFY_APP_URL | Set `GOTIFY_APP_URL` to point to your Gotify instance, for example `https://push.example.domain/` | | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\nSEND_GOTIFY="YES"\nGOTIFY_APP_TOKEN="XXXXXXXXXXXXXXX"\nGOTIFY_APP_URL="https://push.example.domain/"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/gotify/metadata.yaml"},{id:"notify-irc",meta:{name:"IRC",link:"",categories:["notify.agent"],icon_filename:"irc.png"},keywords:["IRC"],overview:"# IRC\n\nSend notifications to IRC using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The `nc` utility. You can set the path to it, or Netdata will search for it in your system `$PATH`.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| nc path | Set the path for nc, otherwise Netdata will search for it in your system $PATH | | yes |\n| SEND_IRC | Set `SEND_IRC` YES. | YES | yes |\n| IRC_NETWORK | Set `IRC_NETWORK` to the IRC network which your preferred channels belong to. | | yes |\n| IRC_PORT | Set `IRC_PORT` to the IRC port to which a connection will occur. | | no |\n| IRC_NICKNAME | Set `IRC_NICKNAME` to the IRC nickname which is required to send the notification. It must not be an already registered name as the connection\'s MODE is defined as a guest. | | yes |\n| IRC_REALNAME | Set `IRC_REALNAME` to the IRC realname which is required in order to make the connection. | | yes |\n| DEFAULT_RECIPIENT_IRC | You can have different channels per role, by editing `DEFAULT_RECIPIENT_IRC` with the channel you want | | yes |\n\n##### nc path\n\n```sh\n#------------------------------------------------------------------------------\n# external commands\n#\n# The full path of the nc command.\n# If empty, the system $PATH will be searched for it.\n# If not found, irc notifications will be silently disabled.\nnc="/usr/bin/nc"\n```\n\n\n##### DEFAULT_RECIPIENT_IRC\n\nThe `DEFAULT_RECIPIENT_IRC` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_irc[sysadmin]="#systems"\nrole_recipients_irc[domainadmin]="#domains"\nrole_recipients_irc[dba]="#databases #systems"\nrole_recipients_irc[webmaster]="#marketing #development"\nrole_recipients_irc[proxyadmin]="#proxy-admin"\nrole_recipients_irc[sitemgr]="#sites"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# irc notification options\n#\nSEND_IRC="YES"\nDEFAULT_RECIPIENT_IRC="#system-alarms"\nIRC_NETWORK="irc.freenode.net"\nIRC_NICKNAME="netdata-alarm-user"\nIRC_REALNAME="netdata-user"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/irc/metadata.yaml"},{id:"notify-kavenegar",meta:{name:"Kavenegar",link:"https://kavenegar.com/",categories:["notify.agent"],icon_filename:"kavenegar.png"},keywords:["Kavenegar"],overview:"# Kavenegar\n\n[Kavenegar](https://kavenegar.com/) as service for software developers, based in Iran, provides send and receive SMS, calling voice by using its APIs.\nYou can send notifications to Kavenegar using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The APIKEY and Sender from http://panel.kavenegar.com/client/setting/account\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_KAVENEGAR | Set `SEND_KAVENEGAR` to YES | YES | yes |\n| KAVENEGAR_API_KEY | Set `KAVENEGAR_API_KEY` to your API key. | | yes |\n| KAVENEGAR_SENDER | Set `KAVENEGAR_SENDER` to the value of your Sender. | | yes |\n| DEFAULT_RECIPIENT_KAVENEGAR | Set `DEFAULT_RECIPIENT_KAVENEGAR` to the SMS recipient you want the alert notifications to be sent to. You can define multiple recipients like this: 09155555555 09177777777. | | yes |\n\n##### DEFAULT_RECIPIENT_KAVENEGAR\n\nAll roles will default to this variable if lest unconfigured.\n\nYou can then have different SMS recipients per role, by editing `DEFAULT_RECIPIENT_KAVENEGAR` with the SMS recipients you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_kavenegar[sysadmin]="09100000000"\nrole_recipients_kavenegar[domainadmin]="09111111111"\nrole_recipients_kavenegar[dba]="0922222222"\nrole_recipients_kavenegar[webmaster]="0933333333"\nrole_recipients_kavenegar[proxyadmin]="0944444444"\nrole_recipients_kavenegar[sitemgr]="0955555555"\n```\n\nThe values you provide should be defined as environments in `/etc/alertad.conf` with `ALLOWED_ENVIRONMENTS` option.\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# Kavenegar (Kavenegar.com) SMS options\n\nSEND_KAVENEGAR="YES"\nKAVENEGAR_API_KEY="XXXXXXXXXXXX"\nKAVENEGAR_SENDER="YYYYYYYY"\nDEFAULT_RECIPIENT_KAVENEGAR="0912345678"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/kavenegar/metadata.yaml"},{id:"notify-matrix",meta:{name:"Matrix",link:"https://spec.matrix.org/unstable/push-gateway-api/",categories:["notify.agent"],icon_filename:"matrix.svg"},keywords:["Matrix"],overview:"# Matrix\n\nSend notifications to Matrix network rooms using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The url of the homeserver (`https://homeserver:port`).\n- Credentials for connecting to the homeserver, in the form of a valid access token for your account (or for a dedicated notification account). These tokens usually don\'t expire.\n- The Room ids that you want to sent the notification to.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_MATRIX | Set `SEND_MATRIX` to YES | YES | yes |\n| MATRIX_HOMESERVER | set `MATRIX_HOMESERVER` to the URL of the Matrix homeserver. | | yes |\n| MATRIX_ACCESSTOKEN | Set `MATRIX_ACCESSTOKEN` to the access token from your Matrix account. | | yes |\n| DEFAULT_RECIPIENT_MATRIX | Set `DEFAULT_RECIPIENT_MATRIX` to the Rooms you want the alert notifications to be sent to. The format is `!roomid:homeservername`. | | yes |\n\n##### MATRIX_ACCESSTOKEN\n\nTo obtain the access token, you can use the following curl command:\n```\ncurl -XPOST -d \'{"type":"m.login.password", "user":"example", "password":"wordpass"}\' "https://homeserver:8448/_matrix/client/r0/login"\n```\n\n\n##### DEFAULT_RECIPIENT_MATRIX\n\nThe Room ids are unique identifiers and can be obtained from the Room settings in a Matrix client (e.g. Riot).\n\nYou can define multiple Rooms like this: `!roomid1:homeservername` `!roomid2:homeservername`.\n\nAll roles will default to this variable if left unconfigured.\n\nYou can have different Rooms per role, by editing `DEFAULT_RECIPIENT_MATRIX` with the `!roomid:homeservername` you want, in the following entries at the bottom of the same file:\n\n```conf\nrole_recipients_matrix[sysadmin]="!roomid1:homeservername"\nrole_recipients_matrix[domainadmin]="!roomid2:homeservername"\nrole_recipients_matrix[dba]="!roomid3:homeservername"\nrole_recipients_matrix[webmaster]="!roomid4:homeservername"\nrole_recipients_matrix[proxyadmin]="!roomid5:homeservername"\nrole_recipients_matrix[sitemgr]="!roomid6:homeservername"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# Matrix notifications\n\nSEND_MATRIX="YES"\nMATRIX_HOMESERVER="https://matrix.org:8448"\nMATRIX_ACCESSTOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\nDEFAULT_RECIPIENT_MATRIX="!XXXXXXXXXXXX:matrix.org"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/matrix/metadata.yaml"},{id:"notify-messagebird",meta:{name:"MessageBird",link:"https://messagebird.com/",categories:["notify.agent"],icon_filename:"messagebird.svg"},keywords:["MessageBird"],overview:"# MessageBird\n\nSend notifications to MessageBird using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- An access key under \'API ACCESS (REST)\' (you will want a live key), you can read more [here](https://developers.messagebird.com/quickstarts/sms/test-credits-api-keys/).\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_MESSAGEBIRD | Set `SEND_MESSAGEBIRD` to YES | YES | yes |\n| MESSAGEBIRD_ACCESS_KEY | Set `MESSAGEBIRD_ACCESS_KEY` to your API key. | | yes |\n| MESSAGEBIRD_NUMBER | Set `MESSAGEBIRD_NUMBER` to the MessageBird number you want to use for the alert. | | yes |\n| DEFAULT_RECIPIENT_MESSAGEBIRD | Set `DEFAULT_RECIPIENT_MESSAGEBIRD` to the number you want the alert notification to be sent as an SMS. You can define multiple recipients like this: +15555555555 +17777777777. | | yes |\n\n##### DEFAULT_RECIPIENT_MESSAGEBIRD\n\nAll roles will default to this variable if left unconfigured.\n\nYou can then have different recipients per role, by editing `DEFAULT_RECIPIENT_MESSAGEBIRD` with the number you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_messagebird[sysadmin]="+15555555555"\nrole_recipients_messagebird[domainadmin]="+15555555556"\nrole_recipients_messagebird[dba]="+15555555557"\nrole_recipients_messagebird[webmaster]="+15555555558"\nrole_recipients_messagebird[proxyadmin]="+15555555559"\nrole_recipients_messagebird[sitemgr]="+15555555550"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# Messagebird (messagebird.com) SMS options\n\nSEND_MESSAGEBIRD="YES"\nMESSAGEBIRD_ACCESS_KEY="XXXXXXXX"\nMESSAGEBIRD_NUMBER="XXXXXXX"\nDEFAULT_RECIPIENT_MESSAGEBIRD="+15555555555"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/messagebird/metadata.yaml"},{id:"notify-ntfy",meta:{name:"ntfy",link:"https://ntfy.sh/",categories:["notify.agent"],icon_filename:"ntfy.svg"},keywords:["ntfy"],overview:"# ntfy\n\n[ntfy](https://ntfy.sh/) (pronounce: notify) is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) notification service. It allows you to send notifications to your phone or desktop via scripts from any computer, entirely without signup, cost or setup. It's also [open source](https://github.com/binwiederhier/ntfy) if you want to run your own server.\nYou can send alerts to an ntfy server using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- (Optional) A [self-hosted ntfy server](https://docs.ntfy.sh/faq/#can-i-self-host-it), in case you don\'t want to use https://ntfy.sh\n- A new [topic](https://ntfy.sh/#subscribe) for the notifications to be published to\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_NTFY | Set `SEND_NTFY` to YES | YES | yes |\n| DEFAULT_RECIPIENT_NTFY | URL formed by the server-topic combination you want the alert notifications to be sent to. Unless hosting your own server, the server should always be set to https://ntfy.sh. | | yes |\n| NTFY_USERNAME | The username for netdata to use to authenticate with an ntfy server. | | no |\n| NTFY_PASSWORD | The password for netdata to use to authenticate with an ntfy server. | | no |\n| NTFY_ACCESS_TOKEN | The access token for netdata to use to authenticate with an ntfy server. | | no |\n\n##### DEFAULT_RECIPIENT_NTFY\n\nYou can define multiple recipient URLs like this: `https://SERVER1/TOPIC1` `https://SERVER2/TOPIC2`\n\nAll roles will default to this variable if left unconfigured.\n\nYou can then have different servers and/or topics per role, by editing DEFAULT_RECIPIENT_NTFY with the server-topic combination you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_ntfy[sysadmin]="https://SERVER1/TOPIC1"\nrole_recipients_ntfy[domainadmin]="https://SERVER2/TOPIC2"\nrole_recipients_ntfy[dba]="https://SERVER3/TOPIC3"\nrole_recipients_ntfy[webmaster]="https://SERVER4/TOPIC4"\nrole_recipients_ntfy[proxyadmin]="https://SERVER5/TOPIC5"\nrole_recipients_ntfy[sitemgr]="https://SERVER6/TOPIC6"\n```\n\n\n##### NTFY_USERNAME\n\nOnly useful on self-hosted ntfy instances. See [users and roles](https://docs.ntfy.sh/config/#users-and-roles) for details.\nEnsure that your user has proper read/write access to the provided topic in `DEFAULT_RECIPIENT_NTFY`\n\n\n##### NTFY_PASSWORD\n\nOnly useful on self-hosted ntfy instances. See [users and roles](https://docs.ntfy.sh/config/#users-and-roles) for details.\nEnsure that your user has proper read/write access to the provided topic in `DEFAULT_RECIPIENT_NTFY`\n\n\n##### NTFY_ACCESS_TOKEN\n\nThis can be used in place of `NTFY_USERNAME` and `NTFY_PASSWORD` to authenticate with a self-hosted ntfy instance. See [access tokens](https://docs.ntfy.sh/config/?h=access+to#access-tokens) for details.\nEnsure that the token user has proper read/write access to the provided topic in `DEFAULT_RECIPIENT_NTFY`\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\nSEND_NTFY="YES"\nDEFAULT_RECIPIENT_NTFY="https://ntfy.sh/netdata-X7seHg7d3Tw9zGOk https://ntfy.sh/netdata-oIPm4IK1IlUtlA30"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/ntfy/metadata.yaml"},{id:"notify-opsgenie",meta:{name:"OpsGenie",link:"https://www.atlassian.com/software/opsgenie",categories:["notify.agent"],icon_filename:"opsgenie.png"},keywords:["OpsGenie"],overview:"# OpsGenie\n\nOpsgenie is an alerting and incident response tool. It is designed to group and filter alarms, build custom routing rules for on-call teams, and correlate deployments and commits to incidents.\nYou can send notifications to Opsgenie using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- An Opsgenie integration. You can create an [integration](https://docs.opsgenie.com/docs/api-integration) in the [Opsgenie](https://www.atlassian.com/software/opsgenie) dashboard.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_OPSGENIE | Set `SEND_OPSGENIE` to YES | YES | yes |\n| OPSGENIE_API_KEY | Set `OPSGENIE_API_KEY` to your API key. | | yes |\n| OPSGENIE_API_URL | Set `OPSGENIE_API_URL` to the corresponding URL if required, for example there are region-specific API URLs such as `https://eu.api.opsgenie.com`. | https://api.opsgenie.com | no |\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\nSEND_OPSGENIE="YES"\nOPSGENIE_API_KEY="11111111-2222-3333-4444-555555555555"\nOPSGENIE_API_URL=""\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/opsgenie/metadata.yaml"},{id:"notify-pagerduty",meta:{name:"PagerDuty",link:"https://www.pagerduty.com/",categories:["notify.agent"],icon_filename:"pagerduty.png"},keywords:["PagerDuty"],overview:"# PagerDuty\n\nPagerDuty is an enterprise incident resolution service that integrates with ITOps and DevOps monitoring stacks to improve operational reliability and agility. From enriching and aggregating events to correlating them into incidents, PagerDuty streamlines the incident management process by reducing alert noise and resolution times.\nYou can send notifications to PagerDuty using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- An installation of the [PagerDuty](https://www.pagerduty.com/docs/guides/agent-install-guide/) agent on the node running the Netdata Agent\n- A PagerDuty Generic API service using either the `Events API v2` or `Events API v1`\n- [Add a new service](https://support.pagerduty.com/docs/services-and-integrations#section-configuring-services-and-integrations) to PagerDuty. Click Use our API directly and select either `Events API v2` or `Events API v1`. Once you finish creating the service, click on the Integrations tab to find your Integration Key.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_PD | Set `SEND_PD` to YES | YES | yes |\n| DEFAULT_RECIPIENT_PD | Set `DEFAULT_RECIPIENT_PD` to the PagerDuty service key you want the alert notifications to be sent to. You can define multiple service keys like this: `pd_service_key_1` `pd_service_key_2`. | | yes |\n\n##### DEFAULT_RECIPIENT_PD\n\nAll roles will default to this variable if left unconfigured.\n\nThe `DEFAULT_RECIPIENT_PD` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_pd[sysadmin]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa"\nrole_recipients_pd[domainadmin]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb"\nrole_recipients_pd[dba]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc"\nrole_recipients_pd[webmaster]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd"\nrole_recipients_pd[proxyadmin]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe"\nrole_recipients_pd[sitemgr]="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# pagerduty.com notification options\n\nSEND_PD="YES"\nDEFAULT_RECIPIENT_PD="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"\nUSE_PD_VERSION="2"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/pagerduty/metadata.yaml"},{id:"notify-prowl",meta:{name:"Prowl",link:"https://www.prowlapp.com/",categories:["notify.agent"],icon_filename:"prowl.png"},keywords:["Prowl"],overview:"# Prowl\n\nSend notifications to Prowl using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n\n## Limitations\n\n- Because of how Netdata integrates with Prowl, there is a hard limit of at most 1000 notifications per hour (starting from the first notification sent). Any alerts beyond the first thousand in an hour will be dropped.\n- Warning messages will be sent with the 'High' priority, critical messages will be sent with the 'Emergency' priority, and all other messages will be sent with the normal priority. Opening the notification's associated URL will take you to the Netdata dashboard of the system that issued the alert, directly to the chart that it triggered on.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A Prowl API key, which can be requested through the Prowl website after registering\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_PROWL | Set `SEND_PROWL` to YES | YES | yes |\n| DEFAULT_RECIPIENT_PROWL | Set `DEFAULT_RECIPIENT_PROWL` to the Prowl API key you want the alert notifications to be sent to. You can define multiple API keys like this: `APIKEY1`, `APIKEY2`. | | yes |\n\n##### DEFAULT_RECIPIENT_PROWL\n\nAll roles will default to this variable if left unconfigured.\n\nThe `DEFAULT_RECIPIENT_PROWL` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_prowl[sysadmin]="AAAAAAAA"\nrole_recipients_prowl[domainadmin]="BBBBBBBBB"\nrole_recipients_prowl[dba]="CCCCCCCCC"\nrole_recipients_prowl[webmaster]="DDDDDDDDDD"\nrole_recipients_prowl[proxyadmin]="EEEEEEEEEE"\nrole_recipients_prowl[sitemgr]="FFFFFFFFFF"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# iOS Push Notifications\n\nSEND_PROWL="YES"\nDEFAULT_RECIPIENT_PROWL="XXXXXXXXXX"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/prowl/metadata.yaml"},{id:"notify-pushbullet",meta:{name:"Pushbullet",link:"https://www.pushbullet.com/",categories:["notify.agent"],icon_filename:"pushbullet.png"},keywords:["Pushbullet"],overview:"# Pushbullet\n\nSend notifications to Pushbullet using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A Pushbullet access token that can be created in your [account settings](https://www.pushbullet.com/#settings/account).\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| Send_PUSHBULLET | Set `Send_PUSHBULLET` to YES | YES | yes |\n| PUSHBULLET_ACCESS_TOKEN | set `PUSHBULLET_ACCESS_TOKEN` to the access token you generated. | | yes |\n| DEFAULT_RECIPIENT_PUSHBULLET | Set `DEFAULT_RECIPIENT_PUSHBULLET` to the email (e.g. `example@domain.com`) or the channel tag (e.g. `#channel`) you want the alert notifications to be sent to. | | yes |\n\n##### DEFAULT_RECIPIENT_PUSHBULLET\n\nYou can define multiple entries like this: user1@email.com user2@email.com.\n\nAll roles will default to this variable if left unconfigured.\n\nThe `DEFAULT_RECIPIENT_PUSHBULLET` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_pushbullet[sysadmin]="user1@email.com"\nrole_recipients_pushbullet[domainadmin]="user2@mail.com"\nrole_recipients_pushbullet[dba]="#channel1"\nrole_recipients_pushbullet[webmaster]="#channel2"\nrole_recipients_pushbullet[proxyadmin]="user3@mail.com"\nrole_recipients_pushbullet[sitemgr]="user4@mail.com"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# pushbullet (pushbullet.com) push notification options\n\nSEND_PUSHBULLET="YES"\nPUSHBULLET_ACCESS_TOKEN="XXXXXXXXX"\nDEFAULT_RECIPIENT_PUSHBULLET="admin1@example.com admin3@somemail.com #examplechanneltag #anotherchanneltag"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/pushbullet/metadata.yaml"},{id:"notify-pushover",meta:{name:"PushOver",link:"https://pushover.net/",categories:["notify.agent"],icon_filename:"pushover.png"},keywords:["PushOver"],overview:"# PushOver\n\nSend notification to Pushover using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n- Netdata will send warning messages with priority 0 and critical messages with priority 1.\n- Pushover allows you to select do-not-disturb hours. The way this is configured, critical notifications will ring and vibrate your phone, even during the do-not-disturb-hours.\n- All other notifications will be delivered silently.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- An Application token. You can use the same on all your Netdata servers.\n- A User token for each user you are going to send notifications to. This is the actual recipient of the notification.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_PUSHOVER | Set `SEND_PUSHOVER` to YES | YES | yes |\n| PUSHOVER_WEBHOOK_URL | set `PUSHOVER_WEBHOOK_URL` to your Pushover Application token. | | yes |\n| DEFAULT_RECIPIENT_PUSHOVER | Set `DEFAULT_RECIPIENT_PUSHOVER` the Pushover User token you want the alert notifications to be sent to. You can define multiple User tokens like this: `USERTOKEN1` `USERTOKEN2`. | | yes |\n\n##### DEFAULT_RECIPIENT_PUSHOVER\n\nAll roles will default to this variable if left unconfigured.\n\nThe `DEFAULT_RECIPIENT_PUSHOVER` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_pushover[sysadmin]="USERTOKEN1"\nrole_recipients_pushover[domainadmin]="USERTOKEN2"\nrole_recipients_pushover[dba]="USERTOKEN3 USERTOKEN4"\nrole_recipients_pushover[webmaster]="USERTOKEN5"\nrole_recipients_pushover[proxyadmin]="USERTOKEN6"\nrole_recipients_pushover[sitemgr]="USERTOKEN7"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# pushover (pushover.net) global notification options\n\nSEND_PUSHOVER="YES"\nPUSHOVER_APP_TOKEN="XXXXXXXXX"\nDEFAULT_RECIPIENT_PUSHOVER="USERTOKEN"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/pushover/metadata.yaml"},{id:"notify-rocketchat",meta:{name:"RocketChat",link:"https://rocket.chat/",categories:["notify.agent"],icon_filename:"rocketchat.png"},keywords:["RocketChat"],overview:"# RocketChat\n\nSend notifications to Rocket.Chat using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The incoming webhook URL as given by RocketChat. You can use the same on all your Netdata servers (or you can have multiple if you like - your decision).\n- One or more channels to post the messages to\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_ROCKETCHAT | Set `SEND_ROCKETCHAT` to `YES` | YES | yes |\n| ROCKETCHAT_WEBHOOK_URL | set `ROCKETCHAT_WEBHOOK_URL` to your webhook URL. | | yes |\n| DEFAULT_RECIPIENT_ROCKETCHAT | Set `DEFAULT_RECIPIENT_ROCKETCHAT` to the channel you want the alert notifications to be sent to. You can define multiple channels like this: `alerts` `systems`. | | yes |\n\n##### DEFAULT_RECIPIENT_ROCKETCHAT\n\nAll roles will default to this variable if left unconfigured.\n\nThe `DEFAULT_RECIPIENT_ROCKETCHAT` can be edited in the following entries at the bottom of the same file:\n```conf\nrole_recipients_rocketchat[sysadmin]="systems"\nrole_recipients_rocketchat[domainadmin]="domains"\nrole_recipients_rocketchat[dba]="databases systems"\nrole_recipients_rocketchat[webmaster]="marketing development"\nrole_recipients_rocketchat[proxyadmin]="proxy_admin"\nrole_recipients_rocketchat[sitemgr]="sites"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# rocketchat (rocket.chat) global notification options\n\nSEND_ROCKETCHAT="YES"\nROCKETCHAT_WEBHOOK_URL=""\nDEFAULT_RECIPIENT_ROCKETCHAT="monitoring_alarms"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/rocketchat/metadata.yaml"},{id:"notify-slack",meta:{name:"Slack",link:"https://slack.com/",categories:["notify.agent"],icon_filename:"slack.png"},keywords:["Slack"],overview:"# Slack\n\nSend notifications to a Slack workspace using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Slack app along with an incoming webhook, read Slack\'s guide on the topic [here](https://api.slack.com/messaging/webhooks).\n- One or more channels to post the messages to\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_SLACK | Set `SEND_SLACK` to YES | YES | yes |\n| SLACK_WEBHOOK_URL | set `SLACK_WEBHOOK_URL` to your Slack app\'s webhook URL. | | yes |\n| DEFAULT_RECIPIENT_SLACK | Set `DEFAULT_RECIPIENT_SLACK` to the Slack channel your Slack app is set to send messages to. The syntax for channels is `#channel` or `channel`. | | yes |\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# slack (slack.com) global notification options\n\nSEND_SLACK="YES"\nSLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXXXXXX/XXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \nDEFAULT_RECIPIENT_SLACK="#alarms"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/slack/metadata.yaml"},{id:"notify-sms",meta:{name:"SMS",link:"http://smstools3.kekekasvi.com/",categories:["notify.agent"],icon_filename:"sms.svg"},keywords:["SMS tools 3","SMS","Messaging"],overview:"# SMS\n\nSend notifications to `smstools3` using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\nThe SMS Server Tools 3 is a SMS Gateway software which can send and receive short messages through GSM modems and mobile phones.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- [Install](http://smstools3.kekekasvi.com/index.php?p=compiling) and [configure](http://smstools3.kekekasvi.com/index.php?p=configure) `smsd`\n- To ensure that the user `netdata` can execute `sendsms`. Any user executing `sendsms` needs to:\n - Have write permissions to /tmp and /var/spool/sms/outgoing\n - Be a member of group smsd\n - To ensure that the steps above are successful, just su netdata and execute sendsms phone message.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| sendsms | Set the path for `sendsms`, otherwise Netdata will search for it in your system `$PATH:` | YES | yes |\n| SEND_SMS | Set `SEND_SMS` to `YES`. | | yes |\n| DEFAULT_RECIPIENT_SMS | Set DEFAULT_RECIPIENT_SMS to the phone number you want the alert notifications to be sent to. You can define multiple phone numbers like this: PHONE1 PHONE2. | | yes |\n\n##### sendsms\n\n# The full path of the sendsms command (smstools3).\n# If empty, the system $PATH will be searched for it.\n# If not found, SMS notifications will be silently disabled.\nsendsms="/usr/bin/sendsms"\n\n\n##### DEFAULT_RECIPIENT_SMS\n\nAll roles will default to this variable if left unconfigured.\n\nYou can then have different phone numbers per role, by editing `DEFAULT_RECIPIENT_SMS` with the phone number you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_sms[sysadmin]="PHONE1"\nrole_recipients_sms[domainadmin]="PHONE2"\nrole_recipients_sms[dba]="PHONE3"\nrole_recipients_sms[webmaster]="PHONE4"\nrole_recipients_sms[proxyadmin]="PHONE5"\nrole_recipients_sms[sitemgr]="PHONE6"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# SMS Server Tools 3 (smstools3) global notification options\nSEND_SMS="YES"\nDEFAULT_RECIPIENT_SMS="1234567890"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/smstools3/metadata.yaml"},{id:"notify-syslog",meta:{name:"syslog",link:"",categories:["notify.agent"],icon_filename:"syslog.png"},keywords:["syslog"],overview:"# syslog\n\nSend notifications to Syslog using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A working `logger` command for this to work. This is the case on pretty much every Linux system in existence, and most BSD systems.\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SYSLOG_FACILITY | Set `SYSLOG_FACILITY` to the facility used for logging, by default this value is set to `local6`. | | yes |\n| DEFAULT_RECIPIENT_SYSLOG | Set `DEFAULT_RECIPIENT_SYSLOG` to the recipient you want the alert notifications to be sent to. | | yes |\n| SEND_SYSLOG | Set SEND_SYSLOG to YES, make sure you have everything else configured before turning this on. | | yes |\n\n##### DEFAULT_RECIPIENT_SYSLOG\n\nTargets are defined as follows:\n\n```\n[[facility.level][@host[:port]]/]prefix\n```\n\nprefix defines what the log messages are prefixed with. By default, all lines are prefixed with \'netdata\'.\n\nThe facility and level are the standard syslog facility and level options, for more info on them see your local logger and syslog documentation. By default, Netdata will log to the local6 facility, with a log level dependent on the type of message (crit for CRITICAL, warning for WARNING, and info for everything else).\n\nYou can configure sending directly to remote log servers by specifying a host (and optionally a port). However, this has a somewhat high overhead, so it is much preferred to use your local syslog daemon to handle the forwarding of messages to remote systems (pretty much all of them allow at least simple forwarding, and most of the really popular ones support complex queueing and routing of messages to remote log servers).\n\nYou can define multiple recipients like this: daemon.notice@loghost:514/netdata daemon.notice@loghost2:514/netdata.\nAll roles will default to this variable if left unconfigured.\n\n\n##### SEND_SYSLOG \n\nYou can then have different recipients per role, by editing DEFAULT_RECIPIENT_SYSLOG with the recipient you want, in the following entries at the bottom of the same file:\n\n```conf\nrole_recipients_syslog[sysadmin]="daemon.notice@loghost1:514/netdata"\nrole_recipients_syslog[domainadmin]="daemon.notice@loghost2:514/netdata"\nrole_recipients_syslog[dba]="daemon.notice@loghost3:514/netdata"\nrole_recipients_syslog[webmaster]="daemon.notice@loghost4:514/netdata"\nrole_recipients_syslog[proxyadmin]="daemon.notice@loghost5:514/netdata"\nrole_recipients_syslog[sitemgr]="daemon.notice@loghost6:514/netdata"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# syslog notifications\n\nSEND_SYSLOG="YES"\nSYSLOG_FACILITY=\'local6\'\nDEFAULT_RECIPIENT_SYSLOG="daemon.notice@loghost6:514/netdata"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/syslog/metadata.yaml"},{id:"notify-teams",meta:{name:"Microsoft Teams",link:"https://www.microsoft.com/en-us/microsoft-teams/log-in",categories:["notify.agent"],icon_filename:"msteams.svg"},keywords:["Microsoft","Teams","MS teams"],overview:"# Microsoft Teams\n\nYou can send Netdata alerts to Microsoft Teams using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- The incoming webhook URL as given by Microsoft Teams. You can use the same on all your Netdata servers (or you can have multiple if you like).\n- One or more channels to post the messages to\n- Access to the terminal where Netdata Agent is running\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_MSTEAMS | Set `SEND_MSTEAMS` to YES | YES | yes |\n| MSTEAMS_WEBHOOK_URL | set `MSTEAMS_WEBHOOK_URL` to the incoming webhook URL as given by Microsoft Teams. | | yes |\n| DEFAULT_RECIPIENT_MSTEAMS | Set `DEFAULT_RECIPIENT_MSTEAMS` to the encoded Microsoft Teams channel name you want the alert notifications to be sent to. | | yes |\n\n##### DEFAULT_RECIPIENT_MSTEAMS\n\nIn Microsoft Teams the channel name is encoded in the URI after `/IncomingWebhook/`. You can define multiple channels like this: `CHANNEL1` `CHANNEL2`.\n\nAll roles will default to this variable if left unconfigured.\n\nYou can have different channels per role, by editing `DEFAULT_RECIPIENT_MSTEAMS` with the channel you want, in the following entries at the bottom of the same file:\n```conf\nrole_recipients_msteams[sysadmin]="CHANNEL1"\nrole_recipients_msteams[domainadmin]="CHANNEL2"\nrole_recipients_msteams[dba]="databases CHANNEL3"\nrole_recipients_msteams[webmaster]="CHANNEL4"\nrole_recipients_msteams[proxyadmin]="CHANNEL5"\nrole_recipients_msteams[sitemgr]="CHANNEL6"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# Microsoft Teams (office.com) global notification options\n\nSEND_MSTEAMS="YES"\nMSTEAMS_WEBHOOK_URL="https://outlook.office.com/webhook/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/IncomingWebhook/CHANNEL/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"\nDEFAULT_RECIPIENT_MSTEAMS="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/msteams/metadata.yaml"},{id:"notify-telegram",meta:{name:"Telegram",link:"https://telegram.org/",categories:["notify.agent"],icon_filename:"telegram.svg"},keywords:["Telegram"],overview:"# Telegram\n\nSend notifications to Telegram using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- A bot token. To get one, contact the [@BotFather](https://t.me/BotFather) bot and send the command `/newbot` and follow the instructions. Invite your bot to a group where you want it to send messages.\n- The chat ID for every chat you want to send messages to. Invite [@myidbot](https://t.me/myidbot) bot to the group that will receive notifications, and write the command `/getgroupid@myidbot` to get the group chat ID. Group IDs start with a hyphen, supergroup IDs start with `-100`.\n- Terminal access to the Agent you wish to configure.\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_TELEGRAM | Set `SEND_TELEGRAM` to YES | YES | yes |\n| TELEGRAM_BOT_TOKEN | set `TELEGRAM_BOT_TOKEN` to your bot token. | | yes |\n| DEFAULT_RECIPIENT_TELEGRAM | Set `DEFAULT_RECIPIENT_TELEGRAM` to the chat ID you want the alert notifications to be sent to. You can define multiple chat IDs like this: -49999333322 -1009999222255. | | yes |\n\n##### DEFAULT_RECIPIENT_TELEGRAM\n\nAll roles will default to this variable if left unconfigured.\n\nThe `DEFAULT_RECIPIENT_CUSTOM` can be edited in the following entries at the bottom of the same file:\n\n```conf\nrole_recipients_telegram[sysadmin]="-49999333324"\nrole_recipients_telegram[domainadmin]="-49999333389"\nrole_recipients_telegram[dba]="-10099992222"\nrole_recipients_telegram[webmaster]="-10099992222 -49999333389"\nrole_recipients_telegram[proxyadmin]="-49999333344"\nrole_recipients_telegram[sitemgr]="-49999333876"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# telegram (telegram.org) global notification options\n\nSEND_TELEGRAM="YES"\nTELEGRAM_BOT_TOKEN="111122223:7OpFlFFRzRBbrUUmIjj5HF9Ox2pYJZy5"\nDEFAULT_RECIPIENT_TELEGRAM="-49999333876"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/telegram/metadata.yaml"},{id:"notify-twilio",meta:{name:"Twilio",link:"https://www.twilio.com/",categories:["notify.agent"],icon_filename:"twilio.png"},keywords:["Twilio"],overview:"# Twilio\n\nSend notifications to Twilio using Netdata's Agent alert notification feature, which supports dozens of endpoints, user roles, and more.\n\n",setup:'## Setup\n\n### Prerequisites\n\n#### \n\n- Get your SID, and Token from https://www.twilio.com/console\n- Terminal access to the Agent you wish to configure\n\n\n\n### Configuration\n\n#### File\n\nThe configuration file name for this integration is `health_alarm_notify.conf`.\n\n\nYou can edit the configuration file using the `edit-config` script from the\nNetdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).\n\n```bash\ncd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata\nsudo ./edit-config health_alarm_notify.conf\n```\n#### Options\n\nThe following options can be defined for this notification\n\n{% details open=true summary="Config Options" %}\n| Name | Description | Default | Required |\n|:----|:-----------|:-------|:--------:|\n| SEND_TWILIO | Set `SEND_TWILIO` to YES | YES | yes |\n| TWILIO_ACCOUNT_SID | set `TWILIO_ACCOUNT_SID` to your account SID. | | yes |\n| TWILIO_ACCOUNT_TOKEN | Set `TWILIO_ACCOUNT_TOKEN` to your account token. | | yes |\n| TWILIO_NUMBER | Set `TWILIO_NUMBER` to your account\'s number. | | yes |\n| DEFAULT_RECIPIENT_TWILIO | Set DEFAULT_RECIPIENT_TWILIO to the number you want the alert notifications to be sent to. You can define multiple numbers like this: +15555555555 +17777777777. | | yes |\n\n##### DEFAULT_RECIPIENT_TWILIO\n\nYou can then have different recipients per role, by editing DEFAULT_RECIPIENT_TWILIO with the recipient\'s number you want, in the following entries at the bottom of the same file:\n\n```conf\nrole_recipients_twilio[sysadmin]="+15555555555"\nrole_recipients_twilio[domainadmin]="+15555555556"\nrole_recipients_twilio[dba]="+15555555557"\nrole_recipients_twilio[webmaster]="+15555555558"\nrole_recipients_twilio[proxyadmin]="+15555555559"\nrole_recipients_twilio[sitemgr]="+15555555550"\n```\n\n\n{% /details %}\n#### Examples\n\n##### Basic Configuration\n\n\n\n```yaml\n#------------------------------------------------------------------------------\n# Twilio (twilio.com) SMS options\n\nSEND_TWILIO="YES"\nTWILIO_ACCOUNT_SID="xxxxxxxxx"\nTWILIO_ACCOUNT_TOKEN="xxxxxxxxxx"\nTWILIO_NUMBER="xxxxxxxxxxx"\nDEFAULT_RECIPIENT_TWILIO="+15555555555"\n\n```\n',troubleshooting:'## Troubleshooting\n\n### Test Notification\n\nYou can run the following command by hand, to test alerts configuration:\n\n```bash\n# become user netdata\nsudo su -s /bin/bash netdata\n\n# enable debugging info on the console\nexport NETDATA_ALARM_NOTIFY_DEBUG=1\n\n# send test alarms to sysadmin\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test\n\n# send test alarms to any role\n/usr/libexec/netdata/plugins.d/alarm-notify.sh test "ROLE"\n```\n\nNote that this will test _all_ alert mechanisms for the selected role.\n\n',integration_type:"notification",edit_link:"https://github.com/netdata/netdata/blob/master/src/health/notifications/twilio/metadata.yaml"},{id:"oidc-authentication",meta:{name:"OIDC",link:"https://netdata.cloud",categories:["auth"],icon_filename:"openid.svg"},keywords:["sso","oidc"],overview:"# OIDC\n\nIntegrate your organization's Authorization Servers with Netdata to better manage your team's access controls to Netdata Cloud.\n",setup:"## Setup\n\n### Prerequisites\n- Authorization Server with OIDC protocol supported\n- A Netdata Cloud account\n- Access to the Space as an **Admin**\n- Space needs to be on a paid plan\n\n### Setting up Authorization Server\nYour server should follow the [full specification for OIDC](https://openid.net/specs/openid-connect-core-1_0.html).\nIn order to integrate your Authorization Server with Netdata the creation of a client is required. Clients are applications and services that can request authentication of a user.\nThe access settings for your client are the following:\n\n| field | value |\n| :-- | :-- |\n| Root URL | `https://app.netdata.cloud/`` |\n| Home/Initiate login URL | `https://app.netdata.cloud/api/v2/auth/account/auth-server?iss={your-server-issuer-url}&redirect_uri=https://app.netdata.cloud/sign-in®ister_uri=https://app.netdata.cloud/sign-up/verify` |\n| Redirect URL | `https://app.netdata.cloud/api/v2/auth/account/auth-server/callback` |\n\n### Netdata Configuration Steps\n1. Click on the Space settings cog (located above your profile icon)\n2. Click on the **Authentication** tab\n3. On the OIDC card, click on **Configure**\n4. Fill in the required credentials:\n - **Issuer URL** the Authorization Server Issuer URL, e.g. `https://my-auth-server.com/`\n - **Client ID** the Client ID from the created client\n - **Client Secret** the Client Secret from the created client\n - **Authorization URL** the Authorization Server authorization URL, e.g. `https://my-auth-server.com/openid-connect/auth`\n - **Token URL** the Authorization Server token URL, e.g. `https://my-auth-server.com/openid-connect/token`\n - **User URL** the Authorization Server user info URL, e.g. `https://my-auth-server.com/openid-connect/userinfo`\n\n### Supported features\n* SP-initiated SSO (Single Sign-On)\n* IdP-initiated SSO\n\n### SP-initiated SSO\n\nIf you start your authentication flow from Netdata sign-in page please check [these steps](/docs/netdata-cloud/authentication-and-authorization/enterprise-sso-authentication.md#from-netdata-sign-up-page).\n\n\n### Reference\nhttps://openid.net/developers/how-connect-works/\n\n",integration_type:"authentication",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-authentication/metadata.yaml",troubleshooting:""},{id:"okta-authentication",meta:{name:"Okta SSO",link:"https://netdata.cloud",categories:["auth"],icon_filename:"okta.png"},keywords:["sso","okta","okta-sso"],overview:"# Okta SSO\n\nIntegrate your organization's Okta account with Netdata to better manage your team's access controls to Netdata Cloud.\n",setup:"## Setup\n\n### Prerequisites\n- An Okta account\n- A Netdata Cloud account\n- Access to the Space as an **Admin**\n- Space needs to be on a paid plan\n\n### Setting up Okta\nSteps needed to be done on Okta Admin Portal:\n1. Click on **Applications** tab and choose to **Browse App Catalogue**\n2. Find Netdata's preconfigured app for easy setup and click **Add Integration**\n3. Give the app, that will be in your apps dashboard, the preferred **Application label** and click **Next** to move to the Sign-On options tab\n4. In the **Sign-On Options** all the values we expect are already filled and no additional data is required\n5. Click **Done**. You are able to go back and edit any fields later if need be\n6. Go to the **Assignments** tab and enter the People or Group assignments as per your organization\u2019s policies\n\n### Netdata Configuration Steps\n1. Click on the Space settings cog (located above your profile icon)\n2. Click on the **Authentication** tab\n3. On the Okta SSO card, click on **Configure**\n4. Fill in the [required credentials](https://developer.okta.com/docs/guides/find-your-app-credentials/main/), you get them from **Okta Admin Portal**:\n - **Issuer URL** you can get it from your profile icon on top, e.g. `https://company-name.okta.com`\n - **Client ID** you can get it from **General** tab on application you configured on Okta\n - **Client Secret** you can get it from **General** tab on application you configured on Okta\n\n### Supported features\n* SP-initiated SSO (Single Sign-On)\n* IdP-initiated SSO\n\n### SP-initiated SSO\n\nIf you start your authentication flow from Netdata sign-in page please check [these steps](/docs/netdata-cloud/authentication-and-authorization/enterprise-sso-authentication.md#from-netdata-sign-up-page).\n\n",integration_type:"authentication",edit_link:"https://github.com/netdata/netdata/blob/master/integrations/cloud-authentication/metadata.yaml",troubleshooting:""}];var l=t(74112),c=t(86083),d=t(38819),u=t(58205);const m=(0,i.eU)({key:"integrationsCategoriesAtom",default:function(){let{hideEmptyCategories:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,l.Fc)(s),t=e=>n.find((n=>n.id==e)),o=(0,c.RF)(r);let i=[];if(e){const e=(0,l.rS)(o,t,n);i=n.filter((n=>{let{id:t}=n;return e.includes(t)}))}else i=n;return i}()}),p=(0,i.eU)({key:"topLevelIntegrationsCategoriesAtom",default:(0,i.gD)({key:"topLevelIntegrationsCategoriesState",get:e=>{let{get:n}=e;return(0,l.a8)(n(m))}})}),h=(0,i.eU)({key:"integrationsNavigationHistoryAtom",default:(0,i.gD)({key:"integrationsNavigationHistoryState",get:e=>{let{get:n}=e;return(e=>{var n;let{categories:t,integrations:o}=e;const{selectedIntegrationCategory:i,selectedIntegration:a}=(0,d.PP)(),s=t.find((e=>{let{id:n}=e;return n==(i||u.yI)})),{tree:r}=(0,l.fk)({category:s,getCategoryById:e=>t.find((n=>n.id==e))}),c=null===(n=o.filter((e=>{let{id:n}=e;return n==a})))||void 0===n?void 0:n[0],m=r.filter(Boolean).map(((e,n)=>({...e,type:"category",level:n+1})));return c&&m.push({...c,type:"integration"}),m})({categories:n(m),integrations:n(g)})}})}),g=(0,i.eU)({key:"integrationsNormalized",default:(0,i.gD)({key:"integrationsNormalizedState",get:e=>{let{get:n}=e;return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,c.RF)(r,e)}(n(m))}})}),f=(0,i.eU)({key:"integrationsSearchTerm",default:""}),y=(0,i.eU)({key:"integrationsHistoryBeforeSearch",default:null}),b=(0,i.eU)({key:"integrationsModalOpenAtom",default:"true"==(0,d.PP)().integrationsModalOpen});var _=t(9060);const w=(0,i.gD)({key:"integrationsQuickStart",get:e=>{let{get:n}=e;const t=n(g).filter((e=>e.quickStart>=0));return(0,c.xM)(t)}}),v=()=>(0,i.vc)(y),T=()=>(0,i.L4)(y),k=()=>{const e=x(),n=(0,_.A)(),[t,s]=(0,i.L4)(h),r=(0,i.E0)(y),[,c]=(0,a.N9)("selectedIntegrationCategory"),[,d]=(0,a.N9)("selectedIntegration"),[,m]=(0,a.N9)("selectedIntegrationTab"),p=(0,o.useCallback)((e=>{const{parents:t}=(0,l.fk)({category:e,getCategoryById:n}),o=[...t,e].map(((e,n)=>({...e,type:"category",level:n+1})));s(o),d(""),m(""),r()}),[e,s]),g=(0,o.useCallback)((function(){let{flattenedCategory:e,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=e||(t.categories||[])[0],i=o.categoryId||o.id,a=n(i),{parents:c}=(0,l.fk)({category:a,getCategoryById:n}),d=[...c,a].map(((e,n)=>({...e,type:"category",level:n+1})));s([...d,{...t,type:"integration"}]),m(""),r()}),[]),f=(0,o.useCallback)((()=>{t.length>0&&(s(t.slice(0,t.length-1)),r())}),[t,s]),b=(0,o.useMemo)((()=>{const e=t[t.length-1];return"integration"==(null===e||void 0===e?void 0:e.type)?e:null}),[t]),w=(0,o.useMemo)((()=>{const e=t.filter((e=>"category"==e.type))||[];return e.length?e[e.length-1]:null}),[t]),v=(0,o.useCallback)((()=>{const n=e.find((e=>{let{id:n}=e;return n==u.yI})),t=[e.find((e=>{let{id:t}=e;return t==n.parentId})),n].filter(Boolean).map(((e,n)=>({...e,type:"category",level:n+1})));s(t),r()}),[e,s]),T=(0,o.useMemo)((()=>null===w||void 0===w?void 0:w.level),[w]);return(0,o.useEffect)((()=>{null!==w&&void 0!==w&&w.id&&c(w.id)}),[w]),(0,o.useEffect)((()=>{null!==b&&void 0!==b&&b.id&&d(b.id)}),[b]),{history:t,level:T,selectedCategory:w,selectedIntegration:b,pushCategory:p,pushIntegration:g,pop:f,reset:v,setHistory:s}},x=()=>(0,i.vc)(m),P=()=>(0,i.vc)(p),C=()=>{const{selectedCategory:e}=k(),n=x(),t=q();return(0,l.IH)({category:e,integrations:t,categories:n})},q=()=>(0,i.vc)(g),D=()=>(0,i.vc)(w),A=()=>(0,i.vc)(f),S=()=>(0,i.L4)(f),M=()=>(0,i.E0)(f),E=()=>{const e=M(),{reset:n}=k();return()=>{e(),n()}},N=()=>(0,i.L4)(b)},88773:(e,n,t)=>{t.d(n,{$c:()=>r,AG:()=>d,Av:()=>l,BT:()=>u,D6:()=>s,GO:()=>p,Zp:()=>c,gY:()=>m,oO:()=>h});var o=t(8711),i=t(83199),a=t(25159);const s=o.default.div.withConfig({displayName:"styled__LayoutGrid",componentId:"sc-1kju9s3-0"})(["display:grid;grid-template-columns:"," auto;column-gap:32px;padding:0 24px;height:calc( 100vh - ","px - ","px );@media screen and ","{grid-template-columns:"," auto;}@media screen and ","{grid-template-columns:"," auto;}"],(e=>{let{isSidebarCollapsed:n}=e;return n?"".concat(60,"px"):"35%"}),(e=>(0,a.vF)(e.flavour)),(e=>(0,a.u8)(e.flavour)),i.breakpoints.laptop,(e=>{let{isSidebarCollapsed:n}=e;return n?"".concat(60,"px"):"30%"}),i.breakpoints.desktop,(e=>{let{isSidebarCollapsed:n}=e;return n?"".concat(60,"px"):"25%"})),r=o.default.div.withConfig({displayName:"styled__StyledVirtualRow",componentId:"sc-1kju9s3-1"})(["display:grid;grid-template-columns:repeat(",",1fr);grid-auto-rows:","px;column-gap:16px;row-gap:16px;padding-bottom:16px;"],(e=>{let{itemsPerRow:n}=e;return n}),(e=>{let{rowHeight:n}=e;return n>16?n-16:n})),l=(0,o.default)(i.Flex).withConfig({displayName:"styled__CategoryWrapper",componentId:"sc-1kju9s3-2"})(["cursor:pointer;&:hover{background-color:",";}"],(0,i.getColor)("integrationMenuItemHover")),c=(0,o.default)(i.Flex).withConfig({displayName:"styled__Card",componentId:"sc-1kju9s3-3"})(["background:",";img{transition:all 200ms ease-in-out;}&:hover{img{transform:scale(1.2);}}"],(0,i.getColor)("panelBg")),d=(o.default.div.withConfig({displayName:"styled__CardOverlay",componentId:"sc-1kju9s3-4"})(["position:absolute;width:100%;top:0;bottom:0;filter:blur(70px);opacity:0.2;&& img{width:100%;height:100%;}"]),(0,o.default)(i.Icon).withConfig({displayName:"styled__CardIcon",componentId:"sc-1kju9s3-5"})(["position:absolute;top:-20px;left:-35px;transform:rotate(40deg);opacity:0.1;"])),u=(0,o.default)(i.Flex).withConfig({displayName:"styled__CardDescription",componentId:"sc-1kju9s3-6"})(["position:absolute;bottom:0;left:0;transform:translateY(100%);transition:all 200ms ease-in-out;&&.hover{transform:translateY(0);}"]),m=o.default.table.withConfig({displayName:"styled__ContentTable",componentId:"sc-1kju9s3-7"})(["width:100%;border:1px solid ",";margin-top:16px;tr:nth-child(even){background:",";}th{padding:8px 16px;background:",";}td{padding:6px;}"],(0,i.getColor)("borderSecondary"),(0,i.getColor)("mainBackground"),(0,i.getColor)("mainBackground")),p=(0,o.default)(i.PortalSidebar).withConfig({displayName:"styled__SidebarModal",componentId:"sc-1kju9s3-8"})(["width:calc(100vw - 54px);z-index:35;background:",";overflow:",";"],(0,i.getColor)("mainBackground"),(e=>{let{overflow:n="hidden"}=e;return n})),h=(0,o.default)(i.Icon).withConfig({displayName:"styled__CategoryArrow",componentId:"sc-1kju9s3-9"})(["opacity:",";"],(e=>{let{disabled:n}=e;return n?"0":"1"}))},74112:(e,n,t)=>{t.d(n,{Fc:()=>l,IH:()=>p,PQ:()=>u,YK:()=>c,a8:()=>d,fk:()=>g,q1:()=>h,rS:()=>y,vF:()=>b});t(17333),t(3064),t(9920),t(41393),t(14905),t(98992),t(54520),t(72577),t(3949),t(81454),t(8872),t(25509),t(65223),t(60321),t(41927),t(11632),t(64377),t(66771),t(12516),t(68931),t(52514),t(35694),t(52774),t(49536),t(21926),t(94483),t(16215),t(62953);var o=t(63950),i=t.n(o),a=t(58205),s=t(80158),r=t(25159);const l=function(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(((n,t)=>{n.push(function(e){let{children:n,most_popular:t,...o}=e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return{...o,name:(0,s.Zr)(o.name),mostPopular:t,parentId:i}}(t,e));const o=t.children||[];return n=[...n,...l(o,t.id)]}),[])},c=function(){const e=[],n=[];(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((t=>{void 0!==t.priority&&t.priority>=0?e.push(t):n.push(t)}));const t=[],o=[];n.forEach((e=>{e.mostPopular?t.push(e):o.push(e)}));const i=(0,r.Wl)("priority"),a=(0,r.Kr)("name"),s=[...e.sort(i),...t.sort(a)];return{categories:[...s,...o.sort(a)],popular:s,rest:o}},d=function(){return((arguments.length>0&&void 0!==arguments[0]?arguments[0]:[])||[]).filter((e=>{let{parentId:n}=e;return null==n}))},u=e=>{let{category:n,categories:t}=e;return t.filter((e=>{let{parentId:t}=e;return n.id==t}))},m=e=>{let{category:n,categories:t,allSubcategories:o=[]}=e;return(u({category:n,categories:t})||[]).forEach((e=>{o.push(e),m({category:e,categories:t,allSubcategories:o})})),o},p=e=>{let{category:n={},integrations:t=[],categories:o=[]}=e;if(null==n)return[];const i=m({category:n,categories:o}),a=[n.id,...i.map((e=>{let{id:n}=e;return n}))];return t.filter((e=>{const n=e.categories.map((e=>{let{categoryId:n}=e;return n}));for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:[];const t=n.find((n=>{let{id:t}=n;return t==e}));return t?null===t.parentId?a.aw[t.id]:h(t.parentId,n):null},g=e=>{let{category:n,getCategoryById:t=i()}=e;const o=(e=>((null===e||void 0===e?void 0:e.id)||"").split(".").reduce(((e,n)=>(e.length?e.push([e[e.length-1],n].join(".")):e.push(n),e)),[]))(n).map((e=>t(e)));return{tree:o,parents:o.length>1?o.slice(0,o.length-1):[],topLevelCategory:o[0]}},f=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i(),t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i(),o=arguments.length>3?arguments[3]:void 0;if(!e)return;const a=t(e);if(!a)return;n(a);const s=o.find((e=>{let{id:n}=e;return n==(null===a||void 0===a?void 0:a.parentId)}));s&&f(s.id,n,t,o)},y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i(),t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const o=new Set,a=e=>o.add(e.id);return e.forEach((e=>{e.categories.forEach((e=>{let{categoryId:o}=e;f(o,a,n,t)}))})),Array.from(o)},b=e=>{let{height:n,topLevelCategories:t=[],categories:o=[],setState:s=i()}=e;const r={};if(!n||!t.length||!o.length)return r;const l=Math.floor((n/t.length-a.V0)/a.V0);t.forEach((e=>{const n=u({category:e,categories:o});r[e.id]={subcategories:n.length,limit:n.length>l?l:0}})),Object.entries(r).forEach((e=>{let[n,{subcategories:t,limit:o}]=e;n!=a.qC&&o{t.d(n,{Kr:()=>i,Wl:()=>a,jU:()=>l,u8:()=>r,vF:()=>s});t(41393),t(81454);var o=t(58205);const i=e=>(n,t)=>n[e]t[e]?1:0,a=e=>(n,t)=>n[e]-t[e],s=function(){var e;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.Jr;return(null===(e=o.jI[n])||void 0===e||null===(e=e.header)||void 0===e?void 0:e.height)||0},r=function(){var e;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.Jr;return(null===(e=o.jI[n])||void 0===e||null===(e=e.cncf)||void 0===e?void 0:e.height)||0},l=e=>{var n;return"string"===typeof e?e:Array.isArray(e)?e.map(l).join(""):null!==e&&void 0!==e&&null!==(n=e.props)&&void 0!==n&&n.children?l(e.props.children):""}},86083:(e,n,t)=>{t.d(n,{Cj:()=>m,Fd:()=>p,M6:()=>h,RF:()=>d,xM:()=>u});t(17333),t(3064),t(9920),t(41393),t(14905),t(98992),t(54520),t(72577),t(3949),t(81454),t(8872),t(62953);var o=t(63950),i=t.n(o),a=t(49286),s=t(25159);const r=function(){let{installDescription:e,additionalInfo:n,platformInfo:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return[e,"{% command methods=$methods isNightly=$isNightly claimToken=$claimToken claimUrl=$claimUrl claimRooms=$claimRooms /%}",n,t].join("\n\n")},l={"go.d.plugin":"go.d:collector"},c=e=>{if(!e)return null;const{module_name:n,plugin_name:t}=e,o=l[t];return o&&n?"".concat(o,":").concat(n):null},d=function(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((n=>function(){let{meta:e={},...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const{monitored_instance:o,keywords:i=[],most_popular:s,community:l}=e,{name:d,categories:u=[],icon_filename:m}=o||e,p="deploy"==n.integration_type;return(0,a.bn)({name:d,categories:u.map((e=>{const n=t.find((n=>n.id==e));return{categoryId:e,name:null===n||void 0===n?void 0:n.name}})),icon:"https://www.netdata.cloud/img/"+m,keywords:i,mostPopular:s,community:l,dyncfgId:c(e),...n,...p?{deployContent:r({installDescription:n.install_description,methods:n.methods,additionalInfo:n.additional_info,platformInfo:n.platform_info})}:{}})}(n,e)))},u=function(){const e=[],n=[];(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((t=>{void 0!==t.quickStart&&t.quickStart>=0?e.push(t):n.push(t)}));const t=[],o=[];n.forEach((e=>{e.mostPopular?t.push(e):o.push(e)}));const i=[],a=[];o.forEach((e=>{e.community?a.push(e):i.push(e)}));const r=(0,s.Wl)("quickStart"),l=(0,s.Kr)("name");return[...e.sort(r),...t.sort(l),...i.sort(l),...a.sort(l)]},m=e=>{let{searchTerm:n="",integrations:t=[]}=e;if(!n)return t;const o=n.toLocaleLowerCase();return t.filter((e=>{const{name:n,keywords:t,categories:i=[]}=e;if(n.toLocaleLowerCase().includes(o))return!0;const a=i.map((e=>{let{name:n}=e;return n})).filter(Boolean);return[...t,...a].join(",").toLocaleLowerCase().includes(o)}))},p=function(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id";const n=[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((t=>{n.find((n=>n[e]==t[e]))||n.push(t)})),n},h=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i();return e.reduce(((e,t)=>(t.categories.forEach((o=>{e.push(((e,n,t)=>({...e,flattenedKey:"".concat(e.id,"-").concat(n.categoryId),flattenedCategory:t(n.categoryId)}))(t,o,n))})),e)),[])}},42402:(e,n,t)=>{t.d(n,{Ay:()=>g,FB:()=>u,TZ:()=>m,mK:()=>h,uL:()=>d});var o=t(58168),i=t(96540),a=t(83199),s=t(35261);const r="delete-node-dialog",l="deleteNodeDialog",c=e=>{const n=1===e;return"Delete ".concat(e," ").concat(n?"node":"nodes")},d=e=>"Delete ".concat(e," node"),u=e=>{let{name:n,nodesLength:t}=e;return t?1===t&&n?d(n):c(t):""},m=e=>{let{name:n}=e;return i.createElement(i.Fragment,null,"You are about to delete offline node ",i.createElement("strong",null,n),".",i.createElement("br",null),"Node will be removed from all rooms and will no longer be accessible. Plus all metadata will be removed.",i.createElement("br",null),"Are you sure you want to continue?")},p=e=>{let{nodesLength:n}=e;const t=1===n;return i.createElement(i.Fragment,null,"You are about to delete ",t?"this":"these"," ",i.createElement("strong",null,n," offline ",t?"node":"nodes"),".",i.createElement("br",null),t?"Node":"Nodes"," will be removed from all rooms and will no longer be accessible. Plus all metadata will be removed.",i.createElement("br",null),"Are you sure you want to continue?")},h=e=>{let{name:n,nodesLength:t}=e;return t?1===t&&n?i.createElement(m,{name:n}):i.createElement(p,{nodesLength:t}):""},g=e=>{let{ids:n=[],name:t,onClose:u}=e;const h=(0,s.A)(),g=t?{"data-ga":"".concat(r,"-with-name"),"data-testid":"".concat(l,"WithName"),message:i.createElement(m,{name:t}),title:d(t)}:{"data-ga":"".concat(r,"Bulk"),"data-testid":"".concat(l,"Bulk"),message:i.createElement(p,{nodesLength:n.length}),title:c(n.length)};return i.createElement(a.ConfirmationDialog,(0,o.A)({confirmLabel:"Yes, delete",handleConfirm:async()=>{await h(n)},handleDecline:u},g))}},63119:(e,n,t)=>{t.d(n,{A:()=>m,u:()=>u});var o=t(58168),i=t(96540),a=t(84976),s=t(83199),r=t(47762),l=t(4959),c=t(29217);const d=e=>{let{isLive:n,name:t}=e;return i.createElement(i.Fragment,null,i.createElement(l.cK,{"data-testid":"node-name-text",isLive:n},t),i.createElement(s.Icon,{color:"placeholder","data-testid":"node-name-icon",name:"goToNode",width:"18px",height:"18px"}))},u=e=>{let{name:n}=e;return i.createElement(s.Flex,{width:"300px",column:!0,gap:1},i.createElement(s.Text,{strong:!0},"Locked!"),i.createElement(s.Text,null,"The node ",i.createElement(s.Text,{strong:!0},n)," is locked."),i.createElement(s.Text,null,"Your plan is limited to 5 nodes. Upgrade your plan for no limitations."))},m=(p=e=>{let{id:n,state:t,isLive:s,name:c,isPreferred:u,...m}=e;const p=(0,r.Zl)(n);return("stale"===t||s)&&u?i.createElement(a.N_,(0,o.A)({"data-testid":"node-name-link",to:p},m),i.createElement(l.Zw,{"data-testid":"node-name-container"},i.createElement(d,{isLive:s,name:c}))):i.createElement(d,{isLive:s,name:c})},e=>e.isPreferred?i.createElement(p,e):i.createElement(c.A,{plain:!0,content:i.createElement(u,{name:e.name}),isBasic:!0},i.createElement(s.Flex,{gap:1},i.createElement(s.Icon,{name:"padlock",width:"18px",height:"18px",color:"placeholder"}),i.createElement(p,e))));var p},74379:(e,n,t)=>{t.d(n,{Ay:()=>f,G:()=>p,VN:()=>g,aq:()=>m,fS:()=>d});var o=t(58168),i=t(96540),a=t(83199),s=t(17632),r=t(69765);const l="remove-node-dialog",c="removeNodeDialog",d=e=>"Remove ".concat(e," node"),u=e=>{const n=1===e;return"Remove ".concat(e," ").concat(n?"node":"nodes")},m=e=>{let{name:n,nodesLength:t}=e;return t?1===t&&n?d(n):u(t):""},p=e=>{let{name:n,roomName:t}=e;return i.createElement(i.Fragment,null,"You are about to remove ",i.createElement("strong",null,n)," from room ",i.createElement("strong",null,t),".",i.createElement("br",null),"Are you sure you want to continue?")},h=e=>{let{nodesLength:n,roomName:t}=e;const o=1===n;return i.createElement(i.Fragment,null,"You are about to remove"," ",i.createElement("strong",null,n," ",o?"node":"nodes")," ","from room ",i.createElement("strong",null,t),".",i.createElement("br",null),"Are you sure you want to continue?")},g=e=>{let{name:n,nodesLength:t,roomName:o}=e;return t?1===t&&n?i.createElement(p,{name:n,roomName:o}):i.createElement(h,{nodesLength:t,roomName:o}):""},f=e=>{let{ids:n=[],name:t,onClose:m}=e;const g=(0,s.A)(),f=n.length,y=(0,r.XA)("name"),b=t?{"data-ga":"".concat(l,"WithName"),"data-testid":"".concat(c,"WithName"),message:i.createElement(p,{name:t,roomName:y}),title:d(t)}:{"data-ga":"".concat(l,"Bulk"),"data-testid":"".concat(c,"Bulk"),message:i.createElement(h,{nodesLength:f,roomName:y}),title:u(f)};return i.createElement(a.ConfirmationDialog,(0,o.A)({handleConfirm:async()=>{await g(n)},handleDecline:m},b))}},4959:(e,n,t)=>{t.d(n,{AS:()=>s,K:()=>l,SS:()=>c,Zw:()=>d,cK:()=>u,d0:()=>r});var o=t(8711),i=t(83199);const a=(0,o.default)(i.Button).attrs({flavour:"hollow",neutral:!0,tiny:!0}).withConfig({displayName:"styled__ActionButton",componentId:"sc-31e37b-0"})(["&&&{border-color:",";&:hover{background-color:",";}.button-icon{"," fill:",";}}"],(0,i.getColor)("nodeBadgeBorder"),(0,i.getColor)("nodeBadgeBackground"),(e=>{let{iconSize:n}=e;return n&&"\n height: ".concat(n,";\n width: ").concat(n,";\n ")}),(0,i.getColor)("textDescription")),s=(0,o.default)(a).attrs({icon:"trashcan",iconSize:"15px"}).withConfig({displayName:"styled__ObsoleteButton",componentId:"sc-31e37b-1"})([""]),r=(0,o.default)(a).attrs({icon:"removeNode"}).withConfig({displayName:"styled__RemoveButton",componentId:"sc-31e37b-2"})([""]),l=(0,o.default)(i.Box).attrs({background:"placeholder",height:4,width:.25}).withConfig({displayName:"styled__InfoSeparator",componentId:"sc-31e37b-3"})([""]),c=(0,o.default)(i.Flex).withConfig({displayName:"styled__NodeActions",componentId:"sc-31e37b-4"})(["display:none;"]),d=(0,o.default)(i.Flex).attrs({alignItems:"center",gap:1}).withConfig({displayName:"styled__NodeNameContainer",componentId:"sc-31e37b-5"})(["&:hover{h5{color:#00ab44;text-decoration:underline;text-decoration-color:#00ab44;}svg{fill:#00ab44;}}"]),u=(0,o.default)(i.H5).attrs((e=>{let{isLive:n}=e;return{cursor:n?"pointer":"auto",color:n?"text":"textDescription"}})).withConfig({displayName:"styled__NodeName",componentId:"sc-31e37b-6"})([""])},60383:(e,n,t)=>{t.d(n,{A:()=>Z});var o=t(96540),i=t(83199),a=t(67990),s=t(38413),r=t(46741),l=(t(41393),t(81454),t(62953),t(47767)),c=t(69765),d=t(47762),u=t(97245),m=(t(8159),t(98992),t(37550),t(33931)),p=t(78969),h=t(80158),g=t(82432);const f=e=>{let{icon:n,status:t,handleNavigateToDocs:a,message:s}=e;return o.createElement(i.Flex,{column:!0,width:{max:"200px"},gap:2},o.createElement(i.Flex,{alignItems:"center",gap:2},o.createElement(i.Icon,{name:n,size:"small"}),o.createElement(i.TextMicro,null,(0,h.Zr)(t))),o.createElement(i.Flex,{column:!0,gap:2},o.createElement(i.TextMicro,null,s),a&&o.createElement(i.TextMicro,{"data-testid":"text-agent-outdated-critical"},o.createElement(i.Box,{"data-testid":"open-add-node",onClick:a,as:i.TextMicro,cursor:"pointer",textDecoration:"underline"}," ","Check here"," "),"for troubleshooting")))},y=e=>{let{state:n,name:t}=e;const a=(0,g.jZ)(n),{icon:s,text:r,textColor:l,indicatorWrapperColor:c,tooltip:d}=p.Q$[a.toLocaleLowerCase()],u=(0,o.useCallback)((()=>{window.open("https://learn.netdata.cloud/guides/troubleshoot/troubleshooting-agent-with-cloud-connection","_blank","noopener,noreferrer")}),[]),m="".concat(t," ").concat(d);return o.createElement(i.Tooltip,{allowHoverOnTooltip:!0,content:o.createElement(f,{message:m,icon:s,status:r,handleNavigateToDocs:"Pending"===a?u:void 0})},o.createElement(i.Flex,{margin:[0,"auto",0,"auto"],height:"20px",padding:[.5,0],border:{side:"all",color:c},background:"nodeBadgeBackground",justifyContent:"center",width:30,round:4,gap:2,alignItems:"center"},o.createElement(i.Icon,{name:s,size:"small",color:l}),o.createElement(i.TextMicro,{strong:!0,color:l},r)))};var b=t(81881),_=t(55905),w=(t(9391),t(17333),t(54520),t(29217)),v=t(87659),T=t(73865),k=t(71835),x=t(50876);const P=()=>{const{loaded:e,maxNodes:n}=(0,T.A)();return o.createElement(w.A,{align:"bottom",content:e?"Your current plan allows you to enable up to ".concat(n," nodes"):""},o.createElement(i.Flex,{gap:2},o.createElement(i.Text,null,"Enabled"),e?o.createElement(i.Icon,{name:"informationPress",size:"small",color:"text"}):null))},C=()=>o.createElement(w.A,{content:"For some reason we couldn't load preferred nodes",align:"bottom"},o.createElement(i.Icon,{name:"warning_triangle",color:"warning",size:"small"})),q=e=>{var n;let{row:t}=e;const a=null===(n=t.original)||void 0===n?void 0:n.id,{loaded:s,maxNodes:r,preferredNodes:l,refreshPreferredNodes:c,hasError:u}=(0,T.A)(),m=(0,d.je)(),p=l.includes(a),[h,g]=(0,o.useState)(!1),[f,,y,b]=(0,v.A)(),_=f||!p&&s&&l.length>=r,{sendLog:w}=(0,x.A)(),[,P]=(0,k.A)();(0,o.useEffect)((()=>{s&&!u&&g(p)}),[s,l,u]);const q=(0,o.useCallback)((e=>{y(),g((e=>!e));const n=e.target.checked?[...l,a]:l.filter((e=>e!=a)),t=l.length==n.length?void 0:n.length>l.length?"add":"remove";m(n).then((()=>{w({feature:"ChangePreferredNodes",previousNodes:(l||[]).join(","),newNodes:(n||[]).join(","),nodesAction:t,isSuccess:!0}),c()})).catch((e=>{g((e=>!e)),P(e),w({feature:"ChangePreferredNodes",previousNodes:(l||[]).join(","),newNodes:(n||[]).join(","),nodesAction:t,isFailure:!0})})).finally((()=>{b()}))}),[y,g,m,l,a,c,P,b,w]);return u?o.createElement(C,null):o.createElement(i.Toggle,{colored:!0,onChange:q,checked:h,disabled:_})};var D=t(54830),A=t(69418);function S(e,n){return e===n?0:e>n?1:-1}const M=e=>{let{isSpace:n}=e;const[,,t]=(0,A.A)(),{hasLimitations:a,maxNodes:s,preferredNodes:r}=(0,T.A)(),l=a&&t>s;return(0,o.useMemo)((()=>[...n&&l?[{id:"enabled",header:P,cell:q,sortingFn:(e,n)=>{var t,o;return(null!==(t=e.original)&&void 0!==t&&t.isPreferred?1:0)-(null!==(o=n.original)&&void 0!==o&&o.isPreferred?1:0)}}]:[],{id:"agent",accessorKey:"name",enableColumnFilter:!1,filterFn:(e,n,t)=>{var o;const i=(null===(o=e.original)||void 0===o?void 0:o.name)||"";return null===i||void 0===i?void 0:i.toLowerCase().includes(t)},header:"Name",cell:e=>{let{getValue:n,row:t}=e;return o.createElement(D.A,{nodeId:t.original.id,name:n(),showLockedNodes:l,preferredNodes:r})}},{id:"version",accessorKey:"version",header:"Version",cell:e=>{var n,t;let{getValue:a,row:s}=e;return o.createElement(i.Flex,{gap:1,flexWrap:!0},o.createElement(i.Pill,{flavour:"neutral",hollow:!0},a()),s.original.updateSeverity&&o.createElement(_.A,{name:s.original.name,os:null===(n=s.original.os)||void 0===n?void 0:n.id,container:null===(t=s.original.hw)||void 0===t?void 0:t.container,warningLevel:"critical"===s.original.updateSeverity?"critical":"warning",labels:s.original.labels,version:a(),margin:[1,0]}))}},{id:"state",accessorKey:"state",header:"Status",cell:e=>{let{getValue:n}=e;return o.createElement(m.A,{state:n()})},sortingFn:(e,n)=>S((0,g.GM)(e.original.state),(0,g.GM)(n.original.state)),enableColumnFilter:!0,filterFn:(e,n,t)=>{const o=e.original.state;return t.length<1||t.some((e=>{let{value:n}=e;return"all"===n||n===(0,g.GM)(o)}))},meta:{filter:{component:"select",isMulti:!0,options:[{value:"Offline",label:"Offline"},{value:"Live",label:"Live"},{value:"Stale",label:"Stale"},{value:"Unseen",label:"Unseen"}]},tooltip:o.createElement(b.A,null)}},{id:"connectionToCloud",accessorKey:"state",header:"Connection To Cloud",cell:e=>{let{getValue:n,row:t}=e;const i=t.original;return o.createElement(y,{state:n(),name:i.name})},sortingFn:(e,n)=>S((0,g.jZ)(e.original.state),(0,g.jZ)(n.original.state)),enableColumnFilter:!0,filterFn:(e,n,t)=>{const o=e.original.state;return t.length<1||t.some((e=>{let{value:n}=e;return"all"===n||("created"===o&&"created"===n||("created"!==o&&"completed"===n||void 0))}))},meta:{filter:{component:"select",isMulti:!0,options:[{value:"created",label:"Pending"},{value:"completed",label:"Completed"}]}}},{id:"updateSeverity",accessorKey:"updateSeverity",header:"Severity",cell:e=>{var n,t;let{getValue:i,row:a}=e;const s=a.original;return o.createElement(_.A,{name:s.name,os:null===(n=s.os)||void 0===n?void 0:n.id,container:null===(t=s.hw)||void 0===t?void 0:t.container,warningLevel:s.updateSeverity,labels:s.labels||{},version:s.version,text:i()})}}]),[a,r])};var E=t(42402),N=t(74379),R=t(35261),H=t(17632);const I=e=>{let{openClaimNodeModal:n,roomUntouchable:t,isSpace:i}=e;const a=(0,R.A)(),s=(0,H.A)(),l=(0,c.XA)("name"),d=(0,r.JT)("node:Delete"),u=(0,r.JT)("room:RemoveNode"),m=(0,r.JT)("node:Create"),p=(0,r.JT)("room:AddNode"),h=async(e,n)=>{if(!e)return;const t=(e=>Array.isArray(e)?e.filter((e=>{let{hasAccessibleData:n}=e;return!n})):e.hasAccessibleData?[]:[{id:e.id}])(e),o=t.map((e=>{let{id:n}=e;return n}));await a(o,{onSuccess:n.resetRowSelection})},g=async(e,n)=>{if(!e)return;const t=(e=>Array.isArray(e)?e:[{id:e.id}])(e),o=t.map((e=>{let{id:n}=e;return n}));await s(o,{onSuccess:n.resetRowSelection})};return{rowActions:(0,o.useMemo)((()=>({delete:{confirmLabel:"Yes, delete",confirmationMessage:e=>o.createElement(E.TZ,{name:e.name}),confirmationTitle:e=>(0,E.uL)(e.name),declineLabel:"Cancel",disabledTooltipText:d?"Delete is disabled":"Only admins can delete",handleAction:h,isVisible:!!i,isDisabled:e=>e.disabled||!d,tooltipText:"Delete node from space"},remove:{confirmLabel:"Yes, remove",confirmationMessage:e=>o.createElement(N.G,{name:e.name,roomName:l}),confirmationTitle:e=>(0,N.fS)(e.name),declineLabel:"Cancel",handleAction:g,tooltipText:"Remove node from room",isVisible:!i,isDisabled:e=>e.disabled||t||!u,disabledTooltipText:t?"Remove is disabled":"Only admins can remove"}})),[E.TZ,E.uL,N.fS,h,g,N.G,t,i,d,u]),bulkActions:(0,o.useMemo)((()=>({addEntry:{disabledTooltipText:i?"Only admins can connect new nodes":"Only admins can add nodes to the room",handleAction:n,isDisabled:i?!m:!(m||p&&!t),tooltipText:i?"Connect new nodes to space":"Add nodes to room"},...i?{delete:{confirmLabel:"Yes, delete",confirmationMessage:(e,n)=>o.createElement(E.mK,{name:n[0].name,nodesLength:n.length}),confirmationTitle:(e,n)=>(0,E.FB)({name:n[0].name,nodesLength:n.length}),disabledTooltipText:d?"Delete is disabled":"Only admins can delete",declineLabel:"Cancel",handleAction:h,isDisabled:!d,tooltipText:"Delete nodes from space"}}:{remove:{confirmLabel:"Yes, remove",confirmationMessage:(e,n)=>o.createElement(N.VN,{name:n[0].name,nodesLength:n.length,roomName:l}),confirmationTitle:(e,n)=>(0,N.aq)({name:n[0].name,nodesLength:n.length}),declineLabel:"Cancel",disabledTooltipText:t?"Remove is disabled":"Only admins can remove",handleAction:g,isDisabled:t||!u,tooltipText:"Remove nodes from room"}}})),[E.mK,E.FB,N.aq,h,g,m,d,u,N.VN,t,i]),hasPermissionToDelete:d,hasPermissionToRemove:u}},O={name:!1,updateSeverity:!1,connectionToCloud:!1},L=[{id:"state",desc:!1}],U=e=>{let{flavour:n,roomUntouchable:t,customNodes:i,alwaysEnableNodeSelection:s,isSpace:r}=e;const{roomSlug:m}=(0,l.g)(),p=(0,c.ID)(m),h=(0,a.gr)(p,"ids"),f=(0,d.Gt)(h),y=M({isSpace:r}),b=(0,o.useMemo)((()=>(0,u.P)(i||f)),[i,h]),[,_]=(0,o.useState)(""),[w,,T,k]=(0,v.A)(),{rowActions:x,bulkActions:P,hasPermissionToDelete:C,hasPermissionToRemove:q}=I({openClaimNodeModal:T,roomUntouchable:t,isSpace:r}),D=(0,o.useCallback)(((e,n,t)=>{const o=t.toLowerCase(),i=e.getValue("agent").toLowerCase(),a=(0,g.GM)(e.getValue("state")).toLocaleLowerCase(),s=(0,g.jZ)(e.getValue("connectionToCloud")).toLocaleLowerCase(),r=(e.getValue("updateSeverity")||"").toLocaleLowerCase(),l=e.getValue("version").toLowerCase();return i.includes(o)||a.includes(o)||l.includes(o)||s.includes(o)||r.includes(o)}),[]);return{nodes:b.map((e=>{const t=r?!C||!s&&e.hasAccessibleData:!q;return{...e,disabled:t||"availableNodes"==n&&!e.isPreferred}}))||[],nodeIds:h,columns:y,rowActions:x,bulkActions:P,isClaimNodeModalOpen:w,sortBy:L,columnVisibility:O,setGlobalFilter:_,openClaimNodeModal:T,closeClaimNodeModal:k,globalFilterFn:D}};var B=t(83179),j=t(3914),G=t(74530),F=t(15327),z=t(74618),Y=t(77173);const X=e=>{let{onClose:n}=e;const t=(0,j.vt)(),a=(0,c.ID)(),[s,r]=(0,o.useState)((()=>a?[a]:[]));return(0,G.A)(t),o.createElement(F.GO,{onClose:n,"data-testid":"addNodes"},o.createElement(z.z,{"data-testid":"addNodes-header",title:"Add Nodes",onClose:n}),o.createElement(F.Yv,{hasModalTitle:!1},o.createElement(i.Flex,{column:!0,"data-testid":"manageClaimedNodes-controls",gap:3},o.createElement(B.A,{placeholder:"Select Rooms",selectedValue:s,onChange:r}),o.createElement(Y.A,{rooms:s}))))};var W=t(8711),K=t(93155);const $=(0,W.default)(i.Box).withConfig({displayName:"activeNodesIndicatior__ProgressBar",componentId:"sc-sq1772-0"})(["position:absolute;left:0;height:4px;"]),V=e=>{let{isSpace:n}=e;const[,,t]=(0,A.A)(),{hasLimitations:a,maxNodes:s,preferredNodes:r}=(0,T.A)(),l=K.bO&&n&&a&&t>s,c=(0,o.useMemo)((()=>s>0?"".concat(r.length/s*100,"%"):"0%"),[r,s]);return l?o.createElement(i.Flex,{width:"140px",column:!0,gap:1,margin:[0,0,0,2]},o.createElement(i.Text,null,"Active nodes: ",r.length,o.createElement(i.Text,{color:"primary"},"/",s)),o.createElement(i.Box,{width:"100%",height:"4px",round:!0,overflow:"hidden",position:"relative",background:"border"},o.createElement($,{width:c,background:"primary"}))):null},Z=e=>{let{flavour:n,roomUntouchable:t,showClaimNodeOnEmptySpace:l=!1,customNodes:c=[],customBulkActions:d,customRowActions:u,enableSelection:m=!0,showDefaultRowActions:p=!0,showDefaultBulkActions:h=!0,onRowSelected:g,onClickRow:f,disableClickRow:y,columnVisibility:b,customSortBy:_,showClaimModalWithRoomSelection:w=!1,alwaysEnableNodeSelection:v=!1,isSpace:T}=e;const{nodes:k,columns:x,rowActions:P,bulkActions:C,sortBy:q,isClaimNodeModalOpen:D,openClaimNodeModal:A,closeClaimNodeModal:S,columnVisibility:M,setGlobalFilter:E,globalFilterFn:N}=U({flavour:n,roomUntouchable:t,customNodes:c,alwaysEnableNodeSelection:v,isSpace:T,showClaimModalWithRoomSelection:w}),R=(0,r.JT)("node:Create"),H=(0,a.nj)();(0,o.useEffect)((()=>{H&&l&&R&&0===k.length&&A()}),[H]);const I=(0,o.useMemo)((()=>({...M,...b})),[M,b]);return x.length?o.createElement(o.Fragment,null,o.createElement(i.Table,{headerChildren:o.createElement(V,{isSpace:T}),onRowSelected:g,globalFilterFn:N,columnVisibility:I,enableSelection:m,enableSorting:!0,dataColumns:x,data:k,rowActions:p&&P||u,bulkActions:h&&C||d,sortBy:_||q,onSearch:E,testPrefixCallback:e=>e.hostname||e.name,onClickRow:f,disableClickRow:y}),D&&!w&&o.createElement(s.A,{onClose:S,isSubmodal:!0}),D&&w&&o.createElement(X,{onClose:S})):null}},54830:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(96540),i=t(83199),a=t(29217),s=t(63119);const r=(l=e=>{let{name:n}=e;return o.createElement(i.TextSmall,null,n)},e=>{let{nodeId:n,showLockedNodes:t,preferredNodes:r=[],...c}=e;return t&&!r.includes(n)?o.createElement(a.A,{plain:!0,content:o.createElement(s.u,{name:c.name}),isBasic:!0},o.createElement(i.Flex,{gap:1},o.createElement(i.Icon,{name:"padlock",width:"18px",height:"18px",color:"placeholder"}),o.createElement(l,c))):o.createElement(l,c)});var l},82432:(e,n,t)=>{t.d(n,{Bb:()=>v,GM:()=>u,O:()=>b,Pg:()=>C,Po:()=>h,RI:()=>w,Ud:()=>g,gm:()=>q,jZ:()=>m,lw:()=>p,t3:()=>c,tv:()=>D,vt:()=>r,ws:()=>f});t(17333),t(3064),t(41393),t(98992),t(54520),t(72577),t(81454);var o=t(96540),i=t(87860),a=t(12800);const s="N/A",r=e=>{var n,t;let{isLive:o,health:i={}}=e;return o?null!==(n=i.alerts)&&void 0!==n&&n.critical?"critical":null!==(t=i.alerts)&&void 0!==t&&t.warning?"warning":"clear":"unreachable"},l=e=>e>9?"9+":"".concat(e),c=e=>{let{count:n,dataTestId:t,isLive:o,onAlertClick:i,type:a}=e;const s=t?"".concat(t,"-alertIndicator"):"alertIndicator",r={"data-testid":"".concat(s,"-").concat(a)};return o?{...r,...n&&{flavour:"critical"===a?"error":"warning"},...n&&i&&{onClick:()=>i(a)},text:l(n)}:r},d={created:"Unseen",reachable:"Live",stale:"Stale",unreachable:"Offline"},u=e=>d[e]||d.stale,m=e=>"created"===e?"Pending":"Completed",p=e=>e?{flavour:"success",label:"ON",status:"ON"}:{flavour:"warning",label:"OFF",status:"OFF"},h=e=>!e||"unknown"===e,g=function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:" \u2022 ";return h(e)?s:"".concat(e).concat(t).concat(n)},f=(e,n)=>h(e)?s:n?"".concat(e," ").concat(n):e,y={HZ:1,KHz:1e3,MHz:1e6,GHz:1e9,THz:1e12,PHz:1e15,EHz:1e18},b=e=>{if(h(e))return s;const n=Object.keys(y).find((n=>1e3>e/y[n]));return"".concat((e/=y[n]).toFixed(2)," ").concat(n||"")},_={B:1,KiB:1024,MiB:1048576,GiB:1073741824,TiB:1099511627776,PiB:0x4000000000000,EiB:0x1000000000000000},w=e=>{if(h(e))return s;const n=Object.keys(_).find((n=>1024>e/_[n]));return"".concat((e/=_[n]).toFixed(2)," ").concat(n||"")},v=(e,n,t,i,a)=>{const s={Live:o.createElement(o.Fragment,null,"is currently connected"),Offline:o.createElement(o.Fragment,null,"is currently not connected"),Stale:o.createElement(o.Fragment,null,"is currently not connected and has only historical data")},r={actionObsolete:o.createElement(o.Fragment,null,"Delete Node"),actionRemove:o.createElement(o.Fragment,null,"Remove Node from room"),alerts:o.createElement(o.Fragment,null,"The current Critical and Warning alerts for ",i),cloudInfo:o.createElement(o.Fragment,null,i," cloud information:",o.createElement("br",null),"Cloud Provider \u2022 Instance Type"),connectivity:n in s?o.createElement(o.Fragment,null,i," ",s[n]):null,info:o.createElement(o.Fragment,null,"View node information"),k8s:o.createElement(o.Fragment,null,i," runs on Kubernetes cluster"),kernel:o.createElement(o.Fragment,null,"Kernel information of ",i),ml:o.createElement(o.Fragment,null,"Machine Learning status of ",i," is: ",t),fn:o.createElement(o.Fragment,null,"Functions capability of ",i," is: ",t),functions:o.createElement(o.Fragment,null,i," functions"),systemInfo:o.createElement(o.Fragment,null,i," hardware information:",o.createElement("br",null),"O/S \u2022 CPU Frequency \u2022 CPU Cores \u2022 Architecture \u2022 Memory \u2022 Hard Disk Space"),type:o.createElement(o.Fragment,null,"The type of ",i," is: ",a)};return e in r?r[e]:""},T={none:!0,null:!0,unknown:!0},k=e=>!!e&&!T[e],x={container:"container","container-other":"container",other:"container"},P={"$(systemd-detect-virt -v)":"vm","$(systemd-detect-virt -v) docker-compose up":"vm","${VIRTUALIZATION}":"vm","(systemd-detect-virt -v)":"vm","detect-virt -v":"vm",lxc:"vm","none #vmware":"vmware",other:"vm","systemd-detect-virt -v":"vm",unknown:"vm","vm-other":"vm","VMware Virtual Platform":"vmware"},C=(e,n)=>k(e)?{icon:"container",label:x[e]||e}:k(n)?{icon:"cluster",label:P[n]||n}:{icon:"ram",label:"Bare Metal"},q=async e=>{let{cacheKeyPrefix:n,nodeIds:t,roomId:o,spaceId:s}=e;const r="".concat(n).concat((0,i.u)({id:o,spaceId:s}));await(0,a.y)({key:r,handleResults:e=>e.results.filter((e=>!t.includes(e.id)))})},D=async e=>{let{cacheKeyPrefix:n,nodeIds:t,roomIds:o,spaceId:s}=e;const r=e=>e.results.filter((e=>!t.includes(e.id)));o.map((async e=>{const t="".concat(n).concat((0,i.u)({id:e,spaceId:s}));await(0,a.y)({key:t,handleResults:r})}))}},54961:(e,n,t)=>{t.d(n,{A8:()=>b,An:()=>f,Jq:()=>y,Qb:()=>d,Wb:()=>u,b8:()=>c,eQ:()=>m,t9:()=>h});t(41393),t(14905),t(98992),t(81454),t(8872);var o=t(26655),i=t(80158),a=t(49286),s=t(71856),r=t(30960);const l=e=>{let{integrations:n}=e;return n.reduce(((e,n)=>{var t;const o=(0,a.bn)(n),s=o.available?"available":"unavailable";var l;(o.kindLabel=(0,i.Zr)(o.kind,!0),o.docsLink=null===(t=o.schema)||void 0===t||null===(t=t.annotations)||void 0===t?void 0:t.docsUrl,o.internal)||(o.fields=(0,r.Rm)(o.schema),o.required=null===(l=o.schema)||void 0===l?void 0:l.required);return e[s].push(o),e}),{available:[],unavailable:[],original:n})},c=e=>o.A.get("/api/v2/spaces/".concat(e,"/integrations"),{transform:l}),d=(e,n)=>o.A.post("/api/v2/spaces/".concat(e,"/channel"),n),u=(e,n)=>o.A.delete("/api/v2/spaces/".concat(e,"/channel/").concat(n)),m=(e,n,t)=>o.A.put("/api/v2/spaces/".concat(e,"/channel/").concat(n),t),p=e=>{var n;const{id:t,...o}=e.integration||{},i={...(0,a.bn)(e),...(0,a.bn)(o)};return i.docsLink=null===(n=i.schema)||void 0===n?void 0:n.annotations.docsUrl,i.internal||(i.fields=(0,r.Rm)(i.schema),i.required=i.schema.required),i},h=(e,n)=>o.A.get("/api/v2/spaces/".concat(e,"/channel/").concat(n),{transform:p}),g=e=>({channels:e.map((e=>{var n;const{id:t,...o}=e.integration||{};return{...(0,a.bn)(e),...o||{},notificationLabel:s.w8[e.alarms].label,kindLabel:(0,i.Zr)(null===(n=e.integration)||void 0===n?void 0:n.kind,!0)}})),original:e}),f=e=>o.A.get("/api/v2/spaces/".concat(e,"/channel"),{transform:g}),y=(e,n,t)=>o.A.patch("/api/v2/spaces/".concat(e,"/channel/").concat(n),{enabled:t}),b=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return o.A.post("/api/v2/spaces/".concat(e,"/notifications/test"),n)}},58159:(e,n,t)=>{t.d(n,{A:()=>a,V:()=>i});var o=t(47444);const i={additionalProperties:!1,alerts:"ALARMS_SETTING_ALL",description:"",enabled:!0,error:"",fields:[],icon:"",internal:!0,id:"",integration:"",integrationId:"",kind:"",loading:!0,loaded:!1,name:"",rooms:null,roomSelections:[t(71856).PT],secrets:{}},a=(0,o.Iz)({key:"spaceChannel",default:e=>(e=>({...i,id:e}))(e)})},63756:(e,n,t)=>{t.d(n,{A:()=>a,y:()=>i});var o=t(47444);const i={currentChannelId:"",channels:[],error:"",id:null,loading:!0,loaded:!1,original:[]},a=(0,o.Iz)({key:"spaceChannels",default:e=>(e=>({...i,id:e}))(e)})},79769:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(54961),i=t(26770),a=t(63756),s=t(18061);const r=e=>{const n=(0,i.vq)(e);(0,s.A)((()=>({enabled:!!e,fetch:()=>(0,o.An)(e),onFail:e=>n({...a.y,error:e.message}),onSettle:()=>n({loading:!1,loaded:!0}),onSuccess:e=>n({...a.y,...e})})),[e])}},73743:(e,n,t)=>{t.d(n,{A:()=>a,u:()=>i});var o=t(47444);const i={available:[],error:"",id:null,loading:!0,loaded:!1,original:[],unavailable:[]},a=(0,o.Iz)({key:"spaceIntegrations",default:e=>(e=>({...i,id:e}))(e)})},96382:(e,n,t)=>{t.d(n,{yP:()=>y,ae:()=>g,j$:()=>f});t(62953);var o=t(47444),i=t(71835),a=t(26655);const s={email:null,browser:null,mobile:null},r={alerts:null},l={me:()=>"/api/v2/accounts/me/notifications/settings",room:e=>{let{spaceId:n,roomId:t}=e;return"/api/v2/spaces/".concat(n,"/rooms/").concat(t,"/notifications/settings")}},c=e=>{let{domain:n,...t}=e;return(0,l[n])(t)},d=(0,o.Iz)({key:"notificationsSettings",default:e=>{const n=(e=>{let{domain:n}=e;return{me:s,room:r}[n]})(e),t=c(e);return a.A.get(t).then((e=>({...n,...e.data,isLoaded:!0}))).catch((()=>({...n,isLoaded:!0})))}});var u=t(61649);const m=(0,o.K0)({key:"notificationsSettings",get:e=>n=>{let{get:t}=n;return t(d(e))},set:e=>(n,t)=>{let{set:o}=n;const{prop:i,...a}=e;o(d(a),(e=>{const n="object"==typeof e[i]?{...e[i],enabled:t}:t;return i?{...e,[i]:n}:n}))}}),p=function(e){let{shouldPersist:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const t=(0,o.lZ)(m(e)),s=(e=>(0,u.A)((function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.A.patch(c(e),n)}),[e.domain,e.spaceId,e.roomId]))(e),[,r]=(0,i.A)();return(0,o.Zs)((o=>{let{snapshot:i}=o;return async o=>{if(t(o),!n)return;const a=await i.getPromise(m(e)),{prop:l}=e;try{await s({...l?{[l]:o}:o})}catch(c){r(c),t(l?a[l]:a)}}}),[e])},h=e=>(0,o.xf)(m(e)),g=()=>(0,o.xf)(d({domain:"me"})),f=e=>{const n={domain:"me"},t=h(n),o="hasValue"!==t.state?s:t.contents,i=p({...n,prop:e});return[e?o[e]:o,i]},y=e=>{let{roomId:n,spaceId:t,key:o}=e;const i={domain:"room",roomId:n,spaceId:t},a=h(i),s="hasValue"!==a.state?r:a.contents,l=p({...i,prop:o});return[o?s[o]:s,l]}},26770:(e,n,t)=>{t.d(n,{EE:()=>v,Mw:()=>h,bY:()=>T,ef:()=>y,g4:()=>p,m$:()=>w,t5:()=>f,vq:()=>b});t(62953);var o=t(96540),i=t(47444),a=t(58159),s=t(63756),r=t(73743),l=t(30960),c=t(3914),d=t(54961),u=t(71835);const m=(0,i.K0)({key:"spaceChannelState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e;const i=o((0,a.A)(n));return t?i[t]:i}},set:e=>{let{id:n,key:t}=e;return(e,o)=>{let{set:i}=e;i((0,a.A)(n),(e=>t?{...e,[t]:o}:{...e,...o}))}}}),p=(e,n)=>(0,i.vc)(m({id:e,key:n})),h=e=>(0,i.E0)(m(e)),g=(0,i.K0)({key:"spaceChannelsState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e,i=o((0,s.A)(n));return i={...i,channels:(0,l.kz)(i.channels)},t?i[t]:i}},set:e=>{let{id:n,key:t}=e;return(e,o)=>{let{set:i}=e;i((0,s.A)(n),(e=>t?{...e,[t]:o}:{...e,...o}))}}}),f=(e,n)=>(0,i.vc)(g({id:e,key:n})),y=(e,n)=>(0,i.lZ)(m({id:e,key:n})),b=(e,n)=>(0,i.lZ)(g({id:e,key:n})),_=(0,i.K0)({key:"spaceIntegrationsState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e,i=o((0,r.A)(n));return i={...i,available:(0,l.kz)(i.available),unavailable:(0,l.kz)(i.unavailable)},t?i[t]:i}},set:e=>{let{id:n,key:t}=e;return(e,o)=>{let{set:i}=e;i((0,r.A)(n),(e=>t?{...e,[t]:o}:{...e,...o}))}}}),w=(e,n)=>(0,i.vc)(_({id:e,key:n})),v=(e,n)=>(0,i.lZ)(_({id:e,key:n})),T=()=>{const e=(0,c.vt)(),[n,t]=(0,u.A)();return(0,o.useCallback)((function(){let{id:o,slug:i,secrets:a={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,d.A8)(e,{channelID:o,integrationSlug:i,secrets:a}).then((()=>{n({header:"Success",text:"Successfully sent test notification"})})).catch((()=>{t({header:"Error",text:"Something went wrong"})}))}),[e])}},30960:(e,n,t)=>{t.d(n,{kz:()=>g,Zv:()=>l,ct:()=>c,O5:()=>d,Rm:()=>u,$Q:()=>m,Pl:()=>p,s7:()=>h});t(17333),t(3064),t(14905),t(98992),t(54520),t(72577),t(8872),t(62953),t(41393),t(81454);var o=t(90179),i=t.n(o),a=t(71856);const s=(e,n,t)=>{const{description:o,placeholder:s,title:r,type:l,...c}=n,d=t.includes(e),m="integer"==l,p={description:o,id:e,isRequired:d,placeholder:s||"",title:r||e};if(("string"===l||m)&&"selection"!==e){const{format:e,maxLength:n,minLength:t}=c;return{component:"input",getValue:e=>{let{id:n,secrets:t,subsetId:o}=e;return(o?t[n][o]:t[n])||""},isValid:o=>!!("uri"!==e||null!==o&&void 0!==o&&o.match(a.rx))&&(!(t&&o.lengthn)),...n?{maxlength:n}:{},...t?{minlength:t}:{},onChange:e=>{let{id:n,setSecrets:t,subsetId:o}=e;return e=>t((t=>{if(m){const n=parseInt(e,10);e=isNaN(n)?0:n}return o?{...t,[n]:{...t[n],[o]:e}}:{...t,[n]:e}}))},type:m?"number":"uri"===e?"url":e||"text",...p}}if("object"===l){const{oneOf:e,patternProperties:n}=c;if(e)return{component:"select",getValue:n=>{var t,o;let{id:i,secrets:a}=n;return{label:(null===(t=e.find((e=>{var n;return e.properties.selection.const===(null===(n=a[i])||void 0===n?void 0:n.selection)})))||void 0===t?void 0:t.title)||(d?e[0].title:"None"),value:(null===(o=a[i])||void 0===o?void 0:o.selection)||(d?e[0].properties.selection.const:"")}},onChange:n=>{let{id:t,setRequiredSubsets:o,setSecrets:a}=n;return n=>{let{label:s,value:r}=n;if(!r)return o((e=>i()(e,t))),void a((e=>i()(e,t)));const l=e.find((e=>e.title===s));null!==l&&void 0!==l&&l.required&&o((n=>({...n,[t]:e.find((e=>e.title===s)).required}))),a((e=>({...e,[t]:{selection:r}})))}},...e.reduce(((e,n)=>({fields:{...e.fields,[n.properties.selection.const]:u(n)},options:[...e.options,{label:n.title,value:n.properties.selection.const}],required:{...e.required,[n.properties.selection.const]:n.required}})),{fields:{},options:d?[]:[{label:"None",value:""}],required:{}}),...p};if(n)return{component:"pairs",componentPairs:Object.entries(n).map((e=>{let[n,{type:t}]=e;return[a.C4[n],a.dZ[t]]})),...p}}return null};var r=t(93155);const l=(e,n)=>{const t=e=>e.toLowerCase().includes(n.toLowerCase()||"");return e.filter((e=>{let{description:n,kind:o,title:i}=e;return t(n)||t(o)||t(i)}))},c=(e,n,t)=>!!n&&("selection"===e||("select"===t.component||t.isValid(n))),d=e=>"Delete ".concat(e," channel"),u=e=>{let{properties:n,required:t}=e;return Object.keys(n).reduce(((e,o)=>{const i=s(o,n[o],t);return{...e,...i?{[o]:i}:{}}}),{})},m=e=>{const[n,t]=e;return n===t?"".concat(n,"s"):"".concat(n,"/").concat(t)},p=e=>{let{roomIds:n,roomOptions:t}=e;return n.reduce(((e,n)=>{const o=t.find((e=>e.value===n));return o&&e.push(o.label),e}),[]).join(", ")},h=(e,n)=>Object.values(e).reduce(((e,t)=>"select"===t.component&&n.includes(t.id)?{...e,[t.id]:{selection:t.options[0].value}}:e),{}),g=e=>r.Mh?e:e.filter((e=>{let{id:n}=e;return n!==a.D_}))},62329:(e,n,t)=>{t.d(n,{A:()=>y});var o=t(58168),i=t(96540),a=t(83199),s=t(83084),r=t(3914),l=t(69765),c=t(60383),d=t(68831),u=t(53285);const m=e=>{let{spaceName:n}=e;return i.createElement(a.Text,{textAlign:"center"},"Please ask your administrator to claim more nodes to\xa0",i.createElement(a.Text,{strong:!0},n)," and you will be able to add them to this room")},p=()=>i.createElement(a.Text,{textAlign:"center"},"To add nodes to this room, you first need to claim them to its space."),h=e=>{let{spaceName:n}=e;const t="".concat(d.A.assetsBaseURL,"/img/rack.png");return i.createElement(a.Flex,{column:!0,padding:[4,8,0],alignItems:"center",gap:4},i.createElement("img",{src:t,alt:"server-rack",width:"188px",height:"188px"}),i.createElement(a.H4,{textAlign:"center"},"No claimed nodes available in this Space: ",n),i.createElement(u.A,{permission:"node:Create"},(e=>e?i.createElement(p,null):i.createElement(m,{spaceName:n}))))};t(17333),t(41393),t(14905),t(98992),t(54520),t(81454),t(8872),t(62953);const g=e=>{let{setNodes:n}=e;const[t,o]=(0,i.useState)(""),[a,s]=(0,i.useState)(!0),[r,l]=(0,i.useState)([]);return(0,i.useEffect)((()=>{const e=r.map((e=>e.id));e.length||!t||a||n((e=>t.split(",").reduce(((e,n)=>e.filter((e=>e.id!==n))),e))),e.length&&e.join()!==t&&(n((n=>{const t=n.map((e=>e.id));return e.reduce(((e,n,o)=>t.includes(n)?e:[...e,r[o]]),n)})),s(!1)),o(e.join())}),[r]),{onRowSelected:l}},f={connectionToCloud:!1},y=e=>{let{claimedNodeIds:n,data:t,roomId:d,setNodes:u,showHeader:m,onAddNodes:p,canAddNodes:y,addNodesGA:b,..._}=e;const{onRowSelected:w}=g({setNodes:u}),v=(0,r.ap)(),T=(0,l.wz)(d),k=(0,i.useMemo)((()=>({addEntry:{handleAction:p,tooltipText:"Add the selected nodes to the room",isDisabled:!y,disabledTooltipText:"Select some nodes to add to the room","data-ga":b}})),[p,y]);return i.createElement(a.Flex,(0,o.A)({column:!0,gap:3,padding:[2,0,0],flex:"grow",width:"100%",height:"100%"},_),m&&i.createElement(a.Flex,{margin:[0,0,5]},i.createElement(a.H3,null,"Available Nodes (",n.length,")")),m&&i.createElement(a.Flex,null,i.createElement(a.Text,{color:"textDescription"},"Nodes in ",v.name," that can be added to ",T.name)),n.length>0?i.createElement(s.A,{"data-testid":"nodesTable-layout",overflow:"hidden",height:"100%"},i.createElement(c.A,{flavour:"availableNodes",enableSelection:!0,customNodes:t,showDefaultRowActions:!1,showDefaultBulkActions:!1,customBulkActions:k,onRowSelected:w,columnVisibility:f,alwaysEnableNodeSelection:!0})):i.createElement(h,{spaceName:v.name}))}},31348:(e,n,t)=>{t.d(n,{A:()=>p});t(17333),t(41393),t(98992),t(54520),t(81454),t(62953);var o=t(96540),i=t(61360);var a=t(3914),s=t(69765),r=t(81048),l=t(63129),c=t(67990),d=t(97245),u=t(18061),m=t(71835);const p=function(e){let{addNodesCallback:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[t,p,h]=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const[n,t]=(0,o.useState)(e),[a,s]=(0,o.useState)([]);(0,i.A)((()=>{s([n])}),300,[n]);const r=(0,o.useCallback)((e=>t(e.currentTarget.value)),[t]);return[n,r,a]}(),[g,f]=(0,o.useState)([]),y=(0,a.vt)(),b=(0,s.J_)(y,r.mL),[,_]=(0,m.A)(),[w]=(0,u.A)((()=>({enabled:!!b,fetch:()=>(0,l.uQ)({roomId:b,spaceId:y}),initialValue:[],onFail:e=>{_(e)}})),[b,y]),v=(0,c.gr)(e,"ids"),T=(0,o.useMemo)((()=>w.map((e=>e.id)).filter((e=>!v.includes(e)))),[v,w]),k=(0,o.useMemo)((()=>(0,d.P)(w)),[w]),x=(0,c.Hx)(y,e,{onSuccess:n});return[{claimedNodeIds:T,data:k,filter:t,setFilter:p,debouncedFilter:h,setNodes:f},{onAddNodes:(0,o.useCallback)((()=>x(g.map((e=>e.id)))),[x,g]),onAddNode:(0,o.useCallback)((e=>{x([e],{makeCallback:!1})}),[x]),selectedNodes:g}]}},38413:(e,n,t)=>{t.d(n,{A:()=>I});var o=t(58168),i=(t(62953),t(96540)),a=t(39225),s=t(83199),r=t(69765),l=t(3914),c=t(15327),d=t(74618),u=t(45765),m=t(88773),p=t(76634),h=t(77173),g=t(62329),f=t(31348),y=t(28738),b=t(74530),_=t(63950),w=t.n(_),v=t(8711),T=t(12740),k=t(18682);const x=(0,v.default)(s.Icon).withConfig({displayName:"copyInfo__StyledIcon",componentId:"sc-fgr5qt-0"})(["display:flex;align-self:center;cursor:pointer;position:absolute;right:16px;"]),P=e=>{let{gaPrefix:n="claim-nodes",info:t,title:o="Claim token",type:a="token",copyDisabled:r=!1}=e;return i.createElement(s.Flex,{cursor:"pointer","data-testid":"".concat(a,"Copy"),gap:2,onClick:(0,k.C)(t,{text:"".concat(o," copied to clipboard")}),position:"relative"},i.createElement(T.O1,{"data-testid":"".concat(a,"TextBlock")},t),!r&&i.createElement(x,{"data-testid":"".concat(a,"CopyButton"),"data-ga":"".concat(n,"::click-copy-").concat(a,"::allpages"),name:"copy",size:"small",color:"primary",onClick:(0,k.C)(t,{text:"".concat(o," copied to clipboard")})}))},C=e=>{let{title:n="",info:t="Loading...",copyDisabled:o=!1,onClose:a=w()}=e;return i.createElement(s.Modal,null,i.createElement(s.ModalContent,{width:{min:80,base:150},height:30},i.createElement(s.ModalHeader,null,i.createElement(s.H3,null,n),i.createElement(s.ModalCloseButton,{onClose:a})),i.createElement(s.ModalBody,null,i.createElement(P,{info:t,copyDisabled:o}))))},q=e=>{var n,t;let{spaceId:a,...s}=e;const r=(0,b.A)(a);return i.createElement(C,(0,o.A)({title:"Claim Token",info:null===(n=r[0])||void 0===n?void 0:n.token,copyDisabled:!(null!==(t=r[0])&&void 0!==t&&t.token)},s))};var D=t(58205),A=t(87659),S=t(47130),M=t(92155),E=t(63314);const N=(0,M.A)((0,S.A)(s.Button)),R=(0,a.A)((()=>Promise.all([t.e(1220),t.e(7208),t.e(8239),t.e(6323),t.e(7304),t.e(979)]).then(t.bind(t,7304)))),H={default:{modal:{"data-testid":"addWarRoomModal"},sidebarModalHeader:{"data-testid":"addWarRoomModal-header"},sidebarContent:{"data-testid":"addWarRoomModal-content",overflow:"auto",hasFooter:!1}},integrations:{modal:{"data-testid":"addIntegrationModal"},sidebarModalHeader:{"data-testid":"addIntegration-header"},sidebarContent:{"data-testid":"addIntegration-content",overflow:"hidden",hasFooter:!1,padding:[0],hasModalTitle:!1}}},I=e=>{let{title:n="Add Nodes",onClose:t,isSubmodal:a,nodeType:b,flavour:_="default"}=e;const w=(0,l.vt)(),v=(0,r.XA)(),T=(0,r.pr)(),k=null!==v&&void 0!==v&&v.loaded?v:T,x=null===k||void 0===k?void 0:k.id,P=(0,i.useMemo)((()=>H[_]),[_]),S="integrations"==_,M=S?m.GO:c.GO,[I,{onAddNodes:O,selectedNodes:L}]=(0,f.A)(x,{addNodesCallback:t}),[U,,B,j]=(0,A.A)(),[G,,F,z]=(0,A.A)();return i.createElement(E.Ay,{feature:"AddNodes"},i.createElement(M,(0,o.A)({right:!0,closeOnEsc:!0,closeOnOverlayClick:!0,onClose:t},P.modal),i.createElement(d.z,(0,o.A)({title:S?i.createElement(s.TextBig,{color:"textLite"},n):i.createElement(i.Fragment,null,"Manage room",i.createElement(s.TextBig,{color:"textLite"},"\xa0/ Add Nodes")),isSubmodal:a,onClose:t},P.sidebarModalHeader||{}),!S&&i.createElement(p.A,{permission:"node:Create"},i.createElement(s.Flex,{gap:2},i.createElement(N,{feature:"AddNodes",label:"Claim Token",flavour:"borderless",onClick:B}),i.createElement(N,{feature:"AddNodes",label:"Room ID",flavour:"borderless",onClick:F})))),!S&&i.createElement(u.U,{"data-testid":"addWarRoomModal-title"},"Add nodes to\xa0",null===k||void 0===k?void 0:k.name),i.createElement(c.Yv,P.sidebarContent||{},S?i.createElement(i.Suspense,{fallback:i.createElement(y.A,{title:"Loading integrations..."})},i.createElement(R,{flavour:D.D_.addNodesModal})):i.createElement(p.A,{permission:"node:Create"},i.createElement(i.Fragment,null,i.createElement(h.A,{nodeType:b,rooms:[x]}),!k.untouchable&&i.createElement(g.A,(0,o.A)({"data-testid":"addWarRoomModal-availableNodes"},I,{onAddNodes:O,canAddNodes:!!L.length,addNodesGA:"add-war-room-modal::click-add-node::global-view"})))))),!S&&U&&i.createElement(E.Ay,{subModal:"ClaimTokenModal"},i.createElement(q,{spaceId:w,onClose:j})),!S&&G&&i.createElement(E.Ay,{subModal:"RoomIdModal"},i.createElement(C,{title:"Room ID",info:x,copyDisabled:!x,onClose:z})))}},77173:(e,n,t)=>{t.d(n,{A:()=>h});t(41393),t(81454),t(62953);var o=t(96540),i=t(83199),a=t(3914),s=t(27776),r=t(89009),l=t(67962),c=t(59778);const d=e=>{let{label:n}=e;return n?o.createElement(o.Fragment,null,o.createElement(i.Icon,{name:"code",size:"small"}),o.createElement(i.TextNano,{strong:!0,textTransform:"uppercase"},n)):null},u=(0,o.memo)(d);var m=t(12740);t(3064),t(98992),t(72577);const p={linux:"deploy-linux-generic",centos:"deploy-linux-generic",macos:"deploy-macos",freebsd:"deploy-freebsd",ubuntu:"deploy-linux-generic",debian:"deploy-linux-generic",cloudlinux:"deploy-linux-generic",Container:"deploy-docker"},h=e=>{let{integrationId:n,nodeType:t,rooms:d=[]}=e;const h=(0,s.FF)(),g=(0,a.ap)("plan"),f=(()=>{const e=(0,s.AR)();return n=>e.find((e=>e.id==n))})(),y=f(n),[b,_]=(0,o.useState)(function(){let e=arguments.length>1?arguments[1]:void 0;const n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).findIndex((n=>{let{id:t}=n;return t==p[e]}));return n>=0?n:0}(h,t)),[w,v]=(0,o.useState)((0,c.M)(g));return o.createElement(i.Flex,{column:!0,gap:4,width:"100%"},o.createElement(i.Flex,{justifyContent:"end"},o.createElement(r.A,{isNightly:"nightly"==w,toggleNightly:e=>{const n=e.target.checked?"nightly":"stable";v(n)}})),y?o.createElement(l.A,{integration:y,isNightly:"nightly"==w,rooms:d,navigateToSettings:!0}):o.createElement(i.Tabs,{selected:b,onChange:_,TabContent:m.Yg,tabsProps:{gap:1,margin:[0,0,4,0]}},h.map((e=>o.createElement(i.Tab,{as:m.OV,key:e.name,label:o.createElement(u,{label:e.name})},o.createElement(l.A,{integration:e,isNightly:"nightly"==w,rooms:d,navigateToSettings:!0}))))))}},79412:(e,n,t)=>{t.d(n,{n:()=>m});t(62953);var o=t(96540),i=t(47767),a=t(45588),s=t(83199),r=t(67031),l=t(3914),c=t(69765),d=t(15327),u=t(74618);const m=e=>{let{onClose:n,onDone:t,isSubmodal:m=!0}=e;const p=(0,l.vt)(),[h,g]=(0,o.useState)(""),[f,y,b]=(0,s.useInputValue)({maxChars:255,value:""}),_=(e=>{const n=(0,i.Zp)(),t=(0,l.bq)();return(0,o.useMemo)((()=>o=>{let{slug:i}=o;const s=(0,a.tW)("/spaces/:spaceSlug/rooms/:roomSlug",{spaceSlug:t,roomSlug:i});e(),n(s)}),[t])})(n),w=(0,c.NG)(p,{onSuccess:t||_}),v=(0,o.useCallback)((()=>{w({name:h,description:f})}),[h,f]);return o.createElement(d.GO,{onClose:n},o.createElement(u.z,{onClose:n,isSubmodal:m,title:"Create a new room"},o.createElement(s.Button,{label:"Add",onClick:v,disabled:!h})),o.createElement(d.Yv,null,o.createElement(r.U,{roomName:h,setRoomName:g,roomDescription:f,charsDescIndicator:b,setRoomDescription:y,isCreateForm:!0})))}},74564:(e,n,t)=>{t.d(n,{Ay:()=>m,TU:()=>d,kI:()=>c,rj:()=>u});t(62953);var o=t(96540),i=t(83199),a=t(3914),s=t(87659),r=t(69765),l=t(46741);const c=e=>{const n=1===e;return"Delete ".concat(e," ").concat(n?"room":"rooms")},d=e=>"Delete ".concat(e," room"),u=e=>{let{name:n,roomsLength:t,spaceName:i}=e;const a=n||"".concat(t,1===t?" room":" rooms");return o.createElement(o.Fragment,null,"You are about to delete ",o.createElement("strong",null,a)," from ",o.createElement("strong",null,i)," space.",o.createElement("br",null),"This cannot be undone. Are you sure you want to continue?")},m=e=>{let{id:n,name:t,navigateToParent:c}=e;const m=(0,a.ap)("name"),p=(0,r.wz)(n,"untouchable"),h=(0,l.JT)("room:Delete")&&!p,g=(0,r.HX)(n,{onSuccess:c}),[f,,y,b]=(0,s.A)();return h?o.createElement(o.Fragment,null,o.createElement(i.Button,{"data-testid":"manageWarRoom-delete",flavour:"hollow",onClick:y,label:"Delete room",danger:!0}),f&&o.createElement(i.ConfirmationDialog,{confirmLabel:"Yes, delete","data-ga":"delete-war-room-dialog","data-testid":"deleteWarRoomDialog",handleConfirm:g,handleDecline:b,message:o.createElement(u,{name:t,spaceName:m}),title:d(t)})):null}},67031:(e,n,t)=>{t.d(n,{U:()=>v});var o=t(58168),i=(t(62953),t(96540)),a=t(83199),s=t(78969),r=t(14994),l=t(69765),c=t(46741),d=t(46902),u=t(87659);const m="leave-war-room-dialog",p="leaveWarRoomDialog",h=e=>{let{id:n,name:t,navigateToParent:s}=e;const r=(0,d.ES)(n,"ids"),c=(0,l.NQ)(n,{onSuccess:s}),h=(0,l.wz)(n,"untouchable"),[g,,f,y]=(0,u.A)(),b=1===r.length&&!h?{"data-ga":"".concat(m,"-last-member"),"data-testid":"".concat(p,"LastMember"),message:i.createElement(i.Fragment,null,"If you leave, ",i.createElement("strong",null,t)," room will be deleted immediately.",i.createElement("br",null),"Are you sure you want to continue?"),title:"Leave and delete ".concat(t," room")}:{"data-ga":m,"data-testid":p,message:i.createElement(i.Fragment,null,"You are about to leave ",i.createElement("strong",null,t)," room.",i.createElement("br",null),"Are you sure you want to continue?"),title:"Leave ".concat(t," room")};return i.createElement(i.Fragment,null,i.createElement(a.Button,{"data-ga":"manage-war-room-tab::click-leave-war-room::manage-war-room-modal","data-testid":"manageWarRoom-leave",icon:"switch_off",flavour:"borderless",label:"Leave room",neutral:!0,padding:[0],width:"fit-content",onClick:f}),g&&i.createElement(a.ConfirmationDialog,(0,o.A)({confirmLabel:"Yes, leave",handleConfirm:c,handleDecline:y},b)))};var g=t(74564),f=t(80542);const y=(0,f.k)([e=>{const n=e.length>=1;return(0,f.H)(n,"Give your room a name that's at least one character.")},e=>{const n=e.length<=20;return(0,f.H)(n,"A room's name can't exceed 20 characters.")}]),b=e=>{let{charsIndicator:n,isDisabled:t,isValid:s,handleChange:r,setIsValid:l,setValidationMessage:c,validationMessage:d,value:u,...m}=e;const[p,h]=(0,a.useTouchedState)({});return(0,i.useEffect)((()=>{const e=y(u),n=e.isValid,t=e.messages&&e.messages.length?e.messages[0]:void 0;!s&&n?l(!0):s&&!n&&l(!1),t&&c(t)}),[s,l,u,p,c]),i.createElement(a.TextInput,(0,o.A)({"data-testid":"warRoomOptions-warRoomNameInput",label:"Room name",name:"createRoom",placeholder:"Enter your room's name",hint:"Tip: Use rooms to group your Nodes by their service, purpose, or location.",fieldIndicator:n,value:u,touched:p,onBlur:h,onChange:r,success:s,error:!s&&d,instantFeedback:"all",disabled:t,autoFocus:!0},m))};var _=t(63314);const w=new RegExp(/^[\w\s\d]*?$/),v=e=>{let{id:n,navigateToParent:t,isCreateForm:d,roomName:u,setRoomName:m,roomDescription:p,setRoomDescription:f,charsDescIndicator:y,onSaveClick:v,...T}=e;const k=(0,l.wz)(n),x=(0,r.DL)(),[P,C]=(0,i.useState)(!1),[q,D]=(0,i.useState)(""),[A,S]=(0,i.useState)(""),[M]=(0,a.useInputValue)({maxChars:s.ux}),E=(0,i.useCallback)((e=>m(e.target.value)),[m]),N=!!n,R=((0,c.JT)("room:LeaveAllNodes")||!k.untouchable)&&x.length>1&&k.isMember,[H,I]=(0,a.useTouchedState)({defaultState:!0}),O=!k.name||u===k.name&&p===k.description;return(0,i.useEffect)((()=>{S(w.test(p)&&H?"":"The description can only contain digits, letters, and spaces.")}),[H,p]),i.createElement(_.Ay,{tab:"Room::RoomForm"},i.createElement(a.Flex,(0,o.A)({column:!0,"data-testid":"manageWarRoom",flex:"grow",justifyContent:"between",height:"100%",gap:3},T),i.createElement(a.Flex,{column:!0,"data-testid":"manageWarRoom-settings",gap:2},i.createElement(b,{"data-testid":"manageWarRoom-createRoomInput",value:u,handleChange:E,charsIndicator:M,validationMessage:q,setValidationMessage:D,isValid:P,setIsValid:C,isDisabled:N&&k.untouchable}),i.createElement(a.TextInput,{"data-testid":"manageWarRoom-descriptionInput",label:"Description",name:"roomDescription",placeholder:"A room description...",instantFeedback:"positiveFirst",touched:H,onBlur:I,fieldIndicator:y,error:""!==A&&A,success:""===A,value:p,onChange:f})),i.createElement(a.Flex,{"data-testid":"manageWarRoom-actions"},i.createElement(a.Flex,{"data-testid":"manageWarRoom-deleteLeaveActions",gap:4},N&&R&&i.createElement(h,{id:n,name:k.name,navigateToParent:t}),N&&i.createElement(g.Ay,{id:n,name:u,navigateToParent:t})),!d&&i.createElement(a.Button,{"data-ga":"manage-war-room-tab::click-save::manage-war-room-modal","data-testid":"manageRoom-saveButton",label:"Save",onClick:v,disabled:O,margin:[0,0,0,"auto"]}))))}},97245:(e,n,t)=>{t.d(n,{L:()=>a,P:()=>s});t(14905),t(98992),t(8872);var o=t(68831),i=t(25950);const a=e=>{let{data:n,untouchable:t,currentUserId:o,canRemoveUser:i}=e;return n.reduce(((e,n)=>{const a=o===(null===n||void 0===n?void 0:n.id);return e.push({name:n.name,email:n.email,user:{avatarURL:n.avatarURL,name:n.name,email:n.email,id:n.id},type:n.role,disabled:!i||a||t,isSelf:a}),e}),[])},s=e=>e.reduce(((e,n)=>{var t;return e.push({name:n.name||"",os:n.os.id||"",node:{id:n.id,name:n.name||"",os:n.os?"".concat(o.A.assetsBaseURL,"/img/logos/os/").concat((null===(t=i.U[n.os.id])||void 0===t?void 0:t.logoFilename)||"placeholder.svg"):"".concat(o.A.assetsBaseURL,"/img/logos/os/placeholder.svg")},...n}),e}),[])},46440:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(58168),i=t(96540),a=t(83199),s=t(29217);const r=e=>i.createElement(s.A,{content:"Room you're a member of. You're able to receive notifications related to nodes in this room"},i.createElement(a.Icon,(0,o.A)({name:"checkmark",width:"12px",height:"12px","data-testid":"svg"},e)))},87860:(e,n,t)=>{t.d(n,{A:()=>g,u:()=>h});t(62953);var o=t(96540),i=t(63950),a=t.n(i),s=t(71847),r=t(37618),l=t(83957),c=t(47762),d=t(41739),u=t(46741),m=t(63129),p=t(67990);const h=r.Ay?e=>{let{id:n}=e;return"rooms.".concat(n,".nodes")}:e=>{let{id:n,spaceId:t}=e;return"spaces.".concat(t,".rooms.").concat(n,".nodes")},g=e=>{let{id:n,spaceId:t,pollingInterval:i=63e3,polling:r=!0,keepPolling:g,onNodeIdsChange:f=a()}=e;const y=(0,p.gr)(n,"ids"),[b,_]=(0,o.useState)((()=>(null===y||void 0===y?void 0:y.length)||0)),w=(0,p.gr)(n,"loaded"),v=(0,u.JT)("room:Read");(0,o.useEffect)((()=>{w&&f({nodeIds:y})}),[y,w]),(0,o.useEffect)((()=>{w&&b!==y.length&&((0,s.H)("node-count","node-count-changed-from-".concat(b,"-to-").concat(y.length),"","","","node-count-change"),_(y.length))}),[y.length,b,w]),(0,l.A)((()=>({key:h({id:n,spaceId:t}),autorun:!!v&&!!t&&!!n,fetch:()=>(0,m.uQ)({roomId:n,spaceId:t}),polling:r,association:{getError:()=>(0,p.dT)({id:n,key:"error"}),getIds:()=>(0,p.dT)({id:n,key:"ids"}),getLoaded:()=>(0,p.dT)({id:n,key:"loaded"}),getUpdatedAt:()=>(0,p.dT)({id:n,key:"updatedAt"})},sort:(e,n)=>e.name.localeCompare(n.name,void 0,{sensitivity:"accent",ignorePunctuation:!0}),getResource:e=>(0,c.GN)({id:e}),getResourcesInitializer:()=>c.gl,getResourceInitialState:d.q,pollingOptions:{pollingInterval:i},maxCacheAge:900,force:!0,keepPolling:g})),[t,n,i])}},56359:(e,n,t)=>{t.d(n,{S:()=>c,z:()=>d});t(62953);var o=t(47444),i=t(2404),a=t.n(i),s=t(3914);const r={loaded:!1,entries:[],error:null,updatedAt:""},l=(0,o.Iz)({key:"spaceAlerts",default:r}),c=(0,o.K0)({key:"spaceAlertState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e;return o(l(n))[t]}},set:e=>{let{id:n,key:t}=e;return(e,o)=>{let{set:i}=e;i(l(n),"error"!==t?e=>({loaded:!0,entries:a()(o,e.entries)?e.entries:o,updatedAt:(new Date).toISOString()}):{...r,error:o})}}}),d=e=>((e,n)=>(0,o.vc)(c({id:e,key:n})))((0,s.vt)(),e)},93740:(e,n,t)=>{t.d(n,{X:()=>a,_:()=>i});var o=t(26655);const i=e=>o.A.get("/api/v1/spaces/".concat(e,"/token"),{allow401:!0}),a=e=>o.A.post("/api/v1/spaces/".concat(e,"/token/rotate"),void 0,{allow401:!0})},89916:(e,n,t)=>{t.d(n,{g:()=>a});var o=t(47444);const i=(0,o.Iz)({key:"spaceClaimingTokens",default:[]}),a=(0,o.K0)({key:"claimingTokensState",get:e=>n=>{let{get:t}=n;return t(i(e))},set:e=>(n,t)=>{let{set:o}=n;o(i(e),[t])}})},74530:(e,n,t)=>{t.d(n,{A:()=>l});var o=t(96540),i=t(47444),a=t(46741),s=t(93740),r=t(89916);const l=e=>{const n=(0,i.vc)((0,r.g)(e)),t=(0,a.JT)("node:Create",e),l=(0,i.Zs)((e=>{let{snapshot:n,set:t}=e;return async e=>{if(!(await n.getPromise((0,r.g)(e))).length){const{data:n}=await(0,s._)(e);t((0,r.g)(e),n)}}}),[]);return(0,o.useEffect)((()=>{t&&e&&l(e)}),[t,e]),n}},28061:(e,n,t)=>{t.d(n,{A:()=>s});var o=t(96540),i=t(47767),a=t(27994);const s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const n=(0,i.Zp)(),{url:t}=(0,a.A)("business");return(0,o.useCallback)((()=>{n(t,{replace:!0,state:{coupon:e}})}),[t])}},42728:(e,n,t)=>{t.d(n,{Dy:()=>r,Kj:()=>i,LJ:()=>l,Lf:()=>u,M7:()=>c,di:()=>d,qN:()=>a,z_:()=>s});t(17333),t(14905),t(98992),t(54520),t(8872),t(62953);var o=t(88116);const i=e=>[o.VH.free,o.VH.earlyBird].includes(e),a=e=>{if(!e)return null;const{city:n,country:t,line_1:o,line_2:i,postalCode:a,state:s}=e;return[[o,i].filter(Boolean).join(" "),n,a,s,t].filter(Boolean).join(", ")},s=e=>{let{currentPlan:n,slug:t,version:o,onTrial:a}=e;const{slug:s,version:r,interval:l}=n;return s===t&&r===o?i(t)?"Current plan":a?"Upgrade":"year"===l?"Update plan options":"Change billing frequency":i(s)&&!i(t)||"pro"===s&&"business"===t?"Upgrade":"Select"},r=(e,n)=>i(n)?"hollow":"business"===n||"pro"===n&&i(e)?"default":"hollow",l=e=>e?Object.entries(e).reduce(((e,n)=>{let[t,i]=n;return o.tD.includes(t)?e+Object.keys(i).length:e}),0)+2:2,c=(e,n)=>{const t=e.split("."),o=new Date(t[0],t[1]-1),i=n.split(".");return new Date(i[0],i[1]-1)-o},d=function(){let{price:e={},promotionCode:n,commitment:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:o,commitment:i}=e,a={productId:o,promotionCode:n};return!o||i&&!t?null:i&&t?{...a,commitment:t}:a},u=function(){let{price:e={},promotionCode:n,commitment:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:o,commitment:i}=e,a={id:o,promoCode:n};return!o||i&&!t?null:i&&t?{...a,commitment:t}:a}},50105:(e,n,t)=>{t.d(n,{A:()=>y});t(62953);var o=t(96540),i=t(83199),a=t(72641),s=t(78969),r=t(15327),l=t(74618),c=t(45765),d=t(55189),u=t(80542);const m=new RegExp(/(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]|[!@#$%^&*()_+=\-])/),p=(0,u.k)([e=>{const n=e.length>=d.pz;return(0,u.H)(n,"Please enter a name for the Space that is at least 5 characters.")},e=>{const n=e.length<=d.dy;return(0,u.H)(n,"A Space's name can't exceed 20 characters.")},e=>m.test(e)?{isValid:!1,message:"There's an unexpected character in the Space's name. Use only alphanumeric characters (A-Z, a-z, 0-9) and spaces."}:{isValid:!0}]),h=e=>{let{value:n,isValid:t,setIsValid:a,charsIndicator:s,isDirty:r,handleChange:l,validationMessage:c,setValidationMessage:d,onKeyDown:u}=e;const[m,h]=(0,i.useTouchedState)({});return(0,o.useEffect)((()=>{const e=p(n),o=e.isValid,i=e.messages&&e.messages.length?e.messages[0]:void 0;!t&&o?a(!0):t&&!o&&a(!1),i&&d(i)}),[t,n,m,a,d]),o.createElement(i.TextInput,{label:"Space name",name:"createWorkspace",placeholder:"Enter your Space's name",hint:"Give your Space a name that's between 5-20 characters. This cannot change.",fieldIndicator:s,value:n,touched:m,onBlur:h,onChange:l,success:t,error:!t&&c,instantFeedback:"positiveFirst",isDirty:r,onKeyDown:u})};var g=t(50876),f=t(63314);const y=e=>{let{onClose:n,onDone:t}=e;const[u,m]=(0,o.useState)(!1),[p,y]=(0,o.useState)(!1),[b,_,w,v]=(0,i.useInputValue)({maxChars:d.dy}),[T,k]=(0,o.useState)(""),{sendLog:x,isReady:P}=(0,g.A)(),C=(0,o.useCallback)((e=>{y(!1),n(),null===t||void 0===t||t(e),x({feature:"CreateSpace",isSuccess:!0})}),[n,x,P]),q=(0,o.useCallback)((()=>{y(!1),x({feature:"CreateSpace",isFailure:!0})}),[x,P]),D=(0,a.A)({onSuccess:C,onError:q}),A=(0,o.useCallback)((()=>{u&&(y(!0),D({name:b}))}),[b,u]);return o.createElement(r.GO,{onClose:n},o.createElement(f.Ay,{feature:"CreateSpace"},o.createElement(l.z,{onClose:n,title:"Create Space"},o.createElement(i.Button,{disabled:!u,isLoading:p,loadingLabel:"Creating",label:"Save",onClick:A})),o.createElement(c.U,null,"Create a new Space"),o.createElement(r.Yv,null,o.createElement(h,{isDirty:v,isValid:u,setIsValid:m,value:b,handleChange:_,charsIndicator:w,validationMessage:T,setValidationMessage:k,onKeyDown:e=>{e.keyCode===s.I7&&u&&A()}}))))}},84280:(e,n,t)=>{t.d(n,{$d:()=>u,A8:()=>r,DT:()=>f,G0:()=>l,IV:()=>p,Wk:()=>g,aj:()=>i,bO:()=>c,bq:()=>y,iy:()=>m,mm:()=>o,uX:()=>b,ys:()=>h});const o="info",i="rooms",a="nodes",s="users",r="notifications",l="integrations",c="billing",d="integrations",u="configurations",m="authenticationTab",p=[o,i,a,s,r,c,d,u,m],h={[o]:"Info",[i]:"Rooms",[a]:"Nodes",[s]:"Users",[r]:"Alerts & Notifications",[l]:"Services",[c]:"Plan & Billing",[d]:"Integrations",[u]:"Configurations",[m]:"Authentication"},g=p[0],f={virtual:p[7],default:p[0]},y="/spaces/:spaceSlug/settings/:settingsTab/*",b="/spaces/:spaceSlug/settings/:settingsTab/:settingsSubTab/*"},83694:(e,n,t)=>{t.d(n,{A:()=>w,o:()=>b});var o=t(58168),i=(t(9391),t(62953),t(96540)),a=t(47767),s=t(83199),r=t(76634),l=t(4659),c=t(29217),d=t(57992),u=t(55189),m=t(22292),p=t(87659),h=t(19673),g=t(92155),f=t(50876);const y=(0,g.A)(s.Button),b=e=>n=>{let{currentPlan:t,...o}=n;const{class:a,interval:r,billingEmail:c}=t,d="year"===r?"yearly":"monthy",u="".concat(a," ").concat(d),m=!["Community","EarlyBird"].includes(a),p=!!c&&!m;return i.createElement(e,o,m&&i.createElement(i.Fragment,null,i.createElement(s.Text,null,"You are currently on ",i.createElement(s.Text,{strong:!0},u)," subscription, which will be cancelled automatically and any due credit from unused period will be given to your credit balance."),i.createElement(s.Text,null,"Any available credit with us won't be automatically lost. If you want to use it in the future, within the defined period on our"," ",i.createElement(l.A,{href:"https://www.netdata.cloud/service-terms/",rel:"noopener noreferrer",target:"_blank"},"Terms of Service"),", or have any requests about previous invoices you can reach out to"," ",i.createElement(s.Text,{strong:!0},"support@netdata.cloud"))),p&&i.createElement(s.Text,null,"You will lose direct access to you invoices and billing information. If you want to retrieve this information in the future, you'll have to contact"," ",i.createElement(s.Text,{strong:!0},"support@netdata.cloud")))},_=b((e=>{let{spaceName:n,children:t}=e;return i.createElement(s.Flex,{column:!0,gap:2},i.createElement(s.Text,null,"You are about to delete ",i.createElement("strong",null,n)," space."),t,i.createElement(s.Text,null,"Are you sure you want to continue?"))})),w=e=>{let{id:n,isLastSpace:t,name:l,onClose:g,...b}=e;const w=(0,a.Zp)(),v=(0,d.A)(n),T=(0,m.NJ)(),{value:k}=(0,h.JN)(),[x,,P,C]=(0,p.A)(),[q,D]=(0,p.A)(),{sendLog:A,sendButtonClickedLog:S,isReady:M}=(0,f.A)(),E=(0,i.useCallback)((e=>{g(),A({feature:"DeleteSpace",isSuccess:!0}).finally((()=>w("/spaces/".concat(e))))}),[A,M]),N=(0,i.useCallback)((()=>{D(),v({onSuccess:E}),S({feature:"DeleteSpace",label:"Confirm Delete"})}),[S,M]),R=(0,i.useCallback)((()=>{C(),A({feature:"DeleteSpace",isFailure:!0,eventReason:"User canceled"})}),[A,M]);return T&&i.createElement(r.A,{permission:"space:Delete"},i.createElement(c.A,{align:"top",content:t&&u.sh.delete,isBasic:!0,stretch:"align"},i.createElement(s.Box,null,i.createElement(y,(0,o.A)({danger:!0,"data-ga":"manage-space-tab::click-delete-space::manage-space-modal","data-testid":"deleteSpace-button",disabled:t,flavour:"hollow",label:"DELETE SPACE",onClick:P,isStart:!0,feature:"DeleteSpace"},b)))),x&&i.createElement(s.ConfirmationDialog,{confirmLabel:q?"Deleting...":"Yes, delete","data-ga":"delete-space","data-testid":"deleteSpaceDialog",handleConfirm:N,handleDecline:R,message:i.createElement(_,{spaceName:l,currentPlan:k}),title:"Delete ".concat(l," space"),isConfirmDisabled:q,isConfirmLoading:q,isDeclineDisabled:q}))}},47373:(e,n,t)=>{t.d(n,{e_:()=>l,fc:()=>s,ni:()=>r,xc:()=>a});const o=/^[a-zA-Z0-9@_.-\s!]*$/,i=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,a={nameMinLength:"Space name should be more than 4 characters",slugMinLength:"Space slug should be more than 2 characters",slugMaxLength:"Space slug should not be more than 30 characters",slugNotAvailable:"Space slug is not available. Please try another one.",nameAllowedChars:"Please use alphanumeric characters (A-Z, a-z, 0-9), spaces, periods and supported special characters @, -, _,.",slugAllowedChars:"Please use lowercase alphanumeric characters (a-z, 0-9) or hyphens. The slug cannot start or end with a hyphen."},s=e=>e.length<5?"nameMinLength":o.test(e)?null:"nameAllowedChars",r=e=>e.length<3?"slugMinLength":i.test(e)?null:"slugAllowedChars",l=e=>!o.test(e)&&"allowedChars"},76999:(e,n,t)=>{t.d(n,{A:()=>w});var o=t(58168),i=t(96540),a=t(83199),s=t(56359),r=(t(3064),t(98992),t(72577),t(47444)),l=t(3914);const c={alertCounter:{warning:0,critical:0},unreachableCount:0},d=(0,r.K0)({key:"roomAlertSummaryState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e;const i=o(l.EG),a=o((0,s.S)({id:i,key:"entries"})).find((e=>{let{id:t}=e;return t===n}))||c;return t?a[t]:a}}});var u=t(69765),m=t(45123),p=t(29217),h=t(8711);const g=(0,h.default)(a.Flex).attrs({flex:{grow:0,shrink:0},width:2,height:2,margin:[0,1,0,0],round:1,background:"error",justifyContent:"center",alignItems:"center"}).withConfig({displayName:"indicators__ErrorIndicator",componentId:"sc-19hg3ay-0"})([""]),f=(0,h.default)(g).attrs({background:"warning"}).withConfig({displayName:"indicators__WarningIndicator",componentId:"sc-19hg3ay-1"})([""]),y=(0,h.default)(g).attrs({background:"textLite"}).withConfig({displayName:"indicators__UnreachableIndicator",componentId:"sc-19hg3ay-2"})([""]);var b=t(23630),_=t(46440);const w=e=>{let{id:n,selectedId:t,spaceSlug:l,isSidebar:c,hideAlerts:h,differentiateIsMember:w,...v}=e;const{alertCounter:{critical:T,warning:k},unreachableCount:x}=((e,n)=>(0,r.vc)(d({id:e,key:n})))(n),P=(0,u.wz)(n,"slug"),C=(0,u.wz)(n,"name"),q=(0,u.wz)(n,"isMember"),D=(0,s.z)("error"),A=(0,s.z)("updatedAt");return i.createElement(m.A,(0,o.A)({},!!l&&{to:"/spaces/".concat(l,"/rooms/").concat(P)},{testid:"roomLabel-warRoom-".concat(C),actions:h?null:i.createElement(p.A,{content:i.createElement(b.A,{error:D,text:"Room alerts",updatedAt:A}),isBasic:!0,align:"right"},i.createElement(a.Flex,{flex:!1,flexWrap:!1,justifyContent:"end",width:{min:6},height:{min:2}},T>0&&i.createElement(g,null),k>0&&i.createElement(f,null),x>0&&i.createElement(y,null))),icon:w&&q&&i.createElement(_.A,null),iconColor:"successLite",iconHeight:"12px",iconWidth:"12px",gap:1,textProps:w&&!q&&{padding:[0,0,0,4]},selected:n===t,isSidebar:c,isSecondary:!q},v),C)}},13617:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(58168),i=t(96540),a=t(83199),s=t(77279);const r=e=>{let{onFilterClick:n,showAllRooms:t,...r}=e;return i.createElement(a.Flex,(0,o.A)({gap:2,padding:[1,2],"data-testid":"roomFilterPills"},r),i.createElement(s.O,{flavour:t?"hollow":"default",onClick:n(!1),label:"My Rooms","data-ga":"roomFilterPills::click-my::global-view","data-testid":"roomFilterPills-showMy"}),i.createElement(s.O,{flavour:t?"default":"hollow",onClick:n(!0),label:"All Rooms","data-ga":"roomFilterPills::click-show-all::global-view","data-testid":"roomFilterPills-showAll"}))}},12938:(e,n,t)=>{t.d(n,{A:()=>p});var o=t(58168),i=(t(17333),t(41393),t(98992),t(54520),t(81454),t(62953),t(96540)),a=t(45467),s=t(83199),r=t(14994),l=t(3914),c=t(69765),d=t(46741),u=t(76999),m=t(13617);const p=e=>{let{isSidebar:n,...t}=e;const p=(0,r.DL)(),[h,g]=(0,i.useState)(!1),f=(0,l.vt)(),y=(0,l.bq)();(0,a.A)((()=>{g(!1)}),[f]);const b=(0,d.JT)("room:ReadAll"),_=(0,i.useMemo)((()=>p.filter((e=>{let{isMember:n}=e;return n}))),[p]),w=b&&_.length>0,v=w&&!h?_:p,T=(0,c.ID)();return i.createElement(i.Fragment,null,w&&i.createElement(m.A,{onFilterClick:e=>n=>{n.stopPropagation(),g(e)},showAllRooms:h}),v.map(((e,a)=>{let{id:r,untouchable:l}=e;return i.createElement(i.Fragment,{key:r},i.createElement(u.A,(0,o.A)({id:r,hideAlerts:!n,Wrapper:s.Text,isSidebar:n,differentiateIsMember:h,spaceSlug:y,selectedId:T},t)),l&&a!==v.length-1&&i.createElement(s.Flex,{border:{side:"top",color:"border"},margin:[1.5,0],"data-testid":"roomLabel-warRoomSeparator"}))})))}},77279:(e,n,t)=>{t.d(n,{O:()=>s,v:()=>a});var o=t(8711),i=t(83199);const a=(0,o.default)(i.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-i0gfkp-0"})(["transform:",";"],(e=>{let{right:n}=e;return n?"rotate(0)":"rotate(180deg)"})),s=(0,o.default)(i.Button).withConfig({displayName:"styled__StyledButton",componentId:"sc-i0gfkp-1"})(["&&{padding:2px 16px;font-size:12px;height:auto;width:auto;min-width:96px;}"])},78862:(e,n,t)=>{t.d(n,{A:()=>m});var o=t(58168),i=(t(62953),t(96540)),a=t(8711),s=t(47767),r=t(83199),l=t(29217),c=t(3914);const d=[],u=(0,a.default)(r.Flex).attrs((e=>{let{active:n,background:t,showFullname:o,...i}=e;return{width:o?"auto":7,height:7,background:n?"spaceSelected":"spaceIdle",justifyContent:"center",alignItems:"center",round:.5,padding:o?[0,1]:[0],margin:o?[0,0,1]:[0],...i}})).withConfig({displayName:"spaceLabel__SpaceBox",componentId:"sc-1e67mnq-0"})(["cursor:pointer;&:hover{background:",";}"],(e=>{let{active:n}=e;return n?(0,r.getColor)("spaceSelected"):(0,r.getColor)("spaceHovered")})),m=(p=e=>{let{active:n,spaceId:t,testIdPrefix:a,local:l=!1,onClick:m,showFullname:p,color:h,...g}=e;const f=(0,s.Zp)(),y=(0,c.ns)(t),[b,_]=(e=>{if(!e)return d;const n=e.split(" "),[t,o]=n;return[t[0],o?o[0]:""]})(y.name),w=(0,i.useCallback)((()=>m?m(y):f(l?"/overview":"/spaces/".concat(y.slug))),[y.slug,l,m]);return i.createElement(u,(0,o.A)({active:n,"data-testid":"".concat(a||"spaceLabel-space","-").concat(y.slug),onClick:w},g,{showFullname:p}),l?i.createElement(r.Icon,{name:"node",color:n?"textFocus":"textLite"}):p?i.createElement(r.TextSmall,{strong:!0,color:n?"textFocus":h||"textNoFocus"},y.name):i.createElement(i.Fragment,null,i.createElement(r.TextSmall,{strong:!0,color:n?"key":h||"text"},b),i.createElement(r.TextSmall,{strong:!0,color:n?"textLite":h||"textNoFocus"},_)))},e=>{const n=(0,c.ns)(e.spaceId);return e.showFullname?i.createElement(p,e):i.createElement(l.A,{content:null===n||void 0===n?void 0:n.name,align:"right",isBasic:!0},i.createElement(r.Box,null,i.createElement(p,e)))});var p},55463:(e,n,t)=>{t.d(n,{Z8:()=>d,K2:()=>u,kd:()=>c,jX:()=>m,pB:()=>g,i3:()=>_,Gi:()=>p,$D:()=>h,bj:()=>y});t(17333),t(9920),t(41393),t(98992),t(54520),t(3949),t(81454);var o=t(47444),i=t(70716),a=t(22292),s=t(3914);const r={ids:(0,o.Iz)({key:"spaceMemberIds",default:[]}),updatedAt:(0,o.Iz)({key:"spaceMembersUpdatedAt",default:""}),loaded:(0,o.Iz)({key:"spaceMembersLoaded",default:!1})},l=(0,o.Iz)({key:"spaceMemberRole",default:""}),c=(0,o.K0)({key:"spaceMemberState",get:e=>{let{id:n,key:t}=e;return e=>{let{get:o}=e;return o(r[t](n))}},set:e=>{let{id:n,key:t}=e;return(e,o)=>{let{set:i}=e;i(r[t](n),o)}}}),d=(e,n)=>{Object.values(r).forEach((t=>e(t(n))))},u=(0,o.K0)({key:"spaceMemberRoleState",get:e=>{let{id:n,spaceId:t}=e;return e=>{let{get:o}=e;return o(l({id:n,spaceId:t}))}},set:e=>{let{id:n,spaceId:t}=e;return(e,o)=>{let{set:i}=e;i(l({id:n,spaceId:t}),o)}}}),m=(0,o.K0)({key:"spaceMembersRoleState",set:e=>(n,t)=>{let{set:o}=n;t.forEach((n=>{let{id:t,role:i}=n;o(u({id:t,spaceId:e}),i)}))},get:e=>{let{ids:n,spaceId:t}=e;return e=>{let{get:o}=e;return n.map((e=>o(u({id:e,spaceId:t}))))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),p=()=>{const e=(0,s.vt)();return n=e,t="ids",(0,o.vc)(c({id:n,key:t}));var n,t},h=e=>{const n=(0,s.vt)();return(0,o.vc)(m({ids:e,spaceId:n}))},g=()=>"admin"===(e=>{const n=(0,s.vt)();return(0,o.vc)(u({id:e,spaceId:n}))})((0,a.uW)("id")),f=(0,o.K0)({key:"currentSpaceMembersState",get:e=>{let{ids:n,spaceId:t}=e;return e=>{let{get:o}=e;return n.map((e=>({...o((0,i.m)({id:e})),role:o(u({id:e,spaceId:t}))})))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),y=()=>{const e=(0,s.vt)(),n=p();return(0,o.vc)(f({ids:n,spaceId:e}))},b=(0,o.K0)({key:"spaceAdminsState",get:e=>{let{memberIds:n,spaceId:t}=e;return e=>{let{get:o}=e;return o(f({ids:n,spaceId:t})).filter((e=>{let{role:n}=e;return"admin"===n}))}}}),_=()=>{const e=(0,s.vt)(),n=p();return(0,o.vc)(b({memberIds:n,spaceId:e}))}},72641:(e,n,t)=>{t.d(n,{A:()=>r});t(25509),t(65223),t(60321),t(41927),t(11632),t(64377),t(66771),t(12516),t(68931),t(52514),t(35694),t(52774),t(49536),t(21926),t(94483),t(16215),t(62953);var o=t(47444),i=t(7484),a=t(3914),s=t(56639);const r=e=>{let{onSuccess:n,onError:t,isDefault:r=!1}=e;return(0,o.Zs)((e=>{let{set:o}=e;return async e=>{let{name:l,userId:c,email:d}=e;try{const{data:e}=r?await(0,i.qi)(c,d):await(0,i.bz)(l),{id:t,slug:u,name:m}=e;o((0,s.Ay)(t),{id:t,slug:u,name:r?m:l,loaded:!0}),o((0,s.aR)(u),t),o((0,a.nC)("ids"),(e=>e=[...new Set([...e,t])])),o((0,a.nC)("loaded"),!0),n&&n(e)}catch(u){t&&t()}}}),[n,t])}},57992:(e,n,t)=>{t.d(n,{A:()=>m});t(17333),t(98992),t(54520),t(62953);var o=t(47444),i=t(71835),a=t(7484),s=t(55189),r=t(3914),l=t(56639),c=t(48849),d=t(55463),u=t(14994);const m=e=>{const[,n]=(0,i.A)();return(0,o.Zs)((t=>{let{snapshot:o,set:i,reset:m}=t;return async t=>{let{onSuccess:p,onError:h}=t;const g=await o.getPromise((0,r.nC)("ids")),f=g.filter((n=>e!==n)),[y]=f;if(!y)return void n({header:"Spaces",text:s.sh.delete});const{slug:b}=y&&await o.getPromise((0,l.Ay)(y));i((0,r.nC)("ids"),f),i(c.A,(n=>n.filter((n=>n!==e))));try{await(0,a.cN)(e),p&&p(b),(0,d.Z8)(m,e),(0,u.Is)(m,e),m((0,l.Ay)(e))}catch(_){i((0,r.nC)("ids"),g),n(_),h&&h()}}}),[e])}},98046:(e,n,t)=>{t.d(n,{A:()=>r});t(62953);var o=t(47444),i=t(3914),a=t(7484),s=t(71835);const r=e=>{const[n,t]=(0,s.A)();return(0,o.Zs)((o=>{let{snapshot:s,set:r}=o;return async(o,l)=>{let{onSuccess:c,onFail:d}=l;const u=await s.getPromise((0,i.U2)({id:e}));r((0,i.U2)({id:e}),(e=>({...e,...o})));try{await(0,a.Yk)(e,o),n({header:"Space successfully updated!"}),c&&c()}catch(m){r((0,i.U2)({id:e}),u),t(m),d&&d()}}}),[e])}},65566:(e,n,t)=>{t.d(n,{A:()=>s});t(62953);var o=t(96540),i=t(50876);const a=()=>"dissmissed-banner",s=e=>{let{getLocalStorageKey:n=a,logKey:t}=e;const[s,r]=(0,o.useState)(!0),{sendButtonClickedLog:l}=(0,i.A)();(0,o.useEffect)((()=>{const e="true"==localStorage.getItem(n());r(e)}),[n]);return{dismissed:s,onClose:(0,o.useCallback)((()=>{localStorage.setItem(n(),!0),r(!0),t&&l({feature:t})}),[r,l,n])}}},61360:(e,n,t)=>{t.d(n,{A:()=>i});t(62953);var o=t(96540);const i=function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const i=(0,o.useRef)(e);(0,o.useLayoutEffect)((()=>{i.current=e}),t),(0,o.useEffect)((()=>{const e=setTimeout((()=>i.current()),n);return()=>clearTimeout(e)}),[n,...t])}},67742:(e,n,t)=>{t.d(n,{A:()=>i});var o=t(96540);const i=(e,n)=>{const t=(0,o.useRef)(e);(0,o.useLayoutEffect)((()=>{t.current=e}),[e]),(0,o.useEffect)((()=>{if(!n&&0!==n)return;const e=setInterval((()=>t.current()),n);return()=>clearInterval(e)}),[n])}},540:(e,n,t)=>{t.d(n,{A:()=>s});t(62953);var o=t(96540),i=t(27467);const a={},s=(e,n,t,s)=>{const[r,l]=(0,i.N9)("modal"),[c,d]=(0,i.N9)("modalTab"),[u,m]=(0,i.N9)("modalParams"),p=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;"string"===typeof n&&d(n),l(e),t&&m(t)};return(0,o.useEffect)((()=>{n&&p(t,s)}),[]),{isModalOpen:e===r,currentModalTab:c,handleChangeModalTab:d,handleOpenModal:p,handleCloseModal:()=>{d(""),l(""),m()},params:u||a}}},35261:(e,n,t)=>{t.d(n,{A:()=>d});var o=t(96540),i=t(87337),a=t(82432),s=t(67990),r=t(3914),l=t(14994),c=t(5169);const d=()=>{const e=(0,c.t)(),n=(0,l.WW)(),t=(0,r.vt)(),d=(0,i.YN)(),u=(0,s.nl)(t,n);return(0,o.useCallback)((async function(o){let{onSuccess:i,onFail:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};await u(o,{onSuccess:o=>{(0,a.tv)({cacheKeyPrefix:e,nodeIds:o,roomIds:n,spaceId:t}),null===i||void 0===i||i()},onFail:s}),await d(o)}),[u,d])}},37944:(e,n,t)=>{t.d(n,{A:()=>l});var o=t(47767),i=t(96540),a=t(45588),s=t(3914),r=t(84280);const l=function(){let{roomSlug:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,s.bq)(),t=(0,o.Zp)(),{pathname:l}=(0,o.zy)(),c="".concat(l);return(0,i.useCallback)((()=>{const o=e?(0,a.tW)(r.uX,{spaceSlug:n,settingsTab:r.aj,settingsSubTab:e}):"/spaces/".concat(n,"/settings");t(o,{state:{previousUrlPath:c}})}),[c,t,e,n])}},17632:(e,n,t)=>{t.d(n,{A:()=>r});var o=t(69765),i=t(67990),a=t(82432),s=t(5169);const r=e=>{const n=(0,s.t)(),t=(0,o.ID)(),r=(0,o.wz)(e||t,"spaceId");return(0,i.vV)(r,e||t,{onSuccess:o=>(0,a.gm)({cacheKeyPrefix:n,nodeIds:o,roomId:e||t,spaceId:r})})}},67602:(e,n,t)=>{t.d(n,{A:()=>i});var o=t(540);const i=(e,n)=>{const{isModalOpen:t,handleOpenModal:i,handleCloseModal:a,params:s}=(0,o.A)(e,n);return[t,t?a:i,i,a,s]}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5700.b7c9908dc7f30a5a57e7.chunk.js b/src/web/gui/v2/5700.b7c9908dc7f30a5a57e7.chunk.js deleted file mode 100644 index ec6879124..000000000 --- a/src/web/gui/v2/5700.b7c9908dc7f30a5a57e7.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4efe7547-b8b3-471e-92e3-d577a967e407",e._sentryDebugIdIdentifier="sentry-dbid-4efe7547-b8b3-471e-92e3-d577a967e407")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5700],{95700:(e,n,d)=>{d.r(n),d.d(n,{default:()=>a});d(62953);var t=d(96540),f=d(67602),o=d(55337),l=d(6323);const a=()=>{const[e,,,n]=(0,f.A)("manageInvitations");return t.createElement(o.A,null,e&&t.createElement(l.d,{onClose:n}))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js b/src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js deleted file mode 100644 index 97e6a8053..000000000 --- a/src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt */ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="e99abdbe-8fc8-4842-9419-fbb26858bbf3",e._sentryDebugIdIdentifier="sentry-dbid-e99abdbe-8fc8-4842-9419-fbb26858bbf3")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5709],{86272:(e,t,n)=>{"use strict";t.__esModule=!0,t.Button=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),a=n(75879),l=n(34247),c=n(9736),r=(o=n(15877))&&o.__esModule?o:{default:o},i=["label","icon","flavour","isLoading","loadingLabel","onClick","textTransform","iconColor","iconSize","iconWidth","iconHeight","children"];function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,i);return s.default.createElement(a.StyledButton,u({flavour:h,textTransform:g,hasIcon:!!d||v,onClick:v?void 0:w,ref:t,iconColor:y,iconWidth:x,iconHeight:_},B),v&&s.default.createElement(c.LoaderIcon,{className:"button-icon"}),d&&!v&&s.default.createElement(r.default,{justifyContent:"center",alignItems:"center",width:"auto",height:"100%"},s.default.createElement(l.Icon,{size:b,className:"button-icon",title:d,name:d,width:x,height:_})),!!z&&s.default.createElement("span",null,v&&m||z))}))},27029:(e,t,n)=>{"use strict";t.__esModule=!0,t.ButtonGroup=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=r(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),a=(o=n(15877))&&o.__esModule?o:{default:o},l=n(86272),c=["items","checked","onChange","children","buttonProps"];function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(r=function(e){return e?n:t})(e)}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,c);return s.default.createElement(a.default,i({alignItems:"center"},d),null!=t&&t.length?s.default.createElement(h,{items:t,checked:n,onChange:o,buttonProps:r}):s.default.createElement(u,null,l))}},25547:(e,t)=>{"use strict";t.__esModule=!0,t.HOLLOW=t.DEFAULT=t.BORDER_LESS=void 0;t.DEFAULT="default",t.HOLLOW="hollow",t.BORDER_LESS="borderless"},7517:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=u(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=d(n(8043)),a=d(n(15877)),l=d(n(81816)),c=n(92019),r=n(86272),i=["width","height","tooltip"];function d(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(u=function(e){return e?n:t})(e)}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,i);return o.default.createElement(l.default,{plain:!0,animation:!0,content:m&&o.default.createElement(v,{content:m})},o.default.createElement(s.default,h({as:r.Button,iconWidth:a,iconHeight:d,ref:t,flavour:"borderless",neutral:!0},f)))}));t.default=m},37466:(e,t,n)=>{"use strict";t.__esModule=!0,t.IconButton=t.ButtonGroup=t.Button=void 0;var o=n(86272);t.Button=o.Button;var s,a=(s=n(7517))&&s.__esModule?s:{default:s};t.IconButton=a.default;var l=n(27029);t.ButtonGroup=l.ButtonGroup},75879:(e,t,n)=>{"use strict";t.__esModule=!0,t.StyledButton=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=w(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(8711)),s=n(13759),a=n(41234),l=f(n(32305)),c=f(n(36094)),r=f(n(62703)),i=f(n(27988)),d=f(n(60090)),u=f(n(25320)),h=n(50677),v=n(25547),m=["groupFirst","groupLast","groupMiddle"];function f(e){return e&&e.__esModule?e:{default:e}}function w(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(w=function(e){return e?n:t})(e)}function p(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function g(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,m);return g({padding:s.padding||s.tiny?[.5,1]:s.small?[1,3]:[2],colors:V(s),round:t?{side:"left"}:n?{side:"right"}:!o},function(e){return e.themeType?g(g({},e),{},{theme:b[e.themeType]}):g(g({},e),{},{theme:e.theme})}(s))})).withConfig({displayName:"styled__StyledButton",componentId:"sc-14wh25s-0"})(["&&{display:flex;justify-content:center;align-items:center;position:relative;",";font-weight:",";font-size:",";white-space:nowrap;word-break:keep-all;cursor:pointer;"," pointer-events:",";"," "," transition:all 150ms;background-color:",";color:",";border-width:1px;border-style:solid;border-color:",";"," box-sizing:border-box;"," "," text-decoration:none;& > span{",";margin-left:",";}&:hover{border-color:",";background-color:",";color:",";text-decoration:none;.button-icon{fill:",";}}&:active{","}"," &:focus{outline:none;}.button-icon{height:",";width:",";fill:",";}.ntd-spinner{fill:none;stroke-width:17px;stroke-dasharray:100;stroke-dashoffset:100;animation:ntd-draw 1s linear infinite;stroke:",";width:24px;}.path{stroke:",";}@keyframes ntd-draw{to{stroke-dashoffset:0;}}}"],i.default,(function(e){return e.strong?700:500}),(function(e){var t=e.small;return e.tiny?"10px":t?"12px":"14px"}),(function(e){return e.disabled&&"opacity: 0.4;"}),(function(e){return e.disabled?"none":"auto"}),l.default,c.default,(function(e){return e.colors.bg(e)}),(function(e){return e.colors.color(e)}),(function(e){return e.colors.border(e)}),r.default,u.default,h.position,d.default,(function(e){return e.hasIcon?"4px":"0px"}),(function(e){return e.colors.borderHover(e)}),(function(e){return e.colors.bgHover(e)}),(function(e){return e.colors.colorHover(e)}),(function(e){return e.colors.colorHover(e)}),x,(function(e){return e.active&&"\n "+x+"\n "}),(function(e){return e.iconWidth?"string"===typeof e.iconWidth?e.iconWidth:e.iconWidth+"px":(0,a.getSizeBy)(2)(e)}),(function(e){return e.iconHeight?"string"===typeof e.iconHeight?e.iconHeight:e.iconHeight+"px":(0,a.getSizeBy)(2)(e)}),(function(e){return e.colors.iconColor(e)}),(function(e){return e.colors.color(e)}),(function(e){return e.colors.color(e)}))},87159:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),a=(o=n(15877))&&o.__esModule?o:{default:o},l=n(92019),c=n(34247),r=["children","align","margin","background"];function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,r);return s.default.createElement(a.default,{ref:t,column:"top"===o,columnReverse:"bottom"===o,rowReverse:"right"===o,margin:h},s.default.createElement(a.default,d({background:m,padding:[1,2],round:!0,column:!0},f),"string"===typeof n?s.default.createElement(l.Text,{color:"tooltipText"},n):n),o&&s.default.createElement(c.Icon,{name:"triangle",alignSelf:"center",color:m,rotate:u[o],height:"8px",width:"8px","data-testid":"drop-arrow"}))}));t.default=h},99436:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=w(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=f(n(40961)),a=f(n(44862)),l=f(n(43119)),c=f(n(35586)),r=f(n(51365)),i=f(n(34587)),d=f(n(22007)),u=f(n(93331)),h=f(n(89075)),v=f(n(8711)),m=["backdrop","target","align","stretch","onClickOutside","onEsc","children","canHideTarget","keepHorizontal"];function f(e){return e&&e.__esModule?e:{default:e}}function w(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(w=function(e){return e?n:t})(e)}function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,m),O=(0,r.default)(t),L=O[0],k=O[1],S=(0,d.default)(v,L,w,x,H,C);(0,o.useLayoutEffect)((function(){S()}),[S]),(0,i.default)(v,S),(0,c.default)(L,_,v),(0,l.default)(M);var A=(0,a.default)();return s.default.createPortal(h?o.default.createElement(o.default.Fragment,null,o.default.createElement(u.default,p({ref:k,width:{max:"100%"},column:!0,"data-testid":"drop"},V),z),o.default.createElement(g,null)):o.default.createElement(u.default,p({ref:k,width:{max:"100%"},column:!0,"data-testid":"drop"},V),z),A)}));t.default=b},34587:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=n(96540),a=(o=n(42561))&&o.__esModule?o:{default:o};t.default=function(e,t){return(0,s.useEffect)((function(){var n,o=function(){var n=(0,a.default)(e).filter((function(e){return e.scrollHeight>e.clientHeight}));return n.forEach((function(e){return e.addEventListener("scroll",t,{capture:!1,passive:!0})})),function(){return n.forEach((function(e){return e.removeEventListener("scroll",t)}))}};n=o();var s=function(){n(),n=o(),t()};return window.addEventListener("resize",s),function(){n(),window.removeEventListener("resize",s)}}),[e,t])}},86633:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=h(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=u(n(8711)),a=n(28892),l=u(n(15877)),c=u(n(94474)),r=u(n(8043)),i=n(51462),d=["hideShadow","itemProps","items","onItemClick","dropTitle","dropTitlePadding","Item","Footer","value","hasSearch","searchMargin","gap","estimateSize","close"];function u(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(h=function(e){return e?n:t})(e)}function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,d),k=(0,o.useState)(""),S=k[0],A=k[1],E=(0,o.useMemo)((function(){if(!S)return u;var e=S.toLowerCase();return u.filter((function(t){var n=t.label,o=t.value;return!("string"!==typeof n||!n.toLowerCase().includes(e))||!("string"!==typeof o||!o.toLowerCase().includes(e))}))}),[u,S]),P=(0,o.useRef)(),T=(0,a.useVirtualizer)({count:E.length,getScrollElement:function(){return P.current},scrollOffsetFn:function(e){return e?e.target.scrollTop-P.current.offsetTop:0},overscan:3,enableSmoothScroll:!1,estimateSize:V});return o.default.createElement(m,v({as:"ul",role:"listbox",background:"dropdown",hideShadow:n,padding:[0],margin:[1,0],column:!0,tabindex:"-1",width:"auto"},L),w&&o.default.createElement(l.default,{padding:g},w),_&&o.default.createElement(r.default,{margin:z},o.default.createElement(c.default,{"data-testid":"dropdown-search",placeholder:"Search",onChange:A})),o.default.createElement("div",{ref:(0,i.mergeRefs)(P,t),style:{height:"100%",overflow:"auto"}},o.default.createElement("div",{style:{minHeight:T.getTotalSize()+"px",width:"100%",position:"relative"}},T.getVirtualItems().map((function(e){return o.default.createElement("div",{key:e.key,style:{position:"absolute",top:0,left:0,width:"100%",transform:"translateY("+e.start+"px)",padding:2*H,overflow:"hidden"},"data-index":e.index,ref:T.measureElement},o.default.createElement(y,{item:E[e.index],index:e.index,itemProps:s,value:x,onItemClick:h,close:O}))})))),b&&o.default.createElement(b,{close:O}))}));t.default=w},21046:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=t.ItemContainer=void 0;var o=d(n(96540)),s=d(n(8711)),a=n(41234),l=d(n(15877)),c=n(92019),r=["value","label","icon","reverse","disabled","onClick"],i=["item","value","onItemClick","index","style"];function d(e){return e&&e.__esModule?e:{default:e}}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function m(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var f=t.ItemContainer=(0,s.default)(l.default).attrs((function(e){return function(e){for(var t=1;t * {\n color: "+(0,a.getColor)("textLite")({theme:n})+"\n }\n "}),(function(e){var t=e.selected,n=e.theme;return t&&"\n background-color: "+("Dark"===n.name?(0,a.getRgbColor)(["green","netdata"],.3)({theme:n}):(0,a.getRgbColor)(["green","frostee"])({theme:n}))+"\n "}));t.default=function(e){var t=e.item,n=t.value,s=t.label,a=t.icon,l=t.reverse,d=t.disabled,v=t.onClick,m=h(t,r),w=e.value,p=e.onItemClick,g=e.index,y=e.style,b=h(e,i),x=w===n;return o.default.createElement(f,u({"data-index":g,"aria-selected":x,disabled:d,selected:x,onClick:function(e){v&&v(e),p(n)}},m,b,{style:y}),l&&o.default.createElement(c.TextSmall,null,s),a,!l&&o.default.createElement(c.TextSmall,null,s))}},72982:(e,t,n)=>{"use strict";t.A=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=m(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=v(n(99436)),a=v(n(48004)),l=v(n(42561)),c=v(n(51365)),r=v(n(23627)),i=v(n(9763)),d=v(n(86633)),u=v(n(21046)),h=["value","onChange","onOpen","onClose","closeOnClick","open","icon","label","caret","children","dropProps","dropdownProps","itemProps","items","Item","Footer","Dropdown","animation","dropTitle","dropTitlePadding","hasSearch"];function v(e){return e&&e.__esModule?e:{default:e}}function m(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(m=function(e){return e?n:t})(e)}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,h),W=(0,r.default)(_,{on:m,off:g}),U=W[0],Y=W[1],Q=W[3],X=(0,c.default)(t),Z=X[0],G=X[1],K=(0,o.useCallback)((function(e){v&&v(e),b&&Q()}),[v]),$=(0,o.useCallback)((function(e){Z.current===e.target||(0,l.default)(e.target).some((function(e){return e===Z.current}))||Q()}),[Q]),J=(0,a.default)(V,G,function(e){for(var t=1;t{"use strict";t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=i(n(8711)),a=i(n(15877)),l=n(34247),c=n(92019),r=["open","icon","label","caret"];function i(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,r);return o.default.createElement(h,u({gap:2,padding:[2,4],justifyContent:"between",alignItems:"center",role:"button",tabindex:"0","aria-haspopup":"listbox","aria-expanded":n,ref:t},v),o.default.createElement(a.default,{alignItems:"center",gap:2},s,"string"===typeof i?o.default.createElement(c.Text,null,i):i),!0===d?o.default.createElement(l.Icon,{name:"chevron_down",color:"text",width:"12px",height:"12px",rotate:n?2:null}):d)}));t.default=v},22232:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;t.default={top:{bottom:"top"},left:{right:"left"},right:{left:"right"},bottom:{top:"bottom"}}},42561:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;t.default=function(e){var t=[];for(e=e.parentNode;e;)t.push(e),e=e.parentNode;return t}},2310:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=(o=n(42561))&&o.__esModule?o:{default:o};t.default=function(e,t){return(0,s.default)(t).some((function(t){return t===e}))}},48004:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var c=s?Object.getOwnPropertyDescriptor(e,a):null;c&&(c.get||c.set)?Object.defineProperty(o,a,c):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),a=(o=n(68016))&&o.__esModule?o:{default:o};function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t{"use strict";t.__esModule=!0,t.default=void 0;var o,s=n(96540),a=(o=n(3639))&&o.__esModule?o:{default:o};t.default=function(e){return(0,s.useMemo)((function(){return e||(0,a.default)()}),[])}},81816:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=v(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=h(n(99436)),a=h(n(51365)),l=h(n(23627)),c=h(n(48004)),r=h(n(88484)),i=h(n(22232)),d=h(n(87159)),u=["plain","open","align","dropProps","content","animation","disabled","zIndex","children","allowHoverOnTooltip"];function h(e){return e&&e.__esModule?e:{default:e}}function v(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(v=function(e){return e?n:t})(e)}function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,u),V=(0,r.default)(C["aria-describedby"]),O=(0,l.default)(!1),L=O[0],k=O[2],S=O[3],A=(0,a.default)(t),E=A[0],P=A[1],T=(0,c.default)(B,P,w(w({onMouseEnter:k,onMouseLeave:H?function(){return setTimeout((function(){j.current||S()}),300)}:S,onFocus:k,onBlur:S},L&&{"aria-describedby":V}),C)),j=(0,o.useRef)(!1);return(0,o.useLayoutEffect)((function(){E.current&&v&&k()}),[]),b?o.default.createElement(o.Fragment,null,T,L&&E.current&&!_&&o.default.createElement(s.default,m({noEvents:!H,align:(null==y?void 0:y.align)||i.default[p],hideShadow:!0,id:V,onClickOutside:S,onMouseEnter:function(){return j.current=!0},onMouseLeave:function(){j.current=!1,S()},target:E.current},y,{animation:x,onEsc:S,zIndex:z}),n?g(b):o.default.createElement(d.default,{align:p},g(b)))):B}));t.default=y},9736:(e,t,n)=>{"use strict";t.__esModule=!0,t.LoaderIcon=void 0;var o=n(27597);t.LoaderIcon=o.LoaderIcon},27597:(e,t,n)=>{"use strict";t.__esModule=!0,t.LoaderIcon=void 0;var o=l(n(96540)),s=l(n(8711)),a=n(41234);function l(e){return e&&e.__esModule?e:{default:e}}var c=s.default.svg.withConfig({displayName:"loader__StyledSvg",componentId:"sc-fxhmqg-0"})(["fill:none;stroke-width:17px;stroke-dasharray:100;stroke-dashoffset:100;animation:ntd-draw 1s linear infinite;stroke:",";width:24px;.path{stroke:",";}@keyframes ntd-draw{to{stroke-dashoffset:0;}}"],(0,a.getColor)("bright"),(0,a.getColor)("bright"));t.LoaderIcon=function(e){var t=e.className;return o.default.createElement(c,{className:t,viewBox:"0 0 21 17",version:"1.1",xmlns:"http://www.w3.org/2000/svg"},o.default.createElement("g",{className:"path",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},o.default.createElement("path",{d:"M2,1 C8.25086152,1 11.9367136,1 13.0575562,1 C14.73882,1 19.6834591,2 19.9614325,7.72050108 C20.239406,13.4410022 15.7459591,15.1224845 13.6463763,15.1224845 C12.2466545,15.1224845 10.0279195,15.1224845 6.9901715,15.1224845 L2,1 Z",id:"Path-2",strokeWidth:"2"})))}},63534:(e,t,n)=>{"use strict";t.__esModule=!0,t.Icon=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=n(38857),a=n(81900),l=["name","size"];function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,l),d=s.iconsList[n];if(!d)return null;var u,h=c||((u=n).endsWith("_s")?"small":u.endsWith("_l")?"large":"medium");return o.default.createElement(a.StyledIcon,r({viewBox:d.viewBox},i,{size:h,ref:t}),o.default.createElement("use",{xlinkHref:"#"+d.id}))}))},38857:(e,t,n)=>{"use strict";t.__esModule=!0,t.iconsList=void 0;var o=hl(n(47060)),s=hl(n(18217)),a=hl(n(34975)),l=hl(n(52441)),c=hl(n(72041)),r=hl(n(60863)),i=hl(n(30882)),d=hl(n(17423)),u=hl(n(38475)),h=hl(n(71049)),v=hl(n(29044)),m=hl(n(26391)),f=hl(n(58709)),w=hl(n(62709)),p=hl(n(34390)),g=hl(n(20949)),y=hl(n(24810)),b=hl(n(97322)),x=hl(n(58655)),_=hl(n(51317)),M=hl(n(86480)),z=hl(n(98666)),B=hl(n(81886)),H=hl(n(38813)),C=hl(n(78286)),V=hl(n(52390)),O=hl(n(70157)),L=hl(n(87723)),k=hl(n(59460)),S=hl(n(25817)),A=hl(n(78957)),E=hl(n(48783)),P=hl(n(36878)),T=hl(n(62682)),j=hl(n(45715)),q=hl(n(74389)),D=hl(n(43071)),I=hl(n(15588)),F=hl(n(22203)),N=hl(n(14767)),R=hl(n(91956)),W=hl(n(87875)),U=hl(n(97517)),Y=hl(n(3559)),Q=hl(n(79919)),X=hl(n(63668)),Z=hl(n(26762)),G=hl(n(30464)),K=hl(n(66643)),$=hl(n(39078)),J=hl(n(8827)),ee=hl(n(49686)),te=hl(n(49764)),ne=hl(n(49484)),oe=hl(n(89482)),se=hl(n(20327)),ae=hl(n(93855)),le=hl(n(53079)),ce=hl(n(65377)),re=hl(n(77568)),ie=hl(n(51580)),de=hl(n(34623)),ue=hl(n(63319)),he=hl(n(85419)),ve=hl(n(81426)),me=hl(n(68124)),fe=hl(n(86547)),we=hl(n(85809)),pe=hl(n(42202)),ge=hl(n(48083)),ye=hl(n(58746)),be=hl(n(4643)),xe=hl(n(21774)),_e=hl(n(43380)),Me=hl(n(38001)),ze=hl(n(26181)),Be=hl(n(6494)),He=hl(n(66427)),Ce=hl(n(16888)),Ve=hl(n(74552)),Oe=hl(n(66194)),Le=hl(n(14946)),ke=hl(n(85095)),Se=hl(n(47307)),Ae=hl(n(68864)),Ee=hl(n(84652)),Pe=hl(n(8035)),Te=hl(n(98411)),je=hl(n(20599)),qe=hl(n(79570)),De=hl(n(8001)),Ie=hl(n(79684)),Fe=hl(n(4228)),Ne=hl(n(3113)),Re=hl(n(39088)),We=hl(n(99464)),Ue=hl(n(37414)),Ye=hl(n(91423)),Qe=hl(n(79644)),Xe=hl(n(89875)),Ze=hl(n(47720)),Ge=hl(n(72570)),Ke=hl(n(60774)),$e=hl(n(3886)),Je=hl(n(24241)),et=hl(n(41519)),tt=hl(n(22370)),nt=hl(n(40813)),ot=hl(n(58609)),st=hl(n(10237)),at=hl(n(78057)),lt=hl(n(7351)),ct=hl(n(24229)),rt=hl(n(25094)),it=hl(n(89513)),dt=hl(n(41517)),ut=hl(n(27612)),ht=hl(n(5048)),vt=hl(n(11862)),mt=hl(n(949)),ft=hl(n(61898)),wt=hl(n(73862)),pt=hl(n(92949)),gt=hl(n(78131)),yt=hl(n(11336)),bt=hl(n(27555)),xt=hl(n(9080)),_t=hl(n(56851)),Mt=hl(n(49232)),zt=hl(n(32824)),Bt=hl(n(86294)),Ht=hl(n(92605)),Ct=hl(n(35813)),Vt=hl(n(16912)),Ot=hl(n(76107)),Lt=hl(n(88909)),kt=hl(n(45266)),St=hl(n(70762)),At=hl(n(68081)),Et=hl(n(64197)),Pt=hl(n(6232)),Tt=hl(n(90728)),jt=hl(n(52547)),qt=hl(n(50199)),Dt=hl(n(20002)),It=hl(n(67977)),Ft=hl(n(70009)),Nt=hl(n(65550)),Rt=hl(n(70647)),Wt=hl(n(83424)),Ut=hl(n(40483)),Yt=hl(n(47676)),Qt=hl(n(21489)),Xt=hl(n(82118)),Zt=hl(n(64739)),Gt=hl(n(27703)),Kt=hl(n(16933)),$t=hl(n(76415)),Jt=hl(n(96104)),en=hl(n(5820)),tn=hl(n(72085)),nn=hl(n(40235)),on=hl(n(81199)),sn=hl(n(95546)),an=hl(n(40852)),ln=hl(n(43902)),cn=hl(n(21674)),rn=hl(n(1279)),dn=hl(n(53965)),un=hl(n(14608)),hn=hl(n(5057)),vn=hl(n(1498)),mn=hl(n(96317)),fn=hl(n(51991)),wn=hl(n(34111)),pn=hl(n(4344)),gn=hl(n(18647)),yn=hl(n(30983)),bn=hl(n(16410)),xn=hl(n(57013)),_n=hl(n(34031)),Mn=hl(n(55703)),zn=hl(n(12501)),Bn=hl(n(43947)),Hn=hl(n(52059)),Cn=hl(n(9150)),Vn=hl(n(74480)),On=hl(n(45753)),Ln=hl(n(89336)),kn=hl(n(59631)),Sn=hl(n(47627)),An=hl(n(22463)),En=hl(n(3599)),Pn=hl(n(61386)),Tn=hl(n(17506)),jn=hl(n(91008)),qn=hl(n(95173)),Dn=hl(n(39850)),In=hl(n(79662)),Fn=hl(n(34106)),Nn=hl(n(7297)),Rn=hl(n(80370)),Wn=hl(n(38194)),Un=hl(n(54349)),Yn=hl(n(75873)),Qn=hl(n(39862)),Xn=hl(n(29474)),Zn=hl(n(53328)),Gn=hl(n(94403)),Kn=hl(n(60188)),$n=hl(n(64612)),Jn=hl(n(56025)),eo=hl(n(94064)),to=hl(n(24934)),no=hl(n(61248)),oo=hl(n(48635)),so=hl(n(29921)),ao=hl(n(52874)),lo=hl(n(70922)),co=hl(n(38141)),ro=hl(n(26946)),io=hl(n(98108)),uo=hl(n(87007)),ho=hl(n(14167)),vo=hl(n(64628)),mo=hl(n(32365)),fo=hl(n(27506)),wo=hl(n(75116)),po=hl(n(25376)),go=hl(n(53085)),yo=hl(n(46550)),bo=hl(n(27129)),xo=hl(n(49164)),_o=hl(n(47217)),Mo=hl(n(15471)),zo=hl(n(65024)),Bo=hl(n(84024)),Ho=hl(n(69460)),Co=hl(n(62061)),Vo=hl(n(17026)),Oo=hl(n(72693)),Lo=hl(n(19227)),ko=hl(n(5323)),So=hl(n(72293)),Ao=hl(n(40484)),Eo=hl(n(71061)),Po=hl(n(43671)),To=hl(n(834)),jo=hl(n(70249)),qo=hl(n(88112)),Do=hl(n(27891)),Io=hl(n(16171)),Fo=hl(n(68205)),No=hl(n(67360)),Ro=hl(n(15958)),Wo=hl(n(47532)),Uo=hl(n(6133)),Yo=hl(n(19943)),Qo=hl(n(21832)),Xo=hl(n(47306)),Zo=hl(n(78902)),Go=hl(n(28676)),Ko=hl(n(89399)),$o=hl(n(99229)),Jo=hl(n(97116)),es=hl(n(77840)),ts=hl(n(49762)),ns=hl(n(31411)),os=hl(n(44555)),ss=hl(n(5157)),as=hl(n(31896)),ls=hl(n(62520)),cs=hl(n(14191)),rs=hl(n(50861)),is=hl(n(13974)),ds=hl(n(51665)),us=hl(n(66689)),hs=hl(n(74161)),vs=hl(n(26249)),ms=hl(n(51961)),fs=hl(n(6819)),ws=hl(n(70391)),ps=hl(n(55767)),gs=hl(n(72232)),ys=hl(n(65494)),bs=hl(n(55925)),xs=hl(n(10484)),_s=hl(n(35743)),Ms=hl(n(51771)),zs=hl(n(95715)),Bs=hl(n(12393)),Hs=hl(n(76533)),Cs=hl(n(24972)),Vs=hl(n(61357)),Os=hl(n(88222)),Ls=hl(n(43077)),ks=hl(n(8277)),Ss=hl(n(51072)),As=hl(n(78776)),Es=hl(n(44212)),Ps=hl(n(8269)),Ts=hl(n(4729)),js=hl(n(66359)),qs=hl(n(46021)),Ds=hl(n(63487)),Is=hl(n(79723)),Fs=hl(n(81925)),Ns=hl(n(22202)),Rs=hl(n(17576)),Ws=hl(n(60194)),Us=hl(n(85694)),Ys=hl(n(25628)),Qs=hl(n(2965)),Xs=hl(n(13203)),Zs=hl(n(34124)),Gs=hl(n(13151)),Ks=hl(n(52039)),$s=hl(n(15670)),Js=hl(n(20972)),ea=hl(n(99947)),ta=hl(n(86788)),na=hl(n(73931)),oa=hl(n(75194)),sa=hl(n(84458)),aa=hl(n(26140)),la=hl(n(83835)),ca=hl(n(2386)),ra=hl(n(13347)),ia=hl(n(5601)),da=hl(n(84222)),ua=hl(n(87083)),ha=hl(n(35624)),va=hl(n(51081)),ma=hl(n(13322)),fa=hl(n(44894)),wa=hl(n(79349)),pa=hl(n(20508)),ga=hl(n(73215)),ya=hl(n(37110)),ba=hl(n(67287)),xa=hl(n(99679)),_a=hl(n(97285)),Ma=hl(n(24387)),za=hl(n(54204)),Ba=hl(n(46020)),Ha=hl(n(134)),Ca=hl(n(38860)),Va=hl(n(16168)),Oa=hl(n(95436)),La=hl(n(87501)),ka=hl(n(68008)),Sa=hl(n(97701)),Aa=hl(n(1806)),Ea=hl(n(85994)),Pa=hl(n(39191)),Ta=hl(n(36419)),ja=hl(n(30807)),qa=hl(n(55370)),Da=hl(n(2381)),Ia=hl(n(42149)),Fa=hl(n(5060)),Na=hl(n(54991)),Ra=hl(n(55766)),Wa=hl(n(75444)),Ua=hl(n(18672)),Ya=hl(n(74271)),Qa=hl(n(43728)),Xa=hl(n(35655)),Za=hl(n(88335)),Ga=hl(n(62791)),Ka=hl(n(73324)),$a=hl(n(9932)),Ja=hl(n(9232)),el=hl(n(68905)),tl=hl(n(79529)),nl=hl(n(85903)),ol=hl(n(68973)),sl=hl(n(68705)),al=hl(n(29085)),ll=hl(n(99444)),cl=hl(n(83357)),rl=hl(n(34386)),il=hl(n(68317)),dl=hl(n(10120)),ul=hl(n(31952));function hl(e){return e&&e.__esModule?e:{default:e}}t.iconsList={add_node:o.default,add_user:s.default,aggregation_avg:a.default,aggregation_max:l.default,aggregation_med:c.default,aggregation_min:r.default,aggregation_sum:i.default,aggregation_sum_abs:d.default,alarm:u.default,alarmCritical:h.default,alarmCriticalWarning:v.default,alarmFilled:m.default,alarmWarning:f.default,alarm_bell:w.default,alarms_new:p.default,alarm_off:g.default,anomaliesBrain:y.default,anomaliesLens:b.default,anomalyBadge:x.default,applications_hollow:_.default,applicationsSolid:tl.default,around_clock:M.default,arrow_down:z.default,arrow_w_line_left:B.default,arrow_w_line_right:H.default,arrow_left:C.default,arrow_s_down:V.default,arrow_s_left:O.default,arrows_vertical:L.default,bookmark:k.default,bullet_one:S.default,bullet_three:A.default,bullet_two:E.default,calendarFull:P.default,calendarFullPress:T.default,chart_added:j.default,chart_bars:q.default,chart_circle:D.default,chart_gauge:I.default,chart_pie:F.default,charts:N.default,charts_view:ol.default,check:R.default,checkmark_partial_s:W.default,checkmark_s:U.default,checkmark:Y.default,chevron_double:Q.default,chevron_down:X.default,chevron_down_thin:Z.default,chevron_expand:G.default,chevron_left:K.default,chevron_left_small:J.default,chevron_left_start:$.default,chevron_right:ee.default,chevron_right_end:ne.default,chevron_right_s:te.default,chevron_right_small:oe.default,chevron_up_thin:se.default,classError:ae.default,classLatency:le.default,classUtilization:ce.default,classWorkload:re.default,clock_hollow:ie.default,clock5Min:de.default,clock5MinPress:ue.default,close_circle:he.default,cluster:ve.default,cluster_spaces:me.default,code:fe.default,collapse:we.default,collect:pe.default,community:ge.default,connection_to_cloud:ye.default,connectivityStatusLive:be.default,connectivityStatusOffline:xe.default,connectivityStatusStale:_e.default,container:Me.default,controller_kind:ze.default,controller_name:Be.default,copy:He.default,correlation:Ce.default,correlation_inv:Ve.default,cpu:Oe.default,cross_s:Le.default,data_retention:ke.default,database:Se.default,dashboard:Ae.default,dashboard_add:Ee.default,dashboards:Pe.default,disk:Te.default,discoveredConfig:je.default,documentation:qe.default,dot:De.default,dots_2x3:Ie.default,download:Fe.default,dragHorizontal:Ne.default,dynamicConfig:Re.default,edit:We.default,error:Ue.default,exclamation:Ye.default,expand:Qe.default,favorites:Xe.default,feed:Ze.default,filter:Ge.default,filterList:Ke.default,firewallSolid:Ja.default,forcePlay:$e.default,forcePlayOutline:Je.default,functions:et.default,fullScreen:tt.default,gear:nt.default,github:ot.default,google:at.default,goToNode:st.default,group_by:lt.default,h1:ct.default,h2:rt.default,hamburger:it.default,help:dt.default,hide:ut.default,highlightArea:ht.default,holder:vt.default,importExport:mt.default,incident_manager:ft.default,information:wt.default,informationPress:pt.default,insights:gt.default,integrationAWSSNS:yt.default,integrationAWSSNSColored:bt.default,integrationDiscord:xt.default,integrationDiscordColored:_t.default,integrationEmail:Mt.default,integrationEmailColored:zt.default,integrationMattermost:Bt.default,integrationMattermostColored:Ht.default,integrationMobileAppColored:Ct.default,integrationOpsgenie:Vt.default,integrationOpsgenieColored:Ot.default,integrationPagerduty:Lt.default,integrationPagerdutyColored:kt.default,integrationRocketChat:St.default,integrationRocketChatColored:At.default,integrations:Et.default,internalConfig:Pt.default,integrationSlack:Tt.default,integrationSlackColored:jt.default,integrationSplunk:qt.default,integrationTeams:Dt.default,integrationTeamsColored:It.default,integrationTelegram:Ft.default,integrationTelegramColored:Nt.default,integrationVictorOps:Rt.default,integrationVictorOpsColored:Wt.default,integrationWebhook:Ut.default,integrationWebhookColored:Yt.default,ipNetworking:Qt.default,ipNetworkingPress:Xt.default,last_week:Zt.default,line_chart:Gt.default,logo_s:$t.default,logs:Kt.default,loading:Jt.default,long_arrow_up:en.default,magnify:tn.default,metrics:nn.default,metrics_explorer:on.default,minimize_s:sn.default,mobilePushNotifications:an.default,mobilePushNotificationsHollow:ln.default,monitoring:cn.default,more:rn.default,navLeft:dn.default,navRight:un.default,nav_arrow_goto:hn.default,nav_dots:vn.default,networkingStack:nl.default,netdata:mn.default,netdataAssistant:fn.default,netdataPress:wn.default,node:pn.default,node_child:gn.default,node_default_l:yn.default,node_hollow:bn.default,node_import_export:xn.default,node_notification_l:_n.default,node_parent:Mn.default,node_selected_l:zn.default,nodes:Bn.default,nodes_hollow:Hn.default,none_selected:Cn.default,nodes_update:sl.default,notification:so.default,notification_shortcut_enabled:Vn.default,notification_shortcut_disabled:On.default,notificationTrigger:Ln.default,okta:kn.default,openid:Sn.default,os:An.default,osAlpineLinux:En.default,osAmazonLinux:Pn.default,osArchLinux:Tn.default,osCelarOS:jn.default,osCentos:qn.default,osCentosColored:Dn.default,osCoreOS:In.default,osDebian:Fn.default,osDebianColored:Nn.default,osFedora:Rn.default,osFreeBSD:Wn.default,osGentoo:Un.default,osLinux:Yn.default,osLinuxColored:Qn.default,osLinuxManjaro:Xn.default,osMacOSX:Zn.default,osOracle:Gn.default,osOracleColored:Kn.default,osPress:$n.default,osRaspbian:Jn.default,osRedHat:eo.default,osSuseLinux:to.default,osUbuntu:no.default,osUbuntuColored:oo.default,padlock:ao.default,panTool:lo.default,pauseOutline:co.default,pauseSolid:ro.default,pencilSolid:uo.default,pencilOutline:io.default,pie_chart_skeleton:ho.default,pin_element:vo.default,playOutline:mo.default,playSolid:fo.default,plus:wo.default,plus_mini_s:po.default,pod:go.default,pricing:yo.default,print:bo.default,privacy:xo.default,pushNotifications:_o.default,qrCode:Mo.default,ram:Ho.default,qualityOfServiceSolid:el.default,question:zo.default,questionFilled:Bo.default,rearrange:Co.default,reduceSize:Vo.default,refresh:Oo.default,reload:Lo.default,removeNode:ko.default,resize_handler:So.default,rocket:Ao.default,room:Eo.default,room_home:Po.default,room_new:To.default,room_overview:jo.default,sad:qo.default,save:Do.default,save2:Io.default,scheduled:Fo.default,search:No.default,search_s:Ro.default,searchPress:Wo.default,serviceAlarm:u.default,serviceApache:Uo.default,serviceAsterisk:Yo.default,serviceApacheTomcat:Qo.default,serviceBeanstalk:Xo.default,serviceBind:Zo.default,serviceContainer:Go.default,serviceCoreDns:Ko.default,serviceCouchDB:$o.default,serviceDatabase:Jo.default,serviceDNS:es.default,serviceDNSmasq:ts.default,serviceDockerHubPress:ns.default,serviceDockerHub:os.default,serviceDotNet:ss.default,serviceEBPF:as.default,serviceElasticSearch:ls.default,serviceExample:cs.default,serviceFreeNAS:rs.default,serviceHAProxy:is.default,serviceHTTPCheck:ds.default,serviceIceCast:us.default,serviceInfluxDB:hs.default,serviceIPFS:vs.default,serviceIPVS:ms.default,serviceKubernetes:fs.default,serviceLighthttpd:ws.default,serviceLighthttpd2:ps.default,serviceLiteSpeed:gs.default,serviceLxc:ys.default,serviceMariaDB:bs.default,serviceMemCached:xs.default,serviceMongoDB:_s.default,serviceMySQL:Ms.default,serviceMySQLPress:zs.default,serviceNginx:Bs.default,serviceNginxLocal:Hs.default,serviceNginxPlus:Cs.default,serviceNtpd:Vs.default,serviceNvidia:Os.default,serviceNtpdPress:Ls.default,serviceOpenStack:ks.default,serviceOpenWrt:Ss.default,servicePan:As.default,servicePandas:Es.default,servicePercona:Ps.default,servicePfSense:Ts.default,servicePhpFpm:js.default,servicePostgreSQL:qs.default,servicePrometheus:Ds.default,serviceProxySQL:Is.default,serviceRabbitMQ:Fs.default,serviceRandom:Ns.default,serviceRedis:Rs.default,serviceRethinkDB:Ws.default,serviceRetroShare:Us.default,serviceSelectedArea:Ys.default,serviceSendgrid:Qs.default,services:Xs.default,servicesSmartdlog:Zs.default,serviceSolr:Gs.default,serviceSquid:Ks.default,serviceSummaryStatistic:$s.default,serviceSystemd:Js.default,serviceTraefik:ea.default,serviceVarnish:ta.default,serviceWebLog:na.default,serviceWebLogNginx:oa.default,serviceX509Check:sa.default,serviceXen:aa.default,settings:la.default,settings_h:ca.default,sign_in:ra.default,sorting_vertical:ia.default,sort_ascending:ua.default,sorting_asc:da.default,sort_descending:va.default,sorting_desc:ha.default,sort_indicator:ma.default,space:fa.default,space_new:wa.default,spaces_v2:pa.default,stockConfig:ga.default,switch_off:ya.default,system_overview:ba.default,systemOverviewPress:xa.default,text_add:_a.default,thumb_down:Ma.default,thumb_up:za.default,tiny_buttons:Ba.default,training:Ha.default,trashcan:Ca.default,triangle:Va.default,triangle_down:Oa.default,top:La.default,unknownError:ka.default,universe:Sa.default,unreachable:Aa.default,unreachableNode:Ea.default,update:Pa.default,update_pending:Ta.default,upload:ja.default,userConfig:qa.default,user:Da.default,userPress:Ia.default,users:Fa.default,value:Na.default,view_list:Ra.default,viewSingleNode:Wa.default,viewSingleNodePress:Ua.default,virtualization:Ya.default,warning:Qa.default,warning_triangle:Xa.default,warning_triangle_hollow:Za.default,weights_compare:Ga.default,weights_drill_down:Ka.default,x:$a.default,zoomIn:al.default,zoomOut:ll.default,zoomReset:cl.default,N:rl.default,I:il.default,D:dl.default,L:ul.default}},34247:(e,t,n)=>{"use strict";t.__esModule=!0;var o={iconsList:!0,IconComponents:!0};t.iconsList=t.IconComponents=void 0;var s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(9736));t.IconComponents=s;var a=n(38857);t.iconsList=a.iconsList;var l=n(63534);function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}Object.keys(l).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===l[e]||(t[e]=l[e]))}))},318:(e,t,n)=>{"use strict";t.__esModule=!0;var o={MultiRangeInput:!0,useTouchedState:!0,useFocusedState:!0,useInputValue:!0};t.useTouchedState=t.useInputValue=t.useFocusedState=t.MultiRangeInput=void 0;var s=n(65478);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===s[e]||(t[e]=s[e]))}));var a,l=(a=n(11421))&&a.__esModule?a:{default:a};t.MultiRangeInput=l.default;var c=n(58926);t.useTouchedState=c.useTouchedState;var r=n(87773);t.useFocusedState=r.useFocusedState;var i=n(85956);t.useInputValue=i.useInputValue},65478:(e,t,n)=>{"use strict";t.__esModule=!0,t.TextInput=void 0;var o=r(n(96540)),s=r(n(15877)),a=n(92019),l=n(9963),c=["error","disabled","iconLeft","iconRight","name","onFocus","onBlur","className","hint","fieldIndicator","placeholder","label","value","inputRef","size","containerStyles","inputContainerStyles","hideErrorMessage"];function r(e){return e&&e.__esModule?e:{default:e}}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,c);return o.default.createElement(s.default,i({gap:.5,column:!0,className:f},B,{as:"label"}),"string"===typeof b?o.default.createElement(l.LabelText,{size:z},b):b,o.default.createElement(s.default,i({position:"relative"},H),r&&o.default.createElement(s.default,{position:"absolute",left:1,top:0,bottom:0,alignItems:"center"},r),o.default.createElement(l.Input,i({disabled:n,placeholder:y,onBlur:m,onFocus:v,name:h,"aria-label":h,hasIconLeft:!!r,hasIconRight:!!u,hasIndicator:!!p,type:"text",value:x,size:z,ref:_,error:t,hasValue:!!x},V)),(!!u||!!p)&&o.default.createElement(s.default,{position:"absolute",right:1,top:0,bottom:0,alignItems:"center",gap:1},!!p&&o.default.createElement(a.TextMicro,{color:"textLite"},p),!!u&&u)),"string"===typeof w?o.default.createElement(a.TextMicro,{color:"textLite"},w):!!w&&w,C?null:o.default.createElement(d,{error:t}))}},11421:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),a=(o=n(15877))&&o.__esModule?o:{default:o},l=n(92019),c=n(42318),r=["initMax","initMin","max","min","onChange","onInput","step","TextComponent"];function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,r),b=(0,s.useState)(t||i),x=b[0],_=b[1],M=(0,s.useState)(n||h),z=M[0],B=M[1],H=(0,s.useState)(0),C=H[0],V=H[1],O=(0,s.useRef)(null),L=(0,s.useRef)(null);(0,s.useEffect)((function(){O.current&&V(O.current.getBoundingClientRect().width)}),[z]),(0,s.useEffect)((function(){_(t||i),B(n||h)}),[i,h]);return s.default.createElement(a.default,{column:!0,gap:1,flex:!0},s.default.createElement(a.default,{alignItems:"center","data-testid":"multiRangeInput",justifyContent:"center",position:"relative",width:"100%"},s.default.createElement(c.Range,d({"data-testid":"minRangeInput",max:i,min:h,onChange:function(e){v&&v({max:x,min:e.target.value})},onInput:function(e){var t=Math.min(+e.target.value,x-w);B(t),e.target.value=t.toString(),m&&m({max:x,min:e.target.value})},position:"relative",ref:L,step:w,value:z,zIndex:3},y)),s.default.createElement(c.Range,d({"data-testid":"maxRangeInput",max:i,min:h,onChange:function(e){v&&v({max:e.target.value,min:z})},onInput:function(e){var t=Math.max(+e.target.value,z+w);_(t),e.target.value=t.toString(),m&&m({max:e.target.value,min:z})},ref:O,step:w,value:x,zIndex:5},y)),s.default.createElement(c.Slider,{"data-testid":"multiRange-slider"},s.default.createElement(c.SliderTrack,{"data-testid":"multiRange-sliderTrack",max:i,maxValue:x,min:h,minValue:z,width:C}))),s.default.createElement(a.default,{"data-testid":"multiRange-values",justifyContent:"between"},s.default.createElement(g,{"data-testid":"multiRange-minValue"},z),s.default.createElement(g,{"data-testid":"multiRange-maxValue"},x)))}},42318:(e,t,n)=>{"use strict";t.__esModule=!0,t.SliderTrack=t.Slider=t.Range=void 0;var o=l(n(8711)),s=l(n(8043)),a=l(n(93980));function l(e){return e&&e.__esModule?e:{default:e}}t.Slider=(0,o.default)(s.default).withConfig({displayName:"styled__Slider",componentId:"sc-y2g216-0"})([""]),t.SliderTrack=(0,o.default)(s.default).withConfig({displayName:"styled__SliderTrack",componentId:"sc-y2g216-1"})(["background-position:",";background-color:","40;background-image:linear-gradient( ",","," );background-repeat:no-repeat;background-size:",";height:2px;width:",";"],(function(e){var t=e.max,n=e.min,o=e.minValue;return e.width*((o-n)/(t-n))*100/100+"px 100%"}),(function(e){return e.theme.colors.primary}),(function(e){return e.theme.colors.primary}),(function(e){return e.theme.colors.primary}),(function(e){var t=e.max,n=e.maxValue,o=e.min;return 100*(n-e.minValue)/(t-o)+"% 100%"}),(function(e){return e.width+"px"||0})),t.Range=(0,o.default)(a.default).withConfig({displayName:"styled__Range",componentId:"sc-y2g216-2"})(["pointer-events:none;position:absolute;height:0;outline:none;width:100%;&::-webkit-slider-thumb{pointer-events:all;}"])},93980:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var c=s?Object.getOwnPropertyDescriptor(e,a):null;c&&(c.get||c.set)?Object.defineProperty(o,a,c):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),s=n(43773),a=["max","min","step","value"];function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,a);return o.default.createElement(s.InputRange,c({"data-testid":"rangeInput",max:l,min:i,step:u,type:"range",value:v,ref:t},m))}));t.default=r},43773:(e,t,n)=>{"use strict";t.__esModule=!0,t.InputRange=void 0;var o,s=(o=n(8711))&&o.__esModule?o:{default:o},a=n(41234);t.InputRange=s.default.input.attrs({type:"range"}).withConfig({displayName:"styled__InputRange",componentId:"sc-17kts71-0"})(["-webkit-appearance:none;height:2px;background-color:","40;background-image:linear-gradient(",",",");background-repeat:no-repeat;background-size:",";cursor:pointer;width:100%;&::-webkit-slider-thumb{-webkit-appearance:none;height:10px;width:10px;border-radius:50%;background:",";transition:all 0.3s ease-in-out;&:active{height:16px;width:16px;}}"],(0,a.getColor)("primary"),(0,a.getColor)("primary"),(0,a.getColor)("primary"),(function(e){var t=e.max;return 100*e.value/t+"% 100%"}),(0,a.getColor)("primary"))},9963:(e,t,n)=>{"use strict";t.__esModule=!0,t.SuccessIcon=t.StyledLabel=t.StyledIcon=t.MetaInfo=t.MetaContainer=t.LabelText=t.Input=t.IconContainer=t.FieldInfo=t.ErrorIcon=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(8711)),a=n(34247),l=(o=n(15877))&&o.__esModule?o:{default:o},c=n(92019),r=n(34867);function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function u(e){for(var t=1;t{"use strict";t.__esModule=!0,t.useFocusedState=void 0;var o=n(96540);t.useFocusedState=function(e){var t=e.defaultState,n=void 0!==t&&t,s=e.onBlur,a=e.onFocus,l=(0,o.useState)(n),c=l[0],r=l[1],i=(0,o.useCallback)((function(e){c||r(!0),a&&a(e)}),[a,c]),d=(0,o.useCallback)((function(e){r(!1),s&&s(e)}),[s]);return[c,i,d]}},85956:(e,t,n)=>{"use strict";t.__esModule=!0,t.useInputValue=void 0;var o=n(96540);t.useInputValue=function(e){var t=e.value,n=void 0===t?"":t,s=e.onChange,a=e.maxChars,l=(0,o.useState)(n),c=l[0],r=l[1],i=(0,o.useState)(!1),d=i[0],u=i[1],h=(0,o.useCallback)((function(e){var t=e.target.value;if(a&&t.length>a)return e.preventDefault(),void e.stopPropagation();r(t),d||u(!0),s&&s(e)}),[d,a,s]),v=a?c.length+"/"+a:"",m=(0,o.useCallback)((function(e){void 0===e&&(e=""),r(e),u(!1)}),[]);return[c,h,v,d,{setIsDirty:u,setValue:r,resetValue:m}]}},58926:(e,t,n)=>{"use strict";t.__esModule=!0,t.useTouchedState=void 0;var o=n(96540);t.useTouchedState=function(e){var t=e.onBlur,n=e.defaultState,s=void 0!==n&&n,a=(0,o.useState)(s),l=a[0],c=a[1],r=(0,o.useCallback)((function(e){l||c(!0),t&&t(e)}),[t,l]);return[l,r,c]}},94474:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=d(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(96540)),a=(o=n(44048))&&o.__esModule?o:{default:o},l=n(34247),c=n(318),r=n(37466),i=["value","onChange","onReset","placeholder"];function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(d=function(e){return e?n:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(s[n]=e[n]);return s}(e,i),f=(0,s.useState)(o),w=f[0],p=f[1];return(0,a.default)((function(){return d(w)}),300,[w]),s.default.createElement(c.TextInput,u({iconLeft:s.default.createElement(l.Icon,{name:"search",color:w?"textFocus":"textLite",width:"14px",height:"14px"}),iconRight:(!!w||!!o)&&s.default.createElement(r.IconButton,{icon:"x",iconColor:w?"textFocus":"textLite",width:"14px",height:"14px",onClick:function(){return h?h():p("")},padding:[0],neutral:!0}),inputRef:t,value:w,onChange:function(e){return p(e.target.value)},placeholder:v,size:"small"},m))}));t.default=h},53162:(e,t,n)=>{"use strict";t.__esModule=!0,t.sx=t.default=void 0;var o=_(n(8711)),s=_(n(27988)),a=_(n(32305)),l=_(n(36094)),c=_(n(62703)),r=_(n(31886)),i=_(n(25320)),d=_(n(96029)),u=_(n(88725)),h=_(n(86397)),v=_(n(11564)),m=_(n(48488)),f=_(n(26278)),w=_(n(90836)),p=_(n(85103)),g=_(n(92108)),y=_(n(48299)),b=n(50677),x=_(n(50402));function _(e){return e&&e.__esModule?e:{default:e}}var M=t.sx=function(e){return(0,x.default)(e.sx)(e)};t.default=function(e){return(0,o.default)(e).withConfig({displayName:"box",componentId:"sc-12jmtj1-0"})(["box-sizing:border-box;"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",""],w.default,s.default,i.default,a.default,l.default,p.default,v.default,h.default,f.default,r.default,g.default,c.default,m.default,d.default,u.default,y.default,b.position,M)}},8043:(e,t,n)=>{"use strict";var o;t.__esModule=!0,t.default=void 0;var s=(0,((o=n(53162))&&o.__esModule?o:{default:o}).default)("div");t.default=s},89075:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.backdropBlur;return t?"boolean"===typeof t?"backdrop-filter: blur(10px);":"number"===typeof t?"backdrop-filter: blur("+t+"px);":"backdrop-filter: blur("+t+");":""}},92019:(e,t,n)=>{"use strict";t.__esModule=!0,t.TextSmall=t.TextNano=t.TextMicro=t.TextHuge=t.TextFemto=t.TextBigger=t.TextBig=t.Text=t.ListItem=t.List=t.H6=t.H5=t.H4=t.H3=t.H2=t.H1=t.H0=void 0;var o=n(36350);t.makeH0=o.makeH0,t.makeH1=o.makeH1,t.makeH2=o.makeH2,t.makeH3=o.makeH3,t.makeH4=o.makeH4,t.makeH5=o.makeH5,t.makeH6=o.makeH6,t.makeTypography=o.makeTypography,t.makeFemto=o.makeFemto,t.makeNano=o.makeNano,t.makeMicro=o.makeMicro,t.makeSmall=o.makeSmall,t.makeText=o.makeText,t.makeBig=o.makeBig,t.makeBigger=o.makeBigger,t.makeHuge=o.makeHuge;var s=n(37079);t.List=s.List,t.ListItem=s.ListItem;t.H0=(0,o.makeH0)("h1"),t.H1=(0,o.makeH1)("h1"),t.H2=(0,o.makeH2)("h2"),t.H3=(0,o.makeH3)("h3"),t.H4=(0,o.makeH4)("h4"),t.H5=(0,o.makeH5)("h5"),t.H6=(0,o.makeH6)("h6"),t.TextFemto=(0,o.makeFemto)("span"),t.TextNano=(0,o.makeNano)("span"),t.TextMicro=(0,o.makeMicro)("span"),t.TextSmall=(0,o.makeSmall)("span"),t.Text=(0,o.makeText)("span"),t.TextBig=(0,o.makeBig)("span"),t.TextBigger=(0,o.makeBigger)("span"),t.TextHuge=(0,o.makeHuge)("span")},37079:(e,t,n)=>{"use strict";t.__esModule=!0,t.ListItem=t.List=void 0;var o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=r(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&{}.hasOwnProperty.call(e,a)){var l=s?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(o,a,l):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o}(n(8711)),s=c(n(27988)),a=c(n(32305)),l=c(n(36094));function c(e){return e&&e.__esModule?e:{default:e}}function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(r=function(e){return e?n:t})(e)}var i=(0,o.css)([""," "," ",""],s.default,a.default,l.default);t.List=o.default.ul.withConfig({displayName:"list__List",componentId:"sc-ln4euz-0"})(["list-style-type:disc;list-style-position:outside;padding-left:28px;",""],i),t.ListItem=o.default.li.withConfig({displayName:"list__ListItem",componentId:"sc-ln4euz-1"})(["line-height:22px;padding-left:9px;",""],i)},43119:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=n(96540);t.default=function(e){return(0,o.useEffect)((function(){if(e){var t=function(t){27===t.keyCode&&e(t)};return document.addEventListener("keydown",t),function(){return document.removeEventListener("keydown",t)}}}),[e])}},35586:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o,s=n(96540),a=(o=n(2310))&&o.__esModule?o:{default:o};t.default=function(e,t,n,o){(0,s.useEffect)((function(){if(t&&!o){var s=function(o){o.target===e.current||(0,a.default)(e.current,o.target)||(0,a.default)(n,o.target)||t(o)};return document.addEventListener("mousedown",s),function(){return document.removeEventListener("mousedown",s)}}}),[t])}},23627:(e,t,n)=>{"use strict";t.__esModule=!0,t.default=void 0;var o=n(96540);t.default=function(e,t){var n=void 0===t?{}:t,s=n.on,a=n.off,l=n.toggle,c=(0,o.useState)(!!e),r=c[0],i=c[1];return[r,(0,o.useCallback)((function(e){return i((function(t){var n="boolean"===typeof e?e:!t;return l&&l(n),s&&n&&s(),a&&!n&&a(),n}))}),[l,s,a]),(0,o.useCallback)((function(){i(!0),s&&s()}),[s]),(0,o.useCallback)((function(){i(!1),a&&a()}),[a])]}},3639:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;var n=0;t.default=function(){return--n}},54481:(e,t)=>{"use strict";function n(e){return Array.isArray(e)}function o(e){var t=typeof e;return null!=e&&("object"===t||"function"===t)&&!n(e)}t.__esModule=!0,t.isArray=n,t.isEmptyObject=function(e){return o(e)&&0===Object.keys(e).length},t.isFunction=function(e){return"function"===typeof e},t.isObject=o},69114:(e,t)=>{"use strict";t.__esModule=!0,t.default=void 0;t.default=function(e,t){var n=t?e.toLowerCase():e;return n.charAt(0).toUpperCase()+n.slice(1)}},51462:(e,t,n)=>{"use strict";t.__esModule=!0;var o={mergeRefs:!0,capitalizeFirstLetter:!0};t.mergeRefs=t.capitalizeFirstLetter=void 0;var s=n(27184);t.mergeRefs=s.mergeRefs;var a=n(54481);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var l,c=(l=n(69114))&&l.__esModule?l:{default:l};t.capitalizeFirstLetter=c.default},27184:(e,t,n)=>{"use strict";t.__esModule=!0,t.assignRef=s,t.mergeRefs=function(){for(var e=arguments.length,t=new Array(e),n=0;n{"use strict";n.d(t,{Ay:()=>K});var o=n(47168),s=n.n(o),a=n(12020);const l=e=>e&&e.enabled&&e.modifierKey,c=(e,t)=>e&&t[e+"Key"],r=(e,t)=>e&&!t[e+"Key"];function i(e,t,n){return void 0===e||("string"===typeof e?-1!==e.indexOf(t):"function"===typeof e&&-1!==e({chart:n}).indexOf(t))}function d(e,t){return"function"===typeof e&&(e=e({chart:t})),"string"===typeof e?{x:-1!==e.indexOf("x"),y:-1!==e.indexOf("y")}:{x:!1,y:!1}}function u(e,t,n){const{mode:o="xy",scaleMode:s,overScaleMode:l}=e||{},c=function({x:e,y:t},n){const o=n.scales,s=Object.keys(o);for(let a=0;a=n.top&&t<=n.bottom&&e>=n.left&&e<=n.right)return n}return null}(t,n),r=d(o,n),i=d(s,n);if(l){const e=d(l,n);for(const t of["x","y"])e[t]&&(i[t]=r[t],r[t]=!1)}if(c&&i[c.axis])return[c];const u=[];return(0,a.F)(n.scales,(function(e){r[e.axis]&&u.push(e)})),u}const h=new WeakMap;function v(e){let t=h.get(e);return t||(t={originalScaleLimits:{},updatedScaleLimits:{},handlers:{},panDelta:{}},h.set(e,t)),t}function m(e,t,n){const o=e.max-e.min,s=o*(t-1),a=e.isHorizontal()?n.x:n.y,l=Math.max(0,Math.min(1,(e.getValueForPixel(a)-e.min)/o||0));return{min:s*l,max:s*(1-l)}}function f(e,t,n,o,s){let l=n[o];if("original"===l){const n=e.originalScaleLimits[t.id][o];l=(0,a.v)(n.options,n.scale)}return(0,a.v)(l,s)}function w(e,{min:t,max:n},o,s=!1){const a=v(e.chart),{id:l,axis:c,options:r}=e,i=o&&(o[l]||o[c])||{},{minRange:d=0}=i,u=f(a,e,i,"min",-1/0),h=f(a,e,i,"max",1/0),m=s?Math.max(n-t,d):e.max-e.min,w=(m-n+t)/2;return n+=w,(t-=w)h&&(n=h,t=Math.max(h-m,u)),r.min=t,r.max=n,a.updatedScaleLimits[e.id]={min:t,max:n},e.parse(t)!==e.min||e.parse(n)!==e.max}const p=e=>0===e||isNaN(e)?0:e<0?Math.min(Math.round(e),-1):Math.max(Math.round(e),1);const g={second:500,minute:3e4,hour:18e5,day:432e5,week:3024e5,month:1296e6,quarter:5184e6,year:157248e5};function y(e,t,n,o=!1){const{min:s,max:a,options:l}=e,c=l.time&&l.time.round,r=g[c]||0,i=e.getValueForPixel(e.getPixelForValue(s+r)-t),d=e.getValueForPixel(e.getPixelForValue(a+r)-t),{min:u=-1/0,max:h=1/0}=o&&n&&n[e.axis]||{};return!!(isNaN(i)||isNaN(d)||ih)||w(e,{min:i,max:d},n,o)}function b(e,t,n){return y(e,t,n,!0)}const x={category:function(e,t,n,o){const s=m(e,t,n);return e.min===e.max&&t<1&&function(e){const t=e.getLabels().length-1;e.min>0&&(e.min-=1),e.maxc&&(s=Math.max(0,s-r),a=1===l?s:s+l,i=0===s),w(e,{min:s,max:a},n)||i},default:y,logarithmic:b,timeseries:b};function z(e,t){(0,a.F)(e,((n,o)=>{t[o]||delete e[o]}))}function B(e,t){const{scales:n}=e,{originalScaleLimits:o,updatedScaleLimits:s}=t;return(0,a.F)(n,(function(e){(function(e,t,n){const{id:o,options:{min:s,max:a}}=e;if(!t[o]||!n[o])return!0;const l=n[o];return l.min!==s||l.max!==a})(e,o,s)&&(o[e.id]={min:{scale:e.min,options:e.options.min},max:{scale:e.max,options:e.options.max}})})),z(o,n),z(s,n),o}function H(e,t,n,o){const s=x[e.type]||x.default;(0,a.Q)(s,[e,t,n,o])}function C(e,t,n,o,s){const l=_[e.type]||_.default;(0,a.Q)(l,[e,t,n,o,s])}function V(e){const t=e.chartArea;return{x:(t.left+t.right)/2,y:(t.top+t.bottom)/2}}function O(e,t,n="none"){const{x:o=1,y:s=1,focalPoint:l=V(e)}="number"===typeof t?{x:t,y:t}:t,c=v(e),{options:{limits:r,zoom:i}}=c;B(e,c);const d=1!==o,h=1!==s,m=u(i,l,e);(0,a.F)(m||e.scales,(function(e){e.isHorizontal()&&d?H(e,o,l,r):!e.isHorizontal()&&h&&H(e,s,l,r)})),e.update(n),(0,a.Q)(i.onZoom,[{chart:e}])}function L(e,t,n,o="none"){const s=v(e),{options:{limits:l,zoom:c}}=s,{mode:r="xy"}=c;B(e,s);const d=i(r,"x",e),u=i(r,"y",e);(0,a.F)(e.scales,(function(e){e.isHorizontal()&&d?C(e,t.x,n.x,l):!e.isHorizontal()&&u&&C(e,t.y,n.y,l)})),e.update(o),(0,a.Q)(c.onZoom,[{chart:e}])}function k(e){const t=v(e);let n=1,o=1;return(0,a.F)(e.scales,(function(e){const s=function(e,t){const n=e.originalScaleLimits[t];if(!n)return;const{min:o,max:s}=n;return(0,a.v)(s.options,s.scale)-(0,a.v)(o.options,o.scale)}(t,e.id);if(s){const t=Math.round(s/(e.max-e.min)*100)/100;n=Math.min(n,t),o=Math.max(o,t)}})),n<1?n:o}function S(e,t,n,o){const{panDelta:s}=o,l=s[e.id]||0;(0,a.s)(l)===(0,a.s)(t)&&(t+=l);const c=M[e.type]||M.default;(0,a.Q)(c,[e,t,n])?s[e.id]=0:s[e.id]=t}function A(e,t,n,o="none"){const{x:s=0,y:l=0}="number"===typeof t?{x:t,y:t}:t,c=v(e),{options:{pan:r,limits:i}}=c,{onPan:d}=r||{};B(e,c);const u=0!==s,h=0!==l;(0,a.F)(n||e.scales,(function(e){e.isHorizontal()&&u?S(e,s,i,c):!e.isHorizontal()&&h&&S(e,l,i,c)})),e.update(o),(0,a.Q)(d,[{chart:e}])}function E(e){const t=v(e);B(e,t);const n={};for(const o of Object.keys(e.scales)){const{min:e,max:s}=t.originalScaleLimits[o]||{min:{},max:{}};n[o]={min:e.scale,max:s.scale}}return n}function P(e,t){const{handlers:n}=v(e),o=n[t];o&&o.target&&(o.target.removeEventListener(t,o),delete n[t])}function T(e,t,n,o){const{handlers:s,options:a}=v(e),l=s[n];l&&l.target===t||(P(e,n),s[n]=t=>o(e,t,a),s[n].target=t,t.addEventListener(n,s[n]))}function j(e,t){const n=v(e);n.dragStart&&(n.dragging=!0,n.dragEnd=t,e.update("none"))}function q(e,t){const n=v(e);n.dragStart&&"Escape"===t.key&&(P(e,"keydown"),n.dragging=!1,n.dragStart=n.dragEnd=null,e.update("none"))}function D(e,t,n){const{onZoomStart:o,onZoomRejected:s}=n;if(o){const n=(0,a.z)(t,e);if(!1===(0,a.Q)(o,[{chart:e,event:t,point:n}]))return(0,a.Q)(s,[{chart:e,event:t}]),!1}}function I(e,t){const n=v(e),{pan:o,zoom:s={}}=n.options;if(0!==t.button||c(l(o),t)||r(l(s.drag),t))return(0,a.Q)(s.onZoomRejected,[{chart:e,event:t}]);!1!==D(e,t,s)&&(n.dragStart=t,T(e,e.canvas,"mousemove",j),T(e,window.document,"keydown",q))}function F(e,t,n,o){const s=i(t,"x",e),l=i(t,"y",e);let{top:c,left:r,right:d,bottom:u,width:h,height:v}=e.chartArea;const m=(0,a.z)(n,e),f=(0,a.z)(o,e);s&&(r=Math.min(m.x,f.x),d=Math.max(m.x,f.x)),l&&(c=Math.min(m.y,f.y),u=Math.max(m.y,f.y));const w=d-r,p=u-c;return{left:r,top:c,right:d,bottom:u,width:w,height:p,zoomX:s&&w?1+(h-w)/h:1,zoomY:l&&p?1+(v-p)/v:1}}function N(e,t){const n=v(e);if(!n.dragStart)return;P(e,"mousemove");const{mode:o,onZoomComplete:s,drag:{threshold:l=0}}=n.options.zoom,c=F(e,o,n.dragStart,t),r=i(o,"x",e)?c.width:0,d=i(o,"y",e)?c.height:0,u=Math.sqrt(r*r+d*d);if(n.dragStart=n.dragEnd=null,u<=l)return n.dragging=!1,void e.update("none");L(e,{x:c.left,y:c.top},{x:c.right,y:c.bottom},"zoom"),setTimeout((()=>n.dragging=!1),500),(0,a.Q)(s,[{chart:e}])}function R(e,t){const{handlers:{onZoomComplete:n},options:{zoom:o}}=v(e);if(!function(e,t,n){if(r(l(n.wheel),t))(0,a.Q)(n.onZoomRejected,[{chart:e,event:t}]);else if(!1!==D(e,t,n)&&(t.cancelable&&t.preventDefault(),void 0!==t.deltaY))return!0}(e,t,o))return;const s=t.target.getBoundingClientRect(),c=1+(t.deltaY>=0?-o.wheel.speed:o.wheel.speed);O(e,{x:c,y:c,focalPoint:{x:t.clientX-s.left,y:t.clientY-s.top}}),n&&n()}function W(e,t,n,o){n&&(v(e).handlers[t]=function(e,t){let n;return function(){return clearTimeout(n),n=setTimeout(e,t),t}}((()=>(0,a.Q)(n,[{chart:e}])),o))}function U(e,t){return function(n,o){const{pan:s,zoom:i={}}=t.options;if(!s||!s.enabled)return!1;const d=o&&o.srcEvent;return!d||(!(!t.panning&&"mouse"===o.pointerType&&(r(l(s),d)||c(l(i.drag),d)))||((0,a.Q)(s.onPanRejected,[{chart:e,event:o}]),!1))}}function Y(e,t,n){if(t.scale){const{center:o,pointers:s}=n,a=1/t.scale*n.scale,l=n.target.getBoundingClientRect(),c=function(e,t){const n=Math.abs(e.clientX-t.clientX),o=Math.abs(e.clientY-t.clientY),s=n/o;let a,l;return s>.3&&s<1.7?a=l=!0:n>o?a=!0:l=!0,{x:a,y:l}}(s[0],s[1]),r=t.options.zoom.mode;O(e,{x:c.x&&i(r,"x",e)?a:1,y:c.y&&i(r,"y",e)?a:1,focalPoint:{x:o.x-l.left,y:o.y-l.top}}),t.scale=n.scale}}function Q(e,t,n){const o=t.delta;o&&(t.panning=!0,A(e,{x:n.deltaX-o.x,y:n.deltaY-o.y},t.panScales),t.delta={x:n.deltaX,y:n.deltaY})}const X=new WeakMap;function Z(e,t){const n=v(e),o=e.canvas,{pan:l,zoom:c}=t,r=new(s().Manager)(o);c&&c.pinch.enabled&&(r.add(new(s().Pinch)),r.on("pinchstart",(()=>function(e,t){t.options.zoom.pinch.enabled&&(t.scale=1)}(0,n))),r.on("pinch",(t=>Y(e,n,t))),r.on("pinchend",(t=>function(e,t,n){t.scale&&(Y(e,t,n),t.scale=null,(0,a.Q)(t.options.zoom.onZoomComplete,[{chart:e}]))}(e,n,t)))),l&&l.enabled&&(r.add(new(s().Pan)({threshold:l.threshold,enable:U(e,n)})),r.on("panstart",(t=>function(e,t,n){const{enabled:o,onPanStart:s,onPanRejected:l}=t.options.pan;if(!o)return;const c=n.target.getBoundingClientRect(),r={x:n.center.x-c.left,y:n.center.y-c.top};if(!1===(0,a.Q)(s,[{chart:e,event:n,point:r}]))return(0,a.Q)(l,[{chart:e,event:n}]);t.panScales=u(t.options.pan,r,e),t.delta={x:0,y:0},clearTimeout(t.panEndTimeout),Q(e,t,n)}(e,n,t))),r.on("panmove",(t=>Q(e,n,t))),r.on("panend",(()=>function(e,t){t.delta=null,t.panning&&(t.panEndTimeout=setTimeout((()=>t.panning=!1),500),(0,a.Q)(t.options.pan.onPanComplete,[{chart:e}]))}(e,n)))),X.set(e,r)}function G(e,t,n){const o=n.zoom.drag,{dragStart:s,dragEnd:a}=v(e);if(o.drawTime!==t||!a)return;const{left:l,top:c,width:r,height:i}=F(e,n.zoom.mode,s,a),d=e.ctx;d.save(),d.beginPath(),d.fillStyle=o.backgroundColor||"rgba(225,225,225,0.3)",d.fillRect(l,c,r,i),o.borderWidth>0&&(d.lineWidth=o.borderWidth,d.strokeStyle=o.borderColor||"rgba(225,225,225)",d.strokeRect(l,c,r,i)),d.restore()}var K={id:"zoom",version:"2.0.1",defaults:{pan:{enabled:!1,mode:"xy",threshold:10,modifierKey:null},zoom:{wheel:{enabled:!1,speed:.1,modifierKey:null},drag:{enabled:!1,drawTime:"beforeDatasetsDraw",modifierKey:null},pinch:{enabled:!1},mode:"xy"}},start:function(e,t,n){v(e).options=n,Object.prototype.hasOwnProperty.call(n.zoom,"enabled")&&console.warn("The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`."),(Object.prototype.hasOwnProperty.call(n.zoom,"overScaleMode")||Object.prototype.hasOwnProperty.call(n.pan,"overScaleMode"))&&console.warn("The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired)."),s()&&Z(e,n),e.pan=(t,n,o)=>A(e,t,n,o),e.zoom=(t,n)=>O(e,t,n),e.zoomRect=(t,n,o)=>L(e,t,n,o),e.zoomScale=(t,n,o)=>function(e,t,n,o="none"){B(e,v(e)),w(e.scales[t],n,void 0,!0),e.update(o)}(e,t,n,o),e.resetZoom=t=>function(e,t="default"){const n=v(e),o=B(e,n);(0,a.F)(e.scales,(function(e){const t=e.options;o[e.id]?(t.min=o[e.id].min.options,t.max=o[e.id].max.options):(delete t.min,delete t.max)})),e.update(t),(0,a.Q)(n.options.zoom.onZoomComplete,[{chart:e}])}(e,t),e.getZoomLevel=()=>k(e),e.getInitialScaleBounds=()=>E(e),e.isZoomedOrPanned=()=>function(e){const t=E(e);for(const n of Object.keys(e.scales)){const{min:o,max:s}=t[n];if(void 0!==o&&e.scales[n].min!==o)return!0;if(void 0!==s&&e.scales[n].max!==s)return!0}return!1}(e)},beforeEvent(e){const t=v(e);if(t.panning||t.dragging)return!1},beforeUpdate:function(e,t,n){v(e).options=n,function(e,t){const n=e.canvas,{wheel:o,drag:s,onZoomComplete:a}=t.zoom;o.enabled?(T(e,n,"wheel",R),W(e,"onZoomComplete",a,250)):P(e,"wheel"),s.enabled?(T(e,n,"mousedown",I),T(e,n.ownerDocument,"mouseup",N)):(P(e,"mousedown"),P(e,"mousemove"),P(e,"mouseup"),P(e,"keydown"))}(e,n)},beforeDatasetsDraw(e,t,n){G(e,"beforeDatasetsDraw",n)},afterDatasetsDraw(e,t,n){G(e,"afterDatasetsDraw",n)},beforeDraw(e,t,n){G(e,"beforeDraw",n)},afterDraw(e,t,n){G(e,"afterDraw",n)},stop:function(e){!function(e){P(e,"mousedown"),P(e,"mousemove"),P(e,"mouseup"),P(e,"wheel"),P(e,"click"),P(e,"keydown")}(e),s()&&function(e){const t=X.get(e);t&&(t.remove("pinchstart"),t.remove("pinch"),t.remove("pinchend"),t.remove("panstart"),t.remove("pan"),t.remove("panend"),t.destroy(),X.delete(e))}(e),function(e){h.delete(e)}(e)},panFunctions:M,zoomFunctions:x,zoomRectFunctions:_}},47168:(e,t,n)=>{var o;!function(s,a,l,c){"use strict";var r,i=["","webkit","Moz","MS","ms","o"],d=a.createElement("div"),u="function",h=Math.round,v=Math.abs,m=Date.now;function f(e,t,n){return setTimeout(_(e,n),t)}function w(e,t,n){return!!Array.isArray(e)&&(p(e,n[t],n),!0)}function p(e,t,n){var o;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==c)for(o=0;o\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",a=s.console&&(s.console.warn||s.console.log);return a&&a.call(s.console,o,n),e.apply(this,arguments)}}r="function"!==typeof Object.assign?function(e){if(e===c||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n-1}function O(e){return e.trim().split(/\s+/g)}function L(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var o=0;on[t]})):o.sort()),o}function A(e,t){for(var n,o,s=t[0].toUpperCase()+t.slice(1),a=0;a1&&!n.firstMultiple?n.firstMultiple=oe(t):1===s&&(n.firstMultiple=!1);var a=n.firstInput,l=n.firstMultiple,r=l?l.center:a.center,i=t.center=se(o);t.timeStamp=m(),t.deltaTime=t.timeStamp-a.timeStamp,t.angle=re(r,i),t.distance=ce(r,i),function(e,t){var n=t.center,o=e.offsetDelta||{},s=e.prevDelta||{},a=e.prevInput||{};t.eventType!==N&&a.eventType!==R||(s=e.prevDelta={x:a.deltaX||0,y:a.deltaY||0},o=e.offsetDelta={x:n.x,y:n.y});t.deltaX=s.x+(n.x-o.x),t.deltaY=s.y+(n.y-o.y)}(n,t),t.offsetDirection=le(t.deltaX,t.deltaY);var d=ae(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=d.x,t.overallVelocityY=d.y,t.overallVelocity=v(d.x)>v(d.y)?d.x:d.y,t.scale=l?(u=l.pointers,h=o,ce(h[0],h[1],ee)/ce(u[0],u[1],ee)):1,t.rotation=l?function(e,t){return re(t[1],t[0],ee)+re(e[1],e[0],ee)}(l.pointers,o):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,function(e,t){var n,o,s,a,l=e.lastInterval||t,r=t.timeStamp-l.timeStamp;if(t.eventType!=W&&(r>F||l.velocity===c)){var i=t.deltaX-l.deltaX,d=t.deltaY-l.deltaY,u=ae(r,i,d);o=u.x,s=u.y,n=v(u.x)>v(u.y)?u.x:u.y,a=le(i,d),e.lastInterval=t}else n=l.velocity,o=l.velocityX,s=l.velocityY,a=l.direction;t.velocity=n,t.velocityX=o,t.velocityY=s,t.direction=a}(n,t);var u,h;var f=e.element;C(t.srcEvent.target,f)&&(f=t.srcEvent.target);t.target=f}(e,n),e.emit("hammer.input",n),e.recognize(n),e.session.prevInput=n}function oe(e){for(var t=[],n=0;n=v(t)?e<0?Y:Q:t<0?X:Z}function ce(e,t,n){n||(n=J);var o=t[n[0]]-e[n[0]],s=t[n[1]]-e[n[1]];return Math.sqrt(o*o+s*s)}function re(e,t,n){n||(n=J);var o=t[n[0]]-e[n[0]],s=t[n[1]]-e[n[1]];return 180*Math.atan2(s,o)/Math.PI}te.prototype={handler:function(){},init:function(){this.evEl&&B(this.element,this.evEl,this.domHandler),this.evTarget&&B(this.target,this.evTarget,this.domHandler),this.evWin&&B(P(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&H(this.element,this.evEl,this.domHandler),this.evTarget&&H(this.target,this.evTarget,this.domHandler),this.evWin&&H(P(this.element),this.evWin,this.domHandler)}};var ie={mousedown:N,mousemove:2,mouseup:R},de="mousedown",ue="mousemove mouseup";function he(){this.evEl=de,this.evWin=ue,this.pressed=!1,te.apply(this,arguments)}x(he,te,{handler:function(e){var t=ie[e.type];t&N&&0===e.button&&(this.pressed=!0),2&t&&1!==e.which&&(t=R),this.pressed&&(t&R&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:I,srcEvent:e}))}});var ve={pointerdown:N,pointermove:2,pointerup:R,pointercancel:W,pointerout:W},me={2:D,3:"pen",4:I,5:"kinect"},fe="pointerdown",we="pointermove pointerup pointercancel";function pe(){this.evEl=fe,this.evWin=we,te.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}s.MSPointerEvent&&!s.PointerEvent&&(fe="MSPointerDown",we="MSPointerMove MSPointerUp MSPointerCancel"),x(pe,te,{handler:function(e){var t=this.store,n=!1,o=e.type.toLowerCase().replace("ms",""),s=ve[o],a=me[e.pointerType]||e.pointerType,l=a==D,c=L(t,e.pointerId,"pointerId");s&N&&(0===e.button||l)?c<0&&(t.push(e),c=t.length-1):s&(R|W)&&(n=!0),c<0||(t[c]=e,this.callback(this.manager,s,{pointers:t,changedPointers:[e],pointerType:a,srcEvent:e}),n&&t.splice(c,1))}});var ge={touchstart:N,touchmove:2,touchend:R,touchcancel:W};function ye(){this.evTarget="touchstart",this.evWin="touchstart touchmove touchend touchcancel",this.started=!1,te.apply(this,arguments)}function be(e,t){var n=k(e.touches),o=k(e.changedTouches);return t&(R|W)&&(n=S(n.concat(o),"identifier",!0)),[n,o]}x(ye,te,{handler:function(e){var t=ge[e.type];if(t===N&&(this.started=!0),this.started){var n=be.call(this,e,t);t&(R|W)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:D,srcEvent:e})}}});var xe={touchstart:N,touchmove:2,touchend:R,touchcancel:W},_e="touchstart touchmove touchend touchcancel";function Me(){this.evTarget=_e,this.targetIds={},te.apply(this,arguments)}function ze(e,t){var n=k(e.touches),o=this.targetIds;if(t&(2|N)&&1===n.length)return o[n[0].identifier]=!0,[n,n];var s,a,l=k(e.changedTouches),c=[],r=this.target;if(a=n.filter((function(e){return C(e.target,r)})),t===N)for(s=0;s-1&&o.splice(e,1)}),Be)}}function Oe(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function o(n){t.manager.emit(n,e)}n<8&&o(t.options.event+Re(n)),o(t.options.event),e.additionalEvent&&o(e.additionalEvent),n>=8&&o(t.options.event+Re(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=Fe},canEmit:function(){for(var e=0;et.threshold&&s&t.direction},attrTest:function(e){return Ye.prototype.attrTest.call(this,e)&&(2&this.state||!(2&this.state)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=We(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),x(Xe,Ye,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Pe]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},emit:function(e){if(1!==e.scale){var t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}}),x(Ze,Ne,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[Ae]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,o=e.distancet.time;if(this._input=e,!o||!n||e.eventType&(R|W)&&!s)this.reset();else if(e.eventType&N)this.reset(),this._timer=f((function(){this.state=8,this.tryEmit()}),t.time,this);else if(e.eventType&R)return 8;return Fe},reset:function(){clearTimeout(this._timer)},emit:function(e){8===this.state&&(e&&e.eventType&R?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=m(),this.manager.emit(this.options.event,this._input)))}}),x(Ge,Ye,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Pe]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)}}),x(Ke,Ye,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:G|K,pointers:1},getTouchAction:function(){return Qe.prototype.getTouchAction.call(this)},attrTest:function(e){var t,n=this.options.direction;return n&(G|K)?t=e.overallVelocity:n&G?t=e.overallVelocityX:n&K&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&v(t)>this.options.velocity&&e.eventType&R},emit:function(e){var t=We(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),x($e,Ne,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Ee]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,o=e.distance{var o=n(38859),s=n(15325),a=n(29905),l=n(34932),c=n(27301),r=n(19219),i=Math.min;e.exports=function(e,t,n){for(var d=n?a:s,u=e[0].length,h=e.length,v=h,m=Array(h),f=1/0,w=[];v--;){var p=e[v];v&&t&&(p=l(p,c(t))),f=i(p.length,f),m[v]=!n&&(t||u>=120&&p.length>=120)?new o(v&&p):void 0}p=e[0];var g=-1,y=m[0];e:for(;++g{var o=n(83693);e.exports=function(e){return o(e)?e:[]}},5287:(e,t,n)=>{var o=n(34932),s=n(27185),a=n(69302),l=n(3122),c=a((function(e){var t=o(e,l);return t.length&&t[0]===e[0]?s(t):[]}));e.exports=c},47060:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"add_node",use:"add_node-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},18217:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"add_user",use:"add_user-usage",viewBox:"0 0 15 16",content:''});l().add(c);const r=c},34975:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aggregation_avg",use:"aggregation_avg-usage",viewBox:"0 0 16 12",content:''});l().add(c);const r=c},52441:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aggregation_max",use:"aggregation_max-usage",viewBox:"0 0 15 16",content:''});l().add(c);const r=c},72041:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aggregation_med",use:"aggregation_med-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},60863:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aggregation_min",use:"aggregation_min-usage",viewBox:"0 0 15 16",content:''});l().add(c);const r=c},30882:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aggregation_sum",use:"aggregation_sum-usage",viewBox:"0 0 12 14",content:''});l().add(c);const r=c},17423:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aggregation_sum_abs",use:"aggregation_sum_abs-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},38475:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarm",use:"alarm-usage",viewBox:"0 0 18 21",content:''});l().add(c);const r=c},26391:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarmFilled",use:"alarmFilled-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},71049:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarm_c",use:"alarm_c-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},29044:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarm_cw",use:"alarm_cw-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},20949:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarm_off",use:"alarm_off-usage",viewBox:"0 0 15 16",content:''});l().add(c);const r=c},58709:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarm_w",use:"alarm_w-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},34390:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alarms_new",use:"alarms_new-usage",viewBox:"0 0 22 20",content:''});l().add(c);const r=c},24810:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"anomalies_brain",use:"anomalies_brain-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},97322:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"anomalies_lens",use:"anomalies_lens-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},51317:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"applications_hollow",use:"applications_hollow-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},79529:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"applications_solid",use:"applications_solid-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},86480:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"around_clock",use:"around_clock-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},52390:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrow-s_down",use:"arrow-s_down-usage",viewBox:"0 0 8 9",content:''});l().add(c);const r=c},70157:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrow-s_left",use:"arrow-s_left-usage",viewBox:"0 0 8 9",content:''});l().add(c);const r=c},98666:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrow_down",use:"arrow_down-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},78286:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrow_left",use:"arrow_left-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},81886:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrow_w_line_left",use:"arrow_w_line_left-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},38813:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrow_w_line_right",use:"arrow_w_line_right-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},87723:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arrows_vertical",use:"arrows_vertical-usage",viewBox:"0 0 6 10",content:''});l().add(c);const r=c},59460:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"bookmark",use:"bookmark-usage",viewBox:"0 0 12 14",content:''});l().add(c);const r=c},25817:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"bullet_one",use:"bullet_one-usage",viewBox:"0 0 10 10",content:''});l().add(c);const r=c},78957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"bullet_three",use:"bullet_three-usage",viewBox:"0 0 10 10",content:''});l().add(c);const r=c},48783:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"bullet_two",use:"bullet_two-usage",viewBox:"0 0 10 10",content:''});l().add(c);const r=c},36878:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"calendar_full",use:"calendar_full-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},62682:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"calendar_full_press",use:"calendar_full_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},45715:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chart_added",use:"chart_added-usage",viewBox:"0 0 17 17",content:''});l().add(c);const r=c},14767:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"charts",use:"charts-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},68973:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"charts_view",use:"charts_view-usage",viewBox:"0 0 16 15",content:''});l().add(c);const r=c},91956:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"check",use:"check-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},3559:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"checkmark",use:"checkmark-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},87875:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"checkmark_partial_s",use:"checkmark_partial_s-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},79919:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_double",use:"chevron_double-usage",viewBox:"0 0 6 10",content:''});l().add(c);const r=c},66643:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_left",use:"chevron_left-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},8827:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_left_small",use:"chevron_left_small-usage",viewBox:"0 0 5 6",content:''});l().add(c);const r=c},39078:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_left_start",use:"chevron_left_start-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},49686:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_right",use:"chevron_right-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},49764:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_right_s",use:"chevron_right_s-usage",viewBox:"0 0 5 6",content:''});l().add(c);const r=c},89482:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"chevron_right_small",use:"chevron_right_small-usage",viewBox:"0 0 5 6",content:''});l().add(c);const r=c},93855:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"class_error",use:"class_error-usage",viewBox:"0 0 21 22",content:''});l().add(c);const r=c},53079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"class_latency",use:"class_latency-usage",viewBox:"0 0 21 20",content:''});l().add(c);const r=c},65377:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"class_utilization",use:"class_utilization-usage",viewBox:"0 0 25 19",content:''});l().add(c);const r=c},77568:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"class_workload",use:"class_workload-usage",viewBox:"0 0 22 21",content:''});l().add(c);const r=c},34623:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"clock_5_min",use:"clock_5_min-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},63319:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"clock_5_min_press",use:"clock_5_min_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},51580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"clock_hollow",use:"clock_hollow-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},85419:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"close_circle",use:"close_circle-usage",viewBox:"0 0 10 10",content:''});l().add(c);const r=c},81426:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"cluster",use:"cluster-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},68124:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"cluster_spaces",use:"cluster_spaces-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},86547:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"code",use:"code-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},42202:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"collect",use:"collect-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},48083:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"community",use:"community-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},58746:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"connection_to_cloud",use:"connection_to_cloud-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},4643:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"connectivity_status_live",use:"connectivity_status_live-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},21774:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"connectivity_status_offline",use:"connectivity_status_offline-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},43380:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"connectivity_status_stale",use:"connectivity_status_stale-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},26181:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"controller_kind",use:"controller_kind-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},6494:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"controller_name",use:"controller_name-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},66427:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"copy",use:"copy-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},16888:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"correlation",use:"correlation-usage",viewBox:"0 0 28 28",content:''});l().add(c);const r=c},74552:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"correlation_inv",use:"correlation_inv-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},66194:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"cpu",use:"cpu-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},14946:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"cross_s",use:"cross_s-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},68864:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dashboard",use:"dashboard-usage",viewBox:"0 0 22 18",content:''});l().add(c);const r=c},84652:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dashboard_add",use:"dashboard_add-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},8035:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dashboards",use:"dashboards-usage",viewBox:"0 0 16 10",content:''});l().add(c);const r=c},85095:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"data_retention",use:"data_retention-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},47307:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"database",use:"database-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},20599:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"discovered_config",use:"discovered_config-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},98411:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"disk",use:"disk-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},79570:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"documentation",use:"documentation-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},79684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dots_2x3",use:"dots_2x3-usage",viewBox:"0 0 6 10",content:''});l().add(c);const r=c},4228:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"download",use:"download-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},39088:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dynamic_config",use:"dynamic_config-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},99464:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"edit",use:"edit-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},37414:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"error",use:"error-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},91423:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"exclamation",use:"exclamation-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},89875:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"favorites",use:"favorites-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},47720:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"feed",use:"feed-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},72570:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"filter",use:"filter-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},60774:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"filterList",use:"filterList-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},9232:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"firewall_solid",use:"firewall_solid-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},3886:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"force_play",use:"force_play-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},24241:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"force_play_outline",use:"force_play_outline-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},22370:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"full_screen",use:"full_screen-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},41519:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"functions",use:"functions-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},58609:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"github",use:"github-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},10237:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"go_to_node",use:"go_to_node-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},78057:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"google",use:"google-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},7351:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"group_by",use:"group_by-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},24229:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"h1",use:"h1-usage",viewBox:"0 0 14 12",content:''});l().add(c);const r=c},25094:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"h2",use:"h2-usage",viewBox:"0 0 14 12",content:''});l().add(c);const r=c},89513:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"hamburger",use:"hamburger-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},41517:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"help",use:"help-usage",viewBox:"0 0 20 21",content:''});l().add(c);const r=c},27612:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"hide",use:"hide-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},5048:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"highlight_area",use:"highlight_area-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},11862:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"holder",use:"holder-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},949:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"importExport",use:"importExport-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},61898:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"incident_manager",use:"incident_manager-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},92949:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"information_press",use:"information_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},78131:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"insights",use:"insights-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},64197:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"integrations",use:"integrations-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},11336:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aws_sns",use:"aws_sns-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},27555:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"aws_sns_colored",use:"aws_sns_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},9080:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"discord",use:"discord-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},56851:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"discord_colored",use:"discord_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},49232:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"email",use:"email-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},32824:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"email_colored",use:"email_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},86294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mattermost",use:"mattermost-usage",viewBox:"0 0 700 700",content:''});l().add(c);const r=c},92605:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mattermost_colored",use:"mattermost_colored-usage",viewBox:"0 0 700 700",content:''});l().add(c);const r=c},35813:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mobile_app_colored",use:"mobile_app_colored-usage",viewBox:"0 0 25 24",content:''});l().add(c);const r=c},16912:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"opsgenie",use:"opsgenie-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},76107:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"opsgenie_colored",use:"opsgenie_colored-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},88909:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pagerduty",use:"pagerduty-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},45266:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pagerduty_colored",use:"pagerduty_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},47217:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"push_notifications",use:"push_notifications-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},70762:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"rocketChat",use:"rocketChat-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},68081:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"rocketChat_colored",use:"rocketChat_colored-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},90728:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"slack",use:"slack-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},52547:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"slack_colored",use:"slack_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},50199:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"splunk-black",use:"splunk-black-usage",viewBox:"0 0 122 36",content:'An information technology company based in California, United States'});l().add(c);const r=c},20002:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"teams",use:"teams-usage",viewBox:"0 0 2228.833 2073.333",content:''});l().add(c);const r=c},67977:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"teams_colored",use:"teams_colored-usage",viewBox:"0 0 2228.833 2073.333",content:''});l().add(c);const r=c},70009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"telegram",use:"telegram-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},65550:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"telegram_colored",use:"telegram_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},70647:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"victorOps",use:"victorOps-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},83424:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"victorOps_colored",use:"victorOps_colored-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},40483:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"webhook",use:"webhook-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},47676:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"webhook_colored",use:"webhook_colored-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},6232:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"internal_config",use:"internal_config-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},21489:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ipNetworking",use:"ipNetworking-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},82118:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ipNetworkingPress",use:"ipNetworkingPress-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},64739:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"last_week",use:"last_week-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},27703:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"line_chart",use:"line_chart-usage",viewBox:"0 0 15 15",content:''});l().add(c);const r=c},76415:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"logo_s",use:"logo_s-usage",viewBox:"0 0 14 13",content:''});l().add(c);const r=c},16933:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"logs",use:"logs-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},5820:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"long_arrow_up",use:"long_arrow_up-usage",viewBox:"0 0 10 14",content:''});l().add(c);const r=c},72085:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"magnify",use:"magnify-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},40235:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"metrics",use:"metrics-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},81199:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"metrics_explorer",use:"metrics_explorer-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},95546:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"minimize_s",use:"minimize_s-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},40852:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mobile_push_notifications",use:"mobile_push_notifications-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},43902:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mobile_push_notifications_hollow",use:"mobile_push_notifications_hollow-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},21674:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"monitoring",use:"monitoring-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},1279:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"more",use:"more-usage",viewBox:"0 0 18 4",content:''});l().add(c);const r=c},5057:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nav_arrow_goto",use:"nav_arrow_goto-usage",viewBox:"0 0 10 10",content:''});l().add(c);const r=c},1498:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nav_dots",use:"nav_dots-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},34111:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"netdata-press",use:"netdata-press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},96317:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"netdata",use:"netdata-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},51991:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"netdataAssistant",use:"netdataAssistant-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},85903:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"networking_stack",use:"networking_stack-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},4344:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node",use:"node-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},18647:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_child",use:"node_child-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},30983:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_default_l",use:"node_default_l-usage",viewBox:"0 0 40 40",content:''});l().add(c);const r=c},16410:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_hollow",use:"node_hollow-usage",viewBox:"0 0 22 12",content:''});l().add(c);const r=c},57013:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_import_export",use:"node_import_export-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},34031:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_notification_l",use:"node_notification_l-usage",viewBox:"0 0 40 40",content:''});l().add(c);const r=c},55703:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_parent",use:"node_parent-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},12501:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"node_selected_l",use:"node_selected_l-usage",viewBox:"0 0 40 40",content:''});l().add(c);const r=c},43947:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nodes",use:"nodes-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},52059:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nodes_hollow",use:"nodes_hollow-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},68705:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nodes_update",use:"nodes_update-usage",viewBox:"0 0 40 40",content:''});l().add(c);const r=c},9150:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"none_selected",use:"none_selected-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},29921:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"notification",use:"notification-usage",viewBox:"0 0 40 24",content:''});l().add(c);const r=c},45753:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"notification_shortcut_disabled",use:"notification_shortcut_disabled-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},74480:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"notification_shortcut_enabled",use:"notification_shortcut_enabled-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},89336:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"notification_trigger",use:"notification_trigger-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},59631:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"okta",use:"okta-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},47627:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"openid",use:"openid-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},3599:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"alpine_linux",use:"alpine_linux-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},61386:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"amazon_linux",use:"amazon_linux-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},17506:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"arch_linux",use:"arch_linux-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},91008:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"celarOS",use:"celarOS-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},95173:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"centos",use:"centos-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},39850:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"centos_colored",use:"centos_colored-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},79662:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"coreOS",use:"coreOS-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},34106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"debian",use:"debian-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},7297:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"debian_colored",use:"debian_colored-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},80370:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"fedora",use:"fedora-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},38194:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"freeBSD",use:"freeBSD-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},54349:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"gentoo",use:"gentoo-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},75873:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"linux",use:"linux-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},39862:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"linux_colored",use:"linux_colored-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},29474:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"linux_manjaro",use:"linux_manjaro-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},53328:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"macOSX",use:"macOSX-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},94403:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"oracle",use:"oracle-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},60188:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"oracle_colored",use:"oracle_colored-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},22463:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"os",use:"os-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},64612:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"os_press",use:"os_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},56025:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"raspbian",use:"raspbian-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},94064:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"red_hat",use:"red_hat-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},24934:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"suse_linux",use:"suse_linux-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},61248:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ubuntu",use:"ubuntu-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},48635:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ubuntu_colored",use:"ubuntu_colored-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},52874:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"padlock",use:"padlock-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},38141:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pause_outline",use:"pause_outline-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},26946:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pause_solid",use:"pause_solid-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},98108:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pencil_outline",use:"pencil_outline-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},87007:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pencil_solid",use:"pencil_solid-usage",viewBox:"0 0 19 19",content:''});l().add(c);const r=c},14167:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pie_chart_skeleton",use:"pie_chart_skeleton-usage",viewBox:"0 0 100 100",content:''});l().add(c);const r=c},64628:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pin_element",use:"pin_element-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},32365:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"play_outline",use:"play_outline-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},27506:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"play_solid",use:"play_solid-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},75116:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"plus",use:"plus-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},25376:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"plus_mini_s",use:"plus_mini_s-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},53085:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pod",use:"pod-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},46550:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pricing",use:"pricing-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},27129:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"print",use:"print-usage",viewBox:"0 0 21 20",content:''});l().add(c);const r=c},49164:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"privacy",use:"privacy-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},15471:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"qr_code",use:"qr_code-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},68905:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"qualityOfService_solid",use:"qualityOfService_solid-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},65024:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"question",use:"question-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},84024:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"questionFilled",use:"questionFilled-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},69460:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ram",use:"ram-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},17026:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"reduce_size",use:"reduce_size-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},72693:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"refresh",use:"refresh-usage",viewBox:"0 0 18 19",content:''});l().add(c);const r=c},19227:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"reload",use:"reload-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},5323:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"remove_node",use:"remove_node-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},72293:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"resize_handler",use:"resize_handler-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},40484:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"rocket",use:"rocket-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},71061:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"room",use:"room-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},43671:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"room_home",use:"room_home-usage",viewBox:"0 0 14 12",content:''});l().add(c);const r=c},834:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"room_new",use:"room_new-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},70249:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"room_overview",use:"room_overview-usage",viewBox:"0 0 24 25",content:''});l().add(c);const r=c},88112:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sad",use:"sad-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},27891:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"save",use:"save-usage",viewBox:"0 0 12 12",content:''});l().add(c);const r=c},16171:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"save2",use:"save2-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},68205:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"scheduled",use:"scheduled-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},67360:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"search",use:"search-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},47532:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"search_press",use:"search_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},15958:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"search_s",use:"search_s-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},6133:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"apache",use:"apache-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},21832:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"apache_tomcat",use:"apache_tomcat-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},19943:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"asterisk",use:"asterisk-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},47306:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"beanstalk",use:"beanstalk-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},78902:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"bind",use:"bind-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},28676:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"containerTech",use:"containerTech-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},89399:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"coreDNS",use:"coreDNS-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},99229:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"couchDB",use:"couchDB-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},97116:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"database",use:"database-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},77840:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dns",use:"dns-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},49762:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dnsmasq",use:"dnsmasq-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},44555:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"docker_hub",use:"docker_hub-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},31411:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"docker_hub_press",use:"docker_hub_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},5157:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"dotnet",use:"dotnet-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},31896:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"eBPF",use:"eBPF-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},62520:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"elasticSearch",use:"elasticSearch-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},14191:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"example",use:"example-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},50861:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"freeNAS",use:"freeNAS-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},13974:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"haProxy",use:"haProxy-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},51665:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"httpCheck",use:"httpCheck-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},66689:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"iceCast",use:"iceCast-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},74161:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"influxDB",use:"influxDB-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},26249:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ipfs",use:"ipfs-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},51961:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ipvs",use:"ipvs-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},6819:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"kubernetes",use:"kubernetes-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},70391:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"lighthttpd",use:"lighthttpd-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},55767:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"lighthttpd2",use:"lighthttpd2-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},72232:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"liteSpeed",use:"liteSpeed-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},65494:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"lxc",use:"lxc-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},55925:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mariaDB",use:"mariaDB-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},10484:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"memCached",use:"memCached-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},35743:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mongoDB",use:"mongoDB-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},51771:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mySQL",use:"mySQL-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},95715:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"mySQL_press",use:"mySQL_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},12393:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nginx",use:"nginx-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},76533:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nginx_local",use:"nginx_local-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},24972:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nginx_plus",use:"nginx_plus-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},61357:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ntpd",use:"ntpd-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},43077:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"ntpd_press",use:"ntpd_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},88222:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"nvidia",use:"nvidia-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},8277:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"openStack",use:"openStack-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},51072:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"openWrt",use:"openWrt-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},78776:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pan",use:"pan-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},44212:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pandas",use:"pandas-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},8269:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"percona",use:"percona-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},4729:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"pfSense",use:"pfSense-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},66359:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"php_fpm",use:"php_fpm-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},46021:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"postgreSQL",use:"postgreSQL-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},63487:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"prometheus",use:"prometheus-usage",viewBox:"0 0 256 257",content:''});l().add(c);const r=c},79723:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"proxySQL",use:"proxySQL-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},81925:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"rabbitMQ",use:"rabbitMQ-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},22202:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"random",use:"random-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},17576:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"redis",use:"redis-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},60194:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"rethinkDB",use:"rethinkDB-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},85694:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"retroShare",use:"retroShare-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},25628:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"selected_area",use:"selected_area-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},2965:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sendgrid",use:"sendgrid-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},13203:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"services",use:"services-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},34124:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"smartdlog",use:"smartdlog-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},13151:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"solr",use:"solr-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},52039:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"squid",use:"squid-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},15670:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"summary_statistic",use:"summary_statistic-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},20972:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"systemd",use:"systemd-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},99947:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"traefik",use:"traefik-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},86788:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"varnish",use:"varnish-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},73931:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"webLog",use:"webLog-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},75194:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"webLog_nginx",use:"webLog_nginx-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},84458:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"x509_check",use:"x509_check-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},26140:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"xen",use:"xen-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},83835:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"settings",use:"settings-usage",viewBox:"0 0 17 15",content:''});l().add(c);const r=c},13347:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sign_in",use:"sign_in-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},13322:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sort_indicator",use:"sort_indicator-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},84222:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sorting_asc",use:"sorting_asc-usage",viewBox:"0 0 8 9",content:''});l().add(c);const r=c},35624:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sorting_desc",use:"sorting_desc-usage",viewBox:"0 0 8 9",content:''});l().add(c);const r=c},5601:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"sorting_vertical",use:"sorting_vertical-usage",viewBox:"0 0 19 18",content:''});l().add(c);const r=c},44894:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"space",use:"space-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},79349:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"space_new",use:"space_new-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},20508:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"spaces_v2",use:"spaces_v2-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},73215:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"stock_config",use:"stock_config-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},37110:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"switch_off",use:"switch_off-usage",viewBox:"0 0 14 15",content:''});l().add(c);const r=c},67287:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"system_overview",use:"system_overview-usage",viewBox:"0 0 32 32",content:''});l().add(c);const r=c},99679:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"system_overview_press",use:"system_overview_press-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},97285:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"text_add",use:"text_add-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},24387:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"thumb_down",use:"thumb_down-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},54204:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"thumb_up",use:"thumb_up-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},46020:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"tiny_buttons",use:"tiny_buttons-usage",viewBox:"0 0 22 22",content:''});l().add(c);const r=c},87501:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"top",use:"top-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},134:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"training",use:"training-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},38860:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"trashcan",use:"trashcan-usage",viewBox:"0 0 14 15",content:''});l().add(c);const r=c},16168:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"triangle",use:"triangle-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},95436:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"triangle_down",use:"triangle_down-usage",viewBox:"0 0 10 5",content:''});l().add(c);const r=c},97701:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"universe",use:"universe-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},68008:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"unknownError",use:"unknownError-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},1806:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"unreachable",use:"unreachable-usage",viewBox:"0 0 12 14",content:''});l().add(c);const r=c},85994:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"unreachableNode",use:"unreachableNode-usage",viewBox:"0 0 231 230",content:''});l().add(c);const r=c},39191:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"update",use:"update-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},36419:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"update_pending",use:"update_pending-usage",viewBox:"0 0 20 20",content:''});l().add(c);const r=c},30807:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"upload",use:"upload-usage",viewBox:"0 0 20 21",content:''});l().add(c);const r=c},2381:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"user",use:"user-usage",viewBox:"0 0 16 18",content:''});l().add(c);const r=c},55370:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"user_config",use:"user_config-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},42149:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"user_press",use:"user_press-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},5060:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"users",use:"users-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},55766:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"view_list",use:"view_list-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},75444:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"single_node_view",use:"single_node_view-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},18672:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"single_node_view_press",use:"single_node_view_press-usage",viewBox:"0 0 18 18",content:''});l().add(c);const r=c},74271:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"virtualization",use:"virtualization-usage",viewBox:"0 0 16 16",content:''});l().add(c);const r=c},43728:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"warning",use:"warning-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},35655:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"warning_triangle",use:"warning_triangle-usage",viewBox:"0 0 12 10",content:''});l().add(c);const r=c},62791:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"weights_compare",use:"weights_compare-usage",viewBox:"0 0 14 12",content:''});l().add(c);const r=c},73324:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"weights_drill_down",use:"weights_drill_down-usage",viewBox:"0 0 14 14",content:''});l().add(c);const r=c},9932:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(12897),s=n.n(o),a=n(55042),l=n.n(a),c=new(s())({id:"x",use:"x-usage",viewBox:"0 0 24 24",content:''});l().add(c);const r=c},28892:(e,t,n)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const o=n(96540),s=n(40961),a=n(13172);function l(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const n in e)if("default"!==n){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}return t.default=e,Object.freeze(t)}const c=l(o),r="undefined"!==typeof document?c.useLayoutEffect:c.useEffect;function i(e){const t=c.useReducer((()=>({})),{})[1],n={...e,onChange:(n,o)=>{var a;o?s.flushSync(t):t(),null==(a=e.onChange)||a.call(e,n,o)}},[o]=c.useState((()=>new a.Virtualizer(n)));return o.setOptions(n),c.useEffect((()=>o._didMount()),[]),r((()=>o._willUpdate())),o}t.useVirtualizer=function(e){return i({observeElementRect:a.observeElementRect,observeElementOffset:a.observeElementOffset,scrollToFn:a.elementScroll,...e})},t.useWindowVirtualizer=function(e){return i({getScrollElement:()=>"undefined"!==typeof document?window:null,observeElementRect:a.observeWindowRect,observeElementOffset:a.observeWindowOffset,scrollToFn:a.windowScroll,initialOffset:"undefined"!==typeof document?window.scrollY:void 0,...e})},Object.keys(a).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:()=>a[e]})}))},13172:(e,t,n)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const o=n(49023),s=e=>e,a=e=>{const t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[];for(let s=t;s<=n;s++)o.push(s);return o},l=(e,t,n)=>{if(null==t?void 0:t.borderBoxSize){const e=t.borderBoxSize[0];if(e){return Math.round(e[n.options.horizontal?"inlineSize":"blockSize"])}}return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])};const c=(e,t,n,o)=>{for(;e<=t;){const s=(e+t)/2|0,a=n(s);if(ao))return s;t=s-1}}return e>0?e-1:0};t.approxEqual=o.approxEqual,t.memo=o.memo,t.notUndefined=o.notUndefined,t.Virtualizer=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache=new Map,this.observer=(()=>{let e=null;const t=()=>e||("undefined"!==typeof ResizeObserver?e=new ResizeObserver((e=>{e.forEach((e=>{this._measureElement(e.target,e)}))})):null);return{disconnect:()=>{var e;return null==(e=t())?void 0:e.disconnect()},observe:e=>{var n;return null==(n=t())?void 0:n.observe(e,{box:"border-box"})},unobserve:e=>{var n;return null==(n=t())?void 0:n.unobserve(e)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach((([t,n])=>{"undefined"===typeof n&&delete e[t]})),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:s,rangeExtractor:a,onChange:()=>{},measureElement:l,initialRect:{width:0,height:0},scrollMargin:0,gap:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,...e}},this.notify=e=>{var t,n;null==(n=(t=this.options).onChange)||n.call(t,this,e)},this.maybeNotify=o.memo((()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null])),(e=>{this.notify(e)}),{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach((e=>e())),this.unsubs=[],this.scrollElement=null},this._didMount=()=>(this.measureElementCache.forEach(this.observer.observe),()=>{this.observer.disconnect(),this.cleanup()}),this._willUpdate=()=>{const e=this.options.getScrollElement();this.scrollElement!==e&&(this.cleanup(),this.scrollElement=e,this._scrollToOffset(this.scrollOffset,{adjustments:void 0,behavior:void 0}),this.unsubs.push(this.options.observeElementRect(this,(e=>{this.scrollRect=e,this.maybeNotify()}))),this.unsubs.push(this.options.observeElementOffset(this,(e=>{this.scrollAdjustments=0,this.scrollOffset!==e&&(null!==this.isScrollingTimeoutId&&(clearTimeout(this.isScrollingTimeoutId),this.isScrollingTimeoutId=null),this.isScrolling=!0,this.scrollDirection=this.scrollOffset{this.isScrollingTimeoutId=null,this.isScrolling=!1,this.scrollDirection=null,this.maybeNotify()}),this.options.scrollingDelay))}))))},this.getSize=()=>this.scrollRect[this.options.horizontal?"width":"height"],this.memoOptions=o.memo((()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey]),((e,t,n,o)=>(this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:n,getItemKey:o})),{key:!1}),this.getFurthestMeasurement=(e,t)=>{const n=new Map,o=new Map;for(let s=t-1;s>=0;s--){const t=e[s];if(n.has(t.lane))continue;const a=o.get(t.lane);if(null==a||t.end>a.end?o.set(t.lane,t):t.ende.end===t.end?e.index-t.index:e.end-t.end))[0]:void 0},this.getMeasurements=o.memo((()=>[this.memoOptions(),this.itemSizeCache]),(({count:e,paddingStart:t,scrollMargin:n,getItemKey:o},s)=>{const a=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const l=this.measurementsCache.slice(0,a);for(let c=a;cthis.options.debug}),this.calculateRange=o.memo((()=>[this.getMeasurements(),this.getSize(),this.scrollOffset]),((e,t,n)=>this.range=e.length>0&&t>0?function({measurements:e,outerSize:t,scrollOffset:n}){const o=e.length-1,s=t=>e[t].start,a=c(0,o,s,n);let l=a;for(;lthis.options.debug}),this.getIndexes=o.memo((()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count]),((e,t,n,o)=>null===t?[]:e({...t,overscan:n,count:o})),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this._measureElement=(e,t)=>{const n=this.measurementsCache[this.indexFromElement(e)];if(!n||!e.isConnected)return void this.measureElementCache.forEach(((t,n)=>{t===e&&(this.observer.unobserve(e),this.measureElementCache.delete(n))}));const o=this.measureElementCache.get(n.key);o!==e&&(o&&this.observer.unobserve(o),this.observer.observe(e),this.measureElementCache.set(n.key,e));const s=this.options.measureElement(e,t,this);this.resizeItem(n,s)},this.resizeItem=(e,t)=>{const n=t-(this.itemSizeCache.get(e.key)??e.size);0!==n&&(e.start{e&&this._measureElement(e,void 0)},this.getVirtualItems=o.memo((()=>[this.getIndexes(),this.getMeasurements()]),((e,t)=>{const n=[];for(let o=0,s=e.length;othis.options.debug}),this.getVirtualItemForOffset=e=>{const t=this.getMeasurements();return o.notUndefined(t[c(0,t.length-1,(e=>o.notUndefined(t[e]).start),e)])},this.getOffsetForAlignment=(e,t)=>{const n=this.getSize();"auto"===t&&(t=e<=this.scrollOffset?"start":e>=this.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));const o=this.options.horizontal?"scrollWidth":"scrollHeight",s=(this.scrollElement?"document"in this.scrollElement?this.scrollElement.document.documentElement[o]:this.scrollElement[o]:0)-this.getSize();return Math.max(Math.min(s,e),0)},this.getOffsetForIndex=(e,t="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));const n=o.notUndefined(this.getMeasurements()[e]);if("auto"===t)if(n.end>=this.scrollOffset+this.getSize()-this.options.scrollPaddingEnd)t="end";else{if(!(n.start<=this.scrollOffset+this.options.scrollPaddingStart))return[this.scrollOffset,t];t="start"}const s="end"===t?n.end+this.options.scrollPaddingEnd:n.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(s,t),t]},this.isDynamicMode=()=>this.measureElementCache.size>0,this.cancelScrollToIndex=()=>{null!==this.scrollToIndexTimeoutId&&(clearTimeout(this.scrollToIndexTimeoutId),this.scrollToIndexTimeoutId=null)},this.scrollToOffset=(e,{align:t="start",behavior:n}={})=>{this.cancelScrollToIndex(),"smooth"===n&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(e,t),{adjustments:void 0,behavior:n})},this.scrollToIndex=(e,{align:t="auto",behavior:n}={})=>{e=Math.max(0,Math.min(e,this.options.count-1)),this.cancelScrollToIndex(),"smooth"===n&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");const[s,a]=this.getOffsetForIndex(e,t);this._scrollToOffset(s,{adjustments:void 0,behavior:n}),"smooth"!==n&&this.isDynamicMode()&&(this.scrollToIndexTimeoutId=setTimeout((()=>{this.scrollToIndexTimeoutId=null;if(this.measureElementCache.has(this.options.getItemKey(e))){const[t]=this.getOffsetForIndex(e,a);o.approxEqual(t,this.scrollOffset)||this.scrollToIndex(e,{align:a,behavior:n})}else this.scrollToIndex(e,{align:a,behavior:n})})))},this.scrollBy=(e,{behavior:t}={})=>{this.cancelScrollToIndex(),"smooth"===t&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.scrollOffset+e,{adjustments:void 0,behavior:t})},this.getTotalSize=()=>{var e;const t=this.getMeasurements();let n;return n=0===t.length?this.options.paddingStart:1===this.options.lanes?(null==(e=t[t.length-1])?void 0:e.end)??0:Math.max(...t.slice(-this.options.lanes).map((e=>e.end))),n-this.options.scrollMargin+this.options.paddingEnd},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.itemSizeCache=new Map,this.notify(!1)},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((e=>{this.itemSizeCache.set(e.key,e.size)})),this.maybeNotify()}},t.defaultKeyExtractor=s,t.defaultRangeExtractor=a,t.elementScroll=(e,{adjustments:t=0,behavior:n},o)=>{var s,a;const l=e+t;null==(a=null==(s=o.scrollElement)?void 0:s.scrollTo)||a.call(s,{[o.options.horizontal?"left":"top"]:l,behavior:n})},t.measureElement=l,t.observeElementOffset=(e,t)=>{const n=e.scrollElement;if(!n)return;const o=()=>{t(n[e.options.horizontal?"scrollLeft":"scrollTop"])};return o(),n.addEventListener("scroll",o,{passive:!0}),()=>{n.removeEventListener("scroll",o)}},t.observeElementRect=(e,t)=>{const n=e.scrollElement;if(!n)return;const o=e=>{const{width:n,height:o}=e;t({width:Math.round(n),height:Math.round(o)})};if(o(n.getBoundingClientRect()),"undefined"===typeof ResizeObserver)return()=>{};const s=new ResizeObserver((e=>{const t=e[0];if(null==t?void 0:t.borderBoxSize){const e=t.borderBoxSize[0];if(e)return void o({width:e.inlineSize,height:e.blockSize})}o(n.getBoundingClientRect())}));return s.observe(n,{box:"border-box"}),()=>{s.unobserve(n)}},t.observeWindowOffset=(e,t)=>{const n=e.scrollElement;if(!n)return;const o=()=>{t(n[e.options.horizontal?"scrollX":"scrollY"])};return o(),n.addEventListener("scroll",o,{passive:!0}),()=>{n.removeEventListener("scroll",o)}},t.observeWindowRect=(e,t)=>{const n=e.scrollElement;if(!n)return;const o=()=>{t({width:n.innerWidth,height:n.innerHeight})};return o(),n.addEventListener("resize",o,{passive:!0}),()=>{n.removeEventListener("resize",o)}},t.windowScroll=(e,{adjustments:t=0,behavior:n},o)=>{var s,a;const l=e+t;null==(a=null==(s=o.scrollElement)?void 0:s.scrollTo)||a.call(s,{[o.options.horizontal?"left":"top"]:l,behavior:n})}},49023:(e,t)=>{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});t.approxEqual=(e,t)=>Math.abs(e-t)<1,t.memo=function(e,t,n){let o,s=n.initialDeps??[];return()=>{var a,l,c,r;let i;n.key&&(null==(a=n.debug)?void 0:a.call(n))&&(i=Date.now());const d=e();if(!(d.length!==s.length||d.some(((e,t)=>s[t]!==e))))return o;let u;if(s=d,n.key&&(null==(l=n.debug)?void 0:l.call(n))&&(u=Date.now()),o=t(...d),n.key&&(null==(c=n.debug)?void 0:c.call(n))){const e=Math.round(100*(Date.now()-i))/100,t=Math.round(100*(Date.now()-u))/100,o=t/16,s=(e,t)=>{for(e=String(e);e.length{"use strict";var o=n(66118),s=n(2642),a=n(58380),l=n(84929),c=n(16074),r=n(87991),i=n(87836),d=n(93001),u=n(2940);function h(e,t){return(0,i.A)(e,t*u.Cg)}function v(e,t){return(0,i.A)(e,t*u.s0)}var m=n(13999);function f(e,t){const n=7*t;return(0,m.f)(e,n)}var w=n(4883);function p(e,t){const n=3*t;return(0,w.P)(e,n)}function g(e,t){return(0,w.P)(e,12*t)}var y=n(77275),b=n(43924),x=n(10648),_=n(50502),M=n(17764),z=n(14123);function B(e,t,n){const o=(0,M.c)(e,t)/7;return(0,z.u)(n?.roundingMethod)(o)}var H=n(49858);function C(e,t,n){const o=(0,H.W)(e,t)/3;return(0,z.u)(n?.roundingMethod)(o)}var V=n(33607);function O(e){const t=(0,s.a)(e);return t.setMilliseconds(0),t}function L(e){const t=(0,s.a)(e);return t.setSeconds(0,0),t}function k(e){const t=(0,s.a)(e);return t.setMinutes(0,0,0),t}var S=n(51730),A=n(92528);function E(e){const t=(0,s.a)(e);return t.setDate(1),t.setHours(0,0,0,0),t}function P(e){const t=(0,s.a)(e),n=t.getMonth(),o=n-n%3;return t.setMonth(o,1),t.setHours(0,0,0,0),t}var T=n(39204);function j(e){const t=(0,s.a)(e);return t.setMilliseconds(999),t}function q(e){const t=(0,s.a)(e);return t.setSeconds(59,999),t}function D(e){const t=(0,s.a)(e);return t.setMinutes(59,59,999),t}var I=n(37519),F=n(82695);function N(e,t){const n=(0,F.q)(),o=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,a=(0,s.a)(e),l=a.getDay(),c=6+(l{"use strict";n.d(t,{H:()=>s});var o=n(2940);function s(e,t){const n=t?.additionalDigits??2,s=function(e){const t={},n=e.split(a.dateTimeDelimiter);let o;if(n.length>2)return t;/:/.test(n[0])?o=n[0]:(t.date=n[0],o=n[1],a.timeZoneDelimiter.test(t.date)&&(t.date=e.split(a.timeZoneDelimiter)[0],o=e.substr(t.date.length,e.length)));if(o){const e=a.timezone.exec(o);e?(t.time=o.replace(e[1],""),t.timezone=e[1]):t.time=o}return t}(e);let v;if(s.date){const e=function(e,t){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),o=e.match(n);if(!o)return{year:NaN,restDateString:""};const s=o[1]?parseInt(o[1]):null,a=o[2]?parseInt(o[2]):null;return{year:null===a?s:100*a,restDateString:e.slice((o[1]||o[2]).length)}}(s.date,n);v=function(e,t){if(null===t)return new Date(NaN);const n=e.match(l);if(!n)return new Date(NaN);const o=!!n[4],s=i(n[1]),a=i(n[2])-1,c=i(n[3]),r=i(n[4]),d=i(n[5])-1;if(o)return function(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}(0,r,d)?function(e,t,n){const o=new Date(0);o.setUTCFullYear(e,0,4);const s=o.getUTCDay()||7,a=7*(t-1)+n+1-s;return o.setUTCDate(o.getUTCDate()+a),o}(t,r,d):new Date(NaN);{const e=new Date(0);return function(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(u[t]||(h(e)?29:28))}(t,a,c)&&function(e,t){return t>=1&&t<=(h(e)?366:365)}(t,s)?(e.setUTCFullYear(t,a,Math.max(s,c)),e):new Date(NaN)}}(e.restDateString,e.year)}if(!v||isNaN(v.getTime()))return new Date(NaN);const m=v.getTime();let f,w=0;if(s.time&&(w=function(e){const t=e.match(c);if(!t)return NaN;const n=d(t[1]),s=d(t[2]),a=d(t[3]);if(!function(e,t,n){if(24===e)return 0===t&&0===n;return n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}(n,s,a))return NaN;return n*o.s0+s*o.Cg+1e3*a}(s.time),isNaN(w)))return new Date(NaN);if(!s.timezone){const e=new Date(m+w),t=new Date(0);return t.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),t.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),t}return f=function(e){if("Z"===e)return 0;const t=e.match(r);if(!t)return 0;const n="+"===t[1]?-1:1,s=parseInt(t[2]),a=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,a))return NaN;return n*(s*o.s0+a*o.Cg)}(s.timezone),isNaN(f)?new Date(NaN):new Date(m+w+f)}const a={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},l=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,c=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,r=/^([+-])(\d{2})(?::?(\d{2}))?$/;function i(e){return e?parseInt(e):1}function d(e){return e&&parseFloat(e.replace(",","."))||0}const u=[31,null,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400===0||e%4===0&&e%100!==0}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt b/src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt deleted file mode 100644 index 131763fa3..000000000 --- a/src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt +++ /dev/null @@ -1,12 +0,0 @@ -/*! -* chartjs-plugin-zoom v2.0.1 -* undefined - * (c) 2016-2023 chartjs-plugin-zoom Contributors - * Released under the MIT License - */ - -/*! Hammer.JS - v2.0.7 - 2016-04-22 - * http://hammerjs.github.io/ - * - * Copyright (c) 2016 Jorik Tangelder; - * Licensed under the MIT license */ diff --git a/src/web/gui/v2/5794.252ff787d58d64eb4988.chunk.js b/src/web/gui/v2/5794.252ff787d58d64eb4988.chunk.js deleted file mode 100644 index 1a31525ac..000000000 --- a/src/web/gui/v2/5794.252ff787d58d64eb4988.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="e1a60162-ea92-401a-9f7e-593012b55769",t._sentryDebugIdIdentifier="sentry-dbid-e1a60162-ea92-401a-9f7e-593012b55769")}catch(t){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[5794],{86027:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"DraggableCore",{enumerable:!0,get:function(){return d.default}}),e.default=void 0;var o=function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!==typeof t&&"function"!==typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if("default"!==a&&Object.prototype.hasOwnProperty.call(t,a)){var i=r?Object.getOwnPropertyDescriptor(t,a):null;i&&(i.get||i.set)?Object.defineProperty(o,a,i):o[a]=t[a]}o.default=t,n&&n.set(t,o);return o}(n(96540)),r=f(n(5556)),a=f(n(40961)),i=f(n(20053)),s=n(71089),l=n(81726),u=n(77056),d=f(n(6888)),c=f(n(18696));function f(t){return t&&t.__esModule?t:{default:t}}function p(t){if("function"!==typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function g(){return g=Object.assign?Object.assign.bind():function(t){for(var e=1;e{(0,c.default)("Draggable: onDragStart: %j",e);if(!1===this.props.onStart(t,(0,l.createDraggableData)(this,e)))return!1;this.setState({dragging:!0,dragged:!0})})),h(this,"onDrag",((t,e)=>{if(!this.state.dragging)return!1;(0,c.default)("Draggable: onDrag: %j",e);const n=(0,l.createDraggableData)(this,e),o={x:n.x,y:n.y,slackX:0,slackY:0};if(this.props.bounds){const{x:t,y:e}=o;o.x+=this.state.slackX,o.y+=this.state.slackY;const[r,a]=(0,l.getBoundPosition)(this,o.x,o.y);o.x=r,o.y=a,o.slackX=this.state.slackX+(t-o.x),o.slackY=this.state.slackY+(e-o.y),n.x=o.x,n.y=o.y,n.deltaX=o.x-this.state.x,n.deltaY=o.y-this.state.y}if(!1===this.props.onDrag(t,n))return!1;this.setState(o)})),h(this,"onDragStop",((t,e)=>{if(!this.state.dragging)return!1;if(!1===this.props.onStop(t,(0,l.createDraggableData)(this,e)))return!1;(0,c.default)("Draggable: onDragStop: %j",e);const n={dragging:!1,slackX:0,slackY:0};if(Boolean(this.props.position)){const{x:t,y:e}=this.props.position;n.x=t,n.y=e}this.setState(n)})),this.state={dragging:!1,dragged:!1,x:t.position?t.position.x:t.defaultPosition.x,y:t.position?t.position.y:t.defaultPosition.y,prevPropsPosition:{...t.position},slackX:0,slackY:0,isElementSVG:!1},!t.position||t.onDrag||t.onStop||console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.")}componentDidMount(){"undefined"!==typeof window.SVGElement&&this.findDOMNode()instanceof window.SVGElement&&this.setState({isElementSVG:!0})}componentWillUnmount(){this.setState({dragging:!1})}findDOMNode(){var t,e;return null!==(t=null===(e=this.props)||void 0===e||null===(e=e.nodeRef)||void 0===e?void 0:e.current)&&void 0!==t?t:a.default.findDOMNode(this)}render(){const{axis:t,bounds:e,children:n,defaultPosition:r,defaultClassName:a,defaultClassNameDragging:u,defaultClassNameDragged:c,position:f,positionOffset:p,scale:h,...m}=this.props;let y={},b=null;const v=!Boolean(f)||this.state.dragging,D=f||r,S={x:(0,l.canDragX)(this)&&v?this.state.x:D.x,y:(0,l.canDragY)(this)&&v?this.state.y:D.y};this.state.isElementSVG?b=(0,s.createSVGTransform)(S,p):y=(0,s.createCSSTransform)(S,p);const w=(0,i.default)(n.props.className||"",a,{[u]:this.state.dragging,[c]:this.state.dragged});return o.createElement(d.default,g({},m,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),o.cloneElement(o.Children.only(n),{className:w,style:{...n.props.style,...y},transform:b}))}}e.default=m,h(m,"displayName","Draggable"),h(m,"propTypes",{...d.default.propTypes,axis:r.default.oneOf(["both","x","y","none"]),bounds:r.default.oneOfType([r.default.shape({left:r.default.number,right:r.default.number,top:r.default.number,bottom:r.default.number}),r.default.string,r.default.oneOf([!1])]),defaultClassName:r.default.string,defaultClassNameDragging:r.default.string,defaultClassNameDragged:r.default.string,defaultPosition:r.default.shape({x:r.default.number,y:r.default.number}),positionOffset:r.default.shape({x:r.default.oneOfType([r.default.number,r.default.string]),y:r.default.oneOfType([r.default.number,r.default.string])}),position:r.default.shape({x:r.default.number,y:r.default.number}),className:u.dontSetMe,style:u.dontSetMe,transform:u.dontSetMe}),h(m,"defaultProps",{...d.default.defaultProps,axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},scale:1})},6888:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!==typeof t&&"function"!==typeof t)return{default:t};var n=c(e);if(n&&n.has(t))return n.get(t);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if("default"!==a&&Object.prototype.hasOwnProperty.call(t,a)){var i=r?Object.getOwnPropertyDescriptor(t,a):null;i&&(i.get||i.set)?Object.defineProperty(o,a,i):o[a]=t[a]}o.default=t,n&&n.set(t,o);return o}(n(96540)),r=d(n(5556)),a=d(n(40961)),i=n(71089),s=n(81726),l=n(77056),u=d(n(18696));function d(t){return t&&t.__esModule?t:{default:t}}function c(t){if("function"!==typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(c=function(t){return t?n:e})(t)}function f(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!==typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const p={start:"touchstart",move:"touchmove",stop:"touchend"},g={start:"mousedown",move:"mousemove",stop:"mouseup"};let h=g;class m extends o.Component{constructor(){super(...arguments),f(this,"dragging",!1),f(this,"lastX",NaN),f(this,"lastY",NaN),f(this,"touchIdentifier",null),f(this,"mounted",!1),f(this,"handleDragStart",(t=>{if(this.props.onMouseDown(t),!this.props.allowAnyClick&&"number"===typeof t.button&&0!==t.button)return!1;const e=this.findDOMNode();if(!e||!e.ownerDocument||!e.ownerDocument.body)throw new Error(" not mounted on DragStart!");const{ownerDocument:n}=e;if(this.props.disabled||!(t.target instanceof n.defaultView.Node)||this.props.handle&&!(0,i.matchesSelectorAndParentsTo)(t.target,this.props.handle,e)||this.props.cancel&&(0,i.matchesSelectorAndParentsTo)(t.target,this.props.cancel,e))return;"touchstart"===t.type&&t.preventDefault();const o=(0,i.getTouchIdentifier)(t);this.touchIdentifier=o;const r=(0,s.getControlPosition)(t,o,this);if(null==r)return;const{x:a,y:l}=r,d=(0,s.createCoreData)(this,a,l);(0,u.default)("DraggableCore: handleDragStart: %j",d),(0,u.default)("calling",this.props.onStart);!1!==this.props.onStart(t,d)&&!1!==this.mounted&&(this.props.enableUserSelectHack&&(0,i.addUserSelectStyles)(n),this.dragging=!0,this.lastX=a,this.lastY=l,(0,i.addEvent)(n,h.move,this.handleDrag),(0,i.addEvent)(n,h.stop,this.handleDragStop))})),f(this,"handleDrag",(t=>{const e=(0,s.getControlPosition)(t,this.touchIdentifier,this);if(null==e)return;let{x:n,y:o}=e;if(Array.isArray(this.props.grid)){let t=n-this.lastX,e=o-this.lastY;if([t,e]=(0,s.snapToGrid)(this.props.grid,t,e),!t&&!e)return;n=this.lastX+t,o=this.lastY+e}const r=(0,s.createCoreData)(this,n,o);(0,u.default)("DraggableCore: handleDrag: %j",r);if(!1!==this.props.onDrag(t,r)&&!1!==this.mounted)this.lastX=n,this.lastY=o;else try{this.handleDragStop(new MouseEvent("mouseup"))}catch(a){const t=document.createEvent("MouseEvents");t.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),this.handleDragStop(t)}})),f(this,"handleDragStop",(t=>{if(!this.dragging)return;const e=(0,s.getControlPosition)(t,this.touchIdentifier,this);if(null==e)return;let{x:n,y:o}=e;if(Array.isArray(this.props.grid)){let t=n-this.lastX||0,e=o-this.lastY||0;[t,e]=(0,s.snapToGrid)(this.props.grid,t,e),n=this.lastX+t,o=this.lastY+e}const r=(0,s.createCoreData)(this,n,o);if(!1===this.props.onStop(t,r)||!1===this.mounted)return!1;const a=this.findDOMNode();a&&this.props.enableUserSelectHack&&(0,i.removeUserSelectStyles)(a.ownerDocument),(0,u.default)("DraggableCore: handleDragStop: %j",r),this.dragging=!1,this.lastX=NaN,this.lastY=NaN,a&&((0,u.default)("DraggableCore: Removing handlers"),(0,i.removeEvent)(a.ownerDocument,h.move,this.handleDrag),(0,i.removeEvent)(a.ownerDocument,h.stop,this.handleDragStop))})),f(this,"onMouseDown",(t=>(h=g,this.handleDragStart(t)))),f(this,"onMouseUp",(t=>(h=g,this.handleDragStop(t)))),f(this,"onTouchStart",(t=>(h=p,this.handleDragStart(t)))),f(this,"onTouchEnd",(t=>(h=p,this.handleDragStop(t))))}componentDidMount(){this.mounted=!0;const t=this.findDOMNode();t&&(0,i.addEvent)(t,p.start,this.onTouchStart,{passive:!1})}componentWillUnmount(){this.mounted=!1;const t=this.findDOMNode();if(t){const{ownerDocument:e}=t;(0,i.removeEvent)(e,g.move,this.handleDrag),(0,i.removeEvent)(e,p.move,this.handleDrag),(0,i.removeEvent)(e,g.stop,this.handleDragStop),(0,i.removeEvent)(e,p.stop,this.handleDragStop),(0,i.removeEvent)(t,p.start,this.onTouchStart,{passive:!1}),this.props.enableUserSelectHack&&(0,i.removeUserSelectStyles)(e)}}findDOMNode(){var t,e;return null!==(t=this.props)&&void 0!==t&&t.nodeRef?null===(e=this.props)||void 0===e||null===(e=e.nodeRef)||void 0===e?void 0:e.current:a.default.findDOMNode(this)}render(){return o.cloneElement(o.Children.only(this.props.children),{onMouseDown:this.onMouseDown,onMouseUp:this.onMouseUp,onTouchEnd:this.onTouchEnd})}}e.default=m,f(m,"displayName","DraggableCore"),f(m,"propTypes",{allowAnyClick:r.default.bool,children:r.default.node.isRequired,disabled:r.default.bool,enableUserSelectHack:r.default.bool,offsetParent:function(t,e){if(t[e]&&1!==t[e].nodeType)throw new Error("Draggable's offsetParent must be a DOM Node.")},grid:r.default.arrayOf(r.default.number),handle:r.default.string,cancel:r.default.string,nodeRef:r.default.object,onStart:r.default.func,onDrag:r.default.func,onStop:r.default.func,onMouseDown:r.default.func,scale:r.default.number,className:l.dontSetMe,style:l.dontSetMe,transform:l.dontSetMe}),f(m,"defaultProps",{allowAnyClick:!1,disabled:!1,enableUserSelectHack:!0,onStart:function(){},onDrag:function(){},onStop:function(){},onMouseDown:function(){},scale:1})},55794:(t,e,n)=>{const{default:o,DraggableCore:r}=n(86027);t.exports=o,t.exports.default=o,t.exports.DraggableCore=r},71089:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.addClassName=u,e.addEvent=function(t,e,n,o){if(!t)return;const r={capture:!0,...o};t.addEventListener?t.addEventListener(e,n,r):t.attachEvent?t.attachEvent("on"+e,n):t["on"+e]=n},e.addUserSelectStyles=function(t){if(!t)return;let e=t.getElementById("react-draggable-style-el");e||(e=t.createElement("style"),e.type="text/css",e.id="react-draggable-style-el",e.innerHTML=".react-draggable-transparent-selection *::-moz-selection {all: inherit;}\n",e.innerHTML+=".react-draggable-transparent-selection *::selection {all: inherit;}\n",t.getElementsByTagName("head")[0].appendChild(e));t.body&&u(t.body,"react-draggable-transparent-selection")},e.createCSSTransform=function(t,e){const n=l(t,e,"px");return{[(0,r.browserPrefixToKey)("transform",r.default)]:n}},e.createSVGTransform=function(t,e){return l(t,e,"")},e.getTouch=function(t,e){return t.targetTouches&&(0,o.findInArray)(t.targetTouches,(t=>e===t.identifier))||t.changedTouches&&(0,o.findInArray)(t.changedTouches,(t=>e===t.identifier))},e.getTouchIdentifier=function(t){if(t.targetTouches&&t.targetTouches[0])return t.targetTouches[0].identifier;if(t.changedTouches&&t.changedTouches[0])return t.changedTouches[0].identifier},e.getTranslation=l,e.innerHeight=function(t){let e=t.clientHeight;const n=t.ownerDocument.defaultView.getComputedStyle(t);return e-=(0,o.int)(n.paddingTop),e-=(0,o.int)(n.paddingBottom),e},e.innerWidth=function(t){let e=t.clientWidth;const n=t.ownerDocument.defaultView.getComputedStyle(t);return e-=(0,o.int)(n.paddingLeft),e-=(0,o.int)(n.paddingRight),e},e.matchesSelector=s,e.matchesSelectorAndParentsTo=function(t,e,n){let o=t;do{if(s(o,e))return!0;if(o===n)return!1;o=o.parentNode}while(o);return!1},e.offsetXYFromParent=function(t,e,n){const o=e===e.ownerDocument.body?{left:0,top:0}:e.getBoundingClientRect(),r=(t.clientX+e.scrollLeft-o.left)/n,a=(t.clientY+e.scrollTop-o.top)/n;return{x:r,y:a}},e.outerHeight=function(t){let e=t.clientHeight;const n=t.ownerDocument.defaultView.getComputedStyle(t);return e+=(0,o.int)(n.borderTopWidth),e+=(0,o.int)(n.borderBottomWidth),e},e.outerWidth=function(t){let e=t.clientWidth;const n=t.ownerDocument.defaultView.getComputedStyle(t);return e+=(0,o.int)(n.borderLeftWidth),e+=(0,o.int)(n.borderRightWidth),e},e.removeClassName=d,e.removeEvent=function(t,e,n,o){if(!t)return;const r={capture:!0,...o};t.removeEventListener?t.removeEventListener(e,n,r):t.detachEvent?t.detachEvent("on"+e,n):t["on"+e]=null},e.removeUserSelectStyles=function(t){if(!t)return;try{if(t.body&&d(t.body,"react-draggable-transparent-selection"),t.selection)t.selection.empty();else{const e=(t.defaultView||window).getSelection();e&&"Caret"!==e.type&&e.removeAllRanges()}}catch(e){}};var o=n(77056),r=function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!==typeof t&&"function"!==typeof t)return{default:t};var n=a(e);if(n&&n.has(t))return n.get(t);var o={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if("default"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var s=r?Object.getOwnPropertyDescriptor(t,i):null;s&&(s.get||s.set)?Object.defineProperty(o,i,s):o[i]=t[i]}o.default=t,n&&n.set(t,o);return o}(n(33514));function a(t){if("function"!==typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(a=function(t){return t?n:e})(t)}let i="";function s(t,e){return i||(i=(0,o.findInArray)(["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"],(function(e){return(0,o.isFunction)(t[e])}))),!!(0,o.isFunction)(t[i])&&t[i](e)}function l(t,e,n){let{x:o,y:r}=t,a="translate(".concat(o).concat(n,",").concat(r).concat(n,")");if(e){const t="".concat("string"===typeof e.x?e.x:e.x+n),o="".concat("string"===typeof e.y?e.y:e.y+n);a="translate(".concat(t,", ").concat(o,")")+a}return a}function u(t,e){t.classList?t.classList.add(e):t.className.match(new RegExp("(?:^|\\s)".concat(e,"(?!\\S)")))||(t.className+=" ".concat(e))}function d(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp("(?:^|\\s)".concat(e,"(?!\\S)"),"g"),"")}},33514:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.browserPrefixToKey=r,e.browserPrefixToStyle=function(t,e){return e?"-".concat(e.toLowerCase(),"-").concat(t):t},e.default=void 0,e.getPrefix=o;const n=["Moz","Webkit","O","ms"];function o(){var t;let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"transform";if("undefined"===typeof window)return"";const o=null===(t=window.document)||void 0===t||null===(t=t.documentElement)||void 0===t?void 0:t.style;if(!o)return"";if(e in o)return"";for(let a=0;a{Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){0}},81726:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.canDragX=function(t){return"both"===t.props.axis||"x"===t.props.axis},e.canDragY=function(t){return"both"===t.props.axis||"y"===t.props.axis},e.createCoreData=function(t,e,n){const r=!(0,o.isNum)(t.lastX),i=a(t);return r?{node:i,deltaX:0,deltaY:0,lastX:e,lastY:n,x:e,y:n}:{node:i,deltaX:e-t.lastX,deltaY:n-t.lastY,lastX:t.lastX,lastY:t.lastY,x:e,y:n}},e.createDraggableData=function(t,e){const n=t.props.scale;return{node:e.node,x:t.state.x+e.deltaX/n,y:t.state.y+e.deltaY/n,deltaX:e.deltaX/n,deltaY:e.deltaY/n,lastX:t.state.x,lastY:t.state.y}},e.getBoundPosition=function(t,e,n){if(!t.props.bounds)return[e,n];let{bounds:i}=t.props;i="string"===typeof i?i:function(t){return{left:t.left,top:t.top,right:t.right,bottom:t.bottom}}(i);const s=a(t);if("string"===typeof i){const{ownerDocument:t}=s,e=t.defaultView;let n;if(n="parent"===i?s.parentNode:t.querySelector(i),!(n instanceof e.HTMLElement))throw new Error('Bounds selector "'+i+'" could not find an element.');const a=n,l=e.getComputedStyle(s),u=e.getComputedStyle(a);i={left:-s.offsetLeft+(0,o.int)(u.paddingLeft)+(0,o.int)(l.marginLeft),top:-s.offsetTop+(0,o.int)(u.paddingTop)+(0,o.int)(l.marginTop),right:(0,r.innerWidth)(a)-(0,r.outerWidth)(s)-s.offsetLeft+(0,o.int)(u.paddingRight)-(0,o.int)(l.marginRight),bottom:(0,r.innerHeight)(a)-(0,r.outerHeight)(s)-s.offsetTop+(0,o.int)(u.paddingBottom)-(0,o.int)(l.marginBottom)}}(0,o.isNum)(i.right)&&(e=Math.min(e,i.right));(0,o.isNum)(i.bottom)&&(n=Math.min(n,i.bottom));(0,o.isNum)(i.left)&&(e=Math.max(e,i.left));(0,o.isNum)(i.top)&&(n=Math.max(n,i.top));return[e,n]},e.getControlPosition=function(t,e,n){const o="number"===typeof e?(0,r.getTouch)(t,e):null;if("number"===typeof e&&!o)return null;const i=a(n),s=n.props.offsetParent||i.offsetParent||i.ownerDocument.body;return(0,r.offsetXYFromParent)(o||t,s,n.props.scale)},e.snapToGrid=function(t,e,n){const o=Math.round(e/t[0])*t[0],r=Math.round(n/t[1])*t[1];return[o,r]};var o=n(77056),r=n(71089);function a(t){const e=t.findDOMNode();if(!e)throw new Error(": Unmounted during event!");return e}},77056:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.dontSetMe=function(t,e,n){if(t[e])return new Error("Invalid prop ".concat(e," passed to ").concat(n," - do not set this, set it on the child."))},e.findInArray=function(t,e){for(let n=0,o=t.length;n{r.d(t,{A:()=>ce});var n=r(58168),o=r(96540),a=(r(62953),r(8711)),i=r(83199),d=r(86652),c=r(38257),s=r(45463),l=r(62302),u=(r(17333),r(3064),r(41393),r(14905),r(98992),r(54520),r(72577),r(81454),r(8872),r(45467)),g=r(65570),m=r(40961),h=r(43375),p=r(43627),f=r(34604),b=r(44554),I=r(42629),v=r(74979),y=r(13692);const x=e=>(0,p.uU)({...e,wasDragging:!0}),E=e=>{var t;let{id:r,items:a,containerWidth:i,rowHeight:d,gutter:c,Component:s,isSortingContainer:l,onRemove:u,onItemRemove:g,Item:m,gridTracks:h,transforming:f,containerDndProps:I,itemProps:E,dragOverlay:C,rootId:w,...k}=e;const{active:A,attributes:S,isDragging:D,listeners:P,over:R,setNodeRef:_,transition:T,transform:O}=(0,p.gl)({id:C?"dragOverlay-".concat(r):r,disabled:C,data:{rootId:w,isContainer:!0,items:a,containerId:r,dropArea:!0,...I},animateLayoutChanges:x}),B=!!R&&(r===R.id&&"container"!==(null===A||void 0===A||null===(t=A.data.current)||void 0===t?void 0:t.type)||a.includes(R.id)),H=(0,b.Hp)(a),N=H*d+(H-1)*c+"px";return o.createElement(s,(0,n.A)({ref:_,style:C?{width:i,height:N}:{transition:T,transform:v.Ks.Translate.toString(O),opacity:D?.5:void 0,width:i,height:N},hover:B,onRemove:u,attributes:S,listeners:P},k,{itemProps:E,id:r,dragOverlay:C}),a.map(((e,t)=>o.createElement(y.A,(0,n.A)({disabled:l,key:e.id},e,{index:t,containerId:r,Item:m,onRemove:g,draggable:!0,containerWidth:i,rowHeight:d,gridTracks:h,gutter:c,transformed:f?a[t]:null,itemProps:E,containerDragOverlay:C,rootId:w,containerDndProps:I,draggableProps:e})))))},C=e=>{let{containers:t,Container:r,containerWidth:n,isSortingContainer:a,items:i,Item:d,transforming:c,onContainerRemove:s,onRemove:l,rowHeight:u,gridTracks:g,gutter:m,containerDndProps:h,itemProps:p,rootId:f}=e;return t.map((e=>o.createElement(E,{key:e,id:e,items:i[e],onRemove:()=>s(e),containerWidth:n,rowHeight:u,gridTracks:g,gutter:m,Component:r,Item:d,isSortingContainer:a,transforming:c,onItemRemove:l,containerDndProps:h,itemProps:p,rootId:f})))},w={sideEffects(e){let{active:t}=e;t.node.animate([{opacity:0},{opacity:1}],{easing:"ease-in",duration:250})}},k="TRASH_ID",A="PLACEHOLDER_ID",S=e=>{let{id:t}=e;const{setNodeRef:r,isOver:n}=(0,h.zM)({id:t,data:{dropArea:!0,isTrash:!0}});return o.createElement("div",{ref:r,style:{display:"flex",alignItems:"center",justifyContent:"center",position:"fixed",left:"50%",marginLeft:-150,bottom:20,width:300,height:60,borderRadius:5,border:"1px solid",borderColor:n?"red":"#DDD"}},"Drop here to delete")},D=e=>{let{rootId:t,items:r,containers:a,trashable:i=!0,onRemove:d,Item:c,containerWidth:s=800,rowHeight:l=40,gridTracks:v=12,gutter:x=4,allowOverlap:D=!1,compactType:P="vertical",maxRows:R=3e5,Container:_=f.A,onDragEnd:T,containerDndProps:O,itemProps:B,updateOnNewProps:H=!1,rearrangeable:N=!0}=e;const{active:L}=(0,h.fF)(),F=(0,o.useRef)(null),[W,M]=(0,o.useState)((()=>(a||Object.keys(r)).reduce(((e,t)=>(e[t]=(0,b.oE)((0,b.Su)(r[t]),P,v),e)),{})),{}),[j,z]=(0,o.useState)((()=>a||Object.keys(W)));(0,u.A)((()=>{M((a||Object.keys(r)).reduce(((e,t)=>(e[t]=(0,b.oE)((0,b.Su)(r[t]),P,v),e)),{}))}),[v]),(0,u.A)((()=>{H&&((0,g.Ay)(r,W)||(M((a||Object.keys(r)).reduce(((e,t)=>(e[t]=(0,b.oE)((0,b.Su)(r[t]),P,v),e)),{})),z(a)))}),[a,r]);const G=null===L||void 0===L?void 0:L.isContainer,[U,q]=(0,o.useState)(null),[J,Z]=(0,o.useState)(null),$=(0,o.useRef)(null),K=e=>e in W?e:null,Q=()=>{U&&M(U),q(null),Z(null),$.current=null},Y=()=>{const e=Object.keys(W),t=e[e.length-1];return String.fromCharCode(t.charCodeAt(0)+1)},V=e=>{let{active:t}=e;const{isContainer:r}=t.data.current;q(W),r||Z(W)};return(0,o.useLayoutEffect)((()=>{if(L)return V({active:L}),Q}),[]),(0,h.E5)({onDragStart:V,onDragMove:e=>{let{active:t,over:r,collisions:n}=e;const{isResizer:o,isContainer:a,itemId:i,itemContainerId:d}=t.data.current;if(a||!J)return;const{initial:c,translated:u}=t.rect.current;let g=(0,b.Su)(J[d]);const m=!J[d],h=(0,b.GN)(m?J:g,i,m)||(0,b.lc)(t.data.current);if(!h||!h.width)return;const p=null===r||void 0===r?void 0:r.id;if(o){if(!p)return;const e=r.rect.width+(u.right-c.right),t=r.rect.height+(u.bottom-c.bottom);let{width:o,height:a}=(0,I.tr)({gutter:x,maxRows:R,gridTracks:v,rowHeight:l,containerWidth:s},e,t,h);if(h.width===o&&h.height===a)return;if(!n)return;return g=g.map((e=>e.id===h.id?{...h,width:o,height:a}:e)),n=n.filter((e=>e.id!==h.id)),g=(0,b.oE)(g,P,v),$.current={...h,itemContainerId:d},void Z((e=>({...e,[d]:[...g]})))}if(p===k)return void Z(U);if(!N)return;const f=K(d),y=K(p)||r&&K(r.data.current.itemContainerId)||f;if(!y)return;if(y&&y===f||(g=[...J[y],h]),!n)return;const E=n.find((e=>e.id===y));if(!E)return;let{left:C,top:w}=(0,I.zA)({gutter:x,maxRows:R,gridTracks:v,rowHeight:l,containerWidth:s},u.top-E.data.droppableContainer.rect.current.top,u.left-E.data.droppableContainer.rect.current.left,h);if(h.top===w&&h.left===C&&f===y)return;g=(0,b.Pe)(g,h,C,w,!0,!1,P,v,D),g=(0,b.oE)(g,P,v);const A=y!==f;A&&(F.current=t.itemContainerId),$.current={...h,itemContainerId:y},Z((e=>({...e,[y]:g.filter((e=>!!e)),...A&&!!e[d]&&{[d]:(0,b.oE)(e[d].filter((e=>e.id!==h.id)),P,v)}})))},onDragEnd:e=>{let{active:t,over:r}=e;if(!J)return;const{isResizer:n,isItem:o}=t.data.current,a=null===r||void 0===r?void 0:r.id;if(null===a)return void Z(null);if(a===k)return M((e=>({...e,[t.containerId]:(0,b.oE)(e[t.containerId].filter((e=>{let{id:r}=e;return r!==t.itemId})),P,v)}))),void Z(null);if(o||n)return J&&M(J),Z(null),void T(J,$.current,j);t.id in W&&null!==r&&void 0!==r&&r.id&&z((e=>{const n=e.indexOf(t.id),o=e.indexOf(r.id),a=(0,p.be)(e,n,o);return T(J,$.current,a),a}));const i=K(t.id);if(i)if(a!==A)J&&M(J),Z(null),T(J,$.current,j);else{const e=Y();(0,m.unstable_batchedUpdates)((()=>{z((t=>[...t,e])),M((r=>({...r,[i]:r[i].filter((e=>e!==t.itemId)),[e]:[t.id]})))}))}},onDragCancel:Q}),J||W?o.createElement(o.Fragment,null,o.createElement(p.gB,{items:[...j,A],strategy:p._G},o.createElement(C,{rootId:t,containers:j,Container:_,containerWidth:s,isSortingContainer:G,items:J||W,transforming:null!==J,Item:c,onContainerRemove:e=>{z((t=>t.filter((t=>t!==e))))},onRemove:d,rowHeight:l,gridTracks:v,gutter:x,itemProps:B,containerDndProps:O})),(0,m.createPortal)(o.createElement(h.Hd,{adjustScale:!1,dropAnimation:w},L&&L.data.current.rootId===t?L.data.current.isContainer?(X=L.data.current,o.createElement(E,{rootId:t,id:X,items:J||W,containerWidth:s,rowHeight:l,gutter:x,Component:_,Item:c,gridTracks:v,containerDndProps:O,itemProps:B,dragOverlay:!0})):L.data.current.isItem?(e=>{const r=(J||W)[e.itemContainerId];if(!r)return null;const a=r.find((t=>t.id===e.itemId));return a?o.createElement(y.A,(0,n.A)({rootId:t},a,{containerId:e.itemContainerId,Item:c,onRemove:d,draggable:!0,containerWidth:s,rowHeight:l,gridTracks:v,gutter:x,dragOverlay:!0,itemProps:B})):null})(L.data.current):null:null),document.body),i&&L&&(L.isContainer||L.isItem)?o.createElement(S,{id:k}):null):null;var X},P=a.default.div.withConfig({displayName:"gridLayout__Div",componentId:"sc-jna1fu-0"})(["position:relative;"]),R=(0,o.forwardRef)(((e,t)=>{let{id:r,onRemove:a,children:c,attributes:s,listeners:l,itemProps:u={},itemProps:{dashboardId:g},style:m,dragOverlay:h,...p}=e;(0,d.QZ)(g,r);return o.createElement(i.Flex,(0,n.A)({},p,{ref:t,column:!0,flex:!0,round:!0,background:"mainBackground",padding:[3],gap:2}),o.createElement(P,{style:m},c))})),_=e=>{let{id:t,Component:r,containerWidth:a,onActiveSubMenuId:u,onActiveMenuGroupId:g,...m}=e;const[h,p]=(0,d.B1)(t),[f,b]=(0,d.Ix)(t),I=(0,s.A)("(max-width: 767px)"),v=(0,c.A)(),y=(0,o.useRef)(),x=(0,o.useMemo)((()=>(y.current&&y.current.cancel(),y.current=(0,l.A)(),()=>{})),[h,u,g]);return o.createElement(i.Flex,{ref:v,column:!0,overflow:{vertical:"auto"},flex:"1","data-testid":"dashboardGrid",height:"100%",onScroll:x},o.createElement(D,(0,n.A)({rootId:t,key:t,Container:R,onDragEnd:(e,t,r)=>{p(e),b(r)},containers:f,items:h,containerWidth:a-(I?16:26)},m,{Item:r,gridTracks:12,itemProps:{dashboardId:t},containerDndProps:{droppable:!0},updateOnNewProps:!0})))};var T=r(27078),O=r(58388),B=r(28973),H=r(80925);const N=(0,a.default)(i.Flex).attrs((e=>({height:"100%",background:"mainChartBg",round:!0,...e}))).withConfig({displayName:"container__Card",componentId:"sc-esi601-0"})(["",""],(e=>{let{dragging:t,theme:r}=e;return t&&"\n &:before {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: ".concat((0,i.getRgbColor)("primary",.2)({theme:r}),";\n z-index: 10;\n backdrop-filter: blur(3px);\n }\n\n ")}));var L=r(4967),F=r(36196);const W={},M=(0,o.memo)((e=>{let{dashboardId:t,id:r,handleProps:a,listeners:i,attributes:d,style:c,dragging:s,dragOverlay:l,...g}=e;const m=(0,H.e)(),{nodesScope:h,contextScope:p,...f}=(0,O.bE)(t,r)||W,b=(0,O.v_)(t,r),I=(0,o.useMemo)((()=>{const e=(0,T.My)(m,t);let n=e.getNode({id:l?"dragOverlay-".concat(r):r});if(n)return n;const[o]=p;return n=m.makeChart({attributes:{...(0,L.L)(o),id:l?"dragOverlay-".concat(r):r,cardId:r,dashboardId:t,contextScope:p,...f,...!!f.nodeId&&!h&&{nodesScope:[f.nodeId]},toolboxProps:{drag:{...a,...i,...d}}},makeTrack:T.qh}),e.appendChild(n),n}),[t,r]);return(0,u.A)((()=>{I.updateAttributes({height:c.height,width:c.width}),I.trigger("resize")}),[I,c.height,c.width]),(0,u.A)((()=>{I.updateAttributes({toolboxProps:{drag:{...a,...i,...d,dragging:s}}})}),[s]),(0,o.useLayoutEffect)((()=>(0,B.unregister)(I.onAttributesChange(["aggregationMethod","groupBy","groupByLabel","postAggregationMethod","postGroupBy","postGroupByLabel","groupingMethod","groupingTime","chartType","chartLibrary","selectedDimensions","selectedLabels","selectedNodes","selectedInstances","sparkline","selectedLegendDimensions","showingInfo","dimensionsSortBy","instancesSortBy","nodesSortBy","groupBySortBy","labelsSortBy","dimensionsSort","nodesExpanded","groupByExpanded","labelsExpanded","expanded","staticZones","title","description","showPostAggregations"],((e,t,r)=>b((t=>({...t,[r]:e}))))))),[I,b]),(0,u.A)((()=>{I.updateAttributes(f)}),[f]),o.createElement(N,(0,n.A)({"data-testid":"chartCard-".concat((f.contextScope||[]).join(",")),height:c.height,width:"100%"},g,{dragging:s}),o.createElement(F.A,{chart:I,"data-chartid":l?"dragOverlay-".concat(r):r,"data-track":I.track("container"),height:c.height,width:"100%"}))})),j=M;var z=r(46741),G=r(58384),U=r(67544);const q="text",J="customDashboard",Z=e=>{let{dashboardId:t,id:r,onClick:n}=e;const a=(0,O.bE)(t,r,"editing"),i=(0,O.v_)(t,r,"editing");return o.createElement(G.t,{icon:"pencilSolid",onClick:()=>{n(),i(!0)},"data-ga":"".concat(q,"-reset::").concat(J),"data-testid":"textCard-edit",disabled:a},"Edit")},$=e=>{let{dashboardId:t,id:r}=e;const n=(0,U.c6)(t,r);return o.createElement(G.t,{icon:"trashcan",onClick:n,"data-ga":"".concat(q,"-reset::").concat(J),"data-testid":"textCard-remove"},"Remove")},K=e=>{let{dashboardId:t,id:r,children:a,...i}=e;return o.createElement(o.Fragment,null,o.createElement(G.A,(0,n.A)({category:q,context:J,testId:"chartTextDropdown"},i),(e=>{let{close:n}=e;return o.createElement(o.Fragment,null,o.createElement(Z,{dashboardId:t,id:r,onClick:n}),o.createElement($,{dashboardId:t,id:r}))})),a)};r(25440);const Q=(0,a.default)(i.Flex).attrs({as:"form",column:!0,flex:!0,gap:2,height:"100%",padding:[0,0,2],onMouseDown:e=>e.stopPropagation()}).withConfig({displayName:"form__CardContent",componentId:"sc-3tcqxu-0"})(["cursor:auto;"]),Y=(0,a.default)(i.Box).attrs((e=>({as:"textarea",background:"inputBg",height:"100%",round:!0,border:!0,padding:[2],...e}))).withConfig({displayName:"form__Textarea",componentId:"sc-3tcqxu-1"})(["resize:none;font-size:12px;color:",";"],(0,i.getColor)("text")),V=(0,o.memo)((e=>{let{dashboardId:t,id:r}=e;const n=(0,O.bE)(t,r,"text"),a=(0,O.v_)(t,r,"editing"),d=(0,O.v_)(t,r,"text"),[c,s]=(0,o.useState)(n);return o.createElement(Q,{"data-testid":"textCardForm"},o.createElement(Y,{placeholder:"Add some text",value:c.replace(/<\/?[^>]+(>|$)/g,""),onChange:e=>s(e.target.value)}),o.createElement(i.Flex,{position:"absolute",right:"24px",bottom:0,gap:1},o.createElement(i.IconButton,{icon:"check",small:!0,padding:[0],onClick:()=>{d(c),a(!1)},"data-testid":"textCardForm-cancel",neutral:!1,flavour:"default"}),o.createElement(i.IconButton,{icon:"x",small:!0,padding:[0],onClick:()=>a(!1),"data-testid":"textCardForm-done",flavour:"default"})))})),X={h1:i.H2,h2:i.H4,text:i.Text,micro:i.TextNano},ee=e=>{let{dashboardId:t,id:r}=e;const n=(0,O.bE)(t,r,"text")||"",a=(0,O.bE)(t,r,"textType"),d=X[a]||X.text;return o.createElement(i.Box,{"data-testid":"textCardContent"},o.createElement(d,{whiteSpace:"pre-wrap"},n.replace(/<\/?[^>]+(>|$)/g,"")))},te=(0,a.default)(i.Flex).attrs({column:!0}).withConfig({displayName:"text__StyledOptions",componentId:"sc-1f67m9f-0"})([""]),re=e=>{let{dragging:t,...r}=e;const a=(0,z.JT)("dashboard:Update");return o.createElement(i.IconButton,(0,n.A)({position:"absolute",top:0,right:0,padding:[0],width:"12px",height:"12px",icon:"rearrange",title:"Drag & drop","data-testid":"text-drag",disabled:!a,cursor:t?"grabbing":"grab"},r))},ne=["h1","h2","text","micro"],oe=e=>{let{id:t,dashboardId:r}=e;const n=(0,z.JT)("dashboard:Update"),a=(0,O.bE)(r,t,"textType")||"text",d=(0,O.v_)(r,t,"textType");return o.createElement(i.IconButton,{padding:[0],width:"12px",height:"12px",icon:"text_add",title:"Change text component","data-testid":"text-component",disabled:!n,onClick:()=>{const e=ne.findIndex((e=>e===a)),t=ne[e>ne.length-2?0:e+1];d(t)}})},ae=(0,a.default)(N).withConfig({displayName:"text__StyledCard",componentId:"sc-1f67m9f-1"})(["","{opacity:0;}&:hover{border:1px solid ",";}&:hover ","{opacity:1;}"],te,(0,i.getColor)("border"),te),ie={chart:j,text:(0,o.memo)((e=>{let{dashboardId:t,id:r,listeners:a,handleProps:i,dragging:d}=e;const c=(0,O.bE)(t,r,"editing");return o.createElement(ae,{"data-testid":"textCard",alignItems:"start",overflow:"hidden",dragging:d},o.createElement(te,null,o.createElement(K,{dashboardId:t,id:r}),o.createElement(oe,{dashboardId:t,id:r})),c&&o.createElement(V,{dashboardId:t,id:r}),!c&&o.createElement(ee,{dashboardId:t,id:r}),o.createElement(re,(0,n.A)({},a,i,{dragging:d})))})),placeholder:(0,o.memo)((()=>o.createElement(N,{column:!0,"data-testid":"placeholderCard",background:"secondaryHighlight",width:"100%"})))},de=(0,o.forwardRef)(((e,t)=>{let{dashboardId:r,id:a,attributes:i,style:d,resizeHandle:c,...s}=e;const l=(0,O.bE)(r,a,"type")||"placeholder",u=ie[l]||ie.chart;return o.createElement("div",(0,n.A)({ref:t},i,{style:d}),o.createElement(u,(0,n.A)({dashboardId:r,id:a,style:d},s)),c)})),ce=(0,o.memo)((e=>{let{id:t,...r}=e;return(0,T.Ay)(t),o.createElement(_,(0,n.A)({id:t,Component:de},r))}))}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js b/src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js deleted file mode 100644 index b4d1cea53..000000000 --- a/src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt */ -!function(){try{var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="44385583-8059-4723-827a-84811c072356",t._sentryDebugIdIdentifier="sentry-dbid-44385583-8059-4723-827a-84811c072356")}catch(t){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6121],{51891:(t,e,o)=>{o.d(e,{A:()=>Jt});var n=o(66118),r=o(12020);const i={modes:{point:(t,e)=>a(t,e,{intersect:!0}),nearest:(t,e,o)=>function(t,e,o){let n=Number.POSITIVE_INFINITY;return a(t,e,o).reduce(((t,i)=>{const s=i.getCenterPoint(),a=function(t,e,o){if("x"===o)return{x:t.x,y:e.y};if("y"===o)return{x:e.x,y:t.y};return e}(e,s,o.axis),d=(0,r.aE)(e,a);return dt._index-e._index)).slice(0,1)}(t,e,o),x:(t,e,o)=>a(t,e,{intersect:o.intersect,axis:"x"}),y:(t,e,o)=>a(t,e,{intersect:o.intersect,axis:"y"})}};function s(t,e,o){return(i.modes[o.mode]||i.modes.nearest)(t,e,o)}function a(t,e,o){return t.visibleElements.filter((t=>o.intersect?t.inRange(e.x,e.y):function(t,e,o){return"x"!==o&&"y"!==o?t.inRange(e.x,e.y,"x",!0)||t.inRange(e.x,e.y,"y",!0):t.inRange(e.x,e.y,o,!0)}(t,e,o.axis)))}const d=(t,e)=>e>t||t.length>e.length&&t.slice(0,e.length)===e,l=.001,c=(t,e,o)=>Math.min(o,Math.max(e,t));function h(t,e,o){for(const n of Object.keys(t))t[n]=c(t[n],e,o);return t}function u(t,{x:e,y:o,x2:n,y2:r},i,s){const a=s/2,d=t.x>=e-a-l&&t.x<=n+a+l,c=t.y>=o-a-l&&t.y<=r+a+l;return"x"===i?d:("y"===i||d)&&c}function f(t,e){const{centerX:o,centerY:n}=t.getProps(["centerX","centerY"],e);return{x:o,y:n}}const x=t=>"string"===typeof t&&t.endsWith("%"),y=t=>parseFloat(t)/100,p=t=>c(y(t),0,1);function b(t,e){return"start"===e?0:"end"===e?t:x(e)?p(e)*t:t/2}function g(t,e,o=!0){return"number"===typeof e?e:x(e)?(o?p(e):y(e))*t:t}function m(t,e="center"){return(0,r.i)(t)?{x:(0,r.v)(t.x,e),y:(0,r.v)(t.y,e)}:{x:t=(0,r.v)(t,e),y:t}}function v(t){return t&&((0,r.h)(t.xValue)||(0,r.h)(t.yValue))}function w(t,e,o,n=!1){const i=o.init;if(i)return!0===i?S(e,n):function(t,e,o){if(!0===o)return S(t,e);if((0,r.i)(o))return o}(e,n,(0,r.Q)(i,[{chart:t,properties:e,options:o}]))}function M(t,e,o){let n=!1;return e.forEach((e=>{(0,r.a7)(t[e])?(n=!0,o[e]=t[e]):(0,r.h)(o[e])&&delete o[e]})),n}function S({centerX:t,centerY:e},o){return o?{centerX:t,centerY:e,radius:0,width:0,height:0}:{x:t,y:e,x2:t,y2:e,width:0,height:0}}const k=new Map,C=t=>t.reduce((function(t,e){return t+=e.string}),"");function P(t){if(t&&"object"===typeof t){const e=t.toString();return"[object HTMLImageElement]"===e||"[object HTMLCanvasElement]"===e}}function D(t,{x:e,y:o},n){n&&(t.translate(e,o),t.rotate((0,r.t)(n)),t.translate(-e,-o))}function j(t,e){if(e&&e.borderWidth)return t.lineCap=e.borderCapStyle,t.setLineDash(e.borderDash),t.lineDashOffset=e.borderDashOffset,t.lineJoin=e.borderJoinStyle,t.lineWidth=e.borderWidth,t.strokeStyle=e.borderColor,!0}function T(t,e){t.shadowColor=e.backgroundShadowColor,t.shadowBlur=e.shadowBlur,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY}function O(t,e){const o=e.content;if(P(o))return{width:g(o.width,e.width),height:g(o.height,e.height)};const n=e.font,i=(0,r.b)(n)?n.map((t=>(0,r.a0)(t))):[(0,r.a0)(n)],s=e.textStrokeWidth,a=(0,r.b)(o)?o:[o],d=a.join()+C(i)+s+(t._measureText?"-spriting":"");return k.has(d)||k.set(d,function(t,e,o,n){t.save();const r=e.length;let i=0,s=n;for(let a=0;a(0,r.a0)(t))):[(0,r.a0)(s)],d=o.color,l=(0,r.b)(d)?d:[d],h=function(t,e){const{x:o,width:n}=t,r=e.textAlign;return"center"===r?o+n/2:"end"===r||"right"===r?o+n:o}(e,o),u=e.y+o.textStrokeWidth/2;t.save(),t.textBaseline="middle",t.textAlign=o.textAlign,function(t,e){if(e.textStrokeWidth>0)return t.lineJoin="round",t.miterLimit=2,t.lineWidth=e.textStrokeWidth,t.strokeStyle=e.textStrokeColor,!0}(t,o)&&function(t,{x:e,y:o},n,r){t.beginPath();let i=0;n.forEach((function(n,s){const a=r[Math.min(s,r.length-1)],d=a.lineHeight;t.font=a.string,t.strokeText(n,e,o+d/2+i),i+=d})),t.stroke()}(t,{x:h,y:u},i,a),function(t,{x:e,y:o},n,{fonts:r,colors:i}){let s=0;n.forEach((function(n,a){const d=i[Math.min(a,i.length-1)],l=r[Math.min(a,r.length-1)],c=l.lineHeight;t.beginPath(),t.font=l.string,t.fillStyle=d,t.fillText(n,e,o+c/2+s),s+=c,t.fill()}))}(t,{x:h,y:u},i,{fonts:a,colors:l}),t.restore()}function I(t,e,o,n){const{radius:i,options:s}=e,a=s.pointStyle,d=s.rotation;let l=(d||0)*r.b3;if(P(a))return t.save(),t.translate(o,n),t.rotate(l),t.drawImage(a,-a.width/2,-a.height/2,a.width,a.height),void t.restore();(t=>isNaN(t)||t<=0)(i)||function(t,{x:e,y:o,radius:n,rotation:i,style:s,rad:a}){let d,l,c,h;switch(t.beginPath(),s){default:t.arc(e,o,n,0,r.T),t.closePath();break;case"triangle":t.moveTo(e+Math.sin(a)*n,o-Math.cos(a)*n),a+=r.b5,t.lineTo(e+Math.sin(a)*n,o-Math.cos(a)*n),a+=r.b5,t.lineTo(e+Math.sin(a)*n,o-Math.cos(a)*n),t.closePath();break;case"rectRounded":h=.516*n,c=n-h,d=Math.cos(a+r.b4)*c,l=Math.sin(a+r.b4)*c,t.arc(e-d,o-l,h,a-r.P,a-r.H),t.arc(e+l,o-d,h,a-r.H,a),t.arc(e+d,o+l,h,a,a+r.H),t.arc(e-l,o+d,h,a+r.H,a+r.P),t.closePath();break;case"rect":if(!i){c=Math.SQRT1_2*n,t.rect(e-c,o-c,2*c,2*c);break}a+=r.b4;case"rectRot":d=Math.cos(a)*n,l=Math.sin(a)*n,t.moveTo(e-d,o-l),t.lineTo(e+l,o-d),t.lineTo(e+d,o+l),t.lineTo(e-l,o+d),t.closePath();break;case"crossRot":a+=r.b4;case"cross":d=Math.cos(a)*n,l=Math.sin(a)*n,t.moveTo(e-d,o-l),t.lineTo(e+d,o+l),t.moveTo(e+l,o-d),t.lineTo(e-l,o+d);break;case"star":d=Math.cos(a)*n,l=Math.sin(a)*n,t.moveTo(e-d,o-l),t.lineTo(e+d,o+l),t.moveTo(e+l,o-d),t.lineTo(e-l,o+d),a+=r.b4,d=Math.cos(a)*n,l=Math.sin(a)*n,t.moveTo(e-d,o-l),t.lineTo(e+d,o+l),t.moveTo(e+l,o-d),t.lineTo(e-l,o+d);break;case"line":d=Math.cos(a)*n,l=Math.sin(a)*n,t.moveTo(e-d,o-l),t.lineTo(e+d,o+l);break;case"dash":t.moveTo(e,o),t.lineTo(e+Math.cos(a)*n,o+Math.sin(a)*n)}t.fill()}(t,{x:o,y:n,radius:i,rotation:d,style:a,rad:l})}const X={xScaleID:{min:"xMin",max:"xMax",start:"left",end:"right",startProp:"x",endProp:"x2"},yScaleID:{min:"yMin",max:"yMax",start:"bottom",end:"top",startProp:"y",endProp:"y2"}};function E(t,e,o){return e="number"===typeof e?e:t.parse(e),(0,r.g)(e)?t.getPixelForValue(e):o}function W(t,e,o){const n=e[o];if(n||"scaleID"===o)return n;const r=o.charAt(0),i=Object.values(t).filter((t=>t.axis&&t.axis===r));return i.length?i[0].id:r}function R(t,e){if(t){const o=t.options.reverse;return{start:E(t,e.min,o?e.end:e.start),end:E(t,e.max,o?e.start:e.end)}}}function _(t,e){const{chartArea:o,scales:n}=t,r=n[W(n,e,"xScaleID")],i=n[W(n,e,"yScaleID")];let s=o.width/2,a=o.height/2;return r&&(s=E(r,e.xValue,r.left+r.width/2)),i&&(a=E(i,e.yValue,i.top+i.height/2)),{x:s,y:a}}function z(t,e){const o=t.scales,n=o[W(o,e,"xScaleID")],r=o[W(o,e,"yScaleID")];if(!n&&!r)return{};let{left:i,right:s}=n||t.chartArea,{top:a,bottom:d}=r||t.chartArea;const l=$(n,{min:e.xMin,max:e.xMax,start:i,end:s});i=l.start,s=l.end;const c=$(r,{min:e.yMin,max:e.yMax,start:d,end:a});return a=c.start,d=c.end,{x:i,y:a,x2:s,y2:d,width:s-i,height:d-a,centerX:i+(s-i)/2,centerY:a+(d-a)/2}}function H(t,e){if(!v(e)){const o=z(t,e);let n=e.radius;n&&!isNaN(n)||(n=Math.min(o.width,o.height)/2,e.radius=n);const r=2*n,i=o.centerX+e.xAdjust,s=o.centerY+e.yAdjust;return{x:i-n,y:s-n,x2:i+n,y2:s+n,centerX:i,centerY:s,width:r,height:r,radius:n}}return function(t,e){const o=_(t,e),n=2*e.radius;return{x:o.x-e.radius+e.xAdjust,y:o.y-e.radius+e.yAdjust,x2:o.x+e.radius+e.xAdjust,y2:o.y+e.radius+e.yAdjust,centerX:o.x+e.xAdjust,centerY:o.y+e.yAdjust,radius:e.radius,width:n,height:n}}(t,e)}function N(t,e){const{scales:o,chartArea:n}=t,r=o[e.scaleID],i={x:n.left,y:n.top,x2:n.right,y2:n.bottom};return r?function(t,e,o){const n=E(t,o.value,NaN),r=E(t,o.endValue,n);t.isHorizontal()?(e.x=n,e.x2=r):(e.y=n,e.y2=r)}(r,i,e):function(t,e,o){for(const n of Object.keys(X)){const r=t[W(t,o,n)];if(r){const{min:t,max:i,start:s,end:a,startProp:d,endProp:l}=X[n],c=R(r,{min:o[t],max:o[i],start:r[s],end:r[a]});e[d]=c.start,e[l]=c.end}}}(o,i,e),i}function V(t,e,o){const n=z(t,e);return n.initProperties=w(t,n,e,o),n.elements=[{type:"label",optionScope:"label",properties:L(t,n,e),initProperties:n.initProperties}],n}function $(t,e){const o=R(t,e)||e;return{start:Math.min(o.start,o.end),end:Math.max(o.start,o.end)}}function B(t,e){const{start:o,end:n,borderWidth:r}=t,{position:i,padding:{start:s,end:a},adjust:d}=e;return o+r/2+d+b(n-r-o-s-a-e.size,i)}function L(t,e,o){const n=o.label;n.backgroundColor="transparent",n.callout.display=!1;const i=m(n.position),s=(0,r.E)(n.padding),a=O(t.ctx,n),d=function({properties:t,options:e},o,n,r){const{x:i,x2:s,width:a}=t;return B({start:i,end:s,size:a,borderWidth:e.borderWidth},{position:n.x,padding:{start:r.left,end:r.right},adjust:e.label.xAdjust,size:o.width})}({properties:e,options:o},a,i,s),l=function({properties:t,options:e},o,n,r){const{y:i,y2:s,height:a}=t;return B({start:i,end:s,size:a,borderWidth:e.borderWidth},{position:n.y,padding:{start:r.top,end:r.bottom},adjust:e.label.yAdjust,size:o.height})}({properties:e,options:o},a,i,s),c=a.width+s.width,h=a.height+s.height;return{x:d,y:l,x2:d+c,y2:l+h,width:c,height:h,centerX:d+c/2,centerY:l+h/2,rotation:n.rotation}}function J(t,e,o){const n=Math.cos(o),r=Math.sin(o),i=e.x,s=e.y;return{x:i+n*(t.x-i)-r*(t.y-s),y:s+r*(t.x-i)+n*(t.y-s)}}const F=["enter","leave"],Q=F.concat("click");function U(t,e,o){if(t.listened)switch(e.type){case"mousemove":case"mouseout":return function(t,e,o){if(!t.moveListened)return;let n;n="mousemove"===e.type?s(t,e,o.interaction):[];const r=t.hovered;t.hovered=n;const i={state:t,event:e};let a=q(i,"leave",r,n);return q(i,"enter",n,r)||a}(t,e,o);case"click":return function(t,e,o){const n=t.listeners,r=s(t,e,o.interaction);let i;for(const s of r)i=G(s.options.click||n.click,s,e)||i;return i}(t,e,o)}}function q({state:t,event:e},o,n,r){let i;for(const s of n)r.indexOf(s)<0&&(i=G(s.options[o]||t.listeners[o],s,e)||i);return i}function G(t,e,o){return!0===(0,r.Q)(t,[e.$context,o])}const K=["afterDraw","beforeDraw"];function Z(t,e,o){if(t.hooked){const n=e.options[o]||t.hooks[o];return(0,r.Q)(n,[e.$context])}}function tt(t,e,o){const n=function(t,e,o){const n=e.axis,i=e.id,s=n+"ScaleID",a={min:(0,r.v)(e.min,Number.NEGATIVE_INFINITY),max:(0,r.v)(e.max,Number.POSITIVE_INFINITY)};for(const r of o)r.scaleID===i?rt(r,e,["value","endValue"],a):W(t,r,s)===i&&rt(r,e,[n+"Min",n+"Max",n+"Value"],a);return a}(t.scales,e,o);let i=et(e,n,"min","suggestedMin");i=et(e,n,"max","suggestedMax")||i,i&&(0,r.a7)(e.handleTickRangeOptions)&&e.handleTickRangeOptions()}function et(t,e,o,n){if((0,r.g)(e[o])&&!function(t,e,o){return(0,r.h)(t[e])||(0,r.h)(t[o])}(t.options,o,n)){const n=t[o]!==e[o];return t[o]=e[o],n}}function ot(t,e){for(const o of["scaleID","xScaleID","yScaleID"]){const n=W(e,t,o);n&&!e[n]&&nt(t,o)&&console.warn(`No scale found with id '${n}' for annotation '${t.id}'`)}}function nt(t,e){if("scaleID"===e)return!0;const o=e.charAt(0);for(const n of["Min","Max","Value"])if((0,r.h)(t[o+n]))return!0;return!1}function rt(t,e,o,n){for(const i of o){const o=t[i];if((0,r.h)(o)){const t=e.parse(o);n.min=Math.min(n.min,t),n.max=Math.max(n.max,t)}}}class it extends n.Hg{inRange(t,e,o,n){const{x:i,y:s}=J({x:t,y:e},this.getCenterPoint(n),(0,r.t)(-this.options.rotation));return u({x:i,y:s},this.getProps(["x","y","x2","y2"],n),o,this.options.borderWidth)}getCenterPoint(t){return f(this,t)}draw(t){t.save(),D(t,this.getCenterPoint(),this.options.rotation),A(t,this,this.options),t.restore()}get label(){return this.elements&&this.elements[0]}resolveElementProperties(t,e){return V(t,e)}}it.id="boxAnnotation",it.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:0,borderShadowColor:"transparent",borderWidth:1,display:!0,init:void 0,label:{backgroundColor:"transparent",borderWidth:0,callout:{display:!1},color:"black",content:null,display:!1,drawTime:void 0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:"bold"},height:void 0,opacity:void 0,padding:6,position:"center",rotation:void 0,textAlign:"start",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,yAdjust:0,z:void 0},rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xMax:void 0,xMin:void 0,xScaleID:void 0,yMax:void 0,yMin:void 0,yScaleID:void 0,z:0},it.defaultRoutes={borderColor:"color",backgroundColor:"color"},it.descriptors={label:{_fallback:!0}};const st=["left","bottom","top","right"];class at extends n.Hg{inRange(t,e,o,n){const{x:i,y:s}=J({x:t,y:e},this.getCenterPoint(n),(0,r.t)(-this.rotation));return u({x:i,y:s},this.getProps(["x","y","x2","y2"],n),o,this.options.borderWidth)}getCenterPoint(t){return f(this,t)}draw(t){const e=this.options,o=!(0,r.h)(this._visible)||this._visible;e.display&&e.content&&o&&(t.save(),D(t,this.getCenterPoint(),this.rotation),function(t,e){const{pointX:o,pointY:n,options:i}=e,s=i.callout,a=s&&s.display&&function(t,e){const o=e.position;if(st.includes(o))return o;return function(t,e){const{x:o,y:n,x2:i,y2:s,width:a,height:d,pointX:l,pointY:c,centerX:h,centerY:u,rotation:f}=t,x={x:h,y:u},y=e.start,p=g(a,y),b=g(d,y),m=[o,o+p,o+p,i],v=[n+b,s,n,s],w=[];for(let g=0;g<4;g++){const t=J({x:m[g],y:v[g]},x,(0,r.t)(f));w.push({position:st[g],distance:(0,r.aE)(t,{x:l,y:c})})}return w.sort(((t,e)=>t.distance-e.distance))[0].position}(t,e)}(e,s);if(!a||function(t,e,o){const{pointX:n,pointY:r}=t,i=e.margin;let s=n,a=r;"left"===o?s+=i:"right"===o?s-=i:"top"===o?a+=i:"bottom"===o&&(a-=i);return t.inRange(s,a)}(e,s,a))return;t.save(),t.beginPath();const d=j(t,s);if(!d)return t.restore();const{separatorStart:l,separatorEnd:c}=function(t,e){const{x:o,y:n,x2:r,y2:i}=t,s=function(t,e){const{width:o,height:n,options:r}=t,i=r.callout.margin+r.borderWidth/2;if("right"===e)return o+i;if("bottom"===e)return n+i;return-i}(t,e);let a,d;"left"===e||"right"===e?(a={x:o+s,y:n},d={x:a.x,y:i}):(a={x:o,y:n+s},d={x:r,y:a.y});return{separatorStart:a,separatorEnd:d}}(e,a),{sideStart:h,sideEnd:u}=function(t,e,o){const{y:n,width:r,height:i,options:s}=t,a=s.callout.start,d=function(t,e){const o=e.side;if("left"===t||"top"===t)return-o;return o}(e,s.callout);let l,c;"left"===e||"right"===e?(l={x:o.x,y:n+g(i,a)},c={x:l.x+d,y:l.y}):(l={x:o.x+g(r,a),y:o.y},c={x:l.x,y:l.y+d});return{sideStart:l,sideEnd:c}}(e,a,l);(s.margin>0||0===i.borderWidth)&&(t.moveTo(l.x,l.y),t.lineTo(c.x,c.y));t.moveTo(h.x,h.y),t.lineTo(u.x,u.y);const f=J({x:o,y:n},e.getCenterPoint(),(0,r.t)(-e.rotation));t.lineTo(f.x,f.y),t.stroke(),t.restore()}(t,this),A(t,this,e),Y(t,function({x:t,y:e,width:o,height:n,options:i}){const s=i.borderWidth/2,a=(0,r.E)(i.padding);return{x:t+a.left+s,y:e+a.top+s,width:o-a.left-a.right-i.borderWidth,height:n-a.top-a.bottom-i.borderWidth}}(this),e),t.restore())}resolveElementProperties(t,e){let o;if(v(e))o=_(t,e);else{const{centerX:n,centerY:r}=z(t,e);o={x:n,y:r}}const n=(0,r.E)(e.padding),i=function(t,e,o,n){const r=e.width+n.width+o.borderWidth,i=e.height+n.height+o.borderWidth,s=m(o.position,"center"),a=dt(t.x,r,o.xAdjust,s.x),d=dt(t.y,i,o.yAdjust,s.y);return{x:a,y:d,x2:a+r,y2:d+i,width:r,height:i,centerX:a+r/2,centerY:d+i/2}}(o,O(t.ctx,e),e,n);return{initProperties:w(t,i,e),pointX:o.x,pointY:o.y,...i,rotation:e.rotation}}}function dt(t,e,o=0,n){return t-b(e,n)+o}at.id="labelAnnotation",at.defaults={adjustScaleRange:!0,backgroundColor:"transparent",backgroundShadowColor:"transparent",borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:0,borderShadowColor:"transparent",borderWidth:0,callout:{borderCapStyle:"butt",borderColor:void 0,borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:1,display:!1,margin:5,position:"auto",side:5,start:"50%"},color:"black",content:null,display:!0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:void 0},height:void 0,init:void 0,opacity:void 0,padding:6,position:"center",rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,textAlign:"center",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:void 0,xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:void 0,yValue:void 0,z:0},at.defaultRoutes={borderColor:"color"};const lt=(t,e,o)=>({x:t.x+o*(e.x-t.x),y:t.y+o*(e.y-t.y)}),ct=(t,e,o)=>lt(e,o,Math.abs((t-e.y)/(o.y-e.y))).x,ht=(t,e,o)=>lt(e,o,Math.abs((t-e.x)/(o.x-e.x))).y,ut=t=>t*t,ft=(t,e,o,n)=>(1-n)*(1-n)*t+2*(1-n)*n*e+n*n*o,xt=(t,e,o,n)=>({x:ft(t.x,e.x,o.x,n),y:ft(t.y,e.y,o.y,n)}),yt=(t,e,o,n)=>2*(1-n)*(e-t)+2*n*(o-e),pt=(t,e,o,n)=>-Math.atan2(yt(t.x,e.x,o.x,n),yt(t.y,e.y,o.y,n))+.5*r.P;class bt extends n.Hg{inRange(t,e,o,n){const r=this.options.borderWidth/2;if("x"!==o&&"y"!==o){const o={mouseX:t,mouseY:e},{path:i,ctx:s}=this;if(i){j(s,this.options);const{chart:r}=this.$context,a=t*r.currentDevicePixelRatio,d=e*r.currentDevicePixelRatio,l=s.isPointInStroke(i,a,d)||vt(this,o,n);return s.restore(),l}return function(t,{mouseX:e,mouseY:o},n=.001,r){const{x:i,y:s,x2:a,y2:d}=t.getProps(["x","y","x2","y2"],r),l=a-i,c=d-s,h=ut(l)+ut(c),u=0===h?-1:((e-i)*l+(o-s)*c)/h;let f,x;u<0?(f=i,x=s):u>1?(f=a,x=d):(f=i+u*l,x=s+u*c);return ut(e-f)+ut(o-x)<=n}(this,o,ut(r),n)||vt(this,o,n)}return function(t,{mouseX:e,mouseY:o},n,{hBorderWidth:r,useFinalPosition:i}){const s=((t,e,{x:o,y:n,x2:r,y2:i},s)=>"y"===s?{start:Math.min(n,i),end:Math.max(n,i),value:e}:{start:Math.min(o,r),end:Math.max(o,r),value:t})(e,o,t.getProps(["x","y","x2","y2"],i),n);return s.value>=s.start-r&&s.value<=s.end+r||vt(t,{mouseX:e,mouseY:o},i,n)}(this,{mouseX:t,mouseY:e},o,{hBorderWidth:r,useFinalPosition:n})}getCenterPoint(t){return f(this,t)}draw(t){const{x:e,y:o,x2:n,y2:i,cp:s,options:a}=this;if(t.save(),!j(t,a))return t.restore();T(t,a);const d=Math.sqrt(Math.pow(n-e,2)+Math.pow(i-o,2));if(a.curve&&s)return function(t,e,o,n){const{x:i,y:s,x2:a,y2:d,options:l}=e,{startOpts:c,endOpts:h,startAdjust:u,endAdjust:f}=St(e),x={x:i,y:s},y={x:a,y:d},p=pt(x,o,y,0),b=pt(x,o,y,1)-r.P,g=xt(x,o,y,u/n),m=xt(x,o,y,1-f/n),v=new Path2D;t.beginPath(),v.moveTo(g.x,g.y),v.quadraticCurveTo(o.x,o.y,m.x,m.y),t.shadowColor=l.borderShadowColor,t.stroke(v),e.path=v,e.ctx=t,Pt(t,g,{angle:p,adjust:u},c),Pt(t,m,{angle:b,adjust:f},h)}(t,this,s,d),t.restore();const{startOpts:l,endOpts:c,startAdjust:h,endAdjust:u}=St(this),f=Math.atan2(i-o,n-e);t.translate(e,o),t.rotate(f),t.beginPath(),t.moveTo(0+h,0),t.lineTo(d-u,0),t.shadowColor=a.borderShadowColor,t.stroke(),Ct(t,0,h,l),Ct(t,d,-u,c),t.restore()}get label(){return this.elements&&this.elements[0]}resolveElementProperties(t,e){const o=N(t,e),{x:n,y:i,x2:s,y2:a}=o,d=function({x:t,y:e,x2:o,y2:n},{top:r,right:i,bottom:s,left:a}){return!(ti&&o>i||es&&n>s)}(o,t.chartArea),l=d?function(t,e,o){const{x:n,y:r}=mt(t,e,o),{x:i,y:s}=mt(e,t,o);return{x:n,y:r,x2:i,y2:s,width:Math.abs(i-n),height:Math.abs(s-r)}}({x:n,y:i},{x:s,y:a},t.chartArea):{x:n,y:i,x2:s,y2:a,width:Math.abs(s-n),height:Math.abs(a-i)};if(l.centerX=(s+n)/2,l.centerY=(a+i)/2,l.initProperties=w(t,l,e),e.curve){const t={x:l.x,y:l.y},o={x:l.x2,y:l.y2};l.cp=function(t,e,o){const{x:n,y:r,x2:i,y2:s,centerX:a,centerY:d}=t,l=Math.atan2(s-r,i-n),c=m(e.controlPoint,0);return J({x:a+g(o,c.x,!1),y:d+g(o,c.y,!1)},{x:a,y:d},l)}(l,e,(0,r.aE)(t,o))}const c=function(t,e,o){const n=o.borderWidth,i=(0,r.E)(o.padding),s=O(t.ctx,o),a=s.width+i.width+n,d=s.height+i.height+n;return function(t,e,o,n){const{width:i,height:s,padding:a}=o,{xAdjust:d,yAdjust:l}=e,c={x:t.x,y:t.y},h={x:t.x2,y:t.y2},u="auto"===e.rotation?function(t){const{x:e,y:o,x2:n,y2:i}=t,s=Math.atan2(i-o,n-e);return s>r.P/2?s-r.P:sr&&(e=ht(r,{x:t,y:e},o),t=r),ei&&(t=ct(i,{x:t,y:e},o),e=i),{x:t,y:e}}function vt(t,{mouseX:e,mouseY:o},n,r){const i=t.label;return i.options.display&&i.inRange(e,o,r,n)}function wt(t,e,o,n){const{labelSize:r,padding:i}=e,s=t.w*n.dx,a=t.h*n.dy,d=s>0&&(r.w/2+i.left-n.x)/s,l=a>0&&(r.h/2+i.top-n.y)/a;return c(Math.max(d,l),0,.25)}function Mt(t,e){const{size:o,min:n,max:r,padding:i}=e,s=o/2;return o>r-n?(r+n)/2:(n>=t-i-s&&(t=n+i+s),r<=t+i+s&&(t=r-i-s),t)}function St(t){const e=t.options,o=e.arrowHeads&&e.arrowHeads.start,n=e.arrowHeads&&e.arrowHeads.end;return{startOpts:o,endOpts:n,startAdjust:kt(t,o),endAdjust:kt(t,n)}}function kt(t,e){if(!e||!e.display)return 0;const{length:o,width:n}=e,r=t.options.borderWidth/2,i={x:o,y:n+r},s={x:0,y:r};return Math.abs(ct(0,i,s))}function Ct(t,e,o,n){if(!n||!n.display)return;const{length:r,width:i,fill:s,backgroundColor:a,borderColor:d}=n,l=Math.abs(e-r)+o;t.beginPath(),T(t,n),j(t,n),t.moveTo(l,-i),t.lineTo(e+o,0),t.lineTo(l,i),!0===s?(t.fillStyle=a||d,t.closePath(),t.fill(),t.shadowColor="transparent"):t.shadowColor=n.borderShadowColor,t.stroke()}function Pt(t,{x:e,y:o},{angle:n,adjust:r},i){i&&i.display&&(t.save(),t.translate(e,o),t.rotate(n),Ct(t,0,-r,i),t.restore())}bt.defaults={adjustScaleRange:!0,arrowHeads:{display:!1,end:Object.assign({},gt),fill:!1,length:12,start:Object.assign({},gt),width:6},borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:2,curve:!1,controlPoint:{y:"-50%"},display:!0,endValue:void 0,init:void 0,label:{backgroundColor:"rgba(0,0,0,0.8)",backgroundShadowColor:"transparent",borderCapStyle:"butt",borderColor:"black",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderRadius:6,borderShadowColor:"transparent",borderWidth:0,callout:Object.assign({},at.defaults.callout),color:"#fff",content:null,display:!1,drawTime:void 0,font:{family:void 0,lineHeight:void 0,size:void 0,style:void 0,weight:"bold"},height:void 0,opacity:void 0,padding:6,position:"center",rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,textAlign:"center",textStrokeColor:void 0,textStrokeWidth:0,width:void 0,xAdjust:0,yAdjust:0,z:void 0},scaleID:void 0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,value:void 0,xMax:void 0,xMin:void 0,xScaleID:void 0,yMax:void 0,yMin:void 0,yScaleID:void 0,z:0},bt.descriptors={arrowHeads:{start:{_fallback:!0},end:{_fallback:!0},_fallback:!0}},bt.defaultRoutes={borderColor:"color"};class Dt extends n.Hg{inRange(t,e,o,n){const i=this.options.rotation,s=this.options.borderWidth;if("x"!==o&&"y"!==o)return function(t,e,o,n){const{width:i,height:s,centerX:a,centerY:d}=e,l=i/2,c=s/2;if(l<=0||c<=0)return!1;const h=(0,r.t)(o||0),u=n/2||0,f=Math.cos(h),x=Math.sin(h),y=Math.pow(f*(t.x-a)+x*(t.y-d),2),p=Math.pow(x*(t.x-a)-f*(t.y-d),2);return y/Math.pow(l+u,2)+p/Math.pow(c+u,2)<=1.0001}({x:t,y:e},this.getProps(["width","height","centerX","centerY"],n),i,s);const{x:a,y:d,x2:c,y2:h}=this.getProps(["x","y","x2","y2"],n),u=s/2,f="y"===o?{start:d,end:h}:{start:a,end:c},x=J({x:t,y:e},this.getCenterPoint(n),(0,r.t)(-i));return x[o]>=f.start-u-l&&x[o]<=f.end+u+l}getCenterPoint(t){return f(this,t)}draw(t){const{width:e,height:o,centerX:n,centerY:i,options:s}=this;t.save(),D(t,this.getCenterPoint(),s.rotation),T(t,this.options),t.beginPath(),t.fillStyle=s.backgroundColor;const a=j(t,s);t.ellipse(n,i,o/2,e/2,r.P/2,0,2*r.P),t.fill(),a&&(t.shadowColor=s.borderShadowColor,t.stroke()),t.restore()}get label(){return this.elements&&this.elements[0]}resolveElementProperties(t,e){return V(t,e,!0)}}Dt.id="ellipseAnnotation",Dt.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:1,display:!0,init:void 0,label:Object.assign({},it.defaults.label),rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xMax:void 0,xMin:void 0,xScaleID:void 0,yMax:void 0,yMin:void 0,yScaleID:void 0,z:0},Dt.defaultRoutes={borderColor:"color",backgroundColor:"color"},Dt.descriptors={label:{_fallback:!0}};class jt extends n.Hg{inRange(t,e,o,n){const{x:r,y:i,x2:s,y2:a,width:d}=this.getProps(["x","y","x2","y2","width"],n),l=this.options.borderWidth;if("x"!==o&&"y"!==o)return function(t,e,o,n){if(!t||!e||o<=0)return!1;const r=n/2;return Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)<=Math.pow(o+r,2)}({x:t,y:e},this.getCenterPoint(n),d/2,l);const c=l/2,h="y"===o?{start:i,end:a,value:e}:{start:r,end:s,value:t};return h.value>=h.start-c&&h.value<=h.end+c}getCenterPoint(t){return f(this,t)}draw(t){const e=this.options,o=e.borderWidth;if(e.radius<.1)return;t.save(),t.fillStyle=e.backgroundColor,T(t,e);const n=j(t,e);I(t,this,this.centerX,this.centerY),n&&!P(e.pointStyle)&&(t.shadowColor=e.borderShadowColor,t.stroke()),t.restore(),e.borderWidth=o}resolveElementProperties(t,e){const o=H(t,e);return o.initProperties=w(t,o,e,!0),o}}jt.id="pointAnnotation",jt.defaults={adjustScaleRange:!0,backgroundShadowColor:"transparent",borderDash:[],borderDashOffset:0,borderShadowColor:"transparent",borderWidth:1,display:!0,init:void 0,pointStyle:"circle",radius:10,rotation:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,xAdjust:0,xMax:void 0,xMin:void 0,xScaleID:void 0,xValue:void 0,yAdjust:0,yMax:void 0,yMin:void 0,yScaleID:void 0,yValue:void 0,z:0},jt.defaultRoutes={borderColor:"color",backgroundColor:"color"};class Tt extends n.Hg{inRange(t,e,o,n){if("x"!==o&&"y"!==o)return this.options.radius>=.1&&this.elements.length>1&&function(t,e,o,n){let r=!1,i=t[t.length-1].getProps(["bX","bY"],n);for(const s of t){const t=s.getProps(["bX","bY"],n);t.bY>o!==i.bY>o&&e<(i.bX-t.bX)*(o-t.bY)/(i.bY-t.bY)+t.bX&&(r=!r),i=t}return r}(this.elements,t,e,n);const i=J({x:t,y:e},this.getCenterPoint(n),(0,r.t)(-this.options.rotation)),s=this.elements.map((t=>"y"===o?t.bY:t.bX)),a=Math.min(...s),d=Math.max(...s);return i[o]>=a&&i[o]<=d}getCenterPoint(t){return f(this,t)}draw(t){const{elements:e,options:o}=this;t.save(),t.beginPath(),t.fillStyle=o.backgroundColor,T(t,o);const n=j(t,o);let r=!0;for(const i of e)r?(t.moveTo(i.x,i.y),r=!1):t.lineTo(i.x,i.y);t.closePath(),t.fill(),n&&(t.shadowColor=o.borderShadowColor,t.stroke()),t.restore()}resolveElementProperties(t,e){const o=H(t,e),{sides:n,rotation:i}=e,s=[],a=2*r.P/n;let d=i*r.b3;for(let r=0;r{r.d.describe(`elements.${At[t].id}`,{_fallback:"plugins.annotation.common"})}));const Yt={update:Object.assign},It=Q.concat(K),Xt=(t,e)=>(0,r.i)(e)?Vt(t,e):t,Et=t=>"color"===t||"font"===t;function Wt(t="line"){return At[t]?t:(console.warn(`Unknown annotation type: '${t}', defaulting to 'line'`),"line")}function Rt(t,e,o,i){const s=function(t,e,o){if("reset"===o||"none"===o||"resize"===o)return Yt;return new n.Qw(t,e)}(t,o.animations,i),a=e.annotations,d=function(t,e){const o=e.length,n=t.length;if(no&&t.splice(o,n-o);return t}(e.elements,a);for(let n=0;nXt(t,i))):o[n]=Xt(s,i)}return o}function $t(t,e,o){return e.$context||(e.$context=Object.assign(Object.create(t.getContext()),{element:e,id:o.id,type:"annotation"}))}const Bt=new Map,Lt=Q.concat(K);var Jt={id:"annotation",version:"2.2.1",beforeRegister(){!function(t,e,o,n=!0){const r=o.split(".");let i=0;for(const s of e.split(".")){const a=r[i++];if(parseInt(s,10){const e=i[t];(0,r.i)(e)&&(e.id=t,n.push(e))})):(0,r.b)(i)&&n.push(...i),function(t,e){for(const o of t)ot(o,e)}(n,t.scales)},afterDataLimits(t,e){const o=Bt.get(t);tt(t,e.scale,o.annotations.filter((t=>t.display&&t.adjustScaleRange)))},afterUpdate(t,e,o){const n=Bt.get(t);!function(t,e,o){e.listened=M(o,Q,e.listeners),e.moveListened=!1,e._getElements=s,F.forEach((t=>{(0,r.a7)(o[t])&&(e.moveListened=!0)})),e.listened&&e.moveListened||e.annotations.forEach((t=>{!e.listened&&(0,r.a7)(t.click)&&(e.listened=!0),e.moveListened||F.forEach((o=>{(0,r.a7)(t[o])&&(e.listened=!0,e.moveListened=!0)}))}))}(0,n,o),Rt(t,n,o,e.mode),n.visibleElements=n.elements.filter((t=>!t.skip&&t.options.display)),function(t,e,o){const n=e.visibleElements;e.hooked=M(o,K,e.hooks),e.hooked||n.forEach((t=>{e.hooked||K.forEach((o=>{(0,r.a7)(t.options[o])&&(e.hooked=!0)}))}))}(0,n,o)},beforeDatasetsDraw(t,e,o){Ft(t,"beforeDatasetsDraw",o.clip)},afterDatasetsDraw(t,e,o){Ft(t,"afterDatasetsDraw",o.clip)},beforeDraw(t,e,o){Ft(t,"beforeDraw",o.clip)},afterDraw(t,e,o){Ft(t,"afterDraw",o.clip)},beforeEvent(t,e,o){U(Bt.get(t),e.event,o)&&(e.changed=!0)},afterDestroy(t){Bt.delete(t)},_getState:t=>Bt.get(t),defaults:{animations:{numbers:{properties:["x","y","x2","y2","width","height","centerX","centerY","pointX","pointY","radius"],type:"number"}},clip:!0,interaction:{mode:void 0,axis:void 0,intersect:void 0},common:{drawTime:"afterDatasetsDraw",init:!1,label:{}}},descriptors:{_indexable:!1,_scriptable:t=>!Lt.includes(t)&&"init"!==t,annotations:{_allKeys:!1,_fallback:(t,e)=>`elements.${At[Wt(e.type)].id}`},interaction:{_fallback:!0},common:{label:{_indexable:Et,_fallback:!0},_indexable:Et}},additionalOptionScopes:[""]};function Ft(t,e,o){const{ctx:n,chartArea:i}=t,s=Bt.get(t);o&&(0,r.Y)(n,i);const a=function(t,e){const o=[];for(const n of t)if(n.options.drawTime===e&&o.push({element:n,main:!0}),n.elements&&n.elements.length)for(const t of n.elements)t.options.display&&t.options.drawTime===e&&o.push({element:t});return o}(s.visibleElements,e).sort(((t,e)=>t.element.options.z-e.element.options.z));for(const r of a)Qt(n,i,s,r);o&&(0,r.$)(n)}function Qt(t,e,o,n){const r=n.element;n.main?(Z(o,r,"beforeDraw"),r.draw(t,e),Z(o,r,"afterDraw")):r.draw(t,e)}},18107:(t,e,o)=>{var n=o(46518),r=o(48981),i=o(26198),s=o(91291),a=o(6469);n({target:"Array",proto:!0},{at:function(t){var e=r(this),o=i(e),n=s(t),a=n>=0?n:o+n;return a<0||a>=o?void 0:e[a]}}),a("at")},34504:(t,e,o)=>{o(18107)},78898:(t,e,o)=>{var n=o(46518),r=o(68183).charAt,i=o(67750),s=o(91291),a=o(655);n({target:"String",proto:!0,forced:!0},{at:function(t){var e=a(i(this)),o=e.length,n=s(t),d=n>=0?n:o+n;return d<0||d>=o?void 0:r(e,d)}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt b/src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt deleted file mode 100644 index 1b47ed127..000000000 --- a/src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt +++ /dev/null @@ -1,6 +0,0 @@ -/*! -* chartjs-plugin-annotation v2.2.1 -* https://www.chartjs.org/chartjs-plugin-annotation/index - * (c) 2023 chartjs-plugin-annotation Contributors - * Released under the MIT License - */ diff --git a/src/web/gui/v2/6323.26d4d949c9b6f8674c2e.chunk.js b/src/web/gui/v2/6323.26d4d949c9b6f8674c2e.chunk.js deleted file mode 100644 index 46260dde9..000000000 --- a/src/web/gui/v2/6323.26d4d949c9b6f8674c2e.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ac1f673a-1d4a-4dd6-a45d-067f0aeb0a37",e._sentryDebugIdIdentifier="sentry-dbid-ac1f673a-1d4a-4dd6-a45d-067f0aeb0a37")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6323],{49032:(e,t,a)=>{a.d(t,{B9:()=>l});const n=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,l=e=>!!e&&n.test(e)},84707:(e,t,a)=>{a.d(t,{y:()=>c});a(25440),a(17333),a(41393),a(98992),a(54520),a(81454),a(62953);var n=a(96540),l=a(83199),o=a(49032);const i=(0,a(8711).default)(l.Select).withConfig({displayName:"styled__StyledSelect",componentId:"sc-bkkrx-0"})(["width:100%;"]);a(71517),a(11379),a(93777),a(14190),a(12359),a(86097),a(17273),a(27415),a(19929),a(37583),a(55122),a(20230),a(57268),a(79733),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215);const s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"name";return e.length?"string"===typeof e[0]?[...new Set(e)]:[...new Map(e.map((e=>[e[t],e]))).values()]:[]},r=[],c=e=>{let{invitations:t,setInvitations:a}=e;const[c,d]=(0,n.useState)(r),[m,u]=(0,n.useState)(""),[p,g]=(0,n.useState)(""),v=()=>g(""),h=(0,n.useCallback)((e=>{u(e.toLowerCase())}),[u]),f=n.useCallback((e=>{let{emails:t=r,invitations:n=r,isEmailValid:l}=e;if(l){const e=s(t),l=s(n);return d(e),a(l),u(""),void v()}g("Invalid Email")}),[a]),b=(0,n.useCallback)((e=>(0,o.B9)(e)&&!c.includes(e)),[c]),y=(0,n.useCallback)((e=>{f({isEmailValid:!0,emails:e.map((e=>e.value)),invitations:e.map((e=>({email:e.value,name:e.value.split("@")[0]})))})}),[d]),E=(0,n.useCallback)((e=>{const a=e.clipboardData.getData("Text").toLowerCase().replace(/ /g,",").replace(/,,/g,",").split(",").filter((e=>b(e)))||r;f({emails:[...c,...a],invitations:[...t,...a.map((e=>({email:e,name:e.split("@")[0]})))],isEmailValid:a.length>0}),e.preventDefault()}),[c,t,b,f]),w=(0,n.useCallback)((e=>{if(m)switch(v(),e.key){case"Enter":case"Tab":case",":case" ":f({emails:[...c,m],invitations:[...t,{email:m,name:m.split("@")[0]}],isEmailValid:b(m)}),e.preventDefault()}}),[c,m,t,b,f]);return n.createElement(l.Flex,{justifyContent:"space-between",column:!0,onPaste:E},n.createElement(i,{components:{DropdownIndicator:null},inputValue:m,isClearable:!0,isMulti:!0,menuIsOpen:!1,onBlur:()=>{m&&f({emails:[...c,m],invitations:[...t,{email:m,name:m.split("@")[0]}],isEmailValid:b(m)})},onChange:y,onInputChange:h,onKeyDown:w,onClear:()=>{d(r),a(r)},placeholder:"Enter an email and hit enter",value:c.map((e=>{return{label:t=e,value:t};var t}))}),p&&n.createElement(l.Text,{color:"error"},p))}},6323:(e,t,a)=>{a.d(t,{d:()=>U});var n=a(58168),l=(a(17333),a(41393),a(98992),a(54520),a(81454),a(62953),a(96540)),o=a(83199),i=a(71847),s=a(13871),r=a(78217),c=a(83179),d=a(4659),m=a(84707),u=a(3914),p=a(14994),g=a(77181),v=a(81048),h=a(15327),f=a(74618),b=a(45765),y=a(27287);const E=e=>{let{id:t,handleDelete:a}=e;const n=(0,g.c)(t,"email");return l.createElement(o.Flex,{justifyContent:"between",alignItems:"center"},l.createElement(o.Flex,{gap:4},l.createElement(o.Icon,{color:"text",name:"check"}),l.createElement(o.Text,null,n)),l.createElement(o.Button,{flavour:"borderless",icon:"trashcan",onClick:()=>a({email:n})}))};var w=a(71835),C=a(49032),I=a(46741),k=a(69756),x=a(36850),S=a(92155),_=a(50876),A=a(63314);const R=e=>{let{email:t}=e;return(0,C.B9)(t)},T=(0,S.A)(o.Button),B={header:"Invitations",text:"Invitations successfully sent!"},U=e=>{let{onClose:t,isSubmodal:a=!1}=e;const{id:C,name:S,slug:U}=(0,u.ap)(),D=(0,p.WW)(),[N,j]=(0,l.useState)(D),[F,L]=(0,l.useState)([]),[V,M]=(0,l.useState)([]),[Z,O]=(0,l.useState)(),{sendLog:z,isReady:P}=(0,_.A)(),[K,H,Y,G]=(0,g.g)(C),[,q]=(0,w.A)(),Q=(0,l.useCallback)((e=>{const{header:a,text:n}=e||B,l=(0,s.UI)({header:a,text:n,success:!0}),o=V.filter(R).map((e=>{let{email:t}=e;return t})).join(",");(0,i.H)("invite","invite-sent","".concat(Z,"::").concat(o,"::").concat(N.join(",")),"","","invite-sent"),r.A.success(l,{context:"manageInvitations"}),t(),P&&z({isSuccess:!0},!0)}),[z,P]),W=(0,I._s)(),J=e=>t=>{let{email:a}=t;e&&H(e),M(V.filter((e=>e.email!==a))),L(F.filter((e=>e.email!==a)))},$=(0,l.useCallback)((()=>{j([])}),[j]),X="member"===Z;return l.createElement(h.GO,{onClose:t,closeOnClickOutside:!1},l.createElement(A.Ay,{feature:"ManageInvitationsModal"},l.createElement(f.z,{onClose:t,isSubmodal:a,title:"Invite Users"}),l.createElement(b.U,null,"Invite users to\xa0",S),l.createElement(h.Yv,null,l.createElement(y.dE,null,"Send invitations to your team"),l.createElement(y.BZ,null,"TIP: You can send more invitations at once, separate each with a comma."),l.createElement(m.y,{invitations:V,setInvitations:M}),l.createElement("br",null),l.createElement(y.dE,null,"Rooms"),l.createElement(o.Flex,{alignItems:"center",justifyContent:"between",margin:[1,0,2]},l.createElement(o.TextSmall,null,"Choose one or more rooms you'd like to invite users to."),!!N.length&&l.createElement(o.Button,{onClick:$,padding:[0],flavour:"borderless","data-ga":"rooms-clear",label:"Clear",small:!0},"Clear")),l.createElement(o.Box,{"data-testid":"invite-selectRoom"},l.createElement(c.A,(0,n.A)({selectedValue:N,onChange:j},X?{formatOptions:e=>{let{name:t}=e;return{isDisabled:t===v.Q8}},filterValues:e=>{let{label:t}=e;return t===v.Q8}}:{}))),l.createElement("br",null),l.createElement(y.dE,null,"Role"),l.createElement(y.BZ,null,"Choose a role for invited user."," ",l.createElement(d.A,{href:x.S,target:"_blank",rel:"noopener noreferrer",Component:o.TextSmall},"Learn more")),l.createElement(o.Box,{"data-testid":"invite-selectRole"},l.createElement(k.A,{availableRoles:W,dataGA:"invite-to-space",dataTestId:"invite-selectRole",onChange:e=>{O(e.target.value)},value:Z})),l.createElement(y.fh,null,l.createElement(T,{label:"Send",onClick:async()=>{const e=V.filter(R).map((e=>({email:e.email,name:e.name,role:Z,roomIDs:N}))),t="".concat(window.location.origin,"/spaces/").concat(U,"/join-space");Y(e,t,{onSuccess:Q,onError:e=>{q(e),z({isFailure:!0,error:e.message},!0)}})},disabled:0===V.length||!Z,flavour:"hollow",isLoading:G,"data-ga":"manage-invitations-modal::click-send::modal-footer"})),l.createElement(o.H5,{margin:[2,0,0]},"Invitations awaiting response"),l.createElement(o.Flex,{column:!0},K.length>0?K.map((e=>l.createElement(E,{key:e,handleDelete:J(e),id:e}))):l.createElement(y.au,null,l.createElement("br",null),l.createElement(y.dE,null,"You haven't invited any users yet."))))))}},27287:(e,t,a)=>{a.d(t,{BZ:()=>r,au:()=>s,dE:()=>o,fh:()=>i});var n=a(8711),l=a(83199);const o=(0,n.default)(l.H5).withConfig({displayName:"styled__StyledH5",componentId:"sc-1kusjmi-0"})(["display:flex;align-items:center;"]),i=n.default.div.withConfig({displayName:"styled__FormRow",componentId:"sc-1kusjmi-1"})(["width:100%;display:flex;flex-flow:row no-wrap;justify-content:flex-end;margin-top:",";"],(0,l.getSizeBy)(2)),s=n.default.div.withConfig({displayName:"styled__StyledUserInvitationEmptyListItem",componentId:"sc-1kusjmi-2"})(["display:flex;flex-flow:column nowrap;align-items:center;"]),r=(0,n.default)(l.TextSmall).withConfig({displayName:"styled__StyledSecondaryText",componentId:"sc-1kusjmi-3"})(["margin:2px 0 8px;"])},69756:(e,t,a)=>{a.d(t,{A:()=>v});a(41393),a(81454);var n=a(96540),l=a(83199),o=a(8711),i=a(80158),s=a(97674),r=a(3914),c=a(4659),d=a(84976),m=a(46741),u=a(27994);const p={admin:"Users with this role can control Spaces, Rooms, Nodes, Users and Billing. They can also access any Room in the Space.",member:"Users with this role can create Rooms and invite other Members. They can only see the Rooms they belong to and all Nodes in the All Nodes room",manager:"Users with this role can manage Rooms and Users. They can access any Room in the Space.",troubleshooter:"Users with this role can use Netdata to troubleshoot, not manage entities. They can access any Room in the Space.",observer:"Users with this role can only view data in specific Rooms.",billing:"Users with this role can handle billing options and invoices."},g=(0,o.default)(l.Flex).withConfig({displayName:"rolePicker__PlanBadge",componentId:"sc-ypuqww-0"})(["pointer-events:auto;"]),v=e=>{let{availableRoles:t,dataGA:a,dataTestId:o,onChange:v,value:h}=e;const f=(0,r.ap)("plan"),b=(0,n.useMemo)((()=>(0,s.L_)(f).map((e=>({isChecked:e===h,isEnabled:t.includes(e),role:e}))).sort(((e,t)=>Number(t.isEnabled)-Number(e.isEnabled)))),[t,s.L_,f,h]),y=(0,m.JT)("billing:ReadAll"),{url:E}=(0,u.A)();return n.createElement(l.Flex,{column:!0,gap:2,"data-testid":"".concat(o,"-roleOptions")},b.map((e=>{let{isChecked:t,isEnabled:s,role:r}=e;const m=s?void 0:"medium",u="troubleshooter"===r?"pro":"business";return n.createElement(l.RadioButton,{key:r,checked:t,"data-ga":"".concat(a,"::select-role-").concat(r,"::global-view"),"data-testid":"".concat(o,"-").concat(r,"Option"),disabled:!s,onChange:v,value:r,alignItems:"start"},n.createElement(l.Flex,{column:!0},n.createElement(l.Flex,{gap:2,alignItems:"center"},n.createElement(l.Text,{opacity:m},(0,i.Zr)(r)),!s&&n.createElement(g,{background:"sideBarMini",border:{side:"all",color:"border"},cursor:"initial",padding:[1],round:!0},n.createElement(c.A,{align:"bottom",as:d.N_,boxProps:{as:l.Flex},color:"text",Component:l.TextMicro,content:"Upgrade your plan in order to use this role","data-ga":"".concat(a,"::click-plan-badge-").concat(u,"::global-view"),disabled:!y,hoverColor:"textFocus",showToolTip:!0,strong:!0,to:E},"Upgrade now!"))),n.createElement(l.TextSmall,{color:"textLite",opacity:m},p[r])))})))}},77181:(e,t,a)=>{a.d(t,{c:()=>f,g:()=>h});a(17333),a(9920),a(41393),a(98992),a(54520),a(3949),a(81454),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(96540),l=a(47444);const o=(0,l.Iz)({key:"invitation",default:{id:"",email:""}}),i=(0,l.Iz)({key:"invitationIds",default:[]});var s=a(26655);const r=e=>e.map((e=>{let{id:t,email:a}=e;return{id:t,email:a}})),c={member:1,admin:2,manager:3,troubleshooter:4,observer:5,billing:6},d=e=>e.map((e=>{let{role:t,...a}=e;if(void 0===c[t])throw new Error("role not found");return{role:c[t],...a}}));a(14905),a(8872);var m=a(78969);const u=e=>{let{data:t,invitations:a}=e;return t.reduce(((e,t,n)=>{var l,o;(o=t.errorMsgKey)&&o===m.vK&&(null!==(l=a[n])&&void 0!==l&&l.email&&e.push(a[n].email));return e}),[])},p=e=>e.length>1,g=(0,l.K0)({key:"spaceInvitationValue",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const l=n(o(t));return a?l[a]:l}}}),v=(0,l.K0)({key:"spaceInvitationsIdsValue",get:e=>t=>{let{get:a}=t;return a(i(e))},set:e=>(t,a)=>{let{set:n}=t,{invitations:l,merge:s}=a;n(i(e),(e=>[...new Set([...e,...l.map((e=>{let{id:t}=e;return t}))])])),l.forEach((e=>{n(o(e.id),(t=>({...s&&t,...e})))}))}}),h=e=>{const t=(0,l.vc)(v(e)),[a,c]=(0,n.useState)(!1),m=(0,l.Zs)((t=>{let{snapshot:a,set:n}=t;return async()=>{if(!(await a.getLoadable(v(e))).length){const{data:t}=await(e=>s.A.get("/api/v2/spaces/".concat(e,"/invitations"),{transform:r}))(e);n(v(e),{invitations:t,merge:!0})}}}),[e]),g=(0,n.useCallback)((async(t,a,n)=>{let{onSuccess:l,onError:o}=n;try{c(!0);const{data:n}=await((e,t,a)=>s.A.post("/api/v1/spaces/".concat(e,"/invitations"),{redirectURI:a,requests:d(t)}))(e,t,a),i=u({data:n,invitations:t});if(i.length&&!p(t))return void(o&&o({message:"User has already joined that space!"}));if(i.length&&p(t)){if(i.length===t.length)return void(o&&o({message:"All of the selected users are already meembers of this space"}));if(l)return void l({header:"Invitations partially send",text:"Some of the selected users are already members of this space"})}l&&l()}catch(i){o&&o(i)}finally{c(!1)}}),[e]),h=(0,l.Zs)((t=>{let{snapshot:a,set:n,reset:l}=t;return async t=>{const r=await a.getPromise(v(e)),c=r.filter((e=>e===t));n(i(e),(e=>{const t=new Set(e);return c.forEach((e=>t.delete(e))),[...t]}));try{await((e,t)=>s.A.delete("/api/v1/spaces/".concat(e,"/invitations"),{params:{invitation_ids:t.join(",")}}))(e,[t]),c.forEach((e=>{l(o(e))}))}catch(d){n(v(e),{invitations:r,merge:!1})}}}),[e]);return(0,n.useEffect)((()=>{m()}),[e]),[t,h,g,a]},f=(e,t)=>(0,l.vc)(g({id:e,key:t}))}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6331.89070793921be1288bb5.css b/src/web/gui/v2/6331.89070793921be1288bb5.css deleted file mode 100644 index e5d02668f..000000000 --- a/src/web/gui/v2/6331.89070793921be1288bb5.css +++ /dev/null @@ -1,2 +0,0 @@ -.default .dygraph-axis-label{color:#35414a}.dark .dygraph-axis-label{color:#fff}.dygraph-label-rotate-right{text-align:center;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg)}.dygraph-annotation{position:absolute;z-index:10;overflow:hidden;border:1px solid} - diff --git a/src/web/gui/v2/6331.c91b5d104cdff1be3b80.chunk.js b/src/web/gui/v2/6331.c91b5d104cdff1be3b80.chunk.js deleted file mode 100644 index 8aa97382b..000000000 --- a/src/web/gui/v2/6331.c91b5d104cdff1be3b80.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7b52f161-70b6-4332-8d7e-92ff54db7064",e._sentryDebugIdIdentifier="sentry-dbid-7b52f161-70b6-4332-8d7e-92ff54db7064")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6331],{36196:(e,t,n)=>{n.d(t,{A:()=>b});var l=n(58168),a=n(96540),r=n(22332),o=n(10534),i=n(89380),c=n(25369),s=n(39360),u=n(95662),d=n(99891),m=n(49096),p=n(74487),g=n(64131);const h=(0,a.forwardRef)(((e,t)=>{let{width:n,height:r,...o}=e;return a.createElement(i.ChartWrapper,{width:n,height:r},a.createElement(g.N1,(0,l.A)({hasHeader:!1,hasFilters:!1,hasFooter:!1,width:n,height:r},o,{ref:t})))})),E=(0,o.default)(h,{tile:!0}),v={dygraph:g.Ay,easypiechart:d.Ay,gauge:s.Ay,number:m.Ay,groupBoxes:c.Ay,d3pie:u.Ay,bars:p.Ay},x=e=>{const t=(0,r.useChart)(),n=(0,r.useAttributeValue)("sparkline"),o=(0,r.useAttributeValue)("chartLibrary"),i=(0,a.useMemo)((()=>t?n?E:v[o]:null),[t,o,n]);return i?a.createElement(i,(0,l.A)({},e,{chart:t})):null},b=(0,r.withChartProvider)((0,a.memo)(x))},40267:(e,t,n)=>{n.d(t,{A:()=>r});var l=n(96540),a=n(83199);const r=e=>{let{flavour:t,icon:n,children:r}=e;return l.createElement(a.Pill,{icon:n,textProps:{textTransform:"capitalize"},flavour:t},r)}},11164:(e,t,n)=>{n.d(t,{A:()=>v});var l=n(96540),a=n(36196),r=n(63950),o=n.n(r),i=n(83199),c=n(57605),s=n(28738),u=n(3914),d=n(69765),m=n(80925),p=n(47731),g=n(52768);const h=e=>t=>"alert-modal::".concat(e.getAttribute("id"),"::").concat(t),E={width:"108px",height:"77px"},v=e=>{let{instance:t,context:n,isFormattedValueLoaded:r,nodeId:v,status:x,lastStatusChange:b,formattedLastStatusChangeValue:y,lastUpdated:f,spaceId:C,roomId:A,setChartSelected:w=o()}=e;const T=(0,u.vt)();C=C||T;const I=(0,d.ID)();A=A||I;const S=(0,p.J)(),F=(0,m.e)(),k=(0,c.A)();(0,l.useEffect)((()=>(k(),k)),[]);const D=(0,u.dg)(),O=(0,l.useMemo)((()=>{if(!r)return;const e=F.makeChart({attributes:{nodeId:v,contextScope:[n],selectedInstances:t&&v?["".concat(t,"@").concat(v)]:[],id:t,roomId:A,enabledResetRange:!1,overlays:{proceeded:{type:"proceeded"},alarm:{type:"alarm",status:x,value:y,when:b}},host:D?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(C,"/rooms/").concat(A),nodesScope:[v],toolboxElements:[],sparkline:S,hasToolbox:!S},makeTrack:h});return F.getRoot().appendChild(e),e}),[t,r]);return(0,g.Vt)({lastUpdated:f,lastStatusChange:b},r),(0,l.useEffect)((()=>(w((e=>({...e,...O}))),()=>{O&&O.destroy(),w(null)})),[O]),l.createElement(i.Flex,{flex:!1,width:"100%",height:75},r&&O?l.createElement(a.A,{"data-chartid":t,chart:O,hasHeader:!S,hasFooter:!S}):l.createElement(s.A,{iconProps:E,title:"Loading chart..."}))}},33590:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Se});var l=n(96540),a=n(83199),r=(n(62953),n(21875)),o=n(87659),i=n(69765),c=n(36196),s=n(80925),u=n(35243);const d=()=>{const e=(0,l.useRef)(),t=(0,r.vX)().getAttribute("id"),n=(0,i.ID)(),o=(0,u.N)(),d=(0,s.e)(),m=(e=>{const[t,n]=(0,l.useState)(!1),a=(0,l.useMemo)((()=>new IntersectionObserver((e=>{let[t]=e;return n(t.isIntersecting)}))),[e]);return(0,l.useEffect)((()=>(a.observe(e.current),()=>a.disconnect())),[]),t})(e),p=(0,l.useMemo)((()=>{const e=d.makeChart({attributes:{contextScope:[t],height:80,id:t,roomId:n,toolboxElements:[]}});return o.appendChild(e),e}),[o,n,t]);return l.createElement(a.Flex,{ref:e,width:"100%",height:"350px"},m?l.createElement(c.A,{margin:[0,0,2],chart:p,"data-chartid":t,"data-track":p.track("container")}):null)},m=(0,l.memo)(d);var p=n(64118),g=n(11164),h=n(52768),E=n(3914);const v=e=>{let{alertId:t}=e;const n=(0,E.vt)(),o=(0,i.ID)(),[,c]=(0,r.v7)(),{fullyLoaded:s=!1,units:u,lastStatusChangeValue:d,lastStatusChange:m,context:v,instance:x,nodeId:b,status:y,lastUpdated:f,value:C}=(0,p.JL)(t);(0,p.yk)(t,{spaceId:n,roomId:o});const A=(0,h.J4)(C,u),w=(0,h.J4)(d,u);return s?l.createElement(g.A,{id:t,context:v,instance:x,formattedLastValue:A,formattedLastStatusChangeValue:w,lastStatusChange:m,lastUpdated:f,isFormattedValueLoaded:s,nodeId:b,status:y,testid:"alertView",spaceId:n,roomId:o,setChartSelected:c}):l.createElement(a.Flex,{height:"200px"},"Loading chart...")},x=e=>{let{title:t="Chart preview"}=e;const[n,i]=(0,o.A)(!0),c=(0,r.vX)();return l.createElement(a.Flex,{column:!0,gap:2,padding:[2,0]},l.createElement(a.Flex,{gap:1,alignItems:"center",cursor:"pointer",onClick:i},l.createElement(a.Box,null,t),l.createElement(a.Icon,{name:"chevron_down",size:"small",color:"textLite",rotate:n?2:0})),l.createElement(a.Flex,{height:n?"auto":"0px",overflow:"hidden"},null!==c&&void 0!==c&&c.alertId?l.createElement(v,{alertId:c.alertId}):l.createElement(m,null)))};var b=n(58168);n(41393),n(81454);const y=e=>{let{title:t="",showAdvanced:n,children:r,...i}=e;const[c,s]=(0,o.A)(!1);return l.createElement(a.Flex,(0,b.A)({column:!0,gap:2,padding:[2,0]},i),l.createElement(a.Flex,{alignItems:"center",justifyContent:"between"},l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.Icon,{name:"dot",width:"8px",color:"primary"}),l.createElement(a.Text,{strong:!0},t)),n&&l.createElement(a.Checkbox,{label:"Show advanced",checked:c,onChange:s})),l.createElement(a.Flex,{padding:[0,0,0,4]},l.Children.map(r,(e=>l.isValidElement(e)?l.cloneElement(e,{advanced:c}):e))))},f=e=>{let{isVertical:t,...n}=e;return l.createElement(a.Box,(0,b.A)({as:"hr",height:t?"100%":"1px",width:t?"1px":"100%",sx:{borderWidth:t?"0px 0px 0px 1px":"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}},n))};var C=n(83863);const A=()=>{const{detectionMethod:e,setDetectionMethod:t}=(0,r.aR)();return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Flex,null,l.createElement(a.ButtonGroup,{items:C.Hv,checked:e,onChange:t})),l.createElement(a.TextSmall,{color:"textLite"},"An alert is triggered whenever a metric crosses a threshold"))};n(17333),n(98992),n(54520);var w=n(63950),T=n.n(w),I=n(16093);const S=e=>l.createElement(I.c.Option,e,l.createElement(a.Flex,{gap:2},l.createElement(a.Checkbox,{checked:e.isSelected}),l.createElement(a.TextSmall,null,e.label))),F=e=>l.createElement(a.Box,{position:"relative"},l.createElement(a.Select,(0,b.A)({components:{Option:S}},e))),k=function(){let{label:e,value:t={},options:n=[],updateState:r=T(),placeholder:o,defaultOption:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{items:c,expression:s}=t,[u,d]=(0,l.useState)(t);(0,l.useEffect)((()=>{r(u)}),[u]);const m=(0,l.useCallback)((e=>{d((t=>({...t,items:e.filter((e=>{let{value:t}=e;return!!t}))})))}),[u,d]),p=(0,l.useCallback)((e=>{let{target:{value:t}}=e;d((e=>({...e,expression:t})))}),[u,d]);return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Flex,{column:!0,gap:1},e&&l.createElement(a.TextSmall,{strong:!0},e),l.createElement(F,{options:n,value:null!==c&&void 0!==c&&c.length?c.filter((e=>{let{value:t}=e;return t})):i,onChange:m,styles:{size:"tiny"},isDisabled:!1,isMulti:!0,closeMenuOnSelect:!1})),l.createElement(a.TextInput,{value:s||"",onChange:p,placeholder:o||"Type an expression",size:"tiny"}))},D=()=>{const[e]=(0,r.v7)(),t=e.getAttribute&&e.getAttribute("nodes")||[],n=Object.entries(t).map((e=>{let[t,{nm:n}]=e;return{label:n,value:t}})),a={label:"".concat(n.length," ").concat(n.length>1?"Nodes":"Node"),value:""},o=[a,...n],{metrics:{hosts:i},setHosts:c}=(0,r.BO)();return l.createElement(k,{value:i,options:o,updateState:c,defaultOption:a})},O=()=>{const[e]=(0,r.v7)(),t=e.getAttribute&&e.getAttribute("instances")||[],n=Object.entries(t).map((e=>{let[t,{nm:n}]=e;return{label:n,value:t}})),a={label:"".concat(n.length," ").concat(n.length>1?"Instances":"Instance"),value:""},o=[a,...n],{metrics:{charts:i},setCharts:c}=(0,r.BO)();return l.createElement(k,{value:i,options:o,updateState:c,defaultOption:a})},B=()=>{const[e]=(0,r.v7)(),t=e.getAttribute&&e.getAttribute("labels")||[],n=Object.values(t).map((e=>{let{id:t,vl:n=[]}=e;return{label:t,options:n.map((e=>({label:e.id,value:"".concat(t,":").concat(e.id)})))}})),a={label:"".concat(n.length," ").concat(n.length>1?"Labels":"Label"),value:""},o=[a,...n],{metrics:{chartLabels:i},setChartLabels:c}=(0,r.BO)();return l.createElement(k,{value:i,options:o,updateState:c,defaultOption:a})},L=()=>{const{metrics:{os:e},setOs:t}=(0,r.BO)(),n=(0,l.useMemo)((()=>null!==e&&void 0!==e&&e.length?e.filter((e=>{let{value:t}=e;return t})):C.Lf),[e]);return l.createElement(F,{options:C.R8,value:n,onChange:t,styles:{size:"tiny"},isDisabled:!1,isMulti:!0,closeMenuOnSelect:!1})};var V=n(32089);const z=e=>{let{children:t,...n}=e;return l.createElement(a.Flex,(0,b.A)({width:{max:70}},n),t)},N=()=>l.createElement(a.Flex,{gap:2},l.createElement(z,null,l.createElement(D,null)),l.createElement(V.A,{vertical:!0}),l.createElement(z,null,l.createElement(O,null)),l.createElement(V.A,{vertical:!0}),l.createElement(z,null,l.createElement(B,null)),l.createElement(V.A,{vertical:!0}),l.createElement(z,null,l.createElement(L,null))),U=e=>{let{advanced:t}=e;const[n]=(0,r.v7)(),o=n.getAttribute?n.getAttribute("id"):"",{setOn:i}=(0,r.BO)();return(0,l.useEffect)((()=>{i(o)}),[]),l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.Box,{width:"200px"},l.createElement(a.TextInput,{value:o,onChange:e=>i(e.target.value),disabled:!0,size:"tiny"})),l.createElement(a.Text,null,t?"from":"on"),!t&&l.createElement(a.TextInput,{value:"each system everywhere",onChange:()=>{},disabled:!0,size:"tiny"})),t&&l.createElement(N,null))},M=()=>{const{metrics:{lookup:e},setLookup:t}=(0,r.BO)(),{aggregation:n}=e||{};return l.createElement(a.Select,{options:C.Bo,value:n,onChange:e=>t({aggregation:e}),styles:{minWidth:"80px",size:"tiny"},isDisabled:!1})},R=()=>{const{metrics:{lookup:e},setLookup:t}=(0,r.BO)(),{denoter:n}=e||{};return l.createElement(a.Select,{options:C.Lm,value:n,onChange:e=>t({denoter:e}),styles:{minWidth:"80px",size:"tiny"},isDisabled:!1})},_=()=>{const[e]=(0,r.v7)(),t=(e.getAttribute&&e.getAttribute("dimensionIds")||[]).map((e=>({label:e,value:e}))),n={label:"All Dimensions",value:""},a=[n,...t],{metrics:{lookup:o},setLookup:i}=(0,r.BO)(),{dimensions:c}=o||{},s=(0,l.useMemo)((()=>null!==c&&void 0!==c&&c.length?c.filter((e=>{let{value:t}=e;return t})):n),[c,n.label]);return l.createElement(F,{options:a,value:s,onChange:e=>i({dimensions:e}),styles:{size:"tiny"},isDisabled:!1,isMulti:!0,closeMenuOnSelect:!1})},W=()=>{const{metrics:{lookup:e},setLookup:t}=(0,r.BO)(),{timePeriod:n}=e||{};return l.createElement(a.Select,{options:C.ZE,value:n,onChange:e=>t({timePeriod:e}),styles:{minWidth:"80px",size:"tiny"},isDisabled:!1})},j=()=>{const{metrics:{lookup:e},setLookup:t}=(0,r.BO)(),{options:n}=e||{};return l.createElement(F,{options:C.Ws,value:n,placeholder:"Options",onChange:e=>t({options:e}),styles:{size:"tiny"},isDisabled:!1,isMulti:!0,closeMenuOnSelect:!1})},P=()=>l.createElement(a.Flex,{flexWrap:!0,alignItems:"center",gap:2},l.createElement(a.Text,null,"Evaluate the"),l.createElement(M,null),l.createElement(a.Text,null,"of"),l.createElement(R,null),l.createElement(a.Text,null,"of"),l.createElement(_,null),l.createElement(a.Text,null,"over the last"),l.createElement(W,null),l.createElement(j,null)),J=()=>{const{metrics:{calc:e,units:t},setCalcActive:n,setCalcValue:o,setUnitsValue:i}=(0,r.BO)(),{active:c,value:s}=e||{};return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Toggle,{labelRight:"Add formula",colored:!0,checked:c,onChange:e=>n(e.target.checked)}),l.createElement(a.Flex,{gap:2},l.createElement(a.Flex,{column:!0,gap:1},l.createElement(a.Text,null,"Formula"),l.createElement(a.Box,{width:"500px"},l.createElement(a.TextInput,{value:s,placeholder:"$this",onChange:e=>o(e.target.value),size:"tiny",disabled:!c}))),l.createElement(a.Flex,{column:!0,gap:1},l.createElement(a.Text,null,"Units"),l.createElement(a.Box,{width:"80px"},l.createElement(a.TextInput,{value:t,onChange:e=>i(e.target.value),size:"tiny",disabled:!c})))))},G=e=>{let{advanced:t}=e;return l.createElement(a.Flex,{column:!0,gap:3},l.createElement(U,{advanced:t}),l.createElement(P,null),t&&l.createElement(J,null))},H=e=>{let{value:t,onChange:n}=e;return l.createElement(a.Select,{options:C.j8,value:t,onChange:n,styles:{size:"tiny"}})};var $=n(40267),Z=n(29217);const K={denoter:C.jV.thresholds.below,value:75},X=e=>{let{recovery:t,onRecoveryThresholdAdd:n,onValueChange:r}=e;const{value:o}=t||{};return t?l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.Pill,{flavour:"success",hollow:!0,icon:"reload"},"Recovery Threshold"),l.createElement(a.TextInput,{onChange:e=>r(e.target.value),value:o,type:"number",min:0,size:"tiny",metaShrinked:!0,containerStyles:{width:"80px"}}),l.createElement(Z.A,{content:"Remove recovery threshold"},l.createElement(a.Button,{icon:"trashcan",flavour:"borderless",onClick:()=>n(null),iconColor:"textLite",iconSize:"small"}))):l.createElement(a.Button,{label:"Recovery Threshold",icon:"plus",flavour:"borderless",onClick:()=>n(K)})};var Y=n(80158);const q=()=>()=>{},Q=(ee=e=>{let{isEdit:t,alertingConditions:n,setThreshold:r,setRecoveryThreshold:o,type:i,advanced:c,isDisabled:s}=e;const{denoter:u,value:d,recovery:m}=n[i]||{},p=r(i,"denoter"),g=r(i,"value"),h=r(i,"recovery"),E=o(i,"denoter"),v=o(i,"value");return l.createElement(a.Flex,{alignItems:"center",gap:2,height:"34px"},l.createElement(a.Box,null,l.createElement($.A,{width:"80px",flavour:i,textSize:"small"},(0,Y.Zr)(i,!0))),t?l.createElement(a.TextInput,{onChange:e=>g(e.target.value),value:d,size:"tiny",containerStyles:{width:"360px"},metaShrinked:!0}):l.createElement(l.Fragment,null,c&&!s?l.createElement(H,{value:u,onChange:p,isDisabled:s}):l.createElement(a.TextInput,{value:null===u||void 0===u?void 0:u.label,size:"tiny",containerStyles:{width:"160px"},disabled:!0,metaShrinked:!0}),l.createElement(a.TextInput,{onChange:e=>g(e.target.value),value:d,type:"number",min:0,size:"tiny",metaShrinked:!0,containerStyles:{width:"80px"},disabled:s}),c&&!s&&l.createElement(X,{recovery:m,onRecoveryThresholdAdd:h,onDenoterChange:E,onValueChange:v,disabled:s})))},e=>{var t;const n=(0,r.op)(),{alertingConditions:o,setThreshold:i=q}=n||{},c=i(e.type,"isFormula"),s=i(e.type,"value"),u=!(null!==o&&void 0!==o&&null!==(t=o[e.type])&&void 0!==t&&t.isFormula),d=!u,m=(0,l.useCallback)((e=>{let{target:{value:t}}=e;return s(t)}),[s]);return!n.isEdit&&e.advanced?l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.RadioButton,{checked:u,onChange:()=>c(!1)}),l.createElement(ee,(0,b.A)({},n,e,{isDisabled:!u}))),l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.RadioButton,{checked:d,onChange:()=>c(!0)}),l.createElement(a.Flex,{column:!0,gap:1},l.createElement(a.Text,null,"Formula"),l.createElement(a.Box,{width:"500px"},l.createElement(a.TextInput,{value:e.value,placeholder:"$this",onChange:m,size:"tiny",disabled:!d}))))):l.createElement(ee,(0,b.A)({},n,e))});var ee;const te=e=>{let{advanced:t}=e;return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(Q,{type:"critical",advanced:t}),l.createElement(V.A,null),l.createElement(Q,{type:"warning",advanced:t}))},ne=e=>{let{label:t="",value:n,onValueChange:r=T(),unit:o,onUnitChange:i=T(),unitsOptions:c=C.WB,isDisabled:s}=e;return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Text,{color:s?"textLite":"text"},t),l.createElement(a.Flex,{gap:2},l.createElement(a.TextInput,{value:n,onChange:e=>r(e.target.value),type:"number",min:0,size:"tiny",containerStyles:{width:"60px"},disabled:s}),l.createElement(a.Select,{options:c,value:o,onChange:e=>i(e),styles:{size:"tiny"},isDisabled:s})))},le=e=>{let{advanced:t}=e;const{alertingConditions:{interval:{value:n,unit:a}},setIntervalValue:o,setIntervalUnit:i}=(0,r.op)();return l.createElement(ne,{label:"Check interval",value:n,onValueChange:o,unit:a,onUnitChange:i,isDisabled:!t})};var ae=n(8711),re=n(59303);const oe=(0,ae.default)(a.Box).withConfig({displayName:"delayNotification__Grid",componentId:"sc-4dhott-0"})(["display:grid;grid-template-columns:repeat(2,1fr);gap:8px 16px;"]),ie=()=>{const{alertingConditions:{delayNotification:e},setDelayNotificationActive:t,setDelayNotificationUpValue:n,setDelayNotificationUpUnit:o,setDelayNotificationDownValue:i,setDelayNotificationDownUnit:c,setDelayNotificationMaxDelayValue:s,setDelayNotificationMaxDelayUnit:u,setDelayNotificationMultiplier:d}=(0,r.op)(),{active:m,up:p,down:g,multiplier:h,max:E}=e,v=!m,x=(0,re.m8)(t),b=(0,re.L7)(d);return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Toggle,{labelRight:"Delay Notification",colored:!0,checked:m,onChange:x}),l.createElement(oe,null,l.createElement(ne,{label:"Initial Delay on Alert Severity Escalation",value:null===p||void 0===p?void 0:p.value,onValueChange:n,unit:null===p||void 0===p?void 0:p.unit,onUnitChange:o,isDisabled:v}),l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Text,{color:v?"textLite":"text"},"Delay Multiplier on successive delays"),l.createElement(a.TextInput,{value:h,onChange:b,type:"number",min:0,step:.1,size:"tiny",containerStyles:{width:"60px"},disabled:v})),l.createElement(ne,{label:"Initial Delay on Alert Severity De-escalation",value:null===g||void 0===g?void 0:g.value,onValueChange:i,unit:null===g||void 0===g?void 0:g.unit,onUnitChange:c,isDisabled:v}),l.createElement(ne,{label:"Limit Maximum Delay",value:null===E||void 0===E?void 0:E.value,onValueChange:s,unit:null===E||void 0===E?void 0:E.unit,onUnitChange:u,isDisabled:v})))},ce=()=>{const{alertingConditions:{agentOptions:e},setAgentOptionsActive:t,setAgentOptionsRepeatNotification:n,setAgentOptionsWarningAlertsDurationValue:o,setAgentOptionsWarningAlertsDurationUnit:i,setAgentOptionsCriticalAlertsDurationValue:c,setAgentOptionsCriticalAlertsDurationUnit:s,setAgentOptionsSendToValue:u,setAgentOptionsSendToClearNotifications:d,setAgentOptionsExecScriptActive:m,setAgentOptionsExecScriptPath:p}=(0,r.op)(),{active:g,off:h,warningAlertsDuration:E,criticalAlertsDuration:v,sendTo:x,execScript:b}=e,y=!g,f=y||h,C=(0,re.m8)(t),A=(0,re.pU)(n,!0),w=(0,re.pU)(d,!0),T=(0,re.L7)(u),I=(0,re.pU)(m),S=(0,re.L7)(p);return l.createElement(a.Flex,{column:!0,gap:2},l.createElement(a.Toggle,{labelRight:"Agent Specific Options",colored:!0,checked:g,onChange:C}),l.createElement(a.Flex,{column:!0,gap:2,width:"100%"},l.createElement(a.Checkbox,{label:"Repeat Alert Notifications",checked:!h,onChange:A,disabled:y}),l.createElement(a.Flex,{gap:4},l.createElement(ne,{label:"Warning Alerts Duration isActive",value:null===E||void 0===E?void 0:E.value,onValueChange:o,unit:null===E||void 0===E?void 0:E.unit,onUnitChange:i,isDisabled:f}),l.createElement(ne,{label:"Critical Alerts Duration isActive",value:null===v||void 0===v?void 0:v.value,onValueChange:c,unit:null===v||void 0===v?void 0:v.unit,onUnitChange:s,isDisabled:f})),l.createElement(a.Flex,{column:!0,gap:1},l.createElement(a.Text,{color:y?"textLite":"text"},"Send to"),l.createElement(Z.A,{content:"Insert space separated roles (already defined on the agent)",align:"top"},l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.TextInput,{value:null===x||void 0===x?void 0:x.value,placeholder:"Roles",onChange:T,disabled:y,size:"tiny"}),l.createElement(a.Checkbox,{label:"Don't send Clear notifications",checked:!(null!==x&&void 0!==x&&x.clearNotifications),onChange:w,disabled:y})))),l.createElement(a.Flex,{alignItems:"center",gap:4},l.createElement(a.Checkbox,{label:"Custom Exec Script",checked:null===b||void 0===b?void 0:b.active,onChange:I,disabled:y}),l.createElement(a.Box,{width:"500px"},l.createElement(a.TextInput,{value:null===b||void 0===b?void 0:b.path,placeholder:"/path/to/script",onChange:S,disabled:y,size:"tiny"})))))},se=e=>{let{advanced:t}=e;const{alertingConditions:{denoter:n},setMainDenoter:o}=(0,r.op)();return l.createElement(a.Flex,{column:!0,gap:4},l.createElement(a.Flex,{alignItems:"center",gap:2},l.createElement(a.Text,null,"Trigger when the evaluated value is"),l.createElement(H,{value:n,onChange:o}),l.createElement(a.Text,null,"the threshold")),l.createElement(te,{advanced:t}),l.createElement(le,{advanced:t}),t&&l.createElement(l.Fragment,null,l.createElement(ie,null),l.createElement(ce,null)))},ue=()=>{const{templateName:e,templateDescription:t,summary:n,setTemplateName:o,setTemplateDescription:i,setSummary:c}=(0,r.I8)();return l.createElement(a.Flex,{column:!0,gap:2,width:"100%"},l.createElement(a.Flex,{column:!0,gap:1,width:"100%"},l.createElement(a.Text,null,"Alert template Name"),l.createElement(a.TextInput,{value:e,onChange:e=>o(e.target.value),size:"tiny"})),l.createElement(a.Flex,{column:!0,gap:1,width:"100%"},l.createElement(a.Text,null,"Alert template Description"),l.createElement(a.TextInput,{value:t,onChange:e=>i(e.target.value),size:"tiny"}),l.createElement(a.TextSmall,{color:"textLite"},"Select an appropriate Template Description")),l.createElement(a.Flex,{column:!0,gap:1,width:"100%"},l.createElement(a.Text,null,"Alert summary"),l.createElement(a.TextInput,{value:n,onChange:e=>c(e.target.value),size:"tiny",placeholder:"Alert summary ${label:label_name} can be added"}),l.createElement(a.TextSmall,{color:"textLite"},"Add a custom title to receive Alert notifications")))},de=ae.default.div.withConfig({displayName:"styled__StyledTerminalCommand",componentId:"sc-jb3u29-0"})(["display:flex;position:relative;flex-direction:column;color:",";background:",";border:1px solid ",";border-radius:4px;cursor:pointer;overflow-wrap:anywhere;white-space:pre-wrap;padding:16px 16px 24px;width:100%;height:100%;font-family:monospace;font-weight:bold;letter-spacing:0.09px;line-height:18px;font-size:14px;word-break:break-word;overflow-y:auto;"],(0,a.getColor)("primary"),(0,a.getColor)("terminalGreen"),(0,a.getColor)("primary")),me=(0,ae.default)(a.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-jb3u29-1"})(["display:flex;align-self:flex-end;cursor:pointer;position:absolute;bottom:16px;right:16px;"]);var pe=n(18682);const ge=()=>{const[e]=(0,r.$h)(),t=(0,l.useMemo)((()=>(0,re.sS)(e)),[e]);return l.createElement(de,{onClick:(0,pe.C)(t,{text:"Config copied to your clipboard."})},t,l.createElement(me,{name:"copy",size:"small",color:"textLite",onClick:(0,pe.C)(t,{text:"Config copied to your clipboard."})}))};var he=n(54856),Ee=n(4659),ve=n(22292),xe=n(19673),be=n(42728),ye=n(37618),fe=n(68741);const Ce=()=>l.createElement(a.Flex,{column:!0,gap:2,width:"100%",height:"100%",alignItems:"center",justifyContent:"center"},l.createElement(a.Flex,{flexWrap:!0,gap:2,alignItems:"center",justifyContent:"center"},l.createElement(a.Icon,{color:"warning",name:"warning_triangle",height:"16px"}),l.createElement(a.TextBig,null,"This feature is only available to paid plans"),l.createElement(he.A,{Component:a.TextBig})),l.createElement(a.Text,null,"Take a quick look at"," ",l.createElement(Ee.A,{href:"https://learn.netdata.cloud/docs/live-demo",target:"_blank",rel:"noopener noreferrer",Component:a.Text},"one of the demo spaces"),"."),l.createElement(a.Text,null,l.createElement(Ee.A,{href:"https://learn.netdata.cloud/docs/alerting/creating-alerts-with-the-alerts-configuration-manager",target:"_blank",rel:"noopener noreferrer",Component:a.Text},"Checkout the docs")," ","for more information.")),Ae=e=>{let{isAnonymous:t}=e;return l.createElement(a.Flex,{column:!0,gap:2,width:"100%",height:"100%",alignItems:"center",justifyContent:"center",padding:[0,8]},t?l.createElement(l.Fragment,null,l.createElement(a.TextBig,{textAlign:"center"},"Please sign in to unlock this feature"),l.createElement(fe.A,null)):l.createElement(a.TextBig,{textAlign:"center"},"Please go to a space that is on Business plan to unlock this feature."))},we=e=>{let{canViewConfiguration:t}=e;return t?l.createElement(a.Flex,{width:"100%",column:!0,gap:3},l.createElement(a.Text,null,"Configuration"),l.createElement(ge,null)):l.createElement(Ce,null)},Te=(e=>t=>{const{value:n}=(0,xe.JN)(),{slug:a}=n||{},r=!(0,be.Kj)(a);return l.createElement(e,(0,b.A)({canViewConfiguration:r},t))})(we),Ie=e=>{const t=(0,ve.uW)("isAnonymous"),n=(0,E.vt)();return(0,ye.ES)(n)?l.createElement(Ae,{isAnonymous:t}):t?l.createElement(we,(0,b.A)({canViewConfiguration:!0},e)):l.createElement(Te,e)},Se=()=>l.createElement(a.Flex,{gap:3,height:"100%"},l.createElement(a.Flex,{width:"70%",height:"100%",column:!0,gap:2,padding:[2,2,2,0],overflow:{vertical:"auto"}},l.createElement(x,null),l.createElement(f,null),l.createElement(y,{title:"Select the Detection Method"},l.createElement(A,null)),l.createElement(f,null),l.createElement(y,{title:"Select and define the metric to alert on",showAdvanced:!0},l.createElement(G,null)),l.createElement(f,null),l.createElement(y,{title:"Define alerting conditions",showAdvanced:!0},l.createElement(se,null)),l.createElement(f,null),l.createElement(y,{title:"Description"},l.createElement(ue,null))),l.createElement(f,{isVertical:!0}),l.createElement(a.Flex,{width:"30%",padding:[2,0]},l.createElement(Ie,null)))},54856:(e,t,n)=>{n.d(t,{A:()=>u});var l=n(58168),a=n(96540),r=n(84976),o=n(83199),i=n(4659),c=n(46741),s=n(27994);const u=function(){let{containerProps:e={},...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,c.JT)("billing:ReadAll"),{url:u}=(0,s.A)();return u?a.createElement(o.Flex,(0,l.A)({background:"sideBarMini",border:{side:"all",color:"border"},padding:[1,2],round:!0},e),a.createElement(i.A,(0,l.A)({align:"bottom",as:r.N_,boxProps:{as:o.Flex},color:"text",Component:o.TextMicro,content:n?"Upgrade your plan in order to use this feature":"You have no permissions to manage billing",disabled:!n,hoverColor:"textFocus",showToolTip:!0,strong:!0,to:u},t),"Upgrade now!")):null}},35243:(e,t,n)=>{n.d(t,{G:()=>i,N:()=>o});n(3064),n(98992),n(72577);var l=n(47444),a=n(80925);const r=(0,l.eU)({key:"currentChartsContainerKey",default:null}),o=()=>{const e=(0,a.e)(),t=(0,l.vc)(r);return e&&e.getRoot().getChildren().find((e=>e.match({id:t})))},i=()=>(0,l.lZ)(r)}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6384.0fad56b0bc902f186c98.chunk.js b/src/web/gui/v2/6384.0fad56b0bc902f186c98.chunk.js deleted file mode 100644 index 1d34f7927..000000000 --- a/src/web/gui/v2/6384.0fad56b0bc902f186c98.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="598e5ba4-f52e-4f8d-8c4b-05b81a830989",e._sentryDebugIdIdentifier="sentry-dbid-598e5ba4-f52e-4f8d-8c4b-05b81a830989")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6384],{29176:(e,t,n)=>{n.d(t,{m:()=>m});var r=n(35840);function a(e){return(0,r.w)(e,Date.now())}var i=n(25733),o=n(2940),s=n(49858),u=n(43924),c=n(2642),f=n(96519),d=n(82695),l=n(40215);function D(e,t,n){const r=(0,d.q)(),a=n?.locale??r.locale??f.c,D=(0,i.z)(e,t);if(isNaN(D))throw new RangeError("Invalid time value");const m=Object.assign({},n,{addSuffix:n?.addSuffix,comparison:D});let N,g;D>0?(N=(0,c.a)(t),g=(0,c.a)(e)):(N=(0,c.a)(e),g=(0,c.a)(t));const w=(0,u.O)(g,N),b=((0,l.G)(g)-(0,l.G)(N))/1e3,h=Math.round((w-b)/60);let T;if(h<2)return n?.includeSeconds?w<5?a.formatDistance("lessThanXSeconds",5,m):w<10?a.formatDistance("lessThanXSeconds",10,m):w<20?a.formatDistance("lessThanXSeconds",20,m):w<40?a.formatDistance("halfAMinute",0,m):w<60?a.formatDistance("lessThanXMinutes",1,m):a.formatDistance("xMinutes",1,m):0===h?a.formatDistance("lessThanXMinutes",1,m):a.formatDistance("xMinutes",h,m);if(h<45)return a.formatDistance("xMinutes",h,m);if(h<90)return a.formatDistance("aboutXHours",1,m);if(h{n.d(t,{R:()=>a});var r=n(2642);function a(e){return+(0,r.a)(e){n.d(t,{H:()=>a});var r=n(2940);function a(e,t){const n=t?.additionalDigits??2,a=function(e){const t={},n=e.split(i.dateTimeDelimiter);let r;if(n.length>2)return t;/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],i.timeZoneDelimiter.test(t.date)&&(t.date=e.split(i.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length)));if(r){const e=i.timezone.exec(r);e?(t.time=r.replace(e[1],""),t.timezone=e[1]):t.time=r}return t}(e);let D;if(a.date){const e=function(e,t){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),r=e.match(n);if(!r)return{year:NaN,restDateString:""};const a=r[1]?parseInt(r[1]):null,i=r[2]?parseInt(r[2]):null;return{year:null===i?a:100*i,restDateString:e.slice((r[1]||r[2]).length)}}(a.date,n);D=function(e,t){if(null===t)return new Date(NaN);const n=e.match(o);if(!n)return new Date(NaN);const r=!!n[4],a=c(n[1]),i=c(n[2])-1,s=c(n[3]),u=c(n[4]),f=c(n[5])-1;if(r)return function(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}(0,u,f)?function(e,t,n){const r=new Date(0);r.setUTCFullYear(e,0,4);const a=r.getUTCDay()||7,i=7*(t-1)+n+1-a;return r.setUTCDate(r.getUTCDate()+i),r}(t,u,f):new Date(NaN);{const e=new Date(0);return function(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(d[t]||(l(e)?29:28))}(t,i,s)&&function(e,t){return t>=1&&t<=(l(e)?366:365)}(t,a)?(e.setUTCFullYear(t,i,Math.max(a,s)),e):new Date(NaN)}}(e.restDateString,e.year)}if(!D||isNaN(D.getTime()))return new Date(NaN);const m=D.getTime();let N,g=0;if(a.time&&(g=function(e){const t=e.match(s);if(!t)return NaN;const n=f(t[1]),a=f(t[2]),i=f(t[3]);if(!function(e,t,n){if(24===e)return 0===t&&0===n;return n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}(n,a,i))return NaN;return n*r.s0+a*r.Cg+1e3*i}(a.time),isNaN(g)))return new Date(NaN);if(!a.timezone){const e=new Date(m+g),t=new Date(0);return t.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),t.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),t}return N=function(e){if("Z"===e)return 0;const t=e.match(u);if(!t)return 0;const n="+"===t[1]?-1:1,a=parseInt(t[2]),i=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,i))return NaN;return n*(a*r.s0+i*r.Cg)}(a.timezone),isNaN(N)?new Date(NaN):new Date(m+g+N)}const i={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},o=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,s=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,u=/^([+-])(\d{2})(?::?(\d{2}))?$/;function c(e){return e?parseInt(e):1}function f(e){return e&&parseFloat(e.replace(",","."))||0}const d=[31,null,31,30,31,30,31,31,30,31,30,31];function l(e){return e%400===0||e%4===0&&e%100!==0}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6469.47926fa38028dc7d0d41.chunk.js b/src/web/gui/v2/6469.47926fa38028dc7d0d41.chunk.js deleted file mode 100644 index f9ef10cf9..000000000 --- a/src/web/gui/v2/6469.47926fa38028dc7d0d41.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ab16de72-dc9f-47f6-ac2a-d39c4e215ee3",e._sentryDebugIdIdentifier="sentry-dbid-ab16de72-dc9f-47f6-ac2a-d39c4e215ee3")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6469],{62727:(e,t,n)=>{n.r(t),n.d(t,{default:()=>P});n(17333),n(41393),n(98992),n(54520),n(81454),n(62953);var r=n(96540),o=n(45467),l=n(11128),a=n(47762),i=n(45123),c=n(87659),s=n(47731),d=n(82230),u=n(24398),m=n(57605),f=n(11261),p=n(38413),h=n(8711),g=n(83199),v=n(49389),E=n(63950),x=n.n(E),y=n(78062),b=n(50876);const w=e=>{let{startAddingNodes:t=x(),close:n=x(),children:o}=e;const{sendLog:l}=(0,b.A)(),a=(0,r.useCallback)((()=>{n(),t(),l({feature:"NodesFilterAddNodes"})}),[n,t,l]);return r.createElement(g.Flex,{column:!0,gap:1,padding:[2,2,1],zIndex:1,border:{side:"top",color:"border"}},r.createElement(g.Flex,{gap:2,justifyContent:"end"},r.createElement(y.A,{icon:"nodes_hollow",flavour:"hollow",onClick:a,small:!0,label:"Add Nodes"})),o)};var A=n(99292),C=n(94177),k=n(90535),I=n(22292),F=n(73865),T=n(6586),N=n(12602);const S=e=>{let{onAnchorClick:t}=e;const{loaded:n,hasLimitations:o,maxNodes:l}=(0,F.A)();return n&&o?r.createElement(g.Flex,{gap:2,padding:[3]},r.createElement(g.Icon,{name:"warning_triangle",size:"small",color:"warning"}),r.createElement(g.Text,null,"Your plan is limited to ",l," nodes."," ",r.createElement(N.A,{onClick:t},r.createElement(g.Text,{color:"primary"},"Upgrade for no limitations"))," ","or"," ",r.createElement(T.A,{onClick:t},r.createElement(g.Text,{color:"primary"},"review your Space active Nodes")),".")):null},R=e=>{let{onAnchorClick:t=x()}=e;return(0,I.uW)("isAnonymous")?null:r.createElement(S,{onAnchorClick:t})},_=["filters"],D=(0,h.default)(g.Drop).attrs({backdrop:!0,align:{top:"bottom",right:"right"},animation:!0,background:"modalBackground",column:!0,margin:[2,0,0],padding:[2,0],round:4,width:200}).withConfig({displayName:"dropdown__Dropdown",componentId:"sc-1birv08-0"})([""]),O=(0,r.memo)((e=>{let{target:t,onClose:n,onAddNodes:o}=e;const a=(0,l.w7)(),i=(0,m.A)();return(0,r.useEffect)((()=>{i()}),[]),r.createElement(D,{target:t,onEsc:n,onClickOutside:n},r.createElement(g.Flex,{column:!0,height:{max:"60vh"}},r.createElement(g.Flex,{flex:"1",overflow:"hidden"},r.createElement(g.Flex,{column:!0,flex:!0},r.createElement(g.Flex,{alignItems:"center",padding:[3],border:{side:"bottom",color:"border"},height:12,flex:!1},r.createElement(g.Text,{strong:!0},"Visualizing data in space from ",a.length||"all"," ",(0,v.su)(a.length))),r.createElement(R,{onAnchorClick:n}),r.createElement(C.A,{testIdPrefix:"node-ids",param:"selectedNodeIds",groupProps:{collapsible:!1,background:"modalBackground",padding:[3],flex:"1",overflow:"hidden"},height:"auto",width:"100%"})),r.createElement(A.Ay,{basis:60,baseWidth:60,flex:!1,title:"Dynamic filters",help:"Filter your nodes for this page. Count next to each item refer to the number of nodes that will be selected and used across the page.",includedTabs:_,loaded:!0,onClose:n,groupProps:{background:"modalBackground"},background:"modalBackground"})),r.createElement(w,{startAddingNodes:o,close:n},r.createElement(k.A,null))))})),P=(0,r.memo)((()=>{const e=(0,s.J)(),[t,n,,h]=(0,c.A)(!1),g=(0,r.useRef)(),v=(0,l.w7)(),E=(0,a.BU)().length,x=(0,a.Ig)().length,y=(0,a.GE)().length,b=(0,a.no)().length,w=(0,a.BU)(v.length?v:void 0).length,A=(0,a.Ig)(v.length?v:void 0).length,C=(0,a.GE)(v.length?v:void 0).length,k=(0,a.no)(v.length?v:void 0).length,I=(0,r.useMemo)((()=>({live:{selected:w,total:E,statusText:"Live"},stale:{selected:A,total:x,statusText:"Stale"},offline:{selected:C,total:y,statusText:"Offline"},unseen:{selected:k,total:b,statusText:"Unseen"}})),[E,x,y,b,w,A,C]),F=(0,m.A)();(0,o.A)((()=>{F(t)}),[t]);const[T,,N,S]=(0,c.A)();return r.createElement(r.Fragment,null,r.createElement(i.A,{ref:g,testid:"globalFilter-nodes",icon:"nodes",onClick:n,round:1,padding:e?[1]:[2],width:"auto",cursor:"pointer",selected:t},r.createElement(f.A,{"data-testid":"nodesIndicator",alignItems:"center",justifyContent:"end",gap:2},Object.keys(I).filter((e=>I[e].total)).map((t=>r.createElement(d.A,{key:t,statusText:I[t].statusText,total:I[t].total,selected:I[t].selected,statusColor:u.P[t],isScreenSmall:e}))))),g.current&&t&&r.createElement(O,{target:g.current,onClose:h,onAddNodes:N}),T&&r.createElement(p.A,{onClose:S}))}))},78062:(e,t,n)=>{n.d(t,{A:()=>u});var r=n(58168),o=n(96540),l=n(83199),a=n(28146),i=n(69765),c=n(3914),s=n(53285);var d;const u=(d=l.Button,e=>{const t=(0,i.XA)(),n=(0,c.dg)();return o.createElement(s.A,{permission:"node:Create"},(i=>{const c=o.createElement(d,(0,r.A)({disabled:!i},e));return i?c:o.createElement(a.A,{content:n?"You are viewing your local node, connect to cloud and connect multiple nodes to view at once":"Only admin users can add nodes to ".concat(t.name),"data-testid":"addNodeTooltipContainer"},o.createElement(l.Box,null,c))}))})},90535:(e,t,n)=>{n.d(t,{A:()=>g});n(41393),n(81454),n(62953);var r=n(96540),o=n(83199),l=n(47762),a=n(11128);const i=e=>{let{children:t}=e;return r.createElement(o.Flex,{"data-testid":"selected-nodes-container",alignItems:"center",width:"100%"},r.createElement(o.Flex,{alignItems:"center"},r.createElement(o.TextSmall,{whiteSpace:"nowrap","data-testid":"selected-nodes-container-message",color:"primary"},"Selected filters:")),r.createElement(o.Flex,{overflow:"hidden",padding:[1],gap:1,alignItems:"center",flexWrap:!0},t))},c=(0,r.memo)(i);var s=n(4659);const d=e=>{let{onRemove:t}=e;return r.createElement(o.Box,{"data-testid":"remove-button",as:o.Icon,name:"close_circle",onClick:t,cursor:"pointer",width:3,height:3,color:"textLite"})},u=(0,r.forwardRef)(((e,t)=>{let{removeFilter:n,group:l,id:a,value:i,isAnchorDisabled:c,onClick:u}=e;const[m,f]=i.split("|"),p=f?"".concat(m," > ").concat(f):m;return r.createElement(o.Flex,{width:"100%",ref:t,"data-testid":"selected-node-item-".concat(a)},r.createElement(o.Pill,{flavour:"neutral",hollow:!0},r.createElement(o.Flex,{position:"relative",gap:2,alignItems:"center"},u?r.createElement(s.A,{Component:o.TextSmall,disabled:c,onClick:u,cursor:"pointer",color:"text",hoverColor:"primary",visitedColor:"accent",disabledColor:"textLite"},p):r.createElement(o.TextSmall,null,p),r.createElement(d,{onRemove:()=>n({param:l,removedValue:a}),id:a}))))})),m=(0,r.memo)(u),f={selectedNodeIds:"Node",nodeStatuses:"Status",nodeLabels:"Host label",nodeCapabilities:"Capability",nodeVersions:"Version"},p=(0,r.forwardRef)(((e,t)=>{let{group:n,values:l,hasUnion:a,union:i="AND",removeFilter:c,Component:s=m}=e;const d=f[n];return null!==l&&void 0!==l&&l.length?r.createElement(r.Fragment,{key:"filter"},a&&r.createElement(o.TextSmall,{strong:!0},i),r.createElement(o.Pill,{flavour:"neutral",hollow:!0,gap:1,TextComponent:o.Flex,textProps:{alignItems:"center",gap:1},flexWrap:!0},r.createElement(o.TextNano,{strong:!0},d,":"),l.map(((e,t)=>r.createElement(r.Fragment,{key:e},t>0&&r.createElement(o.TextSmall,{strong:!0},"OR"),r.createElement(s,{removeFilter:c,id:e,value:e,group:n})))))):null})),h=(0,r.forwardRef)(((e,t)=>{let{removeFilter:n,value:o}=e;const a=(0,l.xY)(o,"name"),i=(0,l.xY)(o,"isOffline"),c=(0,l.d3)(o);return r.createElement(m,{ref:t,removeFilter:n,group:"selectedNodeIds",id:o,value:a,isAnchorDisabled:i,onClick:c})})),g=(0,r.memo)((e=>{let{flavour:t}=e;const[[n,l=[]],i]=(0,a._e)({extraKey:t,merge:!1});return n.length||l.length?r.createElement(o.Flex,{width:"100%",overflow:"hidden"},r.createElement(c,null,n.map(((e,t)=>{let[n,o]=e;return r.createElement(p,{key:n,group:n,values:o,hasUnion:t>0,removeFilter:i})})),r.createElement(p,{group:"selectedNodeIds",values:l,hasUnion:!!n.length&&!!l.length,union:"OR",removeFilter:i,Component:h}))):r.createElement("div",null)}))},24074:(e,t,n)=>{var r=n(69565),o=n(28551),l=n(2360),a=n(55966),i=n(56279),c=n(91181),s=n(97751),d=n(53982),u=n(62529),m=s("Promise"),f="AsyncFromSyncIterator",p=c.set,h=c.getterFor(f),g=function(e,t,n){var r=e.done;m.resolve(e.value).then((function(e){t(u(e,r))}),n)},v=function(e){e.type=f,p(this,e)};v.prototype=i(l(d),{next:function(){var e=h(this);return new m((function(t,n){var l=o(r(e.next,e.iterator));g(l,t,n)}))},return:function(){var e=h(this).iterator;return new m((function(t,n){var l=a(e,"return");if(void 0===l)return t(u(void 0,!0));var i=o(r(l,e));g(i,t,n)}))}}),e.exports=v},84428:(e,t,n)=>{var r=n(78227)("iterator"),o=!1;try{var l=0,a={next:function(){return{done:!!l++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(i){}e.exports=function(e,t){try{if(!t&&!o)return!1}catch(i){return!1}var n=!1;try{var l={};l[r]=function(){return{next:function(){return{done:n=!0}}}},e(l)}catch(i){}return n}},87290:(e,t,n)=>{var r=n(50516),o=n(19088);e.exports=!r&&!o&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,t,n)=>{var r=n(24475),o=n(44576);e.exports="process"===o(r.process)},50133:(e,t,n)=>{var r=n(69565),o=n(94901),l=n(28551),a=n(1767),i=n(50851),c=n(55966),s=n(78227),d=n(24074),u=s("asyncIterator");e.exports=function(e){var t,n=l(e),s=!0,m=c(n,u);return o(m)||(m=i(n),s=!1),void 0!==m?t=r(m,n):(t=n,s=!0),l(t),a(s?t:new d(a(t)))}},48646:(e,t,n)=>{var r=n(69565),o=n(28551),l=n(1767),a=n(50851);e.exports=function(e,t){t&&"string"===typeof e||o(e);var n=a(e);return l(o(void 0!==n?r(n,e):e))}},10916:(e,t,n)=>{var r=n(24475),o=n(80550),l=n(94901),a=n(92796),i=n(33706),c=n(78227),s=n(87290),d=n(50516),u=n(96395),m=n(77388),f=o&&o.prototype,p=c("species"),h=!1,g=l(r.PromiseRejectionEvent),v=a("Promise",(function(){var e=i(o),t=e!==String(o);if(!t&&66===m)return!0;if(u&&(!f.catch||!f.finally))return!0;if(!m||m<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};if((n.constructor={})[p]=r,!(h=n.then((function(){}))instanceof r))return!0}return!t&&(s||d)&&!g}));e.exports={CONSTRUCTOR:v,REJECTION_EVENT:g,SUBCLASSING:h}},90537:(e,t,n)=>{var r=n(80550),o=n(84428),l=n(10916).CONSTRUCTOR;e.exports=l||!o((function(e){r.all(e).then(void 0,(function(){}))}))},30237:(e,t,n)=>{n(6469)("flatMap")},96167:(e,t,n)=>{var r=n(46518),o=n(69565),l=n(79306),a=n(36043),i=n(1103),c=n(72652);r({target:"Promise",stat:!0,forced:n(90537)},{allSettled:function(e){var t=this,n=a.f(t),r=n.resolve,s=n.reject,d=i((function(){var n=l(t.resolve),a=[],i=0,s=1;c(e,(function(e){var l=i++,c=!1;s++,o(n,t,e).then((function(e){c||(c=!0,a[l]={status:"fulfilled",value:e},--s||r(a))}),(function(e){c||(c=!0,a[l]={status:"rejected",reason:e},--s||r(a))}))})),--s||r(a)}));return d.error&&s(d.value),n.promise}})},32679:(e,t,n)=>{var r=n(46518),o=n(69565),l=n(79306),a=n(28551),i=n(20034),c=n(1767),s=n(92059),d=n(62529),u=n(50133),m=n(20772),f=n(96395),p=s((function(e){var t=this,n=t.iterator,r=t.mapper;return new e((function(l,c){var s=function(e){t.done=!0,c(e)},f=function(e){m(n,s,e,s)},p=function(){try{e.resolve(a(o(t.next,n))).then((function(n){try{if(a(n).done)t.done=!0,l(d(void 0,!0));else{var o=n.value;try{var c=r(o,t.counter++),m=function(e){try{t.inner=u(e),h()}catch(n){f(n)}};i(c)?e.resolve(c).then(m,f):m(c)}catch(p){f(p)}}}catch(g){s(g)}}),s)}catch(c){s(c)}},h=function(){var n=t.inner;if(n)try{e.resolve(a(o(n.next,n.iterator))).then((function(e){try{a(e).done?(t.inner=null,p()):l(d(e.value,!1))}catch(n){f(n)}}),f)}catch(r){f(r)}else p()};h()}))}));r({target:"AsyncIterator",proto:!0,real:!0,forced:f},{flatMap:function(e){return a(this),l(e),new p(c(this),{mapper:e,inner:null})}})},30670:(e,t,n)=>{var r=n(46518),o=n(69565),l=n(79306),a=n(28551),i=n(1767),c=n(48646),s=n(19462),d=n(9539),u=n(96395),m=s((function(){for(var e,t,n=this.iterator,r=this.mapper;;){if(t=this.inner)try{if(!(e=a(o(t.next,t.iterator))).done)return e.value;this.inner=null}catch(l){d(n,"throw",l)}if(e=a(o(this.next,n)),this.done=!!e.done)return;try{this.inner=c(r(e.value,this.counter++),!1)}catch(l){d(n,"throw",l)}}}));r({target:"Iterator",proto:!0,real:!0,forced:u},{flatMap:function(e){return a(this),l(e),new m(i(this),{mapper:e,inner:null})}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6469.89070793921be1288bb5.css b/src/web/gui/v2/6469.89070793921be1288bb5.css deleted file mode 100644 index e5d02668f..000000000 --- a/src/web/gui/v2/6469.89070793921be1288bb5.css +++ /dev/null @@ -1,2 +0,0 @@ -.default .dygraph-axis-label{color:#35414a}.dark .dygraph-axis-label{color:#fff}.dygraph-label-rotate-right{text-align:center;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg)}.dygraph-annotation{position:absolute;z-index:10;overflow:hidden;border:1px solid} - diff --git a/src/web/gui/v2/6661.72f782bd78fea8c2d836.chunk.js b/src/web/gui/v2/6661.72f782bd78fea8c2d836.chunk.js deleted file mode 100644 index 38b38de3b..000000000 --- a/src/web/gui/v2/6661.72f782bd78fea8c2d836.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},d=(new Error).stack;d&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[d]="bea2cd4d-f017-4db5-b9e3-546372542647",e._sentryDebugIdIdentifier="sentry-dbid-bea2cd4d-f017-4db5-b9e3-546372542647")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6661],{46661:(e,d,t)=>{t.r(d),t.d(d,{default:()=>f});var n=t(96540),o=t(47767),a=t(83199),l=t(68938);const r={width:600,height:600},f=e=>{let{email:d}=e;const t=(0,o.Zp)(),f=(0,n.useCallback)((()=>t(window.location.pathname,{replace:!0})),[]);return n.createElement(a.Layer,{backdrop:!0,backdropProps:{backdropBlur:"3px"},"data-track":"typeform-signup-form"},n.createElement(l.Widget,{id:localStorage.getItem("typeformId")||"jC4PHA0q",style:r,medium:"demo-test",onSubmit:f,hidden:{email:d}}))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/6760.370b9780120c145da28f.chunk.js b/src/web/gui/v2/6760.370b9780120c145da28f.chunk.js deleted file mode 100644 index 78f07daf6..000000000 --- a/src/web/gui/v2/6760.370b9780120c145da28f.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="849965ac-d76d-4654-9eee-fc709635d008",e._sentryDebugIdIdentifier="sentry-dbid-849965ac-d76d-4654-9eee-fc709635d008")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6760],{96760:(e,t,n)=>{n.r(t),n.d(t,{default:()=>I});var l=n(96540),a=n(8711),d=n(63950),o=n.n(d),r=n(81638),c=n(64473),i=n(83199),m=n(84976),s=n(47762);const f=e=>{let{id:t}=e;const n=(0,s.Zl)(t),a=(0,s.xY)(t,"name");return l.createElement(m.N_,{to:n},l.createElement(i.Flex,{alignItems:"center",gap:1},l.createElement(i.Icon,{name:"node_hollow",color:"primary",size:"small"}),l.createElement(i.Flex,{width:{max:40},overflow:"hidden"},l.createElement(i.Text,{color:"primary",whiteSpace:"nowrap"},a)),l.createElement(i.Icon,{name:"goToNode",color:"primary",size:"small"})))};var E=n(25825),u=n(89879),b=n(60072),h=n(80618),p=n(58010),w=n(17240);const g=e=>{let{id:t}=e;const n=(0,s.xY)(t);return n.loaded?l.createElement(i.Flex,{column:!0,gap:1,overflow:{horizontal:"hidden",vertical:"auto"},padding:[2],width:"100%"},l.createElement(E.A,{node:n}),l.createElement(u.A,{id:t,flavour:"sidebar"}),l.createElement(b.A,{node:n}),l.createElement(h.A,{node:n}),l.createElement(p.A,{node:n}),l.createElement(w.A,{node:n})):null};var y=n(20687);const v=(0,a.default)(i.Tabs).withConfig({displayName:"contents__StyledTabs",componentId:"sc-11zjb7h-0"})(["overflow:hidden;height:100%;"]),_=e=>t=>l.createElement(i.Flex,{column:!0,overflow:"hidden",height:"calc(100% - 80px)",position:"relative",gap:3,padding:[1,0]},l.createElement(e,t)),x=_(g),A=_(y.A),I=e=>{let{id:t,onClose:n=o()}=e;return l.createElement(r.Ay,{width:90,isOpen:!0,header:l.createElement(c.A,{title:l.createElement(f,{id:t}),onClick:n})},l.createElement(i.Flex,{"data-testid":"home-sidebar-tabs",column:!0,overflow:"hidden",height:"100%"},l.createElement(v,{selected:0},l.createElement(i.Tab,{label:l.createElement(i.Text,null,"Info"),small:!0},l.createElement(x,{id:t})),l.createElement(i.Tab,{label:l.createElement(i.Text,null,"Alerts"),small:!0},l.createElement(A,{nodeIds:[t]})))))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/683.02c173493ef257c210fa.chunk.js b/src/web/gui/v2/683.02c173493ef257c210fa.chunk.js deleted file mode 100644 index 1f9470c2e..000000000 --- a/src/web/gui/v2/683.02c173493ef257c210fa.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var o="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new Error).stack;e&&(o._sentryDebugIds=o._sentryDebugIds||{},o._sentryDebugIds[e]="ee64041b-8fce-4c14-8c7a-93b3842283aa",o._sentryDebugIdIdentifier="sentry-dbid-ee64041b-8fce-4c14-8c7a-93b3842283aa")}catch(o){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[683],{683:(o,e,t)=>{t.r(e),t.d(e,{Notification:()=>l.Eg,Warning:()=>f,createErrorNotification:()=>l.gi,createNotification:()=>l.UI,default:()=>g,showDashboardCreatedNotification:()=>c.jE,showInvalidDashboardSlugNotification:()=>c.$j,showJoiningSpaceNotification:()=>c.Fw,showNodesNotification:()=>c.AM,showRoomCreationNotification:()=>c.ZM,showRoomsInSpaceNotification:()=>c.mw,showRoomsNotification:()=>c.r0,showSpaceNotification:()=>c.X7,showUsersInRoomNotification:()=>c.R9,showUsersInSpaceNotification:()=>c.sb,toast:()=>d.A});var a=t(58168),n=t(96540),r=t(8711),i=t(83199),s=t(99571),d=t(78217),c=t(24198),l=t(13871);const f=o=>{let{title:e,children:t,...r}=o;return n.createElement(i.Flex,(0,a.A)({column:!0,gap:2,background:"warningBackground",backgroundOpacity:.7,round:!0,padding:[4]},r),e&&n.createElement(i.H3,null,e),t)},g=(0,r.default)((o=>{let{className:e,...t}=o;return n.createElement(i.Box,{className:e},n.createElement(s.N9,(0,a.A)({},t,{closeButton:!1})))})).withConfig({displayName:"notifications__Container",componentId:"sc-8t8ne-0"})([".Toastify__toast-container{position:fixed;width:unset;min-width:400px;max-width:500px;z-index:50;color:",";}.Toastify__toast{padding:0;padding-top:5px;background:",";border:1px solid ",";}.Toastify__toast--error{background:",";border:1px solid ",";}.Toastify__toast--warning{background:",";border:1px solid ",";}.Toastify__toast--success{background:",";border:1px solid ",";}.Toastify__toast-icon{display:none;}.Toastify__toast-body{}.Toastify__progress-bar{bottom:unset;top:0;}.Toastify__progress-bar--success{background-color:",";}.Toastify__progress-bar--error{background-color:",";}"],(0,i.getColor)(["neutral","limedSpruce"]),(0,i.getColor)("elementBackground"),(0,i.getColor)("text"),(0,i.getColor)(["red","lavender"]),(0,i.getColor)("error"),(0,i.getColor)("bright"),(0,i.getColor)("warning"),(0,i.getColor)(["green","frostee"]),(0,i.getColor)("success"),(0,i.getColor)("success"),(0,i.getColor)("error"))}}]); \ No newline at end of file diff --git a/src/web/gui/v2/683.cc9fa5f3bdc0bf3ab2fc.css b/src/web/gui/v2/683.cc9fa5f3bdc0bf3ab2fc.css deleted file mode 100644 index c936073e2..000000000 --- a/src/web/gui/v2/683.cc9fa5f3bdc0bf3ab2fc.css +++ /dev/null @@ -1,10 +0,0 @@ -:root{--toastify-color-light: #fff;--toastify-color-dark: #121212;--toastify-color-info: #3498db;--toastify-color-success: #07bc0c;--toastify-color-warning: #f1c40f;--toastify-color-error: #e74c3c;--toastify-color-transparent: rgba(255, 255, 255, 0.7);--toastify-icon-color-info: var(--toastify-color-info);--toastify-icon-color-success: var(--toastify-color-success);--toastify-icon-color-warning: var(--toastify-color-warning);--toastify-icon-color-error: var(--toastify-color-error);--toastify-toast-width: 320px;--toastify-toast-background: #fff;--toastify-toast-min-height: 64px;--toastify-toast-max-height: 800px;--toastify-font-family: sans-serif;--toastify-z-index: 9999;--toastify-text-color-light: #757575;--toastify-text-color-dark: #fff;--toastify-text-color-info: #fff;--toastify-text-color-success: #fff;--toastify-text-color-warning: #fff;--toastify-text-color-error: #fff;--toastify-spinner-color: #616161;--toastify-spinner-color-empty-area: #e0e0e0;--toastify-color-progress-light: linear-gradient( - to right, - #4cd964, - #5ac8fa, - #007aff, - #34aadc, - #5856d6, - #ff2d55 - );--toastify-color-progress-dark: #bb86fc;--toastify-color-progress-info: var(--toastify-color-info);--toastify-color-progress-success: var(--toastify-color-success);--toastify-color-progress-warning: var(--toastify-color-warning);--toastify-color-progress-error: var(--toastify-color-error)}.Toastify__toast-container{z-index:var(--toastify-z-index);-webkit-transform:translate3d(0, 0, var(--toastify-z-index));position:fixed;padding:4px;width:var(--toastify-toast-width);box-sizing:border-box;color:#fff}.Toastify__toast-container--top-left{top:1em;left:1em}.Toastify__toast-container--top-center{top:1em;left:50%;transform:translateX(-50%)}.Toastify__toast-container--top-right{top:1em;right:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width: 480px){.Toastify__toast-container{width:100vw;padding:0;left:0;margin:0}.Toastify__toast-container--top-left,.Toastify__toast-container--top-center,.Toastify__toast-container--top-right{top:0;transform:translateX(0)}.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-right{bottom:0;transform:translateX(0)}.Toastify__toast-container--rtl{right:0;left:initial}}.Toastify__toast{position:relative;min-height:var(--toastify-toast-min-height);box-sizing:border-box;margin-bottom:1rem;padding:8px;border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,0.1),0 2px 15px 0 rgba(0,0,0,0.05);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-height:var(--toastify-toast-max-height);overflow:hidden;font-family:var(--toastify-font-family);cursor:default;direction:ltr;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-body{margin:auto 0;-ms-flex:1 1 auto;flex:1 1 auto;padding:6px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.Toastify__toast-body>div:last-child{word-break:break-word;-ms-flex:1;flex:1}.Toastify__toast-icon{-webkit-margin-end:10px;margin-inline-end:10px;width:20px;-ms-flex-negative:0;flex-shrink:0;display:-ms-flexbox;display:flex}.Toastify--animate{animation-fill-mode:both;animation-duration:0.7s}.Toastify--animate-icon{animation-fill-mode:both;animation-duration:0.3s}@media only screen and (max-width: 480px){.Toastify__toast{margin-bottom:0;border-radius:0}}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--light{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--default{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{color:var(--toastify-text-color-info);background:var(--toastify-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{color:var(--toastify-text-color-success);background:var(--toastify-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{color:var(--toastify-text-color-warning);background:var(--toastify-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{color:var(--toastify-text-color-error);background:var(--toastify-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error{background:var(--toastify-color-transparent)}.Toastify__close-button{color:#fff;background:transparent;outline:none;border:none;padding:0;cursor:pointer;opacity:0.7;transition:0.3s ease;-ms-flex-item-align:start;align-self:flex-start}.Toastify__close-button--light{color:#000;opacity:0.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:hover,.Toastify__close-button:focus{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}100%{transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:var(--toastify-z-index);opacity:0.7;transform-origin:left}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:transform 0.2s}.Toastify__progress-bar--rtl{right:0;left:initial;transform-origin:right}.Toastify__spinner{width:20px;height:20px;box-sizing:border-box;border:2px solid;border-radius:100%;border-color:var(--toastify-spinner-color-empty-area);border-right-color:var(--toastify-spinner-color);animation:Toastify__spin 0.65s linear infinite}@keyframes Toastify__bounceInRight{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}from{opacity:0;transform:translate3d(3000px, 0, 0)}60%{opacity:1;transform:translate3d(-25px, 0, 0)}75%{transform:translate3d(10px, 0, 0)}90%{transform:translate3d(-5px, 0, 0)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px, 0, 0)}to{opacity:0;transform:translate3d(2000px, 0, 0)}}@keyframes Toastify__bounceInLeft{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;transform:translate3d(-3000px, 0, 0)}60%{opacity:1;transform:translate3d(25px, 0, 0)}75%{transform:translate3d(-10px, 0, 0)}90%{transform:translate3d(5px, 0, 0)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px, 0, 0)}to{opacity:0;transform:translate3d(-2000px, 0, 0)}}@keyframes Toastify__bounceInUp{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}from{opacity:0;transform:translate3d(0, 3000px, 0)}60%{opacity:1;transform:translate3d(0, -20px, 0)}75%{transform:translate3d(0, 10px, 0)}90%{transform:translate3d(0, -5px, 0)}to{transform:translate3d(0, 0, 0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0, -10px, 0)}40%,45%{opacity:1;transform:translate3d(0, 20px, 0)}to{opacity:0;transform:translate3d(0, -2000px, 0)}}@keyframes Toastify__bounceInDown{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1)}0%{opacity:0;transform:translate3d(0, -3000px, 0)}60%{opacity:1;transform:translate3d(0, 25px, 0)}75%{transform:translate3d(0, -10px, 0)}90%{transform:translate3d(0, 5px, 0)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0, 10px, 0)}40%,45%{opacity:1;transform:translate3d(0, -20px, 0)}to{opacity:0;transform:translate3d(0, 2000px, 0)}}.Toastify__bounce-enter--top-left,.Toastify__bounce-enter--bottom-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--top-right,.Toastify__bounce-enter--bottom-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--top-left,.Toastify__bounce-exit--bottom-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--top-right,.Toastify__bounce-exit--bottom-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{from{opacity:0;transform:scale3d(0.3, 0.3, 0.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{from{opacity:1}50%{opacity:0;transform:scale3d(0.3, 0.3, 0.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{from{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);opacity:1}to{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);opacity:0}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{from{transform:translate3d(110%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes Toastify__slideInLeft{from{transform:translate3d(-110%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes Toastify__slideInUp{from{transform:translate3d(0, 110%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes Toastify__slideInDown{from{transform:translate3d(0, -110%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes Toastify__slideOutRight{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(110%, 0, 0)}}@keyframes Toastify__slideOutLeft{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(-110%, 0, 0)}}@keyframes Toastify__slideOutDown{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(0, 500px, 0)}}@keyframes Toastify__slideOutUp{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(0, -500px, 0)}}.Toastify__slide-enter--top-left,.Toastify__slide-enter--bottom-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--top-right,.Toastify__slide-enter--bottom-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--top-left,.Toastify__slide-exit--bottom-left{animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--top-right,.Toastify__slide-exit--bottom-right{animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{animation-name:Toastify__slideOutDown}@keyframes Toastify__spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} - diff --git a/src/web/gui/v2/6944.ab3e70c9ac0f05013b5f.chunk.js b/src/web/gui/v2/6944.ab3e70c9ac0f05013b5f.chunk.js deleted file mode 100644 index d4fefb2ea..000000000 --- a/src/web/gui/v2/6944.ab3e70c9ac0f05013b5f.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="efcc7859-d165-4f9b-8c26-b09700c78f65",e._sentryDebugIdIdentifier="sentry-dbid-efcc7859-d165-4f9b-8c26-b09700c78f65")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[6944],{6944:(e,t,a)=>{a.r(t),a.d(t,{default:()=>O});a(62953);var n=a(96540),l=a(83199),o=a(47731),r=a(8711);const s=(0,r.default)(l.ModalContent).attrs((e=>{let{isMobile:t}=e;return{width:t?{base:"95vw"}:{min:120,max:160}}})).withConfig({displayName:"styled__AwsModalContent",componentId:"sc-cgxyx4-0"})([""]),c=(0,r.default)(l.Flex).attrs((e=>({border:{side:"all",color:"primary"},color:"primary",padding:[2],justifyContent:"center",round:!0,cursor:"pointer",opacity:e.disabled?"0.4":"1",...e}))).withConfig({displayName:"styled__StyledSpaceSelector",componentId:"sc-cgxyx4-1"})(["pointer-events:",";&:hover{background-color:",";color:#00cd51;text-decoration:none;}"],(e=>{let{disabled:t}=e;return t?"none":"auto"}),(0,l.getColor)("secondaryHighlight"));var i=a(58168);a(17333),a(98992),a(54520);const d=e=>{let{state:t,setState:a}=e;const{firstName:o,lastName:r,company:s}=t||{},[c,i]=(0,l.useTouchedState)({}),[d,u]=(0,l.useTouchedState)({}),[m,p]=(0,l.useTouchedState)({}),b=(0,n.useCallback)((e=>t=>{a((a=>({...a,[e]:t.target.value})))}),[a]);return n.createElement(l.Flex,{column:!0,gap:2},n.createElement(l.TextInput,{label:"First name",value:o||"",placeholder:"Enter your first name",onChange:b("firstName"),size:"small",touched:c,onBlur:i,error:c&&!o?"Provide your first name":""}),n.createElement(l.TextInput,{label:"Last name",value:r||"",placeholder:"Enter your last name",onChange:b("lastName"),size:"small",touched:d,onBlur:u,error:d&&!r?"Provide your last name":""}),n.createElement(l.TextInput,{label:"Company",value:s||"",placeholder:"Enter your company name",onChange:b("company"),size:"small",touched:m,onBlur:p,error:m&&!s?"Provide your company name":""}))};a(41393),a(81454);var u=a(63950),m=a.n(u),p=a(92155),b=a(80158),f=a(47130);const g=(0,p.A)((0,f.A)(c)),y=e=>{let{id:t,slug:a,name:l,isEligible:o,reason:r,isDisabled:s,onSpaceSelection:c=m()}=e;const i=(0,n.useCallback)((()=>{o&&c({spaceId:t,spaceSlug:a})}),[t,a,o,c]),d=s?"Please fill in the required fields":!o&&r?(0,b.Zr)(r):null;return n.createElement(g,{feature:"LabraSpaceSelect",payload:{spaceId:t},disabled:!o||s,tooltip:d,tooltipProps:{align:"bottom"},onClick:i},l)},E=function(){let{state:e,setState:t,eligible:a=[],nonEligible:o=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{firstName:r,lastName:s,company:c}=e||{},d=!r||!s||!c,u=(0,n.useCallback)((e=>{let{spaceId:a}=e;t((e=>({...e,spaceId:a})))}),[t]);return n.createElement(l.Flex,{column:!0,gap:4},n.createElement(l.Text,null,"Select a space to connect to your AWS subscription."),n.createElement(l.Flex,{column:!0,gap:2,justifyContent:"center"},a.map((e=>n.createElement(y,(0,i.A)({key:e.id,onSpaceSelection:u,isDisabled:d},e)))),o.map((e=>n.createElement(y,(0,i.A)({key:e.id},e))))))};var h=a(4659);const v={ErrSubscriptionAlreadyAttached:()=>n.createElement(l.Text,{lineHeight:1.5},"This subscription is already attached to a Netdata space / account."),FETimeout:()=>n.createElement(l.Text,{lineHeight:1.5},"The subscription could not be validated. Please try again in sometime by refreshing the page. If it does not work, please reach out to"," ",n.createElement(h.A,{href:"mailto:support@netdata.cloud",as:"a",cursor:"pointer",textDecoration:"underline",color:"main"},"support@netdata.cloud")," ","and retry setting up the account from the AWS Marketplace"),default:()=>n.createElement(l.Text,null,"Something went wrong.")},S=e=>{let{errorKey:t,error:a}=e;const o=a?()=>n.createElement(l.Text,null,a):v[t]||v.default;return n.createElement(l.Flex,{alignItems:"center",justifyContent:"center",height:30,padding:[0,8]},n.createElement(o,null))};var C=a(28738);const I=function(){let{state:e,setState:t,isLoading:a,timeLeft:o,spaces:r=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const s=r.filter((e=>{let{isEligible:t}=e;return t})),c=r.filter((e=>{let{isEligible:t}=e;return!t}));return s.length?a?n.createElement(C.A,{height:50,padding:[4],title:"Validating your Subscription. Please Wait.",body:"This may take upto 5 minutes."}):n.createElement(l.Flex,{column:!0,gap:8},n.createElement(d,{state:e,setState:t}),n.createElement(E,{state:e,setState:t,eligible:s,nonEligible:c})):n.createElement(S,{error:"No eligible spaces found."})},x=e=>{let{state:t,setState:a,isLoading:l,timeLeft:o,spacesLoadable:r={},error:s}=e;const{loaded:c,value:d={},hasError:u,error:m}=r;return c?u?n.createElement(S,{errorKey:m}):s?n.createElement(S,{errorKey:s.errorKey}):n.createElement(I,(0,i.A)({state:t,setState:a,isLoading:l,timeLeft:o},d)):n.createElement(C.A,{height:50,padding:[4],title:"Loading spaces..."})};var k=a(3914);const w=e=>{let{state:t,forceHiddenConfirmation:a,onConfirm:o,onDecline:r}=e;const{spaceId:s}=t||{},c=(0,k.ns)(s,"name");return s&&!a?n.createElement(l.ConfirmationDialog,{confirmLabel:"Yes, select space",declineLabel:"No","data-testid":"subscribeSpaceToAWSDialog",handleConfirm:o,handleDecline:r,hideIcon:!0,isConfirmPositive:!0,message:n.createElement(l.Flex,{gap:2,column:!0},n.createElement(l.TextBig,null,"You are about to tie your AWS subscription to ",n.createElement(l.TextBig,{strong:!0},c)," space."),n.createElement(l.TextBig,null,"Are you sure you want to select this space?")),title:"Select space"}):null};a(9391);var A=a(47767),L=a(84976),T=a(47444),_=a(26655),N=a(49286);var P=a(71835);const F=(0,T.K0)({key:"labraSpacesSelector",get:e=>{let{url:t}=e;return()=>(e=>e?_.A.get(e,{transform:e=>(0,N.bn)(e)}):Promise.resolve({}))(t)}}),D=["labra_subscription_id","aws_customer_id","aws_product_id"],M=()=>{const e=(0,A.Zp)(),t=(0,k.ap)("slug"),[a,l]=(0,L.ok)();return(0,n.useCallback)((n=>{a&&(D.forEach((e=>a.delete(e))),l(a)),n?window.location.href="/spaces/".concat(t):e("/spaces/".concat(t))}),[a,l,e,t])},B=e=>{let{subscriptionId:t}=e;const[a,l]=(0,P.A)(),o=M();return(0,n.useCallback)((e=>{let{firstName:n,lastName:r,company:s,spaceId:c}=e;return(e=>{let{firstName:t,lastName:a,company:n,spaceId:l,subscriptionId:o}=e;return _.A.patch("/api/v2/spaces/".concat(l,"/billing/labra/subscription"),{first_name:t,last_name:a,company:n,subscription_id:o})})({firstName:n,lastName:r,company:s,spaceId:c,subscriptionId:t}).then((()=>{a({header:"Success",text:"Successfully subscribed space"}),o(!0)})).catch(l).finally((()=>Promise.resolve()))}),[t,o])},H=(0,p.A)(l.Button),K=e=>{let{isLoading:t}=e;const a=M();return n.createElement(l.ModalFooter,null,n.createElement(H,{feature:"LabraSpacesSelectorClose",label:"Close",flavour:"hollow",onClick:a,disabled:t}))};var R=a(19673),W=a(99090),j=a(36712);const z=function(){let{enabled:e,onReceive:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,k.vt)();(0,W.A)((()=>({enabled:e,polling:!0,fetch:()=>(0,j.PE)(a),onReceive:t,force:!0,pollingOptions:{pollingInterval:1e3}})),[a,t])},Y=function(){let{state:e,hasConfirmed:t,onReceive:a,onProgress:l,onStopPolling:o,waitFor:r=6e4}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{spaceId:s}=e||{};z({enabled:t,onReceive:a}),(0,n.useEffect)((()=>{let e=!0,a=null,n=r;return s&&t&&(a=setInterval((()=>{n-=1e3,null===l||void 0===l||l({timeLeft:n}),0==n&&(null===o||void 0===o||o(),clearInterval(a),a=null)}),1e3)),()=>{e=!1,a&&(clearInterval(a),a=null)}}),[s,t])};var J=a(87659),Z=a(63314);const q=3e5,O=e=>{let{subCallback:t}=e;const a=(0,o.J)(),[r,c]=(0,n.useState)(),[i,d]=(0,n.useState)({}),[u,m]=(0,n.useState)(),[p,,b]=(0,J.A)(),[f,,g]=(0,J.A)(),[y,E]=(0,n.useState)(q),h=(e=>{var t,a;let{url:n}=e;const l=(0,T.xf)(F({url:n}));return{loaded:"loading"!==l.state,value:null===(t=l.contents)||void 0===t?void 0:t.data,hasError:"hasError"===l.state,error:null===(a=l.contents)||void 0===a||null===(a=a.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.errorMsgKey}})({url:t}),{value:v={}}=h||{},{subscriptionId:S}=v,C=B({subscriptionId:S}),I=M(),{refresh:k}=(0,R.JN)(),A=(0,n.useCallback)((function(){let{data:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{trialEndsAt:t}=e||{};e&&!t&&(k(),setTimeout((()=>{I()}),1e3))}),[I,k]),L=(0,n.useCallback)((e=>{let{timeLeft:t}=e;E(t)}),[E]),_=(0,n.useCallback)((()=>{m({errorKey:"FETimeout"}),c(!1)}),[m,c]);Y({state:i,hasConfirmed:f,onReceive:A,onProgress:L,onStopPolling:_,waitFor:q});const N=(0,n.useCallback)((()=>{c(!0),g(),C(i),b()}),[c,C,b,i]),P=(0,n.useCallback)((()=>{d((e=>({...e,spaceId:void 0})))}),[d]);return n.createElement(n.Fragment,null,n.createElement(l.Modal,{"data-testid":"aws-modal",backdropProps:{backdropBlur:!0}},n.createElement(Z.Ay,{feature:"LabraSpacesSelector"},n.createElement(s,{isMobile:a},n.createElement(l.ModalHeader,null,n.createElement(l.Flex,{gap:2,alignItems:"center"},n.createElement(l.Icon,{name:"netdataPress",color:"text"}),n.createElement(l.H4,null,"Welcome to Netdata!"))),n.createElement(l.ModalBody,{padding:[4,4,8,4]},n.createElement(x,{state:i,setState:d,spacesLoadable:h,isLoading:r,timeLeft:y,error:u})),n.createElement(K,{isLoading:r})))),n.createElement(w,{state:i,forceHiddenConfirmation:p,onConfirm:N,onDecline:P}))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js b/src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js deleted file mode 100644 index 36d16c78e..000000000 --- a/src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt */ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ba656e97-6c3b-4a66-ac99-de0d672e8878",e._sentryDebugIdIdentifier="sentry-dbid-ba656e97-6c3b-4a66-ac99-de0d672e8878")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7144],{62055:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=h(r(96540)),a=h(r(8711)),o=r(83199),i=v(r(99010)),l=h(r(1249)),u=v(r(24652)),c=r(22332),f=r(96380),d=h(r(33640)),s=r(99506),p=["children","fractionDigits"],m=["children"];function g(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(g=function(e){return e?r:t})(e)}function v(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=g(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function h(e){return e&&e.__esModule?e:{default:e}}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var w=(0,a.default)(o.Flex).attrs({position:"relative","data-testid":"chartPopover-dimension",padding:[1,0]}).withConfig({displayName:"dimension__GridRow",componentId:"sc-wluvip-0"})(["display:contents;"]),O=(0,a.default)(i.ColorBar).attrs({position:"absolute",top:0,left:0,backgroundOpacity:.4,round:.5}).withConfig({displayName:"dimension__ColorBackground",componentId:"sc-wluvip-1"})([""]),x={ANOMALY_RATE:"arp",default:"value"},_=function(e){var t=e.children,r=e.fractionDigits,a=void 0===r?0:r,i=y(e,p),l=t.toString().split("."),c=l[0],f=l[1];return n.default.createElement(o.Flex,{alignItems:"center",justifyContent:"end",padding:[0,.5]},n.default.createElement(u.Value,b({},i,{textAlign:"right"}),c),"undefined"!==typeof f&&n.default.createElement(u.Value,i,"."),n.default.createElement(u.Value,b({as:o.Flex,flex:!1,width:1.8*a},i,{textAlign:"left"}),f))},j=function(e){var t=e.children,r=y(e,m);return n.default.createElement(o.Flex,{gap:1,justifyContent:"end"},Object.keys(t).map((function(e){return n.default.createElement(o.Flex,{key:e,border:{size:"1px",side:"all",color:t[e]},round:!0,flex:!1,padding:[0,.5]},n.default.createElement(d.default,{content:f.labels[e]||e},n.default.createElement(u.Value,b({},r,{color:t[e]}),e)))})))};t.default=function(e){var t=e.id,r=e.strong,a=e.rowFlavour,f=e.fullCols,d=(0,c.useVisibleDimensionId)(t),p=(0,c.useChart)().getAttribute("unitsConversionFractionDigits");return n.default.createElement(w,{opacity:d?null:"weak"},n.default.createElement(o.Flex,{alignItems:"center",gap:1,position:"relative",overflow:"hidden"},n.default.createElement(O,{id:t,valueKey:x[a]||x.default,height:"100%"},n.default.createElement(i.default,{id:t})),n.default.createElement(l.default,{padding:[.5,1.5],flex:!0,id:t,strong:r,fontSize:"1.1em"})),n.default.createElement(u.default,{id:t,strong:r,visible:d,Component:_,fractionDigits:p,color:a===s.rowFlavours.default?"text":"textLite",fontSize:"1.1em"}),f&&n.default.createElement(n.default.Fragment,null,n.default.createElement(u.default,{id:t,strong:r,visible:d,valueKey:"arp",Component:_,fractionDigits:2,color:a===s.rowFlavours.ANOMALY_RATE?"anomalyTextFocus":"anomalyText",fontSize:"1.1em"}),n.default.createElement(u.default,{textAlign:"right",id:t,strong:r,visible:d,valueKey:"pa",Component:j,color:a===s.rowFlavours.ANNOTATIONS?"text":"textLite",fontSize:"1.1em"})))}},99506:(e,t,r)=>{t.__esModule=!0,t.rowFlavours=t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=c(r(8711)),o=r(22332),i=r(83199),l=c(r(75010)),u=c(r(62055));function c(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}var d=a.default.div.withConfig({displayName:"dimensions__Grid",componentId:"sc-x7v8hd-0"})(["display:grid;width:100%;grid-template-columns:",";gap:",";align-items:center;"],(function(e){return"full"===e.cols?"3fr 1fr 1fr 1fr":"5fr 2fr"}),(function(e){return e.gap||0})),s=[null,null],p=function(e){var t=Math.round((e-70)/18);return t<2?2:t},m=function(e){return p(e)/2},g=t.rowFlavours={ANOMALY_RATE:"ANOMALY_RATE",ANNOTATIONS:"ANNOTATIONS",default:"VALUE"},v={ANOMALY_RATE:"anomalyDesc",ANNOTATIONS:"annotationsDesc",default:"valueDesc"},h=function(e){var t=e.height,r=(e.width,(0,o.useChart)()),a=(0,o.useAttributeValue)("hoverX")||s,c=a[0],f=a[1],h=(0,o.usePayload)().data,b=(0,n.useMemo)((function(){var e=r.getClosestRow(c)||h.length-1,n=r.onHoverSortDimensions(e,v[f]||r.getAttribute("dimensionsSort")||v.default)||[];r.getAttribute("selectedDimensions").length>0&&(n=n.filter((function(e){return r.isDimensionVisible(e)})));var a=n.findIndex((function(e){return e===f})),o=n.length,i=Math.floor(function(e,t,r){return ee-m(r)?t-(m(r)+(e-t)):t-m(r)}(o,a,t)),l=Math.ceil(function(e,t,r){return ee-m(r)?e:t+m(r)}(o,a,t));return[i,l,o,n.slice(i,l)]}),[r,f,c,h,t]),y=b[0],w=b[1],O=b[2],x=b[3],_=g[f]||g.default,j=(0,o.useAttributeValue)("cols");return n.default.createElement(n.default.Fragment,null,n.default.createElement(i.TextNano,{fontSize:"1em",color:"textLite"},y>0?"\u2191"+y+" more values":n.default.createElement(n.default.Fragment,null,"\xa0")),n.default.createElement(d,{gap:"2px",column:!0,cols:j},n.default.createElement(i.TextMicro,{fontSize:"1em",strong:!0},"Dimension"),n.default.createElement(i.TextMicro,{fontSize:"1em",color:_===g.default?"text":"textLite",textAlign:"right"},"Value"," ",n.default.createElement(l.default,{visible:!0,strong:_===g.default,color:_===g.default?"text":"textLite",fontSize:"1em"})),"full"===j&&n.default.createElement(n.default.Fragment,null,n.default.createElement(i.TextMicro,{fontSize:"1em",strong:_===g.ANOMALY_RATE,color:_===g.ANOMALY_RATE?"text":"textLite",textAlign:"right"},"Anomaly%"),n.default.createElement(i.TextMicro,{fontSize:"1em",strong:_===g.ANNOTATIONS,color:_===g.ANNOTATIONS?"text":"textLite",textAlign:"right"},"Info")),x.map((function(e){return n.default.createElement(u.default,{key:e,id:e,strong:f===e,rowFlavour:_,fullCols:"full"===j})}))),n.default.createElement(i.TextNano,{color:"textLite",fontSize:"1em"},w{t.Ay=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=f(r(74113)),o=r(22332),i=f(r(10534)),l=r(89380),u=f(r(99506)),c=["uiName"];function f(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,c),f=(0,o.useOnResize)(r),d=f.width,p=f.height;return n.default.createElement(l.ChartWrapper,{ref:t},n.default.createElement(a.default,s({uiName:r,column:!0,gap:.5,position:"relative"},i),n.default.createElement(u.default,{height:p,width:d})))}));t.Ay=(0,i.default)(p,{tile:!0})},74113:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332),i=["uiName"];function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i),l=(0,o.useChart)(),c=(0,n.useRef)();return(0,n.useLayoutEffect)((function(){return l.getUI(t).mount(c.current),function(){return l.getUI(t)&&l.getUI(t).unmount()}}),[]),n.default.createElement(a.Flex,u({"data-testid":"chartContent",ref:c,height:"100%",width:"100%",overflow:"hidden"},r))}},89031:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=(n=r(8711))&&n.__esModule?n:{default:n},o=r(83199),i=["height","width"];function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function u(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var c=(0,a.default)(o.Flex).attrs((function(e){var t=e.height,r=void 0===t?"100%":t,n=e.width,a=void 0===n?"100%":n;return function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i))})).withConfig({displayName:"container__Container",componentId:"sc-sbp2x3-0"})(["::selection{background:transparent;}::-moz-selection{background:transparent;}"]);t.default=c},95662:(e,t,r)=>{t.Ay=void 0;var n=p(r(96540)),a=p(r(8711)),o=r(83199),i=d(r(74113)),l=r(22332),u=d(r(10534)),c=r(89380),f=["uiName"];function d(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function p(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,f),o=(0,l.useAttributeValue)("loaded"),u=(0,l.useOnResize)(r),d=u.width,s=u.height,p=d{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=r(83199),o=r(22332),i=l(r(44597));function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e){var t=e.title,r=e.children;return n.default.createElement(a.Flex,{gap:2},n.default.createElement(a.TextSmall,{color:"textDescription"},t),n.default.createElement(a.Flex,{as:a.TextSmall,background:"elementBackground"},r))};t.default=function(){var e=(0,o.useAttributeValue)("contextScope");return n.default.createElement(i.default,{title:"Plugin and chart context",color:"key","data-testid":"chartDetails-context"},n.default.createElement(u,{title:"Context"},e.join(", ")))}},90276:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=r(83199),o=r(22332),i=l(r(44597));function l(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e=(0,o.useTitle)(),t=(0,o.useAttributeValue)("info"),r=(0,o.useAttributeValue)("sectionInfo"),l=(0,o.useChart)(),u=function(e){var t=e.target.hash,r=void 0===t?"":t;r.startsWith("#menu")&&(e.preventDefault(),l.sdk.trigger("goToLink",l,r.substr(1)))};return n.default.createElement(i.default,{title:e,color:"key","data-testid":"cartDetails-description"},n.default.createElement(a.TextSmall,{color:"textDescription",dangerouslySetInnerHTML:{__html:r},onClick:u}),n.default.createElement(a.TextSmall,{color:"textDescription",dangerouslySetInnerHTML:{__html:t},onClick:u}))}},93693:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=f(r(96540)),a=f(r(8711)),o=r(83199),i=r(22332),l=f(r(85546)),u=f(r(760)),c=f(r(90276));function f(e){return e&&e.__esModule?e:{default:e}}var d=(0,a.default)(o.Flex).attrs({column:!0,padding:[3,2],gap:3,overflow:{vertical:"auto"},width:"100%",height:"100%"}).withConfig({displayName:"details__Container",componentId:"sc-etnkd0-0"})([""]);t.default=function(){var e=(0,i.useAttributeValue)("nodeName");return n.default.createElement(d,{"data-testid":"chartDetails"},n.default.createElement(c.default,null),e&&n.default.createElement(u.default,null),n.default.createElement(l.default,null))}},44597:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=(n=r(96540))&&n.__esModule?n:{default:n},o=r(83199),i=["icon","title","children"];function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i);return a.default.createElement(o.Flex,l({gap:4},u),t,a.default.createElement(o.Flex,{column:!0,gap:1,flex:"grow",basis:0},a.default.createElement(o.Text,{strong:!0,color:"key"},r),n&&a.default.createElement(o.Flex,{column:!0,gap:1},n)))}},760:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=r(83199),o=r(22332),i=l(r(44597));function l(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e=(0,o.useAttributeValue)("nodeName");return n.default.createElement(i.default,{title:"Source",color:"key","data-testid":"chartDetails-source"},n.default.createElement(a.TextSmall,{color:"textDescription"},e))}},99891:(e,t,r)=>{t.Ay=void 0;var n=m(r(96540)),a=m(r(8711)),o=r(83199),i=s(r(74113)),l=r(22332),u=s(r(10534)),c=r(89380),f=s(r(62841)),d=["uiName"];function s(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function m(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,d),o=(0,l.useAttributeValue)("loaded"),u=(0,l.useOnResize)(r),f=u.width,s=u.height,p=f{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(83199),i=r(22332),l=(n=r(94069))&&n.__esModule?n:{default:n},u=["labelProps"];function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,u),n=(0,i.useChart)(),o=(0,i.useAttributeValue)("aggregationMethod"),c=function(e){return(0,a.useMemo)((function(){return[{value:"avg",label:"Average",description:"For each point presented, calculate the average of the metrics contributing to it.",short:"AVG()","data-track":e.track("avg")},{value:"sum",label:"Sum",description:"For each point presented, calculate the sum of the metrics contributing to it.",short:"SUM()","data-track":e.track("sum")},{value:"min",label:"Minimum",description:"For each point presented, present the minimum of the metrics contributing to it.",short:"MIN()","data-track":e.track("min")},{value:"max",label:"Maximum",description:"For each point presented, present the maximum of the metrics contributing to it.",short:"MAX()","data-track":e.track("max")}]}),[e])}(n),d=(c.find((function(e){return e.value===o}))||c[0]).short;return a.default.createElement(l.default,f({value:o,onChange:n.updateAggregationMethodAttribute,items:c,"data-track":n.track("aggregate"),dropTitle:m},r,{labelProps:s({secondaryLabel:"the",label:d,title:g.heading,tooltipProps:g},t)}))};t.default=(0,a.memo)(v)},35369:(e,t,r)=>{t.__esModule=!0,t.uniqueColumn=t.minColumn=t.metricsColumn=t.maxColumn=t.labelColumn=t.instancesColumn=t.contributionColumn=t.avgColumn=t.anomalyRateColumn=t.alertsColumn=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=c(r(99010)),i=c(r(75010)),l=r(22332),u=c(r(36112));function c(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}t.labelColumn=function(e){return{id:"label",header:function(){return n.default.createElement(a.TextSmall,{strong:!0},"Name")},size:200,minSize:60,maxSize:800,cell:function(t){var r=t.getValue,i=t.row,c=function(e){return(0,n.useMemo)((function(){return{dimension:"dimensions",node:"nodes",instance:e.intl("instance",{count:2}),label:"labels",value:"values",default:"values"}}),[])}((0,l.useChart)());return n.default.createElement(a.Flex,{justifyContent:"between",alignItems:"center",padding:[0,0,0,3*i.depth],width:"100%"},n.default.createElement(a.Flex,{gap:1},n.default.createElement(o.default,{id:i.original.value}),n.default.createElement(a.TextSmall,{strong:!0,onClick:i.original.disabled?void 0:i.getToggleSelectedHandler(),cursor:i.original.disabled?"default":"pointer",whiteSpace:"normal",wordBreak:"break-word"},r())),i.getCanExpand()&&n.default.createElement(u.default,{label:c[i.original.value]||c[e]||c.default,onClick:function(e){i.getToggleExpandedHandler()(e),setTimeout((function(){return e.target.scrollIntoView({behavior:"smooth",block:"nearest"})}))},iconRotate:i.getIsExpanded()?2:null,textProps:{fontSize:"10px",color:"textLite"},alignItems:"center"}))}}},t.uniqueColumn=function(){return{id:"unique",header:n.default.createElement(a.TextMicro,{strong:!0},"Unique"),size:45,minSize:30,maxSize:90,cell:function(e){var t=e.getValue;return n.default.createElement(a.TextSmall,{color:"textLite"},t())},sortingFn:"basic"}},t.minColumn=function(){return{id:"min",header:n.default.createElement(a.TextMicro,{strong:!0},"Min ",n.default.createElement(i.default,{visible:!0})),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t=e.getValue,r=(0,l.useConverted)(t());return n.default.createElement(a.TextSmall,{color:"textLite"},r)},sortingFn:"basic"}},t.avgColumn=function(){return{id:"avg",header:n.default.createElement(a.TextMicro,{strong:!0},"Avg ",n.default.createElement(i.default,{visible:!0})),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t=e.getValue,r=(0,l.useConverted)(t());return n.default.createElement(a.TextSmall,{color:"textLite"},r)},sortingFn:"basic"}},t.maxColumn=function(){return{id:"max",header:n.default.createElement(a.TextMicro,{strong:!0},"Max ",n.default.createElement(i.default,{visible:!0})),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t=e.getValue,r=(0,l.useConverted)(t());return n.default.createElement(a.TextSmall,{color:"textLite"},r)},sortingFn:"basic"}},t.instancesColumn=function(){return{id:"instances",header:n.default.createElement(a.TextMicro,{strong:!0},"Instances"),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t,r=e.getValue,o=e.row;if(null==(t=o.original.info)||!t.is)return n.default.createElement(a.TextSmall,{color:"textLite"},r());var i=o.original.info.is,l=i.qr,u=void 0===l?0:l,c=i.sl,f=void 0===c?0:c,d=i.ex,s=void 0===d?0:d;return n.default.createElement(a.Flex,{flex:!0,column:!0,gap:.5},n.default.createElement(a.TextSmall,{color:"textLite"},n.default.createElement(a.TextSmall,{color:"primary"},u)," of ",f+s),n.default.createElement(a.ProgressBar,{background:"progressBg",color:["green","deyork"],height:2,width:u/(f+s)*100+"%",containerWidth:"100%",border:"none"}))},sortingFn:"basic"}},t.metricsColumn=function(){return{id:"metrics",header:n.default.createElement(a.TextMicro,{strong:!0},"Metrics"),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t,r=e.row,o=e.getValue;if(null==(t=r.original.info)||!t.ds)return n.default.createElement(a.TextSmall,{color:"textLite"},o());var i=r.original.info.ds,l=i.qr,u=void 0===l?0:l,c=i.sl,f=void 0===c?0:c,d=i.ex,s=void 0===d?0:d;return n.default.createElement(a.Flex,{flex:!0,column:!0,gap:.5},n.default.createElement(a.TextSmall,{color:"textLite"},n.default.createElement(a.TextSmall,{color:"primary"},u)," of ",f+s),n.default.createElement(a.ProgressBar,{background:"progressBg",color:["green","deyork"],height:2,width:u/(f+s)*100+"%",containerWidth:"100%",border:"none"}))},sortingFn:"basic"}},t.contributionColumn=function(){return{id:"contribution",header:n.default.createElement(a.TextMicro,{strong:!0},"Vol %"),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t,r=e.row,o=e.getValue;return null!=(t=r.original.info)&&t.sts?n.default.createElement(a.Flex,{flex:!0,column:!0,gap:.5},n.default.createElement(a.TextSmall,{color:"primary"},Math.round(100*(o()+Number.EPSILON))/100,"%"),n.default.createElement(a.ProgressBar,{background:"progressBg",color:["green","deyork"],height:2,width:o()+"%",containerWidth:"100%",border:"none"})):n.default.createElement(a.TextSmall,{color:"textLite"},o())},sortingFn:"basic"}},t.anomalyRateColumn=function(){return{id:"anomalyRate",header:n.default.createElement(a.TextMicro,{strong:!0},"Anomaly%"),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t,r=e.row,o=e.getValue;return null!=(t=r.original.info)&&t.sts?n.default.createElement(a.Flex,{flex:!0,column:!0,gap:.5},n.default.createElement(a.TextSmall,{color:"textLite"},Math.round(100*(o()+Number.EPSILON))/100,"%"),n.default.createElement(a.ProgressBar,{background:"progressBg",color:"anomalyText",height:2,width:o()+"%",containerWidth:"100%",border:"none"})):n.default.createElement(a.TextSmall,{color:"textLite"},o())},sortingFn:"basic"}},t.alertsColumn=function(){return{id:"alerts",header:n.default.createElement(a.TextMicro,{strong:!0},"Alerts"),size:60,minSize:30,maxSize:300,fullWidth:!0,cell:function(e){var t,r=e.row,o=e.getValue;if(null==(t=r.original.info)||!t.al)return n.default.createElement(a.TextSmall,{color:"textLite"},o());var i=r.original.info.al,l=i.cl,u=void 0===l?0:l,c=i.cr,f=void 0===c?0:c,d=i.wr,s=void 0===d?0:d,p={text:f,flavour:f?"error":"disabledError"},m={text:s,flavour:s?"warning":"disabledWarning"},g={text:u,flavour:u?"clear":"disabledClear"};return n.default.createElement(a.Flex,null,n.default.createElement(a.MasterCard,{pillLeft:p,pillRight:m,pillEnd:g}))},sortingFn:"basic"}}},31866:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(65562),i=u(r(36112)),l=u(r(34578));function u(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=(n=r(94069))&&n.__esModule?n:{default:n},l=["labelProps"];function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,l),n=(0,o.useChart)(),u=(0,o.useAttributeValue)("contextScope"),f=(0,o.useAttributeValue)("contextItems");if(!f.length)return null;var s=(f.find((function(e){return e.value===u[0]}))||f[0]).label;return a.default.createElement(i.default,c({value:u,onChange:n.updateContextScopeAttribute,items:f,"data-track":n.track("contextScope")},r,{labelProps:d({secondaryLabel:"On",label:s,title:p.heading,tooltipProps:p},t)}))};t.default=(0,a.memo)(m)},65877:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=(n=r(34737))&&n.__esModule?n:{default:n},l=r(96659),u=r(35369),c=["labelProps"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,c),n=(0,o.useChart)(),u=(0,o.useAttributeValue)("selectedDimensions"),f=(0,o.useAttributeValue)("dimensions"),m=(0,o.useAttributeValue)("dimensionsTotals"),g=(0,a.useCallback)((function(){return Object.keys(f).map((function(e){var t=u.includes(e);return(0,l.getStats)(n,f[e],{key:"dimensions",props:{selected:t}})}))}),[f,u]),v=(0,o.useAttribute)("nodesSortBy"),h=v[0],b=v[1];return a.default.createElement(i.default,d({title:"Dimensions",resourceName:"dimension","data-track":n.track("dimensions"),labelProps:t,onChange:n.updateDimensionsAttribute,getOptions:g,tooltipProps:s,value:u,columns:p,sortBy:h,onSortByChange:b,totals:m},r))};t.default=(0,a.memo)(m)},94069:(e,t,r)=>{t.__esModule=!0,t.default=t.ItemContainer=t.Item=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=m(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=p(r(8711)),o=r(22332),i=r(83199),l=p(r(97517)),u=p(r(73862)),c=p(r(6504)),f=p(r(33640)),d=p(r(36112)),s=["labelProps"];function p(e){return e&&e.__esModule?e:{default:e}}function m(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(m=function(e){return e?r:t})(e)}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,s),a=(0,o.useAttributeValue)("id");return n.default.createElement(i.Menu,g({},r,{Item:y,dropProps:{align:{top:"bottom",left:"left"},"data-toolbox":a,width:"460px"},dropdownProps:{padding:[0,0,2,0],height:{max:"80vh"}}},r),n.default.createElement(d.default,g({},t,{"data-value":""+(r.value||"No selection")})))};t.default=(0,n.memo)(w)},34737:(e,t,r)=>{t.__esModule=!0,t.meta=t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=s(r(8711)),o=r(83199),i=r(22332),l=s(r(25772)),u=s(r(36112)),c=s(r(4975)),f=["getOptions","onItemClick","close","columns","sortBy","onSortByChange","expanded","onExpandedChange","tableMeta","enableSubRowSelection","value","newValues","totals","emptyMessage","title","filterSelectedCount"],d=["label","labelProps","onChange","getOptions","secondaryLabel","tooltipProps","value","columns","sortBy","onSortByChange","expanded","onExpandedChange","tableMeta","enableSubRowSelection","totals","emptyMessage","resourceName","title","filterSelectedCount"];function s(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}function v(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t0&&{backgroundOpacity:.4}),e.depth>0&&0===r&&{border:{side:"left",size:"4px"}})}},O=function(){},x=[{id:"contribution",desc:!0}],_={},j=function(e){return e},P=function(e){var t=e.getOptions,r=e.onItemClick,a=(e.close,e.columns),i=e.sortBy,u=e.onSortByChange,d=e.expanded,s=e.onExpandedChange,p=e.tableMeta,v=void 0===p?w:p,b=e.enableSubRowSelection,x=e.value,_=e.newValues,P=e.totals,k=e.emptyMessage,M=e.title,C=e.filterSelectedCount,S=void 0===C?j:C,A=g(e,f),D=(0,n.useMemo)(t,[]),T=(0,n.useState)((function(){return E(D,{})})),L=T[0],I=T[1];(0,n.useEffect)((function(){var e=E(D,{});I((function(t){return(0,l.default)(t,e)?t:e}))}),[]);var N=(0,n.useMemo)((function(){return!!_&&(0,l.default)(x,_)}),[_]),z=(0,n.useMemo)((function(){return null!=_&&_.length?S(_).length:0}),[_]);return n.default.createElement(y,m({role:"listbox",background:"dropdown",padding:[0],margin:[1,0],column:!0,tabindex:"-1",flex:!0},A),n.default.createElement(o.Table,{title:M,background:"dropdownTable",enableResizing:!0,enableSorting:!0,enableSelection:!0,dataColumns:a,data:D,onRowSelected:r,onSearch:O,meta:v,sortBy:i,rowSelection:L,onSortingChange:u,expanded:d,onExpandedChange:s,enableSubRowSelection:b,width:{base:250,max:"80vw"}}),n.default.createElement(o.Flex,{padding:[2],justifyContent:"between",alignItems:"center",border:{side:"top",color:"borderSecondary"}},n.default.createElement(o.Flex,{gap:1,alignItems:"center"},n.default.createElement(o.TextSmall,{color:"textLite"},"Selected ",n.default.createElement(o.TextSmall,{strong:!0},z)," of"," ",n.default.createElement(o.TextSmall,{strong:!0},((null==P?void 0:P.sl)||0)+((null==P?void 0:P.ex)||0)||D.length)),n.default.createElement(o.Button,{padding:[0],flavour:"borderless",width:"auto",height:"auto",cursor:"pointer",color:"primary",onClick:function(){I({}),r([])},disabled:!(null!=_&&_.length)&&!x.length,label:"clear",small:!0}),n.default.createElement(o.Button,{padding:[0],flavour:"borderless",width:"auto",height:"auto",cursor:"pointer",color:"primary",onClick:function(){I(h({},L)),r(x)},disabled:!N,label:"reset",small:!0}),!(null!=_&&_.length)&&!!k&&n.default.createElement(o.TextSmall,{color:"warningText"},k)),P&&n.default.createElement(c.default,m({selected:x},P))))},E=function e(t,r,n){return t.reduce((function(t,r,a){return"undefined"!==typeof n&&(a=n+"."+a),r.selected&&(t[a]=!0),r.children&&e(r.children,t,a),t}),r)};t.default=function(e){var t=e.label,r=e.labelProps,a=e.onChange,l=e.getOptions,f=e.secondaryLabel,s=e.tooltipProps,p=e.value,v=e.columns,h=e.sortBy,b=void 0===h?x:h,y=e.onSortByChange,w=e.expanded,O=void 0===w?_:w,j=e.onExpandedChange,E=e.tableMeta,k=e.enableSubRowSelection,M=e.totals,C=e.emptyMessage,S=e.resourceName,A=e.title,D=e.filterSelectedCount,T=g(e,d),L=(0,n.useState)(!1),I=L[0],N=L[1],z=(0,n.useState)(),W=z[0],F=z[1],V=(0,n.useRef)();(0,n.useEffect)((function(){!I&&W&&(V.current=null,a(W))}),[I]),(0,n.useEffect)((function(){return function(){return V.current&&a(V.current)}}),[]);var B=(0,i.useAttributeValue)("id");return n.default.createElement(o.Menu,m({onChange:function(e){V.current=e,F(e)},hasSearch:!1,closeOnClick:!1,Dropdown:P,dropProps:{align:{top:"bottom",left:"left"},"data-toolbox":B,keepHorizontal:!0,stretch:null},dropdownProps:{height:{max:"60vh"},width:"100%",overflow:"auto",columns:v,getOptions:l,sortBy:b,onSortByChange:y,expanded:O,onExpandedChange:j,tableMeta:E,enableSubRowSelection:k,value:p,totals:M,newValues:W,emptyMessage:C,title:A,filterSelectedCount:D},value:p,onOpen:function(){return N(!0)},onClose:function(){return N(!1)}},T),n.default.createElement(u.default,m({"data-value":p.join("|")||S+" all-selected",secondaryLabel:f,label:t||n.default.createElement(c.default,m({selected:p},M,{resourceName:S,teaser:!0})),title:s.heading,tooltipProps:s},r)))}},75157:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=E(r(96540)),a=r(83199),o=r(22753),i=r(22332),l=E(r(6533)),u=E(r(36495)),c=E(r(65877)),f=E(r(55146)),d=E(r(28119)),s=E(r(21105)),p=E(r(90648)),m=E(r(26482)),g=E(r(67231)),v=E(r(88623)),h=E(r(6885)),b=E(r(64776)),y=(E(r(31866)),E(r(34386))),w=E(r(68317)),O=E(r(10120)),x=E(r(31952)),_=E(r(40813)),j=E(r(49484)),P=E(r(6504));function E(e){return e&&e.__esModule?e:{default:e}}function k(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function M(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n,a=(n=r(8711))&&n.__esModule?n:{default:n},o=r(83199);function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var u=(0,a.default)(o.Flex).attrs((function(e){return function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=r(83199),l=(n=r(34737))&&n.__esModule?n:{default:n},u=r(96659),c=r(35369),f=["labelProps"];function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(a[r]=e[r]);return a}(e,f),c=(0,o.useChart)(),d=(0,o.useAttributeValue)("groupBy"),m=(0,o.useAttributeValue)("groupByLabel"),y=function(e){return(0,a.useMemo)((function(){return[{nm:"node",id:"node",key:"nodes"},{nm:e.intl("instance")+" "+("instance"===e.intl("instance")?"":"(instance)"),id:"instance",key:"instances"},{nm:"dimension",id:"dimension",key:"dimensions"},{nm:"percentage of "+e.intl("instance"),id:"percentage-of-instance",key:"instances"}]}),[])}(c),w=(0,a.useCallback)((function(){var e=c.getAttributes(),t=y.map((function(t){var r=d.includes(t.id);return(0,u.getStats)(c,t,function(e){for(var t=1;t1?m.length+" labels":m[0]:e}));return e.length{t.__esModule=!0,t.default=void 0;var n=u(r(96540)),a=u(r(46874)),o=u(r(75157)),i=u(r(19751)),l=["plain"];function u(e){return e&&e.__esModule?e:{default:e}}t.default=(0,i.default)((function(e){var t=e.plain,r=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n=0||(a[r]=e[r]);return a}(e,l);return n.default.createElement(a.default,r,n.default.createElement(o.default,{plain:t}))}))},55146:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=r(20207),l=(n=r(34737))&&n.__esModule?n:{default:n},u=r(96659),c=r(35369),f=["labelProps"];function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,f),n=(0,o.useChart)(),c=(0,o.useAttributeValue)("selectedInstances"),d=(0,o.useAttributeValue)("instances"),m=(0,o.useAttributeValue)("instancesTotals"),g=(0,a.useCallback)((function(){return Object.keys(d).map((function(e){return(0,u.getStats)(n,d[e],{id:e,key:"instances",props:{selected:c.includes(e)}})}))}),[d,c]),v=(0,o.useAttribute)("instancesSortBy"),h=v[0],b=v[1],y=function(e){return(0,a.useMemo)((function(){return{heading:(0,i.uppercase)(e.intl("instance",{count:2})),body:"View or filter the "+e.intl("instance",{count:2})+" contributing time-series metrics to this chart. This menu also provides the contribution of each "+e.intl("instance")+" to the volume of the chart, and a break down of the anomaly rate of the queried data per "+e.intl("instance")+"."}}),[])}(n);return a.default.createElement(l.default,s({title:(0,i.uppercase)(n.intl("instance",{count:2})),resourceName:"instance","data-track":n.track("instances"),labelProps:t,onChange:n.updateInstancesAttribute,getOptions:g,tooltipProps:y,value:c,columns:p,sortBy:h,onSortByChange:b,totals:m},r))};t.default=(0,a.memo)(m)},36112:(e,t,r)=>{t.__esModule=!0,t.default=t.Container=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=d(r(8711)),o=r(83199),i=d(r(63668)),l=d(r(6504)),u=r(33640),c=["width","open"],f=["icon","secondaryLabel","tertiaryLabel","label","chevron","iconRotate","textProps"];function d(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var b=t.Container=(0,a.default)(o.Flex).attrs((function(e){var t=e.width,r=void 0===t?{max:100}:t,n=e.open,a=h(e,c);return g(g({cursor:"pointer",role:"button",padding:[.5],gap:.5,width:r,alignItems:"center"},n&&{background:"selected"}),a)})).withConfig({displayName:"label__Container",componentId:"sc-1lmmfid-0"})(["&:hover{background:",";}"],(0,o.getColor)("selected")),y=(0,a.default)(o.TextSmall).attrs({whiteSpace:"nowrap",truncate:!0}).withConfig({displayName:"label__StyledLabel",componentId:"sc-1lmmfid-1"})(["flex:1;"]),w=(0,n.forwardRef)((function(e,t){var r=e.icon,a=e.secondaryLabel,u=e.tertiaryLabel,c=e.label,d=e.chevron,s=void 0===d||d,m=e.iconRotate,g=e.textProps,v=h(e,f);return r?n.default.createElement(b,p({ref:t},v),r):n.default.createElement(b,p({ref:t},v),a&&n.default.createElement(o.TextSmall,{color:"textLite",whiteSpace:"nowrap",truncate:!0},a),n.default.createElement(y,g,c),u&&n.default.createElement(o.TextSmall,{color:"textLite",whiteSpace:"nowrap",truncate:!0},u),s&&n.default.createElement(l.default,{svg:i.default,size:"12px",color:"textNoFocus",rotate:m}))}));t.default=(0,u.withTooltip)(w,{Content:function(e){var t=e.heading,r=e.body;return n.default.createElement(o.Flex,p({column:!0,gap:1},u.tooltipStyleProps),t&&n.default.createElement(o.TextSmall,{strong:!0},t),r&&n.default.createElement(o.TextSmall,null,r))},align:"top"})},88623:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=(n=r(34737))&&n.__esModule?n:{default:n},l=r(96659),u=r(35369),c=["labelProps"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,c),n=(0,o.useChart)(),u=(0,o.useAttributeValue)("selectedLabels"),f=(0,o.useAttributeValue)("labels"),m=(0,o.useAttributeValue)("labelsTotals"),g=(0,a.useCallback)((function(){return Object.keys(f).map((function(e){return(0,l.getStats)(n,f[e],{key:"labels",childrenKey:"values",props:{selected:u.includes(e)},childProps:{unique:"-",parentId:e,getIsSelected:function(t){return u.includes(e+":"+t.id)},getValue:function(t){return e+":"+t.id}},children:f[e].vl})}))}),[f,u]),v=(0,o.useAttribute)("labelsSortBy"),h=v[0],b=v[1],y=(0,o.useAttribute)("labelsExpanded"),w=y[0],O=y[1],x=(0,a.useCallback)((function(e){return e.filter((function(e){return!!e.parentId}))}),[]);return a.default.createElement(i.default,d({title:"Labels",resourceName:"label","data-track":n.track("labels"),labelProps:t,onChange:n.updateLabelsAttribute,getOptions:g,tooltipProps:s,value:u,columns:p,enableSubRowSelection:!0,sortBy:h,onSortByChange:b,expanded:w,onExpandedChange:O,totals:m,filterSelectedCount:x},r))};t.default=(0,a.memo)(m)},28119:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=(n=r(34737))&&n.__esModule?n:{default:n},l=r(96659),u=r(35369),c=["labelProps"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(a[r]=e[r]);return a}(e,c),n=(0,o.useChart)(),u=(0,o.useAttributeValue)("selectedNodes"),f=(0,o.useAttributeValue)("nodes"),p=(0,o.useAttributeValue)("instances"),v=(0,o.useAttributeValue)("nodesTotals"),h=(0,o.useAttributeValue)("selectedInstances"),b=(0,a.useCallback)((function(){return Object.keys(f).map((function(e){var t=u.includes(e);return(0,l.getStats)(n,f[e],{id:e,key:"nodes",childrenKey:"instances",props:{selected:t},childProps:{isInstance:!0,getValue:function(t){return t.id+"@"+e},getIsSelected:function(t){return h.includes(t.id+"@"+e)}},children:Object.keys(p).reduce((function(t,r){return p[r].ni===f[e].ni?[].concat(s(t),[p[r]]):t}),[])})}))}),[f,u,h]),y=(0,o.useAttribute)("nodesSortBy"),w=y[0],O=y[1],x=(0,o.useAttribute)("nodesExpanded"),_=x[0],j=x[1],P=(0,a.useCallback)((function(e){return e.filter((function(e){return!e.isInstance}))}),[]);return a.default.createElement(i.default,d({title:"Nodes",resourceName:"node","data-track":n.track("nodes"),labelProps:t,onChange:n.updateNodesAttribute,getOptions:b,tooltipProps:m,value:u,columns:g,sortBy:w,onSortByChange:O,expanded:_,onExpandedChange:j,enableSubRowSelection:!1,totals:v,filterSelectedCount:P},r))};t.default=(0,a.memo)(v)},36495:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=(n=r(94069))&&n.__esModule?n:{default:n},l=["labelProps"];function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,l),n=(0,o.useChart)(),u=(0,o.useAttributeValue)("postAggregationMethod"),f=function(e){return(0,a.useMemo)((function(){return[{value:"avg",label:"Average",description:"For each aggregated point, calculate the average of the metrics.",short:"AVG()","data-track":e.track("avg")},{value:"sum",label:"Sum",description:"For each aggregated point, calculate the sum of the metrics.",short:"SUM()","data-track":e.track("sum")},{value:"min",label:"Minimum",description:"For each aggregated point, present the minimum of the metrics.",short:"MIN()","data-track":e.track("min")},{value:"max",label:"Maximum",description:"For each aggregated point, present the maximum of the metrics.",short:"MAX()","data-track":e.track("max")}]}),[e])}(n),s=(f.find((function(e){return e.value===u}))||f[0]).short;return a.default.createElement(i.default,c({value:u,onChange:n.updatePostAggregationMethodAttribute,items:f,"data-track":n.track("post-aggregate")},r,{labelProps:d({secondaryLabel:"the",label:s,title:p.heading,tooltipProps:p},t)}))};t.default=(0,a.memo)(m)},26482:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=r(83199),l=(n=r(34737))&&n.__esModule?n:{default:n},u=r(96659),c=r(35369),f=["labelProps"];function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(a[r]=e[r]);return a}(e,f),c=(0,o.useChart)(),d=(0,o.useAttributeValue)("postGroupBy"),m=(0,o.useAttributeValue)("postGroupByLabel"),h=function(e){return(0,a.useMemo)((function(){return[{nm:"node",id:"node",key:"nodes"},{nm:e.intl("instance")+" "+("instance"===e.intl("instance")?"":"(instance)"),id:"instance",key:"instances"},{nm:"dimension",id:"dimension",key:"dimensions"},{nm:"percentage of "+e.intl("instance"),id:"percentage-of-instance",key:"instances"},{nm:"as single value",id:"selected"}]}),[])}(c),b=(0,a.useCallback)((function(){var e=c.getAttributes(),t=h.map((function(t){var r=d.includes(t.id);return(0,u.getStats)(c,t,{key:"group-by",childrenKey:"label",props:{contribution:"-",anomalyRate:"-",alerts:"-",min:"-",avg:"-",max:"-",selected:r},childProps:{unique:"-",disabled:"hidden"},children:e[t.key]?Object.values(e[t.key]):[]})}));return[].concat(p(t),p(Object.keys(e.labels).map((function(t){return(0,u.getStats)(c,e.labels[t],{key:"group-by",childrenKey:"label",props:{getLabel:function(e){return"label: "+(e.nm||t||e.id)},isLabel:!0,selected:m.includes(t)},childProps:{unique:"-",disabled:"hidden"},children:e.labels[t].vl})}))))}),[d,m]);t=(0,a.useMemo)((function(){var e=d.filter((function(e){return"node"!==e})),t=e.map((function(e){return"label"===e?m.length>1?m.length+" labels":m[0]:e}));return e.length{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=l(r(8711)),o=r(83199),i=r(65562);function l(e){return e&&e.__esModule?e:{default:e}}var u=(0,a.default)(o.Button).attrs({flavour:"borderless",label:"Reset",width:"initial",height:"initial",padding:[0,1],title:"Reset Filters",small:!0,neutral:!0}).withConfig({displayName:"reset__StyledButton",componentId:"sc-kilpc3-0"})(["&&{height:initial;font-weight:normal;}"]);t.default=function(){var e=(0,i.useChart)(),t=(0,i.useAttributeValue)("pristine"),r=!Object.keys(t).length;return n.default.createElement(u,{disabled:r,onClick:e.resetPristine,"data-track":e.track("reset")})}},64776:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=i(r(96540)),a=r(65562),o=i(r(36112));function i(e){return e&&e.__esModule?e:{default:e}}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=r(83199),o=l(r(46874)),i=l(r(36112));function l(e){return e&&e.__esModule?e:{default:e}}t.default=function(){return n.default.createElement(o.default,null,n.default.createElement(a.Flex,{gap:1},n.default.createElement(i.default,{width:"90px",background:"borderSecondary",secondaryLabel:"",label:""}),n.default.createElement(i.default,{width:"120px",background:"borderSecondary"}),n.default.createElement(i.default,{width:"100px",background:"borderSecondary"})))}},67231:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(83199),i=r(22332),l=(n=r(94069))&&n.__esModule?n:{default:n},u=["labelProps"];function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,u),n=(0,i.useChart)(),c=(0,i.useAttributeValue)("groupingMethod").match(/[\d.]+|\D+/g)||[],d=c[0],p=void 0===d?"":d,b=c[1],y=void 0===b?"":b,w=(0,i.useAttributeValue)("viewUpdateEvery"),O=(0,i.useAttributeValue)("perTier"),x=function(e,t){void 0===t&&(t=[]);var r=t,n=r[0],o=r.slice(1);return(0,a.useMemo)((function(){return[{value:"min",label:"Minimum",description:"Reveal short dives that would otherwise be smoothed out.",short:"MIN()","data-track":e.track("time-aggregation-min")},{value:"max",label:"Maximum",description:"Reveal short spikes that would otherwise be smoothed out.",short:"MAX()","data-track":e.track("time-aggregation-max")},{value:"average",label:"Mean or Average",description:"Calculate the longer term average, as if data were collected at screen resolution.",short:"AVG()","data-track":e.track("time-aggregation-average")},{value:"sum",label:"Sum",description:"Provide the sum of the points that are aggregated over time. Use it when a sense of volume is needed over the aggregation period. It may not be sensible to use this function on all data types.",short:"SUM()","data-track":e.track("time-aggregation-sum")},Array.isArray(o)&&"undefined"!==typeof(null==n?void 0:n.points)&&{justDesc:!0,description:"The functions below lose accuracy when applied on tiered data, compared to high resolution data. Your current query is "+100*n.points/t.reduce((function(e,t){return e+t.points}),0)+"% high resolution and "+100*o.reduce((function(e,t){return e+t.points}),0)/t.reduce((function(e,t){return e+t.points}),0).toFixed(2)+"% tiered data of lower resolution."},{value:"percentile",label:"Percentile",description:"Provide the maximum value of a percentage of the aggregated points, having the smaller values. The default is p95, which provides the maximum value of the aggregated points after ignoring the top 5% of them.",short:"PERCENTILE()","data-track":e.track("time-aggregation-percentile95")},{value:"trimmed-mean",label:"Trimmed Average or Trimmed Mean",description:"Like average, but first remove a percentage of the extreme high and low values.",short:"TRIMMEAN()","data-track":e.track("time-aggregation-trimmed-mean5")},{value:"median",label:"Median",description:"The middle value of all points that would otherwise be smoothed out. This function works like average, but short extreme dives and spikes influence it significantly less than average.",short:"MEDIAN()","data-track":e.track("time-aggregation-median")},{value:"trimmed-median",label:"Trimmed Median",description:"Like median, but first remove a percentage of the extreme high and low values.",short:"TRIMMEDIAN()","data-track":e.track("time-aggregation-trimmed-median5")},{value:"stddev",label:"Standard deviation",description:"Reveal how far each point lies from the average. A high standard deviation means that values are generally far from the average, while a low standard deviation indicates that values are clustered close to the mean. The result is again in the original units of the data source metric.",short:"STDDEV()","data-track":e.track("time-aggregation-stddev")},{value:"cv",label:"Coefficient of variation or Relative standard deviation",description:"The ratio of the standard deviation to the average. Its use is the same as standard deviation, but expressed as a percentage related to the average. The units change to %.",short:"CV()","data-track":e.track("time-aggregation-cv")},{value:"incremental-sum",label:"Incremental Sum or Delta",description:"Provide the difference between the newest and the oldest values of the aggregated points. Each point will be positive if the trend grows and negative if the trend shrinks.",short:"DELTA()","data-track":e.track("time-aggregation-incremental-sum")},{value:"ses",label:"Single exponential smoothing",description:"Use the aggregated points to produce a forecast of the next value, and reveal the forecasted value. Use it when there are indications that the trend is more predictable using the more recent points than the older ones.",short:"SES()","data-track":e.track("time-aggregation-ses")},{value:"des",label:"Double exponential smoothing",description:"Like single exponential smoothing, but better suited when the aggregated points may have a strong trend.",short:"DES()","data-track":e.track("time-aggregation-des")}].filter(Boolean)}),[e,null==n?void 0:n.points])}(n,O),_=function(e){var t=e.chart,r=e.method;return(0,a.useMemo)((function(){return"percentile"===r?[{value:"25",label:"25th",short:"25th","data-track":t.track("time-aggregation-percentile25")},{value:"50",label:"50th",short:"50th","data-track":t.track("time-aggregation-percentile50")},{value:"75",label:"75th",short:"75th","data-track":t.track("time-aggregation-percentile75")},{value:"80",label:"80th",short:"80th","data-track":t.track("time-aggregation-percentile80")},{value:"90",label:"90th",short:"90th","data-track":t.track("time-aggregation-percentile90")},{value:"95",label:"95th",short:"95th","data-track":t.track("time-aggregation-percentile95")},{value:"97",label:"97th",short:"97th","data-track":t.track("time-aggregation-percentile97")},{value:"98",label:"98th",short:"98th","data-track":t.track("time-aggregation-percentile98")},{value:"99",label:"99th",short:"99th","data-track":t.track("time-aggregation-percentile99")}]:r.includes("trimmed")?[{value:"1",label:"1%",short:"1%","data-track":t.track("time-aggregation-"+r+"1")},{value:"2",label:"2%",short:"2%","data-track":t.track("time-aggregation-"+r+"2")},{value:"3",label:"3%",short:"3%","data-track":t.track("time-aggregation-"+r+"3")},{value:"5",label:"5%",short:"5%","data-track":t.track("time-aggregation-"+r+"5")},{value:"10",label:"10%",short:"10%","data-track":t.track("time-aggregation-"+r+"10")},{value:"15",label:"15%",short:"15%","data-track":t.track("time-aggregation-"+r+"15")},{value:"20",label:"20%",short:"20%","data-track":t.track("time-aggregation-"+r+"20")},{value:"25",label:"25%",short:"25%","data-track":t.track("time-aggregation-"+r+"25")}]:[]}),[t,r])}({chart:n,method:p}),j=(x.find((function(e){return e.value===p}))||x[0]).short,P=_.find((function(e){return e.value===y}))||_[0];return a.default.createElement(o.Flex,null,y&&a.default.createElement(l.default,f({value:y,onChange:function(e){return n.updateTimeAggregationMethodAttribute({alias:e,method:p})},items:_,"data-track":n.track("groupingMethodAlias")},r,{labelProps:s({secondaryLabel:"each as",label:P.short,title:g.heading,tooltipProps:g},t)})),a.default.createElement(l.default,f({value:p,onChange:function(e){return n.updateTimeAggregationMethodAttribute({alias:m[e],method:e})},items:x,"data-track":n.track("groupingMethod"),dropTitle:h},r,{labelProps:s({secondaryLabel:!y&&"each as",tertiaryLabel:"every "+w+"s",label:j,title:v.heading,tooltipProps:v},t)})))};t.default=(0,a.memo)(b)},4975:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=c(r(96540)),a=r(83199),o=c(r(97517)),i=c(r(88335)),l=c(r(6504)),u=r(22332);function c(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){var t=e.selected,r=void 0===t?[]:t,c=e.qr,f=void 0===c?0:c,d=e.fl,s=void 0===d?0:d,p=e.sl,m=void 0===p?0:p,g=e.ex,v=void 0===g?0:g,h=e.teaser,b=void 0!==h&&h,y=e.resourceName,w=m+v,O=r.length&&r.length0||b&&f<(r.length||w),_=(b?r.length||w:r.length)||m,j=(0,u.useChart)();return n.default.createElement(a.TextMicro,{color:"textLite"},n.default.createElement(a.TextMicro,{color:b?"text":"primary"},O),b?" ":" queried",!b&&n.default.createElement(l.default,{margin:[-.5,1,-.5,0],width:"14px",height:"14px",color:"primary",svg:o.default}),!!s&&n.default.createElement(n.default.Fragment,null,b?n.default.createElement(a.TextMicro,{color:"errorLite"}," +"):"+ ",n.default.createElement(a.TextMicro,{color:"errorLite"},s),b?" ":"failed ",n.default.createElement(l.default,{margin:[-.5,1,-.5,0],width:"14px",height:"14px",color:"errorLite",svg:i.default})),x&&n.default.createElement(n.default.Fragment,null,"of ",n.default.createElement(a.TextMicro,{color:b?"textLite":"text"},_),b?" ":" selected"),!b&&f!==w&&n.default.createElement(n.default.Fragment,null,"of ",n.default.createElement(a.TextMicro,null,w)," available"),y?j.intl(y,{count:x?_:O}):"")}},96659:(e,t)=>{t.__esModule=!0,t.getStats=void 0;var r=["getValue","getLabel","getIsSelected"];function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(a[r]=e[r]);return a}(v,r);return a(a({label:(null==b?void 0:b(n))||n.nm||f||n.id,value:(null==h?void 0:h(n))||f||n.id,"data-track":t.track(d+"-"+(f||n.id||n.nm)),unique:m.length,instances:l(n.is),metrics:l(n.ds),contribution:i(n.sts,"con"),anomalyRate:i(n.sts,"arp"),min:i(n.sts,"min"),avg:i(n.sts,"avg"),max:i(n.sts,"max"),alerts:u(n.al),info:n,selected:(null==y?void 0:y(n))||!1},w),{},{children:m.map((function(r){return e(t,r,{key:d+"-"+s,props:g})}))})}},19751:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=i(r(96540)),a=r(22332),o=i(r(70419));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){return function(t){return(0,a.useInitialLoading)()?n.default.createElement(o.default,t):n.default.createElement(e,t)}}},39360:(e,t,r)=>{t.Ay=void 0;var n=g(r(96540)),a=g(r(8711)),o=r(83199),i=p(r(74113)),l=r(22332),u=p(r(10534)),c=r(89380),f=p(r(62841)),d=["empty","index","uiName"],s=["uiName"];function p(e){return e&&e.__esModule?e:{default:e}}function m(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(m=function(e){return e?r:t})(e)}function g(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=m(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function v(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var w=(0,a.default)(o.Text).withConfig({displayName:"gauge__Label",componentId:"sc-1o49axm-0"})(["line-height:1;font-size:",";flex:",";",";"],(function(e){return e.fontSize}),(function(e){var t=e.flex;return void 0===t?0:t}),(function(e){return e.isFetching&&f.default})),O=(0,a.default)(w).withConfig({displayName:"gauge__StrokeLabel",componentId:"sc-1o49axm-1"})(["text-shadow:0.02em 0 ",",0 0.02em ",",-0.02em 0 ",",0 -0.02em ",";"],(0,o.getColor)("border"),(0,o.getColor)("border"),(0,o.getColor)("border"),(0,o.getColor)("border")),x=function(){var e=(0,l.useLatestConvertedValue)("selected");return n.default.createElement(O,{flex:"2",color:"text",fontSize:"2em",strong:!0},e)},_=function(){var e=(0,l.useDimensionIds)()[0],t=(0,l.useUnitSign)({dimensionId:e});return n.default.createElement(w,{color:"textLite",fontSize:"1em"},t)},j=function(e){var t=e.empty,r=e.index,a=e.uiName,o=y(e,d),i=(0,l.useChart)(),u=i.getUI(a).getMinMax();return n.default.createElement(w,b({color:"textLite",fontSize:"1.3em"},o),t?"-":i.getConvertedValue(u[r]))},P=(0,a.default)(o.Flex).attrs({alignItems:"center",justifyContent:"between",flex:!0}).withConfig({displayName:"gauge__BoundsContainer",componentId:"sc-1o49axm-2"})([""]),E=function(e){var t=e.uiName;return n.default.createElement(P,null,n.default.createElement(j,{index:0,uiName:t}),n.default.createElement(j,{index:1,uiName:t}))},k=(0,a.default)(o.Flex).attrs({position:"absolute",column:!0,alignContent:"center",justifyContent:"center"}).withConfig({displayName:"gauge__StatsContainer",componentId:"sc-1o49axm-3"})(["inset:",";text-align:center;font-size:",";"],(function(e){return e.inset}),(function(e){return e.fontSize})),M=function(e){var t=e.uiName,r=(0,l.useOnResize)(t),a=r.width,o=r.height,i=a{t.__esModule=!0,t.makeGetColor=t.getWidth=t.default=void 0;var n,a=r(16199),o=r(69982),i=r(33862),l=r(41377),u=(n=r(92084))&&n.__esModule?n:{default:n};function c(){"use strict";c=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",l=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function f(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,r){return e[t]=r}}function d(e,t,r,n){var o=t&&t.prototype instanceof b?t:b,i=Object.create(o.prototype),l=new A(n||[]);return a(i,"_invoke",{value:k(e,r,l)}),i}function s(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=d;var p="suspendedStart",m="suspendedYield",g="executing",v="completed",h={};function b(){}function y(){}function w(){}var O={};f(O,i,(function(){return this}));var x=Object.getPrototypeOf,_=x&&x(x(D([])));_&&_!==r&&n.call(_,i)&&(O=_);var j=w.prototype=b.prototype=Object.create(O);function P(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function E(e,t){function r(a,o,i,l){var u=s(e[a],e,o);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(f).then((function(e){c.value=e,i(c)}),(function(e){return r("throw",e,i,l)}))}l(u.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function k(t,r,n){var a=p;return function(o,i){if(a===g)throw Error("Generator is already running");if(a===v){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var l=n.delegate;if(l){var u=M(l,n);if(u){if(u===h)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===p)throw a=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=g;var c=s(t,r,n);if("normal"===c.type){if(a=n.done?v:m,c.arg===h)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(a=v,n.method="throw",n.arg=c.arg)}}}function M(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,M(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var o=s(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,h;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,h):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,h)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a=0;--o){var i=this.tryEntries[o],l=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),S(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;S(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),h}},t}t.getWidth=function(e,t){var r=void 0===t?{}:t,n=r.aspectRatio,a=r.cellSize,o=(0,l.getRows)(e,n),i=(0,l.getColumns)(o,n);return(0,l.getFullWidth)(i,a)};var f=function(e,t){var r=void 0===t?{}:t,n=r.aspectRatio,a=r.cellSize,o=r.padding,i=(0,l.getRows)(e,n),u=(0,l.getColumns)(i,n);return{width:(0,l.getFullWidth)(u,a),height:(0,l.getFullHeight)(i,a,o),columns:Math.ceil(u)}},d=t.makeGetColor=function(e,t,r){return(0,a.scaleLinear)().domain([e,t]).range(r)};t.default=function(e,t,r,n){var a=c().mark(S),s=r.onMouseenter,p=r.onMouseout;void 0===n&&(n={});var m=n,g=m.cellSize,v=m.cellPadding,h=m.cellStroke,b=void 0===h?2:h,y=m.lineWidth,w=void 0===y?1:y,O=m.colorRange,x=void 0===O?[e.getThemeAttribute("themeGroupBoxesMin"),e.getThemeAttribute("themeGroupBoxesMax")]:O,_=t.getContext("2d"),j=(0,i.createCanvas)(_.width,_.height),P=j.getContext("2d"),E=-1,k=function(){},M=function(){},C=function(){};function S(r,m){var h,y,O,S,A,D,T,L,I;return c().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(h=f(r,n),y=h.width,O=h.height,S=h.columns,y&&O){a.next=6;break}if(!(0,o.unstable_shouldYield)()){a.next=5;break}return void(a.next=5);case 5:return a.abrupt("return");case 6:j.width=parseInt(y),j.height=parseInt(O),P.clearRect(0,0,j.width,j.height),A=e.getAttribute("min"),D=e.getAttribute("max"),T=d(A,D,x),L=function(t,r,n){t.beginPath(),t.fillStyle=T(e.getRowDimensionValue(r,m));var a=(0,l.getXPosition)(S,n,g),o=(0,l.getYPosition)(S,n,g);w&&b&&t.clearRect(a-w,o-w,(0,l.getCellBoxSize)(g,v)+b,(0,l.getCellBoxSize)(g,v)+b),t.fillRect(a,o,(0,l.getCellBoxSize)(g,v),(0,l.getCellBoxSize)(g,v))},I=0;case 14:if(!(I{t.__esModule=!0,t.default=void 0;var n=r(41377);t.default=function(e,t,r,a,o){var i=a.onMouseenter,l=a.onMouseout,u=void 0===o?{}:o,c=u.cellSize,f=u.cellPadding,d=-1,s=function(r){var a=e.getBoundingClientRect(),o=(0,n.getXPosition)(t,r,c),i=(0,n.getYPosition)(t,r,c),l=a.left+o,u=a.top+i,d=(0,n.getCellBoxSize)(c,f);return{index:r,left:l,top:u,right:l+d,bottom:u+d,width:d,height:d,offsetX:o,offsetY:i}},p=function(){l(s(d)),d=-1},m=function(e){var a=e.offsetX,o=e.offsetY,l=(0,n.getOffsetPosition)(a,c),u=(0,n.getOffsetPosition)(o,c)*t+l;u!==d&&(-1!==d&&p(),u>=r||(i(s(u)),d=u))};return e.addEventListener("mousemove",m),e.addEventListener("mouseout",p),function(){e.removeEventListener("mousemove",m),e.removeEventListener("mouseout",p)}}},7365:(e,t,r)=>{t.__esModule=!0,t.default=t.Container=void 0;var n=l(r(96540)),a=r(83199),o=l(r(93658)),i=l(r(66788));function l(e){return e&&e.__esModule?e:{default:e}}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=l(r(8711)),o=r(83199),i=r(22332);function l(e){return e&&e.__esModule?e:{default:e}}var u=(0,a.default)(o.Flex).attrs({width:{max:"320px",base:"100%"},height:"12px",round:!0}).withConfig({displayName:"legend__LinearColorScaleBar",componentId:"sc-1iit0cq-0"})(["background:linear-gradient( to right,",","," );"],(function(e){return e.minColor}),(function(e){return e.maxColor}));t.default=function(){var e=(0,i.useChart)(),t=(0,i.useAttributeValue)("min"),r=(0,i.useAttributeValue)("max"),a=(0,i.useUnitSign)(),l=(0,i.useAttributeValue)("selectedContexts").join(", "),c=(0,i.useAttributeValue)("contextScope").join(", ");(0,i.useAttributeValue)("theme");var f=e.getThemeAttribute("themeGroupBoxesMin"),d=e.getThemeAttribute("themeGroupBoxesMax");return n.default.createElement(o.Flex,{"data-testid":"groupBox-legend",gap:4,alignItems:"center"},n.default.createElement(o.TextNano,{strong:!0},l&&"*"!==l?l:c),n.default.createElement(o.Flex,{gap:2,alignItems:"center"},n.default.createElement(o.TextNano,null,e.getConvertedValue(t)," ",a),n.default.createElement(u,{minColor:f,maxColor:d}),n.default.createElement(o.TextNano,null,e.getConvertedValue(r)," ",a)))}},25069:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(22332),o=s(r(39912)),i=s(r(65010)),l=s(r(39600)),u=s(r(8367)),c=["uiName","dimensions","groupLabel"],f=["index"],d=["index"];function s(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function m(){"use strict";m=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",l=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function f(e,t,r,n){var o=t&&t.prototype instanceof b?t:b,i=Object.create(o.prototype),l=new A(n||[]);return a(i,"_invoke",{value:k(e,r,l)}),i}function d(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=f;var s="suspendedStart",p="suspendedYield",g="executing",v="completed",h={};function b(){}function y(){}function w(){}var O={};c(O,i,(function(){return this}));var x=Object.getPrototypeOf,_=x&&x(x(D([])));_&&_!==r&&n.call(_,i)&&(O=_);var j=w.prototype=b.prototype=Object.create(O);function P(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function E(e,t){function r(a,o,i,l){var u=d(e[a],e,o);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,i,l)}),(function(e){r("throw",e,i,l)})):t.resolve(f).then((function(e){c.value=e,i(c)}),(function(e){return r("throw",e,i,l)}))}l(u.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function k(t,r,n){var a=s;return function(o,i){if(a===g)throw Error("Generator is already running");if(a===v){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var l=n.delegate;if(l){var u=M(l,n);if(u){if(u===h)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===s)throw a=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=g;var c=d(t,r,n);if("normal"===c.type){if(a=n.done?v:p,c.arg===h)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(a=v,n.method="throw",n.arg=c.arg)}}}function M(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,M(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),h;var o=d(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,h;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,h):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,h)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a=0;--o){var i=this.tryEntries[o],l=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),S(r),h}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;S(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),h}},t}function g(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n=0||(a[r]=e[r]);return a}t.default=function(e){var t=e.uiName,r=e.dimensions,s=e.groupLabel,p=g(e,c),v=(0,a.useChart)(),h=(0,n.useRef)(),b=(0,n.useRef)(),y=(0,n.useRef)(),w=(0,n.useState)(null),O=w[0],x=w[1],_=(0,n.useRef)(-1),j=(0,n.useRef)();(0,n.useLayoutEffect)((function(){return y.current=(0,i.default)(v,b.current,{onMouseenter:function(e){var t=e.index,r=g(e,f);_.current=t,y.current.activateBox(t),j.current=setTimeout((function(){x({target:{getBoundingClientRect:function(){return r}},index:t})}),100)},onMouseout:function(){_.current=-1,clearTimeout(j.current),requestAnimationFrame((function(){x((function(e){return-1===_.current||_.current!==(null==e?void 0:e.index)?(y.current.deactivateBox(),_.current=-1,null):e}))}))},onClick:function(e){void 0===e&&(e={});var t=e,r=t.index,n=g(t,d);_.current=r,y.current.activateBox(r),j.current=setTimeout((function(){x({target:{getBoundingClientRect:function(){return n}},index:r})}),100)}},p),function(){return y.current.clear()}}),[]);var P=(0,l.default)(t),E=(0,o.default)(),k=E[1],M=E[2],C=(0,a.useAttributeValue)("theme");(0,n.useLayoutEffect)((function(){return k(m().mark((function e(){return m().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return O&&h.current&&h.current[O.index]!==r[O.index]&&(y.current.deactivateBox(),x(null),_.current=-1),h.current=r,e.delegateYield(y.current.update(r,P),"t0",3);case 3:case"end":return e.stop()}}),e)}))),function(){return M()}}),[P,k,M,C]);var S=(0,n.useMemo)((function(){if(O){var e=r[O.index].split(",");return e[e.length-1]}}),[r[null==O?void 0:O.index]]);return n.default.createElement(n.Fragment,null,n.default.createElement("canvas",{"data-testid":"groupBox",ref:b}),O&&n.default.createElement(u.default,{target:O.target,label:S,groupLabel:s,data:P,id:r[O.index]}))}},28805:(e,t,r)=>{t.__esModule=!0,t.default=t.SkeletonIcon=void 0;var n=s(r(96540)),a=s(r(8711)),o=r(83199),i=r(22332),l=f(r(93693)),u=f(r(25069)),c=f(r(5702));function f(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function p(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function m(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var g=(0,a.keyframes)(["from{opacity:0.2;}to{opacity:0.6;}"]),v=(0,a.default)(o.Flex).attrs((function(e){return function(e){for(var t=1;t3&&n.default.createElement("span",null,"(",s.length,")"))),m.length?Object.keys(a).map((function(t){return n.default.createElement(e,{key:t,label:t,subTree:a[t],data:l,uiName:r,groupedBy:m,hasMore:m.length>1})})):n.default.createElement(u.default,{dimensions:s,groupLabel:c,uiName:r,groupKey:p}))},y=function(e){var t=e.uiName,r=(0,c.default)(t),a=r.data,u=r.tree,f=(0,i.useAttributeValue)("loaded"),d=(0,i.useAttributeValue)("showingInfo"),s=(0,i.useAttributeValue)("viewDimensions").grouped||[],p=s[0],m=s.slice(1);return f?n.default.createElement(o.Flex,{"data-testid":"groupBoxes",flexWrap:!0,flex:!0,position:"relative",height:{min:"150px"}},d?n.default.createElement(l.default,null):m.length?Object.keys(u).map((function(e){return n.default.createElement(b,{key:e,label:e,subTree:u[e],data:a,uiName:t,groupedBy:m,hasMore:m.length>1})})):n.default.createElement(b,{key:p,label:p,subTree:u,data:a,uiName:t,groupedBy:m})):n.default.createElement(h,null)};t.default=(0,n.memo)(y)},25369:(e,t,r)=>{t.Ay=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=v(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=g(r(51365)),o=g(r(18121)),i=g(r(10534)),l=r(22332),u=g(r(74113)),c=g(r(75200)),f=g(r(34578)),d=g(r(89031)),s=g(r(28805)),p=g(r(7365)),m=["uiName"];function g(e){return e&&e.__esModule?e:{default:e}}function v(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(v=function(e){return e?r:t})(e)}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,m),g=(0,l.useChart)(),v=(0,o.default)({onHover:g.focus,onBlur:g.blur,isOut:function(e){return!e||!e.closest('[data-toolbox="'+g.getId()+'"]')&&!e.closest('[data-chartid="'+g.getId()+'"]')}},[g]),b=(0,a.default)((function(e){v.current=e,t&&(t.current=e)}))[1],y=(0,l.useAttributeValue)("showingInfo"),w=(0,l.useAttributeValue)("focused");return n.default.createElement(d.default,h({ref:b},i),n.default.createElement(c.default,null),n.default.createElement(f.default,{opacity:w?1:.7}),n.default.createElement(u.default,{uiName:r,column:!0,gap:4,padding:[4,2]},n.default.createElement(s.default,{uiName:r})),!y&&n.default.createElement(p.default,null))}));t.Ay=(0,i.default)(b)},8367:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=f(r(40961)),o=r(22332),i=f(r(93331)),l=f(r(22007)),u=f(r(44862)),c=f(r(9408));function f(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}var s={right:"left",bottom:"top"},p={right:"left",top:"bottom"},m={left:"right",bottom:"top"},g={left:"right",top:"bottom"};t.default=function(e){var t=e.target,r=e.label,f=e.groupLabel,d=e.data,v=e.id,h=(0,n.useRef)(),b=(0,n.useRef)(),y=(0,n.useState)(g),w=y[0],O=y[1];b.current=(0,l.default)(t,h,w,"width"),(0,n.useEffect)((function(){if(null!=t&&t.getBoundingClientRect&&h.current){var e=t.getBoundingClientRect(),r=e.right,n=e.bottom,a=window.innerHeight,o=window.innerWidth,i=h.current.getBoundingClientRect(),l=i.width,u=i.height;O(function(e,t){return e&&t?s:e?p:t?m:g}(r+l>o,n+u>a))}}),[t]),(0,n.useEffect)((function(){b.current()}),[w]);var x=(0,u.default)(),_=(0,o.useAttributeValue)("id");return a.default.createPortal(n.default.createElement(i.default,{"data-toolbox":_,ref:h,width:{max:"100%"},column:!0,"data-testid":"drop",sx:{pointerEvents:"none"}},n.default.createElement(c.default,{"data-testid":"chartPopover",label:r,groupLabel:f,data:d,id:v})),x)}},70741:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=i(r(96540)),a=i(r(8711)),o=r(83199);function i(e){return e&&e.__esModule?e:{default:e}}var l=(0,a.default)(o.Flex).attrs({"data-testid":"chartPopover-label"}).withConfig({displayName:"label__GridRow",componentId:"sc-1j7ox7-0"})(["display:contents;"]);t.default=function(e){var t=e.label,r=e.value;return n.default.createElement(l,null,n.default.createElement(o.TextMicro,{padding:[1,0]},t),n.default.createElement(o.TextSmall,{strong:!0},(null==r?void 0:r.join(", "))||"-"))}},9408:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=c(r(8711)),o=r(83199),i=r(22332),l=r(99010),u=c(r(70741));function c(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}var d=(0,a.default)(o.Flex).attrs((function(e){return{round:!0,border:{side:"all",color:"elementBackground"},width:{min:"196px",max:e.maxWidth?e.maxWidth+"px":"80vw"},background:"dropdown",column:!0,padding:[4],gap:1}})).withConfig({displayName:"labels__Container",componentId:"sc-5eymlk-0"})(["box-shadow:0px 8px 12px rgba(9,30,66,0.15),0px 0px 1px rgba(9,30,66,0.31);"]),s=(0,a.default)(l.BaseColorBar).attrs({position:"absolute",top:1,left:0,backgroundOpacity:.4,round:.5}).withConfig({displayName:"labels__ColorBackground",componentId:"sc-5eymlk-1"})([""]),p=a.default.div.withConfig({displayName:"labels__Grid",componentId:"sc-5eymlk-2"})(["display:grid;width:100%;grid-template-columns:auto 2fr;column-gap:8px;align-items:center;"]),m=(0,n.forwardRef)((function(e,t){var r=e.label,a=e.groupLabel,l=e.data,c=e.id,f=(0,i.useChart)(),m=f.getAttribute("viewDimensions"),g=f.getDimensionIndex(c),v=(0,i.useAttributeValue)("min"),h=(0,i.useAttributeValue)("max"),b=.9*f.getUI().getChartWidth(),y=f.getRowDimensionValue(c,l),w=(0,i.useConverted)(y,{valueKey:"percent"});return n.default.createElement(d,{"data-testid":"chartPopover-labels",maxWidth:b,gap:2,ref:t},n.default.createElement(o.Flex,{column:!0,gap:1},n.default.createElement(o.TextMicro,null,a),n.default.createElement(o.TextMicro,{strong:!0},r),n.default.createElement(o.Flex,{alignItems:"center",position:"relative"},n.default.createElement(s,{value:y,min:v,max:h,bg:f.getThemeAttribute("themeGroupBoxesMax"),height:"18px"}),n.default.createElement(o.TextMicro,{padding:[1.5,2],strong:!0},w,"-"!==w&&"%"))),!(null==m||!m.labels)&&n.default.createElement(p,{gap:1,column:!0},Object.keys(m.labels).map((function(e){var t;return n.default.createElement(u.default,{key:e,label:e,value:null==(t=m.labels[e])?void 0:t[g]})}))))}));t.default=(0,n.memo)(m)},5702:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(22332),a=r(42872);t.default=function(e){var t,r,o=(0,n.useChart)(),i=(0,n.useForceUpdate)();return(0,n.useImmediateListener)((function(){return o.getUI(e).on("groupBoxChanged",i)}),[o]),(null==(t=(r=o.getUI(e)).getGroupBox)?void 0:t.call(r))||a.initialValue}},39600:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(22332);t.default=function(e){var t=(0,n.useChart)(),r=(0,n.useForceUpdate)();return(0,n.useImmediateListener)((function(){return t.getUI(e).on("groupBoxRowDataChanged",r)}),[t]),t.getUI(e).getGroupBoxRowData()}},41377:(e,t)=>{t.__esModule=!0,t.getYPosition=t.getXPosition=t.getRows=t.getOffsetPosition=t.getFullWidth=t.getFullHeight=t.getColumns=t.getCellBoxSize=t.defaultPadding=t.defaultCellSize=t.defaultAspectRatio=void 0;var r=t.defaultCellSize=17,n=t.defaultPadding=1,a=t.defaultAspectRatio=Math.round(16/9);t.getCellBoxSize=function(e,t){return void 0===e&&(e=r),void 0===t&&(t=n),e-t},t.getRows=function(e,t){return void 0===t&&(t=a),Math.sqrt(e.length/t)||1},t.getColumns=function(e,t){return void 0===t&&(t=a),e*t||1},t.getXPosition=function(e,t,n){return void 0===n&&(n=r),Math.floor(t%e)*n},t.getYPosition=function(e,t,n){return void 0===n&&(n=r),Math.floor(t/e)*n},t.getFullWidth=function(e,t){return void 0===t&&(t=r),Math.ceil(e)*t},t.getFullHeight=function(e,t,n){return void 0===t&&(t=r),void 0===n&&(n=r),Math.ceil(e)*t+n},t.getOffsetPosition=function(e,t){return void 0===t&&(t=r),Math.floor(e/t)}},75200:(e,t,r)=>{t.__esModule=!0,t.default=t.Container=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332),i=c(r(90592)),l=c(r(99684)),u=r(57513);function c(e){return e&&e.__esModule?e:{default:e}}function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=r(8711);function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=o(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var l=a?Object.getOwnPropertyDescriptor(e,i):null;l&&(l.get||l.set)?Object.defineProperty(n,i,l):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=["children","Component","maxHeight","maxWidth","maxFontSize","minFontSize"];function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(o=function(e){return e?r:t})(e)}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,a),v=(0,n.useState)(),h=v[0],b=v[1],y=(0,n.useRef)(!1);return(0,n.useEffect)((function(){if(h){var e=requestAnimationFrame((function(){y.current=!1;var e=s;for(h.style.fontSize=e+"px";!y.current&&e>m&&(h.offsetWidth>f||h.offsetHeight>u);){e-=Math.ceil(e/100),h.style.fontSize=e+"px"}}));return function(){y.current=!0,cancelAnimationFrame(e)}}}),[t,u,f,h]),n.default.createElement(o,i({truncate:!0,ref:b},g),t)}},54924:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=l(r(86263)),o=l(r(33640)),i=["text","Component","noTooltip"];function l(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i),d=(0,n.useState)(""),s=d[0],p=d[1],m=(0,n.useState)(),g=m[0],v=m[1];return(0,n.useEffect)((function(){if(g){for(var e=g.offsetWidth,r=0;g.scrollWidth>e;)g.textContent=(0,a.default)(g.textContent,r),r+=1;g.textContent!==t&&p(t)}}),[t,g]),n.default.createElement(o.default,{content:!u&&s?t:"",align:"bottom",isBasic:!0},n.default.createElement(l,c({truncate:!0,ref:v},f),t))}},62841:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(8711),a=(0,n.keyframes)(["from{opacity:0.4;}to{opacity:1;}"]),o=(0,n.css)(["animation:"," 1.6s ease-in infinite;"],a);t.default=o},39912:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(96540),a=r(69982);t.default=function(){var e=(0,n.useState)(!1),t=e[0],r=e[1],o=(0,n.useRef)(),i=(0,n.useRef)(),l=(0,n.useCallback)((function(){o.current&&((0,a.unstable_cancelCallback)(o.current),o.current=void 0,r(!1)),i.current&&(i.current(),i.current=void 0)}),[]),u=(0,n.useCallback)((function(e,t){void 0===t&&(t=a.unstable_IdlePriority),l();var n=e(),u=(0,a.unstable_runWithPriority)(t,(function e(){var t=n.next();if(i.current=t.value,!t.done)return e;r(!1)}));u&&((0,a.unstable_runWithPriority)(a.unstable_ImmediatePriority,(function(){return r(!0)})),o.current=(0,a.unstable_scheduleCallback)(t,u))}),[]);return(0,n.useEffect)((function(){return l}),[]),[t,u,l]}},10534:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=c(r(96540)),a=r(22332),o=c(r(94515)),i=c(r(4357)),l=c(r(14154)),u=c(r(89380));function c(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){void 0===t&&(t={});var r=(0,o.default)((0,l.default)(e));t.tile&&(r=(0,u.default)(r)),r=(0,a.withChartProvider)((0,i.default)(r));return function(e){return n.default.createElement(r,e)}}},94515:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=o(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var l=a?Object.getOwnPropertyDescriptor(e,i):null;l&&(l.get||l.set)?Object.defineProperty(n,i,l):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(22332);function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(o=function(e){return e?r:t})(e)}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(22332),o=["isVisible","height","width"];function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(t,o),m=(0,a.useChart)();return(0,a.useImmediateListener)((function(){if(u&&(!p.uiName||"default"===p.uiName)){var e=window.requestAnimationFrame(m.activate);return function(){window.cancelAnimationFrame(e),m.deactivate()}}}),[u,m,p.uiName]),n.default.createElement(e,l({ref:r,height:f,width:s},p))}))}},4357:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332);function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=t.Title=t.HeadWrapper=t.ChartWrapper=void 0;var n=y(r(96540)),a=y(r(8711)),o=r(83199),i=y(r(58655)),l=y(r(79045)),u=y(r(6504)),c=y(r(18121)),f=y(r(90592)),d=r(22332),s=y(r(34578)),p=r(99010),m=y(r(33640)),g=y(r(93693)),v=["size"],h=["children","customChildren","hasFilters"],b=["count","tile","height","width","children","hasFilters"];function y(e){return e&&e.__esModule?e:{default:e}}function w(){return w=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var P=(0,a.default)(o.Text).withConfig({displayName:"withTile__Label",componentId:"sc-1oake2r-0"})(["line-height:1;font-size:",";"],(function(e){return e.fontSize})),E=(0,a.default)(o.Flex).attrs((function(e){var t=e.size,r=j(e,v);return x({background:"panelBg",round:!0,fontSize:parseInt(t/3,10),height:"100%",width:"100%",position:"relative"},r)})).withConfig({displayName:"withTile__ChartHeadWrapper",componentId:"sc-1oake2r-1"})(["font-size:","px;"],(function(e){return e.fontSize>11?11:e.fontSize<8?8:e.fontSize})),k=t.Title=function(){var e=(0,d.useChart)(),t=(0,d.useTitle)();return n.default.createElement(P,{fontSize:"1em",textAlign:"center",color:"sectionDescription",width:"80%",onClick:function(t){t.preventDefault(),e.sdk.trigger("goToLink",e)},cursor:"pointer",padding:[2,0,0]},t)},M=t.HeadWrapper=function(e){var t,r=e.children,a=e.customChildren,g=e.hasFilters,v=void 0===g||g,b=j(e,h),y=(0,d.useOnResize)().width,O=(0,d.useAttributeValue)("focused"),x=null==(t=(0,d.useDimensionIds)())?void 0:t[0],_=(0,d.useAttributeValue)("leftHeaderElements"),P=y;P=P<20?20:P>50?50:P;var M=(0,d.useChart)(),C=(0,c.default)({onHover:M.focus,onBlur:M.blur,isOut:function(e){return!e||!e.closest('[data-toolbox="'+M.getId()+'"]')&&!e.closest('[data-chartid="'+M.getId()+'"]')}},[M]),S=(0,d.useAttributeValue)("hasToolbox"),A=(0,d.useAttributeValue)("showAnomalies"),D=(0,d.useColor)("themeShadow"),T=(0,l.default)(O,400),L=(0,d.useLatestValue)("selected",{valueKey:"arp"})||0;return n.default.createElement(E,w({size:P},b,{ref:C}),S&&O&&T&&n.default.createElement(f.default,{position:"absolute",top:"-16px",right:"0",background:"mainChartHeaderBg",width:{min:"100%"},padding:[1],sx:{boxShadow:"0px 1px 5px 0px "+D+";"},overflow:"hidden"},v&&y>400&&n.default.createElement(o.Box,{width:"100%"},n.default.createElement(s.default,{border:"none",opacity:O?1:.1,focused:O}))),n.default.createElement(o.Flex,{column:!0,width:5,padding:[1,0]},_.map((function(e,t){return n.default.createElement(e,{key:t,plain:!0})})),y<400&&n.default.createElement(o.Flex,{column:!0,width:5},n.default.createElement(s.default,{column:!0,border:"none",justifyContent:"start",plain:!0,opacity:O?1:.1,focused:O}))),n.default.createElement(o.Flex,{column:!0,alignItems:"center",justifyContent:"center",padding:[1,0],height:"100%",width:"100%",position:"relative",overflow:"hidden"},n.default.createElement(k,null),r),n.default.createElement(o.Flex,{column:!0,width:5,alignItems:"center",padding:[4,0],gap:2},A&&"selected"===x&&n.default.createElement(n.default.Fragment,null,n.default.createElement(o.Flex,{column:!0,height:"100%",width:"2px",background:"neutralHighlight",justifyContent:"end"},n.default.createElement(p.ColorBar,{id:"selected",valueKey:"arp",width:"2px",styleDimension:"height",round:.5})),n.default.createElement(m.default,{content:"Anomaly rate for this metric"},n.default.createElement(u.default,{svg:i.default,color:L&&L>0?"anomalyTextLite":"neutralHighlight",size:"14px"})))),a)};t.ChartWrapper=(0,a.default)(o.Flex).attrs((function(e){return x({column:!0,justifyContent:"center",alignContent:"center",gap:2,position:"relative",width:"100%",height:"100%",overflow:"hidden"},e)})).withConfig({displayName:"withTile__ChartWrapper",componentId:"sc-1oake2r-2"})([""]),t.default=function(e){return function(t){var r=t.count,a=t.tile,o=void 0===a||a,i=t.height,l=void 0===i?"100%":i,u=t.width,c=void 0===u?"100%":u,f=t.children,s=t.hasFilters,p=void 0===s||s,m=j(t,b),v=(0,d.useAttributeValue)("showingInfo"),h=(0,d.useAttributeValue)("focused"),y=(0,d.useColor)("themeShadow"),O=h?{sx:{boxShadow:"0px 1px 5px 0px "+y+";"}}:{};return o?n.default.createElement(M,w({count:r,uiName:m.uiName,height:l,width:c,customChildren:f,hasFilters:p},O),v?n.default.createElement(g.default,null):n.default.createElement(e,m)):n.default.createElement(E,w({size:20,height:l,width:c},O),v?n.default.createElement(g.default,null):n.default.createElement(e,m),f)}}},6963:(e,t,r)=>{t.__esModule=!0,t.default=t.ContentWrapper=t.Container=void 0;var n=b(r(96540)),a=b(r(8711)),o=r(83199),i=r(22332),l=r(18121),u=v(r(74113)),c=v(r(34101)),f=v(r(75029)),d=v(r(31899)),s=v(r(94833)),p=r(48666),m=v(r(15587)),g=v(r(79881));function v(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(h=function(e){return e?r:t})(e)}function b(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=h(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function y(){return y=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=s(r(96540)),a=r(83199),o=f(r(8001)),i=f(r(87083)),l=f(r(51081)),u=s(r(6504)),c=r(22332);function f(e){return e&&e.__esModule?e:{default:e}}function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=t.ColorBar=t.Color=t.BaseColorBar=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=(n=r(8711))&&n.__esModule?n:{default:n},i=r(83199),l=r(22332),u=r(22753),c=["bg"],f=["value","min","max","valueKey","bg","styleDimension"],d=["id","partIndex","valueKey"],s=["id","partIndex"];function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var b=t.Color=(0,o.default)(i.Flex).attrs((function(e){return function(e){for(var t=1;t0?c<0?0:c:p,v=(0,l.useLatestValue)(t,{valueKey:n})||0;return a.default.createElement(y,m({value:v,min:g,max:p>s?p:s,valueKey:n,bg:u},o))},t.default=function(e){var t=e.id,r=e.partIndex,n=h(e,s),o=(0,l.useChart)().selectDimensionColor(t,r);return o?a.default.createElement(b,m({bg:o},n)):null}},1249:(e,t,r)=>{t.__esModule=!0,t.default=t.Name=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(83199),i=r(22332),l=(n=r(54924))&&n.__esModule?n:{default:n},u=["children","isEmpty"],c=["id","partIndex","fallback"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var p=t.Name=(0,a.memo)((0,a.forwardRef)((function(e,t){var r=e.children,n=e.isEmpty,i=s(e,u);return a.default.createElement(l.default,d({text:r,Component:o.TextSmall,color:n?"textNoFocus":"text",whiteSpace:"nowrap",ref:t,"data-testid":"chartDimensions-name"},i))})));t.default=function(e){var t=e.id,r=e.partIndex,n=e.fallback,o=void 0===n?"":n,l=s(e,c),u=(0,i.useChart)().getDimensionName(t,r);return a.default.createElement(p,d({},l,{isEmpty:!u}),u||o)}},75010:(e,t,r)=>{t.__esModule=!0,t.default=t.Value=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332),i=["visible","dimensionId"];function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i),l=(0,o.useUnitSign)({dimensionId:r});return t?n.default.createElement(c,a,l):null};t.default=(0,n.memo)(f)},24652:(e,t,r)=>{t.__esModule=!0,t.default=t.Value=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332),i=["id","visible","valueKey","period","objKey","Component"];function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i),v=(0,o.useConvertedValue)(r,d,{valueKey:l,objKey:s,allowNull:!0});return a?n.default.createElement(m,u({},g,{ref:t}),v):null}));t.default=f},96720:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=c(r(96540)),a=c(r(8711)),o=r(83199),i=c(r(30464)),l=r(22332),u=c(r(6504));function c(e){return e&&e.__esModule?e:{default:e}}function f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function d(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var s=(0,a.default)(o.Flex).attrs((function(e){return function(e){for(var t=1;t *{color:",";fill:",";}"],(0,o.getColor)("text"),(0,o.getColor)("text"));t.default=function(){var e=(0,l.useChart)(),t=(0,l.useAttributeValue)("expanded");return n.default.createElement(s,{cursor:"pointer",onClick:function(){return e.updateAttribute("expanded",!t)},alignSelf:"center"},n.default.createElement(u.default,{svg:i.default,color:"textLite",width:"7.5px",height:"5px",rotate:t?2:0}),n.default.createElement(o.TextSmall,{color:"textLite"},t?"Collapse":"Expand"),n.default.createElement(u.default,{svg:i.default,color:"textLite",width:"7.5px",height:"5px",rotate:t?2:0}))}},39591:(e,t,r)=>{t.__esModule=!0,t.default=t.Container=void 0;var n=s(r(96540)),a=r(83199),o=s(r(69529)),i=s(r(49941)),l=s(r(98744)),u=r(65562),c=s(r(93658)),f=s(r(96720)),d=r(22753);function s(e){return e&&e.__esModule?e:{default:e}}function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.Ay=t.N1=void 0;var n=h(r(96540)),a=g(r(51365)),o=g(r(18121)),i=g(r(10534)),l=r(22332),u=g(r(75200)),c=g(r(93693)),f=h(r(6963)),d=g(r(34578)),s=g(r(89031)),p=g(r(39591)),m=["hasHeader","hasFooter","hasFilters","uiName"];function g(e){return e&&e.__esModule?e:{default:e}}function v(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(v=function(e){return e?r:t})(e)}function h(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=v(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,m),x=(0,l.useChart)(),_=(0,l.useAttributeValue)("showingInfo"),j=(0,l.useAttributeValue)("sparkline"),P=(0,o.default)({onHover:x.focus,onBlur:x.blur,isOut:function(e){return!e||!e.closest('[data-toolbox="'+x.getId()+'"]')&&!e.closest('[data-chartid="'+x.getId()+'"]')}},[x]),E=(0,a.default)((function(e){P.current=e,t&&(t.current=e)}))[1],k=(0,l.useAttributeValue)("focused");return n.default.createElement(s.default,b({ref:E},j&&{border:!1,background:"transparent"},O),i&&n.default.createElement(u.default,null),y&&n.default.createElement(d.default,{opacity:k?1:.7}),n.default.createElement(f.ContentWrapper,null,_?n.default.createElement(c.default,null):n.default.createElement(f.default,{uiName:w})),v&&n.default.createElement(p.default,null))}));t.Ay=(0,i.default)(y)},93658:(e,t,r)=>{t.__esModule=!0,t.getDateDiff=t.default=void 0;var n,a=(n=r(96540))&&n.__esModule?n:{default:n},o=r(83199),i=r(22332);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t=p&&!!n}},{value:o,unit:"h",check:function(){return r>=m&&!!o}},{value:i,unit:"m",check:function(){return!!i}},{value:a-=60*i,unit:"s",check:function(){return r9?t:"0"+t:r)+n}(c(c({},t),{},{hasPrev:!!e[e.length-1]}));return r&&e.push(r),e}),[])},v=function(e){var t=e.date,r=e.after,n=e.before,l=(0,i.useFormatTime)(1e3*r),u=(0,i.useFormatTime)(1e3*n),c=g(r,n);return a.default.createElement(o.Flex,{gap:1},a.default.createElement(o.TextNano,{color:"textDescription"},t," \u2022"),a.default.createElement(o.TextNano,{color:"textLite"},l," \u2192 ",u),a.default.createElement(o.TextNano,{color:"textDescription"},"\u2022 ",c))},h=function(e){var t=e.afterDate,r=e.beforeDate,n=e.after,l=e.before,u=(0,i.useFormatTime)(1e3*n),c=(0,i.useFormatTime)(1e3*l),f=g(n,l);return a.default.createElement(o.Flex,{gap:1},a.default.createElement(o.TextNano,{color:"textDescription"},t," \u2022"),a.default.createElement(o.TextNano,{color:"textLite"},u," \u2192"),a.default.createElement(o.TextNano,{color:"textDescription"},r," \u2022"),a.default.createElement(o.TextNano,{color:"textLite"},c),a.default.createElement(o.TextNano,{color:"textDescription"},"\u2022 ",f))},b=function(e){var t=e.after,r=e.before,n=(0,i.useFormatDate)(1e3*r),o=(0,i.useFormatDate)(1e3*t);return n===o?a.default.createElement(v,{date:o,after:t,before:r}):a.default.createElement(h,{afterDate:o,beforeDate:n,after:t,before:r})};t.default=function(e){var t,r=(0,i.useChart)(),n=(0,i.useAttributeValue)("overlays").highlight,u=null==n?void 0:n.range,c=null!=(t=null==n?void 0:n.moveX)?t:{},f=c.after,d=c.before;return a.default.createElement(o.Flex,l({gap:1,justifyContent:"between",flex:!0},e),u?a.default.createElement(o.Flex,{onClick:function(){d&&f&&r.moveX(f,d)},cursor:"pointer",gap:1,padding:[0,11,0]},a.default.createElement(o.TextNano,{color:"textLite"},"Highlight:"),a.default.createElement(b,{after:u[0],before:u[1]})):a.default.createElement("div",null),a.default.createElement(s,null))}},33949:(e,t,r)=>{t.__esModule=!0,t.default=t.SkeletonDimension=t.EmptyDimension=void 0;var n,a=g(r(96540)),o=r(8711),i=r(83199),l=g(r(99010)),u=g(r(1249)),c=g(r(24652)),f=g(r(33640)),d=(n=r(75010))&&n.__esModule?n:{default:n},s=r(22332),p=r(22753);function m(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(m=function(e){return e?r:t})(e)}function g(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=m(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=l(r(96540)),a=l(r(8711)),o=r(83199),i=r(22332);function l(e){return e&&e.__esModule?e:{default:e}}var u=(0,a.default)(o.Flex).attrs({width:"320px",height:"12px",round:!0}).withConfig({displayName:"heatmapColors__LinearColorScaleBar",componentId:"sc-13fexd8-0"})(["background:linear-gradient( to right,rgb(62,73,137),rgb(49,104,142),rgb(38,130,142),rgb(31,158,137),rgb(53,183,121),rgb(110,206,88),rgb(181,222,43),rgb(253,231,37) );"]);t.default=function(){var e=(0,i.useChart)(),t=(0,i.useAttributeValue)("max"),r=(0,i.useUnitSign)();return(0,i.useAttributeValue)("theme"),n.default.createElement(o.Flex,{"data-testid":"heatmap-legend",gap:2,alignItems:"center",padding:[2,11]},n.default.createElement(o.TextNano,null,e.getConvertedValue(0)," ",r),n.default.createElement(u,null),n.default.createElement(o.TextNano,null,e.getConvertedValue(t)," ",r))}},69529:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=m(r(96540)),a=s(r(8711)),o=r(81431),i=r(83199),l=s(r(53965)),u=s(r(14608)),c=r(22332),f=m(r(33949)),d=s(r(6504));function s(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function m(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=h(r(96540)),a=g(r(8711)),o=r(83199),i=g(r(70922)),l=g(r(58937)),u=g(r(29085)),c=g(r(99444)),f=g(r(83357)),d=h(r(6504)),s=r(22332),p=g(r(55969)),m=g(r(49628));function g(e){return e&&e.__esModule?e:{default:e}}function v(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(v=function(e){return e?r:t})(e)}function h(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=v(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n=m(r(96540)),a=r(83199),o=s(r(3113)),i=s(r(73983)),l=s(r(20327)),u=s(r(26762)),c=r(22332),f=m(r(6504)),d=["value","onChange","onClick","open","item"];function s(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}function m(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function g(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function v(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,d),m=s.icon,g=s.value,v=s.title;return n.default.createElement(a.Flex,b({ref:t,alignItems:"end"},p),n.default.createElement(f.Button,{icon:m,title:v,active:r===g,onClick:function(){return o(g)},padding:"2px",small:!0}),n.default.createElement(f.Button,{icon:n.default.createElement(f.default,{svg:c?l.default:u.default,size:"12px"}),onClick:i,padding:"2px",stroked:!0,small:!0}))})),w=function(e){var t=e.onItemClick,r=e.items[0],o=r.icon,i=r.value,l=r.title,u=(0,c.useAttributeValue)("id");return n.default.createElement(a.Flex,{background:"dropdown",round:{side:"bottom"},border:{side:"bottom",color:"borderSecondary"},padding:[1,0],"data-toolbox":u},n.default.createElement(f.Button,{title:l,icon:o,onClick:function(){return t(i)},padding:"2px",small:!0}))},O=function(){var e=(0,c.useChart)(),t=(0,c.useAttribute)("navigation"),r=t[0],l=t[1],u=function(e){return(0,n.useMemo)((function(){return[{value:"select",title:"Select and zoom",icon:n.default.createElement(f.default,{svg:o.default,size:"16px"}),"data-track":e.track("selectHorizontal")},{value:"selectVertical",title:"Select vertical and zoom",icon:n.default.createElement(f.default,{svg:i.default,size:"16px"}),"data-track":e.track("selectVertical")}]}),[e])}(e),d=(0,n.useMemo)((function(){return u.reduce((function(e,t){return t.value===r?v(v({},e),{},{selectedItem:t}):v(v({},e),{},{remainingItems:[t]})}),{selectedItem:u[0],remainingItems:[]})}),[r]),s=d.selectedItem,p=d.remainingItems;return n.default.createElement(a.Menu,{value:r,onChange:l,items:p,Dropdown:w,"data-track":"select"},n.default.createElement(y,{value:r,onChange:l,item:s}))};t.default=(0,n.memo)(O)},97556:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=u(r(96540)),a=r(83199),o=r(22332),i=u(r(32464));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}var c={critical:"error",clear:"success"},f=function(e){var t=e.id,r=(0,o.useAttributeValue)("overlays")[t],l=r.status,u=r.value,f=c[l]||l,d=(0,i.getColors)(f).color;return n.default.createElement(i.default,{type:f,noBorder:!0},n.default.createElement(a.TextSmall,{color:d},"Triggered value:"," ",n.default.createElement(a.TextSmall,{strong:!0,color:d},u)))};t.default=(0,n.memo)(f)},74787:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=u(r(96540)),a=r(83199),o=r(22332),i=u(r(32464));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}var c={critical:"error",clear:"success"},f=function(e){var t=e.id,r=(0,o.useAttributeValue)("overlays")[t],l=r.status,u=r.valueTriggered,f=c[l]||l,d=(0,i.getColors)(f).color;return n.default.createElement(i.default,{type:f,noBorder:!0},n.default.createElement(a.TextSmall,{color:d},"Triggered value:"," ",n.default.createElement(a.TextSmall,{strong:!0,color:d},u)))};t.default=(0,n.memo)(f)},33406:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=f(r(96540)),a=f(r(8711)),o=r(83199),i=r(22332),l=f(r(54924)),u=f(r(33640)),c=["field","normalize"];function f(e){return e&&e.__esModule?e:{default:e}}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,c),l=(0,i.useAttributeValue)(t),f=(0,i.useChart)();return r&&(l=r(l,f.getAttributes())),l?n.default.createElement(u.default,{content:l},n.default.createElement(s,d({color:"key",text:l,Component:o.TextSmall},a))):null}},85338:(e,t,r)=>{t.__esModule=!0,t.default=t.alignment=void 0;var n,a,o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),i=(n=r(8711))&&n.__esModule?n:{default:n},l=r(83199),u=r(22332),c=["id","align","right","fixed","children","uiName"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,c),v=(0,o.useRef)(),h=(0,o.useState)(),b=h[0],y=h[1],w=(0,u.useChart)(),O=function(e){if(w&&w.getUI(f)&&e&&v.current){var t=function(e,t,r,n,a){void 0===e&&(e=s.elementMiddle);var o=r.from,i=r.width,l=t.getUI(a).getChartWidth();return(p[e]||p.elementMiddle)({from:o,width:i,chartWidth:l,element:n})}(r,w,e,v.current,f),n=t[1];v.current.style.right="calc(100% - "+(n+a)+"px)"}};return(0,o.useLayoutEffect)((function(){return!i&&w.getUI(f).on("overlayedAreaChanged:"+t,(function(e){O(e),y((function(t){return!!t!==!!e?e:t}))}))}),[]),(0,o.useLayoutEffect)((function(){return!i&&O(b)}),[b]),b||i?o.default.createElement(m,d({ref:v},g),l):null};t.default=(0,o.memo)(g)},98066:(e,t,r)=>{t.__esModule=!0,t.default=t.Period=void 0;var n=s(r(96540)),a=s(r(8711)),o=r(83199),i=s(r(35083)),l=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(6504)),u=s(r(33640)),c=r(22332),f=r(93658);function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}function s(e){return e&&e.__esModule?e:{default:e}}var p=(0,a.default)(l.Button).withConfig({displayName:"correlation__CorrelationButton",componentId:"sc-a0l0u6-0"})(["pointer-events:all;"]);t.Period=function(e){var t=e.id,r=(0,c.useAttributeValue)("overlays")[t].range,a=r[0],i=r[1],l=(0,f.getDateDiff)(a,i);return n.default.createElement(o.TextNano,{strong:!0},l)},t.default=function(e){var t=e.id,r=(0,c.useAttributeValue)("overlays")[t].range,a=r[0],f=function(e){return e<15?"requires 15 secs minimum selection":""}(r[1]-a),d=(0,c.useChart)();return n.default.createElement(u.default,{content:f?"Metrics correlation: "+f:"Run metrics correlation"},n.default.createElement(o.Flex,null,n.default.createElement(p,{"data-track":d.track("metrics-correlation"),icon:n.default.createElement(l.default,{svg:i.default,size:"20px"}),onClick:function(){return d.sdk.trigger("correlation",d,r)},"data-testid":"highlight-correlations",disabled:!!f})))}},8586:(e,t,r)=>{t.__esModule=!0,t.default=t.Divider=void 0;var n,a=f(r(96540)),o=(n=r(8711))&&n.__esModule?n:{default:n},i=r(83199),l=f(r(98066)),u=r(22332);function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}function f(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),o=r(22332),i=(n=r(71840))&&n.__esModule?n:{default:n},l=["type"];function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=function(e){return e?r:t})(e)}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(n,l),f=i.default[o];return a.default.createElement(f,c({key:e,id:e,uiName:t},u))})))};t.default=(0,a.memo)(f)},92585:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=c(r(96540)),a=c(r(8711)),o=r(83199),i=r(22332),l=c(r(56284)),u=["dimensionId","textProps"];function c(e){return e&&e.__esModule?e:{default:e}}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,u),o=(0,i.useUnitSign)({dimensionId:t}),c=(0,i.useLatestConvertedValue)(t),m=(0,i.useOnResize)(),g=m.width,v=m.height;return c&&"-"!==c?n.default.createElement(s,f({column:!0},a),n.default.createElement(l.default,f({Component:d,maxHeight:.8*(v-20),maxWidth:g-20,fontSize:"2.1em",lineHeight:"1.1em",strong:!0},p,r),c),n.default.createElement(l.default,f({Component:d,maxHeight:.25*(v-20),maxWidth:.7*(g-20),fontSize:"1.1em",strong:!0},p,{color:"textLite"},r),o)):n.default.createElement(l.default,f({Component:d,maxHeight:.9*(v-20),maxWidth:g-20,fontSize:"2.5em",strong:!0},p,r,a),"string"!==typeof c?"Loading...":"No data")}},48666:(e,t,r)=>{t.__esModule=!0,t.default=t.Processing=void 0;var n=u(r(96540)),a=u(r(8711)),o=r(83199),i=r(22332),l=["defaultValue","uiName"];function u(e){return e&&e.__esModule?e:{default:e}}var c=(0,a.default)(o.Flex).attrs({column:!0,round:!0,border:{side:"all",color:"borderSecondary"},gap:1,padding:[1,2],flex:!1}).withConfig({displayName:"proceeded__ProceededContainer",componentId:"sc-ac5spo-0"})(["direction:initial;"]),f=function(e){var t=e.defaultValue,r=e.uiName,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n=0||(a[r]=e[r]);return a}(e,l),u=(0,i.useChart)().getUI(r).getChartWidth(),f=(0,i.useChartError)();return u<240?null:f&&t?n.default.createElement(c,a,n.default.createElement(o.Text,{textAlign:"center",textTransform:"firstLetter"},f||t)):null},d=(0,a.default)(o.Flex).withConfig({displayName:"proceeded__CenterContainer",componentId:"sc-ac5spo-1"})(["z-index:60000;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);"]);t.Processing=function(){return n.default.createElement(d,null,n.default.createElement(f,{defaultValue:"Processing"}))},t.default=f},71840:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=w(r(96540)),a=w(r(8711)),o=w(r(41956)),i=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=y(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(85338)),l=w(r(97556)),u=w(r(74787)),c=w(r(8586)),f=w(r(48666)),d=w(r(33406)),s=w(r(92585)),p=r(22332),m=["id"],g=["id"],v=["id"],h=["id","uiName"],b=["containerProps"];function y(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(y=function(e){return e?r:t})(e)}function w(e){return e&&e.__esModule?e:{default:e}}function O(){return O=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var _=(0,a.default)(o.default).withConfig({displayName:"types__NoEventsContainer",componentId:"sc-19vz950-0"})(["pointer-events:none;"]);t.default={alarm:function(e){var t=e.id,r=x(e,m);return n.default.createElement(i.default,O({id:t,top:"20px",margin:[0,2,0,0],align:i.alignment.elementLeft},r),n.default.createElement(l.default,{id:t}))},alarmRange:function(e){var t=e.id,r=x(e,g);return n.default.createElement(i.default,O({id:t,top:"20px",margin:[0,2,0,0],align:i.alignment.elementLeft},r),n.default.createElement(u.default,{id:t}))},highlight:function(e){var t=e.id,r=x(e,v);return(0,p.useAttributeValue)("sparkline")?null:n.default.createElement(i.default,O({id:t,align:i.alignment.elementRight,bottom:"25px",right:100},r,{noEvents:!0}),n.default.createElement(c.default,{id:t}))},proceeded:function(e){var t=e.id,r=e.uiName,a=x(e,h);return n.default.createElement(i.default,O({id:t,top:"50%",align:i.alignment.chartMiddle,uiName:r},a),n.default.createElement(f.default,{id:t,uiName:r}))},name:function(e){var t=e.containerProps,r=x(e,b);return n.default.createElement(_,O({isAbsolute:!0,position:"top",margin:[2,0,0,0]},t),n.default.createElement(d.default,r))},latestValue:function(e){return n.default.createElement(_,{isAbsolute:!0,position:"center"},n.default.createElement(s.default,e))}}},42417:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=h(r(96540)),a=h(r(8711)),o=r(83199),i=v(r(99010)),l=h(r(1249)),u=v(r(24652)),c=r(22332),f=r(96380),d=r(22753),s=r(67268),p=["children","fractionDigits"],m=["children","showFull"];function g(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(g=function(e){return e?r:t})(e)}function v(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=g(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}function h(e){return e&&e.__esModule?e:{default:e}}function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}var w=(0,a.default)(o.Flex).attrs({position:"relative","data-testid":"chartPopover-dimension",padding:[1,0]}).withConfig({displayName:"dimension__GridRow",componentId:"sc-adzl1v-0"})(["display:contents;"]),O=(0,a.default)(i.ColorBar).attrs({position:"absolute",top:1,left:0,backgroundOpacity:.4,round:.5}).withConfig({displayName:"dimension__ColorBackground",componentId:"sc-adzl1v-1"})([""]),x={ANOMALY_RATE:"arp",default:"value"},_=function(e){var t=e.children,r=e.fractionDigits,a=void 0===r?0:r,i=y(e,p),l=t.toString().split("."),c=l[0],f=l[1];return n.default.createElement(o.Flex,{alignItems:"center",justifyContent:"end"},n.default.createElement(u.Value,b({},i,{textAlign:"right"}),c),"undefined"!==typeof f&&n.default.createElement(u.Value,i,"."),n.default.createElement(u.Value,b({as:o.Flex,flex:!1,width:1.6*a},i,{textAlign:"left"}),f))},j=function(e){var t=e.children,r=e.showFull,a=y(e,m);return n.default.createElement(o.Flex,{gap:1,justifyContent:"end"},Object.keys(t).map((function(e){return n.default.createElement(o.Flex,{key:e,border:{size:"1px",side:"all",color:t[e]},round:!0,flex:!1,padding:[0,.5]},n.default.createElement(u.Value,b({},a,{color:t[e]}),r&&f.labels[e]||e))})))};t.default=function(e){var t=e.id,r=e.strong,a=e.rowFlavour,f=(0,c.useVisibleDimensionId)(t),p=(0,c.useChart)().getAttribute("unitsConversionFractionDigits"),m=(0,d.useIsHeatmap)();return n.default.createElement(w,{opacity:f?null:"weak"},n.default.createElement(o.Flex,{alignItems:"center",gap:1,position:"relative"},n.default.createElement(O,{id:t,valueKey:x[a]||x.default,height:"18px"},!m&&n.default.createElement(i.default,{id:t})),n.default.createElement(l.default,{padding:[1,2],flex:!0,id:t,strong:r,noTooltip:!0,color:r?"textFocus":"text"})),n.default.createElement(u.default,{id:t,strong:r,visible:f,Component:_,fractionDigits:p,color:a===s.rowFlavours.default?r?"textFocus":"text":"textLite"}),n.default.createElement(u.default,{id:t,strong:r,visible:f,valueKey:"arp",Component:_,fractionDigits:2,color:a===s.rowFlavours.ANOMALY_RATE?"anomalyTextFocus":"anomalyText"}),n.default.createElement(u.default,{textAlign:"right",id:t,strong:r,visible:f,valueKey:"pa",Component:j,color:a===s.rowFlavours.ANNOTATIONS?r?"textFocus":"text":"textLite",showFull:a===s.rowFlavours.ANNOTATIONS}))}},67268:(e,t,r)=>{t.__esModule=!0,t.rowFlavours=t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=d(r(8711)),o=r(83199),i=r(22332),l=d(r(75010)),u=d(r(24413)),c=d(r(17073)),f=d(r(42417));function d(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}var p=(0,a.default)(o.Flex).attrs({round:!0,width:{min:"196px",max:"80vw"},background:"dropdown",column:!0,padding:[4],gap:1}).withConfig({displayName:"dimensions__Container",componentId:"sc-172on4u-0"})(["box-shadow:0px 8px 12px rgba(9,30,66,0.15),0px 0px 1px rgba(9,30,66,0.31);"]),m=a.default.div.withConfig({displayName:"dimensions__Grid",componentId:"sc-172on4u-1"})(["display:grid;width:100%;grid-template-columns:minmax(150px,max-content) 60px 60px minmax(80px,auto);align-items:center;"]),g=a.default.div.withConfig({displayName:"dimensions__GridHeader",componentId:"sc-172on4u-2"})(["display:contents;"]),v=[null,null],h=function(){var e=Math.floor((window.innerHeight-500)/15)||16;return e<5?5:10},b=function(){return h()/2},y=t.rowFlavours={ANOMALY_RATE:"ANOMALY_RATE",ANNOTATIONS:"ANNOTATIONS",default:"VALUE"},w={ANOMALY_RATE:"anomalyDesc",ANNOTATIONS:"annotationsDesc",default:"valueDesc"},O=function(){var e=(0,i.useChart)(),t=(0,i.useAttributeValue)("hoverX")||v,r=t[0],a=t[1],d=(0,n.useMemo)((function(){var t=e.getClosestRow(r),n=e.onHoverSortDimensions(t,w[a]||w.default)||[];e.getAttribute("selectedDimensions").length>0&&(n=n.filter((function(t){return e.isDimensionVisible(t)})));var o=n.findIndex((function(e){return e===a})),i=n.length,l=Math.floor(function(e,t){return ee-b()?t-(b()+(e-t)):t-b()}(i,o)),u=Math.ceil(function(e,t){return ee-b()?e:t+b()}(i,o));return[l,u,i,n.slice(l,u)]}),[e,a,r]),s=d[0],O=d[1],x=d[2],_=d[3],j=y[a]||y.default;return n.default.createElement(p,{"data-testid":"chartPopover-dimensions",gap:2},n.default.createElement(o.Flex,{column:!0,gap:1},r&&n.default.createElement(c.default,{value:r}),n.default.createElement(u.default,null)),n.default.createElement(o.Flex,{flex:!1,height:3},s>0&&n.default.createElement(o.TextNano,{color:"textLite"},"\u2191",s," more values")),n.default.createElement(m,{gap:1,column:!0},n.default.createElement(g,null,n.default.createElement(o.TextMicro,{strong:!0},"Dimension"),n.default.createElement(o.TextMicro,{color:j===y.default?"text":"textLite",textAlign:"right"},"Value","heatmap"!==e.getAttribute("chartType")&&n.default.createElement(n.default.Fragment,null," ",n.default.createElement(l.default,{visible:!0,strong:j===y.default,color:j===y.default?"text":"textLite"}))),n.default.createElement(o.TextMicro,{strong:j===y.ANOMALY_RATE,color:j===y.ANOMALY_RATE?"text":"textLite",textAlign:"right"},"Anomaly%"),n.default.createElement(o.TextMicro,{strong:j===y.ANNOTATIONS,color:j===y.ANNOTATIONS?"text":"textLite",textAlign:"right"},"Info")),_.map((function(e){return n.default.createElement(f.default,{key:e,id:e,strong:a===e,rowFlavour:j})}))),n.default.createElement(o.Flex,{flex:!1,height:3},O{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=s(r(40961)),i=s(r(93331)),l=s(r(22007)),u=s(r(44862)),c=r(28973),f=r(22332),d=s(r(67268));function s(e){return e&&e.__esModule?e:{default:e}}function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=function(e){return e?r:t})(e)}var m={right:"left",bottom:"top"},g={right:"left",top:"bottom"},v={left:"right",bottom:"top"},h={left:"right",top:"bottom"};t.default=function(e){var t=e.uiName,r=(0,f.useChart)(),s=(0,n.useRef)(),p=(0,n.useState)(),b=p[0],y=p[1],w=(0,n.useRef)(),O=(0,n.useRef)(),x=(0,n.useState)(!1),_=x[0],j=x[1],P=(0,n.useState)(m),E=P[0],k=P[1];w.current=b,O.current=(0,l.default)(b,s,E,"width"),(0,n.useEffect)((function(){return(0,c.unregister)(r.getUI(t).on("mousemove",(function(e){if(!r.getAttribute("panning")&&!r.getAttribute("highlighting")){var t=e.offsetX||e.layerX,n=e.offsetY||e.layerY;if(j(!0),w.current){w.current.style.left=t+"px",w.current.style.top=n+"px",O.current();var a=window.innerHeight,o=window.innerWidth,i=s.current.getBoundingClientRect(),l=i.width,u=i.height;k(function(e,t){return e&&t?m:e?g:t?v:h}(t+l>o,n+u>a))}}})),r.getUI(t).on("mouseout",(function(){return j(!1)})),r.onAttributeChange("panning",(function(e){return e&&j(!1)})),r.onAttributeChange("highlighting",(function(e){return e&&j(!1)})))}),[r]);var M=(0,u.default)();return _?n.default.createElement(n.Fragment,null,n.default.createElement(a.Flex,{ref:function(e){return y(e)},position:"absolute"}),o.default.createPortal(n.default.createElement(i.default,{"data-toolbox":r.getId(),margin:[E.top?2:-2,E.right?-2:2],ref:s,width:{max:"100%"},column:!0,"data-testid":"drop",sx:{pointerEvents:"none"}},n.default.createElement(d.default,{uiName:t,"data-testid":"chartPopover"})),M)):null}},17073:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332);function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}t.default=function(e){var t=e.value,r=(0,o.useChart)(),i=(0,n.useMemo)((function(){return r.formatDate(t)+" \u2022 "+r.formatTime(t)}),[t]);return n.default.createElement(a.TextMicro,{color:"textDescription","data-testid":"chartPopover-timestamp"},i)}},24413:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=i(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=r(22332);function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(i=function(e){return e?r:t})(e)}t.default=function(){var e=(0,o.useAttributeValue)("viewUpdateEvery"),t=(0,o.useAttributeValue)("updateEvery"),r=(0,o.useAttributeValue)("groupingMethod");return n.default.createElement(n.Fragment,null,n.default.createElement(a.Flex,{gap:1,"data-testid":"chartPopover-collection"},n.default.createElement(a.TextMicro,{color:"textLite"},"Granularity:"),n.default.createElement(a.TextMicro,{color:"textDescription"},t,"s")),e!==t&&n.default.createElement(a.Flex,{gap:1,"data-testid":"chartPopover-collection"},n.default.createElement(a.TextMicro,{color:"textLite"},"View point:"),n.default.createElement(a.TextMicro,{color:"textDescription"},r," ",e,"s")))}},99684:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=(n=r(96540))&&n.__esModule?n:{default:n},o=r(83199);t.default=function(e){var t=e.disabled;return a.default.createElement(o.Flex,{width:"1px",background:t?"disabled":"borderSecondary"})}},31899:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=d(r(96540)),a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(8711)),o=r(83199),i=r(22332),l=d(r(6504)),u=d(r(42883)),c=["height"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function d(e){return e&&e.__esModule?e:{default:e}}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,c),l=(0,i.useLoadingColor)();return n.default.createElement(o.Flex,s({flex:!0,padding:[0,0,0,10]},a),n.default.createElement(m,{color:l,height:r}))}},49096:(e,t,r)=>{t.Ay=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(96540)),a=r(83199),o=d(r(74113)),i=r(22332),l=d(r(10534)),u=r(89380),c=d(r(56284)),f=["uiName"];function d(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,f);return n.default.createElement(u.ChartWrapper,{ref:t},n.default.createElement(o.default,p({uiName:r,column:!0,alignItems:"center",justifyContent:"center",position:"relative"},a),n.default.createElement(m,null),n.default.createElement(g,null)))}));t.Ay=(0,l.default)(v,{tile:!0})},57513:(e,t,r)=>{t.__esModule=!0,t.default=t.Title=void 0;var n,a=(n=r(96540))&&n.__esModule?n:{default:n},o=r(83199),i=r(22332);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.__esModule=!0,t.default=t.Container=void 0;var n=d(r(96540)),a=r(83199),o=r(22332),i=d(r(99684));t.Separator=i.default;var l=d(r(13752));t.ChartType=l.default;var u=d(r(92815));t.Fullscreen=u.default;var c=d(r(72582));t.Information=c.default;var f=["children"];function d(e){return e&&e.__esModule?e:{default:e}}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,f),a=!(0,o.useAttributeValue)("focused"),i=(0,o.useAttributeValue)("toolboxElements");return n.default.createElement(p,r,t,i.map((function(e,t){return n.default.createElement(e,{key:t,disabled:a})})))}},33862:(e,t)=>{t.__esModule=!0,t.createCanvas=t.copyCanvas=void 0;t.createCanvas=function(e,t){var r=document.createElement("canvas");return r.width=e,r.height=t,r},t.copyCanvas=function(e,t){t.width=e.width,t.height=e.height;var r=t.getContext("2d");r.clearRect(0,0,t.width,t.height),r.drawImage(e,0,0)}},20207:(e,t)=>{function r(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function n(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var n,a=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=l(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(8711)),o=(n=r(15877))&&n.__esModule?n:{default:n},i=["zIndex"];function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(l=function(e){return e?r:t})(e)}function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=(0,a.keyframes)(["0%{opacity:0.5;transform:scale(0.8);}100%{opacity:1;transform:scale(1);}"]),d=(0,a.css)(["opacity:0;animation:"," 0.1s forwards;animation-delay:0.01s;"],f),s=(0,a.default)(o.default).attrs((function(e){var t=e.zIndex;return function(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,i))})).withConfig({displayName:"container__Container",componentId:"sc-l6u9ms-0"})(["left:-99999px;"," "," "," backface-visibility:hidden;perspective:1000;transform:translate3d(0,0,0);will-change:left,top,transform;"],(function(e){return e.animation&&d}),(function(e){return!e.hideShadow&&"box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);"}),(function(e){return!!e.noEvents&&"pointer-events: none;"}));t.default=s},22007:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(96540),a=function e(t,r,n,a){void 0===a&&(a=!0);var o=function(e,t,r){return"left"===e.left?t.left:"right"===e.left?t.right:"right"===e.right?t.right-r.width:"left"===e.right?t.left-r.width:t.left+t.width/2-r.width/2}(t,r,n),i=Math.max(0,o);return o=Math.min(window.innerWidth-n.width,i),a||i===o?o:e(function(e){return"left"===e.left?{right:"right"}:"right"===e.left?{right:"left"}:"right"===e.right?{left:"left"}:"left"===e.right?{left:"right"}:void 0}(t),r,n)},o=function e(t,r,n,a){void 0===a&&(a=!0);var o=function(e,t,r){if("top"===e.top)return t.top;if("bottom"===e.top)return t.bottom;if("bottom"===e.bottom)return t.bottom-r.height;if("top"===e.bottom){var n=t.top-r.height;return n<0&&t.bottom+r.height{t.__esModule=!0,t.sx=t.default=void 0;var n=M(r(8711)),a=M(r(27988)),o=M(r(32305)),i=M(r(36094)),l=M(r(62703)),u=M(r(31886)),c=M(r(25320)),f=M(r(96029)),d=M(r(88725)),s=M(r(86397)),p=M(r(11564)),m=M(r(48488)),g=M(r(26278)),v=M(r(11341)),h=M(r(22318)),b=M(r(97373)),y=M(r(90836)),w=M(r(41311)),O=M(r(85103)),x=M(r(20909)),_=M(r(92108)),j=M(r(48299)),P=r(36350),E=r(50677),k=M(r(50402));function M(e){return e&&e.__esModule?e:{default:e}}var C=t.sx=function(e){return(0,k.default)(e.sx)(e)};t.default=function(e){return(0,n.default)(e).withConfig({displayName:"flex",componentId:"sc-1gtk8kg-0"})(["display:flex;"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",""],v.default,x.default,h.default,b.default,y.default,w.default,a.default,c.default,o.default,i.default,O.default,p.default,s.default,P.fontColor,g.default,u.default,_.default,l.default,m.default,f.default,d.default,j.default,E.position,C)}},15877:(e,t,r)=>{var n;t.__esModule=!0,t.default=void 0;var a=(0,((n=r(98909))&&n.__esModule?n:{default:n}).default)("div");t.default=a},41956:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=u(r(8711)),a=u(r(97373)),o=u(r(90836)),i=u(r(41311)),l=u(r(37341));function u(e){return e&&e.__esModule?e:{default:e}}var c=function(e,t){return"0"!==e&&"0"!==t?"calc((100% - "+e+") - "+t+")":"0"===e&&"0"===t?"100%":"calc(100% - "+("0"===e?t:e)+")"},f=new Set(["top","center","bottom"]),d=new Set(["bottom-left","left","top-left"]),s=new Set(["right","center","left"]),p=new Set(["top-left","top","top-right"]),m=new Set(["top-right","right","bottom-right"]),g=new Set(["bottom-right","bottom","bottom-left"]),v=n.default.div.attrs((function(e){var t=e.theme,r=e.margin;return{marginDimensions:(0,l.default)(t,r)}})).withConfig({displayName:"container__Container",componentId:"sc-k2hlzf-0"})(["position:",";display:flex;outline:none;pointer-events:all;"," "," "," "," "," "," "," "," "," "," "," ",""],(function(e){return e.isAbsolute?"absolute":"fixed"}),a.default,o.default,i.default,(function(e){var t=e.marginDimensions,r=t.top,n=t.bottom;return"max-height: "+c(r,n)+";"}),(function(e){var t=e.marginDimensions,r=t.right,n=t.left;return"max-width: "+c(n,r)+";"}),(function(e){var t=e.position,r=e.full,n=e.marginDimensions;return"vertical"===r||!0===r||p.has(t)?"top: "+n.top+";":s.has(t)?"top: 50%;":""}),(function(e){var t=e.position,r=e.full,n=e.marginDimensions;return"horizontal"===r||!0===r||m.has(t)?"right: "+n.right+";":""}),(function(e){var t=e.position,r=e.full,n=e.marginDimensions;return"vertical"===r||!0===r||g.has(t)?"bottom: "+n.bottom+";":""}),(function(e){var t=e.position,r=e.full,n=e.marginDimensions;return"horizontal"===r||!0===r||d.has(t)?"left: "+n.left+";":f.has(t)?"left: 50%;":""}),(function(e){var t=e.full,r=e.position,n=function(){var e=!0!==t&&"horizontal"!==t&&f.has(r),n=!0!==t&&"vertical"!==t&&s.has(r);return e||n?e&&!n?"translateX(-50%)":!e&&n?"translateY(-50%)":"translate(-50%, -50%)":""}();return n&&"transform: "+n+";"}),(function(e){return e.borderShadow&&"box-shadow: 0px 2px 68px rgba(0, 0, 0, 0.288);"}),(function(e){var t=e.zIndex,r=void 0===t?35:t;return"z-index: "+r+";"}));t.default=v},37341:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(48558),a={top:"0",right:"0",bottom:"0",left:"0"};t.default=function(e,t){if(!Array.isArray(t)||t.length<1||t.length>4)return a;var r=t.map((function(t){return(0,n.getDimension)(e,t)}));return 1===r.length?{top:r[0],right:r[0],bottom:r[0],left:r[0]}:2===r.length?{top:r[0],right:r[1],bottom:r[0],left:r[1]}:3===r.length?{top:r[0],right:r[1],bottom:r[2],left:r[1]}:{top:r[0],right:r[1],bottom:r[2],left:r[3]}}},90836:(e,t)=>{t.__esModule=!0,t.default=void 0;var r={start:"flex-start",center:"center",end:"flex-end",between:"space-between",around:"space-around",stretch:"stretch"};t.default=function(e){var t=e.alignContent;return t in r?"align-content: "+r[t]+";":""}},97373:(e,t)=>{t.__esModule=!0,t.default=void 0;var r={start:"flex-start",center:"center",end:"flex-end",baseline:"baseline",stretch:"stretch"};t.default=function(e){var t=e.alignItems;return t in r?"align-items: "+r[t]+";":""}},26278:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(41234);t.default=function(e){var t=e.theme,r=e.background,a=e.backgroundOpacity;if(!r)return"";var o=a?(0,n.getRgbColor)(r,a)({theme:t}):(0,n.getColor)(r)({theme:t});return o&&"background-color: "+o+";"}},92108:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(41234);function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=function(e,t,r){return e?"column":t?"column-reverse":r?"row-reverse":"row"}(e.column,e.columnReverse,e.rowReverse);return"flex-direction: "+t+";"}},11341:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.flex,r=e.basis;if(void 0===t&&void 0===r)return"";if(r&&void 0===t)return"flex-basis: "+r+";";var n=function(e,t){return void 0===t&&(t="auto"),!0===e?"1 1 "+t:!1===e?"0 0 "+t:"grow"===e?"1 0 "+t:"shrink"===e?"0 1 "+t:"number"===typeof e?e+" 0 "+t:"object"!==typeof e?e:e.grow+" "+e.shrink+" "+t}(t,r);return n?"flex: "+n+";":""}},85103:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.theme.constants.SIZE_SUB_UNIT,r=e.gap,n=e.column,a=e.columnReverse,o=e.rowReverse;if("number"!==typeof r)return"";var i=function(e){var t=e.column,r=e.columnReverse,n=e.rowReverse;return t||r?"bottom":n?"left":"right"}({column:n,columnReverse:a,rowReverse:o});return"\n &> *:not(:last-child) {\n margin-"+i+": "+t*r+"px;\n }\n "}},86397:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.theme.constants.SIZE_SUB_UNIT,r=e.height;if("object"===typeof r){var n=r.min,a=void 0===n?"":n,o=r.max,i=void 0===o?"":o;return"\n "+(a&&"min-height: "+("number"===typeof a?t*a+"px":a)+";")+"\n "+(i&&"max-height: "+("number"===typeof i?t*i+"px":i)+";")+"\n "}return r&&"height: "+("number"===typeof r?t*r+"px":r)+";"}},41311:(e,t)=>{t.__esModule=!0,t.default=void 0;var r={start:"flex-start",center:"center",end:"flex-end",between:"space-between",around:"space-around",evenly:"space-evenly",stretch:"stretch"};t.default=function(e){var t=e.justifyContent;return t in r?"justify-content: "+r[t]+";":""}},48488:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.overflow;if(!t)return"";if("string"===typeof t)return"overflow: "+t+";";var r=t.vertical,n=void 0===r?"":r,a=t.horizontal,o=void 0===a?"":a;return"\n "+(n&&"overflow-y: "+n+";")+"\n "+(o&&"overflow-x: "+o+";")+"\n "}},48299:(e,t,r)=>{t.__esModule=!0,t.pseudoSelectors=t.default=t.calculateStyles=void 0;var n=c(r(26278)),a=c(r(92108)),o=r(41234),i=c(r(97373)),l=["theme"],u=["theme"];function c(e){return e&&e.__esModule?e:{default:e}}function f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function d(e){for(var t=1;t=0||(a[r]=e[r]);return a}var m={border:a.default,background:n.default,color:function(e){var t=e.theme,r=e.color;return r?"color: "+(0,o.getColor)(r)({theme:t})+";":""},alignItems:i.default},g=t.calculateStyles=function(e){var t=e.theme,r=p(e,l),n="";for(var a in r)if(void 0===m[a]){n=n+(a+":")+r[a]+";"}else{var o=m[a];n+=o&&"function"===typeof o?o(d({theme:t},r)):""}return n},v=t.pseudoSelectors={_before:"&::before",_after:"&::after",_hover:"&:hover, &[data-hover]",_active:"&:active, &[data-active]",_focus:"&:focus, &[data-focus]",_focusWithin:"&:focus-within",_visited:"&:visited",_empty:"&:empty",_even:"&:nth-of-type(even)",_odd:"&:nth-of-type(odd)",_disabled:"&[disabled], &[aria-disabled=true], &[data-disabled]",_checked:"&[aria-checked=true]",_mixed:"&[aria-checked=mixed]",_selected:"&[aria-selected=true], [data-selected] > &",_invalid:"&[aria-invalid=true]",_pressed:"&[aria-pressed=true]",_readOnly:"&[aria-readonly=true], &[readonly]",_first:"&:first-of-type",_last:"&:last-of-type",_expanded:"&[aria-expanded=true]",_grabbed:"&[aria-grabbed=true]",_notFirst:"&:not(:first-of-type)",_notLast:"&:not(:last-of-type)",_groupHover:"[role=group]:hover &",_autofill:"&:-webkit-autofill",_placeholder:"&::placeholder"};t.default=function(e){var t=e.theme,r=p(e,u),n="";for(var a in r)if(a in v){var o=a,i=r[o],l=g(d({theme:t},i));n=n+"\n "+v[o]+"{ \n "+l+" \n }"}return n.replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm,"")}},11564:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.theme.constants.SIZE_SUB_UNIT,r=e.width;if("object"===typeof r){var n=r.min,a=void 0===n?"":n,o=r.max,i=void 0===o?"":o,l=r.base,u=void 0===l?"":l;return"\n "+(a&&"min-width: "+("number"===typeof a?t*a+"px":a)+";")+"\n "+(i&&"max-width: "+("number"===typeof i?t*i+"px":i)+";")+"\n "+(u&&"width: "+("number"===typeof u?t*u+"px":u)+";")+"\n "}return r&&"width: "+("number"===typeof r?t*r+"px":r)+";"}},22318:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=function(e){return!0===e?"wrap":!1===e?"nowrap":"reverse"===e?e:""}(e.flexWrap);return t&&"flex-wrap: "+t+";"}},23234:(e,t)=>{t.__esModule=!0,t.default=void 0;var r=new Set(["left","center","right"]);t.default=function(e){var t=e.textAlign;return r.has(t)&&"text-align: "+t+";"}},67789:(e,t)=>{t.__esModule=!0,t.default=void 0;var r=new Set(["underline","none","line-through"]);t.default=function(e){var t=e.textDecoration;return r.has(t)&&"text-decoration: "+t+";"}},610:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){return e.truncate&&"\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n"}},44453:(e,t)=>{t.__esModule=!0,t.default=void 0;var r=new Set(["normal","nowrap","pre-line","pre-wrap"]);t.default=function(e){var t=e.whiteSpace;return r.has(t)&&"white-space: "+t+";"}},30109:(e,t)=>{t.__esModule=!0,t.default=void 0;var r=new Set(["normal","break-all","keep-all","break-word"]);t.default=function(e){var t=e.wordBreak;return r.has(t)&&"word-break: "+t+";"}},36350:(e,t,r)=>{t.__esModule=!0,t.makeTypography=t.makeText=t.makeSmall=t.makeNano=t.makeMicro=t.makeHuge=t.makeH6=t.makeH5=t.makeH4=t.makeH3=t.makeH2=t.makeH1=t.makeH0=t.makeFemto=t.makeBigger=t.makeBig=t.fontColor=t.fontCode=void 0;var n=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=h(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&{}.hasOwnProperty.call(e,o)){var i=a?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,r&&r.set(e,n),n}(r(8711)),a=r(41234),o=v(r(27988)),i=v(r(32305)),l=v(r(36094)),u=v(r(60090)),c=v(r(23234)),f=v(r(67789)),d=v(r(610)),s=v(r(44453)),p=v(r(30109)),m=v(r(31886)),g=v(r(88725));function v(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(h=function(e){return e?r:t})(e)}var b=t.fontColor=function(e){var t=e.theme,r=e.color,n=void 0===r?"text":r;return"color: "+(0,a.getColor)(n)({theme:t})+";"},y=t.fontCode=function(e){var t=e.background,r=void 0===t?"text":t,n=e.code,o=e.color,i=void 0===o?"elementBackground":o,l=e.theme;return n&&"\n background-color: "+(0,a.getColor)(r)({theme:l})+";\n border-radius: 4px;\n color: "+(0,a.getColor)(i)({theme:l})+";\n padding: 0 6px;\n "},w=(0,n.css)([""," "," "," "," "," "," "," "," "," "," "," "," "," "," ",""],b,y,o.default,c.default,f.default,u.default,d.default,s.default,p.default,i.default,l.default,m.default,g.default,(function(e){var t=e.fontSize;return t&&"\n font-size: "+t+";\n line-height: "+t+";\n "}),(function(e){var t=e.lineHeight;return t&&"\n line-height: "+t+";\n "})),O=t.makeTypography=function(e,t){var r,a,o=t.fontSize,i=t.lineHeight,l=t.strong;return(0,n.default)(e).withConfig({displayName:"typography",componentId:"sc-1lwqv72-0"})(['font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif;font-style:normal;'," "," "," ",""],(a=o,function(){return"font-size: "+a+";"}),function(e){return function(){return"line-height: "+e+";"}}(i),(r=l,function(e){var t=e.strong;return"font-weight: "+((void 0===t?r:t)?"bold":"normal")+";"}),w)};t.makeH0=function(e){return O(e,{fontSize:"26px",lineHeight:"32px",strong:!0})},t.makeH1=function(e){return O(e,{fontSize:"24px",lineHeight:"28px",strong:!0})},t.makeH2=function(e){return O(e,{fontSize:"22px",lineHeight:"24px",strong:!0})},t.makeH3=function(e){return O(e,{fontSize:"20px",lineHeight:"24px",strong:!0})},t.makeH4=function(e){return O(e,{fontSize:"16px",lineHeight:"21px",strong:!0})},t.makeH5=function(e){return O(e,{fontSize:"14px",lineHeight:"18px",strong:!0})},t.makeH6=function(e){return O(e,{fontSize:"12px",lineHeight:"14px",strong:!0})},t.makeFemto=function(e){return O(e,{fontSize:"7px",lineHeight:"8px"})},t.makeNano=function(e){return O(e,{fontSize:"8px",lineHeight:"10px"})},t.makeMicro=function(e){return O(e,{fontSize:"10px",lineHeight:"13px"})},t.makeSmall=function(e){return O(e,{fontSize:"11px",lineHeight:"14px"})},t.makeText=function(e){return O(e,{fontSize:"12px",lineHeight:"16px"})},t.makeBig=function(e){return O(e,{fontSize:"14px",lineHeight:"20px"})},t.makeBigger=function(e){return O(e,{fontSize:"16px",lineHeight:"18px"})},t.makeHuge=function(e){return O(e,{fontSize:"24px",lineHeight:"32px"})}},44048:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(96540);function a(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{t.__esModule=!0,t.default=void 0;var n,a=r(96540),o=(n=r(44048))&&n.__esModule?n:{default:n};function i(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r{t.__esModule=!0,t.default=void 0;var n=r(96540);t.default=function(){var e=(0,n.useMemo)((function(){var e=document.createElement("div");return document.body.append(e),e}),[]);return(0,n.useLayoutEffect)((function(){return function(){try{document.body.removeChild(e)}catch(t){}}}),[]),e}},51365:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n,a=r(96540),o=(n=r(68016))&&n.__esModule?n:{default:n};t.default=function(e){var t=(0,a.useRef)(),r=(0,a.useCallback)((function(r){t.current=r,(0,o.default)(e,r)}),[]);return[t,r]}},31886:(e,t)=>{t.__esModule=!0,t.default=void 0;var r={weak:.3,medium:.4,strong:.8,none:1};t.default=function(e){var t=e.opacity,n=t&&r[t]||t;return n?"opacity: "+n+";":""}},36094:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var n=r(48558);t.default=function(e){var t=e.theme,r=e.padding;return r?Array.isArray(r)&&r.length>=1&&r.length<=4?"padding: "+(0,n.getDimensions)(t,r)+";":(console.error("Please provide an array (max 4 elements) for `padding` style helper."),""):""}},25320:(e,t)=>{t.__esModule=!0,t.default=void 0;var r={static:"static",absolute:"absolute",fixed:"fixed",relative:"relative",sticky:"sticky",initial:"initial",inherit:"inherit"};t.default=function(e){var t=e.position;return t in r?"position: "+t+";":""}},62703:(e,t)=>{t.__esModule=!0,t.default=void 0;var r=function(e,t){return!0===t?e+"px":"number"===typeof t?e*t+"px":"string"===typeof t?t:""},n=function(e,t){return"border-top-left-radius: "+r(e,t)+";"},a=function(e,t){return"border-top-right-radius: "+r(e,t)+";"},o=function(e,t){return"border-bottom-left-radius: "+r(e,t)+";"},i=function(e,t){return"border-bottom-right-radius: "+r(e,t)+";"},l={top:function(e,t){return"\n "+n(e,t)+"\n "+a(e,t)+"\n "},left:function(e,t){return"\n "+n(e,t)+"\n "+o(e,t)+"\n "},bottom:function(e,t){return"\n "+o(e,t)+"\n "+i(e,t)+"\n "},right:function(e,t){return"\n "+a(e,t)+"\n "+i(e,t)+"\n "},"top-left":n,"top-right":a,"bottom-left":o,"bottom-right":i};t.default=function(e){var t=e.theme.constants.SIZE_SUB_UNIT,n=e.round;if(!n)return"";var a=r(t,n);if(a)return"border-radius: "+a+";";var o=n.side,i=n.size,u=void 0===i?1:i;return o in l?""+l[o](t,u):""}},68016:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e,t){"function"===typeof e?e(t):e&&(e.current=t)}},60090:(e,t)=>{t.__esModule=!0,t.default=void 0;var r={none:"none",capitalize:"capitalize",uppercase:"uppercase",lowercase:"lowercase",firstLetter:"firstLetter",fullWidth:"full-width"};t.default=function(e){var t=(void 0===e?{}:e).textTransform,n=void 0===t?r.none:t;return n===r.firstLetter?"text-transform: lowercase;\n &::first-letter {\n text-transform: uppercase;\n }\n":n in r?"text-transform: "+r[n]+";":"text-transform: "+r.none+";"}},96029:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t=e.zIndex;if(t&&"number"===typeof t)return"z-index: "+t+";"}},15587:(e,t,r)=>{r.r(t)},42883:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"skeleton",use:"skeleton-usage",viewBox:"0 0 1225 192",content:''});i().add(l);const u=l},10120:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"D",use:"D-usage",viewBox:"0 0 16 16",content:''});i().add(l);const u=l},68317:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"I",use:"I-usage",viewBox:"0 0 16 16",content:''});i().add(l);const u=l},31952:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"L",use:"L-usage",viewBox:"0 0 16 16",content:''});i().add(l);const u=l},34386:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"N",use:"N-usage",viewBox:"0 0 16 16",content:''});i().add(l);const u=l},58655:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"anomaly_badge",use:"anomaly_badge-usage",viewBox:"0 0 15 16",content:''});i().add(l);const u=l},97517:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"checkmark_s",use:"checkmark_s-usage",viewBox:"0 0 16 16",content:''});i().add(l);const u=l},63668:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"chevron_down",use:"chevron_down-usage",viewBox:"0 0 12 12",content:''});i().add(l);const u=l},26762:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"chevron_down_thin",use:"chevron_down_thin-usage",viewBox:"0 0 16 24",content:''});i().add(l);const u=l},30464:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"chevron_expand",use:"chevron_expand-usage",viewBox:"0 0 8 6",content:''});i().add(l);const u=l},49484:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"chevron_right_end",use:"chevron_right_end-usage",viewBox:"0 0 18 18",content:''});i().add(l);const u=l},20327:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"chevron_up_thin",use:"chevron_up_thin-usage",viewBox:"0 0 16 24",content:''});i().add(l);const u=l},35083:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"correlations",use:"correlations-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},8001:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"dot",use:"dot-usage",viewBox:"0 0 10 10",content:''});i().add(l);const u=l},3113:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"drag_horizontal",use:"drag_horizontal-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},73983:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"drag_vertical",use:"drag_vertical-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},40813:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"gear",use:"gear-usage",viewBox:"0 0 20 20",content:''});i().add(l);const u=l},53965:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"nav_left",use:"nav_left-usage",viewBox:"0 0 8 10",content:''});i().add(l);const u=l},14608:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"nav_right",use:"nav_right-usage",viewBox:"0 0 8 10",content:''});i().add(l);const u=l},70922:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"pan_tool",use:"pan_tool-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},58937:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"selected_area",use:"selected_area-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},87083:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"sort_ascending",use:"sort_ascending-usage",viewBox:"0 0 18 18",content:''});i().add(l);const u=l},51081:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"sort_descending",use:"sort_descending-usage",viewBox:"0 0 18 18",content:''});i().add(l);const u=l},88335:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"warning_triangle_hollow",use:"warning_triangle_hollow-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},29085:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"zoom_in",use:"zoom_in-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},99444:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"zoom_out",use:"zoom_out-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l},83357:(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r(12897),a=r.n(n),o=r(55042),i=r.n(o),l=new(a())({id:"zoom_reset",use:"zoom_reset-usage",viewBox:"0 0 24 24",content:''});i().add(l);const u=l}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt b/src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt deleted file mode 100644 index ae386fb79..000000000 --- a/src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ diff --git a/src/web/gui/v2/7146.79304e386ac9238b7cf1.chunk.js b/src/web/gui/v2/7146.79304e386ac9238b7cf1.chunk.js deleted file mode 100644 index 610a44838..000000000 --- a/src/web/gui/v2/7146.79304e386ac9238b7cf1.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="200506ba-e7da-4c28-9afa-12c010f776fb",e._sentryDebugIdIdentifier="sentry-dbid-200506ba-e7da-4c28-9afa-12c010f776fb")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7146],{57146:(e,n,t)=>{t.r(n),t.d(n,{default:()=>u});t(62953);var a=t(96540),d=t(39225),l=t(86663),o=t(47767),r=t(22292),c=t(28738),f=t(24266);const s=(0,d.A)((()=>Promise.all([t.e(7144),t.e(7857),t.e(8239),t.e(9473),t.e(963),t.e(7487)]).then(t.bind(t,7356))),"AlertWebview"),u=(i=(0,f.Xc)((()=>{const{search:e}=window.location,{space_id:n,room_id:t,node_name:d,node_id:f}=l.parse(e);return(0,r.uW)("isLoaded")?a.createElement(a.Suspense,{fallback:a.createElement(c.A,null)},a.createElement(o.BV,null,a.createElement(o.qh,{path:"alerts/:alertId",element:a.createElement(s,{spaceId:n,roomId:t,nodeName:d,nodeId:f})}))):a.createElement(c.A,null)})),e=>{const{hash:n}=window.location,{token:t}=l.parse(n),[d,o]=(0,a.useState)();return(0,a.useEffect)((()=>{t&&(o(t),localStorage.setItem("netdataJWT",t))}),[]),d?a.createElement(i,e):a.createElement(c.A,null)});var i}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7170.5d6047bb6ce9d77d53db.chunk.js b/src/web/gui/v2/7170.5d6047bb6ce9d77d53db.chunk.js deleted file mode 100644 index 5afcacd22..000000000 --- a/src/web/gui/v2/7170.5d6047bb6ce9d77d53db.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="239c7385-e422-46fd-8336-50004b89c516",e._sentryDebugIdIdentifier="sentry-dbid-239c7385-e422-46fd-8336-50004b89c516")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7170],{17170:(e,n,d)=>{d.d(n,{A:()=>i});d(62953),d(3296),d(27208),d(48408);var o=d(37618);const i=()=>{if(o.Ay)return null;const{origin:e,searchParams:n}=new URL(window.location.href),d=null===n||void 0===n?void 0:n.get("labra_subscription_id"),i=null===n||void 0===n?void 0:n.get("aws_customer_id"),t=null===n||void 0===n?void 0:n.get("aws_product_id");return d&&i&&t?"".concat(e,"/api/v2/billing/labra/spaces?customer_id=").concat(i,"&marketplace=aws&product_id=").concat(t,"&subscription_id=").concat(d):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7208.1d75cf5d007de32e403b.chunk.js b/src/web/gui/v2/7208.1d75cf5d007de32e403b.chunk.js deleted file mode 100644 index 0cfc1ba77..000000000 --- a/src/web/gui/v2/7208.1d75cf5d007de32e403b.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var c="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h=(new Error).stack;h&&(c._sentryDebugIds=c._sentryDebugIds||{},c._sentryDebugIds[h]="750d2334-ef0d-4b22-bdbd-a7db1f1095f4",c._sentryDebugIdIdentifier="sentry-dbid-750d2334-ef0d-4b22-bdbd-a7db1f1095f4")}catch(c){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7208],{17208:(c,h,l)=>{l.d(h,{go:()=>r,fx:()=>I,J8:()=>z,oi:()=>w});var s=l(96540),t=l(12897),i=l.n(t),n=l(55042),e=l.n(n),d=new(i())({id:"netdata.svg",use:"netdata.svg-usage",viewBox:"0 0 288 56",content:'\n\n\n\n\n\n\n\n'});e().add(d);const C=d;var a=new(i())({id:"google.svg",use:"google.svg-usage",viewBox:"0 0 48 48",content:''});e().add(a);const v=a;var _=new(i())({id:"github.svg",use:"github.svg-usage",viewBox:"0 0 16 16",content:''});e().add(_);const M=_;var V=new(i())({id:"cncfColor.svg",use:"cncfColor.svg-usage",viewBox:"0 0 400 77",content:'\n\n\n\n\n\n\n\n\n\n'});e().add(V);const f=V;var g=new(i())({id:"cncfWhite.svg",use:"cncfWhite.svg-usage",viewBox:"-1.81 -3.06 419.38 80.13",content:'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'});e().add(g);const H=g;var L=new(i())({id:"cncfBlack.svg",use:"cncfBlack.svg-usage",viewBox:"-3.69 -2.94 438.62 83.87",content:'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'});e().add(L);const p=L;var o=l(5668);const w=()=>s.createElement("svg",{width:"256",height:"48",viewBox:C.viewBox},s.createElement("use",{xlinkHref:"#".concat(C.id)})),z=()=>s.createElement("svg",{width:"16",height:"16",viewBox:v.viewBox},s.createElement("use",{xlinkHref:"#".concat(v.id)})),I=()=>s.createElement("svg",{width:"16",height:"16",viewBox:M.viewBox},s.createElement("use",{xlinkHref:"#".concat(M.id)})),D=c=>{let{width:h="152",height:l="29",svg:t={}}=c;return()=>s.createElement("svg",{width:h,height:l,viewBox:t.viewBox},s.createElement("use",{xlinkHref:"#".concat(t.id)}))},X={light:D({svg:p}),dark:D({svg:H}),unspecified:D({svg:f})},r=function(){let{theme:c}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const h=(0,o.xd)("theme"),l=X[c||h]||X.unspecified;return s.createElement(l,null)}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7304.ed4690ec296b59fbe7fd.chunk.js b/src/web/gui/v2/7304.ed4690ec296b59fbe7fd.chunk.js deleted file mode 100644 index defa09ee0..000000000 --- a/src/web/gui/v2/7304.ed4690ec296b59fbe7fd.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="bbe79fef-904d-4ba3-8a9b-697d08d1d2db",e._sentryDebugIdIdentifier="sentry-dbid-bbe79fef-904d-4ba3-8a9b-697d08d1d2db")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7304],{7304:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Ae});n(62953);var r=n(96540),l=n(83199),a=n(58168),o=n(27776),i=n(86083),c=n(9060);const s=()=>{const e=(0,o.AR)(),t=(0,c.A)(),[n,l]=(0,o.oE)(),a=(0,o.WB)(),s=(0,r.useMemo)((()=>(0,i.Cj)({searchTerm:n,integrations:e})),[n,e]),m=n?(0,i.M6)(s,t):a;return{integrations:(0,i.Fd)((0,i.xM)(m)),setSearchTerm:l}};var m=n(58205);const d=e=>{let{flavour:t}=e;const[n,i]=(0,o.x9)(),{history:c,setHistory:d}=(0,o.b8)(),u=(0,o.GT)(),{setSearchTerm:g}=s(),p=(0,r.useCallback)((e=>{g(e),e?(n||i(c),d([])):n&&d(n)}),[n]),h=(0,r.useMemo)((()=>{var e;return null===(e=m.jI[t])||void 0===e?void 0:e.search}),[t]),v=(null===h||void 0===h?void 0:h.wrapperProps)||{},E=(null===h||void 0===h?void 0:h.inputProps)||{};return r.createElement(l.Flex,v,r.createElement(l.SearchInput,(0,a.A)({value:u,onChange:p,placeholder:"Search through 800+ integrations",dataGa:"integrations::searchTerm::".concat(t)},E)))},u=e=>{let{flavour:t,...n}=e;const o=(0,r.useMemo)((()=>{var e;return null===(e=m.vD[t])||void 0===e?void 0:e.headerContent}),[t]),i=(0,r.useMemo)((()=>{var e;return null===(e=m.jI[t])||void 0===e?void 0:e.header}),[t]),c=(null===i||void 0===i?void 0:i.wrapperProps)||{};return r.createElement(l.Flex,(0,a.A)({column:!0,alignItems:"center",justifyContent:"center",gap:2,width:{min:"500px"}},c),o&&r.createElement(o,n),r.createElement(d,{flavour:t}))};var g=n(88773),p=(n(41393),n(81454),n(63950)),h=n.n(p),v=n(3705),E=n(73700),y=n(74112),f=n(87659);const b=e=>{let{categories:t=[],level:n=0,flavour:l}=e;return r.createElement(r.Fragment,null,t.map((e=>r.createElement(k,{key:e.id,category:e,level:n+1,flavour:l}))))},x=e=>{let{subcategories:t=[],popular:n=[],noPopular:a=[],limitResults:o=0,level:i,flavour:c}=e;const[s,m]=(0,f.A)(o),d=o&&!s?a.slice(0,o):a,u=(0,r.useMemo)((()=>I(2)+4),[]);return r.createElement(l.Flex,{column:!0},r.createElement(b,{categories:n,level:i,flavour:c}),r.createElement(b,{categories:d,level:i,flavour:c}),!!o&&o0&&void 0!==arguments[0]?arguments[0]:1)},k=e=>{let{isSidebarCollapsed:t,category:n={},level:a=1,flavour:i,maxItemsPerCategory:c={}}=e;const s=(0,o.j6)(),{selectedCategory:d,pushCategory:u}=(0,o.b8)(),{id:p,name:h}=n,v=m.aw[p],{categories:E,popular:b,rest:k}=(0,r.useMemo)((()=>(0,y.YK)((0,y.PQ)({category:n,categories:s}))),[n,s]),A=(0,r.useMemo)((()=>{var e;const t=null===(e=c[p])||void 0===e?void 0:e.limit,n=b.length+1;return t>1?t-n:0}),[c,b]),F=p==(null===d||void 0===d?void 0:d.id),S=(0,r.useMemo)((()=>I(a)),[a]),[T,P]=(0,f.A)(),j=(0,o.q2)(),M=()=>{j(),u(n),(0,C.H)("integrations","select-category","sidebar","category-id:".concat(n.id)),E.length&&P()};return t?r.createElement(l.Flex,{alignItems:"center",justifyContent:"center",padding:[2]},r.createElement(w.A,{content:h,align:"right"},v&&r.createElement(l.Icon,{name:v,color:F?"primary":"text",cursor:"pointer",onClick:M}))):r.createElement(l.Flex,{column:!0},r.createElement(g.Av,{className:1==a?"top-level":"",gap:a>1?1:2,padding:[2,2,2,S],onClick:M,dataGa:"integrations::click-category-".concat(h,"::").concat(i),background:a>1&&F?"integrationMenuItemHover":null,alignItems:"center"},v&&r.createElement(l.Icon,{name:v,size:"small",color:F?"primary":"text"}),a>1&&r.createElement(g.oO,{name:"chevron_right",rotate:T?1:0,size:"small",color:"textLite",cursor:"pointer",disabled:!E.length}),r.createElement(l.TextBig,null,h)),!!E.length&&(T||1==a)&&r.createElement(x,{subcategories:E,popular:b,noPopular:k,limitResults:A,level:a,flavour:i}))},A=e=>r.createElement(l.Box,(0,a.A)({as:"hr",height:"1px",width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}},e)),F={collapsed:{alignItems:"center",justifyContent:"center",padding:[2]},expanded:{justifyContent:"end",padding:[0,2,0,0],position:"sticky",top:"0"}},S={collapsed:{icon:"chevron_right",iconSize:"large",flavour:"borderless",small:!0},expanded:{icon:"chevron_left",iconSize:"small",flavour:"hollow",tiny:!0}},T=e=>{let{isSidebarCollapsed:t,onClick:n=h()}=e;const o=(0,r.useMemo)((()=>t?"collapsed":"expanded"),[t]);return r.createElement(l.Flex,(0,a.A)({width:"100%"},F[o]),r.createElement(l.Button,(0,a.A)({neutral:!0,onClick:n},S[o])))},P=(0,E.s)(300,y.vF),j=e=>{let{flavour:t,isSidebarCollapsed:n,toggleSidebar:a=h()}=e;const[i,{height:c}]=(0,v.A)(),s=(0,o.Ss)(),m=(0,o.j6)(),[d,u]=(0,r.useState)({});return(0,r.useEffect)((()=>{P({height:c,topLevelCategories:s,categories:m,setState:u})}),[c,s,m]),r.createElement(l.Flex,{ref:i,column:!0,gap:2,overflow:{vertical:"auto"}},r.createElement(T,{isSidebarCollapsed:n,onClick:a}),s.map(((e,a)=>r.createElement(l.Flex,{key:e.id,column:!0,gap:2},r.createElement(k,{isSidebarCollapsed:n,category:e,maxItemsPerCategory:d,flavour:t}),!n&&a{const{pop:e}=(0,o.b8)(),t=(0,r.useCallback)((()=>{e(),(0,C.H)("integrations","navigate-back","breadcrumb")}),[e]);return r.createElement(l.Button,{label:"Back",icon:"arrow_left",iconColor:"primary",iconSize:"small",flavour:"borderless",onClick:t})};n(25440);var N=n(8711);const H=e=>{let{iconProps:t,...n}=e;return r.createElement(l.Flex,(0,a.A)({width:"74px",height:"74px",alignItems:"center",justifyContent:"center",background:"primary",round:"100%"},n),r.createElement(l.Icon,(0,a.A)({name:"integrations",color:"white",size:"large"},t)))},R=(0,N.default)(H).withConfig({displayName:"fallbackIcon__PlaceholderIcon",componentId:"sc-182ui8v-0"})(["filter:blur(3px);background:",";opacity:0.7;"],(0,l.getColor)("mainBackground")),L=()=>r.createElement(R,{iconProps:{color:"textLite"}}),z=H;var D=n(4659);const G=e=>{let{name:t,icon:n}=e;const[a,o]=(0,r.useState)(),i=(0,r.useCallback)((()=>o(!0)),[]);return r.createElement(l.Flex,{alignItems:"center",gap:1},n&&(a?r.createElement(z,{width:"18px",height:"18px",iconProps:{size:void 0,with:"12px",height:"12px"}}):r.createElement("img",{src:n,alt:"".concat(t,"-logo"),height:"18px",onError:i})),r.createElement(l.Text,null,t))},W=e=>{let{category:t={},index:n=0}=e;const{history:a,selectedIntegration:i,pushCategory:c}=(0,o.b8)();return!i&&n==a.length-1?r.createElement(l.Text,null,t.name):r.createElement(D.A,{onClick:()=>{c(t),(0,C.H)("integrations","select-category","breadcrumb","category-id:".concat(t.id))}},t.name)},q=e=>{let{flavour:t}=e;const{history:n}=(0,o.b8)(),a=n.map((e=>{let{name:t}=e;return t})).join("-").replace(" ","");return r.createElement(l.Flex,{gap:2,dataGa:"integrations::view-integration-".concat(a,"::").concat(t)},n.map(((e,t)=>r.createElement(l.Flex,{key:e.id,gap:2},"category"==e.type?r.createElement(W,{category:e,index:t}):r.createElement(G,e),t{let{url:t=""}=e;return t?r.createElement(D.A,{href:t,rel:"noopener noreferrer",target:"_blank"},r.createElement(w.A,{content:"Do you see something wrong? Edit the contents of this resource here."},r.createElement(l.Flex,{alignItems:"center",gap:1},r.createElement(l.Icon,{color:"primary",name:"pencilOutline",width:"12px",height:"12px"}),r.createElement(l.Text,{color:"primary"},"Edit")))):null};var Y=n(89009);const K=()=>{const{integrations:e}=s(),t=(0,o.q2)(),n=(0,o.hh)(),{setHistory:a}=(0,o.b8)(),i=(0,r.useCallback)((()=>{t(),n&&a(n)}),[]);return r.createElement(l.Flex,{alignItems:"center",justifyContent:"between"},r.createElement(l.Flex,{alignItems:"center",gap:4},r.createElement(l.TextBig,null,"Found ",e.length," results"),r.createElement(l.Button,{label:"Clear",icon:"x",iconColor:"primary",iconSize:"small",flavour:"borderless",onClick:i})))};var V=n(51220);n(17333),n(98992),n(54520);const J=N.default.img.withConfig({displayName:"progressiveImage__StyledImage",componentId:"sc-16k6xv6-0"})(["max-width:80%;max-height:74px;"]),Q=e=>{let{src:t,Placeholder:n,onError:l=h(),...o}=e;const[i,c]=(0,f.A)(!0);return(0,r.useEffect)((()=>{const e=new Image;e.src=t,e.onload=()=>c(),e.onerror=e=>l(e)}),[]),i&&n?r.createElement(n,null):r.createElement(J,(0,a.A)({src:t},o))},Z=e=>{let{isCommunity:t,...n}=e;return r.createElement(l.Flex,(0,a.A)({alignItems:"center",gap:1,position:"absolute",top:"-20px",right:"0",padding:[0,2]},n),r.createElement(w.A,{content:t?"This integration is maintaned by the community":"This integration is maintained by Netdata"},r.createElement(l.TextMicro,{strong:!0,color:"textDescription"},t?"by Community":"by Netdata")),!t&&r.createElement(l.Icon,{name:"favorites",color:"primary",width:"14px",height:"14px"}))},$=e=>{let{integration:t={},...n}=e;const{selectedCategory:i,pushIntegration:s}=(0,o.b8)(),m=(0,o.j6)(),[d,u]=(0,f.A)(),{flattenedCategory:p,community:h}=t,v=(0,c.A)(),{tree:E,topLevelCategory:b}=(0,y.fk)({category:p,getCategoryById:v}),x=(0,r.useMemo)((()=>E.slice(0,2).filter(Boolean).map((e=>{let{name:t}=e;return t})).join(" / ")),[E,b]),w=(0,y.q1)((null===i||void 0===i?void 0:i.id)||(null===p||void 0===p?void 0:p.id),m),[I,k]=(0,r.useState)(),A=(0,r.useCallback)((()=>k(!0)),[]);return r.createElement(g.Zp,(0,a.A)({alignItems:"center",justifyContent:"center",height:"100%",position:"relative",overflow:"hidden",cursor:"pointer",padding:[2],onMouseEnter:u,onMouseLeave:u,onClick:()=>{s(t),(0,C.H)("integrations","select-integration","integration-tile","integration-id:".concat(t.id))},round:"2px"},n),r.createElement(g.AG,{name:w,className:d?"hover":"",width:"190px",height:"190px",color:"textLite"}),r.createElement(l.Flex,{width:"100%",alignItems:"center",justifyContent:"center",column:!0,gap:2,zIndex:10},r.createElement(l.Flex,{justifyContent:"center",column:!0,gap:1},r.createElement(l.H3,{textAlign:"center",strong:!1},t.name),x&&r.createElement(l.TextSmall,{textAlign:"center"},x)),t.icon&&!I&&r.createElement(Q,{Placeholder:L,src:t.icon,alt:"".concat(t.name,"-logo"),onError:A}),I&&r.createElement(z,null),t.description?r.createElement(g.BT,{className:d?"hover":"",alignItems:"center",justifyContent:"center",width:"100%",padding:[3],background:"mainBackground"},r.createElement(Z,{isCommunity:h}),r.createElement(l.Text,{textAlign:"center"},t.description)):r.createElement(Z,{isCommunity:h,bottom:"4px",top:"unset"})))},U=(0,r.memo)($),X=e=>{let{integrations:t=[],itemsPerRow:n=4,rowHeight:l=200}=e;const a=(0,r.useRef)(),o=(0,r.useMemo)((()=>(e=>{let{integrations:t=[],itemsPerRow:n}=e;const r=[];let l=[];for(let a=0;a0&&r.push(l),r})({integrations:t,itemsPerRow:n})),[t,n]),i=(0,r.useCallback)((()=>l),[l]),c=(0,V.Te)({count:o.length,getScrollElement:()=>a.current,enableSmoothScroll:!1,estimateSize:i});return r.createElement("div",{ref:a,style:{height:"100%",overflow:"auto",paddingRight:"16px"}},r.createElement("div",{style:{minHeight:"".concat(c.getTotalSize(),"px"),width:"100%",position:"relative"}},c.getVirtualItems().map((e=>r.createElement("div",{key:e.key,style:{position:"absolute",top:0,left:0,width:"100%",transform:"translateY(".concat(e.start,"px)"),overflow:"hidden"},ref:c.measureElement,"data-index":e.index},r.createElement(g.$c,{itemsPerRow:n,rowHeight:l},(o[e.index]||[]).map((e=>r.createElement(U,{width:"100%",height:"100%",key:e.flattenedKey||e.id,integration:e})))))))))},ee=()=>r.createElement(l.Flex,{width:"100%",column:!0,alignItems:"center",margin:[8,0,0,0]},r.createElement(l.Flex,{column:!0,justifyContent:"center",alignItems:"center",margin:[0,0,6]},r.createElement(l.H3,{margin:[0,0,4]},"No integrations to display"),r.createElement(l.Text,{color:"textDescription",textAlign:"center"},"There are currently no integrations under this category.",r.createElement("br",null),"Try another category or use the search bar to find what you're looking for.")));var te=n(45463);const ne="(min-width: 1600px)",re="(max-width: 1599px)",le="(max-width: 1299px)",ae={large:{itemsPerRow:4,rowHeight:200},medium:{itemsPerRow:3,rowHeight:200},small:{itemsPerRow:2,rowHeight:190}};var oe=n(63314);const ie=(0,r.memo)((e=>{let{selectedCategory:t,searchTerm:n,integrations:o}=e;const{itemsPerRow:i,rowHeight:c}=(()=>{const e=(0,te.A)(ne),t=(0,te.A)(re),n=(0,te.A)(le);return ae[e?"large":t&&!n?"medium":"small"]||{}})();return r.createElement(l.Flex,{column:!0,gap:4,width:"100%",height:"100%",overflow:{vertical:"auto"}},r.createElement(l.Flex,{width:"100%",position:"sticky",top:"0",background:"mainBackground",zIndex:15},n?r.createElement(K,null):r.createElement(l.Flex,{column:!0,gap:2},r.createElement(l.H1,{strong:!1},null===t||void 0===t?void 0:t.name),r.createElement(l.Text,null,null===t||void 0===t?void 0:t.description))),o.length?r.createElement(oe.Ay,(0,a.A)({mode:"IntegrationsList"},n?{searchTerm:n}:{}),r.createElement(X,{integrations:o,itemsPerRow:i,rowHeight:c})):r.createElement(oe.Ay,(0,a.A)({mode:"NoIntegrations"},n?{searchTerm:n}:{}),r.createElement(ee,null)))})),ce=e=>{let{flavour:t}=e;const{selectedCategory:n}=(0,o.b8)(),l=(0,o.GT)(),{integrations:a}=s();return r.createElement(ie,{flavour:t,selectedCategory:n,searchTerm:l,integrations:a})};var se=n(24695),me=n(14125),de=n(47130);const ue=(0,n(92155).A)((0,de.A)(l.Button)),ge=e=>{let{itemId:t,...n}=e;const l=(0,me.l)();return t?r.createElement(ue,(0,a.A)({small:!0,icon:"gear",onClick:()=>l(t),label:"Configure",tooltip:"Add a new data collection job or edit existing jobs for this collector",payload:{dyncfgId:t}},n)):null};var pe=n(27467),he=n(38819);const ve=()=>{var e,t;const[n,a]=(0,r.useState)("calc(100% - 133px)"),{selectedIntegrationTab:i}=(0,he.PP)(),[,c]=(0,pe.N9)("selectedIntegrationTab"),[s,m]=(0,r.useState)(i||0),{selectedIntegration:d={}}=(0,o.b8)(),{overview:u,metrics:g,alerts:p,setup:h,troubleshooting:E,relatedResources:y,dyncfgId:f}=d,[b,{height:x}]=(0,v.A)(),w=(0,r.useMemo)((()=>[u?{id:"overview",label:"Overview",content:u}:null,g?{id:"metrics",label:"Metrics",content:g}:null,p?{id:"alerts",label:"Alerts",content:p}:null,h?{id:"setup",label:"Setup",content:h}:null,E?{id:"troubleshooting",label:"Troubleshooting",content:E}:null].filter(Boolean)),[u,g,p,h,E,y]);(0,r.useLayoutEffect)((()=>{x&&a("".concat(x-70,"px"))}),[x]);return r.createElement(oe.Ay,{tab:null===(e=w[s])||void 0===e?void 0:e.label,delay:0},r.createElement(l.Flex,{ref:b,column:!0,gap:2,width:"100%",height:"100%",margin:[4,0,0,0]},r.createElement(l.Flex,{border:{side:"bottom",size:"1px",color:"borderSecondary"},padding:[0,4],justifyContent:"between"},r.createElement(l.Tabs,{selected:parseInt(s),onChange:e=>{var t;c(e),m(e),(0,C.H)("integrations","select-integration-tab","integration-view","selected-tab:".concat(null===(t=w[e])||void 0===t?void 0:t.label))}},w.map((e=>{let{label:t}=e;return r.createElement(l.Tab,{key:t,label:r.createElement(l.Text,null,t),minWidth:"auto",maxWidth:"auto",padding:[1,4],background:"mainBackground",small:!0})}))),r.createElement(ge,{itemId:f})),r.createElement(l.Flex,{width:"100%",height:n,overflow:{vertical:"auto"},padding:[2,0]},r.createElement(se.A,null,null===(t=w[s])||void 0===t?void 0:t.content))))},Ee=e=>{let{integration:t={}}=e;return r.createElement(r.Fragment,null,t.description&&r.createElement(l.Flex,{margin:[4,0,0,0]},r.createElement(l.Text,null,t.description)),r.createElement(ve,null))},ye=e=>{let{integration:t={},topLevelCategory:n={},isNightly:l}=e;const a=(0,r.useMemo)((()=>(e=>m.rP[null===e||void 0===e?void 0:e.id]||Ee)(n)),[n]);return r.createElement(oe.Ay,{mode:"IntegrationView",integrationId:null===t||void 0===t?void 0:t.id},r.createElement(a,{integration:t,isNightly:l}))};var fe=n(59778);const be=e=>{let{flavour:t}=e;const n=(0,_.ap)("plan"),a=(0,c.A)(),{level:i,selectedCategory:s,selectedIntegration:m}=(0,o.b8)(),{flattenedCategory:d}=m||{},u=d||s,{topLevelCategory:g}=(0,y.fk)({category:u,getCategoryById:a}),p="deploy"==(null===g||void 0===g?void 0:g.id),[h,v]=(0,r.useState)((0,fe.M)(n)),E=m||i>2;return r.createElement(l.Flex,{column:!0,gap:2,width:"100%",overflow:m&&!p?{}:{vertical:"auto"}},r.createElement(l.Flex,{column:!0,alignItems:"start",gap:2,padding:[0,2,0,0]},E&&r.createElement(B,null),r.createElement(l.Flex,{width:"100%",alignItems:"end",justifyContent:"between"},r.createElement(l.Flex,{alignItems:"center",gap:4},r.createElement(q,{flavour:t}),(null===m||void 0===m?void 0:m.editLink)&&r.createElement(O,{url:m.editLink})),m&&p&&r.createElement(Y.A,{isNightly:"nightly"==h,toggleNightly:e=>{const t=e.target.checked?"nightly":"stable";v(t)}}))),m?r.createElement(ye,{integration:m,topLevelCategory:g,isNightly:"nightly"==h,flavour:t}):r.createElement(ce,{flavour:t}))};var xe=n(17208);const we=(0,N.default)(l.Flex).withConfig({displayName:"cncfReference__Wrapper",componentId:"sc-1ntasha-0"})(["position:absolute;bottom:0;"]),Ce=()=>r.createElement(we,{width:"100%",alignItems:"start",justifyContent:"end",background:"mainBackground",gap:2,padding:[6]},r.createElement(l.Flex,{width:"500px"},r.createElement(l.TextSmall,{textAlign:"right"},"Netdata is a member of the Cloud Native Computing Foundation (CNCF), and it is one of the most starred projects in the"," ",r.createElement(D.A,{alignSelf:"start",Component:l.TextSmall,href:"https://landscape.cncf.io/?item=observability-and-analysis--observability--netdata",rel:"noopener noreferer",target:"_blank"},"CNCF landscape"),".")),r.createElement(xe.go,null));var Ie=n(6323),ke=n(47767);const Ae=e=>{let{flavour:t=m.Jr}=e;const[n,,a,i]=(0,f.A)();(()=>{const e=(0,r.useRef)(!0),{pathname:t}=(0,ke.zy)(),n=(0,o.yv)();(0,r.useEffect)((()=>{e.current||(e.current=!1,n())}),[t])})();const[c,s]=(0,f.A)();return r.createElement(oe.Ay,{feature:"Integrations",logImpression:!1},r.createElement(l.Flex,{position:"relative",height:"100%",column:!0,background:"mainBackground"},r.createElement(l.Flex,{column:!0,alignItems:"center",justifyContent:"center"},r.createElement(u,{flavour:t,onInvite:a})),r.createElement(g.D6,{flavour:t,isSidebarCollapsed:c},r.createElement(M,{flavour:t,isSidebarCollapsed:c,toggleSidebar:s}),r.createElement(be,{flavour:t})),t==m.D_.homePage&&r.createElement(Ce,null)),n&&r.createElement(Ie.d,{onClose:i}))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7332.3acf93dcfa52c7f1bc18.chunk.js b/src/web/gui/v2/7332.3acf93dcfa52c7f1bc18.chunk.js deleted file mode 100644 index 7c82fbac8..000000000 --- a/src/web/gui/v2/7332.3acf93dcfa52c7f1bc18.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="d40641ff-687c-4418-8176-e2eea4e305e2",e._sentryDebugIdIdentifier="sentry-dbid-d40641ff-687c-4418-8176-e2eea4e305e2")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7332],{47332:(e,t,a)=>{a.r(t),a.d(t,{Dropdown:()=>j,default:()=>R});a(62953);var d=a(96540),o=a(8711),r=a(83199),n=a(43375),i=a(61360);var s=a(74618),l=a(15327),c=a(35304),u=a(21591),p=a(68980),b=a(28738),m=a(38257);const g=e=>(0,o.keyframes)(["from{border-color:",";border-width:2px;}to{border-color:",";border-width:1px;}"],(0,r.getColor)("primary")(e),(0,r.getColor)("textLite")(e)),h=(0,o.default)(r.Flex).withConfig({displayName:"dropArea__AnimatedFlex",componentId:"sc-vs4sjk-0"})(["animation:",";"],(e=>{let{animate:t}=e;return t?(0,o.css)([""," 0.15s linear infinite"],g):""})),f={},v=(0,d.memo)((e=>{let{item:t=f,itemProps:a=f}=e;const{id:o,name:i,isNew:s}=t,{overDashboardId:l}=a,{setNodeRef:c,isOver:u,over:b}=(0,n.zM)({id:o,data:{droppable:!0,dropArea:!0,dashboardId:o,onlyPointerWithin:!0}}),{processing:m,loading:g}=(0,p.fz)(o),v=m||g;return d.createElement(r.Flex,{padding:[2],flex:!0,background:l===o&&"successSemi"},d.createElement(h,{alignItems:"center",justifyContent:"center",padding:[2],border:{side:"all",type:"dashed",color:u?"primary":"textLite"},round:!0,ref:c,width:"100%",height:15,animate:(null===b||void 0===b?void 0:b.id)===o&&l!==o},v?d.createElement(r.Text,{color:"textLite"},"Loading..."):d.createElement(r.TextBig,{color:l===o?"successText":"text"},s?"":d.createElement(d.Fragment,null,"Add in "),d.createElement(r.TextBig,{strong:!0,color:s?"primary":l===o?"successText":"text"},i))))})),w=((0,o.default)(r.Drop).attrs({align:{top:"bottom",left:"left"},animation:!0,backdrop:!0,column:!0,padding:[2,0],background:"dropdown",round:1,overflow:{vertical:"auto"},margin:[.5,0,0],width:30}).withConfig({displayName:"list__Dropdown",componentId:"sc-s8yppy-0"})([""]),(0,d.memo)((e=>{let{dashboards:t,selected:a,setSelected:o,itemProps:n}=e;const i=(0,m.A)();return d.createElement(d.Fragment,null,d.createElement(v,{item:{id:"new",name:"Create a new dashboard",isNew:!0},itemProps:n}),d.createElement(r.MenuDropdown,{items:t,Item:v,value:a,hasSearch:!1,onItemClick:o,hideShadow:!0,itemProps:n,overflow:"hidden",ref:i}))})));var x=a(86008),D=a(3914),y=a(69765),I=a(91517),E=a(47767),A=a(80925),C=a(71835),S=a(79731),k=a(50876),_=a(2025),F=a(67544),L=a(4659),N=a(18202),M=a(54621);const P=e=>{let{onDone:t}=e;const a=(0,E.Zp)(),o=(0,D.vt)(),r=(0,y.ID)(),n=(0,D.ns)(o,"slug"),i=(0,y.wz)(r,"slug"),s=(0,A.e)(),[l,c]=(0,C.A)(),{sendLog:u}=(0,k.A)(),p=(0,M.tV)(),b=(0,_.DH)(null,{onSuccess:e=>{p({title:e.slug,id:e.id,destination:e.slug,type:"dashboards",droppable:!0,droppableProps:{dashboardId:e.id,dropArea:!0}}),l({header:"Added",text:d.createElement(d.Fragment,null,"Chart added in"," ",d.createElement(L.A,{as:"a",strong:!0,onClick:()=>a("/spaces/".concat(n,"/rooms/").concat(i,"/dashboards/").concat(e.slug))},e.name)," ","dashboard.")}),setTimeout((()=>t()),2e3),u({feature:"drag-in-dashboard",isSuccess:!0})},onFail:e=>{var a;const d=null===e||void 0===e||null===(a=e.response)||void 0===a?void 0:a.data,o=(0,S.o)(null===d||void 0===d?void 0:d.errorMsgKey)||(null===d||void 0===d?void 0:d.errorMessage)||"Something went wrong";c({message:o}),t(),u({feature:"drag-in-dashboard",isFailure:!0,message:o})}}),m=(0,F.nM)(),g=(0,F.Dn)(o,r);return(0,d.useCallback)(((e,t)=>{const a=s.getNode({id:null===t||void 0===t?void 0:t.itemId}),d=(0,N.A)(a.getAttributes());"new"!==e?m(d.contextScope,{...d,dashboardId:e,itemLayout:t},(()=>b(e))):g({name:"[Untitled]"},(e=>{m(d.contextScope,{...d,dashboardId:e.id,itemLayout:t},(()=>b(e.id)))}))}),[g,m])},T=(0,o.default)(r.Flex).attrs({background:"mainBackground",padding:[2],overflow:"auto",height:"80%",width:"600px"}).withConfig({displayName:"dropDashboard__ScaledDownContainer",componentId:"sc-zd7fpn-0"})(["box-shadow:0 0 0 1px rgba(63,63,68,0.05),-1px 0 15px 0 rgba(34,33,81,0.01),0px 15px 15px 0 rgba(34,33,81,0.25);"]),z=e=>{let{id:t,setOverDashboard:a}=e;const o=(0,D.vt)(),n=(0,y.ID)(),i=(0,D.ns)(o,"slug"),s=(0,y.wz)(n,"slug"),l=(0,I.A)(t,{spaceId:o,spaceSlug:i,roomId:n,roomSlug:s}),c=P({onDone:a});return t?d.createElement(r.Flex,{flex:!0,width:"100%",height:"100%",alignItems:"center",justifyContent:"center"},d.createElement(T,null,l?d.createElement(b.A,{title:"Loading dashboard..."}):d.createElement(x.A,{id:t,containerWidth:600,trashable:!1,containerDndProps:{droppable:!0},onDragEnd:(e,d)=>{if(!d)return a();c(t,d)}}))):null},j=(0,o.default)(r.Flex).attrs({column:!0,background:"dropdown",width:{max:"auto",min:100,base:100}}).withConfig({displayName:"dropInDashboard__Dropdown",componentId:"sc-12fd9r3-0"})(["box-shadow:0 0 0 1px rgba(63,63,68,0.05),-1px 0 15px 0 rgba(34,33,81,0.01),0px 15px 15px 0 rgba(34,33,81,0.25);"]),R=()=>{const[e,t]=(0,d.useState)(),[a,o]=(0,d.useState)();(0,c.A)();const m=(0,u.q)();let g=(0,p.Sf)(m);g=(0,d.useMemo)((()=>[...g].sort(((e,t)=>new Date(e.updatedAt)2&&void 0!==arguments[2]?arguments[2]:[];const[o,r]=(0,d.useState)();return(0,i.A)((()=>r(e)),t,[e,...a]),o}(null===a||void 0===a?void 0:a.id,500),v=P({onDone:o});(0,n.E5)({onDragMove:e=>{let{active:t,over:a}=e;if(null!==a&&void 0!==a&&a.id&&t)if(a.data.current.dropinDashboards&&t.data.current.dashboardable)o((e=>e||{active:t,dropinDashboards:!0}));else if(a.data.current.dashboardId&&t.data.current.dashboardable){if("new"===a.data.current.dashboardId)return;o((e=>e&&(null===e||void 0===e?void 0:e.id)===a.data.current.dashboardId?e:{...e,id:a.data.current.dashboardId,active:t}))}},onDragEnd:e=>{let{active:t,over:a}=e;null!==a&&void 0!==a&&a.id&&t&&(a.data.current.dashboardId&&t.data.current.dashboardable?v(a.data.current.dashboardId,t.data.current):setTimeout((()=>o()),1e3))},onDragCancel:()=>{o()}});const x=(0,d.useMemo)((()=>({overDashboardId:f})),[f]);if(null===a||void 0===a||!a.active)return null;const{isItem:D,isContainer:y,dashboardable:I}=a.active.data.current;return I&&(D||y)?d.createElement(r.Layer,{position:"right",full:!0,backdrop:!0,shadow:!0,justifyContent:"end"},d.createElement(z,{id:f,setOverDashboard:o}),(null===a||void 0===a?void 0:a.dropinDashboards)&&d.createElement(j,null,d.createElement(s.z,{title:"Drop in a dashboard",onClose:()=>o()}),d.createElement(l.Yv,{gap:2,height:"100%",overflow:"hidden",background:"dropdown"},h?d.createElement(w,{dashboards:g,selected:e,setSelected:t,itemProps:x}):d.createElement(b.A,{title:"Loading dashboards..."})))):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7340.25dce1c5cc66b613700f.chunk.js b/src/web/gui/v2/7340.25dce1c5cc66b613700f.chunk.js deleted file mode 100644 index a36aa807e..000000000 --- a/src/web/gui/v2/7340.25dce1c5cc66b613700f.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="317c0ddc-8886-460f-a296-29c55519a411",e._sentryDebugIdIdentifier="sentry-dbid-317c0ddc-8886-460f-a296-29c55519a411")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7340],{26751:(e,t,n)=>{n.d(t,{A:()=>o});var a=n(58168),r=n(96540),l=n(83199);const o=e=>{let{message:t,title:n,footer:o,...i}=e;const c=(null===i||void 0===i?void 0:i["data-testid"])||"functionError";return r.createElement(l.Flex,(0,a.A)({alignItems:"center",column:!0,"data-testid":c,flex:!0,gap:3,justifyContent:"center",padding:[0,20]},i),r.createElement(l.H3,{"data-testid":"".concat(c,"-title")},n),r.createElement(l.TextBig,{color:"textDescription","data-testid":"".concat(c,"-message")},t),o)}},97340:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Ma});n(62953);var a=n(96540),r=n(83084),l=n(67990),o=n(27467),i=n(50466),c=n(99292),s=n(99739),d=n(28738),u=n(3705),m=n(58168),f=(n(3064),n(98992),n(72577),n(83199)),p=n(11128),g=n(47762),h=n(3914),v=n(20378),y=n(47767);const x=e=>{const t=(0,p.u7)(e),{state:n}=(0,y.zy)();return(0,a.useEffect)((()=>{null!==n&&void 0!==n&&n.nodeId&&t([n.nodeId])}),[]),null===n||void 0===n?void 0:n.nodeId};var E=n(4659),b=n(26751);const C=e=>{let{paramsKey:t,...n}=e;const r=(null===n||void 0===n?void 0:n["data-testid"])||"capableNodesError",l=(0,p.w7)(t),o=(0,g.xY)(null===l||void 0===l?void 0:l[0],"name");return a.createElement(f.Flex,(0,m.A)({alignItems:"center",flex:!0,gap:8,justifyContent:"center"},n,{"data-testid":r}),a.createElement(f.Icon,{"data-testid":"".concat(r,"-icon"),height:"230px",name:"unreachableNode",width:"230px"}),a.createElement(b.A,{"data-testid":"".concat(r,"-details"),gap:2,title:o?"".concat(o," is not configured for Functions"):"Your nodes are not configured for Functions",message:a.createElement(a.Fragment,null,"Learn how to configure your nodes"," ",a.createElement(E.A,{Component:f.TextBig,"data-ga":"functions-capable-nodes-error::click-docs-link::functions-view","data-testid":"".concat(r,"-docsLink"),href:"https://learn.netdata.cloud/docs/nightly/operations/run-time-troubleshooting-with-functions#prerequisites",target:"_blank",rel:"noopener noreferrer"},"to support functions")),width:{max:"fit-content"}}))};var w=n(68741),k=n(40982),A=n(78459),I=(n(41393),n(14905),n(81454),n(8872),n(18121)),F=n(57605),T=n(29217),S=n(87659),K=n(18925),P=n(40933),z=n(44644),L=n(92155);const N={room:"space_new",space:"spaces_v2",personal:"user"},M=[{icon:N.personal,value:"personal",label:"Personal"},{icon:N.room,value:"room",label:"Room"},{icon:N.space,value:"space",label:"Space"}],O=(0,L.A)(f.Button),R=e=>{let{onSubmit:t,onClose:n}=e;const[r,l]=(0,a.useState)(""),[o,i]=(0,a.useState)("personal");return a.createElement(f.Modal,{onClickOutside:n,onEsc:n},a.createElement(f.ModalContent,{background:"dropdown"},a.createElement(f.ModalHeader,null,"Create a new settings snapshot",a.createElement(f.ModalCloseButton,{testId:"close-button",onClose:n})),a.createElement(f.ModalBody,null,a.createElement(f.Flex,{column:!0,width:80,gap:3},a.createElement(f.TextInput,{"data-testid":"name",label:"Name",onChange:e=>{let{target:t}=e;return l(t.value)},value:r}),a.createElement(f.Flex,{column:!0,gap:1},a.createElement(f.TextSmall,{strong:!0},"Scope"),a.createElement(f.Select,{options:M,value:M.find((e=>e.value===o)),onChange:e=>{let{value:t}=e;return i(t)},styles:{minWidth:"80px"}})))),a.createElement(f.ModalFooter,null,a.createElement(O,{disabled:""===r.trim(),label:"Create",onClick:()=>t({name:r,scope:o}),"data-testid":"btn-create",payload:{description:"Modal - Create Settings"}}))))},B={color:"textLite",margin:[0,1,0,0],width:"14px",height:"14px"},D=e=>{let{openForm:t,close:n}=e;return a.createElement(f.Flex,{padding:[2,1],border:{side:"top"},justifyContent:"center"},a.createElement(f.Button,{small:!0,icon:"save",onClick:()=>{t(),n()},"data-ga":"user-settings::click-create",title:"Create a new setting with your changes"},"Add new setting"))},_=e=>{let{id:t,close:n}=e;const r=(0,K.xS)(t,{onSuccess:n});return a.createElement(f.IconButton,{icon:"save",iconColor:"textLite",onClick:e=>{e.stopPropagation(),r({value:{}})},"data-ga":"user-settings::click-update",neutral:!0,padding:[0],title:"Update this setting with your changes"})},j=e=>{let{id:t,close:n}=e;const r=(0,K.z2)(t,{onSuccess:n});return a.createElement(f.IconButton,{icon:"trashcan",iconColor:"textLite",onClick:e=>{e.stopPropagation(),r()},"data-ga":"user-settings::click-delete",neutral:!0,padding:[0],title:"Delete this setting"})},W=e=>{let{item:{value:t,label:n,icon:r,disabled:l,onClick:o,...i},value:c,onItemClick:s,index:d,style:u,close:p,...g}=e;const h=c===t;return a.createElement(f.MenuItemContainer,(0,m.A)({"data-index":d,"aria-selected":h,disabled:l,selected:h,onClick:e=>{o&&o(e),s(t)}},i,g,{style:u,alignItems:"center",justifyContent:"between",padding:[1],overflow:"hidden"}),a.createElement(f.Flex,{alignItems:"center"},r,a.createElement(f.TextSmall,{whiteSpace:"normal",wordBreak:"break-word"},n)),a.createElement(f.Flex,{alignItems:"center",gap:.5},a.createElement(_,{id:t,close:p}),a.createElement(j,{id:t,close:p})))},V=e=>{let{disabled:t,type:n,types:r,entity:l,entities:o,...i}=e;r=Array.isArray(r)?r:n?[n]:[],o=Array.isArray(o)?o:l?[l]:[];const c=(0,P._)({params:{type:r,entity:o}}),[s,d]=(0,z.WY)({type:n,entity:l}),u=(e=>(0,a.useMemo)((()=>e.map((e=>({value:e.id,label:e.name,icon:a.createElement(f.Icon,(0,m.A)({name:N[e.scope]||N.personal},B)),"data-track":"setting-".concat(e.scope)})))),[e]))(c),[p,,g,h]=(0,S.A)(),v=(0,K.yK)({onSuccess:()=>{h(),close()}});return a.createElement(a.Fragment,null,a.createElement(f.Menu,{value:s,items:u,dropProps:{align:{top:"bottom",right:"right"},"data-toolbox":l},dropdownProps:{width:"200px"},onChange:d,"data-track":"user-settings",Item:W,Footer:e=>a.createElement(D,(0,m.A)({},e,{openForm:g}))},a.createElement(f.IconButton,(0,m.A)({icon:"settings_h",padding:[0],title:"User settings",disabled:t,"data-testid":"toolbox-addSettings"},i))),p&&a.createElement(R,{onSubmit:function(){return v({type:n,entity:l,path:"/",...arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}})},onClose:h}))},q=(0,a.memo)(V);var H=n(93155),G=n(61360),U=n(8711);const Z=(0,U.default)(f.Flex).attrs({alignItems:"center",border:{side:"bottom",color:"borderSecondary"},padding:[2]}).withConfig({displayName:"styled__MenuItem",componentId:"sc-1bb2nho-0"})(["&:last-child{border:none;}"]),X=(0,U.default)(f.TextInput).withConfig({displayName:"styled__TextInput",componentId:"sc-1bb2nho-1"})(['margin:0 10px;min-width:unset;width:45px;> div{margin:0;}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}input[type="number"]{-moz-appearance:textfield;}']),Y=a.createElement(f.Flex,{column:!0,width:{max:"500px"},gap:1},a.createElement(f.TextSmall,null,"Full data queries will always provide all the available facets with counters for your search, which depending on the size of the query could result in poor performance."),a.createElement(f.TextSmall,null,"i.e. Querying logs for multiple days with multitudes of entries."),a.createElement(f.TextSmall,null,"With this toggle \u201coff\u201d (default), queries will slice the data and will lower performance hit on your servers.")),$=e=>{let{onClose:t,targetRef:n,paramsKey:r,...l}=e;const c=(null===l||void 0===l?void 0:l["data-testid"])||"config",s=(0,i.Ol)({key:"acceptedParams",...r}).includes("slice"),[d,u]=(0,o.r$)("slice",{defaultValue:!0,flavour:"bool",...r}),[m,p]=(0,S.A)(!d);(0,G.A)((()=>{!!d===!!m&&u(!m)}),200,[d,m]);const g=(0,i.Ol)({key:"updateEvery",...r}),[h,v]=(0,o.r$)("pollingInterval",{...r,flavour:"int",defaultValue:g}),[y,x]=(0,a.useState)(h);return(0,G.A)((()=>{h!==y&&v(y)}),400,[h,y]),n.current?a.createElement(f.Drop,{align:{top:"bottom",right:"right"},animation:!0,background:"dropdown",close:t,column:!0,"data-testid":c,margin:[.5,0,0],onClickOutside:t,onEsc:t,round:1,target:n.current,width:58},s&&a.createElement(Z,{"data-testid":"".concat(c,"-slice-data"),justifyContent:"between"},a.createElement(f.Flex,{gap:1,alignItems:"center"},a.createElement(f.Text,{color:"textNoFocus","data-testid":"".concat(c,"-slice-data-label")},"Full data queries (slow)"),a.createElement(T.A,{plain:!0,content:Y,isBasic:!0,allowHoverOnTooltip:!0,stretch:"align"},a.createElement(f.Icon,{name:"information",color:"textDescription",width:"14px",height:"14px"}))),a.createElement(f.Toggle,{colored:!0,checked:m,"data-ga":"functions-config::auto-slice-data-switch::functions-view::".concat(m?"enabled":"disabled"),"data-testid":"".concat(c,"-slice-data-switch"),onChange:p})),a.createElement(Z,{"data-testid":"".concat(c,"-pollingInterval")},a.createElement(f.Text,{color:"textNoFocus","data-testid":"".concat(c,"-pollingInterval-label")},"Refresh every"),a.createElement(X,{"data-ga":"functions-config::polling-interval::functions-view","data-testid":"".concat(c,"-pollingInterval-input"),min:1,onChange:e=>{let{target:t}=e;const n=+t.value;n>0&&x(n)},size:"tiny",type:"number",value:y}),a.createElement(f.Text,{color:"textNoFocus","data-testid":"".concat(c,"-pollingInterval-units")},"seconds"))):null};var J=n(21290);const Q=e=>{let{paramsKey:t}=e;const{updatedAt:n}=(0,i.Ol)(t),{localeTimeString:r,localeDateString:l}=(0,J.$j)();return a.createElement(f.TextMicro,{color:"textLite"},"Last updated: ",l(n,{long:!0})," ",r(n,{secs:!0}))};var ee=n(51112);const te=U.default.div.withConfig({displayName:"reload__IconsContainer",componentId:"sc-gd414j-0"})(["position:relative;"]),ne=(0,U.default)(f.Icon).withConfig({displayName:"reload__SmallIcon",componentId:"sc-gd414j-1"})(["position:absolute;top:3px;left:3px;"]),ae=(0,U.keyframes)(["from{transform:rotate(0deg);}to{transform:rotate(359deg);}"]),re=(0,U.default)(f.IconButton).withConfig({displayName:"reload__AnimatedIcon",componentId:"sc-gd414j-2"})(["&& svg{animation:",";}animation:rotation 2s infinite linear;"],(e=>{let{animate:t}=e;return t?(0,U.css)([""," 3s linear infinite"],ae):""})),le=e=>{let{onRefresh:t,onCancel:n,dataGa:r,testId:l,loading:o}=e;const i=(0,ee.gC)(),[c,s]=(0,a.useState)(!1),[d,u]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{if(!o)return s(!1),void u(!1);const e=setTimeout((()=>s(!0)),500),t=setTimeout((()=>u(!0)),3e3);return()=>{clearTimeout(e),clearTimeout(t)}}),[o]),a.createElement(f.Flex,{alignItems:"center",gap:1},a.createElement(te,null,a.createElement(ne,{name:i?"playSolid":"pauseSolid",width:"6px",height:"6px",color:i?"primary":"text"}),a.createElement(re,{animate:c,"data-testid":"".concat(l,"-refreshNowBtn"),"data-ga":"".concat(r,"::click-refresh-now::functions-view"),flavour:"hollow",icon:"refresh",onClick:()=>t({merge:!1}),disabled:i,padding:[1]})),a.createElement(f.Collapsible,{open:d,direction:"horizontal",duration:300},a.createElement(f.IconButton,{"data-testid":"".concat(l,"-cancelBtn"),"data-ga":"".concat(r,"::click-cancel::functions-view"),flavour:"hollow",warning:!0,icon:"x",onClick:()=>n(),padding:[1]})))},oe={fn:{dataGa:"functions-header",hasConfig:!0,Title:e=>{let{name:t,fn:n}=e;return n?t?"".concat(n," on ").concat(t):n:"Top"},titleTooltip:a.createElement(f.Flex,{width:{max:"500px"},alignItems:"center",flexWrap:!0},a.createElement(f.Text,null,"Netdata Functions enable detailed low-level monitoring at the edge. "),a.createElement(E.A,{Component:f.Text,"data-ga":"functions-header::click-docs-link::functions-view","data-testid":"docsLink",href:"https://learn.netdata.cloud/docs/nightly/concepts/netdata-functions",target:"_blank",rel:"noopener noreferrer"},"Read the Netdata functions documentation to learn more"),a.createElement(f.Text,null,"."))},logs:{dataGa:"logs-header",hasConfig:!0,Title:e=>{let{name:t,fn:n}=e;return n?t?"".concat(n," logs on ").concat(t):"".concat(n," logs"):"Logs"},titleTooltip:a.createElement(f.Flex,{width:{max:"500px"},alignItems:"center",flexWrap:!0},a.createElement(f.Text,null,"Explore system and applications logs. "),a.createElement(E.A,{Component:f.Text,"data-ga":"functions-header::click-docs-link::functions-view","data-testid":"docsLink",href:"https://learn.netdata.cloud/docs/logs/systemd-journal",target:"_blank",rel:"noopener noreferrer"},"Read the Netdata logs documentation to learn more"),a.createElement(f.Text,null,"."))},feed:{dataGa:"feed-header",Title:()=>"Events",titleTooltip:a.createElement(f.Flex,{width:{max:"500px"},alignItems:"center",flexWrap:!0},a.createElement(f.Text,null,"Troubleshoot faster with Netdata Events. Access topology and alert events across the room in one convenient location."," "),a.createElement(E.A,{Component:f.Text,"data-ga":"feed-header::click-docs-link::feed-view","data-testid":"docsLink",href:"https://learn.netdata.cloud/docs/nightly/concepts/events-feed",target:"_blank",rel:"noopener noreferrer"},"Read the Events feed documentation to learn more"),a.createElement(f.Text,null,"."))}},ie=(0,a.memo)((e=>{let{onRefresh:t,onCancel:n,paramsKey:r,...l}=e;const o=(null===l||void 0===l?void 0:l["data-testid"])||"functionsHeader",c=(0,a.useRef)(),{dataGa:s,hasConfig:d,titleTooltip:u,Title:m}=oe[r.extraKey]||oe.fn,[h,v,,y]=(0,S.A)(!1),x=(0,p.w7)(r),E=(0,g.xY)(null===x||void 0===x?void 0:x[0],"name"),{loaded:b,data:C,totalSize:w,actualSize:k,loading:A,loadingMore:I,aggregatedView:F}=(0,i.Ol)(r),K=(0,i.Ak)(r);return a.createElement(f.Flex,{"data-testid":o,justifyContent:"between"},a.createElement(f.Flex,{column:!0},a.createElement(f.Flex,{alignItems:"center","data-testid":"".concat(o,"-title"),gap:1},a.createElement(f.H3,null,a.createElement(m,{name:E,fn:K})),a.createElement(T.A,{plain:!0,content:u,isBasic:!0,allowHoverOnTooltip:!0,stretch:"align"},a.createElement(f.Icon,{name:"information",color:"textDescription",width:"16px",height:"16px"}))),a.createElement(f.Flex,{alignItems:"center",gap:2},b&&a.createElement(f.TextSmall,{color:"textLite",strong:!0},"(",!!F&&!!k&&a.createElement(a.Fragment,null,a.createElement(f.TextSmall,{color:"text",strong:!0},k||0," ",F.aggregatedLabel),a.createElement("span",null," \u2283 ")),w||(null===C||void 0===C?void 0:C.length)||0," ",(null===F||void 0===F?void 0:F.resultsLabel)||"results",")"),a.createElement(Q,{paramsKey:r}))),a.createElement(f.Flex,{gap:1,alignItems:"start"},a.createElement(le,{testId:o,dataGa:s,onRefresh:t,onCancel:n,loading:A||I}),d&&a.createElement(f.IconButton,{"data-testid":"".concat(o,"-ConfigBtn"),"data-ga":"".concat(s,"::click-config::functions-view"),flavour:"hollow",icon:"gear",ref:c,onClick:v,padding:[1]}),h&&a.createElement($,{"data-testid":"".concat(o,"-Config"),isOpen:h,onClose:y,targetRef:c,paramsKey:r}),H.EM&&a.createElement(q,{type:"function",path:"/view",entity:K,padding:[1],"data-testid":"".concat(o,"-SettingsBtn"),"data-ga":"".concat(s,"::click-config::functions-view"),flavour:"hollow"})))}),((e,t)=>e.onRefresh===t.onRefresh));n(25440);var ce=n(65570),se=n(98525);const de=(0,U.default)(f.Icon).attrs({color:"text",height:"16px",width:"16px"}).withConfig({displayName:"value__Arrow",componentId:"sc-1apuy8c-0"})(["rotate:",";transition:all 200ms ease;"],(e=>{let{rotate:t}=e;return t})),ue=function(e){let{transform:t,decimalPoints:n=0,units:r,defaultValue:l}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=(0,se.py)();return(0,a.useMemo)((()=>{switch(t){case"number":return(0,se.iX)(e,{decimalPoints:n,units:r,defaultValue:l});case"duration":return(0,se.Sh)(e,{defaultValue:l});case"datetime":return o(e,{defaultValue:l});case"datetime_usec":return o(e,{defaultValue:l,usec:!0});default:return null===e||"undefined"===typeof e?l:e}}),[e,r])},me=e=>{let{description:t="",value:n,units:r=""}=e;return t?a.createElement(f.Flex,{column:!0,gap:1,justifyContent:"center"},a.createElement(f.TextSmall,null,t),a.createElement(f.TextSmall,{strong:!0,textAlign:"center"},n," ",r)):"".concat(n," ").concat(r)},fe=(0,U.default)(f.Flex).withConfig({displayName:"value__ValueContainer",componentId:"sc-1apuy8c-1"})(["",""],(e=>{let{overflowWrap:t}=e;return t&&"* {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n word-break: break-word;\n }\n "})),pe={debug:{strong:!0,color:"textLite"},normal:{},notice:{strong:!0},warning:{strong:!0,color:"warningText"},critical:{strong:!0,color:"errorText"}},ge=(0,U.default)(f.Text).attrs((e=>({...e,...pe[e.severity]||pe.normal}))).withConfig({displayName:"value__ValueLabel",componentId:"sc-1apuy8c-2"})([""]),he=(0,a.forwardRef)(((e,t)=>{let{icon:n,iconRotate:r,children:l,onClick:o,strong:i,testId:c="cell",textAlign:s,wrap:d,truncate:u=!0,rowOptions:f,...p}=e;return a.createElement(fe,(0,m.A)({cursor:o?"pointer":"inherit",gap:.5,onClick:o,overflow:"hidden",ref:t,width:{max:"100%"},flexWrap:!0,overflowWrap:d},p),n&&a.createElement(de,{name:n,rotate:r}),a.createElement(ge,(0,m.A)({"data-testid":"".concat(c,"-value"),strong:i,textAlign:s,truncate:!d&&u,whiteSpace:d?"wrap":"nowrap"},f),l))})),ve=e=>{let{description:t="",tooltipValue:n,value:r,valueOptions:l={},wrap:o,rowOptions:i,...c}=e;const s=ue(r,l);return a.createElement(T.A,(0,m.A)({content:!o&&a.createElement(me,{description:t,value:n||r,units:l.units}),"data-testid":"valueComponent",isBasic:!0},c),a.createElement(he,{wrap:o,rowOptions:i},s))},ye=e=>{let{value:t,...n}=e;return a.createElement(ve,(0,m.A)({value:t.value},n))},xe=e=>{let{description:t="",maxValue:n,strong:r,type:l,value:o,valueOptions:i={},wrap:c,...s}=e;const d=100*o/n,u="bar"===l,m=(null===s||void 0===s?void 0:s["data-testid"])||"progressValue",p=ue(o,i);return a.createElement(T.A,{content:a.createElement(me,{description:t,value:o,units:i.units}),isBasic:!0,stretch:"align"},a.createElement(f.Flex,{column:!0,"data-testid":m,gap:1,flexWrap:c,flex:!0},!u&&a.createElement(he,{strong:r,testid:m},p),null!==o&&a.createElement(f.ProgressBar,{background:"borderSecondary",border:"none",color:["green","netdata"],containerWidth:"100%","data-testid":"".concat(m,"-bar"),height:2,width:"".concat(d,"%")})))},Ee=e=>{let{value:t,wrap:n}=e;return t=Array.isArray(t)?t:[t],a.createElement(f.Flex,{alignItems:"center",flexWrap:n},t.map(((e,t)=>a.createElement(f.Pill,{flavour:"neutral","data-testid":"pillValueComponent",key:"".concat(e,"-").concat(t),margin:[.3],normal:!1},e))))};var be=n(69765),Ce=n(40267);const we=e=>{let{hide:t,user:n}=e;return t||!n?null:a.createElement(a.Fragment,null,a.createElement(f.Text,null,"by"),a.createElement(ke,null,n))},ke=e=>{let{color:t="text",...n}=e;return a.createElement(f.Text,(0,m.A)({color:t,strong:!0},n))},Ae=e=>{let{type:t,text:n=t,hollow:r}=e;return a.createElement(Ce.A,(0,m.A)({flavour:t.toLowerCase()},r&&{border:!1}),n)},Ie=(0,U.default)(f.Flex).attrs({gap:1,flexWrap:!0,alignItems:"center"}).withConfig({displayName:"components__Container",componentId:"sc-b5rk6g-0"})([""]);var Fe=n(84976);const Te={CLEAR:0,WARNING:1,CRITICAL:2,UNINITIALIZED:3,UNDEFINED:4},Se=e=>{let{chart:t,context:n,nodeId:r,nodeName:l,spaceSlug:o,roomSlug:i,alert:c}=e;const s=(0,y.Zp)(),d=(0,g.Zl)(r),u=(0,a.useCallback)((()=>{var e;null!==c&&void 0!==c&&c.id?s(d,{state:{alertId:c.id}}):s(d,{state:{contextToGo:null===n||void 0===n||null===(e=n.name)||void 0===e?void 0:e[0]}})}),[d,c]),m="/spaces/".concat(o,"/rooms/").concat(i,"/alerts/").concat(null===c||void 0===c?void 0:c.id),{current:p,name:h,previous:v}=c;if("ERROR"===p.status)return a.createElement(Ie,null,a.createElement(f.Text,null,"For the alert"),a.createElement(E.A,{Component:ke,as:Fe.N_,to:m},h),a.createElement(f.Text,null,"for"),a.createElement(E.A,{Component:ke,onClick:u},t.name),a.createElement(f.Text,null,"on"),a.createElement(E.A,{Component:ke,onClick:u},l),a.createElement(f.Text,null,"we couldn't calculate the current value"),a.createElement(T.A,{align:"bottom",content:"Please check your alert configuration"},a.createElement(f.Icon,{color:"nodeBadgeColor",size:"small",name:"information"})));if("REMOVED"===p.status)return a.createElement(Ie,null,a.createElement(f.Text,null,"Alert"),a.createElement(E.A,{Component:ke,as:Fe.N_,to:m},h),a.createElement(f.Text,null,"for"),a.createElement(E.A,{Component:ke,onClick:u},t.name),a.createElement(f.Text,null,"on"),a.createElement(E.A,{Component:ke,onClick:u},l),a.createElement(f.Text,null,"is no longer available, state can't be assessed"));const x=Te[p.status]===Te.CLEAR;return a.createElement(Ie,null,a.createElement(f.Text,null,"Alert"),a.createElement(E.A,{Component:ke,as:Fe.N_,to:m},h),a.createElement(f.Text,null,"for"),a.createElement(E.A,{Component:ke,onClick:u},t.name),a.createElement(f.Text,null,"on"),a.createElement(E.A,{Component:ke,onClick:u},l),x?a.createElement(f.Text,null,"recovered"):a.createElement(a.Fragment,null,a.createElement(f.Text,{strong:!0},Te[v.status]===Te.CRITICAL?"was demoted":Te[v.status]===Te.WARNING?"escalated":Te[p.status]===Te.UNDEFINED?"transitioned":"was raised"),a.createElement(f.Text,null,"to"),a.createElement(Ae,{type:p.status}),Te[p.status]===Te.UNDEFINED&&a.createElement(f.Text,null,"state")),a.createElement(f.Text,null,"with value"),a.createElement(Ae,{type:p.status,text:p.value_string,hollow:!0,padding:[0]}))},Ke=e=>{let{id:t,name:n}=e;const r=(0,h.bq)(),l=(0,be.wz)(t,"slug"),o="/spaces/".concat(r,"/rooms/").concat(l,"/home");return a.createElement(E.A,{Component:ke,as:Fe.N_,to:o},n)},Pe=e=>{let{rooms:t}=e;return t.map(((e,n)=>a.createElement(a.Fragment,{key:e.id},n>0&&(n{let{rooms:t}=e;if(!t.length)return null;const n=t.length>1?"rooms":"room";return a.createElement(a.Fragment,null,a.createElement(f.Text,null,"on ",n),a.createElement(Pe,{rooms:t}))},Le=e=>{let{contexts:t}=e;t.map(((e,n)=>a.createElement(a.Fragment,{key:e},n>0&&(n{let{contexts:t}=e;if(!t.length)return null;const n=t.length>1?"contexts":"context";return a.createElement(f.Text,null,"on ",n," ",a.createElement(Le,{contexts:t}))},Me={month:"2-digit",day:"2-digit",year:"numeric",hour:"numeric",minute:"numeric",long:!1,dateStyle:void 0},Oe=e=>{let{start:t,end:n}=e;const{localeDateString:r}=(0,J.$j)();if(!t||!n)return null;const l=r(new Date(t),Me),o=r(new Date(n),Me);return a.createElement(a.Fragment,null,a.createElement(f.Text,null,"(scheduled ",l," - ",o,")"))},Re={"silencing-rule-created":"created","silencing-rule-deleted":"deleted","silencing-rule-changed":"changed"},Be=e=>{let{rooms:t=[],contexts:n=[]}=e;return t.length||n.length?a.createElement(a.Fragment,null,!!t.length&&a.createElement(ze,{rooms:t}),!!t.length&&!!n.length&&a.createElement(f.Text,null,"and ",a.createElement(Ne,{contexts:n}))):null},De=e=>{var t;let{action:n,notification:r,user:l,room:o,context:i}=e;const c=((null===r||void 0===r||null===(t=r.silencing)||void 0===t?void 0:t.rule)||[])[0],s=null===l||void 0===l?void 0:l.name,d=(null===i||void 0===i?void 0:i.name)||[];return a.createElement(Ie,null,a.createElement(f.Text,null,"Silencing rule"),a.createElement(ke,null,c.name),a.createElement(Be,{rooms:o,contexts:d}),a.createElement(f.Text,null,"was ",Re[n]),a.createElement(we,{user:s}),a.createElement(Oe,c))};var _e=n(78969);const je=(e,t)=>{var n,a;return(null===(n=e.target)||void 0===n?void 0:n[t])||(null===(a=e.target)||void 0===a?void 0:a.id)||e[t]||e.id},We=e=>Array.isArray(e)?e[0].name||e[0].id:e.name||e.id,Ve=function(){let{event:e={},user:t={},token:n={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"space-claiming-token-created"==e.action?a.createElement(Ie,null,a.createElement(f.Text,null,"Claiming Token was created by user"),a.createElement(we,{hide:!t.target,user:t.name})):"space-claiming-token-revoked"==e.action?a.createElement(Ie,null,a.createElement(f.Text,null,"Claiming Token"),a.createElement(f.Text,{strong:!0},n.prefix),a.createElement(f.Text,null,"was revoked by user"),a.createElement(we,{hide:!t.target,user:t.name})):null},qe=e=>{let{statistics:t}=e;const{live:n,stale:r,removed:l,total:o}=(null===t||void 0===t?void 0:t.nodes)||{};return a.createElement(Ie,null,a.createElement(f.Text,null,"Space statistics. Nodes:"),a.createElement(f.Text,{color:_e.J4.live.statusTextColor},n," live"),a.createElement(f.Text,null,","),a.createElement(f.Text,{color:_e.J4.stale.statusTextColor},r," stale"),a.createElement(f.Text,null,","),a.createElement(f.Text,{color:_e.J4.offline.statusTextColor},l," removed"),a.createElement(f.Text,null,","),a.createElement(f.Text,{strong:!0},o," total"))};n(34504),n(78898);var He=n(24398);const Ge=e=>{let{stateColor:t,state:n}=e;return a.createElement(a.Fragment,null,a.createElement(f.Text,null,"became"),a.createElement(ke,{color:t},n))},Ue=e=>{let{stateColor:t,state:n}=e;return a.createElement(a.Fragment,null,a.createElement(f.Text,null,"was"),a.createElement(ke,{color:t},n))},Ze={"node-created":Ue,"node-state-live":Ge,"node-state-stale":Ge,"node-state-offline":Ge,"node-removed":Ue,"node-deleted":Ue,"node-restored":Ue,default:Ue},Xe=e=>{var t;let{action:n,hosts:r=[]}=e;const{id:l,name:o}=r[0],i=(0,y.Zp)(),c=(0,g.Zl)(l),s=(0,a.useCallback)((()=>i(c)),[c]),d=Ze[n],u=n.split("-").at(-1),m=null===(t=He.P[u])||void 0===t?void 0:t.statusTextColor;return a.createElement(Ie,null,a.createElement(f.Text,null,"Node"),a.createElement(E.A,{Component:ke,onClick:s},o),a.createElement(d,{stateColor:m,state:u}))},Ye=e=>{let{room:t}=e;const n=(0,be.XA)("untouchable");return a.createElement(a.Fragment,null,a.createElement(f.Text,null,"was added to",n?" room":""),a.createElement(ke,null,n?We(t):"this room"))},$e=e=>{let{room:t}=e;const n=(0,be.XA)("untouchable");return a.createElement(a.Fragment,null,a.createElement(f.Text,null,"was removed from",n?" room":""),a.createElement(ke,null,n?We(t):"this room"))},Je={"room-created":()=>a.createElement(f.Text,null,"was created"),"room-deleted":()=>a.createElement(f.Text,null,"was deleted"),"room-node-added":Ye,"room-node-removed":$e,"room-user-added":Ye,"room-user-removed":$e},Qe=e=>{var t;let{action:n,hosts:r=[],Netdata:l,user:o}=e;const i=Je[n],c=null===(t=r[0])||void 0===t?void 0:t.name;return a.createElement(Ie,null,a.createElement(f.Text,null,"Node"),a.createElement(ke,null,c),a.createElement(i,{room:l.room}),a.createElement(we,{user:null===o||void 0===o?void 0:o.name}))},et=e=>{let{action:t,Netdata:n,user:r}=e;const l=Je[t];return a.createElement(Ie,null,a.createElement(f.Text,null,"User"),a.createElement(ke,null,je(r,"name")),a.createElement(l,{room:n.room}),a.createElement(we,{hide:!r.target,user:r.name}))},tt=e=>{let{action:t,Netdata:n,user:r}=e;const l=Je[t];return a.createElement(Ie,null,a.createElement(f.Text,null,"Room"),a.createElement(ke,null,We(n.room)),a.createElement(l,null),a.createElement(we,{user:r.name}))},nt={"alert-node-transition":e=>{let{chart:t,hosts:n,alert:r,...l}=e;return n.map(((e,n)=>{let{id:o,name:i}=e;const c={...r,name:r.name[n],...r.current?{current:{...r.current,...r.current.status?{status:r.current.status[n]||r.current.status[0]}:{}}}:{}};return a.createElement(Se,(0,m.A)({key:o,chart:t,nodeId:o,nodeName:i,alert:c},l))}))},"node-created":Xe,"node-state-live":Xe,"node-state-stale":Xe,"node-state-offline":Xe,"node-removed":Xe,"node-deleted":Xe,"node-restored":Xe,"agent-connected":e=>{let{agentId:t}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"Agent with claim ID"),a.createElement(ke,null,t)," ",a.createElement(f.Text,null,"has connected to Netdata"))},"agent-connection-initialized":e=>{let{agentId:t,reason:n}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"Agent with claim ID"),a.createElement(ke,null,t),a.createElement(f.Text,null,"has initialized its connection to Netdata"))},"agent-disconnected":e=>{let{agentId:t,reason:n}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"Agent with claim ID"),a.createElement(ke,null,t),a.createElement(f.Text,null,"has disconnected from Netdata with reason: \u201c",n,"\u201d"))},"agent-authenticated":e=>{let{agentId:t}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"Agent with claim ID"),a.createElement(ke,null,t),a.createElement(f.Text,null,"has successfully authenticated"))},"agent-authentication-failed":e=>{let{agentId:t}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"Agent with claim ID"),a.createElement(ke,null,t),a.createElement(f.Text,null,"has failed to authenticate"))},"room-created":tt,"room-deleted":tt,"room-node-added":Qe,"room-node-removed":Qe,"room-user-added":et,"room-user-removed":et,"space-created":e=>{let{Netdata:t,user:n}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"Space"),a.createElement(ke,null,t.space.name||t.space.id),a.createElement(f.Text,null,"was created"),a.createElement(we,{user:n.name}))},"space-statistics":qe,"space-user-added":e=>{let{Netdata:t,user:n}=e;const{name:r}=(null===t||void 0===t?void 0:t.inviter)||{};return a.createElement(Ie,null,a.createElement(f.Text,null,"User"),a.createElement(ke,null,je(n,"name")),a.createElement(f.Text,null,"was added to this space"),r&&a.createElement(a.Fragment,null,a.createElement(f.Text,null,"by invite of"),a.createElement(ke,null,r)))},"space-user-changed":e=>{var t;let{user:n}=e;if(!(null===(t=n.changes)||void 0===t||!t.roles)&&1===Object.keys(n.changes).length){const e=n.changes.roles.length>1,t=n.changes.roles.join(", ");return a.createElement(Ie,null,a.createElement(f.Text,null,"User ",e?"roles":"role"," for"),a.createElement(ke,null,je(n,"name")),a.createElement(f.Text,null,e?"were":"was"," changed to"),a.createElement(ke,null,t),a.createElement(we,{hide:!n.target,user:n.name}))}return a.createElement(Ie,null,a.createElement(f.Text,null,"User"),a.createElement(ke,null,je(n,"name")),a.createElement(f.Text,null,"was modified"))},"space-user-invited":e=>{let{user:t}=e;return a.createElement(Ie,null,a.createElement(f.Text,null,"User"),a.createElement(ke,null,je(t,"email")),a.createElement(f.Text,null,"was invited to this space"),a.createElement(we,{user:t.name}))},"space-user-removed":e=>{let{user:t}=e;const{name:n}=t.target||{};return a.createElement(Ie,null,a.createElement(f.Text,null,"User"),a.createElement(ke,null,je(t,"name")),a.createElement(f.Text,null,"was removed from this space"),n&&a.createElement(we,{user:t.name}))},"space-user-uninvited":e=>{let{event:t,user:n}=e;return"space-invite-expired"===t.reason?a.createElement(Ie,null,a.createElement(f.Text,null,"The invite for"),a.createElement(ke,null,je(n,"email")),a.createElement(f.Text,null,"to this space has expired")):a.createElement(Ie,null,a.createElement(f.Text,null,"User"),a.createElement(ke,null,je(n,"email")),a.createElement(f.Text,null,"was uninvited from this space"),a.createElement(we,{hide:!n.target,user:n.name}))},"space-claiming-token-created":Ve,"space-claiming-token-revoked":Ve,"silencing-rule-created":De,"silencing-rule-deleted":De,"silencing-rule-changed":De},at=e=>{let{data:t}=e;const{action:n,roomId:r,space:l}=t.source,o=(0,h.ns)(l.id,"slug"),i=(0,be.wz)(r,"slug"),c=nt[n];return c?a.createElement(c,(0,m.A)({},t.source,{spaceSlug:o,roomSlug:i})):a.createElement(Ie,null,a.createElement(f.Text,null,"Event")," ",a.createElement(f.Text,{strong:!0},n)," ",a.createElement(f.Text,null,"emitted"))},rt={bar:xe,"bar-with-integer":xe,duration:xe,pill:Ee,number:ve,string:ve,feedTemplate:at,datetime:e=>{let{value:t,...n}=e;const r=new Date(t),{localeTimeString:l,localeDateString:o}=(0,J.$j)(),i=isNaN(r.valueOf())?"Missing date & time":"".concat(o(r,{long:!1})," ").concat(l(r,{secs:!0}));return a.createElement(ve,(0,m.A)({value:i},n))},value:ve},lt={bar:xe,pill:Ee,value:ve,richValue:ye,feedTemplate:at,rowOptions:"skip"},ot=e=>{let{visualization:t,type:n,value:r,data:l,...o}=e;const i=lt[t]||rt[n]||lt.value;return i===lt.rowOptions?null:a.createElement(i,(0,m.A)({value:r,type:n,rowOptions:null===l||void 0===l?void 0:l.rowOptions,data:l},o))},it={sum:"sum",min:"min",max:"max",extent:"extent",mean:"mean",median:"median",unique:"unique",uniqueCount:"uniqueCount",count:"count"};n(17333),n(8159),n(54520),n(37550);var ct=n(47444);const st={query:(e,t,n)=>{let{columnVisibility:a}=n;const r="string"===typeof t?t.toLowerCase():"";return Object.entries(e).some((e=>{let[t,n]=e;return!!a[t]&&(null!==n&&"undefined"!==typeof n&&(Array.isArray(n)?n.some((e=>String(e).toLowerCase().includes(r))):("object"===typeof n&&Object.keys(n).some((e=>String(n[e]).toLowerCase().includes(r))),String(n).toLowerCase().includes(r))))}))}},dt=e=>(t,n)=>!e.some((e=>{let[a,r]=e;return st[a]?!st[a](t,r,n):!(e=>(t,n,a)=>{var r,l;if(!a.columns[e]||"facet"===(null===(r=a.columns[e])||void 0===r?void 0:r.filter))return!0;if("range"===(null===(l=a.columns[e])||void 0===l?void 0:l.filter)&&null!==n&&void 0!==n&&n.length)return t[e]>=n[0]&&t[e]<=n[1];if(!Array.isArray(n)||!n.length)return!0;let o=t[e];return"number"===typeof o?(o=parseFloat(o),n.some((e=>parseFloat(e)===o))):n.includes(o)})(a)(t,r,n)})),ut=(0,ct.K0)({key:"fnDataFiltered",get:e=>{let{extraKey:t,roomId:n,omit:a,keepAll:r,fn:l}=e;return e=>{var c;let{get:s}=e;const{columnVisibility:d,data:u,columns:m,aggregations:f,requiredParams:p}=s((0,i.WB)({id:l}));if(f||!u)return u||[];const g=s((0,o.GA)({key:n,extraKey:t,merge:!1})),h=a?a.split(":::"):[],v=Object.keys(g).reduce(((e,t)=>(p.some((e=>e.id===t))||h.includes(t)||e.push([t,g[t]]),e)),[]);if(!v.length)return u;const y=dt(v),x=null===(c=s((0,o.GA)({key:n,extraKey:"".concat(l,"Settings"),flavour:"val"})))||void 0===c?void 0:c.sortColumn;return r?u.map((e=>y(e,{columnVisibility:d,columns:m,sortColumn:x})?e:{...e,hidden:!0})):u.filter((e=>y(e,{columnVisibility:d,columns:m,sortColumn:x})))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),mt=function(){let{extraKey:e="fn",omit:t,keepAll:n=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,i.Ak)({extraKey:e}),r=(0,be.ID)();return(0,ct.vc)(ut({extraKey:"".concat(a||e,"Filters"),fn:a,roomId:r,omit:t,keepAll:n}))};var ft=n(94944);const pt=(0,U.default)(f.Table).withConfig({displayName:"table__StyledTable",componentId:"sc-1n2s6gl-0"})(["*{font-family:monospace;letter-spacing:0.09px;}"]),gt=(0,a.memo)(pt,((e,t)=>(0,ce.Ay)(e,t,{keep:["columnVisibility","data","fnQuery","sortBy","virtualizeOptions"]})));let ht;const vt=(0,a.memo)((0,a.forwardRef)(((e,t)=>{let{"data-testid":n,paramsKey:r,refetch:l,onShowInfo:c}=e;const s=(0,i.Ol)(r),{columns:d,sortedColumns:u,sortColumn:m,sortDirection:p,columnVisibility:g,pinnedColumns:h,loadingMore:v,retentionWarning:y,groupByColumns:x,pagination:E,merged:b,latestDirection:C,hasDirection:w,tail:k,aggregations:A}=s,I=(0,a.useRef)();I.current=s;const[F,T]=(0,a.useState)(""),S=mt(r),K="feed"===r.extraKey,P=((e,t,n)=>{let{groupBy:r}=n;return(0,a.useMemo)((()=>(e||[]).reduce(((e,n)=>{const l=t[n];if(!l)return e;const{displayName:o,name:i,sortable:c,sticky:s,units:d,max:u,dummy:m,cellSize:p,valueOptions:g,summary:h,type:v,visualization:y,wrap:x=!1,...E}=l;return m?e:[...e,{...E,displayName:o,id:o,accessorFn:e=>e[n],cell:e=>{let{getValue:t,row:n,cell:l}=e;const o=l.getIsAggregated(),c=t(),s=o&&(it[h]===it.count||it[h]===it.uniqueCount||!it[h]);return a.createElement(ot,{description:i,data:n.original,maxValue:u,padding:n.depth>0?[0,0,0,2.5*n.depth]:[0],strong:o,value:s?"".concat(c,"x"):c,tooltipValue:s?"".concat(c," ").concat(1===c?"item":"items"," associated with ").concat(r," grouping"):c,valueOptions:s?{...g,transform:"none"}:g,type:v,visualization:y,wrap:x})},header:a.createElement(f.Flex,{column:!0},a.createElement(f.TextSmall,{strong:!0},o),d&&a.createElement(f.TextMicro,null,"(",d,")")),enableSorting:c,aggregationFn:it[h]||it.count,...p,meta:{...o!==i?{tooltip:i}:{}}}]}),[])),[e,t,r])})(u,d,{...K?{}:{groupBy:F}}),[z,L]=(0,o.r$)("colSizing",{defaultValue:{},flavour:"obj",...r}),[N,M]=(0,i.Be)({key:"sortColumn",flavour:"val",...r}),[O,R]=(0,i.Be)({key:"sortDirection",flavour:"val",...r}),[B,D]=(0,i.ZY)({key:"query",flavour:"val",...r}),_=(0,i.E)({key:"columnVisibility",...r}),j=(0,a.useMemo)((()=>N||m?[{id:N||m,desc:"descending"===(O||p)}]:[]),[m,p,N,O]),W=(0,a.useCallback)((e=>{const[t]=e,n=null!==t&&void 0!==t&&t.desc?p||"descending":"ascending";M((null===t||void 0===t?void 0:t.id)||m),R(n)}),[N,m,p]),V=(0,a.useMemo)((()=>({left:h})),[h]),q=(0,a.useRef)();q.current=v;const{pause:H}=(0,ft.A)(),G=(0,a.useCallback)((e=>{let{data:t}=e;return c({data:t.json||t,columns:d})}),[]),U=(0,a.useRef)(),Z=(0,a.useRef)(),X=(0,a.useRef)(),Y=(0,a.useRef)(0),$=(0,a.useRef)(0),J=(0,a.useRef)(b);(0,a.useLayoutEffect)((()=>{var e;b&&!k||null===(e=Z.current)||void 0===e||!e.scrollOffset||Z.current.scrollToOffset(0)}),[b,k]),(0,a.useLayoutEffect)((()=>{clearTimeout(ht),v||(ht=setTimeout((()=>{J.current=!1}),200))}),[v]),(0,a.useLayoutEffect)((()=>{if(!E||!w||k)return;if($.current!==S.length&&"forward"===C){var e;const n=Z.current.scrollOffset;let a=0,r=Z.current.getMeasurements().find(((e,t)=>0!==t&&(a+=e.size,a>n)));var t;if(!r)r=null===(t=Z.current.getMeasurements())||void 0===t?void 0:t[1];if(!r)return;X.current={...S[S.length-$.current+(r.index-1)],headerSize:(null===(e=Z.current.getMeasurements())||void 0===e||null===(e=e[0])||void 0===e?void 0:e.size)||0},b&&!k?Y.current=0:X.current=null}const n=()=>{if(X.current&&Y.current<5){var e,t;Y.current=Y.current+1,$.current=S.length;const a=null===(e=X.current)||void 0===e||null===(e=e[E.column])||void 0===e||null===(t=e.toString)||void 0===t?void 0:t.call(e);let r=Z.current.getMeasurements().find((e=>e.key.replace(/-\d+?/,"")===a));if(!r){const e=S.findIndex((e=>e[E.column]==a));r=Z.current.getMeasurements()[e+1]}return r?(Z.current.scrollToOffset(r.start-X.current.headerSize),void setTimeout(n)):(Y.current=5,void(X.current=null))}Y.current=5,X.current=null};n(),$.current=S.length}),[S]);const Q=(0,a.useCallback)((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"backward";k||q.current||I.current.hasDirection&&(J.current||("backward"!==e||I.current.hasNextPage||I.current.anchorBefore)&&("forward"!==e||I.current.hasPrevPage||I.current.anchorAfter)&&("forward"===e&&(J.current=!0),l({anchor:"backward"===e?I.current.anchorBefore:I.current.anchorAfter,merge:!0,direction:e,data_only:!0})))}),[k]),ee=(0,a.useCallback)((e=>{var t;return"undefined"!==typeof(null===(t=I.current.data[e])||void 0===t?void 0:t[null===E||void 0===E?void 0:E.column])?"".concat(I.current.data[e][null===E||void 0===E?void 0:E.column],"-").concat(e):e}),[]),te=(0,a.useCallback)((()=>I.current.hasNextPage),[]),ne=(0,a.useCallback)((()=>I.current.hasPrevPage),[]),ae=(0,a.useCallback)((e=>{e.scrollOffset>10&&H()}),[H]),re=(0,a.useMemo)((()=>({overscan:15,getHasNextPage:te,getHasPrevPage:ne,loading:v,loadMore:Q,warning:y,virtualRef:Z,getItemKey:ee,onVirtualChange:ae})),[S,v]),le=(0,i.dP)();return a.createElement(gt,{groupByColumns:x,onClickRow:G,columnPinning:V,columnVisibility:g,data:S,dataColumns:P,dataGa:"functions",enableColumnPinning:!(null===h||void 0===h||!h.length),enableColumnVisibility:!K,enableCustomSearch:!!A,enableResizing:!0,enableSorting:!K,globalFilter:K?null:B,onColumnVisibilityChange:_,onColumnSizingChange:L,columnSizing:z,onSearch:K?null:D,onGroupByChange:K?null:T,onSortingChange:K?null:W,sortBy:j,testPrefix:n,virtualizeOptions:re,ref:t,tableRef:U,onHoverCell:(0,a.useCallback)((function(){let{row:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e||le(null),le(e)}),[])})})),(()=>!0)),yt=vt;n(9391);var xt=n(2404),Et=n.n(xt),bt=n(92138),Ct=n(99090),wt=n(65624),kt=n(61531),At=(n(9920),n(3949),n(88055)),It=n.n(At),Ft=n(64454);const Tt=90,St=110,Kt=160,Pt=1e3,zt={minSize:Tt,maxSize:Pt},Lt=50,Nt={uniqueKey:{size:Tt,downLimit:Tt-Lt,upLimit:Tt+Lt},bar:{size:Tt,downLimit:Tt-Lt,upLimit:Tt+Lt},value:{size:St,downLimit:St-Lt,upLimit:St+Lt},feedTemplate:{size:Pt,downLimit:Pt-Lt,upLimit:Pt+Lt,minSize:230,maxSize:5e3,fullWidth:!0},pill:{size:St,downLimit:St-Lt,upLimit:St+Lt},timestamp:{size:Kt,downLimit:Kt-Lt,upLimit:Kt+Lt},datetime:{size:Kt,downLimit:Kt-Lt,upLimit:Kt+Lt}},Mt=(e,t)=>{e((e=>{var n,a,r;const{updateEvery:l,merge:o,reset:i,groupBy:c,items:s,direction:d,dataOnly:u,showIds:m=!1!==e.showIds,facetsDelta:f,histogramDelta:p,itemsDelta:g,aggregatedView:h,...v}=t;let y=i?t.columns:u?It()(e.columns):It()(o?(0,Ft.A)(t.columns,e.columns):t.columns),x=i?{}:{...e.sortedColumnsObj}||{};const E=v.hasHistory||e.hasHistory,b=u?e.pagination:t.pagination;let C=Object.keys(y).reduce(((t,n)=>{const a=y[n],{id:r,name:l,sticky:o,visible:c,index:s}=a;return a.displayName=m?r||n:l,t.columnVisibility[a.displayName]=!i&&e.loaded?!!t.columnVisibility[a.displayName]:c,!o||!i&&e.loaded||t.pinnedColumns.push(a.displayName),a.valueOptions=a.valueOptions||{},a.cellSize=(e=>{let{visualization:t,type:n,fullWidth:a=!1,uniqueKey:r}=e;return{...zt,fullWidth:a,...(r&&"timestamp"!==n?Nt.uniqueKey:Nt[n])||Nt[t]||{minSize:Tt,maxSize:Pt,size:St,downLimit:St-Lt,upLimit:St+Lt}}})(a),a.sortable=a.sortable&&!(null!==b&&void 0!==b&&b.enabled),"undefined"!==typeof s&&(x[x[s]!==n?a.displayName:s]=n),t}),{columnVisibility:i?{}:{...e.columnVisibility||{}},pinnedColumns:i?[]:[...e.pinnedColumns||[]]}),w=i?t.aggregations:o?It()(e.aggregations):t.aggregations||It()(e.aggregations);f&&f.forEach((e=>{const t=w.find((t=>t.id===e.id));t?e.options.forEach((e=>{if(isNaN(e.count))return;const n=t.options.find((t=>t.id===e.id));n?n.count=(n.count||0)+((null===e||void 0===e?void 0:e.count)||0):t.options.push(e)})):w.push(e)}));let k=i?t.histogram:o?It()(e.histogram):t.histogram||It()(e.histogram);if(p){var A;if(!i&&(null===(A=e.histogram)||void 0===A?void 0:A.id)!==(null===p||void 0===p?void 0:p.id))return;const t=k.chart.result.labels;if((0,ce.Ay)(t,p.chart.result.labels))k.chart.result.data=[...k.chart.result.data,...p.chart.result.data];else{const e=((e,t)=>{const n=t.reduce(((t,n,a)=>{const r=e.findIndex((e=>n===e));return-1===r||(t[r]=a),t}),{});return t=>e.reduce(((e,a,r)=>("undefined"===typeof n[r]?e.push([0,0,0]):e.push(t[n[r]]),e)),[])})(t,p.chart.result.labels);p.chart.result.data.forEach((t=>k.chart.result.data.push(e(t))))}}let I={};Object.keys(t.columns).forEach((e=>{I[t.columns[e].index]=e}));let F=t.data.map((e=>e.reduce(((e,t,n)=>{const a=I[n];return a?(e[a]=t,e):e}),{}))),T=i?F:o?"forward"===d?F.concat(e.data||[]):(e.data||[]).concat(F):F;v.tail&&T.slice(0,500);let S=null!==b&&void 0!==b&&b.enabled&&b.column&&Array.isArray(T)&&null!==(n=T[T.length-1])&&void 0!==n&&n[b.column]&&null!==(a=T[0])&&void 0!==a&&a[b.column]?{anchorBefore:T[T.length-1][b.column],anchorAfter:T[0][b.column],anchorUnits:b.units}:{};const K=t.defaultSortColumn||e.defaultSortColumn,P=(i?t.acceptedParams||[]:t.acceptedParams||e.acceptedParams).includes("direction");let z=0;h&&(z=T.reduce(((e,t)=>e+(t[h.column]||0)),0));const L={...e||kt.zb.table,...v,groupByColumns:i?c:c||e.groupByColumns,data:T,columns:y,updatedAt:(new Date).getTime(),updateEvery:l||e.updateEvery,sortedColumns:Object.values(x),sortColumn:null===(r=y[K])||void 0===r?void 0:r.displayName,sortDirection:K?y[K].sort:"descending",...C,...S,totalSize:v.totalSize||(null===s||void 0===s?void 0:s.matched)||(!u||"forward"===d||F.length||t.partial?(e.totalSize||0)+(g?g.matched:0):0),actualSize:z,...!!E&&{hasNextPage:!(u&&"forward"!==d&&!F.length&&!t.partial)&&(!s||0!==s.after)},...!!E&&P&&{hasPrevPage:!(u&&"forward"===d&&!F.length&&!t.partial)&&(!(!v.tail&&s)||0!==s.before)},offset:o?null:(null===s||void 0===s?void 0:s.before)||null,loading:!1,loaded:!0,showIds:m,merged:o,latestDirection:d,hasHistory:E,hasDirection:P,aggregations:w,histogram:k,sortedColumnsObj:x,filtersToRefresh:(v.requiredParams||[]).reduce(((e,t)=>t.uniqueView?{...e,[t.id]:!0}:e),{}),reset:i,aggregatedView:h};return x=null,k=null,w=null,S=null,C=null,y=null,I=null,F=null,T=null,L}))},Ot={table:Mt,log:Mt,default:(e,t)=>{const{data:n,type:a,updateEvery:r,...l}=t;e({...kt.zb.default,...l,data:n,updateEvery:r,type:a,loading:!1,loaded:!0})}},Rt={default:{fetch:wt.ph,isEnabled:e=>{let{nodeIds:t,fn:n,after:a}=e;return!(null===t||void 0===t||!t.length)&&!!n&&!!a}},feed:{fetch:wt.d$,isEnabled:e=>{let{roomId:t,fn:n}=e;return!!t&&!!n}}},Bt=e=>{const{after:t,before:n,highlight:r}=(0,o.rW)();return(0,a.useMemo)((()=>t>0?[()=>({after:t,before:n}),t,n,e||r.before]:[()=>{const e=Date.now();return{after:e+1e3*t,before:e}},t,n,e||r.before]),[t,n,null===r||void 0===r?void 0:r.before,e])};var Dt=n(18061);const _t={default:{fetch:wt.JJ,isEnabled:e=>{let{nodeIds:t,fn:n}=e;return!(null===t||void 0===t||!t.length)&&!!n}},feed:{fetch:()=>Promise.resolve({data:{type:"table"}}),isEnabled:()=>!0}},jt=(e,t,n)=>{const a=(0,h.vt)(),r=(0,g.yN)(e),[{loading:l}]=(0,A.f7)(),{fetch:o,isEnabled:c}=_t[t]||_t.default,[{infoLoaded:s},d]=(0,i.WH)(n),[u]=Bt(),{loaded:m,error:f}=(0,i.vx)(n.extraKey);return(0,Dt.A)((()=>({enabled:!s&&m&&!f&&!l&&c({nodeIds:e,fn:t}),fetch:()=>o({spaceId:a,cloudNodeIds:r,nodeIds:e,fn:t,after:u().after,before:u().before}),onFail:e=>{var t,n;null===(t=e)||void 0===t||null===(t=t.response)||void 0===t||!t.status||400!==e.response.status&&304!==e.response.status?(null!==(n=e)&&void 0!==n&&null!==(n=n.response)&&void 0!==n&&n.data&&(e=e.response.data),d({error:e})):d((e=>({...e,infoLoaded:!0})))},onSuccess:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return d((t=>({...kt.zb[e.type]||kt.zb.default,...t,hasHistory:e.hasHistory||!1,acceptedParams:e.acceptedParams||[],requiredParams:e.requiredParams||[],type:e.type,help:e.help,infoLoaded:!0})))}})),[s,m,t,l,!(null!==e&&void 0!==e&&e.length),null===e||void 0===e?void 0:e[0]]),f};var Wt=n(44731),Vt=n(51891),qt=n(3839),Ht=n(66118);const Gt=(0,ct.eU)({key:"chartjs",default:{navigation:"pan"}}),Ut=(0,ct.K0)({key:"feedChartState",get:e=>{let{key:t}=e;return e=>{let{get:n}=e;const a=n(Gt);return t?a[t]:a}},set:e=>{let{key:t}=e;return(e,n)=>{let{set:a}=e;a(Gt,(e=>t?{...e,[t]:n}:{...e,...n}))}}}),Zt=e=>(0,ct.vc)(Ut({key:e})),Xt=e=>(0,ct.lZ)(Ut({key:e}));var Yt=n(31225);n(77518);const $t=(0,U.default)(f.Button).attrs((e=>{let{active:t}=e;return{flavour:"borderless",iconColor:t?"textDescription":"border",iconSize:"small",padding:[.5],small:!0}})).withConfig({displayName:"styled__Button",componentId:"sc-8s0lqd-0"})(["&&{background-color:",";height:20px;width:20px;&:hover{background-color:",";.button-icon__color{fill:",";}}}"],(e=>{let{theme:t,active:n}=e;return n?(0,f.getColor)("borderSecondary")({theme:t}):"initial"}),(e=>{let{theme:t}=e;return(0,f.getColor)("borderSecondary")({theme:t})}),(e=>{let{theme:t}=e;return(0,f.getColor)("textDescription")({theme:t})})),Jt=(0,U.default)(f.Flex).attrs({padding:[.5],gap:1,round:!0,border:{side:"all",color:"borderSecondary"}}).withConfig({displayName:"styled__Container",componentId:"sc-8s0lqd-1"})(["position:absolute;top:18px;right:8px;background:",";&:hover{background:",";}"],(0,f.getRgbColor)("elementBackground",.5),(0,f.getColor)("elementBackground")),Qt=(0,a.forwardRef)(((e,t)=>{let{testIdPrefix:n,...r}=e;const[{after:l,before:i},c]=(0,o.N9)(),[s,d]=[Zt(u="navigation"),Xt(u)];var u;const f=(0,a.useCallback)((e=>{let t=l,n=i;if(l<0){const e=Date.now();t=e+1e3*l,n=e}const a=e*Math.round((n-t)/4);c({after:t+a,before:n-a})}),[l,i]),p=l>0&&Math.abs(i-l)<2e3||-1===l;return a.createElement(Jt,(0,m.A)({"data-testid":"chartToolbox","data-track":"chart-toolbox::hover-chart::".concat(n),"data-toolbox":"true",ref:t},r),a.createElement($t,{active:"pan"===s,"data-testid":"chartToolbox-pan","data-track":"chart-toolbox::pan-click::".concat(n),icon:"panTool",onClick:()=>d("pan"),title:"Pan"}),a.createElement($t,{active:"highlight"===s,"data-testid":"chartToolbox-highlight","data-track":"chart-toolbox::highlight-click::".concat(n),icon:"highlightArea",onClick:()=>d("highlight"),title:"Highlight"}),a.createElement($t,{active:"zoom"===s,"data-testid":"chartToolbox-zoom","data-track":"chart-toolbox::zoom-click::".concat(n),disabled:p,icon:"dragHorizontal",onClick:()=>{d("zoom")},title:"Select and zoom"}),a.createElement($t,{"data-testid":"chartToolbox-zoomIn","data-track":"chart-toolbox::zoom-in-click::".concat(n),disabled:p,icon:"zoomIn",onClick:()=>{f(1)},title:"Zoom in"}),a.createElement($t,{"data-testid":"chartToolbox-zoomOut","data-track":"chart-toolbox::zoom-out-click::".concat(n),icon:"zoomOut",onClick:()=>{f(-1)},title:"Zoom out"}),a.createElement($t,{"data-testid":"chartToolbox-zoomReset","data-track":"chart-toolbox::zoom-reset-click::".concat(n),disabled:-900===l&&0===i,icon:"zoomReset",onClick:()=>{c({after:-900,before:0})},title:"Zoom reset"}))})),en={after:null,before:null};Ht.t1.register(Vt.A,Ht.A6,Ht.E8,Ht.PP,Ht.s$,Ht.kc,Ht.UA,Ht.m_,qt.Ay);const tn=e=>{var t;let{paramsKey:n,testIdPrefix:r}=e;const l=(0,a.useRef)(),c=(0,a.useContext)(U.ThemeContext),[s,d]=(0,o.N9)(),[u,m]=(0,a.useState)([]),[p,g]=(0,a.useState)(en),[h,v]=(0,a.useState)(!1),[y,x]=(0,a.useState)(!1),[E,b]=(0,a.useState)([]),[C,w]=(0,a.useState)(null),[k,A]=(0,a.useState)("second"),[I,,F,T]=(0,S.A)(!1),{aggregations:K}=(0,i.Ol)(n),{navigation:P}=Zt(),{localeTimeString:z,localeDateString:L}=(0,J.$j)(),[N]=Bt(),M=N.before-N.after,O=(0,a.useMemo)((()=>{const e=Date.now();return{min:N.after-M,max:0===s.before?N.before:e{var e;if(null===K||void 0===K||null===(e=K.event_histogram)||void 0===e||null===(e=e.hits)||void 0===e||!e.buckets)return;const t=K.event_histogram.hits.buckets.reduce(((e,t)=>{let{key:n,doc_count:a}=t;return{data:[...e.data,a],labels:[...e.labels,n]}}),{data:[],labels:[]}),n=(0,se.Bp)(s.after,s.before)||{};m(t.data),b(t.labels),w(null),A(n.unit)}),[null===K||void 0===K||null===(t=K.event_histogram)||void 0===t||null===(t=t.hits)||void 0===t?void 0:t.buckets]);const B=(0,a.useMemo)((()=>({animation:!1,interaction:{axis:"x"},maintainAspectRatio:!1,plugins:{annotation:{annotations:{...p.after&&p.before?{annotation:{type:"box",backgroundColor:"rgba(128,128,128,0.3)",borderDash:[1,5,1,1],borderWidth:1,xMax:p.before,xMin:p.after,xScaleID:"x"}}:{}}},legend:{align:"start",display:!1,position:"bottom"},zoom:{limits:{x:O},pan:{enabled:"pan"===P&&!h,mode:"x",onPanStart:e=>{let{chart:t}=e;t.canvas.style.cursor="grabbing"},onPanComplete:e=>{let{chart:t}=e;t.canvas.style.cursor="default";const{min:n,max:a}=t.scales.x;w({min:Math.round(n),max:Math.round(a)}),d({after:Math.round(n),before:Math.round(a)}),t.update()},threshold:1},zoom:{drag:{enabled:"zoom"===P||h},mode:"x",onZoomStart:e=>{let{chart:t}=e;t.canvas.style.cursor="col-resize"},onZoomComplete:e=>{let{chart:t}=e;if("zoom"!==P&&!h)return;t.canvas.style.cursor="default";const{min:n,max:a}=t.scales.x;d({after:Math.round(n),before:Math.round(a)}),v(!1)}}}},responsive:!0,scales:{x:{type:"time",grid:{drawBorder:!0,drawOnChartArea:!1,drawTicks:!0,offset:!1},parsing:!1,ticks:{color:(0,f.getColor)("textLite")({theme:c}),font:{size:11},autoSkip:!0,maxTicksLimit:20,..."minute"===k&&M>=1e3*Yt.wD?{callback:e=>{const t=L(e,{month:"2-digit",day:"2-digit",year:"numeric",long:!1,dateStyle:void 0}).split("/").reverse().slice(1).join("-"),n=z(e,{secs:!1});return"".concat(t," ").concat(n)}}:{}},time:{displayFormats:{week:"yyyy-MM-dd",day:"MM-dd",hour:"MM-dd HH:mm",minute:"HH:mm",second:"HH:mm:ss"},tooltipFormat:"yyyy-MM-dd HH:mm:ss",unit:k||"second"},...C?{min:C.min,max:C.max}:{}},y:{beginAtZero:!0,ticks:{precision:0,color:(0,f.getColor)("textLite")({theme:c}),font:{size:11}}}}})),[p,M,h,P,C,w,k,O]);if((0,a.useEffect)((()=>{const e=e=>{"Shift"===e.key&&(e.preventDefault(),v(!0))};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[]),!u.length)return null;return a.createElement(f.Flex,{position:"relative",height:{min:50},onMouseEnter:F,onMouseLeave:T},I&&a.createElement(Qt,{testIdPrefix:r}),a.createElement(Wt.yP,{data:{datasets:R,labels:E},onMouseDown:e=>{if(e.preventDefault(),"highlight"!==P)return;x(!0);const t=e.nativeEvent.offsetX||e.nativeEvent.layerX,n=l.current;n.canvas.style.cursor="crosshair",g({after:Math.round(n.scales.x.getValueForPixel(t)),before:null})},onMouseMove:e=>{if(e.preventDefault(),"highlight"!==P||!y)return;const t=e.nativeEvent.offsetX||e.nativeEvent.layerX,n=l.current;g((e=>({...e,before:Math.round(n.scales.x.getValueForPixel(t))})))},onMouseUp:e=>{e.preventDefault(),x(!1);const t=e.nativeEvent.offsetX||e.nativeEvent.layerX,n=l.current;n.canvas.style.cursor="default";p.after===Math.round(n.scales.x.getValueForPixel(t))?g(en):g(p)},options:B,ref:l}))};var nn=n(80158);const an={none:!0,facet:!0},rn=(e,t)=>{const{loaded:n,loading:r,columns:l,sortedColumns:o}=(0,i.Ol)({extraKey:e}),c=(0,a.useRef)([]);return(0,a.useMemo)((()=>(!n||r||(c.current=(o||[]).reduce(((e,n)=>l[n]&&l[n].filter&&!an[l[n].filter]?[...e,t(n,l)]:e),[])),c.current)),[n,r])};n(74648),n(23215),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215);const ln={sum:e=>e.reduce(((e,t)=>e+("number"===typeof t?t:0)),0),min:e=>{let t;return e.forEach((e=>{null!=e&&(t>e||void 0===t&&e>=e)&&(t=e)})),t},max:e=>{let t;return e.forEach((e=>{null!=e&&(t=e)&&(t=e)})),t},extent:e=>{let t,n;return e.forEach((e=>{null!=e&&(void 0===t?e>=e&&(t=n=e):(t>e&&(t=e),n{let t=0,n=0;if(e.forEach((e=>{null!=e&&(e=+e)>=e&&(++t,n+=e)})),t)return n/t},median:e=>{if(!e.length)return;if(t=e,!Array.isArray(t)||!t.every((e=>"number"===typeof e)))return;var t;if(1===e.length)return e[0];const n=Math.floor(e.length/2),a=e.sort(((e,t)=>e-t));return e.length%2!==0?a[n]:(a[n-1]+a[n])/2},unique:e=>Array.from(new Set(e.map((e=>e))).values()),uniqueCount:e=>new Set(e.map((e=>e))).size,count:e=>e.length},on=e=>({label:e,value:e}),cn=(0,a.memo)((e=>{let{paramsKey:t,initData:n,initFilter:r}=e;const{charts:l,loaded:o,columns:c}=(0,i.Ol)(t),s=mt(t),d=(0,a.useContext)(U.ThemeContext),u=Object.keys(l).map(on),m=rn(t.extraKey,on),[p,g]=(0,a.useState)(n),[h,v]=(0,a.useState)(r),y=(0,i.Ak)(t);(0,a.useEffect)((()=>{g(n)}),[n]),(0,a.useEffect)((()=>{v(r)}),[r]);const x=(0,a.useMemo)((()=>{if(!l[p])return{datasets:[],labels:[]};const e=l[p].columns.reduce(((e,t)=>{var n;const a=((e,t,n)=>e.reduce(((e,a)=>(e[a[n]]||(e[a[n]]={label:a[n],data:[]}),e[a[n]].data.push(a[t]),e)),{}))(s,t,h),r=(null===(n=c[t])||void 0===n?void 0:n.summary)||"count",l=ln[r];return Object.keys(a).forEach((n=>{const r=l(a[n].data);e[a[n].label]={...e[a[n].label],[t]:r,label:a[n].label,sortByValue:e[a[n].label]&&e[a[n].label].sortByValue>r?e[a[n].label].sortByValue:r}})),e}),{}),t=Object.values(e).sort(((e,t)=>t.sortByValue-e.sortByValue)).slice(0,15).map((e=>{let{sortByValue:t,...n}=e;return n}));return{datasets:l[p].columns.map(((e,n)=>({backgroundColor:Yt.b4[n],borderWidth:0,data:t.map((t=>t[e])),label:e,maxBarThickness:50,minBarLength:0}))),labels:t.map((e=>{let{label:t}=e;return t}))}}),[y,l,p,h,s]),E={animation:!1,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{boxWidth:4,boxHeight:20,title:{color:(0,f.getColor)("textLite")({theme:d})}}}},responsive:!0,scales:{x:{stacked:!0,grid:{color:(0,f.getColor)("borderSecondary")({theme:d})},afterSetDimensions:e=>{e.maxHeight=50},ticks:{callback:(e,t)=>{let n=x.labels[t];if(!n)return;let a=0;for(;(null===(r=n)||void 0===r?void 0:r.length)>20;){var r;n=(0,nn.P3)(n,a),a+=1}return n}}},y:{stacked:!0,grid:{color:(0,f.getColor)("borderSecondary")({theme:d})},afterSetDimensions:e=>{e.maxWidth=50}}}},[b,C]=(0,I.useHovered)({},[o]),w=(0,F.A)();return(0,a.useEffect)((()=>{w(C)}),[C]),a.createElement(f.Flex,{column:!0,"data-testid":"functionsCharts",gap:3,width:"50%",background:"mainChartBg",border:{side:"all",color:"mainChartBorder"},padding:[4],round:.5},a.createElement(f.Flex,{alignItems:"center","data-testid":"functionsChart".concat(p,"-selects"),gap:2},a.createElement(f.Select,{"data-ga":"functions-chart-".concat(p,"::select-data::functions-view"),"data-testid":"functionsChart".concat(p,"-dataSelect"),isLoading:!o,onChange:e=>{let{value:t}=e;return g(t)},options:u,styles:{size:"tiny",minWidth:120},value:{label:p,value:p}}),a.createElement(f.Text,{"data-testid":"functionsChart".concat(p,"-perLabel"),color:"textLite"},"per"),a.createElement(f.Select,{"data-ga":"functions-chart-".concat(h,"::select-filter::functions-view"),"data-testid":"functionsChart".concat(h,"-filterSelect"),isLoading:!o,onChange:e=>{let{value:t}=e;return v(t)},options:m,styles:{size:"tiny",minWidth:120},value:{label:h,value:h}})),a.createElement(f.Flex,{position:"relative",height:{min:60},width:{min:"100%"},ref:b},a.createElement(Wt.yP,{data:x,options:E})))})),sn=cn;var dn=n(83465),un=n(75233),mn=n(19018),fn=n(5668);const pn={dark:{publicColor:"#FF9700",privateColor:"#0075A2",serverColor:"#00a44a",clientColor:"#DB162F",otherColor:"#3E4551",appFontColor:"#AEBBBB",appFontFamily:"monospace",appFontSize:"12px",appFontWeight:"regular",borderFontColor:"#EDF0F0",borderFontFamily:"monospace",borderFontSize:"14px",borderFontWeight:"bold"},light:{publicColor:"#BFA142",privateColor:"#197EA8",serverColor:"#339979",clientColor:"#CD6364",otherColor:"#AFB5BA",appFontColor:"#526161",appFontFamily:"monospace",appFontSize:"12px",appFontWeight:"regular",borderFontColor:"#5D7070",borderFontFamily:"monospace",borderFontSize:"14px",borderFontWeight:"bold"}},gn=(0,a.memo)((0,a.forwardRef)(((e,t)=>{let{data:n,width:r,height:l,processing:o}=e;const i=(0,a.useRef)({}),c=(0,fn.xd)("theme"),s=(0,bt.A)(n),d=(0,bt.A)(r),u=(0,bt.A)(l),m=(0,bt.A)(o),p=(0,a.useRef)({}),g=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=!e&&(0,ce.Ay)(n,s);p.current=t?p.current:n.reduce(((e,t)=>(e[t.Process]||(e[t.Process]={listen:0,inbound:0,outbound:0,local:0,private:0,public:0,total:0,name:t.Process}),e[t.Process].total+=t.Count,"listen"===t.Direction?e[t.Process].listen+=t.Count:"local"===t.Direction?e[t.Process].local+=t.Count:"inbound"===t.Direction?e[t.Process].inbound+=t.Count:"outbound"===t.Direction&&(e[t.Process].outbound+=t.Count),"public"===t.RemoteAddressSpace?e[t.Process].public+=t.Count:"private"===t.RemoteAddressSpace&&(e[t.Process].private+=t.Count),e)),{});function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(7!==e.length||"#"!==e[0])throw new Error("Invalid hex color format");const n=parseInt(e.slice(1,3),16),a=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return"rgba(".concat(n,", ").concat(a,", ").concat(r,", ").concat(t,")")}function o(e,t,n,a,r){const l=t/2,o=n/2;!function(e){e.selectAll(".app").each((function(e){e&&(i.current[e.name]={x:e.x,y:e.y})}))}(e);const c=mn.scaleOrdinal().domain(["public","private","listenInbound","outbound","others"]).range([r.publicColor,r.privateColor,r.serverColor,r.clientColor,r.otherColor]),s=mn.pie().value((e=>e.value)),d=mn.arc(),g=e.selectAll(".app").data(Object.values(p.current),(e=>e.name));g.exit().transition().style("opacity",0).remove();const h=g.enter().append("g").attr("class","app").attr("transform",(e=>{const t=i.current[e.name];return"translate(".concat((null===t||void 0===t?void 0:t.x)||l,", ").concat((null===t||void 0===t?void 0:t.x)||o,")")}));h.each((function(e){const t=mn.select(this),n=s(e.d3.pie),a=e.d3.size;t.selectAll("path").data(n).enter().append("path").transition().attr("fill",((e,t)=>c(t))),t.append("text").text((e=>e.name)).attr("text-anchor","middle").attr("y",a+10).style("font-family",r.appFontFamily).style("font-size",r.appFontSize).style("font-weight",r.appFontWeight).style("fill",r.appFontColor)}));const v=h.merge(g);return v.each((function(e){const t=mn.select(this),n=i.current[e.name]||function(e){return e.d3.isListener?{x:e.d3.x,y:e.d3.y}:{x:l,y:o}}(e);e.x=n.x,e.y=n.y,t.selectAll("path").data(s(e.d3.pie)).transition().attr("d",d.innerRadius(0).outerRadius(e.d3.size)),t.select("text").transition().attr("y",e.d3.size+10)})),v.call(mn.drag().on("start",u).on("drag",m).on("end",f)),v}let d;function u(e,t){e.active||d.alphaTarget(1).restart(),t.fx=t.x,t.fy=t.y}function m(e,t){t.fx=e.x,t.fy=e.y}function f(e,t){e.active||d.alphaTarget(0),t.fx=null,t.fy=null}!function(n,i){let c=mn.select("#d3-canvas").select("svg");((e,n,a)=>{if(t)return;const r=e/2-a,l=n/2-a,o=Math.min(2*r/3-a,2*l/3-a,Math.max(5,Math.min(e,n)/Object.keys(p.current).length)+13),i=Object.values(p.current),c={total:mn.max(i,(e=>e.total)),local:mn.max(i,(e=>e.local)),listen:mn.max(i,(e=>e.listen)),private:mn.max(i,(e=>e.private)),public:mn.max(i,(e=>e.public)),inbound:mn.max(i,(e=>e.inbound)),outbound:mn.max(i,(e=>e.outbound))},s=mn.scaleLog().domain([1,c.total]).range([13,o]).clamp(!0);let d=0,u=0,m=0,f=n-a;i.forEach((t=>{const o=mn.scaleLog().domain([1,t.total+1]).range([0,r-a]),i=mn.scaleLog().domain([1,t.total+1]).range([0,r-a]),g=mn.scaleLog().domain([1,t.total+1]).range([0,l-a]),h=mn.scaleLog().domain([1,t.total+1]).range([0,l-a]);p.current[t.name].forces={total:t.total/c.total,local:t.local/c.local,listen:t.listen/c.listen,private:t.private/c.private,public:t.public/c.public,inbound:t.inbound/c.inbound,outbound:t.outbound/c.outbound},p.current[t.name].pos={right:o(t.public+1),left:i(t.private+1),top:g(t.outbound+1),bottom:h((t.listen+t.inbound)/2+1)};const v=t.total-(t.public+t.private+t.listen+t.inbound+t.outbound);let y=a+r+p.current[t.name].pos.right-p.current[t.name].pos.left,x=a+l+p.current[t.name].pos.bottom-p.current[t.name].pos.top,E=s(t.total);t.listen===t.total&&(E=10,m===u&&50*d>2*e/3&&(d=0,m=0,u=0,f-=80),d?m>=u?(u++,y=e/2+50*u,x=f-E-(u%2===0?0:40)):(m++,y=e/2-50*m,x=f-E-(m%2===0?0:40)):(y=e/2,x=f-E),d++),p.current[t.name].d3={isListener:t.listen===t.total,x:y,y:x,size:E,pie:[{value:t.public},{value:t.private},{value:t.listen+t.inbound},{value:t.outbound},{value:v>0?v:0}]},p.current[t.name].d3.x-p.current[t.name].d3.size/2e&&(p.current[t.name].d3.x=e-2*p.current[t.name].d3.size),p.current[t.name].d3.y-p.current[t.name].d3.size/2n&&(p.current[t.name].d3.y=n-2*p.current[t.name].d3.size)}))})(r,l,n),(c.empty()||e)&&(c=c.empty()?mn.select("#d3-canvas").append("svg").attr("width",r).attr("height",l):c.attr("width",r).attr("height",l),function(e,t,n,r,l){mn.select("#d3-canvas").selectAll("svg > *").remove();const o=n/2,i=e.append("defs").append("linearGradient").attr("id","clientsGradient").attr("x1","0%").attr("y1","0%").attr("x2","0%").attr("y2","100%");i.append("stop").attr("offset","0%").style("stop-color",a(l.clientColor,1)),i.append("stop").attr("offset","100%").style("stop-color",a(l.clientColor,0));const c=e.append("g").attr("class","topRect");c.append("rect").attr("x",0).attr("y",0).attr("width","100%").attr("height",r/2).style("fill","url(#clientsGradient)"),c.append("text").text("Clients").attr("x","50%").attr("y",12).attr("text-anchor","middle").style("font-family",l.borderFontFamily).style("font-size",l.borderFontSize).style("font-weight",l.borderFontWeight).style("fill",l.borderFontColor);const s=e.append("defs").append("linearGradient").attr("id","serversGradient").attr("x1","0%").attr("y1","100%").attr("x2","0%").attr("y2","0%");s.append("stop").attr("offset","0%").style("stop-color",a(l.serverColor,1)),s.append("stop").attr("offset","100%").style("stop-color",a(l.serverColor,0));const d=e.append("g").attr("class","bottomRect");d.append("rect").attr("x",0).attr("y","100%").attr("width","100%").attr("height",r/2).attr("transform","translate(0, -".concat(r/2,")")).style("fill","url(#serversGradient)"),d.append("text").text("Servers").attr("x","50%").attr("y","100%").attr("text-anchor","middle").attr("transform","translate(0, -4)").style("font-family",l.borderFontFamily).style("font-size",l.borderFontSize).style("font-weight",l.borderFontWeight).style("fill",l.borderFontColor);const u=e.append("defs").append("linearGradient").attr("id","publicGradient").attr("x1","100%").attr("y1","0%").attr("x2","0%").attr("y2","0%");u.append("stop").attr("offset","0%").style("stop-color",a(l.publicColor,1)),u.append("stop").attr("offset","100%").style("stop-color",a(l.publicColor,0));const m=e.append("g").attr("class","rightRect");m.append("rect").attr("x","100%").attr("y",0).attr("transform","translate(-".concat(r/2,", 0)")).attr("width",r/2).attr("height","100%").style("fill","url(#publicGradient)"),m.append("text").text("Public").attr("x","100%").attr("y","50%").attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform","rotate(90, ".concat(t-r/4,", ").concat(o,")")).style("font-family",l.borderFontFamily).style("font-size",l.borderFontSize).style("font-weight",l.borderFontWeight).style("fill",l.borderFontColor);const f=e.append("defs").append("linearGradient").attr("id","privateGradient").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");f.append("stop").attr("offset","0%").style("stop-color",a(l.privateColor,1)),f.append("stop").attr("offset","100%").style("stop-color",a(l.privateColor,0));const p=e.append("g").attr("class","leftRect");p.append("rect").attr("x",0).attr("y",0).attr("width",r/2).attr("height","100%").style("fill","url(#privateGradient)"),p.append("text").text("Private").attr("x",r/2).attr("y","50%").attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform","rotate(-90, ".concat(r/2-10,", ").concat(o,")")).style("font-family",l.borderFontFamily).style("font-size",l.borderFontSize).style("font-weight",l.borderFontWeight).style("fill",l.borderFontColor)}(c,r,l,n,i));const s=o(c,r,l,0,i);d=mn.forceSimulation(Object.values(p.current)).force("x",mn.forceX((e=>e.d3.x)).strength((e=>e.d3.isListener?.2:.1))).force("y",mn.forceY((e=>e.d3.y)).strength((e=>e.d3.isListener?.2:.1))).force("collision",mn.forceCollide((e=>1.1*e.d3.size+15)).strength(1)).on("tick",(()=>{s.each((e=>{e.x>r-n?e.x=r-n:e.xl-n?e.y=l-n:e.y"translate(".concat(e.x,", ").concat(e.y,")")))}))}(40,pn[c]||pn.dark)};return(0,a.useLayoutEffect)((()=>{o||r&&l&&g(d!==r||u!==l||m!==o)}),[n,r,l,c,o]),a.createElement(f.Flex,{id:"d3-canvas",ref:t,width:"100%",height:"100%",flex:!0,round:!0,overflow:"hidden"})}))),hn={"network-viewer":gn},vn=(0,a.forwardRef)(((e,t)=>{let{id:n,resizeHandle:r,style:l,paramsKey:o,containerWidth:i,resizing:c,...s}=e;const d=mt(o),p=hn[n],[g,h]=(0,I.useHovered)({},[]),v=(0,F.A)();(0,a.useEffect)((()=>{v(h)}),[h]);const[y,{width:x,height:E}]=(0,u.A)();return a.createElement(f.Flex,{ref:(0,f.mergeRefs)(t,y),position:"relative",style:l},a.createElement(p,(0,m.A)({data:d,key:n,id:n,role:"graphics-object","aria-roledescription":"chart",ref:g,containerWidth:i,width:x,height:E,processing:c},s)),r)})),yn=(0,a.memo)((e=>{var t;let{paramsKey:n,customCharts:r,containerWidth:l}=e;const o=Object.values(r).filter((e=>!!hn[e.type])),i=null===(t=o[0])||void 0===t?void 0:t.type,[c,s]=(0,a.useState)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return[(0,dn.bP)(e,{left:0,top:0,width:12,height:9,id:e,...t,chartId:e,minWidth:12,maxWidth:12,minHeight:4,static:!1,dashboardable:!0})]}(i,{paramsKey:n,containerWidth:l}));return o.length?a.createElement(f.Flex,{column:!0,"data-testid":"functionsCharts",gap:3,width:"100%",background:"mainChartBg",round:.5},a.createElement(un.A,{rootId:n.extraKey,containerId:n.extraKey,onDragEnd:(e,t)=>{(0,dn.Q)(t),s(e)},items:c,containerWidth:l-40,Item:vn,rearrangeable:!1})):"No chart found"}));var xn=n(36196),En=n(28973),bn=n(13752),Cn=n(92815),wn=n(72582),kn=n(80925),An=n(22332),In=n(72982),Fn=n(6504);const Tn=e=>{let{fn:t,histograms:n,selectedId:r,disabled:l}=e;const i=(0,An.useChart)(),c=(0,be.ID)(),s=(0,a.useMemo)((()=>n.map((e=>{let{id:t,name:n}=e;return{value:t,label:n,"data-track":i.track("select-histogram-".concat(n))}}))),[n]),[d,u]=(0,o.N9)("histogram",{defaultValue:[r],key:c,extraKey:"".concat(t,"Filters"),flavour:"val"}),m=d[0];return a.createElement(In.A,{value:m,items:s,dropProps:{align:{top:"bottom",right:"right"},"data-toolbox":!0},onChange:e=>u([e]),"data-track":i.track("selectHistogram"),dropdownProps:{width:"150px"}},a.createElement(Fn.Button,{disabled:l},"Source"))},Sn=(0,a.memo)(Tn),Kn=e=>t=>"histogram::".concat(e.getAttribute("id"),"::").concat(t),Pn={width:"108px",height:"77px"},zn=e=>{let{nodeId:t,fn:n,paramsKey:r}=e;const{availableHistograms:l,histogram:o,help:c,pagination:s,data:u}=(0,i.Ol)(r),m=(0,i.nm)(),p=(0,kn.e)(),g=(0,a.useRef)();g.current=()=>Promise.resolve(null===o||void 0===o?void 0:o.chart);const[h,v]=(0,a.useMemo)((()=>{const e="".concat(t,"-").concat(n),a=p.makeChart({attributes:{id:e,info:c},getChart:()=>g.current(),makeTrack:Kn});return p.getRoot().appendChild(a),[a,e]}),[t,n]);(0,a.useEffect)((()=>h.trigger("fetch")),[o]);const[y,x]=(0,i.x9)();return(0,a.useEffect)((()=>{if(h)return(0,En.unregister)(h.on("highlightClick",(e=>x(e+1e3*o.chart.view.update_every))),h.on("highlightEnd",(()=>x(null))))}),[h,o]),(0,a.useEffect)((()=>{var e;return!!l&&h.updateAttributes({toolboxElements:[e=>{let{disabled:t}=e;return a.createElement(Sn,{histograms:l,fn:n,selectedId:o.id,disabled:t})},wn.default,bn.default,Cn.default],title:null===o||void 0===o||null===(e=o.chart)||void 0===e||null===(e=e.view)||void 0===e?void 0:e.title})}),[l]),(0,a.useEffect)((()=>{if(!m||!h||!s)return;const e=u[m],t=Math.floor((null===e||void 0===e?void 0:e[null===s||void 0===s?void 0:s.column])/1e6);t&&!isNaN(t)&&h.updateAttribute("hoverX",[1e3*Math.floor(t-t%o.chart.view.update_every),null])}),[u,o,m]),(0,a.useEffect)((()=>{y&&h&&s&&h.updateAttribute("clickX",[y,null])}),[y]),(0,a.useEffect)((()=>()=>h&&h.destroy()),[h]),a.createElement(f.Flex,{flex:!1,width:"100%",height:75},h?a.createElement(xn.A,{"data-chartid":v,chart:h,overflow:"hidden",hasFilters:!1}):a.createElement(d.A,{iconProps:Pn,title:"Loading chart..."}))},Ln={extraKey:"fn"},Nn=(0,a.memo)((e=>{let{margin:t,defaultCharts:n,hasCustom:r,...l}=e;const[o,i]=(0,S.A)(!r);return null!==n&&void 0!==n&&n.length?a.createElement(f.Flex,{column:!0},a.createElement(f.Flex,{alignItems:"center",justifyContent:"end",gap:1,onClick:i,cursor:"pointer"},a.createElement(f.TextMicro,{color:"textLite"},o?"Collapse":"Expand"," charts"),a.createElement(f.Icon,{name:"chevron_down",color:"textLite",rotate:o?0:3})),a.createElement(f.Collapsible,{open:o},a.createElement(f.Flex,{gap:4,margin:t},n.map(((e,t)=>{let[n,r]=e;return a.createElement(sn,(0,m.A)({key:t,initData:n,initFilter:r},l))}))))):null})),Mn=(0,a.memo)((e=>{let{margin:t,hasHistogram:n=!1,...r}=e;const[l,o]=(0,S.A)(!0);return n?a.createElement(f.Flex,{column:!0},a.createElement(f.Flex,{alignItems:"center",justifyContent:"end",gap:1,onClick:o,cursor:"pointer"},a.createElement(f.TextMicro,{color:"textLite"},l?"Collapse":"Expand"," histogram"),a.createElement(f.Icon,{name:"chevron_down",color:"textLite",rotate:l?0:3})),a.createElement(f.Collapsible,{open:l},a.createElement(f.Flex,{gap:4,margin:t},a.createElement(zn,r)))):null})),On=(0,a.memo)((e=>{let{margin:t,...n}=e;const[r,l]=(0,S.A)(!0);return n.customCharts?a.createElement(f.Flex,{column:!0},a.createElement(f.Flex,{alignItems:"center",justifyContent:"end",gap:1,onClick:l,cursor:"pointer"},a.createElement(f.TextMicro,{color:"textLite"},r?"Collapse":"Expand"," chart"),a.createElement(f.Icon,{name:"chevron_down",color:"textLite",rotate:r?0:3})),a.createElement(f.Collapsible,{open:r},a.createElement(f.Flex,{gap:4,margin:t},a.createElement(yn,n)))):null})),Rn={fn:{Chart:Nn,CustomChart:On,loadingMessage:"Loading function...",item:"functions"},logs:{Chart:Mn,CustomChart:On,loadingMessage:"Loading logs...",item:"logs",missingMessage:a.createElement(a.Fragment,null,"In this room, no node has logs collection configured."," ",a.createElement("a",{href:"https://learn.netdata.cloud/docs/working-with-logs/"},"Learn about monitoring logs with Netdata"),".")},feed:{Chart:tn,CustomChart:On,loadingMessage:"Loading events...",item:"events"}},Bn={table:yt},Dn=(0,a.memo)((e=>{let{paramsKey:t=Ln,testIdPrefix:n="functions",availableFns:r,availableFnsLoaded:l,hasError:c,containerWidth:s,...u}=e;const{Chart:v,loadingMessage:y}=Rn[t.extraKey]||Rn.fn,[x,E]=(0,i._H)(t),C=(0,p.w7)({...t,merge:!1,emptyIfAll:"feed"===t.extraKey}),{infoLoaded:w,loaded:k,data:T,error:S,type:K,retentionWarning:P,defaultCharts:z,histogram:L,missingRequired:N,requiredParams:M,customCharts:O}=(0,i.Ol)(t),R=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const[t]=e,n=(0,g.xY)(t,"name");return 0===e.length?"on your nodes":1===e.length&&n?"on ".concat(n):"on your selected node"}(C);(0,a.useEffect)((()=>{var e;null!==x&&void 0!==x&&x.length||null===r||void 0===r||null===(e=r[0])||void 0===e||!e.name||c||E([r.reduce(((e,t)=>"undefined"===typeof e.priority||e.priority"processes"===e.name))||r[0]).name])}),[l,x]);const[B,D]=(0,I.useHovered)({},[k]),_=(0,F.A)();(0,a.useEffect)((()=>{_(D)}),[D]);const j=jt(C,x[0],t),[W,V]=((e,t,n)=>{const r=(0,h.vt)(),l=(0,be.QW)(),c=(0,ee.mQ)(),s=(0,o.l6)("pollingInterval",{flavour:"int",...n}),d=(0,o.l6)("slice",{defaultValue:!0,flavour:"bool",...n}),[u,m]=(0,i.WH)(n),[f,p]=(0,i.x9)(),v=(0,a.useRef)();v.current=u;const y=e=>{let{skip:t,data:n={}}=e;!t&&n.data?((Ot[n.type]||Ot.default)(m,n),p((e=>null!==e?null:e))):m((e=>({...e,tail:n.tail||!1,loading:!1})))},{fetch:x,isEnabled:E}=Rt[t]||Rt.default,[b,C,w,k]=Bt(f),I=(0,bt.A)(k),F=(0,a.useRef)();F.current=b;const T=(0,a.useRef)();T.current=u.lastModified;const S=(0,a.useRef)();S.current=u.anchorAfter;const K=(0,be.ID)(),P=(0,o.rW)(null,{key:K,extraKey:"".concat(t||n.extraKey,"Filters")}),z=(0,bt.A)(P,!0),L=(0,g.yN)(e),[{loading:N}]=(0,A.f7)();(0,a.useEffect)((()=>{"feed"!==t&&(T.current=null,S.current=null,m({...kt.zb[u.type]||kt.zb.default,type:u.type}))}),[null===e||void 0===e?void 0:e[0],t]);const M=P[Object.keys(P).find((e=>u.filtersToRefresh[e]&&!(0,ce.Ay)(null===z||void 0===z?void 0:z[e],P[e])))],O=(0,a.useRef)();O.current=!1,(0,a.useEffect)((()=>{"feed"!==t&&(O.current=!0)}),[!!u.requiredParams.length&&M]),(0,a.useEffect)((()=>{z&&!Et()(z,P)&&u.loaded&&(T.current=null,S.current=null,m((e=>({...e,lastModified:null,anchorAfter:null,anchorBefore:null,offset:0}))))}),[!!u.aggregations&&P]),(0,a.useEffect)((()=>{u.loaded&&(T.current=null,S.current=null,m((e=>({...e,lastModified:null,anchorAfter:null,anchorBefore:null,offset:0}))))}),[C,d]);const R=(0,a.useRef)(),B=(0,a.useRef)();B.current=function(){let{checkPeriod:n,...a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=F.current();return m((e=>({...e,tail:!!a.tail,loading:!0,requestedPeriod:o}))),n&&v.current.tail&&v.current.requestedPeriod.after{var t,n;const{merge:a,direction:r,dataOnly:l,tail:o}=e||{};null===(t=e)||void 0===t||null===(t=t.response)||void 0===t||!t.status||400!==e.response.status&&304!==e.response.status?(null!==(n=e)&&void 0!==n&&null!==(n=n.response)&&void 0!==n&&n.data&&(e=e.response.data),m((t=>({...t,error:e,loaded:!0,loading:!1}))),p((e=>null!==e?null:e))):m((t=>({...t,loaded:!0,loading:!1,...!!e&&{merge:a,direction:r,dataOnly:l,tail:o}})))},_=(0,Ct.A)((()=>({enabled:!u.missingRequired&&u.infoLoaded&&!N&&E({nodeIds:e,fn:t,roomId:K,after:C}),fetch:()=>B.current(!c&&C<0?{if_modified_since:T.current,...T.current&&{direction:"forward",merge:u.hasHistory,tail:!0,delta:!0,data_only:!0,anchor:S.current},reset:O.current}:!c&&((e,t)=>{let{after:n,before:a}=e;return tn})(F.current(),k)?{anchor:1e3*k,data_only:!!T.current,reset:O.current}:{direction:"backward",data_only:!!T.current,checkPeriod:!0,reset:O.current}),onFail:D,onPollingFail:D,onReceive:y,onBlurMode:()=>v.current.loading&&m((e=>({...e,loading:!1}))),polling:!c&&C<0,pollingOptions:{pollingInterval:1e3*(s||u.updateEvery),shouldPause:!0},force:!0,skip:!!I&&!k})),[c,u.infoLoaded,u.missingRequired,K,null===e||void 0===e?void 0:e.length,null===e||void 0===e?void 0:e[0],t,s,(!!u.aggregations||!!u.requiredParams.length)&&!!z&&P,C,w,N,k,d]);return[(0,a.useCallback)((e=>{if(v.current.loadingMore)return;m((e=>({...e,loadingMore:!0})));const t=B.current(e);return t.then(y).catch(D).finally((()=>m((e=>({...e,loadingMore:!1}))))),t}),[m]),(0,a.useCallback)((()=>{var e,t,n,a,r;null===_||void 0===_||null===(e=_.clearRef)||void 0===e||null===(e=e.current)||void 0===e||null===(e=e.promise)||void 0===e||null===(t=e.cancel)||void 0===t||t.call(e),clearTimeout(null===_||void 0===_||null===(n=_.clearRef)||void 0===n||null===(n=n.current)||void 0===n?void 0:n.timeoutId),null===(a=R.current)||void 0===a||null===(r=a.cancel)||void 0===r||r.call(a),m((e=>({...e,loaded:!0,loading:!1,loadingMore:!1})))}),[m])]})(C,x[0],t);if(!l)return a.createElement(d.A,{title:y,"data-testid":"".concat(n,"Loading")});const{item:q="items",missingMessage:H}=Rn[t.extraKey]||{};if(j)return a.createElement(b.A,{title:"".concat((0,nn.Zr)(q)," couldn't be loaded"),message:"ErrAllNodesFailed"==j.errorMsgKey?"You do not have permissions to load ".concat(q):"Something went wrong."});if(c||l&&!r.length)return a.createElement(b.A,{title:"".concat((0,nn.Zr)(q)," couldn't be loaded"),message:H||"We couldn't find any available ".concat(q,".")});if(S&&"canceled"!==S){if("ErrNodeResourceNotFound"===(null===S||void 0===S?void 0:S.errorMsgKey))return a.createElement(b.A,{message:"Please review your selection and try again.",title:"".concat("feed"===t.extraKey?"Events are":'Function "'.concat(x,'" is')," not available ").concat(R,".")});if(null===T||void 0===T||!T.length)return a.createElement(b.A,{title:"".concat("feed"===t.extraKey?"Events":'Function "'.concat(x,'"')," couldn't be loaded"),message:"ErrForbidden"===(null===S||void 0===S?void 0:S.errorMsgKey)?"Forbidden":(null===S||void 0===S?void 0:S.errorMessage)||""})}if(w&&N)return a.createElement(b.A,{title:"Required filters are needed",message:'Function "'.concat(x,'" needs: ').concat(M.map((e=>e.name)).join(", "),"."),footer:"Check them on the right sidebar!"});const G=Bn[K]||Bn.table;return a.createElement(f.Box,{overflow:{horizontal:"hidden",vertical:"auto"},column:!0,padding:[4,4,0],gap:2},a.createElement(ie,{nodeIds:C,onRefresh:W,onCancel:V,paramsKey:t}),k?a.createElement(a.Fragment,null,a.createElement(On,{paramsKey:t,testIdPrefix:n,customCharts:O,refetch:W,fn:x,nodeIds:C,containerWidth:s}),a.createElement(v,{paramsKey:t,testIdPrefix:n,defaultCharts:z,hasCustom:!!O,hasHistogram:!!L,refetch:W,fn:x,nodeIds:C,containerWidth:s}),a.createElement(G,(0,m.A)({key:x,"data-testid":"".concat(n,"Component"),paramsKey:t,refetch:W,ref:B,selectedFn:x,containerWidth:s},u)),!(null!==T&&void 0!==T&&T.length)&&a.createElement(f.Flex,{column:!0,justifyContent:"center",alignItems:"center",alignSelf:"center",margin:["feed"===t.extraKey?3:30,0,0],gap:3},a.createElement(f.H3,null,"No results to display"),a.createElement(f.Text,{color:"textDescription",textAlign:"center"},"Double-check your search or filters and dates and try again with different conditions"),P&&a.createElement(f.Text,{color:"text",textAlign:"center"},P))):a.createElement(d.A,{title:y,"data-testid":"".concat(n,"Loading")}))})),_n=Dn;var jn=n(15255);const Wn=e=>{const t=(0,A.OS)();return a.createElement(f.Button,(0,m.A)({label:"Get a fresh agent token",onClick:t},e))},Vn="Functions expose sensitive information about your systems and applications. To protect your privacy, Netdata exposes this information only to logged-in users and claimed agents. When viewing Functions directly on a Netdata Agent UI, this information is sent directly from the Netdata Agent to your web browser, without exposing it to any third parties.",qn={notLoggedIn:{title:"Sign in to Netdata to use this function",description:Vn,footer:a.createElement(w.A,null)},notClaimed:{title:"Connect this agent to Netdata to use this function",description:Vn,footer:a.createElement(k.A,null)},noAccess:{title:"This agent belongs to a Netdata Space you are not member of",description:Vn,footer:a.createElement(f.TextBig,{color:"textDescription"},"Ask for an invitation from the administrators of the Netdata Space of the agent to use functions.")},bearerError:{title:"You are not authorized to use this function",description:Vn,footer:a.createElement(Wn,null)}},Hn={extraKey:"fn"},Gn=e=>{let{paramsKey:t=Hn,hasError:n,refreshAvailableFns:r,availableFnsLoaded:l,availableFns:o,...c}=e;const s=(0,p.w7)({...t,emptyIfAll:!1,merge:!0}),[d,u]=(0,p.Oj)(t),f=(0,g.dN)(),y=x(t),E=(0,i.Ak)(t),w=(0,i.E)(t);(0,a.useEffect)((()=>w),[E,null===d||void 0===d?void 0:d[0]]),(0,a.useEffect)((()=>{var e;if(y||!E)return;const t=null===(e=o.find((e=>e.name===E)))||void 0===e?void 0:e.nodes;t&&(null!==d&&void 0!==d&&d.length&&t[d[0]]||u([Object.keys(t)[0]]))}),[y,u,s.length,E,o]);const[k]=(0,v.Q8)(),[{bearerProtection:I,error:F,token:T}]=(0,A.f7)(),{error:S}=(0,i.Ol)(t),K=(0,h.dg)(),[{canBeClaimed:P,cloudStatus:z}]=(0,jn.RJ)();if((0,a.useEffect)((()=>{n&&r()}),[z,T]),!f.length)return a.createElement(C,{paramsKey:t});if(K&&(S||n||F&&I)){const{title:e,description:t,footer:n}=(e=>{let{userStatus:t,userNodeStatus:n,accessError:a,canBeClaimed:r,cloudStatus:l}=e;return qn[t]?qn[t]:a?qn.notLoggedIn:r?qn.notClaimed:qn[n]?qn[n]:qn.bearerError?qn.bearerError:qn.notLoggedIn})({...k,bearerError:F,canBeClaimed:P,cloudStatus:z,error:S});return a.createElement(b.A,{title:e,message:t,footer:n})}return a.createElement(_n,(0,m.A)({testIdPrefix:"fn",paramsKey:t,availableFnsLoaded:l,availableFns:o},c))},Un={extraKey:"feed"},Zn=e=>{let{paramsKey:t=Un,...n}=e;x(t);const r=(0,i.E)(t);return(0,a.useEffect)((()=>r),[]),a.createElement(_n,(0,m.A)({testIdPrefix:"feed",paramsKey:t},n))};var Xn=n(5287),Yn=n.n(Xn),$n=n(42828),Jn=n(59846);const Qn={fn:!0,logs:!0},ea=(0,a.memo)((e=>{let{roomId:t,flavour:n,availableFns:r}=e;const l=(e=>{const t=Qn[e];return(0,a.useMemo)((()=>({Live:{head:{label:"Live nodes",textColor:"textLite",iconName:"connectivityStatusLive",hasFn:t},node:{textColor:"textFocus",showFn:t,requireFn:t}},Stale:{head:{label:"Stale nodes",textColor:"textLite",iconName:"connectivityStatusStale"},node:{textColor:"textFocus",disabled:t}},Offline:{head:{label:"Offline nodes",textColor:"textLite",iconName:"connectivityStatusOffline"},node:{textColor:"textLite",disabled:t}}})),[e])})(n),o=(e=>{const{aggregations:t}=(0,i.Ol)({extraKey:e});return(0,a.useMemo)((()=>null!==t&&void 0!==t&&t.node_ids?t.node_ids.buckets.reduce(((e,t)=>({...e,[t.key]:t.hits.doc_count})),{}):null),[t])})(n),c=Qn[n],s=(0,i.Ak)({extraKey:n}),d=(0,a.useMemo)((()=>{var e;return Array.isArray(r)&&(null===(e=r.find((e=>e.name===s)))||void 0===e?void 0:e.nodes)||null}),[s,r]),u=(0,a.useCallback)((e=>!!d&&!d[e]),[d]),f=(0,a.useCallback)((e=>Yn()(d?Object.keys(d):[],e)),[d]);return c&&!d?null:a.createElement(Jn.A,{title:"Nodes",testIdPrefix:"nodes",baseKey:t,extraKey:n,param:"selectedNodeIds",multi:"feed"===n},a.createElement($n.Ay,(0,m.A)({key:n,baseKey:t,extraKey:n,statusProps:l,background:"mainBackground",itemProps:{padding:[1,1,1,.5]},searchMargin:[0,0,1],height:{max:"300px"},multi:"feed"===n,nodeCounts:o},c&&{useFilteredIds:f},{checkIsDisabled:u})))})),ta=ea;var na=n(82700);const aa=e=>e.name,ra=(0,a.memo)((e=>{let{param:t,baseKey:n,extraKey:r,testIdPrefix:l,title:o,items:i=[],multi:c=!1}=e;return i.length?a.createElement(Jn.A,{title:o,testIdPrefix:l,baseKey:n,extraKey:r,param:t,multi:c},a.createElement(na.Ay,{param:t,baseKey:n,extraKey:r,testIdPrefix:l,collection:i,multi:c,getValue:aa,getLabel:aa})):null}));var la=n(83488);const oa=e=>e.id,ia={string:(e,t)=>e.localeCompare(t,void 0,{sensitivity:"accent",ignorePunctuation:!0}),integer:(e,t)=>e-t},ca={table:function(e){let{param:t,columns:n,aggregatedView:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.entries(e.reduce(((e,r)=>{var l,o,i;return e[r[t]]={count:((null===(l=e[r[t]])||void 0===l?void 0:l.count)||0)+(r.hidden?0:1),type:null===(o=n[t])||void 0===o?void 0:o.type,...a&&{actualCount:((null===(i=e[r[t]])||void 0===i?void 0:i.actualCount)||0)+(r.hidden?0:r[a.column]||1),actualCountLabel:a.aggregatedLabel,countLabel:a.resultsLabel}},e}),{})).map((e=>{let[t,n]=e;return{id:t,...n}})).sort(((e,t)=>(ia[e.type]||ia.integer)(e.id,t.id)))},default:n.n(la)()},sa=e=>{let{param:t,baseKey:n,extraKey:r,filtersKey:l,testIdPrefix:c,title:s,defaultExpanded:d=!1}=e;const u=(e=>{let{extraKey:t,filtersKey:n,param:r}=e;const l=mt({extraKey:t,omit:r,keepAll:!0}),c=(0,o.l6)(r,{extraKey:n,flavour:"arr"}),s=(0,i.Ol)({key:"type",extraKey:t}),d=ca[s]||ca.default,{columns:u,aggregatedView:m}=(0,i.Ol)({extraKey:t});return(0,a.useMemo)((()=>d(l,{param:r,columns:u,aggregatedView:m})),[r,l,c])})({param:t,extraKey:r,filtersKey:l});return u&&u.length?a.createElement(Jn.A,{title:s,testIdPrefix:c,baseKey:n,extraKey:l,param:t,defaultIsOpen:d},a.createElement(na.Ay,{param:t,baseKey:n,extraKey:l,testIdPrefix:c,collection:u,capitalized:!1,getValue:oa,getLabel:oa})):null};var da=n(73700);const ua=e=>{let{param:t,baseKey:n,extraKey:r,filtersKey:l,testIdPrefix:c,title:s,defaultExpanded:d=!1}=e;const{columns:u}=(0,i.Ol)({extraKey:r}),[m,p]=(0,o.r$)(t,{extraKey:l,flavour:"arr",defaultValue:[]}),g=(0,a.useCallback)((0,da.n)(10,(e=>{let{min:t,max:n}=e;return p([t,n])})),[]);if(!u[t])return null;const h=1*(u[t].min||0),v=1*(u[t].max||0);return a.createElement(Jn.A,{title:s,testIdPrefix:c,baseKey:n,extraKey:l,param:t,defaultIsOpen:d,showCounter:!1},a.createElement(f.Box,{padding:[2,0],width:"100%"},a.createElement(f.MultiRangeInput,{min:h,max:v,onChange:g,initMin:m[0]?1*m[0]:h,initMax:m[1]?1*m[1]:v,step:(v-h)/20})))},ma=(e,t)=>({key:e,type:t[e].filter,defaultExpanded:t[e].defaultExpandedFilter}),fa={multiselect:sa,range:ua},pa=e=>{let{roomId:t,extraKey:n}=e;const r=(0,i.Ak)({extraKey:n}),l=(e=>rn(e,ma))(n);return l.map((e=>{const l=fa[e.type]||fa.multiselect;return a.createElement(l,{key:e.key,title:e.key,testIdPrefix:"function",baseKey:t,extraKey:n,filtersKey:"".concat(r||n,"Filters"),param:e.key,defaultExpanded:e.defaultExpanded})}))},ga=e=>e.name||e.id,ha=e=>e.id,va=(0,a.memo)((e=>{let{title:t,options:n,param:r,baseKey:l,filtersKey:o,testIdPrefix:i,multi:c=!0,defaultIsOpen:s=!1,required:d=!1}=e;const[u,m]=(0,S.A)(!1),p=(0,a.useMemo)((()=>null!==n&&void 0!==n&&n.length?n.filter((e=>"number"!==typeof e.count||e.count>0)):null),[n]);return null!==n&&void 0!==n&&n.length?a.createElement(Jn.A,{title:t,testIdPrefix:i,baseKey:l,extraKey:o,param:r,defaultIsOpen:s,required:d,multi:c,configElements:e=>{let{isOpen:t}=e;return t&&(null===p||void 0===p?void 0:p.length)!==(null===n||void 0===n?void 0:n.length)&&a.createElement(f.Button,{padding:[0],flavour:"borderless",onClick:e=>{e.stopPropagation(),m()},"data-testid":"".concat(i,"-filter-resetAll"),label:u?"Show zeros":"Hide zeros",tiny:!0,neutral:!0})}},a.createElement(na.Ay,{param:r,baseKey:l,extraKey:o,testIdPrefix:i,collection:u?p:n,capitalized:!1,getValue:ha,getLabel:ga,multi:c})):null})),ya={nodes:!0},xa=e=>{let{roomId:t,extraKey:n}=e;const r=(0,i.Ak)({extraKey:n}),l=(0,i.Ph)(n),{columns:o}=(0,i.Ol)({extraKey:n});return l.length?l.map((e=>{var l;return ya[e.id]?null:a.createElement(va,{key:e.id,title:e.name,options:e.options,param:e.id,testIdPrefix:"function",baseKey:t,filtersKey:"".concat(r||n,"Filters"),defaultExpanded:null===(l=o[e.id])||void 0===l?void 0:l.defaultExpandedFilter})})):null},Ea={select:!0},ba=e=>{let{roomId:t,extraKey:n,requiredParams:r}=e;return r.map((e=>a.createElement(va,{key:e.id,title:e.name,options:e.options,param:e.id,testIdPrefix:"function",baseKey:t,filtersKey:"".concat(n,"Filters"),multi:!Ea[e.type],defaultIsOpen:!0,required:!0})))},Ca=(0,a.memo)((e=>{let{extraKey:t}=e;const n=(0,i.Ak)({extraKey:t}),[{requiredParams:r,infoLoaded:l},c]=(0,i.WH)({extraKey:t}),s=(0,be.ID)(),[d,u]=(0,o.N9)(null,{key:s,extraKey:"".concat(n,"Filters")});return(0,a.useEffect)((()=>{l&&r.length&&r.forEach((e=>{var t,n;return(null===(t=e.options)||void 0===t?void 0:t.length)>0&&!(null!==(n=d[e.id])&&void 0!==n&&n.length)&&u({[e.id]:[e.options[0].id]})}))}),[l]),(0,a.useEffect)((()=>{l&&(r.length?d&&c((e=>({...e,missingRequired:!!r.length&&!r.every((e=>{var t,n;return!(null===(t=e.options)||void 0===t||!t.length)&&(Array.isArray(d[e.id])?!(null===(n=d[e.id])||void 0===n||!n.length):!!d[e.id])}))}))):c((e=>({...e,missingRequired:!1}))))}),[l,r,d]),a.createElement(ba,{roomId:s,extraKey:n,requiredParams:r})})),wa=(0,a.memo)((e=>{let{flavour:t,availableFns:n}=e;const r=(0,be.ID)(),{loaded:l,aggregations:o,error:c}=(0,i.Ol)({extraKey:t});return a.createElement(f.Flex,{column:!0,overflow:{vertical:"auto"},padding:[0,3,30]},"feed"!==t&&a.createElement(ra,{title:"Function",testIdPrefix:"function",baseKey:r,extraKey:t,param:"selectedFn",items:n}),a.createElement(ta,{roomId:r,flavour:t,availableFns:n}),a.createElement(Ca,{extraKey:t}),l&&!o&&!c&&a.createElement(pa,{roomId:r,extraKey:t}),l&&o&&!c&&a.createElement(xa,{roomId:r,extraKey:t}))})),ka=wa;var Aa=n(12352),Ia=n(50065),Fa=n(18682);const Ta=e=>{let{data:t}=e;return a.createElement(Ia.A,{name:"Files"},a.createElement(f.Flex,{gap:1,padding:[0,1],alignItems:"center"},a.createElement(f.Box,{sx:{fontWeight:"500",letterSpacing:"1px"},as:f.Text,color:"textLite"},"{;}"),a.createElement(f.TextSmall,null,"Copy data as"),a.createElement(f.Flex,{cursor:"pointer",gap:1,onClick:(0,Fa.C)(JSON.stringify(t),{text:"JSON copied to clipboard"})},a.createElement(f.TextSmall,{color:"primary"},"json"),a.createElement(f.Icon,{color:"primary",size:"small",name:"copy"}))))},Sa=function(){let{data:e={},columns:t={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"fn";return Object.entries(e).sort(((e,n)=>{var a,r;let[l]=e,[o]=n;return((null===(a=t[l])||void 0===a?void 0:a.displayName)||l).localeCompare((null===(r=t[o])||void 0===r?void 0:r.displayName)||o,void 0,{sensitivity:"accent",ignorePunctuation:!0})})).reduce(((e,n)=>{var o,i,c;let[s,d]=n;const u=a?"".concat(a,".").concat((null===(i=t[s])||void 0===i?void 0:i.displayName)||s):(null===(o=t[s])||void 0===o?void 0:o.displayName)||s;if(null!==(c=t[s])&&void 0!==c&&c.dummy)return e;if("feed"!==l&&!t[s])return e;const m=Array.isArray(d);if(m&&"object"===typeof d[0]&&null!==d[0]||m&&d.length>1)e.push([u,JSON.stringify(d)]),r[u]=d;else if(d&&"object"===typeof d)Sa({data:d},e,u,r,l);else{if(null===d)return e;e.push([u,m?d.length>1?"[".concat(d.join(", "),"]"):d[0]:d]),r[u]=m?d.length>1?"[".concat(d.join(", "),"]"):d[0]:d}return e}),n)},Ka=(0,U.default)(f.Flex).withConfig({displayName:"sidebarInfo__Container",componentId:"sc-18vn5bm-0"})(["*{font-family:monospace;letter-spacing:0.09px;line-height:13px;font-size:12px;overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word;}"]),Pa=e=>{let{selectedRowData:t={},setSelectedRowData:n,flavour:r,...l}=e,o={};const i=(0,a.useMemo)((()=>Sa(t,[],null,o,r).sort(((e,t)=>{let[n]=e,[a]=t;return n.localeCompare(a)}))),[t]);return a.createElement(f.Flex,(0,m.A)({column:!0,gap:2,overflow:{vertical:"auto"},padding:[0,2,30]},l),a.createElement(f.Flex,{justifyContent:"between",padding:[2,0],border:{side:"bottom",color:"borderSecondary"}},a.createElement(f.TextBig,{strong:!0},"Row info"),i.length>0&&a.createElement(f.Box,{onClick:()=>n(),cursor:"pointer"},a.createElement(f.TextSmall,{color:"primary"},"Clear selection"))),Array.isArray(i)&&i.length?a.createElement(a.Fragment,null,a.createElement(Ka,{column:!0,gap:2},i.map((e=>{let[t,n]=e;return a.createElement(Aa.A,{key:t,size:"small",name:t,testId:"sidebar-rowInfoContent-".concat(t),padding:[1,0,0]},n)}))),a.createElement(Ta,{data:t.json||o})):a.createElement(f.Text,null,"Select a row to see raw data"))};var za=n(63314);const La={fn:{Component:Gn,paramsKey:{extraKey:"fn"},loadingMessage:"Loading functions..."},logs:{Component:Gn,paramsKey:{extraKey:"logs"},loadingMessage:"Loading logs..."},feed:{Component:Zn,paramsKey:{extraKey:"feed"},loadingMessage:"Loading events..."}},Na={filters:{iconName:"filterList",...c.kO,width:"19px",Content:ka,dataTestId:"fnFilters",label:"Filters"},info:{iconName:"information",...c.kO,width:"19px",dataTestId:"info",Content:Pa,label:"Info"}},Ma=e=>{let{flavour:t}=e;const{Component:n,paramsKey:m,loadingMessage:f}=La[t]||La.fn,p=(0,l.CK)(),g=(0,l.nj)(),h=(0,o.Fw)("sidebarTab",{flavour:"val",extraKey:t}),v=(0,o.Fw)("sidebarOpen",{flavour:"bool"}),[y,x]=(0,a.useState)(),E=(0,a.useCallback)((function(){v(!0),h("info"),x(...arguments)}),[]),{loaded:b,value:C,hasError:w,refresh:k}=(0,i.vx)(m.extraKey),[A,{width:I}]=(0,u.A)();return g?p.length||"feed"===t?a.createElement(za.Ay,{feature:"Functions-".concat(t)},a.createElement(r.A,{"data-testid":"".concat(t,"Page"),margin:[0,0,2],sidebar:a.createElement(c.Ay,{title:"Filters",flavour:t,selectedRowData:y,setSelectedRowData:x,availableFns:C,tabs:Na,loaded:!0,hasSearch:!1}),ref:A},a.createElement(n,{testIdPrefix:t,paramsKey:m,onShowInfo:E,availableFnsLoaded:b,availableFns:C,refreshAvailableFns:k,hasError:w,containerWidth:I}))):a.createElement(za.Ay,{feature:"Functions-".concat(t),mode:"NoNodesView"},a.createElement(s.A,null)):a.createElement(d.A,{title:f})}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7436.1ebd371d70e6a87c5499.chunk.js b/src/web/gui/v2/7436.1ebd371d70e6a87c5499.chunk.js deleted file mode 100644 index d986f3f46..000000000 --- a/src/web/gui/v2/7436.1ebd371d70e6a87c5499.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="52d45d1a-d347-4647-97da-7eabff5f654a",e._sentryDebugIdIdentifier="sentry-dbid-52d45d1a-d347-4647-97da-7eabff5f654a")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7436],{99904:(e,t,n)=>{n.d(t,{A:()=>s});n(62953);var a=n(96540),r=n(3914),l=n(25624);var o=n(87659);const i=e=>{const t=new Date(e||void 0).toDateString();return"Invalid Date"!==t?t:null},s=()=>{var e;const t=(0,r.ap)(),n=(0,a.useMemo)((()=>"".concat("dismissedBumpedWarningKey","_").concat(null===t||void 0===t?void 0:t.id)),[null===t||void 0===t?void 0:t.id]),[s,,,d]=(0,o.A)(!localStorage.getItem(n)),{trialEndsAtRaw:u}=(0,l.A)(),c=u&&"EarlybirdAndCommunitySunset"==(null===t||void 0===t||null===(e=t.metadata)||void 0===e?void 0:e.joinTrialCode),m=s&&u&&c,g=c?"EARLYB25":null,p=(0,a.useCallback)((()=>{localStorage.setItem(n,!0),d()}),[d,n]);return{isModalVisible:m,isEarlybirdAndCommunitySunset:c,coupon:g,trialEndsAt:i(u),onClose:p}}},57436:(e,t,n)=>{n.r(t),n.d(t,{OptOut:()=>y.A,OptOutModal:()=>A.A,TrialMessage:()=>E.A,TrialWarning:()=>b,default:()=>w,useBusinessPlan:()=>v.A,useTrial:()=>i.A});var a=n(96540),r=n(22292),l=(n(62953),n(3296),n(27208),n(48408),n(39225)),o=n(10648),i=n(25624),s=n(99904),d=n(17170);const u=(0,l.A)((()=>n.e(9843).then(n.bind(n,19843))),"TrialWelcome"),c=(0,l.A)((()=>n.e(1839).then(n.bind(n,41839))),"BumpedWarning"),m=(0,l.A)((()=>Promise.all([n.e(8938),n.e(6661)]).then(n.bind(n,46661))),"NewUserForm"),g=()=>{const{isEarlybirdAndCommunitySunset:e}=(0,s.A)(),{trialWelcomeVisible:t,paymentProvider:n}=(0,i.A)(),{email:l,createdAt:g,isAnonymous:p}=(0,r.uW)(),f=(0,d.A)();if(!e&&!t&&!f&&"AWS"!==n){const e=new URL(window.location.href).searchParams;return!p&&(0,o.o)(new Date,new Date(g))<3&&(e.get("email")||e.get("oauth"))?a.createElement(a.Suspense,{fallback:""},a.createElement(m,{email:l})):null}const b=e?c:u;return a.createElement(a.Suspense,{fallback:""},a.createElement(b,null))};var p=n(93155);const f=(0,l.A)((()=>Promise.all([n.e(6384),n.e(86)]).then(n.bind(n,60086))),"Warnings"),b=e=>{const t=(0,r.uW)("isAnonymous");return p.bO&&!t?a.createElement(a.Suspense,{fallback:""},a.createElement(f,e)):null};var y=n(66732),A=n(34641),E=n(93476),v=n(28061);const w=()=>{const e=(0,r.uW)("isAnonymous");return window.envSettings.onprem||e?null:a.createElement(g,null)}},34641:(e,t,n)=>{n.d(t,{A:()=>f});n(9391),n(62953);var a=n(96540),r=n(63950),l=n.n(r),o=n(83199),i=n(19673),s=n(71835),d=n(92155),u=n(50876),c=n(63314),m=n(87659),g=n(97118);const p=(0,d.A)(o.Button),f=e=>{let{onConfirm:t,onDecline:n=l(),onCancellingEnd:r=l()}=e;const d=(0,i.M4)(),[f,b]=(0,s.A)(),{id:y}=(0,g.A)(),{sendLog:A,isReady:E}=(0,u.A)(),[v,,w,h]=(0,m.A)(),x=(0,a.useCallback)((()=>{w(),d({productId:y}).then((()=>{f({header:"Successfully canceled subscription",text:"You are now on Community plan"}),A({feature:"TrialOptOut",isSuccess:!0})})).catch((()=>{b({header:"Failed to cancel the subscription",text:"Remained on Business plan"}),A({feature:"TrialOptOut",isFailure:!0,error:"Failed to cancel the subscription"})})).finally((()=>{r(),h()}))}),[y,E]),C=(0,a.useCallback)((()=>{t?t():x()}),[t,x]);return a.createElement(o.Modal,{backdropProps:{backdropBlur:!0}},a.createElement(c.Ay,{feature:"TrialOptOut"},a.createElement(o.ModalContent,{width:{base:140}},a.createElement(o.ModalHeader,null,a.createElement(o.Flex,{gap:2,alignItems:"center"},a.createElement(o.H4,null,"Go to Community plan"))),a.createElement(o.ModalBody,null,v?a.createElement(o.Flex,{height:"100px"},a.createElement(o.TextBig,null,"Changing billing plan...")):a.createElement(o.Flex,{gap:2,column:!0},a.createElement(o.H3,null,"Are You Sure?"),a.createElement(o.TextBig,null,"It looks like you have chosen to opt-out of your free 30-day business trial. Are you sure you do not want to experience all the features Netdata has to offer?"),a.createElement(o.TextBig,null,"By opting out, you will switch to the community plan immediately."))),a.createElement(o.ModalFooter,null,a.createElement(o.Flex,{justifyContent:"end",gap:4,padding:[1,2]},a.createElement(p,{feature:"TrialOptOut",label:"Yes, I am sure!",flavour:"hollow",small:!0,onClick:C,disabled:!y||v,textTransform:""}),a.createElement(p,{feature:"TrialOptOut",label:"No, I want the trial!",small:!0,onClick:n,disabled:v,textTransform:""}))))))}},35454:(e,t,n)=>{n.d(t,{$B:()=>o,TB:()=>i,W1:()=>r,ml:()=>l,ue:()=>a});const a={default:"successSemi",warning:"warningSemi",critical:"errorSemi"},r={default:{background:"successSemi",border:"success"},warning:{background:"warningSemi",border:"warning"},critical:{background:"errorSemi",border:"error"}},l=[30,15,3,2,1],o="dismissedTrialWelcome",i="dismissedTrialWarningDate"},93476:(e,t,n)=>{n.d(t,{A:()=>g});var a=n(58168),r=n(96540),l=n(83199),o=n(63950),i=n.n(o),s=n(25624),d=n(99904),u=n(24864);const c={banner:{color:"main"},sidebar:{lineHeight:"1.6",color:"main"},freePlanUpgrade:{lineHeight:"1.6",color:"main"},billing:{color:"textLite"}},m=e=>{let{canUpgrade:t,onUpdateClick:n=i(),children:o,...s}=e;return t?r.createElement(l.Box,(0,a.A)({"data-testid":"upgrade-to-business-banner",onClick:n,as:l.Text,cursor:"pointer",textDecoration:"underline",color:"main"},s),o):null},g=e=>{let{flavour:t,couponRemainingDays:n,onUpdateClick:o=i()}=e;const{daysRemaining:g,canUpgrade:p,trialEndsAt:f}=(0,s.A)(),{isEarlybirdAndCommunitySunset:b}=(0,d.A)(),y=(0,r.useMemo)((()=>({isCoupon:n>0,isEarlybirdAndCommunitySunset:b,isBanner:"banner"==t,isSidebar:"sidebar"==t,isBilling:"billing"==t,isFreePlanUpgrade:"freePlanUpgrade"==t})),[t,n]);return r.createElement(l.Flex,{justifyContent:y.isBilling?"start":"center",alignItems:"center",width:"100%",gap:2},y.isCoupon?r.createElement(l.Flex,{column:!0},r.createElement(l.Text,(0,a.A)({},c[t],{fontSize:"10px",strong:!0}),"POST BLACK FRIDAY OFFER"),r.createElement(u.Te,(0,a.A)({},c[t],{fontSize:"38px",lineHeight:.8,strong:!0}),"50% off")):y.isEarlybirdAndCommunitySunset?r.createElement(l.Flex,{column:!0,gap:1,alignItems:"center"},r.createElement(l.Text,(0,a.A)({},c[t],{textAlign:"center",strong:!0},y.isBanner?{}:{fontSize:"10px"}),"Thank you for your support!"," ",y.isBanner?r.createElement(m,{canUpgrade:p,onUpdateClick:o},"Upgrade"):null),r.createElement(l.Text,(0,a.A)({},c[t],{color:"primary",fontSize:"22px",lineHeight:.8,strong:!0}),"25% Lifetime off")):y.isFreePlanUpgrade?r.createElement(l.Text,c[t],"Upgrade your plan for unlimited access and Business features."):r.createElement(l.Text,c[t],"You have ",r.createElement(l.Text,(0,a.A)({strong:!0},c[t]),"".concat(g," days"))," ","left to explore all the features of Netdata Business."," ",y.isBilling&&r.createElement(r.Fragment,null,"Trial ends at"," ",r.createElement(l.Text,(0,a.A)({strong:!0},c[t]),f),"."," "),y.isBanner?r.createElement(m,{canUpgrade:p,onUpdateClick:o},"Consider upgrading for unlimited access."):r.createElement(r.Fragment,null,"Consider upgrading for unlimited access.")))}},24864:(e,t,n)=>{n.d(t,{PL:()=>i,Te:()=>s,bg:()=>o});var a=n(8711),r=n(83199),l=n(35454);const o=(0,a.default)(r.Flex).attrs({position:"relative"}).withConfig({displayName:"styled__TrialWarningSidebar",componentId:"sc-66x250-0"})(["background-color:",";border-width:1px;border-style:dashed;border-color:",";border-radius:2px;"],(e=>{var t;let{type:n}=e;return(0,r.getColor)(null===(t=l.W1[n])||void 0===t?void 0:t.background)}),(e=>{var t;let{type:n}=e;return(0,r.getColor)(null===(t=l.W1[n])||void 0===t?void 0:t.border)})),i=(0,a.default)(r.Button).withConfig({displayName:"styled__TrialUpgradeButton",componentId:"sc-66x250-1"})(["flex:auto;"]),s=(0,a.default)(r.Text).attrs({strong:!0,lineHeight:.8}).withConfig({displayName:"styled__PromoText",componentId:"sc-66x250-2"})(["background-color:",";background-image:linear-gradient( 43deg,"," 0%,"," 46%,"," 100% );-webkit-background-clip:text;-webkit-text-fill-color:transparent;"],(0,r.getColor)("primary"),(0,r.getColor)(["blue","aquamarine"]),(0,r.getColor)(["purple","mauve"]),(0,r.getColor)("primary"))},66732:(e,t,n)=>{n.d(t,{A:()=>d});var a=n(96540),r=n(63950),l=n.n(r),o=n(83199),i=n(50876);const s={default:"Or you can opt to downgrade immediately",billing:"Or you can opt to downgrade immediately"},d=e=>{let{flavour:t="default",onOptOutClick:n=l(),...r}=e;const{sendLog:d,isReady:u}=(0,i.A)(),c=(0,a.useCallback)((()=>{n(),d({feature:"TrialOptOut",isStart:!0})}),[u]);return a.createElement(o.Text,r,"After the trial, you'll automatically switch to the free Community plan."," ",a.createElement(o.Box,{"data-testid":"upgrade-to-business-banner",onClick:c,as:o.Text,cursor:"pointer",textDecoration:"underline",color:"primary"},s[t]),".")}},25624:(e,t,n)=>{n.d(t,{A:()=>b});n(62953);var a=n(96540),r=n(46741),l=n(5668),o=n(22292),i=(n(8159),n(98992),n(37550),n(16074)),s=n(6593);var d=n(19673),u=n(50503),c=n(35454),m=n(42728),g=n(17170),p=n(93155);const f=e=>{const t=new Date(e||void 0).toLocaleDateString();return"Invalid Date"!==t?t:null},b=()=>{const e=(0,g.A)(),{loaded:t,value:n,refresh:b}=(0,d.JN)(),{isFailure:y}=(0,u.A)(),{slug:A,trialEndsAt:E,paymentProvider:v}=n||{},w=(0,a.useMemo)((()=>(e=>{if(!e)return null;const t=new Date(e)-new Date;return Math.ceil(t/864e5)})(E)),[E]),h=t&&!!E&&!e,x=(0,r.JT)("billing:Manage"),[C]=(0,l.ng)("trialModalDismissed"),T=p.bO&&x&&(h||y)&&!localStorage.getItem(c.$B)&&!C,[S,k]=(0,a.useState)(localStorage.getItem(c.TB)),B=(0,a.useMemo)((()=>p.bO&&h),[h]),[O,I]=(0,a.useState)(),D=(F=w)>15?"default":F>5?"warning":"critical";var F;const U=!(0,o.uW)("isAnonymous")&&x;return(0,a.useEffect)((()=>{const e=((e,t,n,a)=>{if(t<0)return!1;const r=new Date(e||void 0);if(!(0,i.f)(r))return!1;const l=new Date(a||void 0);if(!(0,i.f)(l))return!0;const{days:o}=(0,s.F)({start:l,end:r}),d=o;return n.some((e=>e>=t&&e{const e=(new Date).toISOString();k(e),localStorage.setItem(c.TB,e)},daysRemaining:w,trialEndsAt:f(E),trialEndsAtRaw:E,type:D,canUpgrade:U,onTrial:h,refreshPlan:b,planIsFreeOrEarlyBird:(0,m.Kj)(A),paymentProvider:v}}},97118:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(19673),r=n(42728);const l=()=>{var e;const{value:t}=(0,a.lU)();if(null===t||void 0===t||!t.free)return{};const n=Object.keys(t.free).sort(r.M7)[0];return{id:t.free[n]?null===(e=t.free[n][0])||void 0===e?void 0:e.id:null,version:n}}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7471.f96c4d04a73fb7551c03.chunk.js b/src/web/gui/v2/7471.f96c4d04a73fb7551c03.chunk.js deleted file mode 100644 index 7e1275af1..000000000 --- a/src/web/gui/v2/7471.f96c4d04a73fb7551c03.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="796e2291-866c-4722-9c30-22064b74ae0c",e._sentryDebugIdIdentifier="sentry-dbid-796e2291-866c-4722-9c30-22064b74ae0c")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7471],{51641:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,e:()=>d});var a,r=n(96540),o=n(47444),i=n(21396);const s=(0,o.eU)({key:"agentDataTrackStatus",default:""}),c=null===(a=window.localNetdataRegistry)||void 0===a?void 0:a.mg,l=window.envSettings.agentApiUrl,d=()=>(0,o.vc)(s),u=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l;const n=(0,o.lZ)(s);(0,r.useEffect)((()=>{if(!e)return;const a=i.enc.Hex.parse("fd90fa3e33a504c10a444f910444650772e77e81b00c7523643462f298fd14c0"),r=i.lib.WordArray.random(16),o=JSON.stringify({machine_guid:e,url:t}),s=i.AES.encrypt(o,a,{iv:r}).ciphertext,c=i.enc.Hex.stringify(r)+i.enc.Hex.stringify(s),l=c+i.HmacSHA256(i.enc.Hex.parse(c),a).toString();fetch("".concat("https://frankfurt.netdata.rocks/privacy","?data=").concat(encodeURIComponent(l))).then((e=>e.json())).then((e=>n(e.status))).catch((e=>console.error("Error:",e)))}),[e])}},86147:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>A});n(62953);var a=n(96540),r=n(39225),o=n(83741),i=n(22332),s=n(80925),c=n(24266),l=n(22292),d=n(20378),u=n(78459),g=n(15255),m=n(87337),v=n(28738),f=n(38819),y=n(71835);const w={ErrInvalidRedirectURI:"Invalid redirect URI",ErrUntrustedRedirectURI:"Untrusted redirect URI",ErrSpaceMemberAlreadyExists:"Space member already exists",ErrInvalidSpaceID:"Invalid space ID",ErrInvalidInvitationToken:"Invalid invitation token",ErrInvitationNotFound:"Invitation not found",ErrInvitationEmailMismatch:"Invitation email mismatch",ErrInvitationExpired:"Invitation expired",ErrUnauthenticated:"Unauthenticated",ErrInternalServerError:"Internal server error"},h=()=>{const[,e]=(0,y.A)();(0,a.useEffect)((()=>{const{error_msg_key:t,error_message:n}=(0,f.PP)();var a,r;n&&e({message:decodeURIComponent((a=t,r=n,w[a]||r||"An unexpected error occurred"))})}),[])};var I=n(29848);const p=(0,r.A)((()=>Promise.all([n.e(4631),n.e(7519),n.e(8323),n.e(963),n.e(5598)]).then(n.bind(n,95598))),"Layout"),k=(0,i.withChartProvider)((()=>{const e=(0,l.uW)("isLoaded"),t=(0,l.uW)("email"),n=(0,l.NJ)(),r=(0,l.uW)("isAnonymous"),i=(0,I.c0)(),s=(0,u.OS)();return(0,a.useEffect)((()=>{r||s()}),[r]),(0,a.useEffect)((()=>{if(n&&t)try{o.gV({id:n,email:t})}catch(e){console.warn("Sentry: unable to set user")}}),[t,n]),(0,m.xN)(),(0,u.Ay)(),(0,d.Ay)(),(0,g.Ay)(),h(),a.createElement(a.Suspense,{fallback:a.createElement(v.A,null)},a.createElement(p,{key:i,isUserLoaded:e}))})),A=(0,c.Xc)((()=>{const e=(0,s.e)().getRoot();return a.createElement(k,{chart:e})}))},3714:(e,t,n)=>{"use strict";n.d(t,{j:()=>i});n(62953),n(48408);var a=n(26655),r=n(80158);const o=e=>(window.localNetdataRegistry.mg=e.agent.mg,window.localNetdataRegistry.hostname=(0,r.Yv)(e.agent.nm||"agent"),{cloudStatus:e.cloud.status,canBeClaimed:e.can_be_claimed,keyFilename:e.key_filename,claimId:e.cloud.claim_id,mg:e.agent.mg,nd:e.agent.nd,success:e.success,message:e.message}),i=function(){let{key:e,token:t,rooms:n,url:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=new URLSearchParams({key:e,rooms:n,token:t,url:r}).toString();return i=e&&n&&t&&r&&i?"?".concat(i):"",a.A.get("/api/v2/claim".concat(i),{baseURL:window.envSettings.agentApiUrl,transform:o})}},15255:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>m,OS:()=>u,RJ:()=>g});n(62953);var a=n(96540),r=n(47444),o=n(3914),i=n(22292),s=n(79731),c=n(3714);const l=(0,r.Iz)({key:"claimStatusAtom",default:{loaded:!1,loading:!1,cloudStatus:"disabled",canBeClaimed:!1,claimId:null,keyFilename:"",error:"",claiming:!1,claimingError:""}}),d=(0,r.Iz)({key:"checkClaimStatus",default:()=>1}),u=()=>{var e;const t=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,n=(0,r.lZ)(d(t));return(0,a.useCallback)((()=>n((e=>e+1))),[t])},g=()=>{var e;const t=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,[n,o]=(0,r.L4)(l({machineGuid:t}));return[n,(0,a.useCallback)((e=>o((t=>({...t,...e})),[])))]},m=()=>{var e;const t=(0,o.dg)(),n=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,[l,u]=(0,r.L4)(d(n)),[m,v]=g(n),{loading:f}=m,y=(0,i.uW)("isAnonymous");return(0,a.useEffect)((()=>{!f&&n&&t&&(v({loading:!0,nodeId:null,spaceId:null,roomIds:[]}),(0,c.j)().then((e=>{let{data:t}=e;v({loading:!1,loaded:!0,...t,error:""})})).catch((e=>{var t;const n=null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data;v({loading:!1,loaded:!0,error:(0,s.o)(null===n||void 0===n?void 0:n.errorMsgKey)||(null===n||void 0===n?void 0:n.errorMessage)||"Something went wrong",cloudStatus:"disabled",canBeClaimed:!1,keyFilename:""})})))}),[n,l,t,y]),{...m,checkAgain:u}}},29848:(e,t,n)=>{"use strict";n.d(t,{Hs:()=>c,c0:()=>i,ly:()=>s,pp:()=>l});n(62953);var a=n(47444);const r=(0,a.eU)({key:"spaceKeyAtom",default:0}),o=(0,a.eU)({key:"roomViewLoading",default:!0}),i=()=>(0,a.vc)(r),s=()=>{const[e,t]=(0,a.L4)(r);return()=>t(e+1)},c=()=>(0,a.vc)(o),l=()=>(0,a.L4)(o)},78459:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>h,OS:()=>y,f7:()=>w});n(62953);var a,r=n(96540),o=n(47444),i=n(92138),s=n(3914),c=n(22292),l=n(79731),d=n(15255),u=n(9224),g=n(51641);const m=null===(a=window.localNetdataRegistry)||void 0===a?void 0:a.mg,v=(0,o.Iz)({key:"currentAgentBearerAtom",default:{loading:!1,token:localStorage.getItem("agentJWT:".concat(m))||"",expiration:localStorage.getItem("agentJWTExp:".concat(m))||null,bearerProtection:!0,error:""}}),f=(0,o.Iz)({key:"checkAgentBearer",default:()=>1}),y=()=>{const[{mg:e}]=(0,d.RJ)(),t=(0,o.lZ)(f(e));return(0,r.useCallback)((()=>t((e=>e+1))),[e])},w=()=>{const[{claimId:e,mg:t,nd:n}]=(0,d.RJ)();return(0,o.L4)(v({nodeId:n,machineGuid:t,claimId:e}))},h=()=>{const e=(0,s.dg)(),[{claimId:t,mg:n,nd:a}]=(0,d.RJ)(),[m,v]=(0,o.L4)(f(n)),[{loading:y,token:h,expiration:I,bearerProtection:p,error:k},A]=w(),S=(0,i.A)(m),b=(0,c.uW)("isAnonymous");return(0,r.useEffect)((()=>{!y&&n&&e&&!b&&t&&a&&(m===S&&I&&1e3*I>(new Date).getTime()+3600||(A((e=>({...e,loading:!0}))),(0,u.q5)(a,n,t).then((e=>{let{data:t}=e;A({loading:!1,...t,error:""}),localStorage.setItem("agentJWT:".concat(n),null===t||void 0===t?void 0:t.token),localStorage.setItem("agentJWTExp:".concat(n),null===t||void 0===t?void 0:t.expiration)})).catch((e=>{var t;const a=null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data;localStorage.removeItem("agentJWT:".concat(n)),localStorage.removeItem("agentJWTExp:".concat(n)),A({loading:!1,token:"",expiration:null,bearerProtection:!0,error:(0,l.o)(null===a||void 0===a?void 0:a.errorMsgKey)||(null===a||void 0===a?void 0:a.errorMessage)||"Something went wrong"})}))))}),[n,I,m,e,b,S]),(0,g.A)(n),{token:h,bearerProtection:p,checkAgain:v,error:k}}},20378:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>m,OS:()=>u,Q8:()=>g});n(62953);var a=n(96540),r=n(47444),o=n(3914),i=n(22292),s=n(79731),c=n(9224);const l=(0,r.Iz)({key:"userAccessAtom",default:{loaded:!1,loading:!1,userStatus:"notLoggedIn",userNodeStatus:"noAccess",nodeId:null,spaceId:null,roomIds:[],error:""}}),d=(0,r.Iz)({key:"checkUserAccess",default:()=>1}),u=()=>{var e;const t=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,n=(0,r.lZ)(d(t));return(0,a.useCallback)((()=>n((e=>e+1))),[t])},g=()=>{var e;const t=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg;return(0,r.L4)(l({machineGuid:t}))},m=()=>{var e;const t=(0,o.dg)(),n=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,[l,u]=(0,r.L4)(d(n)),[m,v]=g(n),{loading:f}=m,y=(0,i.uW)("isAnonymous");return(0,a.useEffect)((()=>{!f&&n&&t&&!y&&(v((e=>({loading:!0,nodeId:null,spaceId:null,roomIds:[],...e}))),(0,c.az)(n).then((e=>{let{data:t}=e;v({loading:!1,loaded:!0,...t,error:""})})).catch((e=>{var t;const n=null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data;v({loading:!1,loaded:!0,error:(0,s.o)(null===n||void 0===n?void 0:n.errorMsgKey)||(null===n||void 0===n?void 0:n.errorMessage)||"Something went wrong",userStatus:"notLoggedIn",userNodeStatus:"noAccess",nodeId:null,spaceId:null,roomIds:[]})})))}),[n,l,t,y,f]),{...m,checkAgain:u}}},87337:(e,t,n)=>{"use strict";n.d(t,{xN:()=>f,vS:()=>g,YN:()=>y,KF:()=>v,iw:()=>u,rE:()=>m});n(17333),n(3064),n(41393),n(14905),n(98992),n(54520),n(72577),n(81454),n(8872),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215),n(62953);var a=n(96540),r=n(47444),o=n(47767),i=n(22292);const s=(0,r.Iz)({key:"visitedNodes",default:()=>[]});var c=n(47762),l=n(9224);const d=(0,r.K0)({key:"visitedNodeIdsValue",get:e=>t=>{let{get:n}=t;return n(s(e)).map((e=>{let{id:t}=e;return t}))}}),u=()=>{const e=(0,i.NJ)(),t=(0,r.vc)(s(e)),n=(0,r.Zs)((e=>{let{set:t}=e;return e=>{t(c.gl,{values:e.reduce(((e,t)=>({...e,[t.id]:{...t,loaded:!0}})),{}),merge:!0})}}),[]);return(0,a.useEffect)((()=>{n(t)}),[t]),(0,r.vc)(d(e))},g=e=>{const t=(0,i.NJ)(),n=(0,r.vc)(s(t)),o=(0,a.useMemo)((()=>e?n.filter((t=>t.name.toUpperCase().includes(e.toUpperCase()))):n),[n,e]);return(0,a.useMemo)((()=>o.map((e=>e.id))),[o])},m=()=>(0,r.Zs)((e=>{let{snapshot:t,set:n}=e;return async(e,a)=>{const r=await t.getPromise((0,i.Dm)("id")),{urls:o,name:d}=await t.getPromise((0,c.GN)({id:e})),u=o.filter((e=>e!==a));n((0,c.GN)({id:e,key:"urls"}),u),u.length||n(s(r),(t=>t.filter((t=>t.id!==e))));try{await(u.length?(0,l.Bz)(r,e,d,u):(0,l.sm)(r,[e])),(0,l.UL)(r,e).catch((()=>{}))}catch(g){n((0,c.GN)({id:e,key:"urls"}),o)}}}),[]),v=()=>{const{pathname:e}=(0,o.zy)(),t=(0,i.NJ)(),n=f({autoFetch:!1});return(0,r.Zs)((e=>{let{snapshot:t,set:a}=e;return async(e,r,o)=>{if(await t.getPromise((0,i.Dm)("isAnonymous")))return;const d=await t.getPromise((0,i.Dm)("id")),{urls:u,name:g}=await t.getPromise((0,c.GN)({id:e}));let m=r?[r,...u]:u;m=[...new Set([window.location.href,...m])];const v=m.length!==u.length;try{a((0,c.GN)({id:e,key:"urls"}),m),a(s(d),(t=>{const n=t.find((t=>t.id===e)),a=t.filter((t=>t.id!==e));return n?[{...n,accessCount:n.accessCount+1,lastAccessTime:(new Date).toISOString()},...a]:[{accessCount:1,id:e,lastAccessTime:(new Date).toISOString(),urls:m,name:o},...a]})),v&&await(0,l.Bz)(d,e,o||g,m),n(),await(0,l.UL)(d,e)}catch(f){a((0,c.GN)({id:e,key:"urls"}),u)}}}),[n,e,t])},f=function(){let{autoFetch:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t,isAnonymous:n}=(0,i.uW)(),[,o]=(0,r.L4)(s(t)),[c,d]=(0,a.useState)(0),u=(0,a.useCallback)((()=>{d((e=>e+1))}),[d]);return(0,a.useEffect)((()=>{if(t&&(e||c))if(n){const e=(window.visitedNodes||[]).sort(((e,t)=>new Date(t.lastAccessTime)-new Date(e.lastAccessTime)));o(e)}else(0,l.uQ)(t).then((e=>{if(!e)return;const{data:{results:t}}=e,n=t.sort(((e,t)=>new Date(t.lastAccessTime)-new Date(e.lastAccessTime)));o(n)}))}),[e,c,t,n]),u},y=()=>{const e=(0,i.NJ)(),t=s(e);return(0,r.Zs)((e=>{let{snapshot:n,set:a}=e;return async e=>{const r=(await n.getPromise((0,c.th)(e))).map((e=>e.machineGUID)),o=await n.getPromise(t),i=o.filter((e=>!r.includes(e.id)));i.length!==o.length&&a(t,i)}}),[e])}},92138:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var a=n(96540),r=n(2404),o=n.n(r),i=n(80862);const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o();const r=(0,a.useRef)(),s=(0,a.useRef)(e);return!(0,i.A)().current||t&&n(s.current,e)||(r.current=s.current,s.current=e),r.current}},50477:()=>{}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7487.89070793921be1288bb5.css b/src/web/gui/v2/7487.89070793921be1288bb5.css deleted file mode 100644 index e5d02668f..000000000 --- a/src/web/gui/v2/7487.89070793921be1288bb5.css +++ /dev/null @@ -1,2 +0,0 @@ -.default .dygraph-axis-label{color:#35414a}.dark .dygraph-axis-label{color:#fff}.dygraph-label-rotate-right{text-align:center;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg)}.dygraph-annotation{position:absolute;z-index:10;overflow:hidden;border:1px solid} - diff --git a/src/web/gui/v2/7487.db63c95c27d973a07d9b.chunk.js b/src/web/gui/v2/7487.db63c95c27d973a07d9b.chunk.js deleted file mode 100644 index cbc15d0f9..000000000 --- a/src/web/gui/v2/7487.db63c95c27d973a07d9b.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="6e15794f-c21d-4dbd-b39f-a55646c86750",e._sentryDebugIdIdentifier="sentry-dbid-6e15794f-c21d-4dbd-b39f-a55646c86750")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7487],{18686:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(96540),o=n(83199),r=n(47731);const l=e=>{let{children:t}=e;return(0,r.J)()?a.createElement(o.Layer,{full:!0},a.createElement(o.Flex,{width:"100%",background:"mainBackground","data-testid":"alertView-mobileContainer"},t)):t}},29848:(e,t,n)=>{n.d(t,{Hs:()=>c,c0:()=>l,ly:()=>d,pp:()=>i});n(62953);var a=n(47444);const o=(0,a.eU)({key:"spaceKeyAtom",default:0}),r=(0,a.eU)({key:"roomViewLoading",default:!0}),l=()=>(0,a.vc)(o),d=()=>{const[e,t]=(0,a.L4)(o);return()=>t(e+1)},c=()=>(0,a.vc)(r),i=()=>(0,a.L4)(r)},7356:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});var a=n(96540),o=n(47767),r=n(41122),l=n(18686);const d=e=>{let{spaceId:t,roomId:n,nodeName:d}=e;const{alertId:c}=(0,o.g)();return a.createElement(l.A,null,a.createElement(r.A,{alertId:c,spaceId:t,roomId:n,nodeName:d,isWebview:!0}))}},41122:(e,t,n)=>{n.d(t,{A:()=>_});var a=n(96540),o=n(83199),r=n(64118),l=n(28738),d=n(47731),c=n(69765),i=n(11164),s=n(43407),u=n(5871),m=n(52768),f=n(47767),g=n(27467),p=n(47762),v=n(8711);const y=(0,v.default)(o.Flex).attrs({alignItems:"center"}).withConfig({displayName:"styled__StyledButtonContainer",componentId:"sc-1glv09p-0"})(["position:sticky;bottom:0;"]);var h=n(38966);const I=(0,n(92155).A)(o.Button),E=e=>{let{disabled:t,nodeId:n,alertId:r,context:l,lastStatusChange:d,onClose:c,isLoading:i,small:s=!1,testid:u="alertDetailsModal"}=e;const m=(0,f.Zp)(),v=(0,p.Zl)(n),E=(0,a.useCallback)((()=>{c&&c(),m(v,r?{state:{alertId:r}}:{state:{contextToGo:l}})}),[v,r]),b=(0,g.rI)(),w=(0,a.useCallback)((()=>{const e=1e3*d;b({highlight:{after:e-6e4,before:e},correlation:!0}),E()}),[d,l,E,r]);return a.createElement(y,{justifyContent:"end",gap:2},a.createElement(o.Flex,{gap:2,justifyContent:"end"},a.createElement(I,{small:s,label:"Run correlations",onClick:w,flavour:"hollow",isLoading:i,width:s?"112px":"170px","data-testid":"".concat(u,"-runCorrelations-button"),"data-ga":"alert-modal::click-run-correlations::alerts-view",payload:{action:"Run correlations",alertId:r,nodeId:n}}),a.createElement(I,{small:s,label:"Go to chart",onClick:E,isLoading:i,disabled:i||t,width:s?"112px":"150px","data-testid":"".concat(u,"-goToNode-button"),"data-ga":"alert-modal::click-goto-chart::alerts-view",payload:{action:"Go to chart",alertId:r,nodeId:n}}),a.createElement(h.A,{alertId:r,nodeId:n,isLoading:i,small:s,"data-testid":"".concat(u,"-edit-alert-button")})))},b=(0,a.memo)(E);var w=n(7660),x=n(40267);const C=e=>{let{alertId:t,context:n,name:r,nodeId:l,status:c,lastStatusChange:i,fullyLoaded:s,isWebview:u}=e;const m=(0,d.J)(),f=m?o.H4:o.H0;return a.createElement(o.Flex,{column:!0,gap:4},a.createElement(o.Flex,{justifyContent:"between"},a.createElement(o.Flex,{alignItems:"center",gap:2},a.createElement(x.A,{margin:m?null:[.5,0,0],flavour:c,"data-testid":"alertView-statusPill"},c),a.createElement(f,{"data-testid":"alertView-alertName"},r)),!1),a.createElement(o.Flex,{justifyContent:"between",alignItems:"center"},a.createElement(w.A,{alertId:t}),!u&&s&&!m&&a.createElement(b,{lastStatusChange:i,alertId:t,context:n,name:r,nodeId:l,small:!0,testid:"alertView"})))};var A=n(68831),S=n(63314);const k=v.default.img.withConfig({displayName:"sc-404__Illustration",componentId:"sc-4w81fg-0"})(["height:35%;width:35%;"]),N=v.default.div.withConfig({displayName:"sc-404__ButtonContainer",componentId:"sc-4w81fg-1"})(["margin:",";"],(0,o.getSizeBy)(4)),L=()=>{const e="".concat(A.A.assetsBaseURL,"/img/no-nodes-room.svg");return a.createElement(S.DL,null,a.createElement(o.Flex,{column:!0,alignItems:"center",justifyItems:"center",justifyContent:"center",height:"100%",width:"100%",padding:[0,0,"10%"]},a.createElement(k,{src:e,alt:"Unreachable alert",title:"Unreachable alert"}),a.createElement(o.H3,null,"We couldn't find the alert"),a.createElement(o.Text,null,"This can be a temporary problem of that specific alert."),a.createElement(N,null,a.createElement(o.Button,{label:"Retry",icon:"reload"}))))};var R=n(4974),T=n(73865),D=n(85686);const V=e=>{let{children:t}=e;return a.createElement(o.Flex,{background:"modalHeaderBackground",height:12,flex:!1,gap:4,padding:[0,2,0,4],alignItems:"center"},a.createElement(o.Icon,{name:"logo_s",color:"success",width:"23px"}),t)},_=e=>{let{alertId:t,spaceId:n,roomId:f,isWebview:g,nodeName:p}=e;const v=(0,c.XA)("name"),{isNodeRestricted:y}=(0,T.A)(),{fullyLoaded:h=!1,fullyLoading:I=!0,info:E,units:b,lastStatusChangeValue:w,lastStatusChange:x,context:A,instance:k,name:N,nodeId:_,status:F,lastUpdated:j,value:B}=(0,r.JL)(t);(0,r.yk)(t,{spaceId:n,roomId:f});const U=(0,m.J4)(B,b),M=(0,m.J4)(w,b),O=(0,d.J)();return _&&y(_)?a.createElement(S.Ay,{feature:"AlertDetailsViewRestricted"},a.createElement(D.A,null)):a.createElement(S.Ay,{feature:"AlertDetailsView"},a.createElement(o.Flex,{column:!0,width:O?"100%":{max:280},padding:O?null:[0,0,10],background:O?"modalBackground":null},!g&&O&&a.createElement(V,null,a.createElement(o.Flex,{column:!0},a.createElement(o.H6,{color:"textLite"},"ROOM"),a.createElement(o.Text,{"data-testid":"alertView-mobile-roomName"},v))),a.createElement(o.Flex,{column:!0,padding:O?[3]:[0],overflow:O?"auto":"visible",gap:3},a.createElement(C,{alertId:t,context:A,status:F,name:N,nodeId:_,lastStatusChange:x,fullyLoaded:h,isWebview:g}),h?null:I?a.createElement(l.A,{title:"Loading alert..."}):a.createElement(L,null),h&&E&&a.createElement(a.Fragment,null,a.createElement(s.A,{iconName:"documentation"},"Alert Description"),a.createElement(o.Text,{"data-testid":"alertView-info"},E),a.createElement(R.A,{alertId:t})),h&&a.createElement(i.A,{id:t,context:A,instance:k,formattedLastValue:U,formattedLastStatusChangeValue:M,lastStatusChange:x,lastUpdated:j,isFormattedValueLoaded:h,nodeId:_,status:F,testid:"alertView",spaceId:n,roomId:f}),h&&a.createElement(u.A,{id:t,nodeName:p,testid:"alertView"})),O&&a.createElement(o.Box,{position:"sticky",padding:[4],background:"modalBackground",bottom:0,border:{side:"top",color:"border"}},a.createElement(o.TextSmall,null,"In order to ",a.createElement(o.TextSmall,{strong:!0},"Run Correlations")," or"," ",a.createElement(o.TextSmall,{strong:!0},"View the Chart")," you will have to visit this alert from its' dedicated page on a desktop device."))))}},20378:(e,t,n)=>{n.d(t,{Ay:()=>f,OS:()=>u,Q8:()=>m});n(62953);var a=n(96540),o=n(47444),r=n(3914),l=n(22292),d=n(79731),c=n(9224);const i=(0,o.Iz)({key:"userAccessAtom",default:{loaded:!1,loading:!1,userStatus:"notLoggedIn",userNodeStatus:"noAccess",nodeId:null,spaceId:null,roomIds:[],error:""}}),s=(0,o.Iz)({key:"checkUserAccess",default:()=>1}),u=()=>{var e;const t=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,n=(0,o.lZ)(s(t));return(0,a.useCallback)((()=>n((e=>e+1))),[t])},m=()=>{var e;const t=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg;return(0,o.L4)(i({machineGuid:t}))},f=()=>{var e;const t=(0,r.dg)(),n=null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.mg,[i,u]=(0,o.L4)(s(n)),[f,g]=m(n),{loading:p}=f,v=(0,l.uW)("isAnonymous");return(0,a.useEffect)((()=>{!p&&n&&t&&!v&&(g((e=>({loading:!0,nodeId:null,spaceId:null,roomIds:[],...e}))),(0,c.az)(n).then((e=>{let{data:t}=e;g({loading:!1,loaded:!0,...t,error:""})})).catch((e=>{var t;const n=null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.data;g({loading:!1,loaded:!0,error:(0,d.o)(null===n||void 0===n?void 0:n.errorMsgKey)||(null===n||void 0===n?void 0:n.errorMessage)||"Something went wrong",userStatus:"notLoggedIn",userNodeStatus:"noAccess",nodeId:null,spaceId:null,roomIds:[]})})))}),[n,i,t,v,p]),{...f,checkAgain:u}}},84428:(e,t,n)=>{var a=n(78227)("iterator"),o=!1;try{var r=0,l={next:function(){return{done:!!r++}},return:function(){o=!0}};l[a]=function(){return this},Array.from(l,(function(){throw 2}))}catch(d){}e.exports=function(e,t){try{if(!t&&!o)return!1}catch(d){return!1}var n=!1;try{var r={};r[a]=function(){return{next:function(){return{done:n=!0}}}},e(r)}catch(d){}return n}},87290:(e,t,n)=>{var a=n(50516),o=n(19088);e.exports=!a&&!o&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,t,n)=>{var a=n(24475),o=n(44576);e.exports="process"===o(a.process)},10916:(e,t,n)=>{var a=n(24475),o=n(80550),r=n(94901),l=n(92796),d=n(33706),c=n(78227),i=n(87290),s=n(50516),u=n(96395),m=n(77388),f=o&&o.prototype,g=c("species"),p=!1,v=r(a.PromiseRejectionEvent),y=l("Promise",(function(){var e=d(o),t=e!==String(o);if(!t&&66===m)return!0;if(u&&(!f.catch||!f.finally))return!0;if(!m||m<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),a=function(e){e((function(){}),(function(){}))};if((n.constructor={})[g]=a,!(p=n.then((function(){}))instanceof a))return!0}return!t&&(i||s)&&!v}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:v,SUBCLASSING:p}},90537:(e,t,n)=>{var a=n(80550),o=n(84428),r=n(10916).CONSTRUCTOR;e.exports=r||!o((function(e){a.all(e).then(void 0,(function(){}))}))},96167:(e,t,n)=>{var a=n(46518),o=n(69565),r=n(79306),l=n(36043),d=n(1103),c=n(72652);a({target:"Promise",stat:!0,forced:n(90537)},{allSettled:function(e){var t=this,n=l.f(t),a=n.resolve,i=n.reject,s=d((function(){var n=r(t.resolve),l=[],d=0,i=1;c(e,(function(e){var r=d++,c=!1;i++,o(n,t,e).then((function(e){c||(c=!0,l[r]={status:"fulfilled",value:e},--i||a(l))}),(function(e){c||(c=!0,l[r]={status:"rejected",reason:e},--i||a(l))}))})),--i||a(l)}));return s.error&&i(s.value),n.promise}})},33436:(e,t,n)=>{function a(e,{target:t=document.body}={}){if("string"!==typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const n=document.createElement("textarea"),a=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";const o=document.getSelection(),r=o.rangeCount>0&&o.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}return n.remove(),r&&(o.removeAllRanges(),o.addRange(r)),a&&a.focus(),l}n.d(t,{A:()=>a})},14123:(e,t,n)=>{function a(e){return t=>{const n=(e?Math[e]:Math.trunc)(t);return 0===n?0:n}}n.d(t,{u:()=>a})},25733:(e,t,n)=>{n.d(t,{z:()=>o});var a=n(2642);function o(e,t){const n=(0,a.a)(e),o=(0,a.a)(t),r=n.getTime()-o.getTime();return r<0?-1:r>0?1:r}},31826:(e,t,n)=>{n.d(t,{k:()=>s});var a=n(96519),o=n(82695),r=n(14123),l=n(40215),d=n(25733),c=n(2940),i=n(2642);function s(e,t,n){const s=(0,o.q)(),u=n?.locale??s.locale??a.c,m=(0,d.z)(e,t);if(isNaN(m))throw new RangeError("Invalid time value");const f=Object.assign({},n,{addSuffix:n?.addSuffix,comparison:m});let g,p;m>0?(g=(0,i.a)(t),p=(0,i.a)(e)):(g=(0,i.a)(e),p=(0,i.a)(t));const v=(0,r.u)(n?.roundingMethod??"round"),y=p.getTime()-g.getTime(),h=y/c.Cg,I=(y-((0,l.G)(p)-(0,l.G)(g)))/c.Cg,E=n?.unit;let b;if(b=E||(h<1?"second":h<60?"minute":h{"use strict";r.d(t,{Ay:()=>Lr});var n=r(74848),o=r(96540),a=r(78239),s=r(58156),i=r.n(s),c=r(62193),l=r.n(c),d=r(44383),u=r.n(d),f=r(42072),p=r.n(f),m=r(88055),h=r.n(m),y=r(23805),g=r.n(y),v=r(63560),$=r.n(v);let b=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce(((e,t)=>e+=(t&=63)<36?t.toString(36):t<62?(t-26).toString(36).toUpperCase():t>62?"-":"_"),"");function w(){return b()}function S(e){return Array.isArray(e)?e.map((e=>({key:w(),item:e}))):[]}function _(e){return Array.isArray(e)?e.map((e=>e.item)):[]}class x extends o.Component{constructor(e){super(e),this._getNewFormDataRow=()=>{const{schema:e,registry:t}=this.props,{schemaUtils:r}=t;let n=e.items;return(0,a.nQ)(e)&&(0,a.Hh)(e)&&(n=e.additionalItems),r.getDefaultFormState(n)},this.onAddClick=e=>{this._handleAddClick(e)},this.onAddIndexClick=e=>t=>{this._handleAddClick(t,e)},this.onCopyIndexClick=e=>t=>{t&&t.preventDefault();const{onChange:r,errorSchema:n}=this.props,{keyedFormData:o}=this.state;let a;if(n){a={};for(const t in n){const r=parseInt(t);r<=e?$()(a,[r],n[t]):r>e&&$()(a,[r+1],n[t])}}const s={key:w(),item:h()(o[e].item)},i=[...o];void 0!==e?i.splice(e+1,0,s):i.push(s),this.setState({keyedFormData:i,updatedKeyedFormData:!0},(()=>r(_(i),a)))},this.onDropIndexClick=e=>t=>{t&&t.preventDefault();const{onChange:r,errorSchema:n}=this.props,{keyedFormData:o}=this.state;let a;if(n){a={};for(const t in n){const r=parseInt(t);re&&$()(a,[r-1],n[t])}}const s=o.filter(((t,r)=>r!==e));this.setState({keyedFormData:s,updatedKeyedFormData:!0},(()=>r(_(s),a)))},this.onReorderClick=(e,t)=>r=>{r&&(r.preventDefault(),r.currentTarget.blur());const{onChange:n,errorSchema:o}=this.props;let a;if(o){a={};for(const r in o){const n=parseInt(r);n==e?$()(a,[t],o[e]):n==t?$()(a,[e],o[t]):$()(a,[r],o[n])}}const{keyedFormData:s}=this.state;const i=function(){const r=s.slice();return r.splice(e,1),r.splice(t,0,s[e]),r}();this.setState({keyedFormData:i},(()=>n(_(i),a)))},this.onChangeForIndex=e=>(t,r,n)=>{const{formData:o,onChange:a,errorSchema:s}=this.props,i=(Array.isArray(o)?o:[]).map(((r,n)=>e===n?"undefined"===typeof t?null:t:r));a(i,s&&s&&{...s,[e]:r},n)},this.onSelectChange=e=>{const{onChange:t,idSchema:r}=this.props;t(e,void 0,r&&r.$id)};const{formData:t=[]}=e,r=S(t);this.state={keyedFormData:r,updatedKeyedFormData:!1}}static getDerivedStateFromProps(e,t){if(t.updatedKeyedFormData)return{updatedKeyedFormData:!1};const r=Array.isArray(e.formData)?e.formData:[],n=t.keyedFormData||[];return{keyedFormData:r.length===n.length?n.map(((e,t)=>({key:e.key,item:r[t]}))):S(r)}}get itemTitle(){const{schema:e,registry:t}=this.props,{translateString:r}=t;return i()(e,[a.ZN,"title"],i()(e,[a.ZN,"description"],r(a.Zl.ArrayItemTitle)))}isItemRequired(e){return Array.isArray(e.type)?!e.type.includes("null"):"null"!==e.type}canAddItem(e){const{schema:t,uiSchema:r,registry:n}=this.props;let{addable:o}=(0,a.$R)(r,n.globalUiOptions);return!1!==o&&(o=void 0===t.maxItems||e.length=t&&$()(a,[r+1],n[e])}}const s={key:w(),item:this._getNewFormDataRow()},i=[...o];void 0!==t?i.splice(t,0,s):i.push(s),this.setState({keyedFormData:i,updatedKeyedFormData:!0},(()=>r(_(i),a)))}render(){const{schema:e,uiSchema:t,idSchema:r,registry:o}=this.props,{schemaUtils:s,translateString:i}=o;if(!(a.ZN in e)){const s=(0,a.$R)(t),c=(0,a.$F)("UnsupportedFieldTemplate",o,s);return(0,n.jsx)(c,{schema:e,idSchema:r,reason:i(a.Zl.MissingItems),registry:o})}return s.isMultiSelect(e)?this.renderMultiSelect():(0,a.ar)(t)?this.renderCustomWidget():(0,a.nQ)(e)?this.renderFixedArray():s.isFilesArray(e,t)?this.renderFiles():this.renderNormalArray()}renderNormalArray(){const{schema:e,uiSchema:t={},errorSchema:r,idSchema:o,name:s,title:i,disabled:c=!1,readonly:l=!1,autofocus:d=!1,required:u=!1,registry:f,onBlur:p,onFocus:m,idPrefix:h,idSeparator:y="_",rawErrors:v}=this.props,{keyedFormData:$}=this.state,b=e.title||i||s,{schemaUtils:w,formContext:S}=f,x=(0,a.$R)(t),E=g()(e.items)?e.items:{},k=w.retrieveSchema(E),j=_(this.state.keyedFormData),C=this.canAddItem(j),P={canAdd:C,items:$.map(((e,n)=>{const{key:a,item:i}=e,c=i,l=w.retrieveSchema(E,c),u=r?r[n]:void 0,f=o.$id+y+n,g=w.toIdSchema(l,f,c,h,y);return this.renderArrayFieldItem({key:a,index:n,name:s&&`${s}-${n}`,title:b?`${b}-${n+1}`:void 0,canAdd:C,canMoveUp:n>0,canMoveDown:nx.retrieveSchema(e,r[t]))),j=g()(e.additionalItems)?x.retrieveSchema(e.additionalItems,r):null;(!w||w.length{const{key:a,item:d}=r,u=d,f=n>=k.length,m=(f&&g()(e.additionalItems)?x.retrieveSchema(e.additionalItems,u):k[n])||{},h=c.$id+i+n,_=x.toIdSchema(m,h,u,s,i),E=f?t.additionalItems||{}:Array.isArray(t.items)?t.items[n]:t.items||{},j=o?o[n]:void 0;return this.renderArrayFieldItem({key:a,index:n,name:l&&`${l}-${n}`,title:S?`${S}-${n+1}`:void 0,canAdd:C,canRemove:f,canMoveUp:n>=k.length+1,canMoveDown:f&&nT[e])),{children:(0,n.jsx)(A,{name:o,title:b,index:r,schema:d,uiSchema:f,formData:u,formContext:C,errorSchema:m,idPrefix:_,idSeparator:x,idSchema:p,required:this.isItemRequired(d),onChange:this.onChangeForIndex(r),onBlur:y,onFocus:g,registry:j,disabled:w,readonly:E,hideError:S,autofocus:h,rawErrors:v}),className:"array-item",disabled:w,canAdd:s,hasCopy:T.copy,hasToolbar:T.toolbar,hasMoveUp:T.moveUp,hasMoveDown:T.moveDown,hasRemove:T.remove,index:r,totalItems:$,key:t,onAddIndexClick:this.onAddIndexClick,onCopyIndexClick:this.onCopyIndexClick,onDropIndexClick:this.onDropIndexClick,onReorderClick:this.onReorderClick,readonly:E,registry:j,schema:d,uiSchema:f}}}const E=x;const k=function(e){var t,r,o;const{schema:s,name:i,uiSchema:c,idSchema:l,formData:d,registry:u,required:f,disabled:p,readonly:m,hideError:h,autofocus:y,title:v,onChange:$,onFocus:b,onBlur:w,rawErrors:S}=e,{title:_}=s,{widgets:x,formContext:E,translateString:k,globalUiOptions:j}=u,{widget:C="checkbox",title:P,label:O=!0,...N}=(0,a.$R)(c,j),A=(0,a.Bt)(s,C,x),D=k(a.Zl.YesLabel),I=k(a.Zl.NoLabel);let F;const T=null!==(r=null!==(t=null!==P&&void 0!==P?P:_)&&void 0!==t?t:v)&&void 0!==r?r:i;if(Array.isArray(s.oneOf))F=(0,a.f9)({oneOf:s.oneOf.map((e=>{if(g()(e))return{...e,title:e.title||(!0===e.const?D:I)}})).filter((e=>e))});else{const e=s,t=null!==(o=s.enum)&&void 0!==o?o:[!0,!1];F=!e.enumNames&&2===t.length&&t.every((e=>"boolean"===typeof e))?[{value:t[0],label:t[0]?D:I},{value:t[1],label:t[1]?D:I}]:(0,a.f9)({enum:t,enumNames:e.enumNames})}return(0,n.jsx)(A,{options:{...N,enumOptions:F},schema:s,uiSchema:c,id:l.$id,name:i,onChange:$,onFocus:b,onBlur:w,label:T,hideLabel:!O,value:d,required:f,disabled:p,readonly:m,hideError:h,registry:u,formContext:E,autofocus:y,rawErrors:S})};var j=r(90179),C=r.n(j);class P extends o.Component{constructor(e){super(e),this.onOptionChange=e=>{const{selectedOption:t,retrievedOptions:r}=this.state,{formData:n,onChange:o,registry:a}=this.props,{schemaUtils:s}=a,i=void 0!==e?parseInt(e,10):-1;if(i===t)return;const c=i>=0?r[i]:void 0,l=t>=0?r[t]:void 0;let d=s.sanitizeDataForNewSchema(c,l,n);d&&c&&(d=s.getDefaultFormState(c,d,"excludeObjectChildren")),o(d,void 0,this.getFieldId()),this.setState({selectedOption:i})};const{formData:t,options:r,registry:{schemaUtils:n}}=this.props,o=r.map((e=>n.retrieveSchema(e,t)));this.state={retrievedOptions:o,selectedOption:this.getMatchingOption(0,t,o)}}componentDidUpdate(e,t){const{formData:r,options:n,idSchema:o}=this.props,{selectedOption:s}=this.state;let i=this.state;if(!(0,a.c2)(e.options,n)){const{registry:{schemaUtils:e}}=this.props;i={selectedOption:s,retrievedOptions:n.map((t=>e.retrieveSchema(t,r)))}}if(!(0,a.c2)(r,e.formData)&&o.$id===e.idSchema.$id){const{retrievedOptions:e}=i,n=this.getMatchingOption(s,r,e);t&&n!==s&&(i={selectedOption:n,retrievedOptions:e})}i!==this.state&&this.setState(i)}getMatchingOption(e,t,r){const{schema:n,registry:{schemaUtils:o}}=this.props,s=(0,a.KU)(n);return o.getClosestMatchingOption(t,r,e,s)}getFieldId(){const{idSchema:e,schema:t}=this.props;return`${e.$id}${t.oneOf?"__oneof_select":"__anyof_select"}`}render(){const{name:e,disabled:t=!1,errorSchema:r={},formContext:o,onBlur:s,onFocus:c,registry:d,schema:u,uiSchema:f}=this.props,{widgets:p,fields:m,translateString:h,globalUiOptions:y,schemaUtils:g}=d,{SchemaField:v}=m,{selectedOption:$,retrievedOptions:b}=this.state,{widget:w="select",placeholder:S,autofocus:_,autocomplete:x,title:E=u.title,...k}=(0,a.$R)(f,y),j=(0,a.Bt)({type:"number"},w,p),P=i()(r,a.s2,[]),O=C()(r,[a.s2]),N=g.getDisplayLabel(u,f,y),A=$>=0&&b[$]||null;let D;if(A){const{required:e}=u;D=e?(0,a.dW)({required:e},A):A}let I=[];a.Ru in u&&f&&a.Ru in f?Array.isArray(f[a.Ru])?I=f[a.Ru]:console.warn(`uiSchema.oneOf is not an array for "${E||e}"`):a.Xo in u&&f&&a.Xo in f&&(Array.isArray(f[a.Xo])?I=f[a.Xo]:console.warn(`uiSchema.anyOf is not an array for "${E||e}"`));let F=f;$>=0&&I.length>$&&(F=I[$]);const T=E?a.Zl.TitleOptionPrefix:a.Zl.OptionPrefix,R=E?[E]:[],M=b.map(((e,t)=>{const{title:r=e.title}=(0,a.$R)(I[t]);return{label:r||h(T,R.concat(String(t+1))),value:t}}));return(0,n.jsxs)("div",{className:"panel panel-default panel-body",children:[(0,n.jsx)("div",{className:"form-group",children:(0,n.jsx)(j,{id:this.getFieldId(),name:`${e}${u.oneOf?"__oneof_select":"__anyof_select"}`,schema:{type:"number",default:0},onChange:this.onOptionChange,onBlur:s,onFocus:c,disabled:t||l()(M),multiple:!1,rawErrors:P,errorSchema:O,value:$>=0?$:void 0,options:{enumOptions:M,...k},registry:d,formContext:o,placeholder:S,autocomplete:x,autofocus:_,label:null!==E&&void 0!==E?E:e,hideLabel:!N})}),D&&(0,n.jsx)(v,{...this.props,schema:D,uiSchema:F})]})}}const O=P,N=/\.([0-9]*0)*$/,A=/[0.]0*$/;const D=function(e){const{registry:t,onChange:r,formData:s,value:i}=e,[c,l]=(0,o.useState)(i),{StringField:d}=t.fields;let u=s;const f=(0,o.useCallback)((e=>{l(e),"."===`${e}`.charAt(0)&&(e=`0${e}`);const t="string"===typeof e&&e.match(N)?(0,a.i)(e.replace(A,"")):(0,a.i)(e);r(t)}),[r]);if("string"===typeof c&&"number"===typeof u){const e=new RegExp(`${u}`.replace(".","\\.")+"\\.?0*$");c.match(e)&&(u=c)}return(0,n.jsx)(d,{...e,formData:u,onChange:f})};function I(){return I=Object.assign?Object.assign.bind():function(e){for(var t=1;t(e[t.toLowerCase()]=t,e)),{for:"htmlFor"}),V={amp:"&",apos:"'",gt:">",lt:"<",nbsp:"\xa0",quot:"\u201c"},B=["style","script"],q=/([-A-Z0-9_:]+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|(?:\{((?:\\.|{[^}]*?}|[^}])*)\})))?/gi,z=/mailto:/i,L=/\n{2,}$/,K=/^(\s*>[\s\S]*?)(?=\n{2,})/,W=/^ *> ?/gm,H=/^ {2,}\n/,G=/^(?:( *[-*_])){3,} *(?:\n *)+\n/,Z=/^\s*(`{3,}|~{3,}) *(\S+)?([^\n]*?)?\n([\s\S]+?)\s*\1 *(?:\n *)*\n?/,J=/^(?: {4}[^\n]+\n*)+(?:\n *)+\n?/,Y=/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,Q=/^(?:\n *)*\n/,X=/\r\n?/g,ee=/^\[\^([^\]]+)](:(.*)((\n+ {4,}.*)|(\n(?!\[\^).+))*)/,te=/^\[\^([^\]]+)]/,re=/\f/g,ne=/^---[ \t]*\n(.|\n)*\n---[ \t]*\n/,oe=/^\s*?\[(x|\s)\]/,ae=/^ *(#{1,6}) *([^\n]+?)(?: +#*)?(?:\n *)*(?:\n|$)/,se=/^ *(#{1,6}) +([^\n]+?)(?: +#*)?(?:\n *)*(?:\n|$)/,ie=/^([^\n]+)\n *(=|-){3,} *(?:\n *)+\n/,ce=/^ *(?!<[a-z][^ >/]* ?\/>)<([a-z][^ >/]*) ?([^>]*)>\n?(\s*(?:<\1[^>]*?>[\s\S]*?<\/\1>|(?!<\1\b)[\s\S])*?)<\/\1>(?!<\/\1>)\n*/i,le=/&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi,de=/^)/,ue=/^(data|aria|x)-[a-z_][a-z\d_.-]*$/,fe=/^ *<([a-z][a-z0-9:]*)(?:\s+((?:<.*?>|[^>])*))?\/?>(?!<\/\1>)(\s*\n)?/i,pe=/^\{.*\}$/,me=/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,he=/^<([^ >]+@[^ >]+)>/,ye=/^<([^ >]+:\/[^ >]+)>/,ge=/-([a-z])?/gi,ve=/^(.*\|?.*)\n *(\|? *[-:]+ *\|[-| :]*)\n((?:.*\|.*\n)*)\n?/,$e=/^\[([^\]]*)\]:\s+]+)>?\s*("([^"]*)")?/,be=/^!\[([^\]]*)\] ?\[([^\]]*)\]/,we=/^\[([^\]]*)\] ?\[([^\]]*)\]/,Se=/(\[|\])/g,_e=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s)/,xe=/\t/g,Ee=/^ *\| */,ke=/(^ *\||\| *$)/g,je=/ *$/,Ce=/^ *:-+: *$/,Pe=/^ *:-+ *$/,Oe=/^ *-+: *$/,Ne="((?:\\[.*?\\][([].*?[)\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|~~.*?~~|==.*?==|.|\\n)*?)",Ae=new RegExp(`^([*_])\\1${Ne}\\1\\1(?!\\1)`),De=new RegExp(`^([*_])${Ne}\\1(?!\\1|\\w)`),Ie=new RegExp(`^==${Ne}==`),Fe=new RegExp(`^~~${Ne}~~`),Te=/^\\([^0-9A-Za-z\s])/,Re=/^[\s\S]+?(?=[^0-9A-Z\s\u00c0-\uffff&#;.()'"]|\d+\.|\n\n| {2,}\n|\w+:\S|$)/i,Me=/^\n+/,Ue=/^([ \t]*)/,Ve=/\\([^\\])/g,Be=/ *\n+$/,qe=/(?:^|\n)( *)$/,ze="(?:\\d+\\.)",Le="(?:[*+-])";function Ke(e){return"( *)("+(1===e?ze:Le)+") +"}const We=Ke(1),He=Ke(2);function Ge(e){return new RegExp("^"+(1===e?We:He))}const Ze=Ge(1),Je=Ge(2);function Ye(e){return new RegExp("^"+(1===e?We:He)+"[^\\n]*(?:\\n(?!\\1"+(1===e?ze:Le)+" )[^\\n]*)*(\\n|$)","gm")}const Qe=Ye(1),Xe=Ye(2);function et(e){const t=1===e?ze:Le;return new RegExp("^( *)("+t+") [\\s\\S]+?(?:\\n{2,}(?! )(?!\\1"+t+" (?!"+t+" ))\\n*|\\s*\\n*$)")}const tt=et(1),rt=et(2);function nt(e,t){const r=1===t,n=r?tt:rt,o=r?Qe:Xe,a=r?Ze:Je;return{match(e,t,r){const o=qe.exec(r);return o&&(t.list||!t.inline&&!t.simple)?n.exec(e=o[1]+e):null},order:1,parse(e,t,n){const s=r?+e[2]:void 0,i=e[0].replace(L,"\n").match(o);let c=!1;return{items:i.map((function(e,r){const o=a.exec(e)[0].length,s=new RegExp("^ {1,"+o+"}","gm"),l=e.replace(s,"").replace(a,""),d=r===i.length-1,u=-1!==l.indexOf("\n\n")||d&&c;c=u;const f=n.inline,p=n.list;let m;n.list=!0,u?(n.inline=!1,m=l.replace(Be,"\n\n")):(n.inline=!0,m=l.replace(Be,""));const h=t(m,n);return n.inline=f,n.list=p,h})),ordered:r,start:s}},render:(t,r,n)=>e(t.ordered?"ol":"ul",{key:n.key,start:"20"===t.type?t.start:void 0},t.items.map((function(t,o){return e("li",{key:o},r(t,n))})))}}const ot=new RegExp("^\\[((?:\\[[^\\]]*\\]|[^\\[\\]]|\\](?=[^\\[]*\\]))*)\\]\\(\\s*?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*\\)"),at=/^!\[(.*?)\]\( *((?:\([^)]*\)|[^() ])*) *"?([^)"]*)?"?\)/,st=[K,Z,J,ae,ie,se,de,ve,Qe,tt,Xe,rt],it=[...st,/^[^\n]+(?: \n|\n{2,})/,ce,fe];function ct(e){return e.replace(/[\xc0\xc1\xc2\xc3\xc4\xc5\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xc6]/g,"a").replace(/[\xe7\xc7]/g,"c").replace(/[\xf0\xd0]/g,"d").replace(/[\xc8\xc9\xca\xcb\xe9\xe8\xea\xeb]/g,"e").replace(/[\xcf\xef\xce\xee\xcd\xed\xcc\xec]/g,"i").replace(/[\xd1\xf1]/g,"n").replace(/[\xf8\xd8\u0153\u0152\xd5\xf5\xd4\xf4\xd3\xf3\xd2\xf2]/g,"o").replace(/[\xdc\xfc\xdb\xfb\xda\xfa\xd9\xf9]/g,"u").replace(/[\u0178\xff\xdd\xfd]/g,"y").replace(/[^a-z0-9- ]/gi,"").replace(/ /gi,"-").toLowerCase()}function lt(e){return Oe.test(e)?"right":Ce.test(e)?"center":Pe.test(e)?"left":null}function dt(e,t,r){const n=r.inTable;r.inTable=!0;const o=t(e.trim(),r);r.inTable=n;let a=[[]];return o.forEach((function(e,t){"26"===e.type?0!==t&&t!==o.length-1&&a.push([]):("27"!==e.type||null!=o[t+1]&&"26"!==o[t+1].type||(e.text=e.text.replace(je,"")),a[a.length-1].push(e))})),a}function ut(e,t,r){r.inline=!0;const n=dt(e[1],t,r),o=e[2].replace(ke,"").split("|").map(lt),a=function(e,t,r){return e.trim().split("\n").map((function(e){return dt(e,t,r)}))}(e[3],t,r);return r.inline=!1,{align:o,cells:a,header:n,type:"25"}}function ft(e,t){return null==e.align[t]?{}:{textAlign:e.align[t]}}function pt(e){return function(t,r){return r.inline?e.exec(t):null}}function mt(e){return function(t,r){return r.inline||r.simple?e.exec(t):null}}function ht(e){return function(t,r){return r.inline||r.simple?null:e.exec(t)}}function yt(e){return function(t){return e.exec(t)}}function gt(e,t,r){if(t.inline||t.simple)return null;if(r&&!r.endsWith("\n"))return null;let n="";e.split("\n").every((e=>!st.some((t=>t.test(e)))&&(n+=e+"\n",e.trim())));const o=n.trimEnd();return""==o?null:[n,o]}function vt(e){try{if(decodeURIComponent(e).replace(/[^A-Za-z0-9/:]/g,"").match(/^\s*(javascript|vbscript|data(?!:image)):/i))return}catch(e){return null}return e}function $t(e){return e.replace(Ve,"$1")}function bt(e,t,r){const n=r.inline||!1,o=r.simple||!1;r.inline=!0,r.simple=!0;const a=e(t,r);return r.inline=n,r.simple=o,a}function wt(e,t,r){const n=r.inline||!1,o=r.simple||!1;r.inline=!1,r.simple=!0;const a=e(t,r);return r.inline=n,r.simple=o,a}function St(e,t,r){return r.inline=!1,e(t,r)}const _t=(e,t,r)=>({children:bt(t,e[1],r)});function xt(){return{}}function Et(){return null}function kt(...e){return e.filter(Boolean).join(" ")}function jt(e,t,r){let n=e;const o=t.split(".");for(;o.length&&(n=n[o[0]],void 0!==n);)o.shift();return n||r}function Ct(e="",t={}){t.overrides=t.overrides||{},t.slugify=t.slugify||ct,t.namedCodesToUnicode=t.namedCodesToUnicode?I({},V,t.namedCodesToUnicode):V;const r=t.createElement||o.createElement;function n(e,n,...o){const a=jt(t.overrides,`${e}.props`,{});return r(function(e,t){const r=jt(t,e);return r?"function"==typeof r||"object"==typeof r&&"render"in r?r:jt(t,`${e}.component`,e):e}(e,t.overrides),I({},n,a,{className:kt(null==n?void 0:n.className,a.className)||void 0}),...o)}function a(e){e=e.replace(ne,"");let r=!1;t.forceInline?r=!0:t.forceBlock||(r=!1===_e.test(e));const a=u(d(r?e:`${e.trimEnd().replace(Me,"")}\n\n`,{inline:r}));for(;"string"==typeof a[a.length-1]&&!a[a.length-1].trim();)a.pop();if(null===t.wrapper)return a;const s=t.wrapper||(r?"span":"div");let i;if(a.length>1||t.forceWrapper)i=a;else{if(1===a.length)return i=a[0],"string"==typeof i?n("span",{key:"outer"},i):i;i=null}return o.createElement(s,{key:"outer"},i)}function s(e){const t=e.match(q);return t?t.reduce((function(e,t,r){const n=t.indexOf("=");if(-1!==n){const s=function(e){return-1!==e.indexOf("-")&&null===e.match(ue)&&(e=e.replace(ge,(function(e,t){return t.toUpperCase()}))),e}(t.slice(0,n)).trim(),i=function(e){const t=e[0];return('"'===t||"'"===t)&&e.length>=2&&e[e.length-1]===t?e.slice(1,-1):e}(t.slice(n+1).trim()),c=U[s]||s,l=e[c]=function(e,t){return"style"===e?t.split(/;\s?/).reduce((function(e,t){const r=t.slice(0,t.indexOf(":"));return e[r.trim().replace(/(-[a-z])/g,(e=>e[1].toUpperCase()))]=t.slice(r.length+1).trim(),e}),{}):"href"===e||"src"===e?vt(t):(t.match(pe)&&(t=t.slice(1,t.length-1)),"true"===t||"false"!==t&&t)}(s,i);"string"==typeof l&&(ce.test(l)||fe.test(l))&&(e[c]=o.cloneElement(a(l.trim()),{key:r}))}else"style"!==t&&(e[U[t]||t]=!0);return e}),{}):null}const i=[],c={},l={0:{match:ht(K),order:1,parse:(e,t,r)=>({children:t(e[0].replace(W,""),r)}),render:(e,t,r)=>n("blockquote",{key:r.key},t(e.children,r))},1:{match:yt(H),order:1,parse:xt,render:(e,t,r)=>n("br",{key:r.key})},2:{match:ht(G),order:1,parse:xt,render:(e,t,r)=>n("hr",{key:r.key})},3:{match:ht(J),order:0,parse:e=>({lang:void 0,text:e[0].replace(/^ {4}/gm,"").replace(/\n+$/,"")}),render:(e,t,r)=>n("pre",{key:r.key},n("code",I({},e.attrs,{className:e.lang?`lang-${e.lang}`:""}),e.text))},4:{match:ht(Z),order:0,parse:e=>({attrs:s(e[3]||""),lang:e[2]||void 0,text:e[4],type:"3"})},5:{match:mt(Y),order:3,parse:e=>({text:e[2]}),render:(e,t,r)=>n("code",{key:r.key},e.text)},6:{match:ht(ee),order:0,parse:e=>(i.push({footnote:e[2],identifier:e[1]}),{}),render:Et},7:{match:pt(te),order:1,parse:e=>({target:`#${t.slugify(e[1])}`,text:e[1]}),render:(e,t,r)=>n("a",{key:r.key,href:vt(e.target)},n("sup",{key:r.key},e.text))},8:{match:pt(oe),order:1,parse:e=>({completed:"x"===e[1].toLowerCase()}),render:(e,t,r)=>n("input",{checked:e.completed,key:r.key,readOnly:!0,type:"checkbox"})},9:{match:ht(t.enforceAtxHeadings?se:ae),order:1,parse:(e,r,n)=>({children:bt(r,e[2],n),id:t.slugify(e[2]),level:e[1].length}),render:(e,t,r)=>n(`h${e.level}`,{id:e.id,key:r.key},t(e.children,r))},10:{match:ht(ie),order:0,parse:(e,t,r)=>({children:bt(t,e[1],r),level:"="===e[2]?1:2,type:"9"})},11:{match:yt(ce),order:1,parse(e,t,r){const[,n]=e[3].match(Ue),o=new RegExp(`^${n}`,"gm"),a=e[3].replace(o,""),i=(c=a,it.some((e=>e.test(c)))?St:bt);var c;const l=e[1].toLowerCase(),d=-1!==B.indexOf(l),u={attrs:s(e[2]),noInnerParse:d,tag:(d?l:e[1]).trim()};return r.inAnchor=r.inAnchor||"a"===l,d?u.text=e[3]:u.children=i(t,a,r),r.inAnchor=!1,u},render:(e,t,r)=>n(e.tag,I({key:r.key},e.attrs),e.text||t(e.children,r))},13:{match:yt(fe),order:1,parse:e=>({attrs:s(e[2]||""),tag:e[1].trim()}),render:(e,t,r)=>n(e.tag,I({},e.attrs,{key:r.key}))},12:{match:yt(de),order:1,parse:()=>({}),render:Et},14:{match:mt(at),order:1,parse:e=>({alt:e[1],target:$t(e[2]),title:e[3]}),render:(e,t,r)=>n("img",{key:r.key,alt:e.alt||void 0,title:e.title||void 0,src:vt(e.target)})},15:{match:pt(ot),order:3,parse:(e,t,r)=>({children:wt(t,e[1],r),target:$t(e[2]),title:e[3]}),render:(e,t,r)=>n("a",{key:r.key,href:vt(e.target),title:e.title},t(e.children,r))},16:{match:pt(ye),order:0,parse:e=>({children:[{text:e[1],type:"27"}],target:e[1],type:"15"})},17:{match:(e,t)=>t.inAnchor?null:pt(me)(e,t),order:0,parse:e=>({children:[{text:e[1],type:"27"}],target:e[1],title:void 0,type:"15"})},18:{match:pt(he),order:0,parse(e){let t=e[1],r=e[1];return z.test(r)||(r="mailto:"+r),{children:[{text:t.replace("mailto:",""),type:"27"}],target:r,type:"15"}}},20:nt(n,1),33:nt(n,2),19:{match:ht(Q),order:3,parse:xt,render:()=>"\n"},21:{match:gt,order:3,parse:_t,render:(e,t,r)=>n("p",{key:r.key},t(e.children,r))},22:{match:pt($e),order:0,parse:e=>(c[e[1]]={target:e[2],title:e[4]},{}),render:Et},23:{match:mt(be),order:0,parse:e=>({alt:e[1]||void 0,ref:e[2]}),render:(e,t,r)=>c[e.ref]?n("img",{key:r.key,alt:e.alt,src:vt(c[e.ref].target),title:c[e.ref].title}):null},24:{match:pt(we),order:0,parse:(e,t,r)=>({children:t(e[1],r),fallbackChildren:t(e[0].replace(Se,"\\$1"),r),ref:e[2]}),render:(e,t,r)=>c[e.ref]?n("a",{key:r.key,href:vt(c[e.ref].target),title:c[e.ref].title},t(e.children,r)):n("span",{key:r.key},t(e.fallbackChildren,r))},25:{match:ht(ve),order:1,parse:ut,render:(e,t,r)=>n("table",{key:r.key},n("thead",null,n("tr",null,e.header.map((function(o,a){return n("th",{key:a,style:ft(e,a)},t(o,r))})))),n("tbody",null,e.cells.map((function(o,a){return n("tr",{key:a},o.map((function(o,a){return n("td",{key:a,style:ft(e,a)},t(o,r))})))}))))},26:{match:function(e,t){return t.inTable?(t.inline=!0,Ee.exec(e)):null},order:1,parse:function(){return{type:"26"}},render:()=>" | "},27:{match:yt(Re),order:4,parse:e=>({text:e[0].replace(le,((e,r)=>t.namedCodesToUnicode[r]?t.namedCodesToUnicode[r]:e))}),render:e=>e.text},28:{match:mt(Ae),order:2,parse:(e,t,r)=>({children:t(e[2],r)}),render:(e,t,r)=>n("strong",{key:r.key},t(e.children,r))},29:{match:mt(De),order:3,parse:(e,t,r)=>({children:t(e[2],r)}),render:(e,t,r)=>n("em",{key:r.key},t(e.children,r))},30:{match:mt(Te),order:1,parse:e=>({text:e[1],type:"27"})},31:{match:mt(Ie),order:3,parse:_t,render:(e,t,r)=>n("mark",{key:r.key},t(e.children,r))},32:{match:mt(Fe),order:3,parse:_t,render:(e,t,r)=>n("del",{key:r.key},t(e.children,r))}};!0===t.disableParsingRawHTML&&(delete l[11],delete l[13]);const d=function(e){let t=Object.keys(e);function r(n,o){let a=[],s="";for(;n;){let i=0;for(;ia(r,n,o)),r,n,o):a(r,n,o)}}(l,t.renderRule),function e(t,r={}){if(Array.isArray(t)){const n=r.key,o=[];let a=!1;for(let s=0;s{let{children:t="",options:r}=e,n=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,F);return o.cloneElement(Ct(t,r),n)};var Ot=r(61448),Nt=r.n(Ot),At=r(73357),Dt=r.n(At);class It extends o.Component{constructor(){super(...arguments),this.state={wasPropertyKeyModified:!1,additionalProperties:{}},this.onPropertyChange=(e,t=!1)=>(r,n,o)=>{const{formData:a,onChange:s,errorSchema:i}=this.props;void 0===r&&t&&(r="");s({...a,[e]:r},i&&i&&{...i,[e]:n},o)},this.onDropPropertyClick=e=>t=>{t.preventDefault();const{onChange:r,formData:n}=this.props,o={...n};Dt()(o,e),r(o)},this.getAvailableKey=(e,t)=>{const{uiSchema:r,registry:n}=this.props,{duplicateKeySuffixSeparator:o="-"}=(0,a.$R)(r,n.globalUiOptions);let s=0,i=e;for(;Nt()(t,i);)i=`${e}${o}${++s}`;return i},this.onKeyChange=e=>(t,r)=>{if(e===t)return;const{formData:n,onChange:o,errorSchema:a}=this.props;t=this.getAvailableKey(t,n);const s={...n},i={[e]:t},c=Object.keys(s).map((e=>({[i[e]||e]:s[e]}))),l=Object.assign({},...c);this.setState({wasPropertyKeyModified:!0}),o(l,a&&a&&{...a,[t]:r})},this.handleAddClick=e=>()=>{if(!e.additionalProperties)return;const{formData:t,onChange:r,registry:n}=this.props,o={...t};let s;if(g()(e.additionalProperties)){s=e.additionalProperties.type;let r=e.additionalProperties;if(a.Es in r){const{schemaUtils:e}=n;r=e.retrieveSchema({$ref:r[a.Es]},t),s=r.type}s||!(a.Xo in r)&&!(a.Ru in r)||(s="object")}const i=this.getAvailableKey("newKey",o);$()(o,i,this.getDefaultValue(s)),r(o)}}isRequired(e){const{schema:t}=this.props;return Array.isArray(t.required)&&-1!==t.required.indexOf(e)}getDefaultValue(e){const{registry:{translateString:t}}=this.props;switch(e){case"array":return[];case"boolean":return!1;case"null":return null;case"number":return 0;case"object":return{};default:return t(a.Zl.NewStringDefault)}}render(){var e,t,r,o;const{schema:s,uiSchema:c={},formData:l,errorSchema:d,idSchema:u,name:f,required:p=!1,disabled:m=!1,readonly:h=!1,hideError:y,idPrefix:g,idSeparator:v,onBlur:$,onFocus:b,registry:w,title:S}=this.props,{fields:_,formContext:x,schemaUtils:E,translateString:k,globalUiOptions:j}=w,{SchemaField:C}=_,P=E.retrieveSchema(s,l),O=(0,a.$R)(c,j),{properties:N={}}=P,A=null!==(r=null!==(t=null!==(e=O.title)&&void 0!==e?e:P.title)&&void 0!==t?t:S)&&void 0!==r?r:f,D=null!==(o=O.description)&&void 0!==o?o:P.description;let I;try{const e=Object.keys(N);I=(0,a.UI)(e,O.order)}catch(R){return(0,n.jsxs)("div",{children:[(0,n.jsx)("p",{className:"config-error",style:{color:"red"},children:(0,n.jsx)(Pt,{children:k(a.Zl.InvalidObjectField,[f||"root",R.message])})}),(0,n.jsx)("pre",{children:JSON.stringify(P)})]})}const F=(0,a.$F)("ObjectFieldTemplate",w,O),T={title:!1===O.label?"":A,description:!1===O.label?void 0:D,properties:I.map((e=>{const t=Nt()(P,[a.s1,e,a.Rr]),r=t?c.additionalProperties:c[e],o="hidden"===(0,a.$R)(r).widget,s=i()(u,[e],{});return{content:(0,n.jsx)(C,{name:e,required:this.isRequired(e),schema:i()(P,[a.s1,e],{}),uiSchema:r,errorSchema:i()(d,e),idSchema:s,idPrefix:g,idSeparator:v,formData:i()(l,e),formContext:x,wasPropertyKeyModified:this.state.wasPropertyKeyModified,onKeyChange:this.onKeyChange(e),onChange:this.onPropertyChange(e,t),onBlur:$,onFocus:b,registry:w,disabled:m,readonly:h,hideError:y,onDropPropertyClick:this.onDropPropertyClick},e),name:e,readonly:h,disabled:m,required:p,hidden:o}})),readonly:h,disabled:m,required:p,idSchema:u,uiSchema:c,errorSchema:d,schema:P,formData:l,formContext:x,registry:w};return(0,n.jsx)(F,{...T,onAddClick:this.handleAddClick})}}const Ft=It,Tt={array:"ArrayField",boolean:"BooleanField",integer:"NumberField",number:"NumberField",object:"ObjectField",string:"StringField",null:"NullField"};function Rt(e){const{schema:t,idSchema:r,uiSchema:s,formData:i,errorSchema:c,idPrefix:l,idSeparator:d,name:u,onChange:f,onKeyChange:p,onDropPropertyClick:m,required:h,registry:y,wasPropertyKeyModified:v=!1}=e,{formContext:$,schemaUtils:b,globalUiOptions:w}=y,S=(0,a.$R)(s,w),_=(0,a.$F)("FieldTemplate",y,S),x=(0,a.$F)("DescriptionFieldTemplate",y,S),E=(0,a.$F)("FieldHelpTemplate",y,S),k=(0,a.$F)("FieldErrorTemplate",y,S),j=b.retrieveSchema(t,i),P=r[a.K0],O=(0,a.rL)(b.toIdSchema(j,P,i,l,d),r),N=(0,o.useCallback)(((e,t,r)=>f(e,t,r||P)),[P,f]),A=function(e,t,r,o){const s=t.field,{fields:i,translateString:c}=o;if("function"===typeof s)return s;if("string"===typeof s&&s in i)return i[s];const l=(0,a._I)(e),d=Array.isArray(l)?l[0]:l||"",u=e.$id;let f=Tt[d];return u&&u in i&&(f=u),f||!e.anyOf&&!e.oneOf?f in i?i[f]:()=>{const s=(0,a.$F)("UnsupportedFieldTemplate",o,t);return(0,n.jsx)(s,{schema:e,idSchema:r,reason:c(a.Zl.UnknownFieldType,[String(e.type)]),registry:o})}:()=>null}(j,S,O,y),D=Boolean(e.disabled||S.disabled),I=Boolean(e.readonly||S.readonly||e.schema.readOnly||j.readOnly),F=S.hideError,T=void 0===F?e.hideError:Boolean(F),R=Boolean(e.autofocus||S.autofocus);if(0===Object.keys(j).length)return null;const M=b.getDisplayLabel(j,s,w),{__errors:U,...V}=c||{},B=C()(s,["ui:classNames","classNames","ui:style"]);a.ce in B&&(B[a.ce]=C()(B[a.ce],["classNames","style"]));const q=(0,n.jsx)(A,{...e,onChange:N,idSchema:O,schema:j,uiSchema:B,disabled:D,readonly:I,hideError:T,autofocus:R,errorSchema:V,formContext:$,rawErrors:U}),z=O[a.K0];let L;L=v||a.Rr in j?u:S.title||e.schema.title||j.title||e.title||u;const K=S.description||e.schema.description||j.description||"",W=S.enableMarkdownInDescription?(0,n.jsx)(Pt,{children:K}):K,H=S.help,G="hidden"===S.widget,Z=["form-group","field",`field-${(0,a._I)(j)}`];!T&&U&&U.length>0&&Z.push("field-error has-error has-danger"),(null===s||void 0===s?void 0:s.classNames)&&Z.push(s.classNames),S.classNames&&Z.push(S.classNames);const J=(0,n.jsx)(E,{help:H,idSchema:O,schema:j,uiSchema:s,hasErrors:!T&&U&&U.length>0,registry:y}),Y=T||(j.anyOf||j.oneOf)&&!b.isSelect(j)?void 0:(0,n.jsx)(k,{errors:U,errorSchema:c,idSchema:O,schema:j,uiSchema:s,registry:y}),Q={description:(0,n.jsx)(x,{id:(0,a.IR)(z),description:W,schema:j,uiSchema:s,registry:y}),rawDescription:K,help:J,rawHelp:"string"===typeof H?H:void 0,errors:Y,rawErrors:T?void 0:U,id:z,label:L,hidden:G,onChange:f,onKeyChange:p,onDropPropertyClick:m,required:h,disabled:D,readonly:I,hideError:T,displayLabel:M,classNames:Z.join(" ").trim(),style:S.style,formContext:$,formData:i,schema:j,uiSchema:s,registry:y},X=y.fields.AnyOfField,ee=y.fields.OneOfField,te=(null===s||void 0===s?void 0:s["ui:field"])&&!0===(null===s||void 0===s?void 0:s["ui:fieldReplacesAnyOrOneOf"]);return(0,n.jsx)(_,{...Q,children:(0,n.jsxs)(n.Fragment,{children:[q,j.anyOf&&!te&&!b.isSelect(j)&&(0,n.jsx)(X,{name:u,disabled:D,readonly:I,hideError:T,errorSchema:c,formData:i,formContext:$,idPrefix:l,idSchema:O,idSeparator:d,onBlur:e.onBlur,onChange:e.onChange,onFocus:e.onFocus,options:j.anyOf.map((e=>b.retrieveSchema(g()(e)?e:{},i))),registry:y,schema:j,uiSchema:s}),j.oneOf&&!te&&!b.isSelect(j)&&(0,n.jsx)(ee,{name:u,disabled:D,readonly:I,hideError:T,errorSchema:c,formData:i,formContext:$,idPrefix:l,idSchema:O,idSeparator:d,onBlur:e.onBlur,onChange:e.onChange,onFocus:e.onFocus,options:j.oneOf.map((e=>b.retrieveSchema(g()(e)?e:{},i))),registry:y,schema:j,uiSchema:s})]})})}class Mt extends o.Component{shouldComponentUpdate(e){return!(0,a.c2)(this.props,e)}render(){return(0,n.jsx)(Rt,{...this.props})}}const Ut=Mt;const Vt=function(e){var t;const{schema:r,name:o,uiSchema:s,idSchema:i,formData:c,required:l,disabled:d=!1,readonly:u=!1,autofocus:f=!1,onChange:p,onBlur:m,onFocus:h,registry:y,rawErrors:g,hideError:v}=e,{title:$,format:b}=r,{widgets:w,formContext:S,schemaUtils:_,globalUiOptions:x}=y,E=_.isSelect(r)?(0,a.f9)(r):void 0;let k=E?"select":"text";b&&(0,a.Lw)(r,b,w)&&(k=b);const{widget:j=k,placeholder:C="",title:P,...O}=(0,a.$R)(s),N=_.getDisplayLabel(r,s,x),A=null!==(t=null!==P&&void 0!==P?P:$)&&void 0!==t?t:o,D=(0,a.Bt)(r,j,w);return(0,n.jsx)(D,{options:{...O,enumOptions:E},schema:r,uiSchema:s,id:i.$id,name:o,label:A,hideLabel:!N,hideError:v,value:c,onChange:p,onBlur:m,onFocus:h,required:l,disabled:d,readonly:u,formContext:S,autofocus:f,registry:y,placeholder:C,rawErrors:g})};const Bt=function(e){const{formData:t,onChange:r}=e;return(0,o.useEffect)((()=>{void 0===t&&r(null)}),[t,r]),null};const qt=function(){return{AnyOfField:O,ArrayField:E,BooleanField:k,NumberField:D,ObjectField:Ft,OneOfField:O,SchemaField:Ut,StringField:Vt,NullField:Bt}};function zt(e){const{idSchema:t,description:r,registry:o,schema:s,uiSchema:i}=e,c=(0,a.$R)(i,o.globalUiOptions),{label:l=!0}=c;if(!r||!l)return null;const d=(0,a.$F)("DescriptionFieldTemplate",o,c);return(0,n.jsx)(d,{id:(0,a.IR)(t),description:r,schema:s,uiSchema:i,registry:o})}function Lt(e){const{children:t,className:r,disabled:o,hasToolbar:a,hasMoveDown:s,hasMoveUp:i,hasRemove:c,hasCopy:l,index:d,onCopyIndexClick:u,onDropIndexClick:f,onReorderClick:p,readonly:m,registry:h,uiSchema:y}=e,{CopyButton:g,MoveDownButton:v,MoveUpButton:$,RemoveButton:b}=h.templates.ButtonTemplates,w={flex:1,paddingLeft:6,paddingRight:6,fontWeight:"bold"};return(0,n.jsxs)("div",{className:r,children:[(0,n.jsx)("div",{className:a?"col-xs-9":"col-xs-12",children:t}),a&&(0,n.jsx)("div",{className:"col-xs-3 array-item-toolbox",children:(0,n.jsxs)("div",{className:"btn-group",style:{display:"flex",justifyContent:"space-around"},children:[(i||s)&&(0,n.jsx)($,{style:w,disabled:o||m||!i,onClick:p(d,d-1),uiSchema:y,registry:h}),(i||s)&&(0,n.jsx)(v,{style:w,disabled:o||m||!s,onClick:p(d,d+1),uiSchema:y,registry:h}),l&&(0,n.jsx)(g,{style:w,disabled:o||m,onClick:u(d),uiSchema:y,registry:h}),c&&(0,n.jsx)(b,{style:w,disabled:o||m,onClick:f(d),uiSchema:y,registry:h})]})})]})}function Kt(e){const{canAdd:t,className:r,disabled:o,idSchema:s,uiSchema:i,items:c,onAddClick:l,readonly:d,registry:u,required:f,schema:p,title:m}=e,h=(0,a.$R)(i),y=(0,a.$F)("ArrayFieldDescriptionTemplate",u,h),g=(0,a.$F)("ArrayFieldItemTemplate",u,h),v=(0,a.$F)("ArrayFieldTitleTemplate",u,h),{ButtonTemplates:{AddButton:$}}=u.templates;return(0,n.jsxs)("fieldset",{className:r,id:s.$id,children:[(0,n.jsx)(v,{idSchema:s,title:h.title||m,required:f,schema:p,uiSchema:i,registry:u}),(0,n.jsx)(y,{idSchema:s,description:h.description||p.description,schema:p,uiSchema:i,registry:u}),(0,n.jsx)("div",{className:"row array-item-list",children:c&&c.map((({key:e,...t})=>(0,n.jsx)(g,{...t},e)))}),t&&(0,n.jsx)($,{className:"array-item-add",onClick:l,disabled:o||d,uiSchema:i,registry:u})]})}function Wt(e){const{idSchema:t,title:r,schema:o,uiSchema:s,required:i,registry:c}=e,l=(0,a.$R)(s,c.globalUiOptions),{label:d=!0}=l;if(!r||!d)return null;const u=(0,a.$F)("TitleFieldTemplate",c,l);return(0,n.jsx)(u,{id:(0,a.EH)(t),title:r,required:i,schema:o,uiSchema:s,registry:c})}function Ht(e){const{id:t,name:r,value:s,readonly:i,disabled:c,autofocus:l,onBlur:d,onFocus:u,onChange:f,onChangeOverride:p,options:m,schema:h,uiSchema:y,formContext:g,registry:v,rawErrors:$,type:b,hideLabel:w,hideError:S,..._}=e;if(!t)throw console.log("No id for",e),new Error(`no id for props ${JSON.stringify(e)}`);const x={..._,...(0,a.ti)(h,b,m)};let E;E="number"===x.type||"integer"===x.type?s||0===s?s:"":null==s?"":s;const k=(0,o.useCallback)((({target:{value:e}})=>f(""===e?m.emptyValue:e)),[f,m]),j=(0,o.useCallback)((({target:{value:e}})=>d(t,e)),[d,t]),C=(0,o.useCallback)((({target:{value:e}})=>u(t,e)),[u,t]);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("input",{id:t,name:t,className:"form-control",readOnly:i,disabled:c,autoFocus:l,value:E,...x,list:h.examples?(0,a.$c)(t):void 0,onChange:p||k,onBlur:j,onFocus:C,"aria-describedby":(0,a.eG)(t,!!h.examples)}),Array.isArray(h.examples)&&(0,n.jsx)("datalist",{id:(0,a.$c)(t),children:h.examples.concat(h.default&&!h.examples.includes(h.default)?[h.default]:[]).map((e=>(0,n.jsx)("option",{value:e},e)))},`datalist_${t}`)]})}function Gt({uiSchema:e}){const{submitText:t,norender:r,props:o={}}=(0,a.Bj)(e);return r?null:(0,n.jsx)("div",{children:(0,n.jsx)("button",{type:"submit",...o,className:`btn btn-info ${o.className||""}`,children:t})})}function Zt(e){const{iconType:t="default",icon:r,className:o,uiSchema:a,registry:s,...i}=e;return(0,n.jsx)("button",{type:"button",className:`btn btn-${t} ${o}`,...i,children:(0,n.jsx)("i",{className:`glyphicon glyphicon-${r}`})})}function Jt(e){const{registry:{translateString:t}}=e;return(0,n.jsx)(Zt,{title:t(a.Zl.CopyButton),className:"array-item-copy",...e,icon:"copy"})}function Yt(e){const{registry:{translateString:t}}=e;return(0,n.jsx)(Zt,{title:t(a.Zl.MoveDownButton),className:"array-item-move-down",...e,icon:"arrow-down"})}function Qt(e){const{registry:{translateString:t}}=e;return(0,n.jsx)(Zt,{title:t(a.Zl.MoveUpButton),className:"array-item-move-up",...e,icon:"arrow-up"})}function Xt(e){const{registry:{translateString:t}}=e;return(0,n.jsx)(Zt,{title:t(a.Zl.RemoveButton),className:"array-item-remove",...e,iconType:"danger",icon:"remove"})}function er({className:e,onClick:t,disabled:r,registry:o}){const{translateString:s}=o;return(0,n.jsx)("div",{className:"row",children:(0,n.jsx)("p",{className:`col-xs-3 col-xs-offset-9 text-right ${e}`,children:(0,n.jsx)(Zt,{iconType:"info",icon:"plus",className:"btn-add col-xs-12",title:s(a.Zl.AddButton),onClick:t,disabled:r,registry:o})})})}const tr=function(){return{SubmitButton:Gt,AddButton:er,CopyButton:Jt,MoveDownButton:Yt,MoveUpButton:Qt,RemoveButton:Xt}};function rr(e){const{id:t,description:r}=e;return r?"string"===typeof r?(0,n.jsx)("p",{id:t,className:"field-description",children:r}):(0,n.jsx)("div",{id:t,className:"field-description",children:r}):null}function nr({errors:e,registry:t}){const{translateString:r}=t;return(0,n.jsxs)("div",{className:"panel panel-danger errors",children:[(0,n.jsx)("div",{className:"panel-heading",children:(0,n.jsx)("h3",{className:"panel-title",children:r(a.Zl.ErrorsLabel)})}),(0,n.jsx)("ul",{className:"list-group",children:e.map(((e,t)=>(0,n.jsx)("li",{className:"list-group-item text-danger",children:e.stack},t)))})]})}const or="*";function ar(e){const{label:t,required:r,id:o}=e;return t?(0,n.jsxs)("label",{className:"control-label",htmlFor:o,children:[t,r&&(0,n.jsx)("span",{className:"required",children:or})]}):null}const sr=function(e){const{id:t,label:r,children:o,errors:s,help:i,description:c,hidden:l,required:d,displayLabel:u,registry:f,uiSchema:p}=e,m=(0,a.$R)(p),h=(0,a.$F)("WrapIfAdditionalTemplate",f,m);return l?(0,n.jsx)("div",{className:"hidden",children:o}):(0,n.jsxs)(h,{...e,children:[u&&(0,n.jsx)(ar,{label:r,required:d,id:t}),u&&c?c:null,o,s,i]})};function ir(e){const{errors:t=[],idSchema:r}=e;if(0===t.length)return null;const o=(0,a.rD)(r);return(0,n.jsx)("div",{children:(0,n.jsx)("ul",{id:o,className:"error-detail bs-callout bs-callout-info",children:t.filter((e=>!!e)).map(((e,t)=>(0,n.jsx)("li",{className:"text-danger",children:e},t)))})})}function cr(e){const{idSchema:t,help:r}=e;if(!r)return null;const o=(0,a.F5)(t);return"string"===typeof r?(0,n.jsx)("p",{id:o,className:"help-block",children:r}):(0,n.jsx)("div",{id:o,className:"help-block",children:r})}function lr(e){const{description:t,disabled:r,formData:o,idSchema:s,onAddClick:i,properties:c,readonly:l,registry:d,required:u,schema:f,title:p,uiSchema:m}=e,h=(0,a.$R)(m),y=(0,a.$F)("TitleFieldTemplate",d,h),g=(0,a.$F)("DescriptionFieldTemplate",d,h),{ButtonTemplates:{AddButton:v}}=d.templates;return(0,n.jsxs)("fieldset",{id:s.$id,children:[p&&(0,n.jsx)(y,{id:(0,a.EH)(s),title:p,required:u,schema:f,uiSchema:m,registry:d}),t&&(0,n.jsx)(g,{id:(0,a.IR)(s),description:t,schema:f,uiSchema:m,registry:d}),c.map((e=>e.content)),(0,a.Xl)(f,m,o)&&(0,n.jsx)(v,{className:"object-property-expand",onClick:i(f),disabled:r||l,uiSchema:m,registry:d})]})}const dr="*";function ur(e){const{id:t,title:r,required:o}=e;return(0,n.jsxs)("legend",{id:t,children:[r,o&&(0,n.jsx)("span",{className:"required",children:dr})]})}const fr=function(e){const{schema:t,idSchema:r,reason:o,registry:s}=e,{translateString:i}=s;let c=a.Zl.UnsupportedField;const l=[];return r&&r.$id&&(c=a.Zl.UnsupportedFieldWithId,l.push(r.$id)),o&&(c=c===a.Zl.UnsupportedField?a.Zl.UnsupportedFieldWithReason:a.Zl.UnsupportedFieldWithIdAndReason,l.push(o)),(0,n.jsxs)("div",{className:"unsupported-field",children:[(0,n.jsx)("p",{children:(0,n.jsx)(Pt,{children:i(c,l)})}),t&&(0,n.jsx)("pre",{children:JSON.stringify(t,null,2)})]})};function pr(e){const{id:t,classNames:r,style:o,disabled:s,label:i,onKeyChange:c,onDropPropertyClick:l,readonly:d,required:u,schema:f,children:p,uiSchema:m,registry:h}=e,{templates:y,translateString:g}=h,{RemoveButton:v}=y.ButtonTemplates,$=g(a.Zl.KeyLabel,[i]);return a.Rr in f?(0,n.jsx)("div",{className:r,style:o,children:(0,n.jsxs)("div",{className:"row",children:[(0,n.jsx)("div",{className:"col-xs-5 form-additional",children:(0,n.jsxs)("div",{className:"form-group",children:[(0,n.jsx)(ar,{label:$,required:u,id:`${t}-key`}),(0,n.jsx)("input",{className:"form-control",type:"text",id:`${t}-key`,onBlur:e=>c(e.target.value),defaultValue:i})]})}),(0,n.jsx)("div",{className:"form-additional form-group col-xs-5",children:p}),(0,n.jsx)("div",{className:"col-xs-2",children:(0,n.jsx)(v,{className:"array-item-remove btn-block",style:{border:"0"},disabled:s||d,onClick:l(i),uiSchema:m,registry:h})})]})}):(0,n.jsx)("div",{className:r,style:o,children:p})}const mr=function(){return{ArrayFieldDescriptionTemplate:zt,ArrayFieldItemTemplate:Lt,ArrayFieldTemplate:Kt,ArrayFieldTitleTemplate:Wt,ButtonTemplates:tr(),BaseInputTemplate:Ht,DescriptionFieldTemplate:rr,ErrorListTemplate:nr,FieldTemplate:sr,FieldErrorTemplate:ir,FieldHelpTemplate:cr,ObjectFieldTemplate:lr,TitleFieldTemplate:ur,UnsupportedFieldTemplate:fr,WrapIfAdditionalTemplate:pr}};function hr(e,t){const r=[];for(let n=e;n<=t;n++)r.push({value:n,label:(0,a.eV)(n,2)});return r}function yr({type:e,range:t,value:r,select:o,rootId:s,name:i,disabled:c,readonly:l,autofocus:d,registry:u,onBlur:f,onFocus:p}){const m=s+"_"+e,{SelectWidget:h}=u.widgets;return(0,n.jsx)(h,{schema:{type:"integer"},id:m,name:i,className:"form-control",options:{enumOptions:hr(t[0],t[1])},placeholder:e,value:r,disabled:c,readonly:l,autofocus:d,onChange:t=>o(e,t),onBlur:f,onFocus:p,registry:u,label:"","aria-describedby":(0,a.eG)(s)})}const gr=function({time:e=!1,disabled:t=!1,readonly:r=!1,autofocus:s=!1,options:i,id:c,name:l,registry:d,onBlur:u,onFocus:f,onChange:p,value:m}){const{translateString:h}=d,[y,g]=(0,o.useState)(m),[v,$]=(0,o.useReducer)(((e,t)=>({...e,...t})),(0,a.Rm)(m,e));(0,o.useEffect)((()=>{const t=(0,a.HN)(v,e);!function(e){return Object.values(e).every((e=>-1!==e))}(v)||t===m?y!==m&&(g(m),$((0,a.Rm)(m,e))):p(t)}),[e,m,p,v,y]);const b=(0,o.useCallback)(((e,t)=>{$({[e]:t})}),[]),w=(0,o.useCallback)((n=>{if(n.preventDefault(),t||r)return;const o=(0,a.Rm)((new Date).toJSON(),e);p((0,a.HN)(o,e))}),[t,r,e]),S=(0,o.useCallback)((e=>{e.preventDefault(),t||r||p(void 0)}),[t,r,p]);return(0,n.jsxs)("ul",{className:"list-inline",children:[(0,a.dO)(v,e,i.yearsRange,i.format).map(((e,o)=>(0,n.jsx)("li",{className:"list-inline-item",children:(0,n.jsx)(yr,{rootId:c,name:l,select:b,...e,disabled:t,readonly:r,registry:d,onBlur:u,onFocus:f,autofocus:s&&0===o})},o))),("undefined"===i.hideNowButton||!i.hideNowButton)&&(0,n.jsx)("li",{className:"list-inline-item",children:(0,n.jsx)("a",{href:"#",className:"btn btn-info btn-now",onClick:w,children:h(a.Zl.NowLabel)})}),("undefined"===i.hideClearButton||!i.hideClearButton)&&(0,n.jsx)("li",{className:"list-inline-item",children:(0,n.jsx)("a",{href:"#",className:"btn btn-warning btn-clear",onClick:S,children:h(a.Zl.ClearLabel)})})]})};const vr=function({time:e=!0,...t}){const{AltDateWidget:r}=t.registry.widgets;return(0,n.jsx)(r,{time:e,...t})};const $r=function({schema:e,uiSchema:t,options:r,id:s,value:i,disabled:c,readonly:l,label:d,hideLabel:u,autofocus:f=!1,onBlur:p,onFocus:m,onChange:h,registry:y}){var g;const v=(0,a.$F)("DescriptionFieldTemplate",y,r),$=(0,a.l1)(e),b=(0,o.useCallback)((e=>h(e.target.checked)),[h]),w=(0,o.useCallback)((e=>p(s,e.target.checked)),[p,s]),S=(0,o.useCallback)((e=>m(s,e.target.checked)),[m,s]),_=null!==(g=r.description)&&void 0!==g?g:e.description;return(0,n.jsxs)("div",{className:"checkbox "+(c||l?"disabled":""),children:[!u&&!!_&&(0,n.jsx)(v,{id:(0,a.IR)(s),description:_,schema:e,uiSchema:t,registry:y}),(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"checkbox",id:s,name:s,checked:"undefined"!==typeof i&&i,required:$,disabled:c||l,autoFocus:f,onChange:b,onBlur:w,onFocus:S,"aria-describedby":(0,a.eG)(s)}),(0,a.w)((0,n.jsx)("span",{children:d}),u)]})]})};const br=function({id:e,disabled:t,options:{inline:r=!1,enumOptions:s,enumDisabled:i,emptyValue:c},value:l,autofocus:d=!1,readonly:u,onChange:f,onBlur:p,onFocus:m}){const h=Array.isArray(l)?l:[l],y=(0,o.useCallback)((({target:{value:t}})=>p(e,(0,a.Od)(t,s,c))),[p,e]),g=(0,o.useCallback)((({target:{value:t}})=>m(e,(0,a.Od)(t,s,c))),[m,e]);return(0,n.jsx)("div",{className:"checkboxes",id:e,children:Array.isArray(s)&&s.map(((o,c)=>{const l=(0,a.BH)(o.value,h),p=Array.isArray(i)&&-1!==i.indexOf(o.value),m=t||p||u?"disabled":"",v=(0,n.jsxs)("span",{children:[(0,n.jsx)("input",{type:"checkbox",id:(0,a.pk)(e,c),name:e,checked:l,value:String(c),disabled:t||p||u,autoFocus:d&&0===c,onChange:e=>{e.target.checked?f((0,a.L4)(c,h,s)):f((0,a.Uw)(c,h,s))},onBlur:y,onFocus:g,"aria-describedby":(0,a.eG)(e)}),(0,n.jsx)("span",{children:o.label})]});return r?(0,n.jsx)("label",{className:`checkbox-inline ${m}`,children:v},c):(0,n.jsx)("div",{className:`checkbox ${m}`,children:(0,n.jsx)("label",{children:v})},c)}))})};function wr(e){const{disabled:t,readonly:r,options:o,registry:s}=e,i=(0,a.$F)("BaseInputTemplate",s,o);return(0,n.jsx)(i,{type:"color",...e,disabled:t||r})}function Sr(e){const{onChange:t,options:r,registry:s}=e,i=(0,a.$F)("BaseInputTemplate",s,r),c=(0,o.useCallback)((e=>t(e||void 0)),[t]);return(0,n.jsx)(i,{type:"date",...e,onChange:c})}function _r(e){const{onChange:t,value:r,options:o,registry:s}=e,i=(0,a.$F)("BaseInputTemplate",s,o);return(0,n.jsx)(i,{type:"datetime-local",...e,value:(0,a.v4)(r),onChange:e=>t((0,a.z$)(e))})}function xr(e){const{options:t,registry:r}=e,o=(0,a.$F)("BaseInputTemplate",r,t);return(0,n.jsx)(o,{type:"email",...e})}function Er(e,t){return null===e?null:e.replace(";base64",`;name=${encodeURIComponent(t)};base64`)}function kr(e){const{name:t,size:r,type:n}=e;return new Promise(((o,a)=>{const s=new window.FileReader;s.onerror=a,s.onload=e=>{var a;"string"===typeof(null===(a=e.target)||void 0===a?void 0:a.result)?o({dataURL:Er(e.target.result,t),name:t,size:r,type:n}):o({dataURL:null,name:t,size:r,type:n})},s.readAsDataURL(e)}))}function jr({fileInfo:e,registry:t}){const{translateString:r}=t,{dataURL:o,type:s,name:i}=e;return o?["image/jpeg","image/png"].includes(s)?(0,n.jsx)("img",{src:o,style:{maxWidth:"100%"},className:"file-preview"}):(0,n.jsxs)(n.Fragment,{children:[" ",(0,n.jsx)("a",{download:`preview-${i}`,href:o,className:"file-download",children:r(a.Zl.PreviewLabel)})]}):null}function Cr({filesInfo:e,registry:t,preview:r,onRemove:o,options:s}){if(0===e.length)return null;const{translateString:i}=t,{RemoveButton:c}=(0,a.$F)("ButtonTemplates",t,s);return(0,n.jsx)("ul",{className:"file-info",children:e.map(((e,s)=>{const{name:l,size:d,type:u}=e;return(0,n.jsxs)("li",{children:[(0,n.jsx)(Pt,{children:i(a.Zl.FilesInfo,[l,u,String(d)])}),r&&(0,n.jsx)(jr,{fileInfo:e,registry:t}),(0,n.jsx)(c,{onClick:()=>o(s),registry:t})]},s)}))})}const Pr=function(e){const{disabled:t,readonly:r,required:s,multiple:i,onChange:c,value:l,options:d,registry:u}=e,f=(0,a.$F)("BaseInputTemplate",u,d),p=(0,o.useCallback)((e=>{var t;e.target.files&&(t=e.target.files,Promise.all(Array.from(t).map(kr))).then((e=>{const t=e.map((e=>e.dataURL));c(i?l.concat(t[0]):t[0])}))}),[i,l,c]),m=(0,o.useMemo)((()=>(Array.isArray(l)?l:[l]).reduce(((e,t)=>{if(!t)return e;try{const{blob:r,name:n}=(0,a.zM)(t);return[...e,{dataURL:t,name:n,size:r.size,type:r.type}]}catch(M){return e}}),[])),[l]),h=(0,o.useCallback)((e=>{if(i){const t=l.filter(((t,r)=>r!==e));c(t)}else c(void 0)}),[i,l,c]);return(0,n.jsxs)("div",{children:[(0,n.jsx)(f,{...e,disabled:t||r,type:"file",required:!l&&s,onChangeOverride:p,value:"",accept:d.accept?String(d.accept):void 0}),(0,n.jsx)(Cr,{filesInfo:m,onRemove:h,registry:u,preview:d.filePreview,options:d})]})};const Or=function({id:e,value:t}){return(0,n.jsx)("input",{type:"hidden",id:e,name:e,value:"undefined"===typeof t?"":t})};function Nr(e){const{options:t,registry:r}=e,o=(0,a.$F)("BaseInputTemplate",r,t);return(0,n.jsx)(o,{type:"password",...e})}const Ar=function({options:e,value:t,required:r,disabled:s,readonly:i,autofocus:c=!1,onBlur:l,onFocus:d,onChange:u,id:f}){const{enumOptions:p,enumDisabled:m,inline:h,emptyValue:y}=e,g=(0,o.useCallback)((({target:{value:e}})=>l(f,(0,a.Od)(e,p,y))),[l,f]),v=(0,o.useCallback)((({target:{value:e}})=>d(f,(0,a.Od)(e,p,y))),[d,f]);return(0,n.jsx)("div",{className:"field-radio-group",id:f,children:Array.isArray(p)&&p.map(((e,o)=>{const l=(0,a.BH)(e.value,t),d=Array.isArray(m)&&-1!==m.indexOf(e.value),p=s||d||i?"disabled":"",y=(0,n.jsxs)("span",{children:[(0,n.jsx)("input",{type:"radio",id:(0,a.pk)(f,o),checked:l,name:f,required:r,value:String(o),disabled:s||d||i,autoFocus:c&&0===o,onChange:()=>u(e.value),onBlur:g,onFocus:v,"aria-describedby":(0,a.eG)(f)}),(0,n.jsx)("span",{children:e.label})]});return h?(0,n.jsx)("label",{className:`radio-inline ${p}`,children:y},o):(0,n.jsx)("div",{className:`radio ${p}`,children:(0,n.jsx)("label",{children:y})},o)}))})};function Dr(e){const{value:t,registry:{templates:{BaseInputTemplate:r}}}=e;return(0,n.jsxs)("div",{className:"field-range-wrapper",children:[(0,n.jsx)(r,{type:"range",...e}),(0,n.jsx)("span",{className:"range-view",children:t})]})}function Ir(e,t){return t?Array.from(e.target.options).slice().filter((e=>e.selected)).map((e=>e.value)):e.target.value}const Fr=function({schema:e,id:t,options:r,value:s,required:i,disabled:c,readonly:l,multiple:d=!1,autofocus:u=!1,onChange:f,onBlur:p,onFocus:m,placeholder:h}){const{enumOptions:y,enumDisabled:g,emptyValue:v}=r,$=d?[]:"",b=(0,o.useCallback)((e=>{const r=Ir(e,d);return m(t,(0,a.Od)(r,y,v))}),[m,t,e,d,r]),w=(0,o.useCallback)((e=>{const r=Ir(e,d);return p(t,(0,a.Od)(r,y,v))}),[p,t,e,d,r]),S=(0,o.useCallback)((e=>{const t=Ir(e,d);return f((0,a.Od)(t,y,v))}),[f,e,d,r]),_=(0,a.Yu)(s,y,d);return(0,n.jsxs)("select",{id:t,name:t,multiple:d,className:"form-control",value:"undefined"===typeof _?$:_,required:i,disabled:c||l,autoFocus:u,onBlur:w,onFocus:b,onChange:S,"aria-describedby":(0,a.eG)(t),children:[!d&&void 0===e.default&&(0,n.jsx)("option",{value:"",children:h}),Array.isArray(y)&&y.map((({value:e,label:t},r)=>{const o=g&&-1!==g.indexOf(e);return(0,n.jsx)("option",{value:String(r),disabled:o,children:t},r)}))]})};function Tr({id:e,options:t={},placeholder:r,value:s,required:i,disabled:c,readonly:l,autofocus:d=!1,onChange:u,onBlur:f,onFocus:p}){const m=(0,o.useCallback)((({target:{value:e}})=>u(""===e?t.emptyValue:e)),[u,t.emptyValue]),h=(0,o.useCallback)((({target:{value:t}})=>f(e,t)),[f,e]),y=(0,o.useCallback)((({target:{value:t}})=>p(e,t)),[e,p]);return(0,n.jsx)("textarea",{id:e,name:e,className:"form-control",value:s||"",placeholder:r,required:i,disabled:c,readOnly:l,autoFocus:d,rows:t.rows,onBlur:h,onFocus:y,onChange:m,"aria-describedby":(0,a.eG)(e)})}Tr.defaultProps={autofocus:!1,options:{}};const Rr=Tr;function Mr(e){const{options:t,registry:r}=e,o=(0,a.$F)("BaseInputTemplate",r,t);return(0,n.jsx)(o,{...e})}function Ur(e){const{onChange:t,options:r,registry:s}=e,i=(0,a.$F)("BaseInputTemplate",s,r),c=(0,o.useCallback)((e=>t(e?`${e}:00`:void 0)),[t]);return(0,n.jsx)(i,{type:"time",...e,onChange:c})}function Vr(e){const{options:t,registry:r}=e,o=(0,a.$F)("BaseInputTemplate",r,t);return(0,n.jsx)(o,{type:"url",...e})}function Br(e){const{options:t,registry:r}=e,o=(0,a.$F)("BaseInputTemplate",r,t);return(0,n.jsx)(o,{type:"number",...e})}const qr=function(){return{AltDateWidget:gr,AltDateTimeWidget:vr,CheckboxWidget:$r,CheckboxesWidget:br,ColorWidget:wr,DateWidget:Sr,DateTimeWidget:_r,EmailWidget:xr,FileWidget:Pr,HiddenWidget:Or,PasswordWidget:Nr,RadioWidget:Ar,RangeWidget:Dr,SelectWidget:Fr,TextWidget:Mr,TextareaWidget:Rr,TimeWidget:Ur,UpDownWidget:Br,URLWidget:Vr}};class zr extends o.Component{constructor(e){if(super(e),this.getUsedFormData=(e,t)=>{if(0===t.length&&"object"!==typeof e)return e;const r=u()(e,t);return Array.isArray(e)?Object.keys(r).map((e=>r[e])):r},this.getFieldNames=(e,t)=>{const r=(e,n=[],o=[[]])=>(Object.keys(e).forEach((s=>{if("object"===typeof e[s]){const t=o.map((e=>[...e,s]));e[s][a.yB]&&""!==e[s][a.oS]?n.push(e[s][a.oS]):r(e[s],n,t)}else s===a.oS&&""!==e[s]&&o.forEach((e=>{const r=i()(t,e);("object"!==typeof r||l()(r)||Array.isArray(r)&&r.every((e=>"object"!==typeof e)))&&n.push(e)}))})),n);return r(e)},this.onChange=(e,t,r)=>{const{extraErrors:n,omitExtraData:o,liveOmit:s,noValidate:i,liveValidate:c,onChange:l}=this.props,{schemaUtils:d,schema:u,retrievedSchema:f}=this.state;if((0,a.Gv)(e)||Array.isArray(e)){e=this.getStateFromProps(this.props,e,f).formData}const p=!i&&c;let m,h={formData:e,schema:u},y=e;if(!0===o&&!0===s){m=d.retrieveSchema(u,e);const t=d.toPathSchema(m,"",e),r=this.getFieldNames(t,e);y=this.getUsedFormData(e,r),h={formData:y}}if(p){const e=this.validate(y,u,d,f);let t=e.errors,r=e.errorSchema;const o=t,s=r;if(n){const o=(0,a.k6)(e,n);r=o.errorSchema,t=o.errors}h={formData:y,errors:t,errorSchema:r,schemaValidationErrors:o,schemaValidationErrorSchema:s}}else if(!i&&t){const e=n?(0,a.rL)(t,n,"preventDuplicates"):t;h={formData:y,errorSchema:e,errors:(0,a.SL)(e)}}m&&(h.retrievedSchema=m),this.setState(h,(()=>l&&l({...this.state,...h},r)))},this.reset=()=>{const{onChange:e}=this.props,t={formData:this.getStateFromProps(this.props,void 0).formData,errorSchema:{},errors:[],schemaValidationErrors:[],schemaValidationErrorSchema:{}};this.setState(t,(()=>e&&e({...this.state,...t})))},this.onBlur=(e,t)=>{const{onBlur:r}=this.props;r&&r(e,t)},this.onFocus=(e,t)=>{const{onFocus:r}=this.props;r&&r(e,t)},this.onSubmit=e=>{if(e.preventDefault(),e.target!==e.currentTarget)return;e.persist();const{omitExtraData:t,extraErrors:r,noValidate:n,onSubmit:o}=this.props;let{formData:s}=this.state;const{schema:i,schemaUtils:c}=this.state;if(!0===t){const e=c.retrieveSchema(i,s),t=c.toPathSchema(e,"",s),r=this.getFieldNames(t,s);s=this.getUsedFormData(s,r)}if(n||this.validateForm()){const t=r||{},n=r?(0,a.SL)(r):[];this.setState({formData:s,errors:n,errorSchema:t,schemaValidationErrors:[],schemaValidationErrorSchema:{}},(()=>{o&&o({...this.state,formData:s,status:"submitted"},e)}))}},this.submit=()=>{if(this.formElement.current){const e=new CustomEvent("submit",{cancelable:!0});e.preventDefault(),this.formElement.current.dispatchEvent(e),this.formElement.current.requestSubmit()}},!e.validator)throw new Error("A validator is required for Form functionality to work");this.state=this.getStateFromProps(e,e.formData),this.props.onChange&&!(0,a.c2)(this.state.formData,this.props.formData)&&this.props.onChange(this.state),this.formElement=(0,o.createRef)()}getSnapshotBeforeUpdate(e,t){if(!(0,a.c2)(this.props,e)){const r=!(0,a.c2)(e.schema,this.props.schema),n=!(0,a.c2)(e.formData,this.props.formData),o=this.getStateFromProps(this.props,this.props.formData,r||n?void 0:this.state.retrievedSchema,r);return{nextState:o,shouldUpdate:!(0,a.c2)(o,t)}}return{shouldUpdate:!1}}componentDidUpdate(e,t,r){if(r.shouldUpdate){const{nextState:e}=r;(0,a.c2)(e.formData,this.props.formData)||(0,a.c2)(e.formData,t.formData)||!this.props.onChange||this.props.onChange(e),this.setState(e)}}getStateFromProps(e,t,r,n=!1){const o=this.state||{},s="schema"in e?e.schema:this.props.schema,i=("uiSchema"in e?e.uiSchema:this.props.uiSchema)||{},c="undefined"!==typeof t,l="liveValidate"in e?e.liveValidate:this.props.liveValidate,d=c&&!e.noValidate&&l,u=s,f="experimental_defaultFormStateBehavior"in e?e.experimental_defaultFormStateBehavior:this.props.experimental_defaultFormStateBehavior;let p=o.schemaUtils;p&&!p.doesSchemaUtilsDiffer(e.validator,u,f)||(p=(0,a.BP)(e.validator,u,f));const m=p.getDefaultFormState(s,t),h=null!==r&&void 0!==r?r:p.retrieveSchema(s,m);let y,g,v=o.schemaValidationErrors,$=o.schemaValidationErrorSchema;if(d){const e=this.validate(m,s,p,h);y=e.errors,g=e.errorSchema,v=y,$=g}else{const t=e.noValidate||n?{errors:[],errorSchema:{}}:e.liveValidate?{errors:o.errors||[],errorSchema:o.errorSchema||{}}:{errors:o.schemaValidationErrors||[],errorSchema:o.schemaValidationErrorSchema||{}};y=t.errors,g=t.errorSchema}if(e.extraErrors){const t=(0,a.k6)({errorSchema:g,errors:y},e.extraErrors);g=t.errorSchema,y=t.errors}const b=p.toIdSchema(h,i["ui:rootFieldId"],m,e.idPrefix,e.idSeparator);return{schemaUtils:p,schema:s,uiSchema:i,idSchema:b,formData:m,edit:c,errors:y,errorSchema:g,schemaValidationErrors:v,schemaValidationErrorSchema:$,retrievedSchema:h}}shouldComponentUpdate(e,t){return(0,a.F9)(this,e,t)}validate(e,t=this.props.schema,r,n){const o=r||this.state.schemaUtils,{customValidate:a,transformErrors:s,uiSchema:i}=this.props,c=null!==n&&void 0!==n?n:o.retrieveSchema(t,e);return o.getValidator().validateFormData(e,c,a,s,i)}renderErrors(e){const{errors:t,errorSchema:r,schema:o,uiSchema:s}=this.state,{formContext:i}=this.props,c=(0,a.$R)(s),l=(0,a.$F)("ErrorListTemplate",e,c);return t&&t.length?(0,n.jsx)(l,{errors:t,errorSchema:r||{},schema:o,uiSchema:s,formContext:i,registry:e}):null}getRegistry(){var e;const{translateString:t,uiSchema:r={}}=this.props,{schemaUtils:n}=this.state,{fields:o,templates:s,widgets:i,formContext:c,translateString:l}={fields:qt(),templates:mr(),widgets:qr(),rootSchema:{},formContext:{},translateString:a.qe};return{fields:{...o,...this.props.fields},templates:{...s,...this.props.templates,ButtonTemplates:{...s.ButtonTemplates,...null===(e=this.props.templates)||void 0===e?void 0:e.ButtonTemplates}},widgets:{...i,...this.props.widgets},rootSchema:this.props.schema,formContext:this.props.formContext||c,schemaUtils:n,translateString:t||l,globalUiOptions:r[a.AK]}}focusOnError(e){const{idPrefix:t="root",idSeparator:r="_"}=this.props,{property:n}=e,o=p()(n);""===o[0]?o[0]=t:o.unshift(t);const a=o.join(r);let s=this.formElement.current.elements[a];s||(s=this.formElement.current.querySelector(`input[id^=${a}`)),s&&s.length&&(s=s[0]),s&&s.focus()}validateForm(){const{extraErrors:e,extraErrorsBlockSubmit:t,focusOnFirstError:r,onError:n}=this.props,{formData:o,errors:s}=this.state,i=this.validate(o);let c=i.errors,l=i.errorSchema;const d=c,u=l,f=c.length>0||e&&t;if(f){if(e){const t=(0,a.k6)(i,e);l=t.errorSchema,c=t.errors}r&&("function"===typeof r?r(c[0]):this.focusOnError(c[0])),this.setState({errors:c,errorSchema:l,schemaValidationErrors:d,schemaValidationErrorSchema:u},(()=>{n?n(c):console.error("Form validation failed",c)}))}else s.length>0&&this.setState({errors:[],errorSchema:{},schemaValidationErrors:[],schemaValidationErrorSchema:{}});return!f}render(){const{children:e,id:t,idPrefix:r,idSeparator:o,className:s="",tagName:i,name:c,method:l,target:d,action:u,autoComplete:f,enctype:p,acceptcharset:m,noHtml5Validate:h=!1,disabled:y=!1,readonly:g=!1,formContext:v,showErrorList:$="top",_internalFormWrapper:b}=this.props,{schema:w,uiSchema:S,formData:_,errorSchema:x,idSchema:E}=this.state,k=this.getRegistry(),{SchemaField:j}=k.fields,{SubmitButton:C}=k.templates.ButtonTemplates,P=b?i:void 0,O=b||i||"form";let{[a.xh]:N={}}=(0,a.$R)(S);y&&(N={...N,props:{...N.props,disabled:!0}});const A={[a.ce]:{[a.xh]:N}};return(0,n.jsxs)(O,{className:s||"rjsf",id:t,name:c,method:l,target:d,action:u,autoComplete:f,encType:p,acceptCharset:m,noValidate:h,onSubmit:this.onSubmit,as:P,ref:this.formElement,children:["top"===$&&this.renderErrors(k),(0,n.jsx)(j,{name:"",schema:w,uiSchema:S,errorSchema:x,idSchema:E,idPrefix:r,idSeparator:o,formContext:v,formData:_,onChange:this.onChange,onBlur:this.onBlur,onFocus:this.onFocus,registry:k,disabled:y,readonly:g}),e||(0,n.jsx)(C,{uiSchema:A,registry:k}),"bottom"===$&&this.renderErrors(k)]})}}const Lr=zr},78239:(e,t,r)=>{"use strict";function n(e){return!("undefined"!==typeof File&&e instanceof File)&&(!("undefined"!==typeof Date&&e instanceof Date)&&("object"===typeof e&&null!==e&&!Array.isArray(e)))}function o(e){return!0===e.additionalItems&&console.warn("additionalItems=true is currently not supported"),n(e.additionalItems)}function a(e){if(""===e)return;if(null===e)return null;if(/\.$/.test(e))return e;if(/\.0$/.test(e))return e;if(/\.\d*0$/.test(e))return e;const t=Number(e);return"number"===typeof t&&!Number.isNaN(t)?t:e}r.d(t,{Rr:()=>s,Xo:()=>l,s2:()=>m,K0:()=>h,ZN:()=>g,oS:()=>v,Ru:()=>$,s1:()=>b,Es:()=>_,yB:()=>x,at:()=>E,xh:()=>S,Zl:()=>Zt,AK:()=>C,ce:()=>j,Hh:()=>o,eG:()=>Rt,i:()=>a,Xl:()=>O,JF:()=>D,BP:()=>at,zM:()=>st,c2:()=>T,IR:()=>At,qe:()=>it,Uw:()=>lt,Yu:()=>ut,BH:()=>dt,L4:()=>mt,Od:()=>ct,rD:()=>Dt,$c:()=>It,dO:()=>vt,NV:()=>Ze,KU:()=>Se,ti:()=>bt,_I:()=>ke,Bj:()=>St,$F:()=>_t,$R:()=>P,Bt:()=>Ct,Lw:()=>Ot,$K:()=>Pt,F5:()=>Ft,ar:()=>Je,nQ:()=>Ve,Gv:()=>n,w:()=>Ut,z$:()=>Vt,rL:()=>qe,dW:()=>je,pk:()=>Mt,f9:()=>Bt,UI:()=>qt,eV:()=>zt,Rm:()=>Lt,l1:()=>Kt,F9:()=>Wt,EH:()=>Tt,HN:()=>Ht,SL:()=>Gt,MD:()=>Qt,fV:()=>Xt,v4:()=>er,k6:()=>tr,vh:()=>rr});const s="__additional_property",i="additionalProperties",c="allOf",l="anyOf",d="const",u="default",f="dependencies",p="enum",m="__errors",h="$id",y="if",g="items",v="$name",$="oneOf",b="properties",w="required",S="submitButtonOptions",_="$ref",x="__rjsf_additionalProperties",E="__rjsf_rootSchema",k="ui:widget",j="ui:options",C="ui:globalOptions";function P(e={},t={}){return Object.keys(e).filter((e=>0===e.indexOf("ui:"))).reduce(((t,r)=>{const o=e[r];return r===k&&n(o)?(console.error("Setting options via ui:widget object is no longer supported, use ui:options instead"),t):r===j&&n(o)?{...t,...o}:{...t,[r.substring(3)]:o}}),{...t})}function O(e,t={},r){if(!e.additionalProperties)return!1;const{expandable:n=!0}=P(t);return!1===n?n:void 0===e.maxProperties||!r||Object.keys(r).length({...e,[r]:D(t)})),t);if(A()(e)){const r=e;return Object.keys(r).reduce(((e,t)=>({...e,[t]:D(r[t])})),t)}return t}var I=r(29132),F=r.n(I);function T(e,t){return F()(e,t,((e,t)=>{if("function"===typeof e&&"function"===typeof t)return!0}))}var R=r(58156),M=r.n(R),U=r(62193),V=r.n(U),B=r(56239),q=r(90179),z=r.n(q);function L(e,t){const r=t[e];return[z()(t,[e]),r]}function K(e,t={},r=[]){const n=e||"";let o;if(!n.startsWith("#"))throw new Error(`Could not find a definition for ${e}.`);o=decodeURIComponent(n.substring(1));const a=B.get(t,o);if(void 0===a)throw new Error(`Could not find a definition for ${e}.`);const s=a[_];if(s){if(r.includes(s)){if(1===r.length)throw new Error(`Definition for ${e} is a circular reference`);const[t,...o]=r,a=[...o,n,t].join(" -> ");throw new Error(`Definition for ${t} contains a circular reference through ${a}`)}const[o,i]=L(_,a),c=K(i,t,[...r,n]);return Object.keys(o).length>0?{...o,...c}:c}return a}function W(e,t={}){return K(e,t,[])}var H=r(61448),G=r.n(H),Z=r(98023),J=r.n(Z),Y=r(23805),Q=r.n(Y),X=r(85015),ee=r.n(X),te=r(40860),re=r.n(te),ne=r(6638),oe=r.n(ne);function ae(e,t,r){var n;if(e&&r){const o=M()(e,r);if(void 0===o)return;for(let e=0;e({required:[e]})))};let o;if(a.anyOf){const{...e}=a;e.allOf?e.allOf=e.allOf.slice():e.allOf=[],e.allOf.push(r),o=e}else o=Object.assign({},a,r);if(delete o.required,e.isValid(o,t,n))return s}else if(e.isValid(a,t,n))return s}return 0}function ie(e,t,r,n,o){return se(e,t,r,n,o)}var ce=r(2404),le=r.n(ce),de=r(63560),ue=r.n(de),fe=r(69752),pe=r.n(fe),me=r(55364),he=r.n(me),ye=r(3176),ge=r.n(ye),ve=r(63375),$e=r.n(ve),be=r(33978),we=r.n(be);function Se(e){let t;const r=M()(e,"discriminator.propertyName",void 0);return ee()(r)?t=r:void 0!==r&&console.warn(`Expecting discriminator to be a string, got "${typeof r}" instead`),t}function _e(e){return Array.isArray(e)?"array":"string"===typeof e?"string":null==e?"null":"boolean"===typeof e?"boolean":isNaN(e)?"object"===typeof e?"object":"string":"number"}var xe=r(80299),Ee=r.n(xe);function ke(e){let{type:t}=e;return!t&&e.const?_e(e.const):!t&&e.enum?"string":t||!e.properties&&!e.additionalProperties?(Array.isArray(t)&&(t=2===t.length&&t.includes("null")?t.find((e=>"null"!==e)):t[0]),t):"object"}function je(e,t){const r=Object.assign({},e);return Object.keys(t).reduce(((r,o)=>{const a=e?e[o]:{},s=t[o];return e&&o in e&&n(s)?r[o]=je(a,s):e&&t&&("object"===ke(e)||"object"===ke(t))&&o===w&&Array.isArray(a)&&Array.isArray(s)?r[o]=Ee()(a,s):r[o]=s,r}),r)}function Ce(e,t,r={},n){return Ae(e,t,r,n)[0]}function Pe(e){return e.reduce(((e,t)=>t.length>1?t.flatMap((t=>oe()(e.length,(r=>[...e[r]].concat(t))))):(e.forEach((e=>e.push(t[0]))),e)),[[]])}function Oe(e,t,r,n,o,a){const s=Ne(t,r,o);return s!==t?Ae(e,s,r,a,n,o):[t]}function Ne(e,t,r){if(!n(e))return e;let o=e;if(_ in o){const{$ref:e,...n}=o;if(r.includes(e))return o;r.push(e);o={...W(e,t),...n}}if(b in o){const e=[],n=pe()(o[b],((n,o,a)=>{const s=[...r];n[a]=Ne(o,t,s),e.push(s)}),{});he()(r,$e()(ge()(e))),o={...o,[b]:n}}return g in o&&!Array.isArray(o.items)&&"boolean"!==typeof o.items&&(o={...o,items:Ne(o.items,t,r)}),le()(e,o)?e:o}function Ae(e,t,r,o,a=!1,d=[]){if(!n(t))return[{}];const u=function(e,t,r,n,o,a){const s=Oe(e,t,r,n,o,a);if(s.length>1||s[0]!==t)return s;if(f in t)return De(e,t,r,n,o,a).flatMap((t=>Ae(e,t,r,a,n,o)));if(c in t&&Array.isArray(t.allOf))return Pe(t.allOf.map((t=>Ae(e,t,r,a,n,o)))).map((e=>({...t,allOf:e})));return[t]}(e,t,r,a,d,o);return u.flatMap((t=>{let u=t;if(y in u)return function(e,t,r,n,o,a){const{if:s,then:i,else:c,...l}=t,d=e.isValid(s,a||{},r);let u=[l],f=[];if(n)i&&"boolean"!==typeof i&&(f=f.concat(Ae(e,i,r,a,n,o))),c&&"boolean"!==typeof c&&(f=f.concat(Ae(e,c,r,a,n,o)));else{const t=d?i:c;t&&"boolean"!==typeof t&&(f=f.concat(Ae(e,t,r,a,n,o)))}return f.length&&(u=f.map((e=>je(l,e)))),u.flatMap((t=>Ae(e,t,r,a,n,o)))}(e,u,r,a,d,o);if(c in u){if(a){const{allOf:e,...t}=u;return[...e,t]}try{u=we()(u,{deep:!1})}catch(f){console.warn("could not merge subschemas in allOf:\n",f);const{allOf:e,...t}=u;return t}}return i in u&&!1!==u.additionalProperties?function(e,t,r,o){const a={...t,properties:{...t.properties}},i=o&&n(o)?o:{};return Object.keys(i).forEach((t=>{if(t in a.properties)return;let n={};n="boolean"!==typeof a.additionalProperties?_ in a.additionalProperties?Ce(e,{$ref:M()(a.additionalProperties,[_])},r,i):"type"in a.additionalProperties?{...a.additionalProperties}:l in a.additionalProperties||$ in a.additionalProperties?{type:"object",...a.additionalProperties}:{type:_e(M()(i,[t]))}:{type:_e(M()(i,[t]))},a.properties[t]=n,ue()(a.properties,[t,s],!0)})),a}(e,u,r,o):u}))}function De(e,t,r,n,o,a){const{dependencies:s,...i}=t,c=function(e,t,r,n,o){let a;const{oneOf:s,anyOf:i,...c}=t;if(Array.isArray(s)?a=s:Array.isArray(i)&&(a=i),a){const s=void 0===o&&n?{}:o,i=Se(t);a=a.map((e=>Ne(e,r,[])));const l=ie(e,s,a,r,i);if(n)return a.map((e=>je(c,e)));t=je(c,a[l])}return[t]}(e,i,r,n,a);return c.flatMap((t=>Ie(e,s,t,r,n,o,a)))}function Ie(e,t,r,o,a,s,i){let c=[r];for(const l in t){if(!a&&void 0===M()(i,[l]))continue;if(r.properties&&!(l in r.properties))continue;const[d,u]=L(l,t);return Array.isArray(u)?c[0]=Fe(r,u):n(u)&&(c=Te(e,r,o,l,u,a,s,i)),c.flatMap((t=>Ie(e,d,t,o,a,s,i)))}return c}function Fe(e,t){if(!t)return e;const r=Array.isArray(e.required)?Array.from(new Set([...e.required,...t])):t;return{...e,required:r}}function Te(e,t,r,n,o,a,s,i){return Ae(e,o,r,i,a,s).flatMap((o=>{const{oneOf:c,...l}=o;if(t=je(t,l),void 0===c)return t;return Pe(c.map((t=>"boolean"!==typeof t&&_ in t?Oe(e,t,r,a,s,i):[t]))).flatMap((o=>function(e,t,r,n,o,a,s,i){const c=o.filter((t=>{if("boolean"===typeof t||!t||!t.properties)return!1;const{[n]:o}=t.properties;if(o){const t={type:"object",properties:{[n]:o}};return e.isValid(t,i,r)||a}return!1}));if(!a&&1!==c.length)return console.warn("ignoring oneOf in dependencies because there isn't exactly one subschema that is valid"),[t];return c.flatMap((o=>{const c=o,[l]=L(n,c.properties),d={...c,properties:l};return Ae(e,d,r,i,a,s).map((e=>je(t,e)))}))}(e,t,r,n,o,a,s,i)))}))}const Re={type:"object",$id:"_$junk_option_schema_id$_",properties:{__not_really_there__:{type:"number"}}};function Me(e,t,r,n={}){let o=0;return r&&(Q()(r.properties)?o+=re()(r.properties,((r,o,a)=>{const s=M()(n,a);if("boolean"===typeof o)return r;if(G()(o,_)){const n=Ce(e,o,t,s);return r+Me(e,t,n,s||{})}if((G()(o,$)||G()(o,l))&&s){const n=G()(o,$)?$:l,a=Se(o);return r+Ue(e,t,s,M()(o,n),-1,a)}if("object"===o.type)return r+Me(e,t,o,s||{});if(o.type===_e(s)){let e=r+1;return o.default?e+=s===o.default?1:-1:o.const&&(e+=s===o.const?1:-1),e}return r}),0):ee()(r.type)&&r.type===_e(n)&&(o+=1)),o}function Ue(e,t,r,n,o=-1,a){const s=n.map((e=>Ne(e,t,[]))),i=ae(r,n,a);if(J()(i))return i;const c=s.reduce(((n,o,s)=>(1===ie(e,r,[Re,o],t,a)&&n.push(s),n)),[]);if(1===c.length)return c[0];c.length||oe()(s.length,(e=>c.push(e)));const l=new Set,{bestIndex:d}=c.reduce(((n,o)=>{const{bestScore:a}=n,i=s[o],c=Me(e,t,i,r);return l.add(c),c>a?{bestIndex:o,bestScore:c}:n}),{bestIndex:o,bestScore:0});return 1===l.size&&o>=0?o:d}function Ve(e){return Array.isArray(e.items)&&e.items.length>0&&e.items.every((e=>n(e)))}function Be(e,t,r=!1){if(Array.isArray(t)){const n=Array.isArray(e)?e:[],o=t.map(((e,t)=>n[t]?Be(n[t],e,r):e));return r&&o.length(n[o]=Be(e?M()(e,o):{},M()(t,o),r),n)),n)}return t}function qe(e,t,r=!1){return Object.keys(t).reduce(((o,a)=>{const s=e?e[a]:{},i=t[a];if(e&&a in e&&n(i))o[a]=qe(s,i,r);else if(r&&Array.isArray(s)&&Array.isArray(i)){let e=i;"preventDuplicates"===r&&(e=i.reduce(((e,t)=>(s.includes(t)||e.push(t),e)),[])),o[a]=s.concat(e)}else o[a]=i;return o}),Object.assign({},e))}function ze(e,t,r={}){const n=Ce(e,t,r,void 0),o=n.oneOf||n.anyOf;return!!Array.isArray(n.enum)||!!Array.isArray(o)&&o.every((e=>"boolean"!==typeof e&&function(e){return Array.isArray(e.enum)&&1===e.enum.length||d in e}(e)))}function Le(e,t,r){return!(!t.uniqueItems||!t.items||"boolean"===typeof t.items)&&ze(e,t.items,r)}var Ke;function We(e,t=Ke.Ignore,r=-1){if(r>=0){if(Array.isArray(e.items)&&rGe(e,t,{rootSchema:a,includeUndefinedValues:s,_recurseList:i,experimental_defaultFormStateBehavior:d,parentDefaults:Array.isArray(r)?r[n]:void 0,rawFormData:v,required:p})));else if($ in w){const{oneOf:t,...r}=w;if(0===t.length)return;const n=Se(w);x=t[Ue(e,a,V()(v)?void 0:v,t,0,n)],x=je(r,x)}else if(l in w){const{anyOf:t,...r}=w;if(0===t.length)return;const n=Se(w);x=t[Ue(e,a,V()(v)?void 0:v,t,0,n)],x=je(r,x)}if(x)return Ge(e,x,{rootSchema:a,includeUndefinedValues:s,_recurseList:E,experimental_defaultFormStateBehavior:d,parentDefaults:S,rawFormData:v,required:p});switch(void 0===S&&(S=w.default),ke(w)){case"object":{const t="populateDefaults"===(null===d||void 0===d?void 0:d.allOf)&&c in w?Ce(e,w,a,v):w,r=Object.keys(t.properties||{}).reduce(((r,n)=>{var o;return He(r,n,Ge(e,M()(t,[b,n]),{rootSchema:a,_recurseList:i,experimental_defaultFormStateBehavior:d,includeUndefinedValues:!0===s,parentDefaults:M()(S,[n]),rawFormData:M()(v,[n]),required:null===(o=t.required)||void 0===o?void 0:o.includes(n)}),s,p,t.required,d),r}),{});if(t.additionalProperties){const o=n(t.additionalProperties)?t.additionalProperties:{},c=new Set;n(S)&&Object.keys(S).filter((e=>!t.properties||!t.properties[e])).forEach((e=>c.add(e)));const l=[];Object.keys(v).filter((e=>!t.properties||!t.properties[e])).forEach((e=>{c.add(e),l.push(e)})),c.forEach((n=>{var c;const u=Ge(e,o,{rootSchema:a,_recurseList:i,experimental_defaultFormStateBehavior:d,includeUndefinedValues:!0===s,parentDefaults:M()(S,[n]),rawFormData:M()(v,[n]),required:null===(c=t.required)||void 0===c?void 0:c.includes(n)});He(r,n,u,s,p,l)}))}return r}case"array":{const t="never"===(null===(m=null===d||void 0===d?void 0:d.arrayMinItems)||void 0===m?void 0:m.populate),r="requiredOnly"===(null===(h=null===d||void 0===d?void 0:d.arrayMinItems)||void 0===h?void 0:h.populate),n="skipEmptyDefaults"===(null===d||void 0===d?void 0:d.emptyObjectFields),s=null!==(g=null===(y=null===d||void 0===d?void 0:d.arrayMinItems)||void 0===y?void 0:y.computeSkipPopulate)&&void 0!==g?g:()=>!1,c=n?void 0:[];if(Array.isArray(S)&&(S=S.map(((t,r)=>{const n=We(w,Ke.Fallback,r);return Ge(e,n,{rootSchema:a,_recurseList:i,experimental_defaultFormStateBehavior:d,parentDefaults:t,required:p})}))),Array.isArray(o)){const r=We(w);S=t?o:o.map(((t,n)=>Ge(e,r,{rootSchema:a,_recurseList:i,experimental_defaultFormStateBehavior:d,rawFormData:t,parentDefaults:M()(S,[n]),required:p})))}if(t)return null!==S&&void 0!==S?S:c;if(r&&!p)return S||void 0;const l=Array.isArray(S)?S.length:0;if(!w.minItems||Le(e,w,a)||s(e,w,a)||w.minItems<=l)return S||c;const u=S||[],f=We(w,Ke.Invert),v=f.default,$=new Array(w.minItems-l).fill(Ge(e,f,{parentDefaults:v,rootSchema:a,_recurseList:i,experimental_defaultFormStateBehavior:d,required:p}));return u.concat($)}}return S}function Ze(e,t,r,o,a=!1,s){if(!n(t))throw new Error("Invalid schema: "+t);const i=Ge(e,Ce(e,t,o,r),{rootSchema:o,includeUndefinedValues:a,experimental_defaultFormStateBehavior:s,rawFormData:r});if(void 0===r||null===r||"number"===typeof r&&isNaN(r))return i;const{mergeExtraDefaults:c}=(null===s||void 0===s?void 0:s.arrayMinItems)||{};return n(r)||Array.isArray(r)?Be(i,r,c):r}function Je(e={}){return"widget"in P(e)&&"hidden"!==P(e).widget}function Ye(e,t,r={},n){if("files"===r[k])return!0;if(t.items){const r=Ce(e,t.items,n);return"string"===r.type&&"data-url"===r.format}return!1}!function(e){e[e.Ignore=0]="Ignore",e[e.Invert=1]="Invert",e[e.Fallback=2]="Fallback"}(Ke||(Ke={}));const Qe=Symbol("no Value");function Xe(e,t,r,n,o={}){let a;if(G()(r,b)){const s={};if(G()(n,b)){const e=M()(n,b,{});Object.keys(e).forEach((e=>{G()(o,e)&&(s[e]=void 0)}))}const i=Object.keys(M()(r,b,{})),c={};i.forEach((a=>{const i=M()(o,a);let l=M()(n,[b,a],{}),d=M()(r,[b,a],{});G()(l,_)&&(l=Ce(e,l,t,i)),G()(d,_)&&(d=Ce(e,d,t,i));const u=M()(l,"type"),f=M()(d,"type");if(!u||u===f)if(G()(s,a)&&delete s[a],"object"===f||"array"===f&&Array.isArray(i)){const r=Xe(e,t,d,l,i);void 0===r&&"array"!==f||(c[a]=r)}else{const e=M()(d,"default",Qe),t=M()(l,"default",Qe);e!==Qe&&e!==i&&(t===i?s[a]=e:!0===M()(d,"readOnly")&&(s[a]=void 0));const r=M()(d,"const",Qe),n=M()(l,"const",Qe);r!==Qe&&r!==i&&(s[a]=n===i?r:void 0)}})),a={..."string"==typeof o||Array.isArray(o)?void 0:o,...s,...c}}else if("array"===M()(n,"type")&&"array"===M()(r,"type")&&Array.isArray(o)){let s=M()(n,"items"),i=M()(r,"items");if("object"!==typeof s||"object"!==typeof i||Array.isArray(s)||Array.isArray(i))"boolean"===typeof s&&"boolean"===typeof i&&s===i&&(a=o);else{G()(s,_)&&(s=Ce(e,s,t,o)),G()(i,_)&&(i=Ce(e,i,t,o));const n=M()(s,"type"),c=M()(i,"type");if(!n||n===c){const n=M()(r,"maxItems",-1);a="object"===c?o.reduce(((r,o)=>{const a=Xe(e,t,i,s,o);return void 0!==a&&(n<0||r.length0&&o.length>n?o.slice(0,n):o}}}return a}function et(e,t,r,o,a,s,i,l=[]){if(_ in t||f in t||c in t){const n=Ce(e,t,s,i);if(-1===l.findIndex((e=>le()(e,n))))return et(e,n,r,o,a,s,i,l.concat(n))}if(g in t&&!M()(t,[g,_]))return et(e,M()(t,g),r,o,a,s,i,l);const d={$id:a||r};if("object"===ke(t)&&b in t)for(const c in t.properties){const a=M()(t,[b,c]),u=d[h]+o+c;d[c]=et(e,n(a)?a:{},r,o,u,s,M()(i,[c]),l)}return d}function tt(e,t,r,n,o,a="root",s="_"){return et(e,t,a,s,r,n,o)}function rt(e,t,r,n,o,a=[]){if(_ in t||f in t||c in t){const s=Ce(e,t,n,o);if(-1===a.findIndex((e=>le()(e,s))))return rt(e,s,r,n,o,a.concat(s))}let s={[v]:r.replace(/^\./,"")};if($ in t||l in t){const i=$ in t?t.oneOf:t.anyOf,c=Se(t),l=i[Ue(e,n,o,i,0,c)];s={...s,...rt(e,l,r,n,o,a)}}if(i in t&&!1!==t[i]&&ue()(s,x,!0),g in t&&Array.isArray(o)){const{items:i,additionalItems:c}=t;Array.isArray(i)?o.forEach(((t,o)=>{i[o]?s[o]=rt(e,i[o],`${r}.${o}`,n,t,a):c?s[o]=rt(e,c,`${r}.${o}`,n,t,a):console.warn(`Unable to generate path schema for "${r}.${o}". No schema defined for it`)})):o.forEach(((t,o)=>{s[o]=rt(e,i,`${r}.${o}`,n,t,a)}))}else if(b in t)for(const i in t.properties){const c=M()(t,[b,i]);s[i]=rt(e,c,`${r}.${i}`,n,M()(o,[i]),a)}return s}function nt(e,t,r="",n,o){return rt(e,t,r,n,o)}class ot{constructor(e,t,r){this.rootSchema=t,this.validator=e,this.experimental_defaultFormStateBehavior=r}getValidator(){return this.validator}doesSchemaUtilsDiffer(e,t,r={}){return!(!e||!t)&&(this.validator!==e||!T(this.rootSchema,t)||!T(this.experimental_defaultFormStateBehavior,r))}getDefaultFormState(e,t,r=!1){return Ze(this.validator,e,t,this.rootSchema,r,this.experimental_defaultFormStateBehavior)}getDisplayLabel(e,t,r){return function(e,t,r={},n,o){const a=P(r,o),{label:s=!0}=a;let i=!!s;const c=ke(t);return"array"===c&&(i=Le(e,t,n)||Ye(e,t,r,n)||Je(r)),"object"===c&&(i=!1),"boolean"!==c||r[k]||(i=!1),r["ui:field"]&&(i=!1),i}(this.validator,e,t,this.rootSchema,r)}getClosestMatchingOption(e,t,r,n){return Ue(this.validator,this.rootSchema,e,t,r,n)}getFirstMatchingOption(e,t,r){return ie(this.validator,e,t,this.rootSchema,r)}getMatchingOption(e,t,r){return se(this.validator,e,t,this.rootSchema,r)}isFilesArray(e,t){return Ye(this.validator,e,t,this.rootSchema)}isMultiSelect(e){return Le(this.validator,e,this.rootSchema)}isSelect(e){return ze(this.validator,e,this.rootSchema)}mergeValidationData(e,t){return function(e,t,r){if(!r)return t;const{errors:n,errorSchema:o}=t;let a=e.toErrorList(r),s=r;return V()(o)||(s=qe(o,r,!0),a=[...n].concat(a)),{errorSchema:s,errors:a}}(this.validator,e,t)}retrieveSchema(e,t){return Ce(this.validator,e,this.rootSchema,t)}sanitizeDataForNewSchema(e,t,r){return Xe(this.validator,this.rootSchema,e,t,r)}toIdSchema(e,t,r,n="root",o="_"){return tt(this.validator,e,t,this.rootSchema,r,n,o)}toPathSchema(e,t,r){return nt(this.validator,e,t,this.rootSchema,r)}}function at(e,t,r={}){return new ot(e,t,r)}function st(e){var t;if(-1===e.indexOf("data:"))throw new Error("File is invalid: URI must be a dataURI");const r=e.slice(5).split(";base64,");if(2!==r.length)throw new Error("File is invalid: dataURI must be base64");const[n,o]=r,[a,...s]=n.split(";"),i=a||"",c=decodeURI((null===(t=s.map((e=>e.split("="))).find((([e])=>"name"===e)))||void 0===t?void 0:t[1])||"unknown");try{const e=atob(o),t=new Array(e.length);for(let r=0;r{const n=e.findIndex((e=>e===`%${r+1}`));n>=0&&(e[n]=t)})),r=e.join("")}return r}(e,t)}function ct(e,t=[],r){if(Array.isArray(e))return e.map((e=>ct(e,t))).filter((e=>e!==r));const n=""===e||null===e?-1:Number(e),o=t[n];return o?o.value:r}function lt(e,t,r=[]){const n=ct(e,r);return Array.isArray(t)?t.filter((e=>!le()(e,n))):le()(n,t)?void 0:t}function dt(e,t){return Array.isArray(t)?t.some((t=>le()(t,e))):le()(t,e)}function ut(e,t=[],r=!1){const n=t.map(((t,r)=>dt(t.value,e)?String(r):void 0)).filter((e=>"undefined"!==typeof e));return r?n:n[0]}var ft=r(69843),pt=r.n(ft);function mt(e,t,r=[]){const n=ct(e,r);if(!pt()(n)){const e=r.findIndex((e=>n===e.value)),o=r.map((({value:e})=>e));return t.slice(0,e).concat(n,t.slice(e)).sort(((e,t)=>Number(o.indexOf(e)>o.indexOf(t))))}return t}var ht=r(88055),yt=r.n(ht);class gt{constructor(e){this.errorSchema={},this.resetAllErrors(e)}get ErrorSchema(){return this.errorSchema}getOrCreateErrorBlock(e){let t=Array.isArray(e)&&e.length>0||"string"===typeof e?M()(this.errorSchema,e):this.errorSchema;return!t&&e&&(t={},ue()(this.errorSchema,e,t)),t}resetAllErrors(e){return this.errorSchema=e?yt()(e):{},this}addErrors(e,t){const r=this.getOrCreateErrorBlock(t);let n=M()(r,m);return Array.isArray(n)||(n=[],r[m]=n),Array.isArray(e)?n.push(...e):n.push(e),this}setErrors(e,t){const r=this.getOrCreateErrorBlock(t),n=Array.isArray(e)?[...e]:[e];return ue()(r,m,n),this}clearErrors(e){const t=this.getOrCreateErrorBlock(e);return ue()(t,m,[]),this}}function vt(e,t,r=[1900,(new Date).getFullYear()+2],n="YMD"){const{day:o,month:a,year:s,hour:i,minute:c,second:l}=e,d={type:"day",range:[1,31],value:o},u={type:"month",range:[1,12],value:a},f={type:"year",range:r,value:s},p=[];switch(n){case"MDY":p.push(u,d,f);break;case"DMY":p.push(d,u,f);break;default:p.push(f,u,d)}return t&&p.push({type:"hour",range:[0,23],value:i},{type:"minute",range:[0,59],value:c},{type:"second",range:[0,59],value:l}),p}function $t(e){const t={};return e.multipleOf&&(t.step=e.multipleOf),(e.minimum||0===e.minimum)&&(t.min=e.minimum),(e.maximum||0===e.maximum)&&(t.max=e.maximum),t}function bt(e,t,r={},n=!0){const o={type:t||"text",...$t(e)};return r.inputType?o.type=r.inputType:t||("number"===e.type?(o.type="number",n&&void 0===o.step&&(o.step="any")):"integer"===e.type&&(o.type="number",void 0===o.step&&(o.step=1))),r.autocomplete&&(o.autoComplete=r.autocomplete),o}const wt={props:{disabled:!1},submitText:"Submit",norender:!1};function St(e={}){const t=P(e);if(t&&t[S]){const e=t[S];return{...wt,...e}}return wt}function _t(e,t,r={}){const{templates:n}=t;return"ButtonTemplates"===e?n[e]:r[e]||n[e]}var xt=r(74848),Et=r(96540),kt=r(44363);const jt={boolean:{checkbox:"CheckboxWidget",radio:"RadioWidget",select:"SelectWidget",hidden:"HiddenWidget"},string:{text:"TextWidget",password:"PasswordWidget",email:"EmailWidget",hostname:"TextWidget",ipv4:"TextWidget",ipv6:"TextWidget",uri:"URLWidget","data-url":"FileWidget",radio:"RadioWidget",select:"SelectWidget",textarea:"TextareaWidget",hidden:"HiddenWidget",date:"DateWidget",datetime:"DateTimeWidget","date-time":"DateTimeWidget","alt-date":"AltDateWidget","alt-datetime":"AltDateTimeWidget",time:"TimeWidget",color:"ColorWidget",file:"FileWidget"},number:{text:"TextWidget",select:"SelectWidget",updown:"UpDownWidget",range:"RangeWidget",radio:"RadioWidget",hidden:"HiddenWidget"},integer:{text:"TextWidget",select:"SelectWidget",updown:"UpDownWidget",range:"RangeWidget",radio:"RadioWidget",hidden:"HiddenWidget"},array:{select:"SelectWidget",checkboxes:"CheckboxesWidget",files:"FileWidget",hidden:"HiddenWidget"}};function Ct(e,t,r={}){const n=ke(e);if("function"===typeof t||t&&kt.isForwardRef((0,Et.createElement)(t))||kt.isMemo(t))return function(e){let t=M()(e,"MergedWidget");if(!t){const r=e.defaultProps&&e.defaultProps.options||{};t=({options:t,...n})=>(0,xt.jsx)(e,{options:{...r,...t},...n}),ue()(e,"MergedWidget",t)}return t}(t);if("string"!==typeof t)throw new Error("Unsupported widget definition: "+typeof t);if(t in r){return Ct(e,r[t],r)}if("string"===typeof n){if(!(n in jt))throw new Error(`No widget for type '${n}'`);if(t in jt[n]){return Ct(e,r[jt[n][t]],r)}}throw new Error(`No widget '${t}' for type '${n}'`)}function Pt(e){const t=new Set;return JSON.stringify(e,((e,r)=>(t.add(e),r))),function(e){let t=0;for(let r=0;r({label:t.enumNames&&t.enumNames[r]||String(e),value:e})));const r=e.oneOf||e.anyOf;return r&&r.map((e=>{const t=e,r=function(e){if(p in e&&Array.isArray(e.enum)&&1===e.enum.length)return e.enum[0];if(d in e)return e.const;throw new Error("schema cannot be inferred as a constant")}(t);return{schema:t,label:t.title||String(r),value:r}}))}function qt(e,t){if(!Array.isArray(t))return e;const r=e=>e.reduce(((e,t)=>(e[t]=!0,e)),{}),n=r(e),o=t.filter((e=>"*"===e||n[e])),a=r(o),s=e.filter((e=>!a[e])),i=o.indexOf("*");if(-1===i){if(s.length)throw new Error("uiSchema order list does not contain "+((c=s).length>1?`properties '${c.join("', '")}'`:`property '${c[0]}'`));return o}var c;if(i!==o.lastIndexOf("*"))throw new Error("uiSchema order list contains more than one wildcard item");const l=[...o];return l.splice(i,1,...s),l}function zt(e,t){let r=String(e);for(;r.lengthKt(e);return e.allOf.some(t)}return!1}function Wt(e,t,r){const{props:n,state:o}=e;return!T(n,t)||!T(o,r)}function Ht(e,t=!0){const{year:r,month:n,day:o,hour:a=0,minute:s=0,second:i=0}=e,c=Date.UTC(r,n-1,o,a,s,i),l=new Date(c).toJSON();return t?l:l.slice(0,10)}function Gt(e,t=[]){if(!e)return[];let r=[];return m in e&&(r=r.concat(e[m].map((e=>{const r=`.${t.join(".")}`;return{property:r,message:e,stack:`${r} ${e}`}})))),Object.keys(e).reduce(((r,n)=>{if(n!==m){const o=e[n];A()(o)&&(r=r.concat(Gt(o,[...t,n])))}return r}),r)}var Zt,Jt=r(42072),Yt=r.n(Jt);function Qt(e){const t=new gt;return e.length&&e.forEach((e=>{const{property:r,message:n}=e,o="."===r?[]:Yt()(r);o.length>0&&""===o[0]&&o.splice(0,1),n&&t.addErrors(n,o)})),t.ErrorSchema}function Xt(e){return Object.keys(e).reduce(((t,r)=>{if("addError"===r)return t;{const n=e[r];return A()(n)?{...t,[r]:Xt(n)}:{...t,[r]:n}}}),{})}function er(e){if(!e)return"";const t=new Date(e);return`${zt(t.getFullYear(),4)}-${zt(t.getMonth()+1,2)}-${zt(t.getDate(),2)}T${zt(t.getHours(),2)}:${zt(t.getMinutes(),2)}:${zt(t.getSeconds(),2)}.${zt(t.getMilliseconds(),3)}`}function tr(e,t){if(!t)return e;const{errors:r,errorSchema:n}=e;let o=Gt(t),a=t;return V()(n)||(a=qe(n,t,!0),o=[...r].concat(o)),{errorSchema:a,errors:o}}function rr(e){return Array.isArray(e)?function(e){for(let t=0;t{"use strict";r.d(t,{Ay:()=>g});var n=r(78239),o=r(63282),a=r.n(o),s=r(68182),i=r.n(s),c=r(23805),l=r.n(c);const d={allErrors:!0,multipleOfPrecision:8,strict:!1,verbose:!0},u=/^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,f=/^data:([a-z]+\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;var p=r(58156),m=r.n(p);function h(e,t,r,o,a,s,i){const{validationError:c}=t;let l=function(e=[],t){return e.map((e=>{const{instancePath:r,keyword:o,params:a,schemaPath:s,parentSchema:i,...c}=e;let{message:l=""}=c,d=r.replace(/\//g,"."),u=`${d} ${l}`.trim();if("missingProperty"in a){d=d?`${d}.${a.missingProperty}`:a.missingProperty;const e=a.missingProperty,r=(0,n.$R)(m()(t,`${d.replace(/^\./,"")}`)).title;if(r)l=l.replace(e,r);else{const t=m()(i,[n.s1,e,"title"]);t&&(l=l.replace(e,t))}u=l}else{const e=(0,n.$R)(m()(t,`${d.replace(/^\./,"")}`)).title;if(e)u=`'${e}' ${l}`.trim();else{const e=null===i||void 0===i?void 0:i.title;e&&(u=`'${e}' ${l}`.trim())}}return{name:o,property:d,message:l,params:a,stack:u,schemaPath:s}}))}(t.errors,i);c&&(l=[...l,{stack:c.message}]),"function"===typeof s&&(l=s(l,i));let d=(0,n.MD)(l);if(c&&(d={...d,$schema:{__errors:[c.message]}}),"function"!==typeof a)return{errors:l,errorSchema:d};const u=(0,n.NV)(e,o,r,o,!0),f=a(u,(0,n.JF)(u),i),p=(0,n.fV)(f);return(0,n.k6)({errors:l,errorSchema:d},p)}class y{constructor(e,t){const{additionalMetaSchemas:r,customFormats:o,ajvOptionsOverrides:s,ajvFormatOptions:c,AjvClass:p}=e;this.ajv=function(e,t,r={},o,s=a()){const c=new s({...d,...r});return o?i()(c,o):!1!==o&&i()(c),c.addFormat("data-url",f),c.addFormat("color",u),c.addKeyword(n.Rr),c.addKeyword(n.yB),Array.isArray(e)&&c.addMetaSchema(e),l()(t)&&Object.keys(t).forEach((e=>{c.addFormat(e,t[e])})),c}(r,o,s,c,p),this.localizer=t}toErrorList(e,t=[]){return(0,n.SL)(e,t)}rawValidation(e,t){let r,o,a;e[n.K0]&&(o=this.ajv.getSchema(e[n.K0]));try{void 0===o&&(o=this.ajv.compile(e)),o(t)}catch(s){r=s}return o&&("function"===typeof this.localizer&&this.localizer(o.errors),a=o.errors||void 0,o.errors=null),{errors:a,validationError:r}}validateFormData(e,t,r,n,o){return h(this,this.rawValidation(t,e),e,t,r,n,o)}isValid(e,t,r){var o,a;const s=null!==(o=r[n.K0])&&void 0!==o?o:n.at;try{this.ajv.addSchema(r,s);const o=(0,n.vh)(e),i=null!==(a=o[n.K0])&&void 0!==a?a:(0,n.$K)(o);let c;c=this.ajv.getSchema(i),void 0===c&&(c=this.ajv.addSchema(o,i).getSchema(i)||this.ajv.compile(o));return c(t)}catch(i){return console.warn("Error encountered compiling schema:",i),!1}finally{this.ajv.removeSchema(s)}}}r(2404);const g=function(e={},t){return new y(e,t)}()},14018:(e,t)=>{"use strict";function r(e,t){return{validate:e,compare:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.formatNames=t.fastFormats=t.fullFormats=void 0,t.fullFormats={date:r(a,s),time:r(c,l),"date-time":r((function(e){const t=e.split(d);return 2===t.length&&a(t[0])&&c(t[1],!0)}),u),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:function(e){return f.test(e)&&p.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:function(e){if(v.test(e))return!1;try{return new RegExp(e),!0}catch(t){return!1}},uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:function(e){return m.lastIndex=0,m.test(e)},int32:{type:"number",validate:function(e){return Number.isInteger(e)&&e<=y&&e>=h}},int64:{type:"number",validate:function(e){return Number.isInteger(e)}},float:{type:"number",validate:g},double:{type:"number",validate:g},password:!0,binary:!0},t.fastFormats={...t.fullFormats,date:r(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,s),time:r(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,l),"date-time":r(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,u),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},t.formatNames=Object.keys(t.fullFormats);const n=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,o=[0,31,28,31,30,31,30,31,31,30,31,30,31];function a(e){const t=n.exec(e);if(!t)return!1;const r=+t[1],a=+t[2],s=+t[3];return a>=1&&a<=12&&s>=1&&s<=(2===a&&function(e){return e%4===0&&(e%100!==0||e%400===0)}(r)?29:o[a])}function s(e,t){if(e&&t)return e>t?1:e(t=n[1]+n[2]+n[3]+(n[4]||""))?1:e{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(14018),o=r(26461),a=r(99029),s=new a.Name("fullFormats"),i=new a.Name("fastFormats"),c=(e,t={keywords:!0})=>{if(Array.isArray(t))return l(e,t,n.fullFormats,s),e;const[r,a]="fast"===t.mode?[n.fastFormats,i]:[n.fullFormats,s];return l(e,t.formats||n.formatNames,r,a),t.keywords&&o.default(e),e};function l(e,t,r,n){var o,s;null!==(o=(s=e.opts.code).formats)&&void 0!==o||(s.formats=a._`require("ajv-formats/dist/formats").${n}`);for(const a of t)e.addFormat(a,r[a])}c.get=(e,t="full")=>{const r=("fast"===t?n.fastFormats:n.fullFormats)[e];if(!r)throw new Error(`Unknown format "${e}"`);return r},e.exports=t=c,Object.defineProperty(t,"__esModule",{value:!0}),t.default=c},26461:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatLimitDefinition=void 0;const n=r(63282),o=r(99029),a=o.operators,s={formatMaximum:{okStr:"<=",ok:a.LTE,fail:a.GT},formatMinimum:{okStr:">=",ok:a.GTE,fail:a.LT},formatExclusiveMaximum:{okStr:"<",ok:a.LT,fail:a.GTE},formatExclusiveMinimum:{okStr:">",ok:a.GT,fail:a.LTE}},i={message:({keyword:e,schemaCode:t})=>o.str`should be ${s[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>o._`{comparison: ${s[e].okStr}, limit: ${t}}`};t.formatLimitDefinition={keyword:Object.keys(s),type:"string",schemaType:"string",$data:!0,error:i,code(e){const{gen:t,data:r,schemaCode:a,keyword:i,it:c}=e,{opts:l,self:d}=c;if(!l.validateFormats)return;const u=new n.KeywordCxt(c,d.RULES.all.format.definition,"format");function f(e){return o._`${e}.compare(${r}, ${a}) ${s[i].fail} 0`}u.$data?function(){const r=t.scopeValue("formats",{ref:d.formats,code:l.code.formats}),n=t.const("fmt",o._`${r}[${u.schemaCode}]`);e.fail$data(o.or(o._`typeof ${n} != "object"`,o._`${n} instanceof RegExp`,o._`typeof ${n}.compare != "function"`,f(n)))}():function(){const r=u.schema,n=d.formats[r];if(!n||!0===n)return;if("object"!=typeof n||n instanceof RegExp||"function"!=typeof n.compare)throw new Error(`"${i}": format "${r}" does not define "compare" function`);const a=t.scopeValue("formats",{key:r,ref:n,code:l.code.formats?o._`${l.code.formats}${o.getProperty(r)}`:void 0});e.fail$data(f(a))}()},dependencies:["format"]};t.default=e=>(e.addKeyword(t.formatLimitDefinition),e)},63282:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MissingRefError=t.ValidationError=t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;const n=r(4042),o=r(86144),a=r(36653),s=r(72079),i=["/properties"],c="http://json-schema.org/draft-07/schema";class l extends n.default{_addVocabularies(){super._addVocabularies(),o.default.forEach((e=>this.addVocabulary(e))),this.opts.discriminator&&this.addKeyword(a.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const e=this.opts.$data?this.$dataMetaSchema(s,i):s;this.addMetaSchema(e,c,!1),this.refs["http://json-schema.org/schema"]=c}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(c)?c:void 0)}}e.exports=t=l,Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;var d=r(62586);Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return d.KeywordCxt}});var u=r(99029);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var f=r(13558);Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return f.default}});var p=r(34551);Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return p.default}})},41520:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.regexpCode=t.getEsmExportName=t.getProperty=t.safeStringify=t.stringify=t.strConcat=t.addCodeArg=t.str=t._=t.nil=t._Code=t.Name=t.IDENTIFIER=t._CodeOrName=void 0;class r{}t._CodeOrName=r,t.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class n extends r{constructor(e){if(super(),!t.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}t.Name=n;class o extends r{constructor(e){super(),this._items="string"===typeof e?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const e=this._items[0];return""===e||'""'===e}get str(){var e;return null!==(e=this._str)&&void 0!==e?e:this._str=this._items.reduce(((e,t)=>`${e}${t}`),"")}get names(){var e;return null!==(e=this._names)&&void 0!==e?e:this._names=this._items.reduce(((e,t)=>(t instanceof n&&(e[t.str]=(e[t.str]||0)+1),e)),{})}}function a(e,...t){const r=[e[0]];let n=0;for(;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.or=t.and=t.not=t.CodeGen=t.operators=t.varKinds=t.ValueScopeName=t.ValueScope=t.Scope=t.Name=t.regexpCode=t.stringify=t.getProperty=t.nil=t.strConcat=t.str=t._=void 0;const n=r(41520),o=r(57845);var a=r(41520);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return a._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return a.str}}),Object.defineProperty(t,"strConcat",{enumerable:!0,get:function(){return a.strConcat}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return a.nil}}),Object.defineProperty(t,"getProperty",{enumerable:!0,get:function(){return a.getProperty}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return a.stringify}}),Object.defineProperty(t,"regexpCode",{enumerable:!0,get:function(){return a.regexpCode}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return a.Name}});var s=r(57845);Object.defineProperty(t,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(t,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(t,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(t,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),t.operators={GT:new n._Code(">"),GTE:new n._Code(">="),LT:new n._Code("<"),LTE:new n._Code("<="),EQ:new n._Code("==="),NEQ:new n._Code("!=="),NOT:new n._Code("!"),OR:new n._Code("||"),AND:new n._Code("&&"),ADD:new n._Code("+")};class i{optimizeNodes(){return this}optimizeNames(e,t){return this}}class c extends i{constructor(e,t,r){super(),this.varKind=e,this.name=t,this.rhs=r}render({es5:e,_n:t}){const r=e?o.varKinds.var:this.varKind,n=void 0===this.rhs?"":` = ${this.rhs}`;return`${r} ${this.name}${n};`+t}optimizeNames(e,t){if(e[this.name.str])return this.rhs&&(this.rhs=N(this.rhs,e,t)),this}get names(){return this.rhs instanceof n._CodeOrName?this.rhs.names:{}}}class l extends i{constructor(e,t,r){super(),this.lhs=e,this.rhs=t,this.sideEffects=r}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(!(this.lhs instanceof n.Name)||e[this.lhs.str]||this.sideEffects)return this.rhs=N(this.rhs,e,t),this}get names(){return O(this.lhs instanceof n.Name?{}:{...this.lhs.names},this.rhs)}}class d extends l{constructor(e,t,r,n){super(e,r,n),this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class u extends i{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class f extends i{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class p extends i{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class m extends i{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=N(this.code,e,t),this}get names(){return this.code instanceof n._CodeOrName?this.code.names:{}}}class h extends i{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce(((t,r)=>t+r.render(e)),"")}optimizeNodes(){const{nodes:e}=this;let t=e.length;for(;t--;){const r=e[t].optimizeNodes();Array.isArray(r)?e.splice(t,1,...r):r?e[t]=r:e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){const{nodes:r}=this;let n=r.length;for(;n--;){const o=r[n];o.optimizeNames(e,t)||(A(e,o.names),r.splice(n,1))}return r.length>0?this:void 0}get names(){return this.nodes.reduce(((e,t)=>P(e,t.names)),{})}}class y extends h{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class g extends h{}class v extends y{}v.kind="else";class $ extends y{constructor(e,t){super(t),this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);return this.else&&(t+="else "+this.else.render(e)),t}optimizeNodes(){super.optimizeNodes();const e=this.condition;if(!0===e)return this.nodes;let t=this.else;if(t){const e=t.optimizeNodes();t=this.else=Array.isArray(e)?new v(e):e}return t?!1===e?t instanceof $?t:t.nodes:this.nodes.length?this:new $(D(e),t instanceof $?[t]:t.nodes):!1!==e&&this.nodes.length?this:void 0}optimizeNames(e,t){var r;if(this.else=null===(r=this.else)||void 0===r?void 0:r.optimizeNames(e,t),super.optimizeNames(e,t)||this.else)return this.condition=N(this.condition,e,t),this}get names(){const e=super.names;return O(e,this.condition),this.else&&P(e,this.else.names),e}}$.kind="if";class b extends y{}b.kind="for";class w extends b{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iteration=N(this.iteration,e,t),this}get names(){return P(super.names,this.iteration.names)}}class S extends b{constructor(e,t,r,n){super(),this.varKind=e,this.name=t,this.from=r,this.to=n}render(e){const t=e.es5?o.varKinds.var:this.varKind,{name:r,from:n,to:a}=this;return`for(${t} ${r}=${n}; ${r}<${a}; ${r}++)`+super.render(e)}get names(){const e=O(super.names,this.from);return O(e,this.to)}}class _ extends b{constructor(e,t,r,n){super(),this.loop=e,this.varKind=t,this.name=r,this.iterable=n}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iterable=N(this.iterable,e,t),this}get names(){return P(super.names,this.iterable.names)}}class x extends y{constructor(e,t,r){super(),this.name=e,this.args=t,this.async=r}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}x.kind="func";class E extends h{render(e){return"return "+super.render(e)}}E.kind="return";class k extends y{render(e){let t="try"+super.render(e);return this.catch&&(t+=this.catch.render(e)),this.finally&&(t+=this.finally.render(e)),t}optimizeNodes(){var e,t;return super.optimizeNodes(),null===(e=this.catch)||void 0===e||e.optimizeNodes(),null===(t=this.finally)||void 0===t||t.optimizeNodes(),this}optimizeNames(e,t){var r,n;return super.optimizeNames(e,t),null===(r=this.catch)||void 0===r||r.optimizeNames(e,t),null===(n=this.finally)||void 0===n||n.optimizeNames(e,t),this}get names(){const e=super.names;return this.catch&&P(e,this.catch.names),this.finally&&P(e,this.finally.names),e}}class j extends y{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}j.kind="catch";class C extends y{render(e){return"finally"+super.render(e)}}C.kind="finally";function P(e,t){for(const r in t)e[r]=(e[r]||0)+(t[r]||0);return e}function O(e,t){return t instanceof n._CodeOrName?P(e,t.names):e}function N(e,t,r){return e instanceof n.Name?a(e):(o=e)instanceof n._Code&&o._items.some((e=>e instanceof n.Name&&1===t[e.str]&&void 0!==r[e.str]))?new n._Code(e._items.reduce(((e,t)=>(t instanceof n.Name&&(t=a(t)),t instanceof n._Code?e.push(...t._items):e.push(t),e)),[])):e;var o;function a(e){const n=r[e.str];return void 0===n||1!==t[e.str]?e:(delete t[e.str],n)}}function A(e,t){for(const r in t)e[r]=(e[r]||0)-(t[r]||0)}function D(e){return"boolean"==typeof e||"number"==typeof e||null===e?!e:n._`!${R(e)}`}t.CodeGen=class{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?"\n":""},this._extScope=e,this._scope=new o.Scope({parent:e}),this._nodes=[new g]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){const r=this._extScope.value(e,t);return(this._values[r.prefix]||(this._values[r.prefix]=new Set)).add(r),r}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,r,n){const o=this._scope.toName(t);return void 0!==r&&n&&(this._constants[o.str]=r),this._leafNode(new c(e,o,r)),o}const(e,t,r){return this._def(o.varKinds.const,e,t,r)}let(e,t,r){return this._def(o.varKinds.let,e,t,r)}var(e,t,r){return this._def(o.varKinds.var,e,t,r)}assign(e,t,r){return this._leafNode(new l(e,t,r))}add(e,r){return this._leafNode(new d(e,t.operators.ADD,r))}code(e){return"function"==typeof e?e():e!==n.nil&&this._leafNode(new m(e)),this}object(...e){const t=["{"];for(const[r,o]of e)t.length>1&&t.push(","),t.push(r),(r!==o||this.opts.es5)&&(t.push(":"),(0,n.addCodeArg)(t,o));return t.push("}"),new n._Code(t)}if(e,t,r){if(this._blockNode(new $(e)),t&&r)this.code(t).else().code(r).endIf();else if(t)this.code(t).endIf();else if(r)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new $(e))}else(){return this._elseNode(new v)}endIf(){return this._endBlockNode($,v)}_for(e,t){return this._blockNode(e),t&&this.code(t).endFor(),this}for(e,t){return this._for(new w(e),t)}forRange(e,t,r,n,a=(this.opts.es5?o.varKinds.var:o.varKinds.let)){const s=this._scope.toName(e);return this._for(new S(a,s,t,r),(()=>n(s)))}forOf(e,t,r,a=o.varKinds.const){const s=this._scope.toName(e);if(this.opts.es5){const e=t instanceof n.Name?t:this.var("_arr",t);return this.forRange("_i",0,n._`${e}.length`,(t=>{this.var(s,n._`${e}[${t}]`),r(s)}))}return this._for(new _("of",a,s,t),(()=>r(s)))}forIn(e,t,r,a=(this.opts.es5?o.varKinds.var:o.varKinds.const)){if(this.opts.ownProperties)return this.forOf(e,n._`Object.keys(${t})`,r);const s=this._scope.toName(e);return this._for(new _("in",a,s,t),(()=>r(s)))}endFor(){return this._endBlockNode(b)}label(e){return this._leafNode(new u(e))}break(e){return this._leafNode(new f(e))}return(e){const t=new E;if(this._blockNode(t),this.code(e),1!==t.nodes.length)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(E)}try(e,t,r){if(!t&&!r)throw new Error('CodeGen: "try" without "catch" and "finally"');const n=new k;if(this._blockNode(n),this.code(e),t){const e=this.name("e");this._currNode=n.catch=new j(e),t(e)}return r&&(this._currNode=n.finally=new C,this.code(r)),this._endBlockNode(j,C)}throw(e){return this._leafNode(new p(e))}block(e,t){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(t),this}endBlock(e){const t=this._blockStarts.pop();if(void 0===t)throw new Error("CodeGen: not in self-balancing block");const r=this._nodes.length-t;if(r<0||void 0!==e&&r!==e)throw new Error(`CodeGen: wrong number of nodes: ${r} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=n.nil,r,o){return this._blockNode(new x(e,t,r)),o&&this.code(o).endFunc(),this}endFunc(){return this._endBlockNode(x)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){const r=this._currNode;if(r instanceof e||t&&r instanceof t)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){const t=this._currNode;if(!(t instanceof $))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){const e=this._nodes;return e[e.length-1]}set _currNode(e){const t=this._nodes;t[t.length-1]=e}},t.not=D;const I=T(t.operators.AND);t.and=function(...e){return e.reduce(I)};const F=T(t.operators.OR);function T(e){return(t,r)=>t===n.nil?r:r===n.nil?t:n._`${R(t)} ${e} ${R(r)}`}function R(e){return e instanceof n.Name?e:n._`(${e})`}t.or=function(...e){return e.reduce(F)}},57845:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ValueScope=t.ValueScopeName=t.Scope=t.varKinds=t.UsedValueState=void 0;const n=r(41520);class o extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}}var a;!function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"}(a=t.UsedValueState||(t.UsedValueState={})),t.varKinds={const:new n.Name("const"),let:new n.Name("let"),var:new n.Name("var")};class s{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof n.Name?e:this.name(e)}name(e){return new n.Name(this._newName(e))}_newName(e){return`${e}${(this._names[e]||this._nameGroup(e)).index++}`}_nameGroup(e){var t,r;if((null===(r=null===(t=this._parent)||void 0===t?void 0:t._prefixes)||void 0===r?void 0:r.has(e))||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}t.Scope=s;class i extends n.Name{constructor(e,t){super(t),this.prefix=e}setValue(e,{property:t,itemIndex:r}){this.value=e,this.scopePath=n._`.${new n.Name(t)}[${r}]`}}t.ValueScopeName=i;const c=n._`\n`;t.ValueScope=class extends s{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?c:n.nil}}get(){return this._scope}name(e){return new i(e,this._newName(e))}value(e,t){var r;if(void 0===t.ref)throw new Error("CodeGen: ref must be passed in value");const n=this.toName(e),{prefix:o}=n,a=null!==(r=t.key)&&void 0!==r?r:t.ref;let s=this._values[o];if(s){const e=s.get(a);if(e)return e}else s=this._values[o]=new Map;s.set(a,n);const i=this._scope[o]||(this._scope[o]=[]),c=i.length;return i[c]=t.ref,n.setValue(t,{property:o,itemIndex:c}),n}getValue(e,t){const r=this._values[e];if(r)return r.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(t=>{if(void 0===t.scopePath)throw new Error(`CodeGen: name "${t}" has no value`);return n._`${e}${t.scopePath}`}))}scopeCode(e=this._values,t,r){return this._reduceValues(e,(e=>{if(void 0===e.value)throw new Error(`CodeGen: name "${e}" has no value`);return e.value.code}),t,r)}_reduceValues(e,r,s={},i){let c=n.nil;for(const l in e){const d=e[l];if(!d)continue;const u=s[l]=s[l]||new Map;d.forEach((e=>{if(u.has(e))return;u.set(e,a.Started);let s=r(e);if(s){const r=this.opts.es5?t.varKinds.var:t.varKinds.const;c=n._`${c}${r} ${e} = ${s};${this.opts._n}`}else{if(!(s=null===i||void 0===i?void 0:i(e)))throw new o(e);c=n._`${c}${s}${this.opts._n}`}u.set(e,a.Completed)}))}return c}}},48708:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.extendErrors=t.resetErrorsCount=t.reportExtraError=t.reportError=t.keyword$DataError=t.keywordError=void 0;const n=r(99029),o=r(94227),a=r(42023);function s(e,t){const r=e.const("err",t);e.if(n._`${a.default.vErrors} === null`,(()=>e.assign(a.default.vErrors,n._`[${r}]`)),n._`${a.default.vErrors}.push(${r})`),e.code(n._`${a.default.errors}++`)}function i(e,t){const{gen:r,validateName:o,schemaEnv:a}=e;a.$async?r.throw(n._`new ${e.ValidationError}(${t})`):(r.assign(n._`${o}.errors`,t),r.return(!1))}t.keywordError={message:({keyword:e})=>n.str`must pass "${e}" keyword validation`},t.keyword$DataError={message:({keyword:e,schemaType:t})=>t?n.str`"${e}" keyword must be ${t} ($data)`:n.str`"${e}" keyword is invalid ($data)`},t.reportError=function(e,r=t.keywordError,o,a){const{it:c}=e,{gen:d,compositeRule:u,allErrors:f}=c,p=l(e,r,o);(null!==a&&void 0!==a?a:u||f)?s(d,p):i(c,n._`[${p}]`)},t.reportExtraError=function(e,r=t.keywordError,n){const{it:o}=e,{gen:c,compositeRule:d,allErrors:u}=o;s(c,l(e,r,n)),d||u||i(o,a.default.vErrors)},t.resetErrorsCount=function(e,t){e.assign(a.default.errors,t),e.if(n._`${a.default.vErrors} !== null`,(()=>e.if(t,(()=>e.assign(n._`${a.default.vErrors}.length`,t)),(()=>e.assign(a.default.vErrors,null)))))},t.extendErrors=function({gen:e,keyword:t,schemaValue:r,data:o,errsCount:s,it:i}){if(void 0===s)throw new Error("ajv implementation error");const c=e.name("err");e.forRange("i",s,a.default.errors,(s=>{e.const(c,n._`${a.default.vErrors}[${s}]`),e.if(n._`${c}.instancePath === undefined`,(()=>e.assign(n._`${c}.instancePath`,(0,n.strConcat)(a.default.instancePath,i.errorPath)))),e.assign(n._`${c}.schemaPath`,n.str`${i.errSchemaPath}/${t}`),i.opts.verbose&&(e.assign(n._`${c}.schema`,r),e.assign(n._`${c}.data`,o))}))};const c={keyword:new n.Name("keyword"),schemaPath:new n.Name("schemaPath"),params:new n.Name("params"),propertyName:new n.Name("propertyName"),message:new n.Name("message"),schema:new n.Name("schema"),parentSchema:new n.Name("parentSchema")};function l(e,t,r){const{createErrors:o}=e.it;return!1===o?n._`{}`:function(e,t,r={}){const{gen:o,it:s}=e,i=[d(s,r),u(e,r)];return function(e,{params:t,message:r},o){const{keyword:s,data:i,schemaValue:l,it:d}=e,{opts:u,propertyName:f,topSchemaRef:p,schemaPath:m}=d;o.push([c.keyword,s],[c.params,"function"==typeof t?t(e):t||n._`{}`]),u.messages&&o.push([c.message,"function"==typeof r?r(e):r]);u.verbose&&o.push([c.schema,l],[c.parentSchema,n._`${p}${m}`],[a.default.data,i]);f&&o.push([c.propertyName,f])}(e,t,i),o.object(...i)}(e,t,r)}function d({errorPath:e},{instancePath:t}){const r=t?n.str`${e}${(0,o.getErrorPath)(t,o.Type.Str)}`:e;return[a.default.instancePath,(0,n.strConcat)(a.default.instancePath,r)]}function u({keyword:e,it:{errSchemaPath:t}},{schemaPath:r,parentSchema:a}){let s=a?t:n.str`${t}/${e}`;return r&&(s=n.str`${s}${(0,o.getErrorPath)(r,o.Type.Str)}`),[c.schemaPath,s]}},73835:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resolveSchema=t.getCompilingSchema=t.resolveRef=t.compileSchema=t.SchemaEnv=void 0;const n=r(99029),o=r(13558),a=r(42023),s=r(66939),i=r(94227),c=r(62586);class l{constructor(e){var t;let r;this.refs={},this.dynamicAnchors={},"object"==typeof e.schema&&(r=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=null!==(t=e.baseId)&&void 0!==t?t:(0,s.normalizeId)(null===r||void 0===r?void 0:r[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=null===r||void 0===r?void 0:r.$async,this.refs={}}}function d(e){const t=f.call(this,e);if(t)return t;const r=(0,s.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:i,lines:l}=this.opts.code,{ownProperties:d}=this.opts,u=new n.CodeGen(this.scope,{es5:i,lines:l,ownProperties:d});let p;e.$async&&(p=u.scopeValue("Error",{ref:o.default,code:n._`require("ajv/dist/runtime/validation_error").default`}));const m=u.scopeName("validate");e.validateName=m;const h={gen:u,allErrors:this.opts.allErrors,data:a.default.data,parentData:a.default.parentData,parentDataProperty:a.default.parentDataProperty,dataNames:[a.default.data],dataPathArr:[n.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:u.scopeValue("schema",!0===this.opts.code.source?{ref:e.schema,code:(0,n.stringify)(e.schema)}:{ref:e.schema}),validateName:m,ValidationError:p,schema:e.schema,schemaEnv:e,rootId:r,baseId:e.baseId||r,schemaPath:n.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:n._`""`,opts:this.opts,self:this};let y;try{this._compilations.add(e),(0,c.validateFunctionCode)(h),u.optimize(this.opts.code.optimize);const t=u.toString();y=`${u.scopeRefs(a.default.scope)}return ${t}`,this.opts.code.process&&(y=this.opts.code.process(y,e));const r=new Function(`${a.default.self}`,`${a.default.scope}`,y)(this,this.scope.get());if(this.scope.value(m,{ref:r}),r.errors=null,r.schema=e.schema,r.schemaEnv=e,e.$async&&(r.$async=!0),!0===this.opts.code.source&&(r.source={validateName:m,validateCode:t,scopeValues:u._values}),this.opts.unevaluated){const{props:e,items:t}=h;r.evaluated={props:e instanceof n.Name?void 0:e,items:t instanceof n.Name?void 0:t,dynamicProps:e instanceof n.Name,dynamicItems:t instanceof n.Name},r.source&&(r.source.evaluated=(0,n.stringify)(r.evaluated))}return e.validate=r,e}catch(g){throw delete e.validate,delete e.validateName,y&&this.logger.error("Error compiling schema, function code:",y),g}finally{this._compilations.delete(e)}}function u(e){return(0,s.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:d.call(this,e)}function f(e){for(const n of this._compilations)if(r=e,(t=n).schema===r.schema&&t.root===r.root&&t.baseId===r.baseId)return n;var t,r}function p(e,t){let r;for(;"string"==typeof(r=this.refs[t]);)t=r;return r||this.schemas[t]||m.call(this,e,t)}function m(e,t){const r=this.opts.uriResolver.parse(t),n=(0,s._getFullPath)(this.opts.uriResolver,r);let o=(0,s.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&n===o)return y.call(this,r,e);const a=(0,s.normalizeId)(n),i=this.refs[a]||this.schemas[a];if("string"==typeof i){const t=m.call(this,e,i);if("object"!==typeof(null===t||void 0===t?void 0:t.schema))return;return y.call(this,r,t)}if("object"===typeof(null===i||void 0===i?void 0:i.schema)){if(i.validate||d.call(this,i),a===(0,s.normalizeId)(t)){const{schema:t}=i,{schemaId:r}=this.opts,n=t[r];return n&&(o=(0,s.resolveUrl)(this.opts.uriResolver,o,n)),new l({schema:t,schemaId:r,root:e,baseId:o})}return y.call(this,r,i)}}t.SchemaEnv=l,t.compileSchema=d,t.resolveRef=function(e,t,r){var n;r=(0,s.resolveUrl)(this.opts.uriResolver,t,r);const o=e.refs[r];if(o)return o;let a=p.call(this,e,r);if(void 0===a){const o=null===(n=e.localRefs)||void 0===n?void 0:n[r],{schemaId:s}=this.opts;o&&(a=new l({schema:o,schemaId:s,root:e,baseId:t}))}return void 0!==a?e.refs[r]=u.call(this,a):void 0},t.getCompilingSchema=f,t.resolveSchema=m;const h=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function y(e,{baseId:t,schema:r,root:n}){var o;if("/"!==(null===(o=e.fragment)||void 0===o?void 0:o[0]))return;for(const l of e.fragment.slice(1).split("/")){if("boolean"===typeof r)return;const e=r[(0,i.unescapeFragment)(l)];if(void 0===e)return;const n="object"===typeof(r=e)&&r[this.opts.schemaId];!h.has(l)&&n&&(t=(0,s.resolveUrl)(this.opts.uriResolver,t,n))}let a;if("boolean"!=typeof r&&r.$ref&&!(0,i.schemaHasRulesButRef)(r,this.RULES)){const e=(0,s.resolveUrl)(this.opts.uriResolver,t,r.$ref);a=m.call(this,n,e)}const{schemaId:c}=this.opts;return a=a||new l({schema:r,schemaId:c,root:n,baseId:t}),a.schema!==a.root.schema?a:void 0}},42023:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o={data:new n.Name("data"),valCxt:new n.Name("valCxt"),instancePath:new n.Name("instancePath"),parentData:new n.Name("parentData"),parentDataProperty:new n.Name("parentDataProperty"),rootData:new n.Name("rootData"),dynamicAnchors:new n.Name("dynamicAnchors"),vErrors:new n.Name("vErrors"),errors:new n.Name("errors"),this:new n.Name("this"),self:new n.Name("self"),scope:new n.Name("scope"),json:new n.Name("json"),jsonPos:new n.Name("jsonPos"),jsonLen:new n.Name("jsonLen"),jsonPart:new n.Name("jsonPart")};t.default=o},34551:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(66939);class o extends Error{constructor(e,t,r,o){super(o||`can't resolve reference ${r} from id ${t}`),this.missingRef=(0,n.resolveUrl)(e,t,r),this.missingSchema=(0,n.normalizeId)((0,n.getFullPath)(e,this.missingRef))}}t.default=o},66939:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSchemaRefs=t.resolveUrl=t.normalizeId=t._getFullPath=t.getFullPath=t.inlineRef=void 0;const n=r(94227),o=r(32017),a=r(7106),s=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);t.inlineRef=function(e,t=!0){return"boolean"==typeof e||(!0===t?!c(e):!!t&&l(e)<=t)};const i=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function c(e){for(const t in e){if(i.has(t))return!0;const r=e[t];if(Array.isArray(r)&&r.some(c))return!0;if("object"==typeof r&&c(r))return!0}return!1}function l(e){let t=0;for(const r in e){if("$ref"===r)return 1/0;if(t++,!s.has(r)&&("object"==typeof e[r]&&(0,n.eachItem)(e[r],(e=>t+=l(e))),t===1/0))return 1/0}return t}function d(e,t="",r){!1!==r&&(t=p(t));const n=e.parse(t);return u(e,n)}function u(e,t){return e.serialize(t).split("#")[0]+"#"}t.getFullPath=d,t._getFullPath=u;const f=/#\/?$/;function p(e){return e?e.replace(f,""):""}t.normalizeId=p,t.resolveUrl=function(e,t,r){return r=p(r),e.resolve(t,r)};const m=/^[a-z_][-a-z0-9._]*$/i;t.getSchemaRefs=function(e,t){if("boolean"==typeof e)return{};const{schemaId:r,uriResolver:n}=this.opts,s=p(e[r]||t),i={"":s},c=d(n,s,!1),l={},u=new Set;return a(e,{allKeys:!0},((e,t,n,o)=>{if(void 0===o)return;const a=c+t;let s=i[o];function d(t){const r=this.opts.uriResolver.resolve;if(t=p(s?r(s,t):t),u.has(t))throw h(t);u.add(t);let n=this.refs[t];return"string"==typeof n&&(n=this.refs[n]),"object"==typeof n?f(e,n.schema,t):t!==p(a)&&("#"===t[0]?(f(e,l[t],t),l[t]=e):this.refs[t]=a),t}function y(e){if("string"==typeof e){if(!m.test(e))throw new Error(`invalid anchor "${e}"`);d.call(this,`#${e}`)}}"string"==typeof e[r]&&(s=d.call(this,e[r])),y.call(this,e.$anchor),y.call(this,e.$dynamicAnchor),i[t]=s})),l;function f(e,t,r){if(void 0!==t&&!o(e,t))throw h(r)}function h(e){return new Error(`reference "${e}" resolves to more than one schema`)}}},10396:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRules=t.isJSONType=void 0;const r=new Set(["string","number","integer","boolean","null","object","array"]);t.isJSONType=function(e){return"string"==typeof e&&r.has(e)},t.getRules=function(){const e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}},94227:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkStrictMode=t.getErrorPath=t.Type=t.useFunc=t.setEvaluated=t.evaluatedPropsToName=t.mergeEvaluated=t.eachItem=t.unescapeJsonPointer=t.escapeJsonPointer=t.escapeFragment=t.unescapeFragment=t.schemaRefOrVal=t.schemaHasRulesButRef=t.schemaHasRules=t.checkUnknownRules=t.alwaysValidSchema=t.toHash=void 0;const n=r(99029),o=r(41520);function a(e,t=e.schema){const{opts:r,self:n}=e;if(!r.strictSchema)return;if("boolean"===typeof t)return;const o=n.RULES.keywords;for(const a in t)o[a]||m(e,`unknown keyword: "${a}"`)}function s(e,t){if("boolean"==typeof e)return!e;for(const r in e)if(t[r])return!0;return!1}function i(e){return"number"==typeof e?`${e}`:e.replace(/~/g,"~0").replace(/\//g,"~1")}function c(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function l({mergeNames:e,mergeToName:t,mergeValues:r,resultToName:o}){return(a,s,i,c)=>{const l=void 0===i?s:i instanceof n.Name?(s instanceof n.Name?e(a,s,i):t(a,s,i),i):s instanceof n.Name?(t(a,i,s),s):r(s,i);return c!==n.Name||l instanceof n.Name?l:o(a,l)}}function d(e,t){if(!0===t)return e.var("props",!0);const r=e.var("props",n._`{}`);return void 0!==t&&u(e,r,t),r}function u(e,t,r){Object.keys(r).forEach((r=>e.assign(n._`${t}${(0,n.getProperty)(r)}`,!0)))}t.toHash=function(e){const t={};for(const r of e)t[r]=!0;return t},t.alwaysValidSchema=function(e,t){return"boolean"==typeof t?t:0===Object.keys(t).length||(a(e,t),!s(t,e.self.RULES.all))},t.checkUnknownRules=a,t.schemaHasRules=s,t.schemaHasRulesButRef=function(e,t){if("boolean"==typeof e)return!e;for(const r in e)if("$ref"!==r&&t.all[r])return!0;return!1},t.schemaRefOrVal=function({topSchemaRef:e,schemaPath:t},r,o,a){if(!a){if("number"==typeof r||"boolean"==typeof r)return r;if("string"==typeof r)return n._`${r}`}return n._`${e}${t}${(0,n.getProperty)(o)}`},t.unescapeFragment=function(e){return c(decodeURIComponent(e))},t.escapeFragment=function(e){return encodeURIComponent(i(e))},t.escapeJsonPointer=i,t.unescapeJsonPointer=c,t.eachItem=function(e,t){if(Array.isArray(e))for(const r of e)t(r);else t(e)},t.mergeEvaluated={props:l({mergeNames:(e,t,r)=>e.if(n._`${r} !== true && ${t} !== undefined`,(()=>{e.if(n._`${t} === true`,(()=>e.assign(r,!0)),(()=>e.assign(r,n._`${r} || {}`).code(n._`Object.assign(${r}, ${t})`)))})),mergeToName:(e,t,r)=>e.if(n._`${r} !== true`,(()=>{!0===t?e.assign(r,!0):(e.assign(r,n._`${r} || {}`),u(e,r,t))})),mergeValues:(e,t)=>!0===e||{...e,...t},resultToName:d}),items:l({mergeNames:(e,t,r)=>e.if(n._`${r} !== true && ${t} !== undefined`,(()=>e.assign(r,n._`${t} === true ? true : ${r} > ${t} ? ${r} : ${t}`))),mergeToName:(e,t,r)=>e.if(n._`${r} !== true`,(()=>e.assign(r,!0===t||n._`${r} > ${t} ? ${r} : ${t}`))),mergeValues:(e,t)=>!0===e||Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})},t.evaluatedPropsToName=d,t.setEvaluated=u;const f={};var p;function m(e,t,r=e.opts.strictSchema){if(r){if(t=`strict mode: ${t}`,!0===r)throw new Error(t);e.self.logger.warn(t)}}t.useFunc=function(e,t){return e.scopeValue("func",{ref:t,code:f[t.code]||(f[t.code]=new o._Code(t.code))})},function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"}(p=t.Type||(t.Type={})),t.getErrorPath=function(e,t,r){if(e instanceof n.Name){const o=t===p.Num;return r?o?n._`"[" + ${e} + "]"`:n._`"['" + ${e} + "']"`:o?n._`"/" + ${e}`:n._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return r?(0,n.getProperty)(e).toString():"/"+i(e)},t.checkStrictMode=m},7887:(e,t)=>{"use strict";function r(e,t){return t.rules.some((t=>n(e,t)))}function n(e,t){var r;return void 0!==e[t.keyword]||(null===(r=t.definition.implements)||void 0===r?void 0:r.some((t=>void 0!==e[t])))}Object.defineProperty(t,"__esModule",{value:!0}),t.shouldUseRule=t.shouldUseGroup=t.schemaHasRulesForType=void 0,t.schemaHasRulesForType=function({schema:e,self:t},n){const o=t.RULES.types[n];return o&&!0!==o&&r(e,o)},t.shouldUseGroup=r,t.shouldUseRule=n},28727:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.boolOrEmptySchema=t.topBoolOrEmptySchema=void 0;const n=r(48708),o=r(99029),a=r(42023),s={message:"boolean schema is false"};function i(e,t){const{gen:r,data:o}=e,a={gen:r,keyword:"false schema",data:o,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,n.reportError)(a,s,void 0,t)}t.topBoolOrEmptySchema=function(e){const{gen:t,schema:r,validateName:n}=e;!1===r?i(e,!1):"object"==typeof r&&!0===r.$async?t.return(a.default.data):(t.assign(o._`${n}.errors`,null),t.return(!0))},t.boolOrEmptySchema=function(e,t){const{gen:r,schema:n}=e;!1===n?(r.var(t,!1),i(e)):r.var(t,!0)}},10208:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reportTypeError=t.checkDataTypes=t.checkDataType=t.coerceAndCheckDataType=t.getJSONTypes=t.getSchemaTypes=t.DataType=void 0;const n=r(10396),o=r(7887),a=r(48708),s=r(99029),i=r(94227);var c;function l(e){const t=Array.isArray(e)?e:e?[e]:[];if(t.every(n.isJSONType))return t;throw new Error("type must be JSONType or JSONType[]: "+t.join(","))}!function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"}(c=t.DataType||(t.DataType={})),t.getSchemaTypes=function(e){const t=l(e.type);if(t.includes("null")){if(!1===e.nullable)throw new Error("type: null contradicts nullable: false")}else{if(!t.length&&void 0!==e.nullable)throw new Error('"nullable" cannot be used without "type"');!0===e.nullable&&t.push("null")}return t},t.getJSONTypes=l,t.coerceAndCheckDataType=function(e,t){const{gen:r,data:n,opts:a}=e,i=function(e,t){return t?e.filter((e=>d.has(e)||"array"===t&&"array"===e)):[]}(t,a.coerceTypes),l=t.length>0&&!(0===i.length&&1===t.length&&(0,o.schemaHasRulesForType)(e,t[0]));if(l){const o=f(t,n,a.strictNumbers,c.Wrong);r.if(o,(()=>{i.length?function(e,t,r){const{gen:n,data:o,opts:a}=e,i=n.let("dataType",s._`typeof ${o}`),c=n.let("coerced",s._`undefined`);"array"===a.coerceTypes&&n.if(s._`${i} == 'object' && Array.isArray(${o}) && ${o}.length == 1`,(()=>n.assign(o,s._`${o}[0]`).assign(i,s._`typeof ${o}`).if(f(t,o,a.strictNumbers),(()=>n.assign(c,o)))));n.if(s._`${c} !== undefined`);for(const s of r)(d.has(s)||"array"===s&&"array"===a.coerceTypes)&&l(s);function l(e){switch(e){case"string":return void n.elseIf(s._`${i} == "number" || ${i} == "boolean"`).assign(c,s._`"" + ${o}`).elseIf(s._`${o} === null`).assign(c,s._`""`);case"number":return void n.elseIf(s._`${i} == "boolean" || ${o} === null - || (${i} == "string" && ${o} && ${o} == +${o})`).assign(c,s._`+${o}`);case"integer":return void n.elseIf(s._`${i} === "boolean" || ${o} === null - || (${i} === "string" && ${o} && ${o} == +${o} && !(${o} % 1))`).assign(c,s._`+${o}`);case"boolean":return void n.elseIf(s._`${o} === "false" || ${o} === 0 || ${o} === null`).assign(c,!1).elseIf(s._`${o} === "true" || ${o} === 1`).assign(c,!0);case"null":return n.elseIf(s._`${o} === "" || ${o} === 0 || ${o} === false`),void n.assign(c,null);case"array":n.elseIf(s._`${i} === "string" || ${i} === "number" - || ${i} === "boolean" || ${o} === null`).assign(c,s._`[${o}]`)}}n.else(),m(e),n.endIf(),n.if(s._`${c} !== undefined`,(()=>{n.assign(o,c),function({gen:e,parentData:t,parentDataProperty:r},n){e.if(s._`${t} !== undefined`,(()=>e.assign(s._`${t}[${r}]`,n)))}(e,c)}))}(e,t,i):m(e)}))}return l};const d=new Set(["string","number","integer","boolean","null"]);function u(e,t,r,n=c.Correct){const o=n===c.Correct?s.operators.EQ:s.operators.NEQ;let a;switch(e){case"null":return s._`${t} ${o} null`;case"array":a=s._`Array.isArray(${t})`;break;case"object":a=s._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":a=i(s._`!(${t} % 1) && !isNaN(${t})`);break;case"number":a=i();break;default:return s._`typeof ${t} ${o} ${e}`}return n===c.Correct?a:(0,s.not)(a);function i(e=s.nil){return(0,s.and)(s._`typeof ${t} == "number"`,e,r?s._`isFinite(${t})`:s.nil)}}function f(e,t,r,n){if(1===e.length)return u(e[0],t,r,n);let o;const a=(0,i.toHash)(e);if(a.array&&a.object){const e=s._`typeof ${t} != "object"`;o=a.null?e:s._`!${t} || ${e}`,delete a.null,delete a.array,delete a.object}else o=s.nil;a.number&&delete a.integer;for(const i in a)o=(0,s.and)(o,u(i,t,r,n));return o}t.checkDataType=u,t.checkDataTypes=f;const p={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>"string"==typeof e?s._`{type: ${e}}`:s._`{type: ${t}}`};function m(e){const t=function(e){const{gen:t,data:r,schema:n}=e,o=(0,i.schemaRefOrVal)(e,n,"type");return{gen:t,keyword:"type",data:r,schema:n.type,schemaCode:o,schemaValue:o,parentSchema:n,params:{},it:e}}(e);(0,a.reportError)(t,p)}t.reportTypeError=m},7870:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assignDefaults=void 0;const n=r(99029),o=r(94227);function a(e,t,r){const{gen:a,compositeRule:s,data:i,opts:c}=e;if(void 0===r)return;const l=n._`${i}${(0,n.getProperty)(t)}`;if(s)return void(0,o.checkStrictMode)(e,`default is ignored for: ${l}`);let d=n._`${l} === undefined`;"empty"===c.useDefaults&&(d=n._`${d} || ${l} === null || ${l} === ""`),a.if(d,n._`${l} = ${(0,n.stringify)(r)}`)}t.assignDefaults=function(e,t){const{properties:r,items:n}=e.schema;if("object"===t&&r)for(const o in r)a(e,o,r[o].default);else"array"===t&&Array.isArray(n)&&n.forEach(((t,r)=>a(e,r,t.default)))}},62586:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getData=t.KeywordCxt=t.validateFunctionCode=void 0;const n=r(28727),o=r(10208),a=r(7887),s=r(10208),i=r(7870),c=r(33673),l=r(24495),d=r(99029),u=r(42023),f=r(66939),p=r(94227),m=r(48708);function h({gen:e,validateName:t,schema:r,schemaEnv:n,opts:o},a){o.code.es5?e.func(t,d._`${u.default.data}, ${u.default.valCxt}`,n.$async,(()=>{e.code(d._`"use strict"; ${y(r,o)}`),function(e,t){e.if(u.default.valCxt,(()=>{e.var(u.default.instancePath,d._`${u.default.valCxt}.${u.default.instancePath}`),e.var(u.default.parentData,d._`${u.default.valCxt}.${u.default.parentData}`),e.var(u.default.parentDataProperty,d._`${u.default.valCxt}.${u.default.parentDataProperty}`),e.var(u.default.rootData,d._`${u.default.valCxt}.${u.default.rootData}`),t.dynamicRef&&e.var(u.default.dynamicAnchors,d._`${u.default.valCxt}.${u.default.dynamicAnchors}`)}),(()=>{e.var(u.default.instancePath,d._`""`),e.var(u.default.parentData,d._`undefined`),e.var(u.default.parentDataProperty,d._`undefined`),e.var(u.default.rootData,u.default.data),t.dynamicRef&&e.var(u.default.dynamicAnchors,d._`{}`)}))}(e,o),e.code(a)})):e.func(t,d._`${u.default.data}, ${function(e){return d._`{${u.default.instancePath}="", ${u.default.parentData}, ${u.default.parentDataProperty}, ${u.default.rootData}=${u.default.data}${e.dynamicRef?d._`, ${u.default.dynamicAnchors}={}`:d.nil}}={}`}(o)}`,n.$async,(()=>e.code(y(r,o)).code(a)))}function y(e,t){const r="object"==typeof e&&e[t.schemaId];return r&&(t.code.source||t.code.process)?d._`/*# sourceURL=${r} */`:d.nil}function g(e,t){$(e)&&(b(e),v(e))?function(e,t){const{schema:r,gen:n,opts:o}=e;o.$comment&&r.$comment&&S(e);(function(e){const t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,f.resolveUrl)(e.opts.uriResolver,e.baseId,t))})(e),function(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}(e);const a=n.const("_errs",u.default.errors);w(e,a),n.var(t,d._`${a} === ${u.default.errors}`)}(e,t):(0,n.boolOrEmptySchema)(e,t)}function v({schema:e,self:t}){if("boolean"==typeof e)return!e;for(const r in e)if(t.RULES.all[r])return!0;return!1}function $(e){return"boolean"!=typeof e.schema}function b(e){(0,p.checkUnknownRules)(e),function(e){const{schema:t,errSchemaPath:r,opts:n,self:o}=e;t.$ref&&n.ignoreKeywordsWithRef&&(0,p.schemaHasRulesButRef)(t,o.RULES)&&o.logger.warn(`$ref: keywords ignored in schema at path "${r}"`)}(e)}function w(e,t){if(e.opts.jtd)return _(e,[],!1,t);const r=(0,o.getSchemaTypes)(e.schema);_(e,r,!(0,o.coerceAndCheckDataType)(e,r),t)}function S({gen:e,schemaEnv:t,schema:r,errSchemaPath:n,opts:o}){const a=r.$comment;if(!0===o.$comment)e.code(d._`${u.default.self}.logger.log(${a})`);else if("function"==typeof o.$comment){const r=d.str`${n}/$comment`,o=e.scopeValue("root",{ref:t.root});e.code(d._`${u.default.self}.opts.$comment(${a}, ${r}, ${o}.schema)`)}}function _(e,t,r,n){const{gen:o,schema:i,data:c,allErrors:l,opts:f,self:m}=e,{RULES:h}=m;function y(p){(0,a.shouldUseGroup)(i,p)&&(p.type?(o.if((0,s.checkDataType)(p.type,c,f.strictNumbers)),x(e,p),1===t.length&&t[0]===p.type&&r&&(o.else(),(0,s.reportTypeError)(e)),o.endIf()):x(e,p),l||o.if(d._`${u.default.errors} === ${n||0}`))}!i.$ref||!f.ignoreKeywordsWithRef&&(0,p.schemaHasRulesButRef)(i,h)?(f.jtd||function(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;(function(e,t){if(!t.length)return;if(!e.dataTypes.length)return void(e.dataTypes=t);t.forEach((t=>{k(e.dataTypes,t)||j(e,`type "${t}" not allowed by context "${e.dataTypes.join(",")}"`)})),function(e,t){const r=[];for(const n of e.dataTypes)k(t,n)?r.push(n):t.includes("integer")&&"number"===n&&r.push("integer");e.dataTypes=r}(e,t)})(e,t),e.opts.allowUnionTypes||function(e,t){t.length>1&&(2!==t.length||!t.includes("null"))&&j(e,"use allowUnionTypes to allow union type keyword")}(e,t);!function(e,t){const r=e.self.RULES.all;for(const n in r){const o=r[n];if("object"==typeof o&&(0,a.shouldUseRule)(e.schema,o)){const{type:r}=o.definition;r.length&&!r.some((e=>E(t,e)))&&j(e,`missing type "${r.join(",")}" for keyword "${n}"`)}}}(e,e.dataTypes)}(e,t),o.block((()=>{for(const e of h.rules)y(e);y(h.post)}))):o.block((()=>P(e,"$ref",h.all.$ref.definition)))}function x(e,t){const{gen:r,schema:n,opts:{useDefaults:o}}=e;o&&(0,i.assignDefaults)(e,t.type),r.block((()=>{for(const r of t.rules)(0,a.shouldUseRule)(n,r)&&P(e,r.keyword,r.definition,t.type)}))}function E(e,t){return e.includes(t)||"number"===t&&e.includes("integer")}function k(e,t){return e.includes(t)||"integer"===t&&e.includes("number")}function j(e,t){t+=` at "${e.schemaEnv.baseId+e.errSchemaPath}" (strictTypes)`,(0,p.checkStrictMode)(e,t,e.opts.strictTypes)}t.validateFunctionCode=function(e){$(e)&&(b(e),v(e))?function(e){const{schema:t,opts:r,gen:n}=e;h(e,(()=>{r.$comment&&t.$comment&&S(e),function(e){const{schema:t,opts:r}=e;void 0!==t.default&&r.useDefaults&&r.strictSchema&&(0,p.checkStrictMode)(e,"default is ignored in the schema root")}(e),n.let(u.default.vErrors,null),n.let(u.default.errors,0),r.unevaluated&&function(e){const{gen:t,validateName:r}=e;e.evaluated=t.const("evaluated",d._`${r}.evaluated`),t.if(d._`${e.evaluated}.dynamicProps`,(()=>t.assign(d._`${e.evaluated}.props`,d._`undefined`))),t.if(d._`${e.evaluated}.dynamicItems`,(()=>t.assign(d._`${e.evaluated}.items`,d._`undefined`)))}(e),w(e),function(e){const{gen:t,schemaEnv:r,validateName:n,ValidationError:o,opts:a}=e;r.$async?t.if(d._`${u.default.errors} === 0`,(()=>t.return(u.default.data)),(()=>t.throw(d._`new ${o}(${u.default.vErrors})`))):(t.assign(d._`${n}.errors`,u.default.vErrors),a.unevaluated&&function({gen:e,evaluated:t,props:r,items:n}){r instanceof d.Name&&e.assign(d._`${t}.props`,r);n instanceof d.Name&&e.assign(d._`${t}.items`,n)}(e),t.return(d._`${u.default.errors} === 0`))}(e)}))}(e):h(e,(()=>(0,n.topBoolOrEmptySchema)(e)))};class C{constructor(e,t,r){if((0,c.validateKeywordUsage)(e,t,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,p.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",A(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,c.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw new Error(`${r} value must be ${JSON.stringify(t.schemaType)}`);("code"in t?t.trackErrors:!1!==t.errors)&&(this.errsCount=e.gen.const("_errs",u.default.errors))}result(e,t,r){this.failResult((0,d.not)(e),t,r)}failResult(e,t,r){this.gen.if(e),r?r():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,d.not)(e),void 0,t)}fail(e){if(void 0===e)return this.error(),void(this.allErrors||this.gen.if(!1));this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);const{schemaCode:t}=this;this.fail(d._`${t} !== undefined && (${(0,d.or)(this.invalid$data(),e)})`)}error(e,t,r){if(t)return this.setParams(t),this._error(e,r),void this.setParams({});this._error(e,r)}_error(e,t){(e?m.reportExtraError:m.reportError)(this,this.def.error,t)}$dataError(){(0,m.reportError)(this,this.def.$dataError||m.keyword$DataError)}reset(){if(void 0===this.errsCount)throw new Error('add "trackErrors" to keyword definition');(0,m.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,r=d.nil){this.gen.block((()=>{this.check$data(e,r),t()}))}check$data(e=d.nil,t=d.nil){if(!this.$data)return;const{gen:r,schemaCode:n,schemaType:o,def:a}=this;r.if((0,d.or)(d._`${n} === undefined`,t)),e!==d.nil&&r.assign(e,!0),(o.length||a.validateSchema)&&(r.elseIf(this.invalid$data()),this.$dataError(),e!==d.nil&&r.assign(e,!1)),r.else()}invalid$data(){const{gen:e,schemaCode:t,schemaType:r,def:n,it:o}=this;return(0,d.or)(function(){if(r.length){if(!(t instanceof d.Name))throw new Error("ajv implementation error");const e=Array.isArray(r)?r:[r];return d._`${(0,s.checkDataTypes)(e,t,o.opts.strictNumbers,s.DataType.Wrong)}`}return d.nil}(),function(){if(n.validateSchema){const r=e.scopeValue("validate$data",{ref:n.validateSchema});return d._`!${r}(${t})`}return d.nil}())}subschema(e,t){const r=(0,l.getSubschema)(this.it,e);(0,l.extendSubschemaData)(r,this.it,e),(0,l.extendSubschemaMode)(r,e);const n={...this.it,...r,items:void 0,props:void 0};return g(n,t),n}mergeEvaluated(e,t){const{it:r,gen:n}=this;r.opts.unevaluated&&(!0!==r.props&&void 0!==e.props&&(r.props=p.mergeEvaluated.props(n,e.props,r.props,t)),!0!==r.items&&void 0!==e.items&&(r.items=p.mergeEvaluated.items(n,e.items,r.items,t)))}mergeValidEvaluated(e,t){const{it:r,gen:n}=this;if(r.opts.unevaluated&&(!0!==r.props||!0!==r.items))return n.if(t,(()=>this.mergeEvaluated(e,d.Name))),!0}}function P(e,t,r,n){const o=new C(e,r,t);"code"in r?r.code(o,n):o.$data&&r.validate?(0,c.funcKeywordCode)(o,r):"macro"in r?(0,c.macroKeywordCode)(o,r):(r.compile||r.validate)&&(0,c.funcKeywordCode)(o,r)}t.KeywordCxt=C;const O=/^\/(?:[^~]|~0|~1)*$/,N=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function A(e,{dataLevel:t,dataNames:r,dataPathArr:n}){let o,a;if(""===e)return u.default.rootData;if("/"===e[0]){if(!O.test(e))throw new Error(`Invalid JSON-pointer: ${e}`);o=e,a=u.default.rootData}else{const s=N.exec(e);if(!s)throw new Error(`Invalid JSON-pointer: ${e}`);const i=+s[1];if(o=s[2],"#"===o){if(i>=t)throw new Error(c("property/index",i));return n[t-i]}if(i>t)throw new Error(c("data",i));if(a=r[t-i],!o)return a}let s=a;const i=o.split("/");for(const l of i)l&&(a=d._`${a}${(0,d.getProperty)((0,p.unescapeJsonPointer)(l))}`,s=d._`${s} && ${a}`);return s;function c(e,r){return`Cannot access ${e} ${r} levels up, current level is ${t}`}}t.getData=A},33673:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateKeywordUsage=t.validSchemaType=t.funcKeywordCode=t.macroKeywordCode=void 0;const n=r(99029),o=r(42023),a=r(15765),s=r(48708);function i(e){const{gen:t,data:r,it:o}=e;t.if(o.parentData,(()=>t.assign(r,n._`${o.parentData}[${o.parentDataProperty}]`)))}function c(e,t,r){if(void 0===r)throw new Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword","function"==typeof r?{ref:r}:{ref:r,code:(0,n.stringify)(r)})}t.macroKeywordCode=function(e,t){const{gen:r,keyword:o,schema:a,parentSchema:s,it:i}=e,l=t.macro.call(i.self,a,s,i),d=c(r,o,l);!1!==i.opts.validateSchema&&i.self.validateSchema(l,!0);const u=r.name("valid");e.subschema({schema:l,schemaPath:n.nil,errSchemaPath:`${i.errSchemaPath}/${o}`,topSchemaRef:d,compositeRule:!0},u),e.pass(u,(()=>e.error(!0)))},t.funcKeywordCode=function(e,t){var r;const{gen:l,keyword:d,schema:u,parentSchema:f,$data:p,it:m}=e;!function({schemaEnv:e},t){if(t.async&&!e.$async)throw new Error("async keyword in sync schema")}(m,t);const h=!p&&t.compile?t.compile.call(m.self,u,f,m):t.validate,y=c(l,d,h),g=l.let("valid");function v(r=(t.async?n._`await `:n.nil)){const s=m.opts.passContext?o.default.this:o.default.self,i=!("compile"in t&&!p||!1===t.schema);l.assign(g,n._`${r}${(0,a.callValidateCode)(e,y,s,i)}`,t.modifying)}function $(e){var r;l.if((0,n.not)(null!==(r=t.valid)&&void 0!==r?r:g),e)}e.block$data(g,(function(){if(!1===t.errors)v(),t.modifying&&i(e),$((()=>e.error()));else{const r=t.async?function(){const e=l.let("ruleErrs",null);return l.try((()=>v(n._`await `)),(t=>l.assign(g,!1).if(n._`${t} instanceof ${m.ValidationError}`,(()=>l.assign(e,n._`${t}.errors`)),(()=>l.throw(t))))),e}():function(){const e=n._`${y}.errors`;return l.assign(e,null),v(n.nil),e}();t.modifying&&i(e),$((()=>function(e,t){const{gen:r}=e;r.if(n._`Array.isArray(${t})`,(()=>{r.assign(o.default.vErrors,n._`${o.default.vErrors} === null ? ${t} : ${o.default.vErrors}.concat(${t})`).assign(o.default.errors,n._`${o.default.vErrors}.length`),(0,s.extendErrors)(e)}),(()=>e.error()))}(e,r)))}})),e.ok(null!==(r=t.valid)&&void 0!==r?r:g)},t.validSchemaType=function(e,t,r=!1){return!t.length||t.some((t=>"array"===t?Array.isArray(e):"object"===t?e&&"object"==typeof e&&!Array.isArray(e):typeof e==t||r&&"undefined"==typeof e))},t.validateKeywordUsage=function({schema:e,opts:t,self:r,errSchemaPath:n},o,a){if(Array.isArray(o.keyword)?!o.keyword.includes(a):o.keyword!==a)throw new Error("ajv implementation error");const s=o.dependencies;if(null===s||void 0===s?void 0:s.some((t=>!Object.prototype.hasOwnProperty.call(e,t))))throw new Error(`parent schema must have dependencies of ${a}: ${s.join(",")}`);if(o.validateSchema){if(!o.validateSchema(e[a])){const e=`keyword "${a}" value is invalid at path "${n}": `+r.errorsText(o.validateSchema.errors);if("log"!==t.validateSchema)throw new Error(e);r.logger.error(e)}}}},24495:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.extendSubschemaMode=t.extendSubschemaData=t.getSubschema=void 0;const n=r(99029),o=r(94227);t.getSubschema=function(e,{keyword:t,schemaProp:r,schema:a,schemaPath:s,errSchemaPath:i,topSchemaRef:c}){if(void 0!==t&&void 0!==a)throw new Error('both "keyword" and "schema" passed, only one allowed');if(void 0!==t){const a=e.schema[t];return void 0===r?{schema:a,schemaPath:n._`${e.schemaPath}${(0,n.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:a[r],schemaPath:n._`${e.schemaPath}${(0,n.getProperty)(t)}${(0,n.getProperty)(r)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,o.escapeFragment)(r)}`}}if(void 0!==a){if(void 0===s||void 0===i||void 0===c)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:a,schemaPath:s,topSchemaRef:c,errSchemaPath:i}}throw new Error('either "keyword" or "schema" must be passed')},t.extendSubschemaData=function(e,t,{dataProp:r,dataPropType:a,data:s,dataTypes:i,propertyName:c}){if(void 0!==s&&void 0!==r)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:l}=t;if(void 0!==r){const{errorPath:s,dataPathArr:i,opts:c}=t;d(l.let("data",n._`${t.data}${(0,n.getProperty)(r)}`,!0)),e.errorPath=n.str`${s}${(0,o.getErrorPath)(r,a,c.jsPropertySyntax)}`,e.parentDataProperty=n._`${r}`,e.dataPathArr=[...i,e.parentDataProperty]}if(void 0!==s){d(s instanceof n.Name?s:l.let("data",s,!0)),void 0!==c&&(e.propertyName=c)}function d(r){e.data=r,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,r]}i&&(e.dataTypes=i)},t.extendSubschemaMode=function(e,{jtdDiscriminator:t,jtdMetadata:r,compositeRule:n,createErrors:o,allErrors:a}){void 0!==n&&(e.compositeRule=n),void 0!==o&&(e.createErrors=o),void 0!==a&&(e.allErrors=a),e.jtdDiscriminator=t,e.jtdMetadata=r}},4042:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;var n=r(62586);Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return n.KeywordCxt}});var o=r(99029);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return o.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return o.CodeGen}});const a=r(13558),s=r(34551),i=r(10396),c=r(73835),l=r(99029),d=r(66939),u=r(10208),f=r(94227),p=r(63837),m=r(55944),h=(e,t)=>new RegExp(e,t);h.code="new RegExp";const y=["removeAdditional","useDefaults","coerceTypes"],g=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),v={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},$={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'};function b(e){var t,r,n,o,a,s,i,c,l,d,u,f,p,y,g,v,$,b,w,S,_,x,E,k,j;const C=e.strict,P=null===(t=e.code)||void 0===t?void 0:t.optimize,O=!0===P||void 0===P?1:P||0,N=null!==(n=null===(r=e.code)||void 0===r?void 0:r.regExp)&&void 0!==n?n:h,A=null!==(o=e.uriResolver)&&void 0!==o?o:m.default;return{strictSchema:null===(s=null!==(a=e.strictSchema)&&void 0!==a?a:C)||void 0===s||s,strictNumbers:null===(c=null!==(i=e.strictNumbers)&&void 0!==i?i:C)||void 0===c||c,strictTypes:null!==(d=null!==(l=e.strictTypes)&&void 0!==l?l:C)&&void 0!==d?d:"log",strictTuples:null!==(f=null!==(u=e.strictTuples)&&void 0!==u?u:C)&&void 0!==f?f:"log",strictRequired:null!==(y=null!==(p=e.strictRequired)&&void 0!==p?p:C)&&void 0!==y&&y,code:e.code?{...e.code,optimize:O,regExp:N}:{optimize:O,regExp:N},loopRequired:null!==(g=e.loopRequired)&&void 0!==g?g:200,loopEnum:null!==(v=e.loopEnum)&&void 0!==v?v:200,meta:null===($=e.meta)||void 0===$||$,messages:null===(b=e.messages)||void 0===b||b,inlineRefs:null===(w=e.inlineRefs)||void 0===w||w,schemaId:null!==(S=e.schemaId)&&void 0!==S?S:"$id",addUsedSchema:null===(_=e.addUsedSchema)||void 0===_||_,validateSchema:null===(x=e.validateSchema)||void 0===x||x,validateFormats:null===(E=e.validateFormats)||void 0===E||E,unicodeRegExp:null===(k=e.unicodeRegExp)||void 0===k||k,int32range:null===(j=e.int32range)||void 0===j||j,uriResolver:A}}class w{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...b(e)};const{es5:t,lines:r}=this.opts.code;this.scope=new l.ValueScope({scope:{},prefixes:g,es5:t,lines:r}),this.logger=function(e){if(!1===e)return C;if(void 0===e)return console;if(e.log&&e.warn&&e.error)return e;throw new Error("logger must implement log, warn and error methods")}(e.logger);const n=e.validateFormats;e.validateFormats=!1,this.RULES=(0,i.getRules)(),S.call(this,v,e,"NOT SUPPORTED"),S.call(this,$,e,"DEPRECATED","warn"),this._metaOpts=j.call(this),e.formats&&E.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&k.call(this,e.keywords),"object"==typeof e.meta&&this.addMetaSchema(e.meta),x.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:e,meta:t,schemaId:r}=this.opts;let n=p;"id"===r&&(n={...p},n.id=n.$id,delete n.$id),t&&e&&this.addMetaSchema(n,n[r],!1)}defaultMeta(){const{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta="object"==typeof e?e[t]||e:void 0}validate(e,t){let r;if("string"==typeof e){if(r=this.getSchema(e),!r)throw new Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);const n=r(t);return"$async"in r||(this.errors=r.errors),n}compile(e,t){const r=this._addSchema(e,t);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,t){if("function"!=typeof this.opts.loadSchema)throw new Error("options.loadSchema should be a function");const{loadSchema:r}=this.opts;return n.call(this,e,t);async function n(e,t){await o.call(this,e.$schema);const r=this._addSchema(e,t);return r.validate||a.call(this,r)}async function o(e){e&&!this.getSchema(e)&&await n.call(this,{$ref:e},!0)}async function a(e){try{return this._compileSchemaEnv(e)}catch(t){if(!(t instanceof s.default))throw t;return i.call(this,t),await c.call(this,t.missingSchema),a.call(this,e)}}function i({missingSchema:e,missingRef:t}){if(this.refs[e])throw new Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}async function c(e){const r=await l.call(this,e);this.refs[e]||await o.call(this,r.$schema),this.refs[e]||this.addSchema(r,e,t)}async function l(e){const t=this._loading[e];if(t)return t;try{return await(this._loading[e]=r(e))}finally{delete this._loading[e]}}}addSchema(e,t,r,n=this.opts.validateSchema){if(Array.isArray(e)){for(const t of e)this.addSchema(t,void 0,r,n);return this}let o;if("object"===typeof e){const{schemaId:t}=this.opts;if(o=e[t],void 0!==o&&"string"!=typeof o)throw new Error(`schema ${t} must be string`)}return t=(0,d.normalizeId)(t||o),this._checkUnique(t),this.schemas[t]=this._addSchema(e,r,t,n,!0),this}addMetaSchema(e,t,r=this.opts.validateSchema){return this.addSchema(e,t,!0,r),this}validateSchema(e,t){if("boolean"==typeof e)return!0;let r;if(r=e.$schema,void 0!==r&&"string"!=typeof r)throw new Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const n=this.validate(r,e);if(!n&&t){const e="schema is invalid: "+this.errorsText();if("log"!==this.opts.validateSchema)throw new Error(e);this.logger.error(e)}return n}getSchema(e){let t;for(;"string"==typeof(t=_.call(this,e));)e=t;if(void 0===t){const{schemaId:r}=this.opts,n=new c.SchemaEnv({schema:{},schemaId:r});if(t=c.resolveSchema.call(this,n,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const t=_.call(this,e);return"object"==typeof t&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{const t=e;this._cache.delete(t);let r=e[this.opts.schemaId];return r&&(r=(0,d.normalizeId)(r),delete this.schemas[r],delete this.refs[r]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(const t of e)this.addKeyword(t);return this}addKeyword(e,t){let r;if("string"==typeof e)r=e,"object"==typeof t&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=r);else{if("object"!=typeof e||void 0!==t)throw new Error("invalid addKeywords parameters");if(r=(t=e).keyword,Array.isArray(r)&&!r.length)throw new Error("addKeywords: keyword must be string or non-empty array")}if(O.call(this,r,t),!t)return(0,f.eachItem)(r,(e=>N.call(this,e))),this;D.call(this,t);const n={...t,type:(0,u.getJSONTypes)(t.type),schemaType:(0,u.getJSONTypes)(t.schemaType)};return(0,f.eachItem)(r,0===n.type.length?e=>N.call(this,e,n):e=>n.type.forEach((t=>N.call(this,e,n,t)))),this}getKeyword(e){const t=this.RULES.all[e];return"object"==typeof t?t.definition:!!t}removeKeyword(e){const{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(const r of t.rules){const t=r.rules.findIndex((t=>t.keyword===e));t>=0&&r.rules.splice(t,1)}return this}addFormat(e,t){return"string"==typeof t&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:r="data"}={}){return e&&0!==e.length?e.map((e=>`${r}${e.instancePath} ${e.message}`)).reduce(((e,r)=>e+t+r)):"No errors"}$dataMetaSchema(e,t){const r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(const n of t){const t=n.split("/").slice(1);let o=e;for(const e of t)o=o[e];for(const e in r){const t=r[e];if("object"!=typeof t)continue;const{$data:n}=t.definition,a=o[e];n&&a&&(o[e]=F(a))}}return e}_removeAllSchemas(e,t){for(const r in e){const n=e[r];t&&!t.test(r)||("string"==typeof n?delete e[r]:n&&!n.meta&&(this._cache.delete(n.schema),delete e[r]))}}_addSchema(e,t,r,n=this.opts.validateSchema,o=this.opts.addUsedSchema){let a;const{schemaId:s}=this.opts;if("object"==typeof e)a=e[s];else{if(this.opts.jtd)throw new Error("schema must be object");if("boolean"!=typeof e)throw new Error("schema must be object or boolean")}let i=this._cache.get(e);if(void 0!==i)return i;r=(0,d.normalizeId)(a||r);const l=d.getSchemaRefs.call(this,e,r);return i=new c.SchemaEnv({schema:e,schemaId:s,meta:t,baseId:r,localRefs:l}),this._cache.set(i.schema,i),o&&!r.startsWith("#")&&(r&&this._checkUnique(r),this.refs[r]=i),n&&this.validateSchema(e,!0),i}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):c.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){const t=this.opts;this.opts=this._metaOpts;try{c.compileSchema.call(this,e)}finally{this.opts=t}}}function S(e,t,r,n="error"){for(const o in e){const a=o;a in t&&this.logger[n](`${r}: option ${o}. ${e[a]}`)}}function _(e){return e=(0,d.normalizeId)(e),this.schemas[e]||this.refs[e]}function x(){const e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(const t in e)this.addSchema(e[t],t)}function E(){for(const e in this.opts.formats){const t=this.opts.formats[e];t&&this.addFormat(e,t)}}function k(e){if(Array.isArray(e))this.addVocabulary(e);else{this.logger.warn("keywords option as map is deprecated, pass array");for(const t in e){const r=e[t];r.keyword||(r.keyword=t),this.addKeyword(r)}}}function j(){const e={...this.opts};for(const t of y)delete e[t];return e}t.default=w,w.ValidationError=a.default,w.MissingRefError=s.default;const C={log(){},warn(){},error(){}};const P=/^[a-z_$][a-z0-9_$:-]*$/i;function O(e,t){const{RULES:r}=this;if((0,f.eachItem)(e,(e=>{if(r.keywords[e])throw new Error(`Keyword ${e} is already defined`);if(!P.test(e))throw new Error(`Keyword ${e} has invalid name`)})),t&&t.$data&&!("code"in t)&&!("validate"in t))throw new Error('$data keyword must have "code" or "validate" function')}function N(e,t,r){var n;const o=null===t||void 0===t?void 0:t.post;if(r&&o)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:a}=this;let s=o?a.post:a.rules.find((({type:e})=>e===r));if(s||(s={type:r,rules:[]},a.rules.push(s)),a.keywords[e]=!0,!t)return;const i={keyword:e,definition:{...t,type:(0,u.getJSONTypes)(t.type),schemaType:(0,u.getJSONTypes)(t.schemaType)}};t.before?A.call(this,s,i,t.before):s.rules.push(i),a.all[e]=i,null===(n=t.implements)||void 0===n||n.forEach((e=>this.addKeyword(e)))}function A(e,t,r){const n=e.rules.findIndex((e=>e.keyword===r));n>=0?e.rules.splice(n,0,t):(e.rules.push(t),this.logger.warn(`rule ${r} is not defined`))}function D(e){let{metaSchema:t}=e;void 0!==t&&(e.$data&&this.opts.$data&&(t=F(t)),e.validateSchema=this.compile(t,!0))}const I={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function F(e){return{anyOf:[e,I]}}},76250:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(32017);n.code='require("ajv/dist/runtime/equal").default',t.default=n},53853:(e,t)=>{"use strict";function r(e){const t=e.length;let r,n=0,o=0;for(;o=55296&&r<=56319&&o{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(46579);n.code='require("ajv/dist/runtime/uri").default',t.default=n},13558:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class r extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}}t.default=r},15457:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateAdditionalItems=void 0;const n=r(99029),o=r(94227),a={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{parentSchema:t,it:r}=e,{items:n}=t;Array.isArray(n)?s(e,n):(0,o.checkStrictMode)(r,'"additionalItems" is ignored when "items" is not an array of schemas')}};function s(e,t){const{gen:r,schema:a,data:s,keyword:i,it:c}=e;c.items=!0;const l=r.const("len",n._`${s}.length`);if(!1===a)e.setParams({len:t.length}),e.pass(n._`${l} <= ${t.length}`);else if("object"==typeof a&&!(0,o.alwaysValidSchema)(c,a)){const a=r.var("valid",n._`${l} <= ${t.length}`);r.if((0,n.not)(a),(()=>function(a){r.forRange("i",t.length,l,(t=>{e.subschema({keyword:i,dataProp:t,dataPropType:o.Type.Num},a),c.allErrors||r.if((0,n.not)(a),(()=>r.break()))}))}(a))),e.ok(a)}}t.validateAdditionalItems=s,t.default=a},38660:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(15765),o=r(99029),a=r(42023),s=r(94227),i={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:e})=>o._`{additionalProperty: ${e.additionalProperty}}`},code(e){const{gen:t,schema:r,parentSchema:i,data:c,errsCount:l,it:d}=e;if(!l)throw new Error("ajv implementation error");const{allErrors:u,opts:f}=d;if(d.props=!0,"all"!==f.removeAdditional&&(0,s.alwaysValidSchema)(d,r))return;const p=(0,n.allSchemaProperties)(i.properties),m=(0,n.allSchemaProperties)(i.patternProperties);function h(e){t.code(o._`delete ${c}[${e}]`)}function y(n){if("all"===f.removeAdditional||f.removeAdditional&&!1===r)h(n);else{if(!1===r)return e.setParams({additionalProperty:n}),e.error(),void(u||t.break());if("object"==typeof r&&!(0,s.alwaysValidSchema)(d,r)){const r=t.name("valid");"failing"===f.removeAdditional?(g(n,r,!1),t.if((0,o.not)(r),(()=>{e.reset(),h(n)}))):(g(n,r),u||t.if((0,o.not)(r),(()=>t.break())))}}}function g(t,r,n){const o={keyword:"additionalProperties",dataProp:t,dataPropType:s.Type.Str};!1===n&&Object.assign(o,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(o,r)}t.forIn("key",c,(r=>{p.length||m.length?t.if(function(r){let a;if(p.length>8){const e=(0,s.schemaRefOrVal)(d,i.properties,"properties");a=(0,n.isOwnProperty)(t,e,r)}else a=p.length?(0,o.or)(...p.map((e=>o._`${r} === ${e}`))):o.nil;return m.length&&(a=(0,o.or)(a,...m.map((t=>o._`${(0,n.usePattern)(e,t)}.test(${r})`)))),(0,o.not)(a)}(r),(()=>y(r))):y(r)})),e.ok(o._`${l} === ${a.default.errors}`)}};t.default=i},15844:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(94227),o={keyword:"allOf",schemaType:"array",code(e){const{gen:t,schema:r,it:o}=e;if(!Array.isArray(r))throw new Error("ajv implementation error");const a=t.name("valid");r.forEach(((t,r)=>{if((0,n.alwaysValidSchema)(o,t))return;const s=e.subschema({keyword:"allOf",schemaProp:r},a);e.ok(a),e.mergeEvaluated(s)}))}};t.default=o},16505:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:r(15765).validateUnion,error:{message:"must match a schema in anyOf"}};t.default=n},12661:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:e,max:t}})=>void 0===t?n.str`must contain at least ${e} valid item(s)`:n.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>void 0===t?n._`{minContains: ${e}}`:n._`{minContains: ${e}, maxContains: ${t}}`},code(e){const{gen:t,schema:r,parentSchema:a,data:s,it:i}=e;let c,l;const{minContains:d,maxContains:u}=a;i.opts.next?(c=void 0===d?1:d,l=u):c=1;const f=t.const("len",n._`${s}.length`);if(e.setParams({min:c,max:l}),void 0===l&&0===c)return void(0,o.checkStrictMode)(i,'"minContains" == 0 without "maxContains": "contains" keyword ignored');if(void 0!==l&&c>l)return(0,o.checkStrictMode)(i,'"minContains" > "maxContains" is always invalid'),void e.fail();if((0,o.alwaysValidSchema)(i,r)){let t=n._`${f} >= ${c}`;return void 0!==l&&(t=n._`${t} && ${f} <= ${l}`),void e.pass(t)}i.items=!0;const p=t.name("valid");function m(){const e=t.name("_valid"),r=t.let("count",0);h(e,(()=>t.if(e,(()=>function(e){t.code(n._`${e}++`),void 0===l?t.if(n._`${e} >= ${c}`,(()=>t.assign(p,!0).break())):(t.if(n._`${e} > ${l}`,(()=>t.assign(p,!1).break())),1===c?t.assign(p,!0):t.if(n._`${e} >= ${c}`,(()=>t.assign(p,!0))))}(r)))))}function h(r,n){t.forRange("i",0,f,(t=>{e.subschema({keyword:"contains",dataProp:t,dataPropType:o.Type.Num,compositeRule:!0},r),n()}))}void 0===l&&1===c?h(p,(()=>t.if(p,(()=>t.break())))):0===c?(t.let(p,!0),void 0!==l&&t.if(n._`${s}.length > 0`,m)):(t.let(p,!1),m()),e.result(p,(()=>e.reset()))}};t.default=a},83025:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateSchemaDeps=t.validatePropertyDeps=t.error=void 0;const n=r(99029),o=r(94227),a=r(15765);t.error={message:({params:{property:e,depsCount:t,deps:r}})=>{const o=1===t?"property":"properties";return n.str`must have ${o} ${r} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:r,missingProperty:o}})=>n._`{property: ${e}, - missingProperty: ${o}, - depsCount: ${t}, - deps: ${r}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code(e){const[t,r]=function({schema:e}){const t={},r={};for(const n in e){if("__proto__"===n)continue;(Array.isArray(e[n])?t:r)[n]=e[n]}return[t,r]}(e);i(e,t),c(e,r)}};function i(e,t=e.schema){const{gen:r,data:o,it:s}=e;if(0===Object.keys(t).length)return;const i=r.let("missing");for(const c in t){const l=t[c];if(0===l.length)continue;const d=(0,a.propertyInData)(r,o,c,s.opts.ownProperties);e.setParams({property:c,depsCount:l.length,deps:l.join(", ")}),s.allErrors?r.if(d,(()=>{for(const t of l)(0,a.checkReportMissingProp)(e,t)})):(r.if(n._`${d} && (${(0,a.checkMissingProp)(e,l,i)})`),(0,a.reportMissingProp)(e,i),r.else())}}function c(e,t=e.schema){const{gen:r,data:n,keyword:s,it:i}=e,c=r.name("valid");for(const l in t)(0,o.alwaysValidSchema)(i,t[l])||(r.if((0,a.propertyInData)(r,n,l,i.opts.ownProperties),(()=>{const t=e.subschema({keyword:s,schemaProp:l},c);e.mergeValidEvaluated(t,c)}),(()=>r.var(c,!0))),e.ok(c))}t.validatePropertyDeps=i,t.validateSchemaDeps=c,t.default=s},23620:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:e})=>n.str`must match "${e.ifClause}" schema`,params:({params:e})=>n._`{failingKeyword: ${e.ifClause}}`},code(e){const{gen:t,parentSchema:r,it:a}=e;void 0===r.then&&void 0===r.else&&(0,o.checkStrictMode)(a,'"if" without "then" and "else" is ignored');const i=s(a,"then"),c=s(a,"else");if(!i&&!c)return;const l=t.let("valid",!0),d=t.name("_valid");if(function(){const t=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},d);e.mergeEvaluated(t)}(),e.reset(),i&&c){const r=t.let("ifClause");e.setParams({ifClause:r}),t.if(d,u("then",r),u("else",r))}else i?t.if(d,u("then")):t.if((0,n.not)(d),u("else"));function u(r,o){return()=>{const a=e.subschema({keyword:r},d);t.assign(l,d),e.mergeValidEvaluated(a,l),o?t.assign(o,n._`${r}`):e.setParams({ifClause:r})}}e.pass(l,(()=>e.error(!0)))}};function s(e,t){const r=e.schema[t];return void 0!==r&&!(0,o.alwaysValidSchema)(e,r)}t.default=a},56378:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(15457),o=r(65354),a=r(20494),s=r(93966),i=r(12661),c=r(83025),l=r(19713),d=r(38660),u=r(40117),f=r(45333),p=r(57923),m=r(16505),h=r(96163),y=r(15844),g=r(23620),v=r(14426);t.default=function(e=!1){const t=[p.default,m.default,h.default,y.default,g.default,v.default,l.default,d.default,c.default,u.default,f.default];return e?t.push(o.default,s.default):t.push(n.default,a.default),t.push(i.default),t}},20494:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateTuple=void 0;const n=r(99029),o=r(94227),a=r(15765),s={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){const{schema:t,it:r}=e;if(Array.isArray(t))return i(e,"additionalItems",t);r.items=!0,(0,o.alwaysValidSchema)(r,t)||e.ok((0,a.validateArray)(e))}};function i(e,t,r=e.schema){const{gen:a,parentSchema:s,data:i,keyword:c,it:l}=e;!function(e){const{opts:n,errSchemaPath:a}=l,s=r.length,i=s===e.minItems&&(s===e.maxItems||!1===e[t]);if(n.strictTuples&&!i){const e=`"${c}" is ${s}-tuple, but minItems or maxItems/${t} are not specified or different at path "${a}"`;(0,o.checkStrictMode)(l,e,n.strictTuples)}}(s),l.opts.unevaluated&&r.length&&!0!==l.items&&(l.items=o.mergeEvaluated.items(a,r.length,l.items));const d=a.name("valid"),u=a.const("len",n._`${i}.length`);r.forEach(((t,r)=>{(0,o.alwaysValidSchema)(l,t)||(a.if(n._`${u} > ${r}`,(()=>e.subschema({keyword:c,schemaProp:r,dataProp:r},d))),e.ok(d))}))}t.validateTuple=i,t.default=s},93966:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a=r(15765),s=r(15457),i={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:e}})=>n.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>n._`{limit: ${e}}`},code(e){const{schema:t,parentSchema:r,it:n}=e,{prefixItems:i}=r;n.items=!0,(0,o.alwaysValidSchema)(n,t)||(i?(0,s.validateAdditionalItems)(e,i):e.ok((0,a.validateArray)(e)))}};t.default=i},57923:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(94227),o={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){const{gen:t,schema:r,it:o}=e;if((0,n.alwaysValidSchema)(o,r))return void e.fail();const a=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},a),e.failResult(a,(()=>e.reset()),(()=>e.error()))},error:{message:"must NOT be valid"}};t.default=o},96163:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:e})=>n._`{passingSchemas: ${e.passing}}`},code(e){const{gen:t,schema:r,parentSchema:a,it:s}=e;if(!Array.isArray(r))throw new Error("ajv implementation error");if(s.opts.discriminator&&a.discriminator)return;const i=r,c=t.let("valid",!1),l=t.let("passing",null),d=t.name("_valid");e.setParams({passing:l}),t.block((function(){i.forEach(((r,a)=>{let i;(0,o.alwaysValidSchema)(s,r)?t.var(d,!0):i=e.subschema({keyword:"oneOf",schemaProp:a,compositeRule:!0},d),a>0&&t.if(n._`${d} && ${c}`).assign(c,!1).assign(l,n._`[${l}, ${a}]`).else(),t.if(d,(()=>{t.assign(c,!0),t.assign(l,a),i&&e.mergeEvaluated(i,n.Name)}))}))})),e.result(c,(()=>e.reset()),(()=>e.error(!0)))}};t.default=a},45333:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(15765),o=r(99029),a=r(94227),s=r(94227),i={keyword:"patternProperties",type:"object",schemaType:"object",code(e){const{gen:t,schema:r,data:i,parentSchema:c,it:l}=e,{opts:d}=l,u=(0,n.allSchemaProperties)(r),f=u.filter((e=>(0,a.alwaysValidSchema)(l,r[e])));if(0===u.length||f.length===u.length&&(!l.opts.unevaluated||!0===l.props))return;const p=d.strictSchema&&!d.allowMatchingProperties&&c.properties,m=t.name("valid");!0===l.props||l.props instanceof o.Name||(l.props=(0,s.evaluatedPropsToName)(t,l.props));const{props:h}=l;function y(e){for(const t in p)new RegExp(e).test(t)&&(0,a.checkStrictMode)(l,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function g(r){t.forIn("key",i,(a=>{t.if(o._`${(0,n.usePattern)(e,r)}.test(${a})`,(()=>{const n=f.includes(r);n||e.subschema({keyword:"patternProperties",schemaProp:r,dataProp:a,dataPropType:s.Type.Str},m),l.opts.unevaluated&&!0!==h?t.assign(o._`${h}[${a}]`,!0):n||l.allErrors||t.if((0,o.not)(m),(()=>t.break()))}))}))}!function(){for(const e of u)p&&y(e),l.allErrors?g(e):(t.var(m,!0),g(e),t.if(m))}()}};t.default=i},65354:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(20494),o={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,n.validateTuple)(e,"items")};t.default=o},40117:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(62586),o=r(15765),a=r(94227),s=r(38660),i={keyword:"properties",type:"object",schemaType:"object",code(e){const{gen:t,schema:r,parentSchema:i,data:c,it:l}=e;"all"===l.opts.removeAdditional&&void 0===i.additionalProperties&&s.default.code(new n.KeywordCxt(l,s.default,"additionalProperties"));const d=(0,o.allSchemaProperties)(r);for(const n of d)l.definedProperties.add(n);l.opts.unevaluated&&d.length&&!0!==l.props&&(l.props=a.mergeEvaluated.props(t,(0,a.toHash)(d),l.props));const u=d.filter((e=>!(0,a.alwaysValidSchema)(l,r[e])));if(0===u.length)return;const f=t.name("valid");for(const n of u)p(n)?m(n):(t.if((0,o.propertyInData)(t,c,n,l.opts.ownProperties)),m(n),l.allErrors||t.else().var(f,!0),t.endIf()),e.it.definedProperties.add(n),e.ok(f);function p(e){return l.opts.useDefaults&&!l.compositeRule&&void 0!==r[e].default}function m(t){e.subschema({keyword:"properties",schemaProp:t,dataProp:t},f)}}};t.default=i},19713:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:e})=>n._`{propertyName: ${e.propertyName}}`},code(e){const{gen:t,schema:r,data:a,it:s}=e;if((0,o.alwaysValidSchema)(s,r))return;const i=t.name("valid");t.forIn("key",a,(r=>{e.setParams({propertyName:r}),e.subschema({keyword:"propertyNames",data:r,dataTypes:["string"],propertyName:r,compositeRule:!0},i),t.if((0,n.not)(i),(()=>{e.error(!0),s.allErrors||t.break()}))})),e.ok(i)}};t.default=a},14426:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(94227),o={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){void 0===t.if&&(0,n.checkStrictMode)(r,`"${e}" without "if" is ignored`)}};t.default=o},15765:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateUnion=t.validateArray=t.usePattern=t.callValidateCode=t.schemaProperties=t.allSchemaProperties=t.noPropertyInData=t.propertyInData=t.isOwnProperty=t.hasPropFunc=t.reportMissingProp=t.checkMissingProp=t.checkReportMissingProp=void 0;const n=r(99029),o=r(94227),a=r(42023),s=r(94227);function i(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:n._`Object.prototype.hasOwnProperty`})}function c(e,t,r){return n._`${i(e)}.call(${t}, ${r})`}function l(e,t,r,o){const a=n._`${t}${(0,n.getProperty)(r)} === undefined`;return o?(0,n.or)(a,(0,n.not)(c(e,t,r))):a}function d(e){return e?Object.keys(e).filter((e=>"__proto__"!==e)):[]}t.checkReportMissingProp=function(e,t){const{gen:r,data:o,it:a}=e;r.if(l(r,o,t,a.opts.ownProperties),(()=>{e.setParams({missingProperty:n._`${t}`},!0),e.error()}))},t.checkMissingProp=function({gen:e,data:t,it:{opts:r}},o,a){return(0,n.or)(...o.map((o=>(0,n.and)(l(e,t,o,r.ownProperties),n._`${a} = ${o}`))))},t.reportMissingProp=function(e,t){e.setParams({missingProperty:t},!0),e.error()},t.hasPropFunc=i,t.isOwnProperty=c,t.propertyInData=function(e,t,r,o){const a=n._`${t}${(0,n.getProperty)(r)} !== undefined`;return o?n._`${a} && ${c(e,t,r)}`:a},t.noPropertyInData=l,t.allSchemaProperties=d,t.schemaProperties=function(e,t){return d(t).filter((r=>!(0,o.alwaysValidSchema)(e,t[r])))},t.callValidateCode=function({schemaCode:e,data:t,it:{gen:r,topSchemaRef:o,schemaPath:s,errorPath:i},it:c},l,d,u){const f=u?n._`${e}, ${t}, ${o}${s}`:t,p=[[a.default.instancePath,(0,n.strConcat)(a.default.instancePath,i)],[a.default.parentData,c.parentData],[a.default.parentDataProperty,c.parentDataProperty],[a.default.rootData,a.default.rootData]];c.opts.dynamicRef&&p.push([a.default.dynamicAnchors,a.default.dynamicAnchors]);const m=n._`${f}, ${r.object(...p)}`;return d!==n.nil?n._`${l}.call(${d}, ${m})`:n._`${l}(${m})`};const u=n._`new RegExp`;t.usePattern=function({gen:e,it:{opts:t}},r){const o=t.unicodeRegExp?"u":"",{regExp:a}=t.code,i=a(r,o);return e.scopeValue("pattern",{key:i.toString(),ref:i,code:n._`${"new RegExp"===a.code?u:(0,s.useFunc)(e,a)}(${r}, ${o})`})},t.validateArray=function(e){const{gen:t,data:r,keyword:a,it:s}=e,i=t.name("valid");if(s.allErrors){const e=t.let("valid",!0);return c((()=>t.assign(e,!1))),e}return t.var(i,!0),c((()=>t.break())),i;function c(s){const c=t.const("len",n._`${r}.length`);t.forRange("i",0,c,(r=>{e.subschema({keyword:a,dataProp:r,dataPropType:o.Type.Num},i),t.if((0,n.not)(i),s)}))}},t.validateUnion=function(e){const{gen:t,schema:r,keyword:a,it:s}=e;if(!Array.isArray(r))throw new Error("ajv implementation error");if(r.some((e=>(0,o.alwaysValidSchema)(s,e)))&&!s.opts.unevaluated)return;const i=t.let("valid",!1),c=t.name("_valid");t.block((()=>r.forEach(((r,o)=>{const s=e.subschema({keyword:a,schemaProp:o,compositeRule:!0},c);t.assign(i,n._`${i} || ${c}`);e.mergeValidEvaluated(s,c)||t.if((0,n.not)(i))})))),e.result(i,(()=>e.reset()),(()=>e.error(!0)))}},83463:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};t.default=r},72128:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(83463),o=r(13693),a=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",n.default,o.default];t.default=a},13693:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.callRef=t.getValidate=void 0;const n=r(34551),o=r(15765),a=r(99029),s=r(42023),i=r(73835),c=r(94227),l={keyword:"$ref",schemaType:"string",code(e){const{gen:t,schema:r,it:o}=e,{baseId:s,schemaEnv:c,validateName:l,opts:f,self:p}=o,{root:m}=c;if(("#"===r||"#/"===r)&&s===m.baseId)return function(){if(c===m)return u(e,l,c,c.$async);const r=t.scopeValue("root",{ref:m});return u(e,a._`${r}.validate`,m,m.$async)}();const h=i.resolveRef.call(p,m,s,r);if(void 0===h)throw new n.default(o.opts.uriResolver,s,r);return h instanceof i.SchemaEnv?function(t){const r=d(e,t);u(e,r,t,t.$async)}(h):function(n){const o=t.scopeValue("schema",!0===f.code.source?{ref:n,code:(0,a.stringify)(n)}:{ref:n}),s=t.name("valid"),i=e.subschema({schema:n,dataTypes:[],schemaPath:a.nil,topSchemaRef:o,errSchemaPath:r},s);e.mergeEvaluated(i),e.ok(s)}(h)}};function d(e,t){const{gen:r}=e;return t.validate?r.scopeValue("validate",{ref:t.validate}):a._`${r.scopeValue("wrapper",{ref:t})}.validate`}function u(e,t,r,n){const{gen:i,it:l}=e,{allErrors:d,schemaEnv:u,opts:f}=l,p=f.passContext?s.default.this:a.nil;function m(e){const t=a._`${e}.errors`;i.assign(s.default.vErrors,a._`${s.default.vErrors} === null ? ${t} : ${s.default.vErrors}.concat(${t})`),i.assign(s.default.errors,a._`${s.default.vErrors}.length`)}function h(e){var t;if(!l.opts.unevaluated)return;const n=null===(t=null===r||void 0===r?void 0:r.validate)||void 0===t?void 0:t.evaluated;if(!0!==l.props)if(n&&!n.dynamicProps)void 0!==n.props&&(l.props=c.mergeEvaluated.props(i,n.props,l.props));else{const t=i.var("props",a._`${e}.evaluated.props`);l.props=c.mergeEvaluated.props(i,t,l.props,a.Name)}if(!0!==l.items)if(n&&!n.dynamicItems)void 0!==n.items&&(l.items=c.mergeEvaluated.items(i,n.items,l.items));else{const t=i.var("items",a._`${e}.evaluated.items`);l.items=c.mergeEvaluated.items(i,t,l.items,a.Name)}}n?function(){if(!u.$async)throw new Error("async schema referenced by sync schema");const r=i.let("valid");i.try((()=>{i.code(a._`await ${(0,o.callValidateCode)(e,t,p)}`),h(t),d||i.assign(r,!0)}),(e=>{i.if(a._`!(${e} instanceof ${l.ValidationError})`,(()=>i.throw(e))),m(e),d||i.assign(r,!1)})),e.ok(r)}():e.result((0,o.callValidateCode)(e,t,p),(()=>h(t)),(()=>m(t)))}t.getValidate=d,t.callRef=u,t.default=l},36653:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(97652),a=r(73835),s=r(94227),i={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:e,tagName:t}})=>e===o.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>n._`{error: ${e}, tag: ${r}, tagValue: ${t}}`},code(e){const{gen:t,data:r,schema:i,parentSchema:c,it:l}=e,{oneOf:d}=c;if(!l.opts.discriminator)throw new Error("discriminator: requires discriminator option");const u=i.propertyName;if("string"!=typeof u)throw new Error("discriminator: requires propertyName");if(i.mapping)throw new Error("discriminator: mapping is not supported");if(!d)throw new Error("discriminator: requires oneOf keyword");const f=t.let("valid",!1),p=t.const("tag",n._`${r}${(0,n.getProperty)(u)}`);function m(r){const o=t.name("valid"),a=e.subschema({keyword:"oneOf",schemaProp:r},o);return e.mergeEvaluated(a,n.Name),o}t.if(n._`typeof ${p} == "string"`,(()=>function(){const r=function(){var e;const t={},r=o(c);let n=!0;for(let c=0;ce.error(!1,{discrError:o.DiscrError.Tag,tag:p,tagName:u}))),e.ok(f)}};t.default=i},97652:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DiscrError=void 0,function(e){e.Tag="tag",e.Mapping="mapping"}(t.DiscrError||(t.DiscrError={}))},86144:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(72128),o=r(67060),a=r(56378),s=r(97532),i=r(69857),c=[n.default,o.default,(0,a.default)(),s.default,i.metadataVocabulary,i.contentVocabulary];t.default=c},94737:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>n.str`must match format "${e}"`,params:({schemaCode:e})=>n._`{format: ${e}}`},code(e,t){const{gen:r,data:o,$data:a,schema:s,schemaCode:i,it:c}=e,{opts:l,errSchemaPath:d,schemaEnv:u,self:f}=c;l.validateFormats&&(a?function(){const a=r.scopeValue("formats",{ref:f.formats,code:l.code.formats}),s=r.const("fDef",n._`${a}[${i}]`),c=r.let("fType"),d=r.let("format");r.if(n._`typeof ${s} == "object" && !(${s} instanceof RegExp)`,(()=>r.assign(c,n._`${s}.type || "string"`).assign(d,n._`${s}.validate`)),(()=>r.assign(c,n._`"string"`).assign(d,s))),e.fail$data((0,n.or)(!1===l.strictSchema?n.nil:n._`${i} && !${d}`,function(){const e=u.$async?n._`(${s}.async ? await ${d}(${o}) : ${d}(${o}))`:n._`${d}(${o})`,r=n._`(typeof ${d} == "function" ? ${e} : ${d}.test(${o}))`;return n._`${d} && ${d} !== true && ${c} === ${t} && !${r}`}()))}():function(){const a=f.formats[s];if(!a)return void function(){if(!1===l.strictSchema)return void f.logger.warn(e());throw new Error(e());function e(){return`unknown format "${s}" ignored in schema at path "${d}"`}}();if(!0===a)return;const[i,c,p]=function(e){const t=e instanceof RegExp?(0,n.regexpCode)(e):l.code.formats?n._`${l.code.formats}${(0,n.getProperty)(s)}`:void 0,o=r.scopeValue("formats",{key:s,ref:e,code:t});if("object"==typeof e&&!(e instanceof RegExp))return[e.type||"string",e.validate,n._`${o}.validate`];return["string",e,o]}(a);i===t&&e.pass(function(){if("object"==typeof a&&!(a instanceof RegExp)&&a.async){if(!u.$async)throw new Error("async format in sync schema");return n._`await ${p}(${o})`}return"function"==typeof c?n._`${p}(${o})`:n._`${p}.test(${o})`}())}())}};t.default=o},97532:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=[r(94737).default];t.default=n},69857:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.contentVocabulary=t.metadataVocabulary=void 0,t.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],t.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},27935:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a=r(76250),s={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:e})=>n._`{allowedValue: ${e}}`},code(e){const{gen:t,data:r,$data:s,schemaCode:i,schema:c}=e;s||c&&"object"==typeof c?e.fail$data(n._`!${(0,o.useFunc)(t,a.default)}(${r}, ${i})`):e.fail(n._`${c} !== ${r}`)}};t.default=s},28643:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a=r(76250),s={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:e})=>n._`{allowedValues: ${e}}`},code(e){const{gen:t,data:r,$data:s,schema:i,schemaCode:c,it:l}=e;if(!s&&0===i.length)throw new Error("enum must have non-empty array");const d=i.length>=l.opts.loopEnum;let u;const f=()=>null!==u&&void 0!==u?u:u=(0,o.useFunc)(t,a.default);let p;if(d||s)p=t.let("valid"),e.block$data(p,(function(){t.assign(p,!1),t.forOf("v",c,(e=>t.if(n._`${f()}(${r}, ${e})`,(()=>t.assign(p,!0).break()))))}));else{if(!Array.isArray(i))throw new Error("ajv implementation error");const e=t.const("vSchema",c);p=(0,n.or)(...i.map(((t,o)=>function(e,t){const o=i[t];return"object"===typeof o&&null!==o?n._`${f()}(${r}, ${e}[${t}])`:n._`${r} === ${o}`}(e,o))))}e.pass(p)}};t.default=s},67060:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(75882),o=r(63439),a=r(77307),s=r(90422),i=r(34486),c=r(34003),l=r(61163),d=r(60617),u=r(27935),f=r(28643),p=[n.default,o.default,a.default,s.default,i.default,c.default,l.default,d.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},u.default,f.default];t.default=p},61163:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const r="maxItems"===e?"more":"fewer";return n.str`must NOT have ${r} than ${t} items`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:r,schemaCode:o}=e,a="maxItems"===t?n.operators.GT:n.operators.LT;e.fail$data(n._`${r}.length ${a} ${o}`)}};t.default=o},77307:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=r(94227),a=r(53853),s={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const r="maxLength"===e?"more":"fewer";return n.str`must NOT have ${r} than ${t} characters`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:r,schemaCode:s,it:i}=e,c="maxLength"===t?n.operators.GT:n.operators.LT,l=!1===i.opts.unicode?n._`${r}.length`:n._`${(0,o.useFunc)(e.gen,a.default)}(${r})`;e.fail$data(n._`${l} ${c} ${s}`)}};t.default=s},75882:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o=n.operators,a={maximum:{okStr:"<=",ok:o.LTE,fail:o.GT},minimum:{okStr:">=",ok:o.GTE,fail:o.LT},exclusiveMaximum:{okStr:"<",ok:o.LT,fail:o.GTE},exclusiveMinimum:{okStr:">",ok:o.GT,fail:o.LTE}},s={message:({keyword:e,schemaCode:t})=>n.str`must be ${a[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>n._`{comparison: ${a[e].okStr}, limit: ${t}}`},i={keyword:Object.keys(a),type:"number",schemaType:"number",$data:!0,error:s,code(e){const{keyword:t,data:r,schemaCode:o}=e;e.fail$data(n._`${r} ${a[t].fail} ${o} || isNaN(${r})`)}};t.default=i},34486:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const r="maxProperties"===e?"more":"fewer";return n.str`must NOT have ${r} than ${t} properties`},params:({schemaCode:e})=>n._`{limit: ${e}}`},code(e){const{keyword:t,data:r,schemaCode:o}=e,a="maxProperties"===t?n.operators.GT:n.operators.LT;e.fail$data(n._`Object.keys(${r}).length ${a} ${o}`)}};t.default=o},63439:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(99029),o={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:e})=>n.str`must be multiple of ${e}`,params:({schemaCode:e})=>n._`{multipleOf: ${e}}`},code(e){const{gen:t,data:r,schemaCode:o,it:a}=e,s=a.opts.multipleOfPrecision,i=t.let("res"),c=s?n._`Math.abs(Math.round(${i}) - ${i}) > 1e-${s}`:n._`${i} !== parseInt(${i})`;e.fail$data(n._`(${o} === 0 || (${i} = ${r}/${o}, ${c}))`)}};t.default=o},90422:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(15765),o=r(99029),a={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>o.str`must match pattern "${e}"`,params:({schemaCode:e})=>o._`{pattern: ${e}}`},code(e){const{data:t,$data:r,schema:a,schemaCode:s,it:i}=e,c=i.opts.unicodeRegExp?"u":"",l=r?o._`(new RegExp(${s}, ${c}))`:(0,n.usePattern)(e,a);e.fail$data(o._`!${l}.test(${t})`)}};t.default=a},34003:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(15765),o=r(99029),a=r(94227),s={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:e}})=>o.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>o._`{missingProperty: ${e}}`},code(e){const{gen:t,schema:r,schemaCode:s,data:i,$data:c,it:l}=e,{opts:d}=l;if(!c&&0===r.length)return;const u=r.length>=d.loopRequired;if(l.allErrors?function(){if(u||c)e.block$data(o.nil,f);else for(const t of r)(0,n.checkReportMissingProp)(e,t)}():function(){const a=t.let("missing");if(u||c){const r=t.let("valid",!0);e.block$data(r,(()=>function(r,a){e.setParams({missingProperty:r}),t.forOf(r,s,(()=>{t.assign(a,(0,n.propertyInData)(t,i,r,d.ownProperties)),t.if((0,o.not)(a),(()=>{e.error(),t.break()}))}),o.nil)}(a,r))),e.ok(r)}else t.if((0,n.checkMissingProp)(e,r,a)),(0,n.reportMissingProp)(e,a),t.else()}(),d.strictRequired){const t=e.parentSchema.properties,{definedProperties:n}=e.it;for(const e of r)if(void 0===(null===t||void 0===t?void 0:t[e])&&!n.has(e)){const t=`required property "${e}" is not defined at "${l.schemaEnv.baseId+l.errSchemaPath}" (strictRequired)`;(0,a.checkStrictMode)(l,t,l.opts.strictRequired)}}function f(){t.forOf("prop",s,(r=>{e.setParams({missingProperty:r}),t.if((0,n.noPropertyInData)(t,i,r,d.ownProperties),(()=>e.error()))}))}}};t.default=s},60617:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(10208),o=r(99029),a=r(94227),s=r(76250),i={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:e,j:t}})=>o.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>o._`{i: ${e}, j: ${t}}`},code(e){const{gen:t,data:r,$data:i,schema:c,parentSchema:l,schemaCode:d,it:u}=e;if(!i&&!c)return;const f=t.let("valid"),p=l.items?(0,n.getSchemaTypes)(l.items):[];function m(a,s){const i=t.name("item"),c=(0,n.checkDataTypes)(p,i,u.opts.strictNumbers,n.DataType.Wrong),l=t.const("indices",o._`{}`);t.for(o._`;${a}--;`,(()=>{t.let(i,o._`${r}[${a}]`),t.if(c,o._`continue`),p.length>1&&t.if(o._`typeof ${i} == "string"`,o._`${i} += "_"`),t.if(o._`typeof ${l}[${i}] == "number"`,(()=>{t.assign(s,o._`${l}[${i}]`),e.error(),t.assign(f,!1).break()})).code(o._`${l}[${i}] = ${a}`)}))}function h(n,i){const c=(0,a.useFunc)(t,s.default),l=t.name("outer");t.label(l).for(o._`;${n}--;`,(()=>t.for(o._`${i} = ${n}; ${i}--;`,(()=>t.if(o._`${c}(${r}[${n}], ${r}[${i}])`,(()=>{e.error(),t.assign(f,!1).break(l)}))))))}e.block$data(f,(function(){const n=t.let("i",o._`${r}.length`),a=t.let("j");e.setParams({i:n,j:a}),t.assign(f,!0),t.if(o._`${n} > 1`,(()=>(p.length>0&&!p.some((e=>"object"===e||"array"===e))?m:h)(n,a)))}),o._`${d} === false`),e.ok(f)}};t.default=i},6641:(e,t,r)=>{"use strict";var n=r(7800),o=r(96552),a=r(82986),s=Math.pow(2,31)-1;function i(e,t){var r,n=1;if(0===e)return t;if(0===t)return e;for(;e%2===0&&t%2===0;)e/=2,t/=2,n*=2;for(;e%2===0;)e/=2;for(;t;){for(;t%2===0;)t/=2;e>t&&(r=t,t=e,e=r),t-=e}return n*e}function c(e,t){var r,n=0;if(0===e)return t;if(0===t)return e;for(;0===(1&e)&&0===(1&t);)e>>>=1,t>>>=1,n++;for(;0===(1&e);)e>>>=1;for(;t;){for(;0===(1&t);)t>>>=1;e>t&&(r=t,t=e,e=r),t-=e}return e<1){if(r=e[0],t=e[1],!a(t))throw new TypeError("gcd()::invalid input argument. Accessor must be a function. Value: `"+t+"`.")}else r=e[0]}if((l=r.length)<2)return null;if(t){for(d=new Array(l),f=0;f{"use strict";var n=r(6641),o=r(7800),a=r(96552),s=r(82986);e.exports=function(){var e,t,r,i,c,l,d,u=arguments.length;for(e=new Array(u),d=0;d1){if(r=e[0],t=e[1],!s(t))throw new TypeError("lcm()::invalid input argument. Accessor must be a function. Value: `"+t+"`.")}else r=e[0]}if((i=r.length)<2)return null;if(t){for(c=new Array(i),d=0;d{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,o,a;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(o=n;0!==o--;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(a=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=n;0!==o--;)if(!Object.prototype.hasOwnProperty.call(r,a[o]))return!1;for(o=n;0!==o--;){var s=a[o];if(!e(t[s],r[s]))return!1}return!0}return t!==t&&r!==r}},90370:(e,t,r)=>{var n=r(2404),o=r(33031),a=r(63375),s=r(9063),i=r(84684),c=r(80191),l=r(11331),d=r(53812),u=e=>Array.isArray(e)?e:[e],f=e=>void 0===e,p=e=>l(e)||Array.isArray(e)?Object.keys(e):[],m=(e,t)=>e.hasOwnProperty(t),h=e=>o(a(e)),y=e=>f(e)||Array.isArray(e)&&0===e.length,g=(e,t,r,n)=>t&&m(t,r)&&e&&m(e,r)&&n(e[r],t[r]),v=(e,t)=>f(e)&&0===t||f(t)&&0===e||n(e,t),$=e=>f(e)||n(e,{})||!0===e,b=e=>f(e)||n(e,{}),w=e=>f(e)||l(e)||!0===e||!1===e;function S(e,t){return!(!y(e)||!y(t))||n(h(e),h(t))}function _(e,t,r,o){var s=a(p(e).concat(p(t)));return!(!b(e)||!b(t))||(!b(e)||!p(t).length)&&((!b(t)||!p(e).length)&&s.every((function(r){var a=e[r],s=t[r];return Array.isArray(a)&&Array.isArray(s)?n(h(e),h(t)):!(Array.isArray(a)&&!Array.isArray(s))&&(!(Array.isArray(s)&&!Array.isArray(a))&&g(e,t,r,o))})))}function x(e,t,r,n){var o=s(e,n),a=s(t,n);return c(o,a,n).length===Math.max(o.length,a.length)}var E={title:n,uniqueItems:(e,t)=>f(e)&&!1===t||f(t)&&!1===e||n(e,t),minLength:v,minItems:v,minProperties:v,required:S,enum:S,type:function(e,t){return e=u(e),t=u(t),n(h(e),h(t))},items:function(e,t,r,o){return l(e)&&l(t)?o(e,t):Array.isArray(e)&&Array.isArray(t)?_(e,t,0,o):n(e,t)},anyOf:x,allOf:x,oneOf:x,properties:_,patternProperties:_,dependencies:_},k=["properties","patternProperties","dependencies","uniqueItems","minLength","minItems","minProperties","required"],j=["additionalProperties","additionalItems","contains","propertyNames","not"];e.exports=function e(t,r,o){if(o=i(o,{ignore:[]}),$(t)&&$(r))return!0;if(!w(t)||!w(r))throw new Error("Either of the values are not a JSON schema.");if(t===r)return!0;if(d(t)&&d(r))return t===r;if(void 0===t&&!1===r||void 0===r&&!1===t)return!1;if(f(t)&&!f(r)||!f(t)&&f(r))return!1;var s=a(Object.keys(t).concat(Object.keys(r)));if(o.ignore.length&&(s=s.filter((e=>-1===o.ignore.indexOf(e)))),!s.length)return!0;function c(t,r){return e(t,r,o)}return s.every((function(a){var s=t[a],i=r[a];if(-1!==j.indexOf(a))return e(s,i,o);var l=E[a];if(l||(l=n),n(s,i))return!0;if(-1===k.indexOf(a)&&(!m(t,a)&&m(r,a)||m(t,a)&&!m(r,a)))return s===i;var u=l(s,i,a,c);if(!d(u))throw new Error("Comparer must return true or false");return u}))}},5109:(e,t,r)=>{const n=r(35970),o=r(3176),a=r(11331),s=r(63375),i=r(9063),c=r(91648);const l=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),d=e=>a(e)||Array.isArray(e)?Object.keys(e):[],u=e=>!d(e).length&&!1!==e&&!0!==e;e.exports={allUniqueKeys:e=>s(o(e.map(d))),deleteUndefinedProps:function(e){for(const t in e)l(e,t)&&u(e[t])&&delete e[t];return e},getValues:(e,t)=>e.map((e=>e&&e[t])),has:l,isEmptySchema:u,isSchema:e=>a(e)||!0===e||!1===e,keys:d,notUndefined:e=>void 0!==e,uniqWith:i,withoutArr:(e,...t)=>c.apply(null,[e].concat(n(t)))}},11051:(e,t,r)=>{const n=r(90370),o=r(39754),{allUniqueKeys:a,deleteUndefinedProps:s,has:i,isSchema:c,notUndefined:l,uniqWith:d}=r(5109);function u(e,t,r){return a(r).reduce((function(r,o){const a=function(e,t){return e.map((function(e){if(e){if(!Array.isArray(e.items))return e.items;{const r=e.items[t];if(c(r))return r;if(i(e,"additionalItems"))return e.additionalItems}}}))}(e,o),s=d(a.filter(l),n);return r[o]=t(s,o),r}),[])}e.exports={keywords:["items","additionalItems"],resolver(e,t,r){const n=e.map((e=>e.items)),a=n.filter(l),i={};let d;var f;return a.every(c)?i.items=r.items(n):i.items=u(e,r.items,n),a.every(Array.isArray)?d=e.map((e=>e.additionalItems)):a.some(Array.isArray)&&(d=e.map((function(e){if(e)return Array.isArray(e.items)?e.additionalItems:e.items}))),d&&(i.additionalItems=r.additionalItems(d)),!1===i.additionalItems&&Array.isArray(i.items)&&(f=i.items,o(f,(function(e,t){!1===e&&f.splice(t,1)}))),s(i)}}},7894:(e,t,r)=>{const n=r(90370),o=r(39754),{allUniqueKeys:a,deleteUndefinedProps:s,getValues:i,keys:c,notUndefined:l,uniqWith:d,withoutArr:u}=r(5109);function f(e,t){return a(e).reduce((function(r,o){const a=i(e,o),s=d(a.filter(l),n);return r[o]=t(s,o),r}),{})}e.exports={keywords:["properties","patternProperties","additionalProperties"],resolver(e,t,r,n){n.ignoreAdditionalProperties||(e.forEach((function(t){const n=e.filter((e=>e!==t)),o=c(t.properties),a=c(t.patternProperties).map((e=>new RegExp(e)));n.forEach((function(e){const n=c(e.properties),s=n.filter((e=>a.some((t=>t.test(e)))));u(n,o,s).forEach((function(n){e.properties[n]=r.properties([e.properties[n],t.additionalProperties],n)}))}))})),e.forEach((function(t){const r=e.filter((e=>e!==t)),n=c(t.patternProperties);!1===t.additionalProperties&&r.forEach((function(e){const t=c(e.patternProperties);u(t,n).forEach((t=>delete e.patternProperties[t]))}))})));const a={additionalProperties:r.additionalProperties(e.map((e=>e.additionalProperties))),patternProperties:f(e.map((e=>e.patternProperties)),r.patternProperties),properties:f(e.map((e=>e.properties)),r.properties)};var i;return!1===a.additionalProperties&&o(i=a.properties,(function(e,t){!1===e&&delete i[t]})),s(a)}}},33978:(e,t,r)=>{const n=r(88055),o=r(90370),a=r(78867),s=r(74354),i=r(35970),c=r(3176),l=r(5287),d=r(80191),u=r(2404),f=r(11331),p=r(12358),m=r(33031),h=r(63375),y=r(9063),g=r(7894),v=r(11051),$=(e,t)=>-1!==e.indexOf(t),b=e=>f(e)||!0===e||!1===e,w=e=>!1===e,S=e=>!0===e,_=(e,t,r)=>r(e),x=e=>m(h(c(e))),E=e=>void 0!==e,k=e=>h(c(e.map(A))),j=e=>e[0],C=e=>Math.max.apply(Math,e),P=e=>Math.min.apply(Math,e);function O(e){let{allOf:t=[],...r}=e;return r=f(e)?r:e,[r,...t.map(O)]}function N(e,t){return e.map((e=>e&&e[t]))}function A(e){return f(e)||Array.isArray(e)?Object.keys(e):[]}function D(e,t){if(t=t||[],!e.length)return t;const r=e.slice(0).shift(),n=e.slice(1);return t.length?D(n,i(t.map((e=>r.map((t=>[t].concat(e))))))):D(n,r.map((e=>e)))}function I(e,t){let r;try{r=e.map((function(e){return JSON.stringify(e,null,2)})).join("\n")}catch(n){r=e.join(", ")}throw new Error('Could not resolve values for path:"'+t.join(".")+'". They are probably incompatible. Values: \n'+r)}function F(e,t,r,n,a,s){if(e.length){const i=a.complexResolvers[t];if(!i||!i.resolver)throw new Error("No resolver found for "+t);const c=r.map((t=>e.reduce(((e,r)=>(void 0!==t[r]&&(e[r]=t[r]),e)),{}))),l=y(c,o),d=i.keywords.reduce(((e,t)=>({...e,[t]:(e,r=[])=>n(e,null,s.concat(t,r))})),{}),u=i.resolver(l,s.concat(t),d,a);return f(u)||I(l,s.concat(t)),u}}function T(e){return{required:e}}const R=["properties","patternProperties","definitions","dependencies"],M=["anyOf","oneOf"],U=["additionalProperties","additionalItems","contains","propertyNames","not","items"],V={type(e){if(e.some(Array.isArray)){const t=e.map((function(e){return Array.isArray(e)?e:[e]})),r=l.apply(null,t);if(1===r.length)return r[0];if(r.length>1)return h(r)}},dependencies:(e,t,r)=>k(e).reduce((function(t,n){const a=N(e,n);let s=y(a.filter(E),u);const i=s.filter(Array.isArray);if(i.length){if(i.length===s.length)t[n]=x(s);else{const e=s.filter(b),o=i.map(T);t[n]=r(e.concat(o),n)}return t}return s=y(s,o),t[n]=r(s,n),t}),{}),oneOf(e,t,r){const a=function(e,t){return e.map((function(e,r){try{return t(e,r)}catch(n){return}})).filter(E)}(D(n(e)),r),s=y(a,o);if(s.length)return s},not:e=>({anyOf:e}),pattern:e=>e.map((e=>"(?="+e+")")).join(""),multipleOf(e){let t=e.slice(0),r=1;for(;t.some((e=>!Number.isInteger(e)));)t=t.map((e=>10*e)),r*=10;return a(t)/r},enum(e){const t=d.apply(null,e.concat(u));if(t.length)return m(t)}};V.$id=j,V.$ref=j,V.$schema=j,V.additionalItems=_,V.additionalProperties=_,V.anyOf=V.oneOf,V.contains=_,V.default=j,V.definitions=V.dependencies,V.description=j,V.examples=e=>y(i(e),u),V.exclusiveMaximum=P,V.exclusiveMinimum=C,V.items=v,V.maximum=P,V.maxItems=P,V.maxLength=P,V.maxProperties=P,V.minimum=C,V.minItems=C,V.minLength=C,V.minProperties=C,V.properties=g,V.propertyNames=_,V.required=e=>x(e),V.title=j,V.uniqueItems=e=>e.some(S);const B={properties:g,items:v};function q(e,t,r){r=r||[],t=s(t,{ignoreAdditionalProperties:!1,resolvers:V,complexResolvers:B,deep:!0});const a=Object.entries(t.complexResolvers);const i=function e(s,i,c){s=n(s.filter(E)),c=c||[];const l=f(i)?i:{};if(!s.length)return;if(s.some(w))return!1;if(s.every(S))return!0;s=s.filter(f);const d=k(s);if(t.deep&&$(d,"allOf"))return q({allOf:s},t,r);const u=a.map((([e,t])=>d.filter((e=>t.keywords.includes(e)))));return u.forEach((e=>p(d,e))),d.forEach((function(r){const n=N(s,r),a=y(n.filter(E),function(e){return function(t,r){return o({[e]:t},{[e]:r})}}(r));if(1===a.length&&$(M,r))l[r]=a[0].map((t=>e([t],t)));else if(1!==a.length||$(R,r)||$(U,r)){const n=t.resolvers[r]||t.resolvers.defaultResolver;if(!n)throw new Error("No resolver found for key "+r+". You can provide a resolver for this keyword in the options, or provide a default resolver.");const o=(t,n=[])=>e(t,null,c.concat(r,n));l[r]=n(a,c.concat(r),o,t),void 0===l[r]?I(a,c.concat(r)):void 0===l[r]&&delete l[r]}else l[r]=a[0]})),a.reduce(((r,[n,o],a)=>({...r,...F(u[a],n,s,e,t,c)})),l)}(c(O(e)));return i}q.options={resolvers:V},e.exports=q},7106:e=>{"use strict";var t=e.exports=function(e,t,n){"function"==typeof t&&(n=t,t={}),r(t,"function"==typeof(n=t.cb||n)?n:n.pre||function(){},n.post||function(){},e,"",e)};function r(e,n,o,a,s,i,c,l,d,u){if(a&&"object"==typeof a&&!Array.isArray(a)){for(var f in n(a,s,i,c,l,d,u),a){var p=a[f];if(Array.isArray(p)){if(f in t.arrayKeywords)for(var m=0;m{var r=/~/,n=/~[01]/g;function o(e){switch(e){case"~1":return"/";case"~0":return"~"}throw new Error("Invalid tilde escape: "+e)}function a(e){return r.test(e)?e.replace(n,o):e}function s(e){if("string"===typeof e){if(""===(e=e.split("/"))[0])return e;throw new Error("Invalid JSON pointer.")}if(Array.isArray(e)){for(const t of e)if("string"!==typeof t&&"number"!==typeof t)throw new Error("Invalid JSON pointer. Must be of type string or number.");return e}throw new Error("Invalid JSON pointer.")}function i(e,t){if("object"!==typeof e)throw new Error("Invalid input object.");var r=(t=s(t)).length;if(1===r)return e;for(var n=1;ns,"undefined"===typeof e[n]&&(Array.isArray(e)&&"-"===n&&(n=e.length),o&&(""!==t[s]&&t[s]<1/0||"-"===t[s]?e[n]=[]:e[n]={})),!o)break;e=e[n]}var c=e[n];return void 0===r?delete e[n]:e[n]=r,c}(e,t,r)}t.get=i,t.set=c,t.compile=function(e){var t=s(e);return{get:function(e){return i(e,t)},set:function(e,r){return c(e,t,r)}}}},40882:e=>{e.exports=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o{var t=Object.prototype.hasOwnProperty;e.exports=function(e,r){return null!=e&&t.call(e,r)}},12027:e=>{e.exports=function(e,t,r,n){for(var o=r-1,a=e.length;++o{var n=r(38859),o=r(15325),a=r(29905),s=r(34932),i=r(27301),c=r(19219),l=Math.min;e.exports=function(e,t,r){for(var d=r?a:o,u=e[0].length,f=e.length,p=f,m=Array(f),h=1/0,y=[];p--;){var g=e[p];p&&t&&(g=s(g,i(t))),h=l(g.length,h),m[p]=!r&&(t||u>=120&&g.length>=120)?new n(p&&g):void 0}g=e[0];var v=-1,$=m[0];e:for(;++v{var n=r(34932),o=r(47422),a=r(15389),s=r(5128),i=r(73937),c=r(27301),l=r(43714),d=r(83488),u=r(56449);e.exports=function(e,t,r){t=t.length?n(t,(function(e){return u(e)?function(t){return o(t,1===e.length?e[0]:e)}:e})):[d];var f=-1;t=n(t,c(a));var p=s(e,(function(e,r,o){return{criteria:n(t,(function(t){return t(e)})),index:++f,value:e}}));return i(p,(function(e,t){return l(e,t,r)}))}},76001:(e,t,r)=>{var n=r(97420),o=r(80631);e.exports=function(e,t){return n(e,t,(function(t,r){return o(e,r)}))}},97420:(e,t,r)=>{var n=r(47422),o=r(73170),a=r(31769);e.exports=function(e,t,r){for(var s=-1,i=t.length,c={};++s{var n=r(34932),o=r(96131),a=r(12027),s=r(27301),i=r(23007),c=Array.prototype.splice;e.exports=function(e,t,r,l){var d=l?a:o,u=-1,f=t.length,p=e;for(e===t&&(t=i(t)),r&&(p=n(e,s(r)));++u-1;)p!==e&&c.call(p,m,1),c.call(e,m,1);return e}},85558:e=>{e.exports=function(e,t,r,n,o){return o(e,(function(e,o,a){r=n?(n=!1,e):t(r,e,o,a)})),r}},73170:(e,t,r)=>{var n=r(16547),o=r(31769),a=r(30361),s=r(23805),i=r(77797);e.exports=function(e,t,r,c){if(!s(e))return e;for(var l=-1,d=(t=o(t,e)).length,u=d-1,f=e;null!=f&&++l{e.exports=function(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}},3122:(e,t,r)=>{var n=r(83693);e.exports=function(e){return n(e)?e:[]}},53730:(e,t,r)=>{var n=r(44394);e.exports=function(e,t){if(e!==t){var r=void 0!==e,o=null===e,a=e===e,s=n(e),i=void 0!==t,c=null===t,l=t===t,d=n(t);if(!c&&!d&&!s&&e>t||s&&i&&l&&!c&&!d||o&&i&&l||!r&&l||!a)return 1;if(!o&&!s&&!d&&e{var n=r(53730);e.exports=function(e,t,r){for(var o=-1,a=e.criteria,s=t.criteria,i=a.length,c=r.length;++o=c?l:l*("desc"==r[o]?-1:1)}return e.index-t.index}},52606:(e,t,r)=>{var n=r(85250),o=r(23805);e.exports=function e(t,r,a,s,i,c){return o(t)&&o(r)&&(c.set(r,t),n(t,r,void 0,e,c),c.delete(r)),t}},84684:(e,t,r)=>{var n=r(69302),o=r(75288),a=r(36800),s=r(37241),i=Object.prototype,c=i.hasOwnProperty,l=n((function(e,t){e=Object(e);var r=-1,n=t.length,l=n>2?t[2]:void 0;for(l&&a(t[0],t[1],l)&&(n=1);++r{var n=r(91033),o=r(69302),a=r(52606),s=r(6924),i=o((function(e){return e.push(void 0,a),n(s,void 0,e)}));e.exports=i},3176:(e,t,r)=>{var n=r(83120),o=1/0;e.exports=function(e){return(null==e?0:e.length)?n(e,o):[]}},39754:(e,t,r)=>{var n=r(83729),o=r(80909),a=r(24066),s=r(56449);e.exports=function(e,t){return(s(e)?n:o)(e,a(t))}},61448:(e,t,r)=>{var n=r(20426),o=r(49326);e.exports=function(e,t){return null!=e&&o(e,t,n)}},5287:(e,t,r)=>{var n=r(34932),o=r(27185),a=r(69302),s=r(3122),i=a((function(e){var t=n(e,s);return t.length&&t[0]===e[0]?o(t):[]}));e.exports=i},80191:(e,t,r)=>{var n=r(34932),o=r(27185),a=r(69302),s=r(3122),i=r(68090),c=a((function(e){var t=i(e),r=n(e,s);return(t="function"==typeof t?t:void 0)&&r.pop(),r.length&&r[0]===e[0]?o(r,void 0,t):[]}));e.exports=c},53812:(e,t,r)=>{var n=r(72552),o=r(40346);e.exports=function(e){return!0===e||!1===e||o(e)&&"[object Boolean]"==n(e)}},29132:(e,t,r)=>{var n=r(60270);e.exports=function(e,t,r){var o=(r="function"==typeof r?r:void 0)?r(e,t):void 0;return void 0===o?n(e,t,void 0,r):!!o}},69843:e=>{e.exports=function(e){return null==e}},98023:(e,t,r)=>{var n=r(72552),o=r(40346);e.exports=function(e){return"number"==typeof e||o(e)&&"[object Number]"==n(e)}},6924:(e,t,r)=>{var n=r(85250),o=r(20999)((function(e,t,r,o){n(e,t,r,o)}));e.exports=o},44383:(e,t,r)=>{var n=r(76001),o=r(38816)((function(e,t){return null==e?{}:n(e,t)}));e.exports=o},12358:(e,t,r)=>{var n=r(21988);e.exports=function(e,t){return e&&e.length&&t&&t.length?n(e,t):e}},40860:(e,t,r)=>{var n=r(40882),o=r(80909),a=r(15389),s=r(85558),i=r(56449);e.exports=function(e,t,r){var c=i(e)?n:s,l=arguments.length<3;return c(e,a(t,4),r,l,o)}},63560:(e,t,r)=>{var n=r(73170);e.exports=function(e,t,r){return null==e?e:n(e,t,r)}},33031:(e,t,r)=>{var n=r(83120),o=r(46155),a=r(69302),s=r(36800),i=a((function(e,t){if(null==e)return[];var r=t.length;return r>1&&s(e,t[0],t[1])?t=[]:r>2&&s(t[0],t[1],t[2])&&(t=[t[0]]),o(e,n(t,1),[])}));e.exports=i},6638:(e,t,r)=>{var n=r(78096),o=r(24066),a=r(61489),s=4294967295,i=Math.min;e.exports=function(e,t){if((e=a(e))<1||e>9007199254740991)return[];var r=s,c=i(e,s);t=o(t),e-=s;for(var l=n(c,t);++r{var n=r(99374),o=1/0;e.exports=function(e){return e?(e=n(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e===e?e:0:0===e?e:0}},61489:(e,t,r)=>{var n=r(17400);e.exports=function(e){var t=n(e),r=t%1;return t===t?r?t-r:t:0}},42072:(e,t,r)=>{var n=r(34932),o=r(23007),a=r(56449),s=r(44394),i=r(61802),c=r(77797),l=r(13222);e.exports=function(e){return a(e)?n(e,c):s(e)?[e]:o(i(l(e)))}},69752:(e,t,r)=>{var n=r(83729),o=r(39344),a=r(30641),s=r(15389),i=r(28879),c=r(56449),l=r(3656),d=r(1882),u=r(23805),f=r(37167);e.exports=function(e,t,r){var p=c(e),m=p||l(e)||f(e);if(t=s(t,4),null==r){var h=e&&e.constructor;r=m?p?new h:[]:u(e)&&d(h)?o(i(e)):{}}return(m?n:a)(e,(function(e,n,o){return t(r,e,n,o)})),r}},80299:(e,t,r)=>{var n=r(83120),o=r(69302),a=r(55765),s=r(83693),i=o((function(e){return a(n(e,1,s,!0))}));e.exports=i},63375:(e,t,r)=>{var n=r(55765);e.exports=function(e){return e&&e.length?n(e):[]}},9063:(e,t,r)=>{var n=r(55765);e.exports=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?n(e,void 0,t):[]}},73357:(e,t,r)=>{var n=r(19931);e.exports=function(e,t){return null==e||n(e,t)}},91648:(e,t,r)=>{var n=r(83915),o=r(69302),a=r(83693),s=o((function(e,t){return a(e)?n(e,t):[]}));e.exports=s},21020:(e,t,r)=>{"use strict";var n=r(96540),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,i=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function l(e,t,r){var n,a={},l=null,d=null;for(n in void 0!==r&&(l=""+r),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(d=t.ref),t)s.call(t,n)&&!c.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:o,type:e,key:l,ref:d,props:a,_owner:i.current}}t.Fragment=a,t.jsx=l,t.jsxs=l},74848:(e,t,r)=>{"use strict";e.exports=r(21020)},46579:function(e,t){!function(e){"use strict";function t(){for(var e=arguments.length,t=Array(e),r=0;r1){t[0]=t[0].slice(0,-1);for(var n=t.length-1,o=1;o= 0x80 (not a basic code point)","invalid-input":"Invalid input"},E=p-m,k=Math.floor,j=String.fromCharCode;function C(e){throw new RangeError(x[e])}function P(e,t){for(var r=[],n=e.length;n--;)r[n]=t(e[n]);return r}function O(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+P((e=e.replace(_,".")).split("."),t).join(".")}function N(e){for(var t=[],r=0,n=e.length;r=55296&&o<=56319&&r>1,e+=k(e/t);e>E*h>>1;n+=p)e=k(e/E);return k(n+(E+1)*e/(e+y))},F=function(e){var t=[],r=e.length,n=0,o=$,a=v,s=e.lastIndexOf(b);s<0&&(s=0);for(var i=0;i=128&&C("not-basic"),t.push(e.charCodeAt(i));for(var c=s>0?s+1:0;c=r&&C("invalid-input");var y=A(e.charCodeAt(c++));(y>=p||y>k((f-n)/d))&&C("overflow"),n+=y*d;var g=u<=a?m:u>=a+h?h:u-a;if(yk(f/w)&&C("overflow"),d*=w}var S=t.length+1;a=I(n-l,S,0==l),k(n/S)>f-o&&C("overflow"),o+=k(n/S),n%=S,t.splice(n++,0,o)}return String.fromCodePoint.apply(String,t)},T=function(e){var t=[],r=(e=N(e)).length,n=$,o=0,a=v,s=!0,i=!1,c=void 0;try{for(var l,d=e[Symbol.iterator]();!(s=(l=d.next()).done);s=!0){var u=l.value;u<128&&t.push(j(u))}}catch(W){i=!0,c=W}finally{try{!s&&d.return&&d.return()}finally{if(i)throw c}}var y=t.length,g=y;for(y&&t.push(b);g=n&&Ok((f-o)/A)&&C("overflow"),o+=(w-n)*A,n=w;var F=!0,T=!1,R=void 0;try{for(var M,U=e[Symbol.iterator]();!(F=(M=U.next()).done);F=!0){var V=M.value;if(Vf&&C("overflow"),V==n){for(var B=o,q=p;;q+=p){var z=q<=a?m:q>=a+h?h:q-a;if(B>6|192).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase():"%"+(t>>12|224).toString(16).toUpperCase()+"%"+(t>>6&63|128).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase()}function q(e){for(var t="",r=0,n=e.length;r=194&&o<224){if(n-r>=6){var a=parseInt(e.substr(r+4,2),16);t+=String.fromCharCode((31&o)<<6|63&a)}else t+=e.substr(r,6);r+=6}else if(o>=224){if(n-r>=9){var s=parseInt(e.substr(r+4,2),16),i=parseInt(e.substr(r+7,2),16);t+=String.fromCharCode((15&o)<<12|(63&s)<<6|63&i)}else t+=e.substr(r,9);r+=9}else t+=e.substr(r,3),r+=3}return t}function z(e,t){function r(e){var r=q(e);return r.match(t.UNRESERVED)?r:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,r).replace(t.NOT_USERINFO,B).replace(t.PCT_ENCODED,o)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_HOST,B).replace(t.PCT_ENCODED,o)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,r).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,B).replace(t.PCT_ENCODED,o)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,r).replace(t.NOT_QUERY,B).replace(t.PCT_ENCODED,o)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,r).replace(t.NOT_FRAGMENT,B).replace(t.PCT_ENCODED,o)),e}function L(e){return e.replace(/^0*(.*)/,"$1")||"0"}function K(e,t){var r=e.match(t.IPV4ADDRESS)||[],n=d(r,2)[1];return n?n.split(".").map(L).join("."):e}function W(e,t){var r=e.match(t.IPV6ADDRESS)||[],n=d(r,3),o=n[1],a=n[2];if(o){for(var s=o.toLowerCase().split("::").reverse(),i=d(s,2),c=i[0],l=i[1],u=l?l.split(":").map(L):[],f=c.split(":").map(L),p=t.IPV4ADDRESS.test(f[f.length-1]),m=p?7:8,h=f.length-m,y=Array(m),g=0;g1){var b=y.slice(0,v.index),w=y.slice(v.index+v.length);$=b.join(":")+"::"+w.join(":")}else $=y.join(":");return a&&($+="%"+a),$}return e}var H=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,G=void 0==="".match(/(){0}/)[1];function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={},n=!1!==t.iri?l:c;"suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e);var o=e.match(H);if(o){G?(r.scheme=o[1],r.userinfo=o[3],r.host=o[4],r.port=parseInt(o[5],10),r.path=o[6]||"",r.query=o[7],r.fragment=o[8],isNaN(r.port)&&(r.port=o[5])):(r.scheme=o[1]||void 0,r.userinfo=-1!==e.indexOf("@")?o[3]:void 0,r.host=-1!==e.indexOf("//")?o[4]:void 0,r.port=parseInt(o[5],10),r.path=o[6]||"",r.query=-1!==e.indexOf("?")?o[7]:void 0,r.fragment=-1!==e.indexOf("#")?o[8]:void 0,isNaN(r.port)&&(r.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?o[4]:void 0)),r.host&&(r.host=W(K(r.host,n),n)),void 0!==r.scheme||void 0!==r.userinfo||void 0!==r.host||void 0!==r.port||r.path||void 0!==r.query?void 0===r.scheme?r.reference="relative":void 0===r.fragment?r.reference="absolute":r.reference="uri":r.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==r.reference&&(r.error=r.error||"URI is not a "+t.reference+" reference.");var a=V[(t.scheme||r.scheme||"").toLowerCase()];if(t.unicodeSupport||a&&a.unicodeSupport)z(r,n);else{if(r.host&&(t.domainHost||a&&a.domainHost))try{r.host=U.toASCII(r.host.replace(n.PCT_ENCODED,q).toLowerCase())}catch(s){r.error=r.error||"Host's domain name can not be converted to ASCII via punycode: "+s}z(r,c)}a&&a.parse&&a.parse(r,t)}else r.error=r.error||"URI can not be parsed.";return r}function J(e,t){var r=!1!==t.iri?l:c,n=[];return void 0!==e.userinfo&&(n.push(e.userinfo),n.push("@")),void 0!==e.host&&n.push(W(K(String(e.host),r),r).replace(r.IPV6ADDRESS,(function(e,t,r){return"["+t+(r?"%25"+r:"")+"]"}))),"number"!==typeof e.port&&"string"!==typeof e.port||(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}var Y=/^\.\.?\//,Q=/^\/\.(\/|$)/,X=/^\/\.\.(\/|$)/,ee=/^\/?(?:.|\n)*?(?=\/|$)/;function te(e){for(var t=[];e.length;)if(e.match(Y))e=e.replace(Y,"");else if(e.match(Q))e=e.replace(Q,"/");else if(e.match(X))e=e.replace(X,"/"),t.pop();else if("."===e||".."===e)e="";else{var r=e.match(ee);if(!r)throw new Error("Unexpected dot segment condition");var n=r[0];e=e.slice(n.length),t.push(n)}return t.join("")}function re(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.iri?l:c,n=[],o=V[(t.scheme||e.scheme||"").toLowerCase()];if(o&&o.serialize&&o.serialize(e,t),e.host)if(r.IPV6ADDRESS.test(e.host));else if(t.domainHost||o&&o.domainHost)try{e.host=t.iri?U.toUnicode(e.host):U.toASCII(e.host.replace(r.PCT_ENCODED,q).toLowerCase())}catch(i){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+i}z(e,r),"suffix"!==t.reference&&e.scheme&&(n.push(e.scheme),n.push(":"));var a=J(e,t);if(void 0!==a&&("suffix"!==t.reference&&n.push("//"),n.push(a),e.path&&"/"!==e.path.charAt(0)&&n.push("/")),void 0!==e.path){var s=e.path;t.absolutePath||o&&o.absolutePath||(s=te(s)),void 0===a&&(s=s.replace(/^\/\//,"/%2F")),n.push(s)}return void 0!==e.query&&(n.push("?"),n.push(e.query)),void 0!==e.fragment&&(n.push("#"),n.push(e.fragment)),n.join("")}function ne(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n={};return arguments[3]||(e=Z(re(e,r),r),t=Z(re(t,r),r)),!(r=r||{}).tolerant&&t.scheme?(n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=te(t.path||""),n.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=te(t.path||""),n.query=t.query):(t.path?("/"===t.path.charAt(0)?n.path=te(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:n.path=t.path:n.path="/"+t.path,n.path=te(n.path)),n.query=t.query):(n.path=e.path,void 0!==t.query?n.query=t.query:n.query=e.query),n.userinfo=e.userinfo,n.host=e.host,n.port=e.port),n.scheme=e.scheme),n.fragment=t.fragment,n}function oe(e,t,r){var n=s({scheme:"null"},r);return re(ne(Z(e,n),Z(t,n),n,!0),n)}function ae(e,t){return"string"===typeof e?e=re(Z(e,t),t):"object"===n(e)&&(e=Z(re(e,t),t)),e}function se(e,t,r){return"string"===typeof e?e=re(Z(e,r),r):"object"===n(e)&&(e=re(e,r)),"string"===typeof t?t=re(Z(t,r),r):"object"===n(t)&&(t=re(t,r)),e===t}function ie(e,t){return e&&e.toString().replace(t&&t.iri?l.ESCAPE:c.ESCAPE,B)}function ce(e,t){return e&&e.toString().replace(t&&t.iri?l.PCT_ENCODED:c.PCT_ENCODED,q)}var le={scheme:"http",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){var r="https"===String(e.scheme).toLowerCase();return e.port!==(r?443:80)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},de={scheme:"https",domainHost:le.domainHost,parse:le.parse,serialize:le.serialize};function ue(e){return"boolean"===typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}var fe={scheme:"ws",domainHost:!0,parse:function(e,t){var r=e;return r.secure=ue(r),r.resourceName=(r.path||"/")+(r.query?"?"+r.query:""),r.path=void 0,r.query=void 0,r},serialize:function(e,t){if(e.port!==(ue(e)?443:80)&&""!==e.port||(e.port=void 0),"boolean"===typeof e.secure&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){var r=e.resourceName.split("?"),n=d(r,2),o=n[0],a=n[1];e.path=o&&"/"!==o?o:void 0,e.query=a,e.resourceName=void 0}return e.fragment=void 0,e}},pe={scheme:"wss",domainHost:fe.domainHost,parse:fe.parse,serialize:fe.serialize},me={},he="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",ye="[0-9A-Fa-f]",ge=r(r("%[EFef]"+ye+"%"+ye+ye+"%"+ye+ye)+"|"+r("%[89A-Fa-f]"+ye+"%"+ye+ye)+"|"+r("%"+ye+ye)),ve="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",$e=t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),be="[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]",we=new RegExp(he,"g"),Se=new RegExp(ge,"g"),_e=new RegExp(t("[^]",ve,"[\\.]",'[\\"]',$e),"g"),xe=new RegExp(t("[^]",he,be),"g"),Ee=xe;function ke(e){var t=q(e);return t.match(we)?t:e}var je={scheme:"mailto",parse:function(e,t){var r=e,n=r.to=r.path?r.path.split(","):[];if(r.path=void 0,r.query){for(var o=!1,a={},s=r.query.split("&"),i=0,c=s.length;i{"use strict";e.exports=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},82986:e=>{"use strict";e.exports=function(e){return"function"===typeof e}},96552:(e,t,r)=>{"use strict";var n=r(7800),o=r(84356);e.exports=function(e){var t;if(!n(e))return!1;if(!(t=e.length))return!1;for(var r=0;r{"use strict";var n=r(66415);e.exports=function(e){return n(e)&&e%1===0}},66415:e=>{"use strict";e.exports=function(e){return("number"===typeof e||"[object Number]"===Object.prototype.toString.call(e))&&e.valueOf()===e.valueOf()}},63837:e=>{"use strict";e.exports=JSON.parse('{"$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON AnySchema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},72079:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}}]); \ No newline at end of file diff --git a/src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js.LICENSE.txt b/src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js.LICENSE.txt deleted file mode 100644 index d639ff9e1..000000000 --- a/src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js.LICENSE.txt +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @license React - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ diff --git a/src/web/gui/v2/7519.7982a2e0fcdf82ba78dd.chunk.js b/src/web/gui/v2/7519.7982a2e0fcdf82ba78dd.chunk.js deleted file mode 100644 index 58957538a..000000000 --- a/src/web/gui/v2/7519.7982a2e0fcdf82ba78dd.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="0d9f1c5f-f842-4403-af92-e8b799d150e0",e._sentryDebugIdIdentifier="sentry-dbid-0d9f1c5f-f842-4403-af92-e8b799d150e0")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7519],{68415:(e,t)=>{var r="user-astronaut",n=[],a="f4fb",i="M370.7 96.1C346.1 39.5 289.7 0 224 0S101.9 39.5 77.3 96.1C60.9 97.5 48 111.2 48 128v64c0 16.8 12.9 30.5 29.3 31.9C101.9 280.5 158.3 320 224 320s122.1-39.5 146.7-96.1c16.4-1.4 29.3-15.1 29.3-31.9V128c0-16.8-12.9-30.5-29.3-31.9zM336 144v16c0 53-43 96-96 96H208c-53 0-96-43-96-96V144c0-26.5 21.5-48 48-48H288c26.5 0 48 21.5 48 48zM189.3 162.7l-6-21.2c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6zM112.7 316.5C46.7 342.6 0 407 0 482.3C0 498.7 13.3 512 29.7 512H128V448c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64l98.3 0c16.4 0 29.7-13.3 29.7-29.7c0-75.3-46.7-139.7-112.7-165.8C303.9 338.8 265.5 352 224 352s-79.9-13.2-111.3-35.5zM176 448c-8.8 0-16 7.2-16 16v48h32V464c0-8.8-7.2-16-16-16zm96 32a16 16 0 1 0 0-32 16 16 0 1 0 0 32z";t.mw={prefix:"fas",iconName:r,icon:[448,512,n,a,i]},t.yV=t.mw},20982:(e,t,r)=>{function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);rFr});var p=function(){},d={},h={},m=null,g={mark:p,measure:p};try{"undefined"!==typeof window&&(d=window),"undefined"!==typeof document&&(h=document),"undefined"!==typeof MutationObserver&&(m=MutationObserver),"undefined"!==typeof performance&&(g=performance)}catch(Lr){}var b,y,v,k,_,w=(d.navigator||{}).userAgent,x=void 0===w?"":w,A=d,C=h,E=m,S=g,D=(A.document,!!C.documentElement&&!!C.head&&"function"===typeof C.addEventListener&&"function"===typeof C.createElement),j=~x.indexOf("MSIE")||~x.indexOf("Trident/"),O="___FONT_AWESOME___",q=16,F="fa",z="svg-inline--fa",L="data-fa-i2svg",I="data-fa-pseudo-element",N="data-fa-pseudo-element-pending",M="data-prefix",T="data-icon",P="fontawesome-i2svg",R="async",$=["HTML","HEAD","STYLE","SCRIPT"],B=function(){try{return!0}catch(Lr){return!1}}(),U="classic",V="sharp",Z=[U,V];function H(e){return new Proxy(e,{get:function(e,t){return t in e?e[t]:e[U]}})}var Y=H((s(b={},U,{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fad:"duotone","fa-duotone":"duotone",fab:"brands","fa-brands":"brands",fak:"kit",fakd:"kit","fa-kit":"kit","fa-kit-duotone":"kit"}),s(b,V,{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light",fast:"thin","fa-thin":"thin"}),b)),G=H((s(y={},U,{solid:"fas",regular:"far",light:"fal",thin:"fat",duotone:"fad",brands:"fab",kit:"fak"}),s(y,V,{solid:"fass",regular:"fasr",light:"fasl",thin:"fast"}),y)),W=H((s(v={},U,{fab:"fa-brands",fad:"fa-duotone",fak:"fa-kit",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"}),s(v,V,{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light",fast:"fa-thin"}),v)),J=H((s(k={},U,{"fa-brands":"fab","fa-duotone":"fad","fa-kit":"fak","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"}),s(k,V,{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl","fa-thin":"fast"}),k)),X=/fa(s|r|l|t|d|b|k|ss|sr|sl|st)?[\-\ ]/,K="fa-layers-text",Q=/Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i,ee=H((s(_={},U,{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"}),s(_,V,{900:"fass",400:"fasr",300:"fasl",100:"fast"}),_)),te=[1,2,3,4,5,6,7,8,9,10],re=te.concat([11,12,13,14,15,16,17,18,19,20]),ne=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],ae={GROUP:"duotone-group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},ie=new Set;Object.keys(G[U]).map(ie.add.bind(ie)),Object.keys(G[V]).map(ie.add.bind(ie));var oe=[].concat(Z,l(ie),["2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",ae.GROUP,ae.SWAP_OPACITY,ae.PRIMARY,ae.SECONDARY]).concat(te.map((function(e){return"".concat(e,"x")}))).concat(re.map((function(e){return"w-".concat(e)}))),se=A.FontAwesomeConfig||{};if(C&&"function"===typeof C.querySelector){[["data-family-prefix","familyPrefix"],["data-css-prefix","cssPrefix"],["data-family-default","familyDefault"],["data-style-default","styleDefault"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach((function(e){var t=c(e,2),r=t[0],n=t[1],a=function(e){return""===e||"false"!==e&&("true"===e||e)}(function(e){var t=C.querySelector("script["+e+"]");if(t)return t.getAttribute(e)}(r));void 0!==a&&null!==a&&(se[n]=a)}))}var ce={styleDefault:"solid",familyDefault:"classic",cssPrefix:F,replacementClass:z,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0};se.familyPrefix&&(se.cssPrefix=se.familyPrefix);var le=a(a({},ce),se);le.autoReplaceSvg||(le.observeMutations=!1);var ue={};Object.keys(ce).forEach((function(e){Object.defineProperty(ue,e,{enumerable:!0,set:function(t){le[e]=t,fe.forEach((function(e){return e(ue)}))},get:function(){return le[e]}})})),Object.defineProperty(ue,"familyPrefix",{enumerable:!0,set:function(e){le.cssPrefix=e,fe.forEach((function(e){return e(ue)}))},get:function(){return le.cssPrefix}}),A.FontAwesomeConfig=ue;var fe=[];var pe=q,de={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};var he="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function me(){for(var e=12,t="";e-- >0;)t+=he[62*Math.random()|0];return t}function ge(e){for(var t=[],r=(e||[]).length>>>0;r--;)t[r]=e[r];return t}function be(e){return e.classList?ge(e.classList):(e.getAttribute("class")||"").split(" ").filter((function(e){return e}))}function ye(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function ve(e){return Object.keys(e||{}).reduce((function(t,r){return t+"".concat(r,": ").concat(e[r].trim(),";")}),"")}function ke(e){return e.size!==de.size||e.x!==de.x||e.y!==de.y||e.rotate!==de.rotate||e.flipX||e.flipY}var _e=':root, :host {\n --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid";\n --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular";\n --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light";\n --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin";\n --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n --fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp";\n --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n overflow: visible;\n box-sizing: content-box;\n}\n\n.svg-inline--fa {\n display: var(--fa-display, inline-block);\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: var(--fa-pull-margin, 0.3em);\n width: auto;\n}\n.svg-inline--fa.fa-li {\n width: var(--fa-li-width, 2em);\n top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: var(--fa-counter-background-color, #ff253a);\n border-radius: var(--fa-counter-border-radius, 1em);\n box-sizing: border-box;\n color: var(--fa-inverse, #fff);\n line-height: var(--fa-counter-line-height, 1);\n max-width: var(--fa-counter-max-width, 5em);\n min-width: var(--fa-counter-min-width, 1.5em);\n overflow: hidden;\n padding: var(--fa-counter-padding, 0.25em 0.5em);\n right: var(--fa-right, 0);\n text-overflow: ellipsis;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-counter-scale, 0.25));\n transform: scale(var(--fa-counter-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: var(--fa-bottom, 0);\n right: var(--fa-right, 0);\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: var(--fa-bottom, 0);\n left: var(--fa-left, 0);\n right: auto;\n top: auto;\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n top: var(--fa-top, 0);\n right: var(--fa-right, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: var(--fa-left, 0);\n right: auto;\n top: var(--fa-top, 0);\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n transform: scale(var(--fa-layers-scale, 0.25));\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-2xs {\n font-size: 0.625em;\n line-height: 0.1em;\n vertical-align: 0.225em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n line-height: 0.0833333337em;\n vertical-align: 0.125em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n line-height: 0.0714285718em;\n vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n font-size: 1.25em;\n line-height: 0.05em;\n vertical-align: -0.075em;\n}\n\n.fa-xl {\n font-size: 1.5em;\n line-height: 0.0416666682em;\n vertical-align: -0.125em;\n}\n\n.fa-2xl {\n font-size: 2em;\n line-height: 0.03125em;\n vertical-align: -0.1875em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: var(--fa-li-margin, 2.5em);\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: calc(var(--fa-li-width, 2em) * -1);\n position: absolute;\n text-align: center;\n width: var(--fa-li-width, 2em);\n line-height: inherit;\n}\n\n.fa-border {\n border-color: var(--fa-border-color, #eee);\n border-radius: var(--fa-border-radius, 0.1em);\n border-style: var(--fa-border-style, solid);\n border-width: var(--fa-border-width, 0.08em);\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n float: left;\n margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n float: right;\n margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n -webkit-animation-name: fa-beat;\n animation-name: fa-beat;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n -webkit-animation-name: fa-bounce;\n animation-name: fa-bounce;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n -webkit-animation-name: fa-fade;\n animation-name: fa-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n -webkit-animation-name: fa-beat-fade;\n animation-name: fa-beat-fade;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n -webkit-animation-name: fa-flip;\n animation-name: fa-flip;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n -webkit-animation-name: fa-shake;\n animation-name: fa-shake;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\n animation-delay: var(--fa-animation-delay, 0s);\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 2s);\n animation-duration: var(--fa-animation-duration, 2s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n -webkit-animation-name: fa-spin;\n animation-name: fa-spin;\n -webkit-animation-direction: var(--fa-animation-direction, normal);\n animation-direction: var(--fa-animation-direction, normal);\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\n animation-duration: var(--fa-animation-duration, 1s);\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n -webkit-animation-delay: -1ms;\n animation-delay: -1ms;\n -webkit-animation-duration: 1ms;\n animation-duration: 1ms;\n -webkit-animation-iteration-count: 1;\n animation-iteration-count: 1;\n -webkit-transition-delay: 0s;\n transition-delay: 0s;\n -webkit-transition-duration: 0s;\n transition-duration: 0s;\n }\n}\n@-webkit-keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@keyframes fa-beat {\n 0%, 90% {\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 45% {\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n transform: scale(var(--fa-beat-scale, 1.25));\n }\n}\n@-webkit-keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@keyframes fa-bounce {\n 0% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 10% {\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n }\n 30% {\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n }\n 50% {\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n }\n 57% {\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n }\n 64% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n 100% {\n -webkit-transform: scale(1, 1) translateY(0);\n transform: scale(1, 1) translateY(0);\n }\n}\n@-webkit-keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@keyframes fa-fade {\n 50% {\n opacity: var(--fa-fade-opacity, 0.4);\n }\n}\n@-webkit-keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@keyframes fa-beat-fade {\n 0%, 100% {\n opacity: var(--fa-beat-fade-opacity, 0.4);\n -webkit-transform: scale(1);\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n transform: scale(var(--fa-beat-fade-scale, 1.125));\n }\n}\n@-webkit-keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@keyframes fa-flip {\n 50% {\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n }\n}\n@-webkit-keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@keyframes fa-shake {\n 0% {\n -webkit-transform: rotate(-15deg);\n transform: rotate(-15deg);\n }\n 4% {\n -webkit-transform: rotate(15deg);\n transform: rotate(15deg);\n }\n 8%, 24% {\n -webkit-transform: rotate(-18deg);\n transform: rotate(-18deg);\n }\n 12%, 28% {\n -webkit-transform: rotate(18deg);\n transform: rotate(18deg);\n }\n 16% {\n -webkit-transform: rotate(-22deg);\n transform: rotate(-22deg);\n }\n 20% {\n -webkit-transform: rotate(22deg);\n transform: rotate(22deg);\n }\n 32% {\n -webkit-transform: rotate(-12deg);\n transform: rotate(-12deg);\n }\n 36% {\n -webkit-transform: rotate(12deg);\n transform: rotate(12deg);\n }\n 40%, 100% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n}\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n -webkit-transform: rotate(var(--fa-rotate-angle, 0));\n transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n display: inline-block;\n vertical-align: middle;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n color: var(--fa-inverse, #fff);\n}';function we(){var e=F,t=z,r=ue.cssPrefix,n=ue.replacementClass,a=_e;if(r!==e||n!==t){var i=new RegExp("\\.".concat(e,"\\-"),"g"),o=new RegExp("\\--".concat(e,"\\-"),"g"),s=new RegExp("\\.".concat(t),"g");a=a.replace(i,".".concat(r,"-")).replace(o,"--".concat(r,"-")).replace(s,".".concat(n))}return a}var xe=!1;function Ae(){ue.autoAddCss&&!xe&&(!function(e){if(e&&D){var t=C.createElement("style");t.setAttribute("type","text/css"),t.innerHTML=e;for(var r=C.head.childNodes,n=null,a=r.length-1;a>-1;a--){var i=r[a],o=(i.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(o)>-1&&(n=i)}C.head.insertBefore(t,n)}}(we()),xe=!0)}var Ce={mixout:function(){return{dom:{css:we,insertCss:Ae}}},hooks:function(){return{beforeDOMElementCreation:function(){Ae()},beforeI2svg:function(){Ae()}}}},Ee=A||{};Ee[O]||(Ee[O]={}),Ee[O].styles||(Ee[O].styles={}),Ee[O].hooks||(Ee[O].hooks={}),Ee[O].shims||(Ee[O].shims=[]);var Se=Ee[O],De=[],je=!1;function Oe(e){var t=e.tag,r=e.attributes,n=void 0===r?{}:r,a=e.children,i=void 0===a?[]:a;return"string"===typeof e?ye(e):"<".concat(t," ").concat(function(e){return Object.keys(e||{}).reduce((function(t,r){return t+"".concat(r,'="').concat(ye(e[r]),'" ')}),"").trim()}(n),">").concat(i.map(Oe).join(""),"")}function qe(e,t,r){if(e&&e[t]&&e[t][r])return{prefix:t,iconName:r,icon:e[t][r]}}D&&((je=(C.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(C.readyState))||C.addEventListener("DOMContentLoaded",(function e(){C.removeEventListener("DOMContentLoaded",e),je=1,De.map((function(e){return e()}))})));var Fe=function(e,t,r,n){var a,i,o,s=Object.keys(e),c=s.length,l=void 0!==n?function(e,t){return function(r,n,a,i){return e.call(t,r,n,a,i)}}(t,n):t;for(void 0===r?(a=1,o=e[s[0]]):(a=0,o=r);a=55296&&a<=56319&&r2&&void 0!==arguments[2]?arguments[2]:{}).skipHooks,n=void 0!==r&&r,i=Le(t);"function"!==typeof Se.hooks.addPack||n?Se.styles[e]=a(a({},Se.styles[e]||{}),i):Se.hooks.addPack(e,Le(t)),"fas"===e&&Ie("fa",t)}var Ne,Me,Te,Pe=Se.styles,Re=Se.shims,$e=(s(Ne={},U,Object.values(W[U])),s(Ne,V,Object.values(W[V])),Ne),Be=null,Ue={},Ve={},Ze={},He={},Ye={},Ge=(s(Me={},U,Object.keys(Y[U])),s(Me,V,Object.keys(Y[V])),Me);function We(e,t){var r,n=t.split("-"),a=n[0],i=n.slice(1).join("-");return a!==e||""===i||(r=i,~oe.indexOf(r))?null:i}var Je,Xe=function(){var e=function(e){return Fe(Pe,(function(t,r,n){return t[n]=Fe(r,e,{}),t}),{})};Ue=e((function(e,t,r){(t[3]&&(e[t[3]]=r),t[2])&&t[2].filter((function(e){return"number"===typeof e})).forEach((function(t){e[t.toString(16)]=r}));return e})),Ve=e((function(e,t,r){(e[r]=r,t[2])&&t[2].filter((function(e){return"string"===typeof e})).forEach((function(t){e[t]=r}));return e})),Ye=e((function(e,t,r){var n=t[2];return e[r]=r,n.forEach((function(t){e[t]=r})),e}));var t="far"in Pe||ue.autoFetchSvg,r=Fe(Re,(function(e,r){var n=r[0],a=r[1],i=r[2];return"far"!==a||t||(a="fas"),"string"===typeof n&&(e.names[n]={prefix:a,iconName:i}),"number"===typeof n&&(e.unicodes[n.toString(16)]={prefix:a,iconName:i}),e}),{names:{},unicodes:{}});Ze=r.names,He=r.unicodes,Be=nt(ue.styleDefault,{family:ue.familyDefault})};function Ke(e,t){return(Ue[e]||{})[t]}function Qe(e,t){return(Ye[e]||{})[t]}function et(e){return Ze[e]||{prefix:null,iconName:null}}function tt(){return Be}Je=function(e){Be=nt(e.styleDefault,{family:ue.familyDefault})},fe.push(Je),Xe();var rt=function(){return{prefix:null,iconName:null,rest:[]}};function nt(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).family,r=void 0===t?U:t,n=Y[r][e],a=G[r][e]||G[r][n],i=e in Se.styles?e:null;return a||i||null}var at=(s(Te={},U,Object.keys(W[U])),s(Te,V,Object.keys(W[V])),Te);function it(e){var t,r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).skipLookups,n=void 0!==r&&r,a=(s(t={},U,"".concat(ue.cssPrefix,"-").concat(U)),s(t,V,"".concat(ue.cssPrefix,"-").concat(V)),t),i=null,o=U;(e.includes(a[U])||e.some((function(e){return at[U].includes(e)})))&&(o=U),(e.includes(a[V])||e.some((function(e){return at[V].includes(e)})))&&(o=V);var c=e.reduce((function(e,t){var r=We(ue.cssPrefix,t);if(Pe[t]?(t=$e[o].includes(t)?J[o][t]:t,i=t,e.prefix=t):Ge[o].indexOf(t)>-1?(i=t,e.prefix=nt(t,{family:o})):r?e.iconName=r:t!==ue.replacementClass&&t!==a[U]&&t!==a[V]&&e.rest.push(t),!n&&e.prefix&&e.iconName){var s="fa"===i?et(e.iconName):{},c=Qe(e.prefix,e.iconName);s.prefix&&(i=null),e.iconName=s.iconName||c||e.iconName,e.prefix=s.prefix||e.prefix,"far"!==e.prefix||Pe.far||!Pe.fas||ue.autoFetchSvg||(e.prefix="fas")}return e}),rt());return(e.includes("fa-brands")||e.includes("fab"))&&(c.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(c.prefix="fad"),c.prefix||o!==V||!Pe.fass&&!ue.autoFetchSvg||(c.prefix="fass",c.iconName=Qe(c.prefix,c.iconName)||c.iconName),"fa"!==c.prefix&&"fa"!==i||(c.prefix=tt()||"fas"),c}var ot=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.definitions={}}var t,r,n;return t=e,r=[{key:"add",value:function(){for(var e=this,t=arguments.length,r=new Array(t),n=0;n0&&s.forEach((function(t){"string"===typeof t&&(e[a][t]=o)})),e[a][i]=o})),e}}],r&&o(t.prototype,r),n&&o(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),st=[],ct={},lt={},ut=Object.keys(lt);function ft(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),a=2;a1?t-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:{};return D?(pt("beforeI2svg",e),dt("pseudoElements2svg",e),dt("i2svg",e)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.autoReplaceSvgRoot;!1===ue.autoReplaceSvg&&(ue.autoReplaceSvg=!0),ue.observeMutations=!0,e=function(){yt({autoReplaceSvgRoot:r}),pt("watch",t)},D&&(je?setTimeout(e,0):De.push(e))}},bt={noAuto:function(){ue.autoReplaceSvg=!1,ue.observeMutations=!1,pt("noAuto")},config:ue,dom:gt,parse:{icon:function(e){if(null===e)return null;if("object"===i(e)&&e.prefix&&e.iconName)return{prefix:e.prefix,iconName:Qe(e.prefix,e.iconName)||e.iconName};if(Array.isArray(e)&&2===e.length){var t=0===e[1].indexOf("fa-")?e[1].slice(3):e[1],r=nt(e[0]);return{prefix:r,iconName:Qe(r,t)||t}}if("string"===typeof e&&(e.indexOf("".concat(ue.cssPrefix,"-"))>-1||e.match(X))){var n=it(e.split(" "),{skipLookups:!0});return{prefix:n.prefix||tt(),iconName:Qe(n.prefix,n.iconName)||n.iconName}}if("string"===typeof e){var a=tt();return{prefix:a,iconName:Qe(a,e)||e}}}},library:mt,findIconDefinition:ht,toHtml:Oe},yt=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).autoReplaceSvgRoot,t=void 0===e?C:e;(Object.keys(Se.styles).length>0||ue.autoFetchSvg)&&D&&ue.autoReplaceSvg&&bt.dom.i2svg({node:t})};function vt(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map((function(e){return Oe(e)}))}}),Object.defineProperty(e,"node",{get:function(){if(D){var t=C.createElement("div");return t.innerHTML=e.html,t.children}}}),e}function kt(e){var t=e.icons,r=t.main,n=t.mask,i=e.prefix,o=e.iconName,s=e.transform,c=e.symbol,l=e.title,u=e.maskId,f=e.titleId,p=e.extra,d=e.watchable,h=void 0!==d&&d,m=n.found?n:r,g=m.width,b=m.height,y="fak"===i,v=[ue.replacementClass,o?"".concat(ue.cssPrefix,"-").concat(o):""].filter((function(e){return-1===p.classes.indexOf(e)})).filter((function(e){return""!==e||!!e})).concat(p.classes).join(" "),k={children:[],attributes:a(a({},p.attributes),{},{"data-prefix":i,"data-icon":o,class:v,role:p.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(g," ").concat(b)})},_=y&&!~p.classes.indexOf("fa-fw")?{width:"".concat(g/b*16*.0625,"em")}:{};h&&(k.attributes[L]=""),l&&(k.children.push({tag:"title",attributes:{id:k.attributes["aria-labelledby"]||"title-".concat(f||me())},children:[l]}),delete k.attributes.title);var w=a(a({},k),{},{prefix:i,iconName:o,main:r,mask:n,maskId:u,transform:s,symbol:c,styles:a(a({},_),p.styles)}),x=n.found&&r.found?dt("generateAbstractMask",w)||{children:[],attributes:{}}:dt("generateAbstractIcon",w)||{children:[],attributes:{}},A=x.children,C=x.attributes;return w.children=A,w.attributes=C,c?function(e){var t=e.prefix,r=e.iconName,n=e.children,i=e.attributes,o=e.symbol,s=!0===o?"".concat(t,"-").concat(ue.cssPrefix,"-").concat(r):o;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:a(a({},i),{},{id:s}),children:n}]}]}(w):function(e){var t=e.children,r=e.main,n=e.mask,i=e.attributes,o=e.styles,s=e.transform;if(ke(s)&&r.found&&!n.found){var c={x:r.width/r.height/2,y:.5};i.style=ve(a(a({},o),{},{"transform-origin":"".concat(c.x+s.x/16,"em ").concat(c.y+s.y/16,"em")}))}return[{tag:"svg",attributes:i,children:t}]}(w)}function _t(e){var t=e.content,r=e.width,n=e.height,i=e.transform,o=e.title,s=e.extra,c=e.watchable,l=void 0!==c&&c,u=a(a(a({},s.attributes),o?{title:o}:{}),{},{class:s.classes.join(" ")});l&&(u[L]="");var f=a({},s.styles);ke(i)&&(f.transform=function(e){var t=e.transform,r=e.width,n=void 0===r?q:r,a=e.height,i=void 0===a?q:a,o=e.startCentered,s=void 0!==o&&o,c="";return c+=s&&j?"translate(".concat(t.x/pe-n/2,"em, ").concat(t.y/pe-i/2,"em) "):s?"translate(calc(-50% + ".concat(t.x/pe,"em), calc(-50% + ").concat(t.y/pe,"em)) "):"translate(".concat(t.x/pe,"em, ").concat(t.y/pe,"em) "),c+="scale(".concat(t.size/pe*(t.flipX?-1:1),", ").concat(t.size/pe*(t.flipY?-1:1),") "),c+"rotate(".concat(t.rotate,"deg) ")}({transform:i,startCentered:!0,width:r,height:n}),f["-webkit-transform"]=f.transform);var p=ve(f);p.length>0&&(u.style=p);var d=[];return d.push({tag:"span",attributes:u,children:[t]}),o&&d.push({tag:"span",attributes:{class:"sr-only"},children:[o]}),d}var wt=Se.styles;function xt(e){var t=e[0],r=e[1],n=c(e.slice(4),1)[0];return{found:!0,width:t,height:r,icon:Array.isArray(n)?{tag:"g",attributes:{class:"".concat(ue.cssPrefix,"-").concat(ae.GROUP)},children:[{tag:"path",attributes:{class:"".concat(ue.cssPrefix,"-").concat(ae.SECONDARY),fill:"currentColor",d:n[0]}},{tag:"path",attributes:{class:"".concat(ue.cssPrefix,"-").concat(ae.PRIMARY),fill:"currentColor",d:n[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:n}}}}var At={found:!1,width:512,height:512};function Ct(e,t){var r=t;return"fa"===t&&null!==ue.styleDefault&&(t=tt()),new Promise((function(n,i){dt("missingIconAbstract");if("fa"===r){var o=et(e)||{};e=o.iconName||e,t=o.prefix||t}if(e&&t&&wt[t]&&wt[t][e])return n(xt(wt[t][e]));!function(e,t){B||ue.showMissingIcons||!e||console.error('Icon with name "'.concat(e,'" and prefix "').concat(t,'" is missing.'))}(e,t),n(a(a({},At),{},{icon:ue.showMissingIcons&&e&&dt("missingIconAbstract")||{}}))}))}var Et=function(){},St=ue.measurePerformance&&S&&S.mark&&S.measure?S:{mark:Et,measure:Et},Dt='FA "6.5.2"',jt=function(e){St.mark("".concat(Dt," ").concat(e," ends")),St.measure("".concat(Dt," ").concat(e),"".concat(Dt," ").concat(e," begins"),"".concat(Dt," ").concat(e," ends"))},Ot={begin:function(e){return St.mark("".concat(Dt," ").concat(e," begins")),function(){return jt(e)}},end:jt},qt=function(){};function Ft(e){return"string"===typeof(e.getAttribute?e.getAttribute(L):null)}function zt(e){return C.createElementNS("http://www.w3.org/2000/svg",e)}function Lt(e){return C.createElement(e)}function It(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).ceFn,r=void 0===t?"svg"===e.tag?zt:Lt:t;if("string"===typeof e)return C.createTextNode(e);var n=r(e.tag);return Object.keys(e.attributes||[]).forEach((function(t){n.setAttribute(t,e.attributes[t])})),(e.children||[]).forEach((function(e){n.appendChild(It(e,{ceFn:r}))})),n}var Nt={replace:function(e){var t=e[0];if(t.parentNode)if(e[1].forEach((function(e){t.parentNode.insertBefore(It(e),t)})),null===t.getAttribute(L)&&ue.keepOriginalSource){var r=C.createComment(function(e){var t=" ".concat(e.outerHTML," ");return"".concat(t,"Font Awesome fontawesome.com ")}(t));t.parentNode.replaceChild(r,t)}else t.remove()},nest:function(e){var t=e[0],r=e[1];if(~be(t).indexOf(ue.replacementClass))return Nt.replace(e);var n=new RegExp("".concat(ue.cssPrefix,"-.*"));if(delete r[0].attributes.id,r[0].attributes.class){var a=r[0].attributes.class.split(" ").reduce((function(e,t){return t===ue.replacementClass||t.match(n)?e.toSvg.push(t):e.toNode.push(t),e}),{toNode:[],toSvg:[]});r[0].attributes.class=a.toSvg.join(" "),0===a.toNode.length?t.removeAttribute("class"):t.setAttribute("class",a.toNode.join(" "))}var i=r.map((function(e){return Oe(e)})).join("\n");t.setAttribute(L,""),t.innerHTML=i}};function Mt(e){e()}function Tt(e,t){var r="function"===typeof t?t:qt;if(0===e.length)r();else{var n=Mt;ue.mutateApproach===R&&(n=A.requestAnimationFrame||Mt),n((function(){var t=!0===ue.autoReplaceSvg?Nt.replace:Nt[ue.autoReplaceSvg]||Nt.replace,n=Ot.begin("mutate");e.map(t),n(),r()}))}}var Pt=!1;function Rt(){Pt=!0}function $t(){Pt=!1}var Bt=null;function Ut(e){if(E&&ue.observeMutations){var t=e.treeCallback,r=void 0===t?qt:t,n=e.nodeCallback,a=void 0===n?qt:n,i=e.pseudoElementsCallback,o=void 0===i?qt:i,s=e.observeMutationsRoot,c=void 0===s?C:s;Bt=new E((function(e){if(!Pt){var t=tt();ge(e).forEach((function(e){if("childList"===e.type&&e.addedNodes.length>0&&!Ft(e.addedNodes[0])&&(ue.searchPseudoElements&&o(e.target),r(e.target)),"attributes"===e.type&&e.target.parentNode&&ue.searchPseudoElements&&o(e.target.parentNode),"attributes"===e.type&&Ft(e.target)&&~ne.indexOf(e.attributeName))if("class"===e.attributeName&&function(e){var t=e.getAttribute?e.getAttribute(M):null,r=e.getAttribute?e.getAttribute(T):null;return t&&r}(e.target)){var n=it(be(e.target)),i=n.prefix,s=n.iconName;e.target.setAttribute(M,i||t),s&&e.target.setAttribute(T,s)}else(c=e.target)&&c.classList&&c.classList.contains&&c.classList.contains(ue.replacementClass)&&a(e.target);var c}))}})),D&&Bt.observe(c,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function Vt(e){var t,r,n=e.getAttribute("data-prefix"),a=e.getAttribute("data-icon"),i=void 0!==e.innerText?e.innerText.trim():"",o=it(be(e));return o.prefix||(o.prefix=tt()),n&&a&&(o.prefix=n,o.iconName=a),o.iconName&&o.prefix||(o.prefix&&i.length>0&&(o.iconName=(t=o.prefix,r=e.innerText,(Ve[t]||{})[r]||Ke(o.prefix,ze(e.innerText)))),!o.iconName&&ue.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(o.iconName=e.firstChild.data)),o}function Zt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{styleParser:!0},r=Vt(e),n=r.iconName,i=r.prefix,o=r.rest,s=function(e){var t=ge(e.attributes).reduce((function(e,t){return"class"!==e.name&&"style"!==e.name&&(e[t.name]=t.value),e}),{}),r=e.getAttribute("title"),n=e.getAttribute("data-fa-title-id");return ue.autoA11y&&(r?t["aria-labelledby"]="".concat(ue.replacementClass,"-title-").concat(n||me()):(t["aria-hidden"]="true",t.focusable="false")),t}(e),c=ft("parseNodeAttributes",{},e),l=t.styleParser?function(e){var t=e.getAttribute("style"),r=[];return t&&(r=t.split(";").reduce((function(e,t){var r=t.split(":"),n=r[0],a=r.slice(1);return n&&a.length>0&&(e[n]=a.join(":").trim()),e}),{})),r}(e):[];return a({iconName:n,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:i,transform:de,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:o,styles:l,attributes:s}},c)}var Ht=Se.styles;function Yt(e){var t="nest"===ue.autoReplaceSvg?Zt(e,{styleParser:!1}):Zt(e);return~t.extra.classes.indexOf(K)?dt("generateLayersText",e,t):dt("generateSvgReplacementMutation",e,t)}var Gt=new Set;function Wt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!D)return Promise.resolve();var r=C.documentElement.classList,n=function(e){return r.add("".concat(P,"-").concat(e))},a=function(e){return r.remove("".concat(P,"-").concat(e))},i=ue.autoFetchSvg?Gt:Z.map((function(e){return"fa-".concat(e)})).concat(Object.keys(Ht));i.includes("fa")||i.push("fa");var o=[".".concat(K,":not([").concat(L,"])")].concat(i.map((function(e){return".".concat(e,":not([").concat(L,"])")}))).join(", ");if(0===o.length)return Promise.resolve();var s=[];try{s=ge(e.querySelectorAll(o))}catch(Lr){}if(!(s.length>0))return Promise.resolve();n("pending"),a("complete");var c=Ot.begin("onTree"),l=s.reduce((function(e,t){try{var r=Yt(t);r&&e.push(r)}catch(Lr){B||"MissingIcon"===Lr.name&&console.error(Lr)}return e}),[]);return new Promise((function(e,r){Promise.all(l).then((function(r){Tt(r,(function(){n("active"),n("complete"),a("pending"),"function"===typeof t&&t(),c(),e()}))})).catch((function(e){c(),r(e)}))}))}function Jt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Yt(e).then((function(e){e&&Tt([e],t)}))}Z.map((function(e){Gt.add("fa-".concat(e))})),Object.keys(Y[U]).map(Gt.add.bind(Gt)),Object.keys(Y[V]).map(Gt.add.bind(Gt)),Gt=l(Gt);var Xt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.transform,n=void 0===r?de:r,i=t.symbol,o=void 0!==i&&i,s=t.mask,c=void 0===s?null:s,l=t.maskId,u=void 0===l?null:l,f=t.title,p=void 0===f?null:f,d=t.titleId,h=void 0===d?null:d,m=t.classes,g=void 0===m?[]:m,b=t.attributes,y=void 0===b?{}:b,v=t.styles,k=void 0===v?{}:v;if(e){var _=e.prefix,w=e.iconName,x=e.icon;return vt(a({type:"icon"},e),(function(){return pt("beforeDOMElementCreation",{iconDefinition:e,params:t}),ue.autoA11y&&(p?y["aria-labelledby"]="".concat(ue.replacementClass,"-title-").concat(h||me()):(y["aria-hidden"]="true",y.focusable="false")),kt({icons:{main:xt(x),mask:c?xt(c.icon):{found:!1,width:null,height:null,icon:{}}},prefix:_,iconName:w,transform:a(a({},de),n),symbol:o,title:p,maskId:u,titleId:h,extra:{attributes:y,styles:k,classes:g}})}))}},Kt={mixout:function(){return{icon:(e=Xt,function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(t||{}).icon?t:ht(t||{}),i=r.mask;return i&&(i=(i||{}).icon?i:ht(i||{})),e(n,a(a({},r),{},{mask:i}))})};var e},hooks:function(){return{mutationObserverCallbacks:function(e){return e.treeCallback=Wt,e.nodeCallback=Jt,e}}},provides:function(e){e.i2svg=function(e){var t=e.node,r=void 0===t?C:t,n=e.callback;return Wt(r,void 0===n?function(){}:n)},e.generateSvgReplacementMutation=function(e,t){var r=t.iconName,n=t.title,a=t.titleId,i=t.prefix,o=t.transform,s=t.symbol,l=t.mask,u=t.maskId,f=t.extra;return new Promise((function(t,p){Promise.all([Ct(r,i),l.iconName?Ct(l.iconName,l.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then((function(l){var p=c(l,2),d=p[0],h=p[1];t([e,kt({icons:{main:d,mask:h},prefix:i,iconName:r,transform:o,symbol:s,maskId:u,title:n,titleId:a,extra:f,watchable:!0})])})).catch(p)}))},e.generateAbstractIcon=function(e){var t,r=e.children,n=e.attributes,a=e.main,i=e.transform,o=ve(e.styles);return o.length>0&&(n.style=o),ke(i)&&(t=dt("generateAbstractTransformGrouping",{main:a,transform:i,containerWidth:a.width,iconWidth:a.width})),r.push(t||a.icon),{children:r,attributes:n}}}},Qt={mixout:function(){return{layer:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.classes,n=void 0===r?[]:r;return vt({type:"layer"},(function(){pt("beforeDOMElementCreation",{assembler:e,params:t});var r=[];return e((function(e){Array.isArray(e)?e.map((function(e){r=r.concat(e.abstract)})):r=r.concat(e.abstract)})),[{tag:"span",attributes:{class:["".concat(ue.cssPrefix,"-layers")].concat(l(n)).join(" ")},children:r}]}))}}}},er={mixout:function(){return{counter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.title,n=void 0===r?null:r,i=t.classes,o=void 0===i?[]:i,s=t.attributes,c=void 0===s?{}:s,u=t.styles,f=void 0===u?{}:u;return vt({type:"counter",content:e},(function(){return pt("beforeDOMElementCreation",{content:e,params:t}),function(e){var t=e.content,r=e.title,n=e.extra,i=a(a(a({},n.attributes),r?{title:r}:{}),{},{class:n.classes.join(" ")}),o=ve(n.styles);o.length>0&&(i.style=o);var s=[];return s.push({tag:"span",attributes:i,children:[t]}),r&&s.push({tag:"span",attributes:{class:"sr-only"},children:[r]}),s}({content:e.toString(),title:n,extra:{attributes:c,styles:f,classes:["".concat(ue.cssPrefix,"-layers-counter")].concat(l(o))}})}))}}}},tr={mixout:function(){return{text:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.transform,n=void 0===r?de:r,i=t.title,o=void 0===i?null:i,s=t.classes,c=void 0===s?[]:s,u=t.attributes,f=void 0===u?{}:u,p=t.styles,d=void 0===p?{}:p;return vt({type:"text",content:e},(function(){return pt("beforeDOMElementCreation",{content:e,params:t}),_t({content:e,transform:a(a({},de),n),title:o,extra:{attributes:f,styles:d,classes:["".concat(ue.cssPrefix,"-layers-text")].concat(l(c))}})}))}}},provides:function(e){e.generateLayersText=function(e,t){var r=t.title,n=t.transform,a=t.extra,i=null,o=null;if(j){var s=parseInt(getComputedStyle(e).fontSize,10),c=e.getBoundingClientRect();i=c.width/s,o=c.height/s}return ue.autoA11y&&!r&&(a.attributes["aria-hidden"]="true"),Promise.resolve([e,_t({content:e.innerHTML,width:i,height:o,transform:n,title:r,extra:a,watchable:!0})])}}},rr=new RegExp('"',"ug"),nr=[1105920,1112319];function ar(e,t){var r="".concat(N).concat(t.replace(":","-"));return new Promise((function(n,i){if(null!==e.getAttribute(r))return n();var o=ge(e.children).filter((function(e){return e.getAttribute(I)===t}))[0],s=A.getComputedStyle(e,t),c=s.getPropertyValue("font-family").match(Q),l=s.getPropertyValue("font-weight"),u=s.getPropertyValue("content");if(o&&!c)return e.removeChild(o),n();if(c&&"none"!==u&&""!==u){var f=s.getPropertyValue("content"),p=~["Sharp"].indexOf(c[2])?V:U,d=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(c[2])?G[p][c[2].toLowerCase()]:ee[p][l],h=function(e){var t=e.replace(rr,""),r=function(e,t){var r,n=e.length,a=e.charCodeAt(t);return a>=55296&&a<=56319&&n>t+1&&(r=e.charCodeAt(t+1))>=56320&&r<=57343?1024*(a-55296)+r-56320+65536:a}(t,0),n=r>=nr[0]&&r<=nr[1],a=2===t.length&&t[0]===t[1];return{value:ze(a?t[0]:t),isSecondary:n||a}}(f),m=h.value,g=h.isSecondary,b=c[0].startsWith("FontAwesome"),y=Ke(d,m),v=y;if(b){var k=function(e){var t=He[e],r=Ke("fas",e);return t||(r?{prefix:"fas",iconName:r}:null)||{prefix:null,iconName:null}}(m);k.iconName&&k.prefix&&(y=k.iconName,d=k.prefix)}if(!y||g||o&&o.getAttribute(M)===d&&o.getAttribute(T)===v)n();else{e.setAttribute(r,v),o&&e.removeChild(o);var _={iconName:null,title:null,titleId:null,prefix:null,transform:de,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}},w=_.extra;w.attributes[I]=t,Ct(y,d).then((function(i){var o=kt(a(a({},_),{},{icons:{main:i,mask:rt()},prefix:d,iconName:v,extra:w,watchable:!0})),s=C.createElementNS("http://www.w3.org/2000/svg","svg");"::before"===t?e.insertBefore(s,e.firstChild):e.appendChild(s),s.outerHTML=o.map((function(e){return Oe(e)})).join("\n"),e.removeAttribute(r),n()})).catch(i)}}else n()}))}function ir(e){return Promise.all([ar(e,"::before"),ar(e,"::after")])}function or(e){return e.parentNode!==document.head&&!~$.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(I)&&(!e.parentNode||"svg"!==e.parentNode.tagName)}function sr(e){if(D)return new Promise((function(t,r){var n=ge(e.querySelectorAll("*")).filter(or).map(ir),a=Ot.begin("searchPseudoElements");Rt(),Promise.all(n).then((function(){a(),$t(),t()})).catch((function(){a(),$t(),r()}))}))}var cr=!1,lr=function(e){return e.toLowerCase().split(" ").reduce((function(e,t){var r=t.toLowerCase().split("-"),n=r[0],a=r.slice(1).join("-");if(n&&"h"===a)return e.flipX=!0,e;if(n&&"v"===a)return e.flipY=!0,e;if(a=parseFloat(a),isNaN(a))return e;switch(n){case"grow":e.size=e.size+a;break;case"shrink":e.size=e.size-a;break;case"left":e.x=e.x-a;break;case"right":e.x=e.x+a;break;case"up":e.y=e.y-a;break;case"down":e.y=e.y+a;break;case"rotate":e.rotate=e.rotate+a}return e}),{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})},ur={mixout:function(){return{parse:{transform:function(e){return lr(e)}}}},hooks:function(){return{parseNodeAttributes:function(e,t){var r=t.getAttribute("data-fa-transform");return r&&(e.transform=lr(r)),e}}},provides:function(e){e.generateAbstractTransformGrouping=function(e){var t=e.main,r=e.transform,n=e.containerWidth,i=e.iconWidth,o={transform:"translate(".concat(n/2," 256)")},s="translate(".concat(32*r.x,", ").concat(32*r.y,") "),c="scale(".concat(r.size/16*(r.flipX?-1:1),", ").concat(r.size/16*(r.flipY?-1:1),") "),l="rotate(".concat(r.rotate," 0 0)"),u={outer:o,inner:{transform:"".concat(s," ").concat(c," ").concat(l)},path:{transform:"translate(".concat(i/2*-1," -256)")}};return{tag:"g",attributes:a({},u.outer),children:[{tag:"g",attributes:a({},u.inner),children:[{tag:t.icon.tag,children:t.icon.children,attributes:a(a({},t.icon.attributes),u.path)}]}]}}}},fr={x:0,y:0,width:"100%",height:"100%"};function pr(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill="black"),e}var dr={hooks:function(){return{parseNodeAttributes:function(e,t){var r=t.getAttribute("data-fa-mask"),n=r?it(r.split(" ").map((function(e){return e.trim()}))):rt();return n.prefix||(n.prefix=tt()),e.mask=n,e.maskId=t.getAttribute("data-fa-mask-id"),e}}},provides:function(e){e.generateAbstractMask=function(e){var t,r=e.children,n=e.attributes,i=e.main,o=e.mask,s=e.maskId,c=e.transform,l=i.width,u=i.icon,f=o.width,p=o.icon,d=function(e){var t=e.transform,r=e.containerWidth,n=e.iconWidth,a={transform:"translate(".concat(r/2," 256)")},i="translate(".concat(32*t.x,", ").concat(32*t.y,") "),o="scale(".concat(t.size/16*(t.flipX?-1:1),", ").concat(t.size/16*(t.flipY?-1:1),") "),s="rotate(".concat(t.rotate," 0 0)");return{outer:a,inner:{transform:"".concat(i," ").concat(o," ").concat(s)},path:{transform:"translate(".concat(n/2*-1," -256)")}}}({transform:c,containerWidth:f,iconWidth:l}),h={tag:"rect",attributes:a(a({},fr),{},{fill:"white"})},m=u.children?{children:u.children.map(pr)}:{},g={tag:"g",attributes:a({},d.inner),children:[pr(a({tag:u.tag,attributes:a(a({},u.attributes),d.path)},m))]},b={tag:"g",attributes:a({},d.outer),children:[g]},y="mask-".concat(s||me()),v="clip-".concat(s||me()),k={tag:"mask",attributes:a(a({},fr),{},{id:y,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[h,b]},_={tag:"defs",children:[{tag:"clipPath",attributes:{id:v},children:(t=p,"g"===t.tag?t.children:[t])},k]};return r.push(_,{tag:"rect",attributes:a({fill:"currentColor","clip-path":"url(#".concat(v,")"),mask:"url(#".concat(y,")")},fr)}),{children:r,attributes:n}}}},hr={provides:function(e){var t=!1;A.matchMedia&&(t=A.matchMedia("(prefers-reduced-motion: reduce)").matches),e.missingIconAbstract=function(){var e=[],r={fill:"currentColor"},n={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};e.push({tag:"path",attributes:a(a({},r),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var i=a(a({},n),{},{attributeName:"opacity"}),o={tag:"circle",attributes:a(a({},r),{},{cx:"256",cy:"364",r:"28"}),children:[]};return t||o.children.push({tag:"animate",attributes:a(a({},n),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:a(a({},i),{},{values:"1;0;1;1;0;1;"})}),e.push(o),e.push({tag:"path",attributes:a(a({},r),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:t?[]:[{tag:"animate",attributes:a(a({},i),{},{values:"1;0;0;0;0;1;"})}]}),t||e.push({tag:"path",attributes:a(a({},r),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:a(a({},i),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:e}}}};!function(e,t){var r=t.mixoutsTo;st=e,ct={},Object.keys(lt).forEach((function(e){-1===ut.indexOf(e)&&delete lt[e]})),st.forEach((function(e){var t=e.mixout?e.mixout():{};if(Object.keys(t).forEach((function(e){"function"===typeof t[e]&&(r[e]=t[e]),"object"===i(t[e])&&Object.keys(t[e]).forEach((function(n){r[e]||(r[e]={}),r[e][n]=t[e][n]}))})),e.hooks){var n=e.hooks();Object.keys(n).forEach((function(e){ct[e]||(ct[e]=[]),ct[e].push(n[e])}))}e.provides&&e.provides(lt)}))}([Ce,Kt,Qt,er,tr,{hooks:function(){return{mutationObserverCallbacks:function(e){return e.pseudoElementsCallback=sr,e}}},provides:function(e){e.pseudoElements2svg=function(e){var t=e.node,r=void 0===t?C:t;ue.searchPseudoElements&&sr(r)}}},{mixout:function(){return{dom:{unwatch:function(){Rt(),cr=!0}}}},hooks:function(){return{bootstrap:function(){Ut(ft("mutationObserverCallbacks",{}))},noAuto:function(){Bt&&Bt.disconnect()},watch:function(e){var t=e.observeMutationsRoot;cr?$t():Ut(ft("mutationObserverCallbacks",{observeMutationsRoot:t}))}}}},ur,dr,hr,{hooks:function(){return{parseNodeAttributes:function(e,t){var r=t.getAttribute("data-fa-symbol"),n=null!==r&&(""===r||r);return e.symbol=n,e}}}}],{mixoutsTo:bt});var mr=bt.parse,gr=bt.icon,br=r(5556),yr=r.n(br),vr=r(96540);function kr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _r(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function Cr(e){return function(e){if(Array.isArray(e))return Er(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return Er(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Er(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Er(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0||!Array.isArray(t)&&t?xr({},e,t):{}}var Fr=vr.forwardRef((function(e,t){var r=e.icon,n=e.mask,a=e.symbol,i=e.className,o=e.title,s=e.titleId,c=e.maskId,l=Or(r),u=qr("classes",[].concat(Cr(function(e){var t,r=e.beat,n=e.fade,a=e.beatFade,i=e.bounce,o=e.shake,s=e.flash,c=e.spin,l=e.spinPulse,u=e.spinReverse,f=e.pulse,p=e.fixedWidth,d=e.inverse,h=e.border,m=e.listItem,g=e.flip,b=e.size,y=e.rotation,v=e.pull,k=(xr(t={"fa-beat":r,"fa-fade":n,"fa-beat-fade":a,"fa-bounce":i,"fa-shake":o,"fa-flash":s,"fa-spin":c,"fa-spin-reverse":u,"fa-spin-pulse":l,"fa-pulse":f,"fa-fw":p,"fa-inverse":d,"fa-border":h,"fa-li":m,"fa-flip":!0===g,"fa-flip-horizontal":"horizontal"===g||"both"===g,"fa-flip-vertical":"vertical"===g||"both"===g},"fa-".concat(b),"undefined"!==typeof b&&null!==b),xr(t,"fa-rotate-".concat(y),"undefined"!==typeof y&&null!==y&&0!==y),xr(t,"fa-pull-".concat(v),"undefined"!==typeof v&&null!==v),xr(t,"fa-swap-opacity",e.swapOpacity),t);return Object.keys(k).map((function(e){return k[e]?e:null})).filter((function(e){return e}))}(e)),Cr(i.split(" ")))),f=qr("transform","string"===typeof e.transform?mr.transform(e.transform):e.transform),p=qr("mask",Or(n)),d=gr(l,_r(_r(_r(_r({},u),f),p),{},{symbol:a,title:o,titleId:s,maskId:c}));if(!d)return function(){var e;!jr&&console&&"function"===typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",l),null;var h=d.abstract,m={ref:t};return Object.keys(e).forEach((function(t){Fr.defaultProps.hasOwnProperty(t)||(m[t]=e[t])})),zr(h[0],m)}));Fr.displayName="FontAwesomeIcon",Fr.propTypes={beat:yr().bool,border:yr().bool,beatFade:yr().bool,bounce:yr().bool,className:yr().string,fade:yr().bool,flash:yr().bool,mask:yr().oneOfType([yr().object,yr().array,yr().string]),maskId:yr().string,fixedWidth:yr().bool,inverse:yr().bool,flip:yr().oneOf([!0,!1,"horizontal","vertical","both"]),icon:yr().oneOfType([yr().object,yr().array,yr().string]),listItem:yr().bool,pull:yr().oneOf(["right","left"]),pulse:yr().bool,rotation:yr().oneOf([0,90,180,270]),shake:yr().bool,size:yr().oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:yr().bool,spinPulse:yr().bool,spinReverse:yr().bool,symbol:yr().oneOfType([yr().bool,yr().string]),title:yr().string,titleId:yr().string,transform:yr().oneOfType([yr().string,yr().object]),swapOpacity:yr().bool},Fr.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var zr=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"===typeof r)return r;var a=(r.children||[]).map((function(r){return e(t,r)})),i=Object.keys(r.attributes||{}).reduce((function(e,t){var n=r.attributes[t];switch(t){case"class":e.attrs.className=n,delete r.attributes.class;break;case"style":e.attrs.style=n.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,t){var r,n=t.indexOf(":"),a=Sr(t.slice(0,n)),i=t.slice(n+1).trim();return a.startsWith("webkit")?e[(r=a,r.charAt(0).toUpperCase()+r.slice(1))]=i:e[a]=i,e}),{});break;default:0===t.indexOf("aria-")||0===t.indexOf("data-")?e.attrs[t.toLowerCase()]=n:e.attrs[Sr(t)]=n}return e}),{attrs:{}}),o=n.style,s=void 0===o?{}:o,c=Ar(n,Dr);return i.attrs.style=_r(_r({},i.attrs.style),s),t.apply(void 0,[r.tag,_r(_r({},i.attrs),c)].concat(Cr(a)))}.bind(null,vr.createElement)},13083:(e,t,r)=>{r.d(t,{Ay:()=>$r});var n=Object.create,a=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=e=>a(e,"__esModule",{value:!0}),u=(e,t)=>function(){return t||(0,e[Object.keys(e)[0]])((t={exports:{}}).exports,t),t.exports},f=(e,t)=>{for(var r in l(e),t)a(e,r,{get:t[r],enumerable:!0})},p=e=>((e,t,r)=>{if(t&&"object"===typeof t||"function"===typeof t)for(let n of o(t))c.call(e,n)||"default"===n||a(e,n,{get:()=>t[n],enumerable:!(r=i(t,n))||r.enumerable});return e})(l(a(null!=e?n(s(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),d=u({"src/grammar/tag.js"(e,t){"use strict";function r(e,t,n,a){this.message=e,this.expected=t,this.found=n,this.location=a,this.name="SyntaxError","function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,r)}!function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}(r,Error),r.buildMessage=function(e,t,r){var n,a={literal:function(e){return'"'+o(e.text)+'"'},class:function(e){var t=e.parts.map((function(e){return Array.isArray(e)?s(e[0])+"-"+s(e[1]):s(e)}));return"["+(e.inverted?"^":"")+t+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(e){return e.description},not:function(e){return"not "+c(e.expected)}};function i(e){return e.charCodeAt(0).toString(16).toUpperCase()}function o(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+i(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+i(e)}))}function s(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(function(e){return"\\x0"+i(e)})).replace(/[\x10-\x1F\x7F-\x9F]/g,(function(e){return"\\x"+i(e)}))}function c(e){return a[e.type](e)}return"Expected "+function(e){var t,r,n=e.map(c);if(n.sort(),n.length>0){for(t=1,r=1;t0;function Ie(e,r){var n={};Le&&(n.filename=t.filename);var a=ze(e);n.start={offset:e,line:a.line,column:a.column};var i=ze(r);return n.end={offset:r,line:i.line,column:i.column},n}function Ne(e){var t=je[je.length-1];Eet.pos&&(t.pos=Ee,t.variants=[]),t.variants.push(e))}function Me(e,t,n){return new r(r.buildMessage(e,t,n),e,t,n)}function Te(){var t;return(t=function(){var e,t;e=Ee,(t=Ye())===a&&(t=Ue());t!==a&&(Se=e,t=J(t));return e=t,e}())===a&&(t=function(){var e,t,r,n;if(e=Ee,(t=Re())!==a){for(r=[],n=nt();n!==a;)r.push(n),n=nt();Se=e,e=X(t)}else Ee=e,e=a;return e}())===a&&(t=function(){var t,r,n,i,o,c,l,u=function(e){0===Oe&&Ne(e)};if(t=Ee,(r=Pe())!==a){for(n=[],i=nt();i!==a;)n.push(i),i=nt();for(i=Ee,(o=We())!==a?((c=nt())===a&&(c=null),Se=i,i=K(r,o)):(Ee=i,i=a),i===a&&(i=null),(o=Re())===a&&(o=null),c=[],l=nt();l!==a;)c.push(l),l=nt();u(O),47===e.charCodeAt(Ee)?(l=s,Ee++):l=a,l===a&&(l=null),Se=t,t=Q(r,i,o,l)}else Ee=t,t=a;return t}(),t===a&&(t=function(){var t,r,n,i=function(e){0===Oe&&Ne(e)};t=Ee,i(O),47===e.charCodeAt(Ee)?(r=s,Ee++):r=a;r!==a&&(n=Pe())!==a?(Se=t,t=ee(n)):(Ee=t,t=a);return t}())),t}function Pe(){var e,t;return t=q,0===Oe&&Ne(t),Oe++,e=rt(),Oe--,e}function Re(){var e,t,r,n;if(e=Ee,(t=Be())!==a){for(r=[],n=$e();n!==a;)r.push(n),n=$e();Se=e,e=te(t,r)}else Ee=e,e=a;return e}function $e(){var e,t,r;if(e=Ee,t=[],(r=nt())!==a)for(;r!==a;)t.push(r),r=nt();else t=a;return t!==a&&(r=Be())!==a?(Se=e,e=re(r)):(Ee=e,e=a),e}function Be(){var t,r;return t=Ee,r=function(){var t,r,n,i=function(e){0===Oe&&Ne(e)};i(z),Oe++,t=Ee,35===e.charCodeAt(Ee)?(r=l,Ee++):r=a;r!==a&&(n=rt())!==a?(Se=t,t=se(n)):(Ee=t,t=a);return Oe--,t}(),r!==a&&(Se=t,r=ne(r)),(t=r)===a&&(t=Ee,r=function(){var t,r,n,i=function(e){0===Oe&&Ne(e)};i(F),Oe++,t=Ee,46===e.charCodeAt(Ee)?(r=c,Ee++):r=a;r!==a&&(n=rt())!==a?(Se=t,t=oe(n)):(Ee=t,t=a);return Oe--,t}(),r!==a&&(Se=t,r=ae(r)),(t=r)===a&&(t=Ee,r=function(){var t,r,n,i,o=function(e){0===Oe&&Ne(e)};t=Ee,r=rt(),r!==a?(o(L),61===e.charCodeAt(Ee)?(n=u,Ee++):n=a,n!==a&&(i=We())!==a?(Se=t,t=ce(r,i)):(Ee=t,t=a)):(Ee=t,t=a);return t}(),r!==a&&(Se=t,r=ie(r)),t=r)),t}function Ue(){var t,r,n,i,o,s,c,l,u=function(e){0===Oe&&Ne(e)};if(t=Ee,(r=rt())!==a)if(u(I),40===e.charCodeAt(Ee)?(n=f,Ee++):n=a,n!==a){for(i=[],o=nt();o!==a;)i.push(o),o=nt();for(o=Ee,(s=Ve())===a&&(s=null),c=[],l=Ze();l!==a;)c.push(l),l=Ze();Se=o,o=le(r,s,c),u(N),41===e.charCodeAt(Ee)?(s=p,Ee++):s=a,s!==a?(Se=t,t=ue(r,o)):(Ee=t,t=a)}else Ee=t,t=a;else Ee=t,t=a;return t}function Ve(){var t,r,n,i,o;return t=Ee,r=Ee,(n=rt())!==a?(o=L,0===Oe&&Ne(o),61===e.charCodeAt(Ee)?(i=u,Ee++):i=a,i!==a?(Se=r,r=fe(n)):(Ee=r,r=a)):(Ee=r,r=a),r===a&&(r=null),(n=We())!==a?(Se=t,t=pe(r,n)):(Ee=t,t=a),t}function Ze(){var t,r,n,i,o,s;for(t=Ee,r=[],n=nt();n!==a;)r.push(n),n=nt();if(s=M,0===Oe&&Ne(s),44===e.charCodeAt(Ee)?(n=d,Ee++):n=a,n!==a){for(i=[],o=nt();o!==a;)i.push(o),o=nt();(o=Ve())!==a?(Se=t,t=de(o)):(Ee=t,t=a)}else Ee=t,t=a;return t}function He(){var t,r,n,i;for(t=Ee,r=[],n=nt();n!==a;)r.push(n),n=nt();return i=M,0===Oe&&Ne(i),44===e.charCodeAt(Ee)?(n=d,Ee++):n=a,n!==a?t=r=[r,n]:(Ee=t,t=a),t===a&&(t=null),t}function Ye(){var t,r,n,i,o,s;if(s=T,0===Oe&&Ne(s),Oe++,t=Ee,C.test(e.charAt(Ee))?(r=e.charAt(Ee),Ee++):r=a,r!==a)if((n=rt())!==a){for(i=[],o=Ge();o!==a;)i.push(o),o=Ge();Se=t,t=he(r,n,i)}else Ee=t,t=a;else Ee=t,t=a;return Oe--,t}function Ge(){var t,r,n,i;return t=Ee,46===e.charCodeAt(Ee)?(r=c,Ee++):r=a,r!==a&&(n=rt())!==a?(Se=t,t=fe(n)):(Ee=t,t=a),t===a&&(t=Ee,91===e.charCodeAt(Ee)?(r=h,Ee++):r=a,r!==a?((n=Qe())===a&&(n=et()),n!==a?(93===e.charCodeAt(Ee)?(i=m,Ee++):i=a,i!==a?(Se=t,t=de(n)):(Ee=t,t=a)):(Ee=t,t=a)):(Ee=t,t=a)),t}function We(){var t;return t=function(){var t,r,n=function(e){0===Oe&&Ne(e)};n(P),Oe++,t=Ee,e.substr(Ee,4)===g?(r=g,Ee+=4):r=a;r!==a&&(Se=t,r=me());return t=r,Oe--,t}(),t===a&&(t=function(){var t,r,n=function(e){0===Oe&&Ne(e)};n(R),Oe++,t=Ee,e.substr(Ee,4)===b?(r=b,Ee+=4):r=a;r!==a&&(Se=t,r=ge());t=r,t===a&&(t=Ee,e.substr(Ee,5)===y?(r=y,Ee+=5):r=a,r!==a&&(Se=t,r=be()),t=r);return Oe--,t}(),t===a&&(t=et())===a&&(t=Qe())===a&&(t=function(){var t,r,n,i,o,s,c,l=function(e){0===Oe&&Ne(e)};t=Ee,l($),91===e.charCodeAt(Ee)?(r=h,Ee++):r=a;if(r!==a){for(n=[],i=nt();i!==a;)n.push(i),i=nt();if(i=Ee,(o=We())!==a){for(s=[],c=Je();c!==a;)s.push(c),c=Je();c=He(),Se=i,i=ye(o,s)}else Ee=i,i=a;for(i===a&&(i=null),o=[],s=nt();s!==a;)o.push(s),s=nt();l(B),93===e.charCodeAt(Ee)?(s=m,Ee++):s=a,s!==a?(Se=t,t=ve(i)):(Ee=t,t=a)}else Ee=t,t=a;return t}(),t===a&&(t=function(){var t,r,n,i,o,s,c,l=function(e){0===Oe&&Ne(e)};t=Ee,l(U),123===e.charCodeAt(Ee)?(r=v,Ee++):r=a;if(r!==a){for(n=[],i=nt();i!==a;)n.push(i),i=nt();if(i=Ee,(o=Ke())!==a){for(s=[],c=Xe();c!==a;)s.push(c),c=Xe();c=He(),Se=i,i=ke(o,s)}else Ee=i,i=a;for(i===a&&(i=null),o=[],s=nt();s!==a;)o.push(s),s=nt();l(V),125===e.charCodeAt(Ee)?(s=k,Ee++):s=a,s!==a?(Se=t,t=_e(i)):(Ee=t,t=a)}else Ee=t,t=a;return t}(),t===a&&(t=Ue())===a&&(t=Ye())))),t}function Je(){var t,r,n,i,o,s;for(t=Ee,r=[],n=nt();n!==a;)r.push(n),n=nt();if(s=M,0===Oe&&Ne(s),44===e.charCodeAt(Ee)?(n=d,Ee++):n=a,n!==a){for(i=[],o=nt();o!==a;)i.push(o),o=nt();(o=We())!==a?(Se=t,t=de(o)):(Ee=t,t=a)}else Ee=t,t=a;return t}function Xe(){var t,r,n,i,o,s;for(t=Ee,r=[],n=nt();n!==a;)r.push(n),n=nt();if(s=M,0===Oe&&Ne(s),44===e.charCodeAt(Ee)?(n=d,Ee++):n=a,n!==a){for(i=[],o=nt();o!==a;)i.push(o),o=nt();(o=Ke())!==a?(Se=t,t=re(o)):(Ee=t,t=a)}else Ee=t,t=a;return t}function Ke(){var t,r,n,i,o,s;if(t=Ee,(r=rt())===a&&(r=et()),r!==a)if(s=Z,0===Oe&&Ne(s),58===e.charCodeAt(Ee)?(n=_,Ee++):n=a,n!==a){for(i=[],o=nt();o!==a;)i.push(o),o=nt();(o=We())!==a?(Se=t,t=we(r,o)):(Ee=t,t=a)}else Ee=t,t=a;else Ee=t,t=a;return t}function Qe(){var t,r,n,i,o,s,l,u;if(u=H,0===Oe&&Ne(u),Oe++,t=Ee,45===e.charCodeAt(Ee)?(r=w,Ee++):r=a,r===a&&(r=null),n=[],E.test(e.charAt(Ee))?(i=e.charAt(Ee),Ee++):i=a,i!==a)for(;i!==a;)n.push(i),E.test(e.charAt(Ee))?(i=e.charAt(Ee),Ee++):i=a;else n=a;if(n!==a){if(i=Ee,46===e.charCodeAt(Ee)?(o=c,Ee++):o=a,o!==a){if(s=[],E.test(e.charAt(Ee))?(l=e.charAt(Ee),Ee++):l=a,l!==a)for(;l!==a;)s.push(l),E.test(e.charAt(Ee))?(l=e.charAt(Ee),Ee++):l=a;else s=a;s!==a?i=o=[o,s]:(Ee=i,i=a)}else Ee=i,i=a;i===a&&(i=null),Se=t,t=xe()}else Ee=t,t=a;return Oe--,t}function et(){var t,r,n,i,o;if(o=Y,0===Oe&&Ne(o),Oe++,t=Ee,34===e.charCodeAt(Ee)?(r=x,Ee++):r=a,r!==a){for(n=[],i=tt();i!==a;)n.push(i),i=tt();34===e.charCodeAt(Ee)?(i=x,Ee++):i=a,i!==a?(Se=t,t=Ae(n)):(Ee=t,t=a)}else Ee=t,t=a;return Oe--,t}function tt(){var t;return S.test(e.charAt(Ee))?(t=e.charAt(Ee),Ee++):t=a,t===a&&(t=function(){var t,r,n;t=Ee,92===e.charCodeAt(Ee)?(r=A,Ee++):r=a;r!==a?(34===e.charCodeAt(Ee)?(n=x,Ee++):n=a,n===a&&(92===e.charCodeAt(Ee)?(n=A,Ee++):n=a),n!==a?(Se=t,t=Ce(n)):(Ee=t,t=a)):(Ee=t,t=a);return t}()),t}function rt(){var t,r,n,i;if(i=G,0===Oe&&Ne(i),Oe++,t=Ee,r=[],D.test(e.charAt(Ee))?(n=e.charAt(Ee),Ee++):n=a,n!==a)for(;n!==a;)r.push(n),D.test(e.charAt(Ee))?(n=e.charAt(Ee),Ee++):n=a;else r=a;return t=r!==a?e.substring(t,Ee):r,Oe--,t}function nt(){var t,r;return r=W,0===Oe&&Ne(r),Oe++,j.test(e.charAt(Ee))?(t=e.charAt(Ee),Ee++):t=a,Oe--,t}const{Variable:at,Function:it}=t;if(je.push({pos:Ee,variants:[]}),(n=o())!==a&&Ee===e.length)return n;throw n!==a&&Ee",GT:">",Gt:"\u226b",gtdot:"\u22d7",gtlPar:"\u2995",gtquest:"\u2a7c",gtrapprox:"\u2a86",gtrarr:"\u2978",gtrdot:"\u22d7",gtreqless:"\u22db",gtreqqless:"\u2a8c",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\ufe00",gvnE:"\u2269\ufe00",Hacek:"\u02c7",hairsp:"\u200a",half:"\xbd",hamilt:"\u210b",HARDcy:"\u042a",hardcy:"\u044a",harrcir:"\u2948",harr:"\u2194",hArr:"\u21d4",harrw:"\u21ad",Hat:"^",hbar:"\u210f",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22b9",hfr:"\ud835\udd25",Hfr:"\u210c",HilbertSpace:"\u210b",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21ff",homtht:"\u223b",hookleftarrow:"\u21a9",hookrightarrow:"\u21aa",hopf:"\ud835\udd59",Hopf:"\u210d",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\ud835\udcbd",Hscr:"\u210b",hslash:"\u210f",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224e",HumpEqual:"\u224f",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xcd",iacute:"\xed",ic:"\u2063",Icirc:"\xce",icirc:"\xee",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xa1",iff:"\u21d4",ifr:"\ud835\udd26",Ifr:"\u2111",Igrave:"\xcc",igrave:"\xec",ii:"\u2148",iiiint:"\u2a0c",iiint:"\u222d",iinfin:"\u29dc",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012a",imacr:"\u012b",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22b7",imped:"\u01b5",Implies:"\u21d2",incare:"\u2105",in:"\u2208",infin:"\u221e",infintie:"\u29dd",inodot:"\u0131",intcal:"\u22ba",int:"\u222b",Int:"\u222c",integers:"\u2124",Integral:"\u222b",intercal:"\u22ba",Intersection:"\u22c2",intlarhk:"\u2a17",intprod:"\u2a3c",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012e",iogon:"\u012f",Iopf:"\ud835\udd40",iopf:"\ud835\udd5a",Iota:"\u0399",iota:"\u03b9",iprod:"\u2a3c",iquest:"\xbf",iscr:"\ud835\udcbe",Iscr:"\u2110",isin:"\u2208",isindot:"\u22f5",isinE:"\u22f9",isins:"\u22f4",isinsv:"\u22f3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xcf",iuml:"\xef",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\ud835\udd0d",jfr:"\ud835\udd27",jmath:"\u0237",Jopf:"\ud835\udd41",jopf:"\ud835\udd5b",Jscr:"\ud835\udca5",jscr:"\ud835\udcbf",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039a",kappa:"\u03ba",kappav:"\u03f0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041a",kcy:"\u043a",Kfr:"\ud835\udd0e",kfr:"\ud835\udd28",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040c",kjcy:"\u045c",Kopf:"\ud835\udd42",kopf:"\ud835\udd5c",Kscr:"\ud835\udca6",kscr:"\ud835\udcc0",lAarr:"\u21da",Lacute:"\u0139",lacute:"\u013a",laemptyv:"\u29b4",lagran:"\u2112",Lambda:"\u039b",lambda:"\u03bb",lang:"\u27e8",Lang:"\u27ea",langd:"\u2991",langle:"\u27e8",lap:"\u2a85",Laplacetrf:"\u2112",laquo:"\xab",larrb:"\u21e4",larrbfs:"\u291f",larr:"\u2190",Larr:"\u219e",lArr:"\u21d0",larrfs:"\u291d",larrhk:"\u21a9",larrlp:"\u21ab",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21a2",latail:"\u2919",lAtail:"\u291b",lat:"\u2aab",late:"\u2aad",lates:"\u2aad\ufe00",lbarr:"\u290c",lBarr:"\u290e",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298b",lbrksld:"\u298f",lbrkslu:"\u298d",Lcaron:"\u013d",lcaron:"\u013e",Lcedil:"\u013b",lcedil:"\u013c",lceil:"\u2308",lcub:"{",Lcy:"\u041b",lcy:"\u043b",ldca:"\u2936",ldquo:"\u201c",ldquor:"\u201e",ldrdhar:"\u2967",ldrushar:"\u294b",ldsh:"\u21b2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27e8",LeftArrowBar:"\u21e4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21d0",LeftArrowRightArrow:"\u21c6",leftarrowtail:"\u21a2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27e6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21c3",LeftFloor:"\u230a",leftharpoondown:"\u21bd",leftharpoonup:"\u21bc",leftleftarrows:"\u21c7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21d4",leftrightarrows:"\u21c6",leftrightharpoons:"\u21cb",leftrightsquigarrow:"\u21ad",LeftRightVector:"\u294e",LeftTeeArrow:"\u21a4",LeftTee:"\u22a3",LeftTeeVector:"\u295a",leftthreetimes:"\u22cb",LeftTriangleBar:"\u29cf",LeftTriangle:"\u22b2",LeftTriangleEqual:"\u22b4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21bf",LeftVectorBar:"\u2952",LeftVector:"\u21bc",lEg:"\u2a8b",leg:"\u22da",leq:"\u2264",leqq:"\u2266",leqslant:"\u2a7d",lescc:"\u2aa8",les:"\u2a7d",lesdot:"\u2a7f",lesdoto:"\u2a81",lesdotor:"\u2a83",lesg:"\u22da\ufe00",lesges:"\u2a93",lessapprox:"\u2a85",lessdot:"\u22d6",lesseqgtr:"\u22da",lesseqqgtr:"\u2a8b",LessEqualGreater:"\u22da",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2aa1",lesssim:"\u2272",LessSlantEqual:"\u2a7d",LessTilde:"\u2272",lfisht:"\u297c",lfloor:"\u230a",Lfr:"\ud835\udd0f",lfr:"\ud835\udd29",lg:"\u2276",lgE:"\u2a91",lHar:"\u2962",lhard:"\u21bd",lharu:"\u21bc",lharul:"\u296a",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21c7",ll:"\u226a",Ll:"\u22d8",llcorner:"\u231e",Lleftarrow:"\u21da",llhard:"\u296b",lltri:"\u25fa",Lmidot:"\u013f",lmidot:"\u0140",lmoustache:"\u23b0",lmoust:"\u23b0",lnap:"\u2a89",lnapprox:"\u2a89",lne:"\u2a87",lnE:"\u2268",lneq:"\u2a87",lneqq:"\u2268",lnsim:"\u22e6",loang:"\u27ec",loarr:"\u21fd",lobrk:"\u27e6",longleftarrow:"\u27f5",LongLeftArrow:"\u27f5",Longleftarrow:"\u27f8",longleftrightarrow:"\u27f7",LongLeftRightArrow:"\u27f7",Longleftrightarrow:"\u27fa",longmapsto:"\u27fc",longrightarrow:"\u27f6",LongRightArrow:"\u27f6",Longrightarrow:"\u27f9",looparrowleft:"\u21ab",looparrowright:"\u21ac",lopar:"\u2985",Lopf:"\ud835\udd43",lopf:"\ud835\udd5d",loplus:"\u2a2d",lotimes:"\u2a34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25ca",lozenge:"\u25ca",lozf:"\u29eb",lpar:"(",lparlt:"\u2993",lrarr:"\u21c6",lrcorner:"\u231f",lrhar:"\u21cb",lrhard:"\u296d",lrm:"\u200e",lrtri:"\u22bf",lsaquo:"\u2039",lscr:"\ud835\udcc1",Lscr:"\u2112",lsh:"\u21b0",Lsh:"\u21b0",lsim:"\u2272",lsime:"\u2a8d",lsimg:"\u2a8f",lsqb:"[",lsquo:"\u2018",lsquor:"\u201a",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2aa6",ltcir:"\u2a79",lt:"<",LT:"<",Lt:"\u226a",ltdot:"\u22d6",lthree:"\u22cb",ltimes:"\u22c9",ltlarr:"\u2976",ltquest:"\u2a7b",ltri:"\u25c3",ltrie:"\u22b4",ltrif:"\u25c2",ltrPar:"\u2996",lurdshar:"\u294a",luruhar:"\u2966",lvertneqq:"\u2268\ufe00",lvnE:"\u2268\ufe00",macr:"\xaf",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21a6",mapsto:"\u21a6",mapstodown:"\u21a7",mapstoleft:"\u21a4",mapstoup:"\u21a5",marker:"\u25ae",mcomma:"\u2a29",Mcy:"\u041c",mcy:"\u043c",mdash:"\u2014",mDDot:"\u223a",measuredangle:"\u2221",MediumSpace:"\u205f",Mellintrf:"\u2133",Mfr:"\ud835\udd10",mfr:"\ud835\udd2a",mho:"\u2127",micro:"\xb5",midast:"*",midcir:"\u2af0",mid:"\u2223",middot:"\xb7",minusb:"\u229f",minus:"\u2212",minusd:"\u2238",minusdu:"\u2a2a",MinusPlus:"\u2213",mlcp:"\u2adb",mldr:"\u2026",mnplus:"\u2213",models:"\u22a7",Mopf:"\ud835\udd44",mopf:"\ud835\udd5e",mp:"\u2213",mscr:"\ud835\udcc2",Mscr:"\u2133",mstpos:"\u223e",Mu:"\u039c",mu:"\u03bc",multimap:"\u22b8",mumap:"\u22b8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20d2",nap:"\u2249",napE:"\u2a70\u0338",napid:"\u224b\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266e",naturals:"\u2115",natur:"\u266e",nbsp:"\xa0",nbump:"\u224e\u0338",nbumpe:"\u224f\u0338",ncap:"\u2a43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2a6d\u0338",ncup:"\u2a42",Ncy:"\u041d",ncy:"\u043d",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21d7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200b",NegativeThickSpace:"\u200b",NegativeThinSpace:"\u200b",NegativeVeryThinSpace:"\u200b",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226b",NestedLessLess:"\u226a",NewLine:"\n",nexist:"\u2204",nexists:"\u2204",Nfr:"\ud835\udd11",nfr:"\ud835\udd2b",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2a7e\u0338",nges:"\u2a7e\u0338",nGg:"\u22d9\u0338",ngsim:"\u2275",nGt:"\u226b\u20d2",ngt:"\u226f",ngtr:"\u226f",nGtv:"\u226b\u0338",nharr:"\u21ae",nhArr:"\u21ce",nhpar:"\u2af2",ni:"\u220b",nis:"\u22fc",nisd:"\u22fa",niv:"\u220b",NJcy:"\u040a",njcy:"\u045a",nlarr:"\u219a",nlArr:"\u21cd",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219a",nLeftarrow:"\u21cd",nleftrightarrow:"\u21ae",nLeftrightarrow:"\u21ce",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2a7d\u0338",nles:"\u2a7d\u0338",nless:"\u226e",nLl:"\u22d8\u0338",nlsim:"\u2274",nLt:"\u226a\u20d2",nlt:"\u226e",nltri:"\u22ea",nltrie:"\u22ec",nLtv:"\u226a\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xa0",nopf:"\ud835\udd5f",Nopf:"\u2115",Not:"\u2aec",not:"\xac",NotCongruent:"\u2262",NotCupCap:"\u226d",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226f",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226b\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2a7e\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224e\u0338",NotHumpEqual:"\u224f\u0338",notin:"\u2209",notindot:"\u22f5\u0338",notinE:"\u22f9\u0338",notinva:"\u2209",notinvb:"\u22f7",notinvc:"\u22f6",NotLeftTriangleBar:"\u29cf\u0338",NotLeftTriangle:"\u22ea",NotLeftTriangleEqual:"\u22ec",NotLess:"\u226e",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226a\u0338",NotLessSlantEqual:"\u2a7d\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2aa2\u0338",NotNestedLessLess:"\u2aa1\u0338",notni:"\u220c",notniva:"\u220c",notnivb:"\u22fe",notnivc:"\u22fd",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2aaf\u0338",NotPrecedesSlantEqual:"\u22e0",NotReverseElement:"\u220c",NotRightTriangleBar:"\u29d0\u0338",NotRightTriangle:"\u22eb",NotRightTriangleEqual:"\u22ed",NotSquareSubset:"\u228f\u0338",NotSquareSubsetEqual:"\u22e2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22e3",NotSubset:"\u2282\u20d2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2ab0\u0338",NotSucceedsSlantEqual:"\u22e1",NotSucceedsTilde:"\u227f\u0338",NotSuperset:"\u2283\u20d2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2afd\u20e5",npart:"\u2202\u0338",npolint:"\u2a14",npr:"\u2280",nprcue:"\u22e0",nprec:"\u2280",npreceq:"\u2aaf\u0338",npre:"\u2aaf\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219b",nrArr:"\u21cf",nrarrw:"\u219d\u0338",nrightarrow:"\u219b",nRightarrow:"\u21cf",nrtri:"\u22eb",nrtrie:"\u22ed",nsc:"\u2281",nsccue:"\u22e1",nsce:"\u2ab0\u0338",Nscr:"\ud835\udca9",nscr:"\ud835\udcc3",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22e2",nsqsupe:"\u22e3",nsub:"\u2284",nsubE:"\u2ac5\u0338",nsube:"\u2288",nsubset:"\u2282\u20d2",nsubseteq:"\u2288",nsubseteqq:"\u2ac5\u0338",nsucc:"\u2281",nsucceq:"\u2ab0\u0338",nsup:"\u2285",nsupE:"\u2ac6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20d2",nsupseteq:"\u2289",nsupseteqq:"\u2ac6\u0338",ntgl:"\u2279",Ntilde:"\xd1",ntilde:"\xf1",ntlg:"\u2278",ntriangleleft:"\u22ea",ntrianglelefteq:"\u22ec",ntriangleright:"\u22eb",ntrianglerighteq:"\u22ed",Nu:"\u039d",nu:"\u03bd",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224d\u20d2",nvdash:"\u22ac",nvDash:"\u22ad",nVdash:"\u22ae",nVDash:"\u22af",nvge:"\u2265\u20d2",nvgt:">\u20d2",nvHarr:"\u2904",nvinfin:"\u29de",nvlArr:"\u2902",nvle:"\u2264\u20d2",nvlt:"<\u20d2",nvltrie:"\u22b4\u20d2",nvrArr:"\u2903",nvrtrie:"\u22b5\u20d2",nvsim:"\u223c\u20d2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21d6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xd3",oacute:"\xf3",oast:"\u229b",Ocirc:"\xd4",ocirc:"\xf4",ocir:"\u229a",Ocy:"\u041e",ocy:"\u043e",odash:"\u229d",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2a38",odot:"\u2299",odsold:"\u29bc",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29bf",Ofr:"\ud835\udd12",ofr:"\ud835\udd2c",ogon:"\u02db",Ograve:"\xd2",ograve:"\xf2",ogt:"\u29c1",ohbar:"\u29b5",ohm:"\u03a9",oint:"\u222e",olarr:"\u21ba",olcir:"\u29be",olcross:"\u29bb",oline:"\u203e",olt:"\u29c0",Omacr:"\u014c",omacr:"\u014d",Omega:"\u03a9",omega:"\u03c9",Omicron:"\u039f",omicron:"\u03bf",omid:"\u29b6",ominus:"\u2296",Oopf:"\ud835\udd46",oopf:"\ud835\udd60",opar:"\u29b7",OpenCurlyDoubleQuote:"\u201c",OpenCurlyQuote:"\u2018",operp:"\u29b9",oplus:"\u2295",orarr:"\u21bb",Or:"\u2a54",or:"\u2228",ord:"\u2a5d",order:"\u2134",orderof:"\u2134",ordf:"\xaa",ordm:"\xba",origof:"\u22b6",oror:"\u2a56",orslope:"\u2a57",orv:"\u2a5b",oS:"\u24c8",Oscr:"\ud835\udcaa",oscr:"\u2134",Oslash:"\xd8",oslash:"\xf8",osol:"\u2298",Otilde:"\xd5",otilde:"\xf5",otimesas:"\u2a36",Otimes:"\u2a37",otimes:"\u2297",Ouml:"\xd6",ouml:"\xf6",ovbar:"\u233d",OverBar:"\u203e",OverBrace:"\u23de",OverBracket:"\u23b4",OverParenthesis:"\u23dc",para:"\xb6",parallel:"\u2225",par:"\u2225",parsim:"\u2af3",parsl:"\u2afd",part:"\u2202",PartialD:"\u2202",Pcy:"\u041f",pcy:"\u043f",percnt:"%",period:".",permil:"\u2030",perp:"\u22a5",pertenk:"\u2031",Pfr:"\ud835\udd13",pfr:"\ud835\udd2d",Phi:"\u03a6",phi:"\u03c6",phiv:"\u03d5",phmmat:"\u2133",phone:"\u260e",Pi:"\u03a0",pi:"\u03c0",pitchfork:"\u22d4",piv:"\u03d6",planck:"\u210f",planckh:"\u210e",plankv:"\u210f",plusacir:"\u2a23",plusb:"\u229e",pluscir:"\u2a22",plus:"+",plusdo:"\u2214",plusdu:"\u2a25",pluse:"\u2a72",PlusMinus:"\xb1",plusmn:"\xb1",plussim:"\u2a26",plustwo:"\u2a27",pm:"\xb1",Poincareplane:"\u210c",pointint:"\u2a15",popf:"\ud835\udd61",Popf:"\u2119",pound:"\xa3",prap:"\u2ab7",Pr:"\u2abb",pr:"\u227a",prcue:"\u227c",precapprox:"\u2ab7",prec:"\u227a",preccurlyeq:"\u227c",Precedes:"\u227a",PrecedesEqual:"\u2aaf",PrecedesSlantEqual:"\u227c",PrecedesTilde:"\u227e",preceq:"\u2aaf",precnapprox:"\u2ab9",precneqq:"\u2ab5",precnsim:"\u22e8",pre:"\u2aaf",prE:"\u2ab3",precsim:"\u227e",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2ab9",prnE:"\u2ab5",prnsim:"\u22e8",prod:"\u220f",Product:"\u220f",profalar:"\u232e",profline:"\u2312",profsurf:"\u2313",prop:"\u221d",Proportional:"\u221d",Proportion:"\u2237",propto:"\u221d",prsim:"\u227e",prurel:"\u22b0",Pscr:"\ud835\udcab",pscr:"\ud835\udcc5",Psi:"\u03a8",psi:"\u03c8",puncsp:"\u2008",Qfr:"\ud835\udd14",qfr:"\ud835\udd2e",qint:"\u2a0c",qopf:"\ud835\udd62",Qopf:"\u211a",qprime:"\u2057",Qscr:"\ud835\udcac",qscr:"\ud835\udcc6",quaternions:"\u210d",quatint:"\u2a16",quest:"?",questeq:"\u225f",quot:'"',QUOT:'"',rAarr:"\u21db",race:"\u223d\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221a",raemptyv:"\u29b3",rang:"\u27e9",Rang:"\u27eb",rangd:"\u2992",range:"\u29a5",rangle:"\u27e9",raquo:"\xbb",rarrap:"\u2975",rarrb:"\u21e5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21a0",rArr:"\u21d2",rarrfs:"\u291e",rarrhk:"\u21aa",rarrlp:"\u21ac",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21a3",rarrw:"\u219d",ratail:"\u291a",rAtail:"\u291c",ratio:"\u2236",rationals:"\u211a",rbarr:"\u290d",rBarr:"\u290f",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298c",rbrksld:"\u298e",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201d",rdquor:"\u201d",rdsh:"\u21b3",real:"\u211c",realine:"\u211b",realpart:"\u211c",reals:"\u211d",Re:"\u211c",rect:"\u25ad",reg:"\xae",REG:"\xae",ReverseElement:"\u220b",ReverseEquilibrium:"\u21cb",ReverseUpEquilibrium:"\u296f",rfisht:"\u297d",rfloor:"\u230b",rfr:"\ud835\udd2f",Rfr:"\u211c",rHar:"\u2964",rhard:"\u21c1",rharu:"\u21c0",rharul:"\u296c",Rho:"\u03a1",rho:"\u03c1",rhov:"\u03f1",RightAngleBracket:"\u27e9",RightArrowBar:"\u21e5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21d2",RightArrowLeftArrow:"\u21c4",rightarrowtail:"\u21a3",RightCeiling:"\u2309",RightDoubleBracket:"\u27e7",RightDownTeeVector:"\u295d",RightDownVectorBar:"\u2955",RightDownVector:"\u21c2",RightFloor:"\u230b",rightharpoondown:"\u21c1",rightharpoonup:"\u21c0",rightleftarrows:"\u21c4",rightleftharpoons:"\u21cc",rightrightarrows:"\u21c9",rightsquigarrow:"\u219d",RightTeeArrow:"\u21a6",RightTee:"\u22a2",RightTeeVector:"\u295b",rightthreetimes:"\u22cc",RightTriangleBar:"\u29d0",RightTriangle:"\u22b3",RightTriangleEqual:"\u22b5",RightUpDownVector:"\u294f",RightUpTeeVector:"\u295c",RightUpVectorBar:"\u2954",RightUpVector:"\u21be",RightVectorBar:"\u2953",RightVector:"\u21c0",ring:"\u02da",risingdotseq:"\u2253",rlarr:"\u21c4",rlhar:"\u21cc",rlm:"\u200f",rmoustache:"\u23b1",rmoust:"\u23b1",rnmid:"\u2aee",roang:"\u27ed",roarr:"\u21fe",robrk:"\u27e7",ropar:"\u2986",ropf:"\ud835\udd63",Ropf:"\u211d",roplus:"\u2a2e",rotimes:"\u2a35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2a12",rrarr:"\u21c9",Rrightarrow:"\u21db",rsaquo:"\u203a",rscr:"\ud835\udcc7",Rscr:"\u211b",rsh:"\u21b1",Rsh:"\u21b1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22cc",rtimes:"\u22ca",rtri:"\u25b9",rtrie:"\u22b5",rtrif:"\u25b8",rtriltri:"\u29ce",RuleDelayed:"\u29f4",ruluhar:"\u2968",rx:"\u211e",Sacute:"\u015a",sacute:"\u015b",sbquo:"\u201a",scap:"\u2ab8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2abc",sc:"\u227b",sccue:"\u227d",sce:"\u2ab0",scE:"\u2ab4",Scedil:"\u015e",scedil:"\u015f",Scirc:"\u015c",scirc:"\u015d",scnap:"\u2aba",scnE:"\u2ab6",scnsim:"\u22e9",scpolint:"\u2a13",scsim:"\u227f",Scy:"\u0421",scy:"\u0441",sdotb:"\u22a1",sdot:"\u22c5",sdote:"\u2a66",searhk:"\u2925",searr:"\u2198",seArr:"\u21d8",searrow:"\u2198",sect:"\xa7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\ud835\udd16",sfr:"\ud835\udd30",sfrown:"\u2322",sharp:"\u266f",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xad",Sigma:"\u03a3",sigma:"\u03c3",sigmaf:"\u03c2",sigmav:"\u03c2",sim:"\u223c",simdot:"\u2a6a",sime:"\u2243",simeq:"\u2243",simg:"\u2a9e",simgE:"\u2aa0",siml:"\u2a9d",simlE:"\u2a9f",simne:"\u2246",simplus:"\u2a24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2a33",smeparsl:"\u29e4",smid:"\u2223",smile:"\u2323",smt:"\u2aaa",smte:"\u2aac",smtes:"\u2aac\ufe00",SOFTcy:"\u042c",softcy:"\u044c",solbar:"\u233f",solb:"\u29c4",sol:"/",Sopf:"\ud835\udd4a",sopf:"\ud835\udd64",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\ufe00",sqcup:"\u2294",sqcups:"\u2294\ufe00",Sqrt:"\u221a",sqsub:"\u228f",sqsube:"\u2291",sqsubset:"\u228f",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25a1",Square:"\u25a1",SquareIntersection:"\u2293",SquareSubset:"\u228f",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25aa",squ:"\u25a1",squf:"\u25aa",srarr:"\u2192",Sscr:"\ud835\udcae",sscr:"\ud835\udcc8",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22c6",Star:"\u22c6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03f5",straightphi:"\u03d5",strns:"\xaf",sub:"\u2282",Sub:"\u22d0",subdot:"\u2abd",subE:"\u2ac5",sube:"\u2286",subedot:"\u2ac3",submult:"\u2ac1",subnE:"\u2acb",subne:"\u228a",subplus:"\u2abf",subrarr:"\u2979",subset:"\u2282",Subset:"\u22d0",subseteq:"\u2286",subseteqq:"\u2ac5",SubsetEqual:"\u2286",subsetneq:"\u228a",subsetneqq:"\u2acb",subsim:"\u2ac7",subsub:"\u2ad5",subsup:"\u2ad3",succapprox:"\u2ab8",succ:"\u227b",succcurlyeq:"\u227d",Succeeds:"\u227b",SucceedsEqual:"\u2ab0",SucceedsSlantEqual:"\u227d",SucceedsTilde:"\u227f",succeq:"\u2ab0",succnapprox:"\u2aba",succneqq:"\u2ab6",succnsim:"\u22e9",succsim:"\u227f",SuchThat:"\u220b",sum:"\u2211",Sum:"\u2211",sung:"\u266a",sup1:"\xb9",sup2:"\xb2",sup3:"\xb3",sup:"\u2283",Sup:"\u22d1",supdot:"\u2abe",supdsub:"\u2ad8",supE:"\u2ac6",supe:"\u2287",supedot:"\u2ac4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27c9",suphsub:"\u2ad7",suplarr:"\u297b",supmult:"\u2ac2",supnE:"\u2acc",supne:"\u228b",supplus:"\u2ac0",supset:"\u2283",Supset:"\u22d1",supseteq:"\u2287",supseteqq:"\u2ac6",supsetneq:"\u228b",supsetneqq:"\u2acc",supsim:"\u2ac8",supsub:"\u2ad4",supsup:"\u2ad6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21d9",swarrow:"\u2199",swnwar:"\u292a",szlig:"\xdf",Tab:"\t",target:"\u2316",Tau:"\u03a4",tau:"\u03c4",tbrk:"\u23b4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20db",telrec:"\u2315",Tfr:"\ud835\udd17",tfr:"\ud835\udd31",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03b8",thetasym:"\u03d1",thetav:"\u03d1",thickapprox:"\u2248",thicksim:"\u223c",ThickSpace:"\u205f\u200a",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223c",THORN:"\xde",thorn:"\xfe",tilde:"\u02dc",Tilde:"\u223c",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2a31",timesb:"\u22a0",times:"\xd7",timesd:"\u2a30",tint:"\u222d",toea:"\u2928",topbot:"\u2336",topcir:"\u2af1",top:"\u22a4",Topf:"\ud835\udd4b",topf:"\ud835\udd65",topfork:"\u2ada",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25b5",triangledown:"\u25bf",triangleleft:"\u25c3",trianglelefteq:"\u22b4",triangleq:"\u225c",triangleright:"\u25b9",trianglerighteq:"\u22b5",tridot:"\u25ec",trie:"\u225c",triminus:"\u2a3a",TripleDot:"\u20db",triplus:"\u2a39",trisb:"\u29cd",tritime:"\u2a3b",trpezium:"\u23e2",Tscr:"\ud835\udcaf",tscr:"\ud835\udcc9",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040b",tshcy:"\u045b",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226c",twoheadleftarrow:"\u219e",twoheadrightarrow:"\u21a0",Uacute:"\xda",uacute:"\xfa",uarr:"\u2191",Uarr:"\u219f",uArr:"\u21d1",Uarrocir:"\u2949",Ubrcy:"\u040e",ubrcy:"\u045e",Ubreve:"\u016c",ubreve:"\u016d",Ucirc:"\xdb",ucirc:"\xfb",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21c5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296e",ufisht:"\u297e",Ufr:"\ud835\udd18",ufr:"\ud835\udd32",Ugrave:"\xd9",ugrave:"\xf9",uHar:"\u2963",uharl:"\u21bf",uharr:"\u21be",uhblk:"\u2580",ulcorn:"\u231c",ulcorner:"\u231c",ulcrop:"\u230f",ultri:"\u25f8",Umacr:"\u016a",umacr:"\u016b",uml:"\xa8",UnderBar:"_",UnderBrace:"\u23df",UnderBracket:"\u23b5",UnderParenthesis:"\u23dd",Union:"\u22c3",UnionPlus:"\u228e",Uogon:"\u0172",uogon:"\u0173",Uopf:"\ud835\udd4c",uopf:"\ud835\udd66",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21d1",UpArrowDownArrow:"\u21c5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21d5",UpEquilibrium:"\u296e",upharpoonleft:"\u21bf",upharpoonright:"\u21be",uplus:"\u228e",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03c5",Upsi:"\u03d2",upsih:"\u03d2",Upsilon:"\u03a5",upsilon:"\u03c5",UpTeeArrow:"\u21a5",UpTee:"\u22a5",upuparrows:"\u21c8",urcorn:"\u231d",urcorner:"\u231d",urcrop:"\u230e",Uring:"\u016e",uring:"\u016f",urtri:"\u25f9",Uscr:"\ud835\udcb0",uscr:"\ud835\udcca",utdot:"\u22f0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25b5",utrif:"\u25b4",uuarr:"\u21c8",Uuml:"\xdc",uuml:"\xfc",uwangle:"\u29a7",vangrt:"\u299c",varepsilon:"\u03f5",varkappa:"\u03f0",varnothing:"\u2205",varphi:"\u03d5",varpi:"\u03d6",varpropto:"\u221d",varr:"\u2195",vArr:"\u21d5",varrho:"\u03f1",varsigma:"\u03c2",varsubsetneq:"\u228a\ufe00",varsubsetneqq:"\u2acb\ufe00",varsupsetneq:"\u228b\ufe00",varsupsetneqq:"\u2acc\ufe00",vartheta:"\u03d1",vartriangleleft:"\u22b2",vartriangleright:"\u22b3",vBar:"\u2ae8",Vbar:"\u2aeb",vBarv:"\u2ae9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22a2",vDash:"\u22a8",Vdash:"\u22a9",VDash:"\u22ab",Vdashl:"\u2ae6",veebar:"\u22bb",vee:"\u2228",Vee:"\u22c1",veeeq:"\u225a",vellip:"\u22ee",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200a",Vfr:"\ud835\udd19",vfr:"\ud835\udd33",vltri:"\u22b2",vnsub:"\u2282\u20d2",vnsup:"\u2283\u20d2",Vopf:"\ud835\udd4d",vopf:"\ud835\udd67",vprop:"\u221d",vrtri:"\u22b3",Vscr:"\ud835\udcb1",vscr:"\ud835\udccb",vsubnE:"\u2acb\ufe00",vsubne:"\u228a\ufe00",vsupnE:"\u2acc\ufe00",vsupne:"\u228b\ufe00",Vvdash:"\u22aa",vzigzag:"\u299a",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2a5f",wedge:"\u2227",Wedge:"\u22c0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\ud835\udd1a",wfr:"\ud835\udd34",Wopf:"\ud835\udd4e",wopf:"\ud835\udd68",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\ud835\udcb2",wscr:"\ud835\udccc",xcap:"\u22c2",xcirc:"\u25ef",xcup:"\u22c3",xdtri:"\u25bd",Xfr:"\ud835\udd1b",xfr:"\ud835\udd35",xharr:"\u27f7",xhArr:"\u27fa",Xi:"\u039e",xi:"\u03be",xlarr:"\u27f5",xlArr:"\u27f8",xmap:"\u27fc",xnis:"\u22fb",xodot:"\u2a00",Xopf:"\ud835\udd4f",xopf:"\ud835\udd69",xoplus:"\u2a01",xotime:"\u2a02",xrarr:"\u27f6",xrArr:"\u27f9",Xscr:"\ud835\udcb3",xscr:"\ud835\udccd",xsqcup:"\u2a06",xuplus:"\u2a04",xutri:"\u25b3",xvee:"\u22c1",xwedge:"\u22c0",Yacute:"\xdd",yacute:"\xfd",YAcy:"\u042f",yacy:"\u044f",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042b",ycy:"\u044b",yen:"\xa5",Yfr:"\ud835\udd1c",yfr:"\ud835\udd36",YIcy:"\u0407",yicy:"\u0457",Yopf:"\ud835\udd50",yopf:"\ud835\udd6a",Yscr:"\ud835\udcb4",yscr:"\ud835\udcce",YUcy:"\u042e",yucy:"\u044e",yuml:"\xff",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017a",Zcaron:"\u017d",zcaron:"\u017e",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017b",zdot:"\u017c",zeetrf:"\u2128",ZeroWidthSpace:"\u200b",Zeta:"\u0396",zeta:"\u03b6",zfr:"\ud835\udd37",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21dd",zopf:"\ud835\udd6b",Zopf:"\u2124",Zscr:"\ud835\udcb5",zscr:"\ud835\udccf",zwj:"\u200d",zwnj:"\u200c"}}}),m=u({"node_modules/markdown-it/lib/common/entities.js"(e,t){"use strict";t.exports=h()}}),g=u({"node_modules/uc.micro/categories/P/regex.js"(e,t){t.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/}}),b=u({"node_modules/mdurl/encode.js"(e,t){"use strict";var r={};function n(e,t,a){var i,o,s,c,l,u="";for("string"!==typeof t&&(a=t,t=n.defaultChars),"undefined"===typeof a&&(a=!0),l=function(e){var t,n,a=r[e];if(a)return a;for(a=r[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),/^[0-9a-z]$/i.test(n)?a.push(n):a.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t=55296&&s<=57343){if(s>=55296&&s<=56319&&i+1=56320&&c<=57343){u+=encodeURIComponent(e[i]+e[i+1]),i++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[i]);return u}n.defaultChars=";/?:@&=+$,-_.!~*'()#",n.componentChars="-_.!~*'()",t.exports=n}}),y=u({"node_modules/mdurl/decode.js"(e,t){"use strict";var r={};function n(e,t){var a;return"string"!==typeof t&&(t=n.defaultChars),a=function(e){var t,n,a=r[e];if(a)return a;for(a=r[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),a.push(n);for(t=0;t=55296&&c<=57343?"\ufffd\ufffd\ufffd":String.fromCharCode(c),t+=6):240===(248&n)&&t+91114111?l+="\ufffd\ufffd\ufffd\ufffd":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),t+=9):l+="\ufffd";return l}))}n.defaultChars=";/?:@&=+$,#",n.componentChars="",t.exports=n}}),v=u({"node_modules/mdurl/format.js"(e,t){"use strict";t.exports=function(e){var t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||""}}}),k=u({"node_modules/mdurl/parse.js"(e,t){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var n=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,i=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,o=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),s=["'"].concat(o),c=["%","/","?",";","#"].concat(s),l=["/","?","#"],u=/^[+a-z0-9A-Z_-]{0,63}$/,f=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,p={javascript:!0,"javascript:":!0},d={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};r.prototype.parse=function(e,t){var r,a,o,s,h,m=e;if(m=m.trim(),!t&&1===e.split("#").length){var g=i.exec(m);if(g)return this.pathname=g[1],g[2]&&(this.search=g[2]),this}var b=n.exec(m);if(b&&(o=(b=b[0]).toLowerCase(),this.protocol=b,m=m.substr(b.length)),(t||b||m.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(h="//"===m.substr(0,2))||b&&p[b]||(m=m.substr(2),this.slashes=!0)),!p[b]&&(h||b&&!d[b])){var y,v,k=-1;for(r=0;r127?C+="x":C+=A[E];if(!C.match(u)){var D=x.slice(0,r),j=x.slice(r+1),O=A.match(f);O&&(D.push(O[1]),j.unshift(O[2])),j.length&&(m=j.join(".")+m),this.hostname=D.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),w&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var q=m.indexOf("#");-1!==q&&(this.hash=m.substr(q),m=m.slice(0,q));var F=m.indexOf("?");return-1!==F&&(this.search=m.substr(F),m=m.slice(0,F)),m&&(this.pathname=m),d[o]&&this.hostname&&!this.pathname&&(this.pathname=""),this},r.prototype.parseHost=function(e){var t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},t.exports=function(e,t){if(e&&e instanceof r)return e;var n=new r;return n.parse(e,t),n}}}),_=u({"node_modules/mdurl/index.js"(e,t){"use strict";t.exports.encode=b(),t.exports.decode=y(),t.exports.format=v(),t.exports.parse=k()}}),w=u({"node_modules/uc.micro/properties/Any/regex.js"(e,t){t.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/}}),x=u({"node_modules/uc.micro/categories/Cc/regex.js"(e,t){t.exports=/[\0-\x1F\x7F-\x9F]/}}),A=u({"node_modules/uc.micro/categories/Cf/regex.js"(e,t){t.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/}}),C=u({"node_modules/uc.micro/categories/Z/regex.js"(e,t){t.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/}}),E=u({"node_modules/uc.micro/index.js"(e){"use strict";e.Any=w(),e.Cc=x(),e.Cf=A(),e.P=g(),e.Z=C()}}),S=u({"node_modules/markdown-it/lib/common/utils.js"(e){"use strict";var t=Object.prototype.hasOwnProperty;function r(e,r){return t.call(e,r)}function n(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!==(65535&e)&&65534!==(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function a(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}var i=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,o=new RegExp(i.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),s=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,c=m();var l=/[&<>"]/,u=/[&<>"]/g,f={"&":"&","<":"<",">":">",'"':"""};function p(e){return f[e]}var d=/[.?*+^$[\]\\(){}|-]/g;var h=g();e.lib={},e.lib.mdurl=_(),e.lib.ucmicro=E(),e.assign=function(e){return Array.prototype.slice.call(arguments,1).forEach((function(t){if(t){if("object"!==typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach((function(r){e[r]=t[r]}))}})),e},e.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},e.has=r,e.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(i,"$1")},e.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(o,(function(e,t,i){return t||function(e,t){var i=0;return r(c,t)?c[t]:35===t.charCodeAt(0)&&s.test(t)&&n(i="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?a(i):e}(e,i)}))},e.isValidEntityCode=n,e.fromCodePoint=a,e.escapeHtml=function(e){return l.test(e)?e.replace(u,p):e},e.arrayReplaceAt=function(e,t,r){return[].concat(e.slice(0,t),r,e.slice(t+1))},e.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},e.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},e.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},e.isPunctChar=function(e){return h.test(e)},e.escapeRE=function(e){return e.replace(d,"\\$&")},e.normalizeReference=function(e){return e=e.trim().replace(/\s+/g," "),"\u1e7e"==="\u1e9e".toLowerCase()&&(e=e.replace(/\u1e9e/g,"\xdf")),e.toLowerCase().toUpperCase()}}}),D=u({"node_modules/markdown-it/lib/helpers/parse_link_label.js"(e,t){"use strict";t.exports=function(e,t,r){var n,a,i,o,s=-1,c=e.posMax,l=e.pos;for(e.pos=t+1,n=1;e.pos32)return s;if(41===a){if(0===i)break;i--}t++}return o===t||0!==i||(s.str=r(e.slice(o,t)),s.lines=0,s.pos=t,s.ok=!0),s}}}),O=u({"node_modules/markdown-it/lib/helpers/parse_link_title.js"(e,t){"use strict";var r=S().unescapeAll;t.exports=function(e,t,n){var a,i,o=0,s=t,c={ok:!1,pos:0,lines:0,str:""};if(t>=n)return c;if(34!==(i=e.charCodeAt(t))&&39!==i&&40!==i)return c;for(t++,40===i&&(i=41);t"+a(e[t].content)+""},i.code_block=function(e,t,r,n,i){var o=e[t];return""+a(e[t].content)+"\n"},i.fence=function(e,t,r,i,o){var s,c,l,u,f,p=e[t],d=p.info?n(p.info).trim():"",h="",m="";return d&&(h=(l=d.split(/(\s+)/g))[0],m=l.slice(2).join("")),0===(s=r.highlight&&r.highlight(p.content,h,m)||a(p.content)).indexOf(""+s+"\n"):"
    "+s+"
    \n"},i.image=function(e,t,r,n,a){var i=e[t];return i.attrs[i.attrIndex("alt")][1]=a.renderInlineAsText(i.children,r,n),a.renderToken(e,t,r)},i.hardbreak=function(e,t,r){return r.xhtmlOut?"
    \n":"
    \n"},i.softbreak=function(e,t,r){return r.breaks?r.xhtmlOut?"
    \n":"
    \n":"\n"},i.text=function(e,t){return a(e[t].content)},i.html_block=function(e,t){return e[t].content},i.html_inline=function(e,t){return e[t].content},o.prototype.renderAttrs=function(e){var t,r,n;if(!e.attrs)return"";for(n="",t=0,r=e.attrs.length;t\n":">")},o.prototype.renderInline=function(e,t,r){for(var n,a="",i=this.rules,o=0,s=e.length;o/i.test(e)}t.exports=function(e){var t,a,i,o,s,c,l,u,f,p,d,h,m,g,b,y,v,k,_=e.tokens;if(e.md.options.linkify)for(a=0,i=_.length;a=0;t--)if("link_close"!==(c=o[t]).type){if("html_inline"===c.type&&(k=c.content,/^\s]/i.test(k)&&m>0&&m--,n(c.content)&&m++),!(m>0)&&"text"===c.type&&e.md.linkify.test(c.content)){for(f=c.content,v=e.md.linkify.match(f),l=[],h=c.level,d=0,u=0;ud&&((s=new e.Token("text","",0)).content=f.slice(d,p),s.level=h,l.push(s)),(s=new e.Token("link_open","a",1)).attrs=[["href",b]],s.level=h++,s.markup="linkify",s.info="auto",l.push(s),(s=new e.Token("text","",0)).content=y,s.level=h,l.push(s),(s=new e.Token("link_close","a",-1)).level=--h,s.markup="linkify",s.info="auto",l.push(s),d=v[u].lastIndex);d=0;t--)"text"!==(r=e[t]).type||n||(r.content=r.content.replace(a,o)),"link_open"===r.type&&"auto"===r.info&&n--,"link_close"===r.type&&"auto"===r.info&&n++}function c(e){var t,n,a=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||a||r.test(n.content)&&(n.content=n.content.replace(/\+-/g,"\xb1").replace(/\.{2,}/g,"\u2026").replace(/([?!])\u2026/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1\u2014").replace(/(^|\s)--(?=\s|$)/gm,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1\u2013")),"link_open"===n.type&&"auto"===n.info&&a--,"link_close"===n.type&&"auto"===n.info&&a++}t.exports=function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&(n.test(e.tokens[t].content)&&s(e.tokens[t].children),r.test(e.tokens[t].content)&&c(e.tokens[t].children))}}}),P=u({"node_modules/markdown-it/lib/rules_core/smartquotes.js"(e,t){"use strict";var r=S().isWhiteSpace,n=S().isPunctChar,a=S().isMdAsciiPunct,i=/['"]/,o=/['"]/g;function s(e,t,r){return e.substr(0,t)+r+e.substr(t+1)}function c(e,t){var i,c,l,u,f,p,d,h,m,g,b,y,v,k,_,w,x,A,C,E,S;for(C=[],i=0;i=0&&!(C[x].level<=d);x--);if(C.length=x+1,"text"===c.type){f=0,p=(l=c.content).length;e:for(;f=0)m=l.charCodeAt(u.index-1);else for(x=i-1;x>=0&&("softbreak"!==e[x].type&&"hardbreak"!==e[x].type);x--)if(e[x].content){m=e[x].content.charCodeAt(e[x].content.length-1);break}if(g=32,f=48&&m<=57&&(w=_=!1),_&&w&&(_=b,w=y),_||w){if(w)for(x=C.length-1;x>=0&&(h=C[x],!(C[x].level=0;t--)"inline"===e.tokens[t].type&&i.test(e.tokens[t].content)&&c(e.tokens[t].children,e)}}}),R=u({"node_modules/markdown-it/lib/token.js"(e,t){"use strict";function r(e,t,r){this.type=e,this.tag=t,this.attrs=null,this.map=null,this.nesting=r,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}r.prototype.attrIndex=function(e){var t,r,n;if(!this.attrs)return-1;for(r=0,n=(t=this.attrs).length;r=0&&(r=this.attrs[t][1]),r},r.prototype.attrJoin=function(e,t){var r=this.attrIndex(e);r<0?this.attrPush([e,t]):this.attrs[r][1]=this.attrs[r][1]+" "+t},t.exports=r}}),$=u({"node_modules/markdown-it/lib/rules_core/state_core.js"(e,t){"use strict";var r=R();function n(e,t,r){this.src=e,this.env=r,this.tokens=[],this.inlineMode=!1,this.md=t}n.prototype.Token=r,t.exports=n}}),B=u({"node_modules/markdown-it/lib/parser_core.js"(e,t){"use strict";var r=z(),n=[["normalize",L()],["block",I()],["inline",N()],["linkify",M()],["replacements",T()],["smartquotes",P()]];function a(){this.ruler=new r;for(var e=0;ei)return!1;if(p=t+1,e.sCount[p]=4)return!1;if((l=e.bMarks[p]+e.tShift[p])>=e.eMarks[p])return!1;if(124!==(x=e.src.charCodeAt(l++))&&45!==x&&58!==x)return!1;if(l>=e.eMarks[p])return!1;if(124!==(A=e.src.charCodeAt(l++))&&45!==A&&58!==A&&!r(A))return!1;if(45===x&&r(A))return!1;for(;l=4)return!1;if((d=a(c)).length&&""===d[0]&&d.shift(),d.length&&""===d[d.length-1]&&d.pop(),0===(h=d.length)||h!==g.length)return!1;if(o)return!0;for(k=e.parentType,e.parentType="table",w=e.md.block.ruler.getRules("blockquote"),(m=e.push("table_open","table",1)).map=y=[t,0],(m=e.push("thead_open","thead",1)).map=[t,t+1],(m=e.push("tr_open","tr",1)).map=[t,t+1],u=0;u=4)break;for((d=a(c)).length&&""===d[0]&&d.shift(),d.length&&""===d[d.length-1]&&d.pop(),p===t+2&&((m=e.push("tbody_open","tbody",1)).map=v=[t+2,0]),(m=e.push("tr_open","tr",1)).map=[p,p+1],u=0;u=4))break;a=++n}return e.line=a,(i=e.push("code_block","code",0)).content=e.getLines(t,a,4+e.blkIndent,!1)+"\n",i.map=[t,e.line],!0}}}),Z=u({"node_modules/markdown-it/lib/rules_block/fence.js"(e,t){"use strict";t.exports=function(e,t,r,n){var a,i,o,s,c,l,u,f=!1,p=e.bMarks[t]+e.tShift[t],d=e.eMarks[t];if(!e.md.options.allowIndentation&&e.sCount[t]-e.blkIndent>=4)return!1;if(p+3>d)return!1;if(126!==(a=e.src.charCodeAt(p))&&96!==a)return!1;if(c=p,(i=(p=e.skipChars(p,a))-c)<3)return!1;if(u=e.src.slice(c,p),o=e.src.slice(p,d),96===a&&o.indexOf(String.fromCharCode(a))>=0)return!1;if(n)return!0;for(s=t;!(++s>=r)&&!((p=c=e.bMarks[s]+e.tShift[s])<(d=e.eMarks[s])&&e.sCount[s]=4))&&!((p=e.skipChars(p,a))-c=4)return!1;if(62!==e.src.charCodeAt(E++))return!1;if(a)return!0;for(c=d=e.sCount[t]+1,32===e.src.charCodeAt(E)?(E++,c++,d++,i=!1,k=!0):9===e.src.charCodeAt(E)?(k=!0,(e.bsCount[t]+d)%4===3?(E++,c++,d++,i=!1):i=!0):k=!1,h=[e.bMarks[t]],e.bMarks[t]=E;E=S,y=[e.sCount[t]],e.sCount[t]=d-c,v=[e.tShift[t]],e.tShift[t]=E-e.bMarks[t],w=e.md.block.ruler.getRules("blockquote"),b=e.parentType,e.parentType="blockquote",p=t+1;p=(S=e.eMarks[p])));p++)if(62!==e.src.charCodeAt(E++)||A){if(u)break;for(_=!1,s=0,l=w.length;s=S,m.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(k?1:0),y.push(e.sCount[p]),e.sCount[p]=d-c,v.push(e.tShift[p]),e.tShift[p]=E-e.bMarks[p]}for(g=e.blkIndent,e.blkIndent=0,(x=e.push("blockquote_open","blockquote",1)).markup=">",x.map=f=[t,0],e.md.block.tokenize(e,t,p),(x=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=C,e.parentType=b,f[1]=e.line,s=0;s=4)return!1;if(42!==(i=e.src.charCodeAt(l++))&&45!==i&&95!==i)return!1;for(o=1;l=o)return-1;if((n=e.src.charCodeAt(i++))<48||n>57)return-1;for(;;){if(i>=o)return-1;if(!((n=e.src.charCodeAt(i++))>=48&&n<=57)){if(41===n||46===n)break;return-1}if(i-a>=10)return-1}return i=4)return!1;if(!e.md.options.allowIndentation&&e.listIndent>=0&&e.sCount[t]-e.listIndent>=4&&e.sCount[t]=e.blkIndent&&(L=!0),(D=a(e,t))>=0){if(p=!0,O=e.bMarks[t]+e.tShift[t],y=Number(e.src.slice(O,D-1)),L&&1!==y)return!1}else{if(!((D=n(e,t))>=0))return!1;p=!1}if(L&&e.skipSpaces(D)>=e.eMarks[t])return!1;if(b=e.src.charCodeAt(D-1),i)return!0;for(g=e.tokens.length,p?(z=e.push("ordered_list_open","ol",1),1!==y&&(z.attrs=[["start",y]])):z=e.push("bullet_list_open","ul",1),z.map=m=[t,0],z.markup=String.fromCharCode(b),k=t,j=!1,F=e.md.block.ruler.getRules("list"),x=e.parentType,e.parentType="list";k=v?1:_-f,!e.md.options.allowIndentation&&u>4&&(u=1),l=f+u,(z=e.push("list_item_open","li",1)).markup=String.fromCharCode(b),z.map=d=[t,0],p&&(z.info=e.src.slice(O,D-1)),E=e.tight,C=e.tShift[t],A=e.sCount[t],w=e.listIndent,e.listIndent=e.blkIndent,e.blkIndent=l,e.tight=!0,e.tShift[t]=s-e.bMarks[t],e.sCount[t]=_,s>=v&&e.isEmpty(t+1)?e.line=Math.min(e.line+2,r):e.md.block.tokenize(e,t,r,!0),e.tight&&!j||(I=!1),j=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=w,e.tShift[t]=C,e.sCount[t]=A,e.tight=E,(z=e.push("list_item_close","li",-1)).markup=String.fromCharCode(b),k=t=e.line,d[1]=k,s=e.bMarks[t],k>=r)break;if(e.sCount[k]=4)break;for(q=!1,c=0,h=F.length;c=4)return!1;if(91!==e.src.charCodeAt(x))return!1;for(;++x3))&&!(e.sCount[C]<0)){for(v=!1,f=0,p=k.length;f`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",n="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",a=new RegExp("^(?:"+r+"|"+n+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?][\\s\\S]*?[?]>|]*>|)"),i=new RegExp("^(?:"+r+"|"+n+")");t.exports.HTML_TAG_RE=a,t.exports.HTML_OPEN_CLOSE_TAG_RE=i}}),K=u({"node_modules/markdown-it/lib/rules_block/html_block.js"(e,t){"use strict";var r=J(),n=X().HTML_OPEN_CLOSE_TAG_RE,a=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(n.source+"\\s*$"),/^$/,!1]];t.exports=function(e,t,r,n){var i,o,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(!e.md.options.allowIndentation&&e.sCount[t]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(l))return!1;for(c=e.src.slice(l,u),i=0;i=4)return!1;if(35!==(i=e.src.charCodeAt(l))||l>=u)return!1;for(o=1,i=e.src.charCodeAt(++l);35===i&&l6||ll&&r(e.src.charCodeAt(s-1))&&(u=s),e.line=t+1,(c=e.push("heading_open","h"+String(o),1)).markup="########".slice(0,o),c.map=[t,e.line],(c=e.push("inline","",0)).content=e.src.slice(l,u).trim(),c.map=[t,e.line],c.children=[],(c=e.push("heading_close","h"+String(o),-1)).markup="########".slice(0,o)),!0)}}}),ee=u({"node_modules/markdown-it/lib/rules_block/lheading.js"(e,t){"use strict";t.exports=function(e,t,r){var n,a,i,o,s,c,l,u,f,p,d=t+1,h=e.md.block.ruler.getRules("paragraph");if(!e.md.options.allowIndentation&&e.sCount[t]-e.blkIndent>=4)return!1;for(p=e.parentType,e.parentType="paragraph";d3)){if(e.sCount[d]>=e.blkIndent&&(c=e.bMarks[d]+e.tShift[d])<(l=e.eMarks[d])&&(45===(f=e.src.charCodeAt(c))||61===f)&&(c=e.skipChars(c,f),(c=e.skipSpaces(c))>=l)){u=61===f?1:2;break}if(!(e.sCount[d]<0)){for(a=!1,i=0,o=h.length;i3))&&!(e.sCount[c]<0)){for(n=!1,a=0,i=l.length;a0&&this.level++,this.tokens.push(a),a},a.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},a.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;et;)if(!n(this.src.charCodeAt(--e)))return e+1;return e},a.prototype.skipChars=function(e,t){for(var r=this.src.length;er;)if(t!==this.src.charCodeAt(--e))return e+1;return e},a.prototype.getLines=function(e,t,r,a){var i,o,s,c,l,u,f,p=e;if(e>=t)return"";for(u=new Array(t-e),i=0;pr?new Array(o-r+1).join(" ")+this.src.slice(c,l):this.src.slice(c,l)}return u.join("")},a.prototype.Token=r,t.exports=a}}),ne=u({"node_modules/markdown-it/lib/parser_block.js"(e,t){"use strict";var r=z(),n=[["table",U(),["paragraph","reference"]],["code",V()],["fence",Z(),["paragraph","reference","blockquote","list"]],["blockquote",H(),["paragraph","reference","blockquote","list"]],["hr",Y(),["paragraph","reference","blockquote","list"]],["list",G(),["paragraph","reference","blockquote"]],["reference",W()],["html_block",K(),["paragraph","reference","blockquote"]],["heading",Q(),["paragraph","reference","blockquote"]],["lheading",ee()],["paragraph",te()]];function a(){this.ruler=new r;for(var e=0;e=r))&&!(e.sCount[o]=c){e.line=r;break}for(n=0;n=0&&32===e.pending.charCodeAt(n))if(n>=1&&32===e.pending.charCodeAt(n-1)){for(i=n-1;i>=1&&32===e.pending.charCodeAt(i-1);)i--;e.pending=e.pending.slice(0,i),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(o++;o?@[]^_`{|}~-".split("").forEach((function(e){a[e.charCodeAt(0)]=1})),t.exports=function(e,t){var r,i=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(i))return!1;if(++i=0;r--)95!==(n=t[r]).marker&&42!==n.marker||-1!==n.end&&(a=t[n.end],s=r>0&&t[r-1].end===n.end+1&&t[r-1].marker===n.marker&&t[r-1].token===n.token-1&&t[n.end+1].token===a.token+1,o=String.fromCharCode(n.marker),(i=e.tokens[n.token]).type=s?"strong_open":"em_open",i.tag=s?"strong":"em",i.nesting=1,i.markup=s?o+o:o,i.content="",(i=e.tokens[a.token]).type=s?"strong_close":"em_close",i.tag=s?"strong":"em",i.nesting=-1,i.markup=s?o+o:o,i.content="",s&&(e.tokens[t[r-1].token].content="",e.tokens[t[n.end+1].token].content="",r--))}t.exports.tokenize=function(e,t){var r,n,a=e.pos,i=e.src.charCodeAt(a);if(t)return!1;if(95!==i&&42!==i)return!1;for(n=e.scanDelims(e.pos,42===i),r=0;r=m)return!1;if(g=l,(u=e.md.helpers.parseLinkDestination(e.src,l,e.posMax)).ok){for(p=e.md.normalizeLink(u.str),e.md.validateLink(p)?l=u.pos:p="",g=l;l=m||41!==e.src.charCodeAt(l))&&(b=!0),l++}if(b){if("undefined"===typeof e.env.references)return!1;if(l=0?o=e.src.slice(g,l++):l=s+1):l=s+1,o||(o=e.src.slice(c,s)),!(f=e.env.references[r(o)]))return e.pos=h,!1;p=f.href,d=f.title}return t||(e.pos=c,e.posMax=s,e.push("link_open","a",1).attrs=a=[["href",p]],d&&a.push(["title",d]),e.md.inline.tokenize(e),e.push("link_close","a",-1)),e.pos=l,e.posMax=m,!0}}}),fe=u({"node_modules/markdown-it/lib/rules_inline/image.js"(e,t){"use strict";var r=S().normalizeReference,n=S().isSpace;t.exports=function(e,t){var a,i,o,s,c,l,u,f,p,d,h,m,g,b="",y=e.pos,v=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(l=e.pos+2,(c=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((u=c+1)=v)return!1;for(g=u,(p=e.md.helpers.parseLinkDestination(e.src,u,e.posMax)).ok&&(b=e.md.normalizeLink(p.str),e.md.validateLink(b)?u=p.pos:b=""),g=u;u=v||41!==e.src.charCodeAt(u))return e.pos=y,!1;u++}else{if("undefined"===typeof e.env.references)return!1;if(u=0?s=e.src.slice(g,u++):u=c+1):u=c+1,s||(s=e.src.slice(l,c)),!(f=e.env.references[r(s)]))return e.pos=y,!1;b=f.href,d=f.title}return t||(o=e.src.slice(l,c),e.md.inline.parse(o,e.md,e.env,m=[]),(h=e.push("image","img",0)).attrs=a=[["src",b],["alt",""]],h.children=m,h.content=o,d&&a.push(["title",d])),e.pos=u,e.posMax=v,!0}}}),pe=u({"node_modules/markdown-it/lib/rules_inline/autolink.js"(e,t){"use strict";var r=/^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/,n=/^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;t.exports=function(e,t){var a,i,o,s,c,l,u=e.pos;if(60!==e.src.charCodeAt(u))return!1;for(c=e.pos,l=e.posMax;;){if(++u>=l)return!1;if(60===(s=e.src.charCodeAt(u)))return!1;if(62===s)break}return a=e.src.slice(c+1,u),n.test(a)?(i=e.md.normalizeLink(a),!!e.md.validateLink(i)&&(t||((o=e.push("link_open","a",1)).attrs=[["href",i]],o.markup="autolink",o.info="auto",(o=e.push("text","",0)).content=e.md.normalizeLinkText(a),(o=e.push("link_close","a",-1)).markup="autolink",o.info="auto"),e.pos+=a.length+2,!0)):!!r.test(a)&&(i=e.md.normalizeLink("mailto:"+a),!!e.md.validateLink(i)&&(t||((o=e.push("link_open","a",1)).attrs=[["href",i]],o.markup="autolink",o.info="auto",(o=e.push("text","",0)).content=e.md.normalizeLinkText(a),(o=e.push("link_close","a",-1)).markup="autolink",o.info="auto"),e.pos+=a.length+2,!0))}}}),de=u({"node_modules/markdown-it/lib/rules_inline/html_inline.js"(e,t){"use strict";var r=X().HTML_TAG_RE;t.exports=function(e,t){var n,a,i,o=e.pos;return!!e.md.options.html&&(i=e.posMax,!(60!==e.src.charCodeAt(o)||o+2>=i)&&(!(33!==(n=e.src.charCodeAt(o+1))&&63!==n&&47!==n&&!function(e){var t=32|e;return t>=97&&t<=122}(n))&&(!!(a=e.src.slice(o).match(r))&&(t||(e.push("html_inline","",0).content=e.src.slice(o,o+a[0].length)),e.pos+=a[0].length,!0))))}}}),he=u({"node_modules/markdown-it/lib/rules_inline/entity.js"(e,t){"use strict";var r=m(),n=S().has,a=S().isValidEntityCode,i=S().fromCodePoint,o=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,s=/^&([a-z][a-z0-9]{1,31});/i;t.exports=function(e,t){var c,l,u=e.pos,f=e.posMax;if(38!==e.src.charCodeAt(u))return!1;if(u+1o;n-=h[n]+1)if((i=t[n]).marker===a.marker&&i.open&&i.end<0&&(c=!1,(i.close||a.open)&&(i.length+a.length)%3===0&&(i.length%3===0&&a.length%3===0||(c=!0)),!c)){l=n>0&&!t[n-1].open?h[n-1]+1:0,h[r]=r-n+l,h[n]=l,a.open=!1,i.end=r,i.close=!1,s=-1,d=-2;break}-1!==s&&(u[a.marker][(a.open?3:0)+(a.length||0)%3]=s)}}}t.exports=function(e){var t,n=e.tokens_meta,a=e.tokens_meta.length;for(r(0,e.delimiters),t=0;t0&&n++,"text"===a[t].type&&t+10&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],i={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(a),this.tokens_meta.push(i),a},o.prototype.scanDelims=function(e,t){var r,o,s,c,l,u,f,p,d,h=e,m=!0,g=!0,b=this.posMax,y=this.src.charCodeAt(e);for(r=e>0?this.src.charCodeAt(e-1):32;h=i)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},i.prototype.parse=function(e,t,r,n){var a,i,o,s=new this.State(e,t,r,n);for(this.tokenize(s),o=(i=this.ruler2.getRules("")).length,a=0;a|$))",t.tpl_email_fuzzy='(^|[><\uff5c]|"|\\(|'+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+t.src_ZPCc+"))((?![$+<=>^`|\uff5c])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+t.src_ZPCc+"))((?![$+<=>^`|\uff5c])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}}}),ke=u({"node_modules/linkify-it/index.js"(e,t){"use strict";function r(e){return Array.prototype.slice.call(arguments,1).forEach((function(t){t&&Object.keys(t).forEach((function(r){e[r]=t[r]}))})),e}function n(e){return Object.prototype.toString.call(e)}function a(e){return"[object Function]"===n(e)}function i(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var o={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};var s={"http:":{validate:function(e,t,r){var n=e.slice(t);return r.re.http||(r.re.http=new RegExp("^\\/\\/"+r.re.src_auth+r.re.src_host_port_strict+r.re.src_path,"i")),r.re.http.test(n)?n.match(r.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,r){var n=e.slice(t);return r.re.no_http||(r.re.no_http=new RegExp("^"+r.re.src_auth+"(?:localhost|(?:(?:"+r.re.src_domain+")\\.)+"+r.re.src_domain_root+")"+r.re.src_port+r.re.src_host_terminator+r.re.src_path,"i")),r.re.no_http.test(n)?t>=3&&":"===e[t-3]||t>=3&&"/"===e[t-3]?0:n.match(r.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,r){var n=e.slice(t);return r.re.mailto||(r.re.mailto=new RegExp("^"+r.re.src_email_name+"@"+r.re.src_host_strict,"i")),r.re.mailto.test(n)?n.match(r.re.mailto)[0].length:0}}},c="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function l(e){var t=e.re=ve()(e.__opts__),r=e.__tlds__.slice();function o(e){return e.replace("%TLDS%",t.src_tlds)}e.onCompile(),e.__tlds_replaced__||r.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),r.push(t.src_xn),t.src_tlds=r.join("|"),t.email_fuzzy=RegExp(o(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(o(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(o(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(o(t.tpl_host_fuzzy_test),"i");var s=[];function c(e,t){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+t)}e.__compiled__={},Object.keys(e.__schemas__).forEach((function(t){var r=e.__schemas__[t];if(null!==r){var i={validate:null,link:null};if(e.__compiled__[t]=i,"[object Object]"===n(r))return!function(e){return"[object RegExp]"===n(e)}(r.validate)?a(r.validate)?i.validate=r.validate:c(t,r):i.validate=function(e){return function(t,r){var n=t.slice(r);return e.test(n)?n.match(e)[0].length:0}}(r.validate),void(a(r.normalize)?i.normalize=r.normalize:r.normalize?c(t,r):i.normalize=function(e,t){t.normalize(e)});!function(e){return"[object String]"===n(e)}(r)?c(t,r):s.push(t)}})),s.forEach((function(t){e.__compiled__[e.__schemas__[t]]&&(e.__compiled__[t].validate=e.__compiled__[e.__schemas__[t]].validate,e.__compiled__[t].normalize=e.__compiled__[e.__schemas__[t]].normalize)})),e.__compiled__[""]={validate:null,normalize:function(e,t){t.normalize(e)}};var l=Object.keys(e.__compiled__).filter((function(t){return t.length>0&&e.__compiled__[t]})).map(i).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uff5c]|"+t.src_ZPCc+"))("+l+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uff5c]|"+t.src_ZPCc+"))("+l+")","ig"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(e)}function u(e,t){var r=e.__index__,n=e.__last_index__,a=e.__text_cache__.slice(r,n);this.schema=e.__schema__.toLowerCase(),this.index=r+t,this.lastIndex=n+t,this.raw=a,this.text=a,this.url=a}function f(e,t){var r=new u(e,t);return e.__compiled__[r.schema].normalize(r,e),r}function p(e,t){if(!(this instanceof p))return new p(e,t);var n;t||(n=e,Object.keys(n||{}).reduce((function(e,t){return e||o.hasOwnProperty(t)}),!1)&&(t=e,e={})),this.__opts__=r({},o,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=r({},s,e),this.__compiled__={},this.__tlds__=c,this.__tlds_replaced__=!1,this.re={},l(this)}p.prototype.add=function(e,t){return this.__schemas__[e]=t,l(this),this},p.prototype.set=function(e){return this.__opts__=r(this.__opts__,e),this},p.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var t,r,n,a,i,o,s,c;if(this.re.schema_test.test(e))for((s=this.re.schema_search).lastIndex=0;null!==(t=s.exec(e));)if(a=this.testSchemaAt(e,t[2],s.lastIndex)){this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+a;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c=0&&null!==(n=e.match(this.re.email_fuzzy))&&(i=n.index+n[1].length,o=n.index+n[0].length,(this.__index__<0||ithis.__last_index__)&&(this.__schema__="mailto:",this.__index__=i,this.__last_index__=o)),this.__index__>=0},p.prototype.pretest=function(e){return this.re.pretest.test(e)},p.prototype.testSchemaAt=function(e,t,r){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,r,this):0},p.prototype.match=function(e){var t=0,r=[];this.__index__>=0&&this.__text_cache__===e&&(r.push(f(this,t)),t=this.__last_index__);for(var n=t?e.slice(t):e;this.test(n);)r.push(f(this,t)),n=n.slice(this.__last_index__),t+=this.__last_index__;return r.length?r:null},p.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter((function(e,t,r){return e!==r[t-1]})).reverse(),l(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,l(this),this)},p.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},p.prototype.onCompile=function(){},t.exports=p}}),_e=u({"node_modules/punycode/punycode.js"(e,t){"use strict";var r=2147483647,n=36,a=/^xn--/,i=/[^\0-\x7E]/,o=/[\x2E\u3002\uFF0E\uFF61]/g,s={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=Math.floor,l=String.fromCharCode;function u(e){throw new RangeError(s[e])}function f(e,t){const r=e.split("@");let n="";r.length>1&&(n=r[0]+"@",e=r[1]);const a=function(e,t){const r=[];let n=e.length;for(;n--;)r[n]=t(e[n]);return r}((e=e.replace(o,".")).split("."),t).join(".");return n+a}function p(e){const t=[];let r=0;const n=e.length;for(;r=55296&&a<=56319&&r>1,e+=c(e/t);e>455;a+=n)e=c(e/35);return c(a+36*e/(e+38))},m=function(e){const t=[],a=e.length;let i=0,o=128,s=72,l=e.lastIndexOf("-");l<0&&(l=0);for(let r=0;r=128&&u("not-basic"),t.push(e.charCodeAt(r));for(let p=l>0?l+1:0;p=a&&u("invalid-input");const l=(f=e.charCodeAt(p++))-48<10?f-22:f-65<26?f-65:f-97<26?f-97:n;(l>=n||l>c((r-i)/t))&&u("overflow"),i+=l*t;const d=o<=s?1:o>=s+26?26:o-s;if(lc(r/h)&&u("overflow"),t*=h}const d=t.length+1;s=h(i-l,d,0==l),c(i/d)>r-o&&u("overflow"),o+=c(i/d),i%=d,t.splice(i++,0,o)}var f;return String.fromCodePoint(...t)},g=function(e){const t=[];let a=(e=p(e)).length,i=128,o=0,s=72;for(const r of e)r<128&&t.push(l(r));let f=t.length,m=f;for(f&&t.push("-");m=i&&tc((r-o)/p)&&u("overflow"),o+=(a-i)*p,i=a;for(const g of e)if(gr&&u("overflow"),g==i){let e=o;for(let r=n;;r+=n){const a=r<=s?1:r>=s+26?26:r-s;if(eString.fromCodePoint(...e)},decode:m,encode:g,toASCII:function(e){return f(e,(function(e){return i.test(e)?"xn--"+g(e):e}))},toUnicode:function(e){return f(e,(function(e){return a.test(e)?m(e.slice(4).toLowerCase()):e}))}};t.exports=b}}),we=u({"node_modules/markdown-it/lib/presets/default.js"(e,t){"use strict";t.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}}}),xe=u({"node_modules/markdown-it/lib/presets/zero.js"(e,t){"use strict";t.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","text_collapse"]}}}}}),Ae=u({"node_modules/markdown-it/lib/presets/commonmark.js"(e,t){"use strict";t.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","text_collapse"]}}}}}),Ce=u({"node_modules/markdown-it/lib/index.js"(e,t){"use strict";var r=S(),n=q(),a=F(),i=B(),o=ne(),s=ye(),c=ke(),l=_(),u=_e(),f={default:we(),zero:xe(),commonmark:Ae()},p=/^(vbscript|javascript|file|data):/,d=/^data:image\/(gif|png|jpeg|webp);/;function h(e){var t=e.trim().toLowerCase();return!p.test(t)||!!d.test(t)}var m=["http:","https:","mailto:"];function g(e){var t=l.parse(e,!0);if(t.hostname&&(!t.protocol||m.indexOf(t.protocol)>=0))try{t.hostname=u.toASCII(t.hostname)}catch(r){}return l.encode(l.format(t))}function b(e){var t=l.parse(e,!0);if(t.hostname&&(!t.protocol||m.indexOf(t.protocol)>=0))try{t.hostname=u.toUnicode(t.hostname)}catch(r){}return l.decode(l.format(t),l.decode.defaultChars+"%")}function y(e,t){if(!(this instanceof y))return new y(e,t);t||r.isString(e)||(t=e||{},e="default"),this.inline=new s,this.block=new o,this.core=new i,this.renderer=new a,this.linkify=new c,this.validateLink=h,this.normalizeLink=g,this.normalizeLinkText=b,this.utils=r,this.helpers=r.assign({},n),this.options={},this.configure(e),t&&this.set(t)}y.prototype.set=function(e){return r.assign(this.options,e),this},y.prototype.configure=function(e){var t,n=this;if(r.isString(e)&&!(e=f[t=e]))throw new Error('Wrong `markdown-it` preset "'+t+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&n.set(e.options),e.components&&Object.keys(e.components).forEach((function(t){e.components[t].rules&&n[t].ruler.enableOnly(e.components[t].rules),e.components[t].rules2&&n[t].ruler2.enableOnly(e.components[t].rules2)})),this},y.prototype.enable=function(e,t){var r=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(t){r=r.concat(this[t].ruler.enable(e,!0))}),this),r=r.concat(this.inline.ruler2.enable(e,!0));var n=e.filter((function(e){return r.indexOf(e)<0}));if(n.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+n);return this},y.prototype.disable=function(e,t){var r=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(t){r=r.concat(this[t].ruler.disable(e,!0))}),this),r=r.concat(this.inline.ruler2.disable(e,!0));var n=e.filter((function(e){return r.indexOf(e)<0}));if(n.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+n);return this},y.prototype.use=function(e){var t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this},y.prototype.parse=function(e,t){if("string"!==typeof e)throw new Error("Input data should be a String");var r=new this.core.State(e,this,t);return this.core.process(r),r.tokens},y.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},y.prototype.parseInline=function(e,t){var r=new this.core.State(e,this,t);return r.inlineMode=!0,this.core.process(r),r.tokens},y.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)},t.exports=y}}),Ee=u({"node_modules/markdown-it/index.js"(e,t){"use strict";t.exports=Ce()}}),Se={};function De(e){return!!e?.$$mdtype}function je(e){return!("Function"!==e?.$$mdtype)}function Oe(e){return!("Variable"!==e?.$$mdtype)}function*qe(e){if(null!=e&&"object"===typeof e){if(Array.isArray(e))for(const t of e)yield*qe(t);if(De(e)&&(yield e),Object.getPrototypeOf(e)===Object.prototype)for(const t of Object.values(e))yield*qe(t)}}function Fe(e,t={}){if(null==e||"object"!==typeof e)return e;if(Array.isArray(e))return e.map((e=>Fe(e,t)));if(De(e)&&e?.resolve instanceof Function)return e.resolve(t);if(Object.getPrototypeOf(e)!==Object.prototype)return e;const r={};for(const[n,a]of Object.entries(e))r[n]=Fe(a,t);return r}f(Se,{getAstValues:()=>qe,isAst:()=>De,isFunction:()=>je,isVariable:()=>Oe,resolve:()=>Fe});var ze=class{constructor(e="div",t={},r=[]){this.$$mdtype="Tag",this.name=e,this.attributes=t,this.children=r}};ze.isTag=e=>!("Tag"!==e?.$$mdtype);var Le,Ie,Ne=p(d()),Me=class{constructor(e=[]){this.$$mdtype="Variable",this.path=e}resolve({variables:e}={}){return e instanceof Function?e(this.path):this.path.reduce(((e={},t)=>e[t]),e)}},Te=class{constructor(e,t){this.$$mdtype="Function",this.name=e,this.parameters=t}resolve(e={}){const t=e?.functions?.[this.name];if(!t)return null;const r=Fe(this.parameters,e);return t.transform?.(r,e)}};(Ie=Le||(Le={}))[Ie.normal=0]="normal",Ie[Ie.string=1]="string",Ie[Ie.escape=2]="escape";var Pe="{%",Re="%}",$e=/^[a-zA-Z0-9_-]+$/;function Be(e){return"string"===typeof e&&$e.test(e)}function Ue(e){return e&&"object"===typeof e&&"function"===typeof e.then}function Ve(e,t=0){let r=0;for(let n=t;ne.tag?r[e.tag]:t[e.type],attributes(e,t={}){const r=this.findSchema(e,t)??{},n={},a={...Ye,...r.attributes};for(const[i,o]of Object.entries(a)){if(0==o.render)continue;const r="string"===typeof o.render?o.render:i;let a=e.attributes[i];if("function"===typeof o.type){const e=new o.type;e.transform&&(a=e.transform(a,t))}a=void 0===a?o.default:a,void 0!==a&&(n[r]=a)}if(r.slots)for(const[i,o]of Object.entries(r.slots)){if(!1===o.render)continue;const r="string"===typeof o.render?o.render:i;e.slots[i]&&(n[r]=this.node(e.slots[i],t))}return n},children(e,t={}){const r=e.children.flatMap((e=>this.node(e,t)));return r.some(Ue)?Promise.all(r):r},node(e,t={}){const r=this.findSchema(e,t)??{};if(r&&r.transform instanceof Function)return r.transform(e,t);const n=this.children(e,t);if(!r||!r.render)return n;const a=this.attributes(e,t);return Ue(a)||Ue(n)?Promise.all([a,n]).then((e=>new ze(r.render,...e))):new ze(r.render,a,n)}},We=class{constructor(e="node",t={},r=[],n){this.$$mdtype="Node",this.errors=[],this.lines=[],this.inline=!1,this.attributes=t,this.children=r,this.type=e,this.tag=n,this.annotations=[],this.slots={}}*walk(){for(const e of[...Object.values(this.slots),...this.children])yield e,yield*e.walk()}push(e){this.children.push(e)}resolve(e={}){return Object.assign(new We,this,{children:this.children.map((t=>t.resolve(e))),attributes:Fe(this.attributes,e),slots:Object.fromEntries(Object.entries(this.slots).map((([t,r])=>[t,r.resolve(e)])))})}findSchema(e={}){return Ge.findSchema(this,e)}transformAttributes(e={}){return Ge.attributes(this,e)}transformChildren(e){return Ge.children(this,e)}transform(e){return Ge.node(this,e)}},Je={Function:Te,Node:We,Variable:Me};function Xe(e,t){if(!t)return t;const r=Je[t.$$mdtype];return r?Object.assign(new r,t):t}var Ke={...Je,...Se,fromJSON:function(e){return JSON.parse(e,Xe)}},Qe=" ",et=", ",tt="\n",rt=".",nt="-",at=80,it=["strong","em","s"],ot=(e,t)=>Math.max(e,t),st=(e,t=2)=>({...e,indent:(e.indent||0)+t});function*ct(e,t){for(const r of e.children)yield*bt(r,t)}function*lt(e){yield[...e].join("").trim()}function*ut(e){yield`| ${e.join(" | ")} |`}function ft(e){if(void 0!==e)return Ke.isAst(e)?yt(e):null===e?"null":Array.isArray(e)?"["+e.map(ft).join(et)+"]":"object"===typeof e?"{"+Object.entries(e).map((([e,t])=>`${Be(e)?e:`"${e}"`}: ${ft(t)}`)).join(et)+"}":JSON.stringify(e)}function pt(e){const t=ft(e.value);if(void 0!==t)return"primary"===e.name?t:"id"===e.name&&"string"===typeof e.value&&Be(e.value)?"#"+e.value:"class"===e.type&&Be(e.name)?"."+e.name:`${e.name}=${t}`}function*dt(e){for(const[t,r]of Object.entries(e.attributes))if("class"!==t||"object"!==typeof r||Ke.isAst(r))yield pt({type:"attribute",name:t,value:r});else for(const e of Object.keys(r))yield pt({type:"class",name:e,value:r})}function*ht(e){e.annotations.length&&(yield Pe+Qe,yield e.annotations.map(pt).join(Qe),yield Qe+Re)}function*mt(e){let t;do{const{value:r,done:n}=e.next();if(n)return;t=r.trimStart()}while(!t.length);yield t,yield*e}function*gt(e,t){yield e.replace(t,"\\$&").replace(new RegExp("\xa0","g")," ")}function*bt(e,t={}){switch(typeof e){case"undefined":break;case"boolean":case"number":case"string":yield e.toString();break;case"object":if(null===e)break;if(Array.isArray(e)){for(const r of e)yield*bt(r,t);break}switch(e.$$mdtype){case"Function":yield*function*(e){yield e.name,yield"(",yield Object.values(e.parameters).map(ft).join(et),yield")"}(e);break;case"Node":yield*function*(e,t={}){const r={...t,parent:e},n=Qe.repeat(r.indent||0);switch(e.type){case"document":e.attributes.frontmatter&&e.attributes.frontmatter.length&&(yield"---"+tt+e.attributes.frontmatter+tt+"---"+tt+tt),yield*mt(ct(e,r));break;case"heading":yield tt,yield n,yield"#".repeat(e.attributes.level||1),yield Qe,yield*mt(ct(e,r)),yield*ht(e),yield tt;break;case"paragraph":yield tt,yield*ct(e,r),yield*ht(e),yield tt;break;case"inline":yield n,yield*ct(e,r);break;case"image":yield"!",yield"[",yield*bt(e.attributes.alt,r),yield"]",yield"(",yield*"string"===typeof e.attributes.src?gt(e.attributes.src,/[()]/):bt(e.attributes.src,r),e.attributes.title&&(yield Qe+`"${e.attributes.title}"`),yield")";break;case"link":yield"[",yield*ct(e,r),yield"]",yield"(",yield*"string"===typeof e.attributes.href?gt(e.attributes.href,/[()]/g):bt(e.attributes.href,r),e.attributes.title&&(yield Qe+`"${e.attributes.title}"`),yield")";break;case"text":{const{content:n}=e.attributes;Ke.isAst(n)?(yield Pe+Qe,yield*bt(n,r),yield Qe+Re):t.parent&&it.includes(t.parent.type)?yield*gt(n,/[*_~]/g):yield*gt(n,/^[*>#]/);break}case"blockquote":{const t=">"+Qe;yield e.children.map((e=>yt(e,r).trimStart())).map((e=>tt+n+t+e)).join(n+t);break}case"hr":yield tt,yield n,yield"---",yield tt;break;case"fence":{yield tt,yield n;const t=(e.attributes.content.match(/`{3,}/g)||[]).map((e=>e.length)).reduce(ot,0),r="`".repeat(t?t+1:3);yield r,e.attributes.language&&(yield e.attributes.language),e.annotations.length&&(yield Qe),yield*ht(e),yield tt,yield n,yield e.attributes.content.split(tt).join(tt+n),yield r,yield tt;break}case"tag":{e.inline||(yield tt,yield n);const a=Pe+Qe,i=[...dt(e)].filter((e=>void 0!==e)),o=[a+e.tag,...i],s=o.join(Qe),c=s.length+2*a.length>(t.maxTagOpeningWidth||at);yield(!e.inline&&c?o.join(tt+Qe.repeat(a.length)+n):s)+Qe+(e.children.length?"":"/")+Re,e.children.length&&(yield*ct(e,r.allowIndentation?st(r):r),e.inline||(yield n),yield Pe+Qe+"/"+e.tag+Qe+Re),e.inline||(yield tt);break}case"list":{const t=e.children.some((e=>e.children.some((e=>"paragraph"===e.type))));for(let a=0;at+Qe.repeat(e[r]-t.length)))),yield tt,yield*ut(t.map(((t,r)=>"-".repeat(e[r])))),yield tt;for(const n of r)yield*ut(n.map(((t,r)=>t+Qe.repeat(e[r]-t.length)))),yield tt}break}case"thead":{const[t]=[...ct(e,r)];yield t||[];break}case"tr":yield[...ct(e,r)];break;case"td":case"th":yield[...ct(e,r),...ht(e)].join("").trim();break;case"tbody":yield*ct(e,r);break;case"comment":yield"\x3c!-- "+e.attributes.content+" --\x3e\n"}}(e,t);break;case"Variable":yield*function*(e){yield"$",yield e.path.map(((e,t)=>0===t?e:Be(e)?"."+e:"number"===typeof e?`[${e}]`:`["${e}"]`)).join("")}(e);break;default:throw new Error(`Unimplemented: "${e.$$mdtype}"`)}}}function yt(e,t){let r="";for(const n of bt(e,t))r+=n;return r.trimStart()}function vt(e){return!1!==e&&void 0!==e&&null!==e}var kt={attributes:{primary:{type:Object,render:!1}},transform(e,t){const r=function(e){const t=[{condition:e.attributes.primary,children:[]}];for(const r of e.children)"tag"===r.type&&"else"===r.tag?t.push({condition:!("primary"in r.attributes)||r.attributes.primary,children:[]}):t[t.length-1].children.push(r);return t}(e);for(const{condition:n,children:a}of r)if(vt(n)){const e=a.flatMap((e=>e.transform(t)));return e.some(Ue)?Promise.all(e).then((e=>e.flat())):e}return[]}},_t={selfClosing:!0,attributes:{primary:{type:Object,render:!1}}},wt={and:{transform:e=>Object.values(e).every((e=>vt(e)))},or:{transform:e=>void 0!==Object.values(e).find((e=>vt(e)))},not:{parameters:{0:{required:!0}},transform:e=>!vt(e[0])},equals:{transform(e){const t=Object.values(e);return t.every((e=>e===t[0]))}},default:{transform:e=>void 0===e[0]?e[1]:e[0]},debug:{transform:e=>JSON.stringify(e[0],null,2)}};function xt(e,t="td"){e.type="tr",e.attributes={};for(const r of e.children)r.type=t;return e}var At=[function(e){for(const t of e.walk()){if("tag"!==t.type||"table"!==t.tag)continue;const[e,...r]=t.children;if(!e||"table"===e.type)continue;const n=new Ke.Node("table",t.attributes,[new Ke.Node("thead"),new Ke.Node("tbody")]),[a,i]=n.children;"list"===e.type&&a.push(xt(e,"th"));for(const t of r){if("list"===t.type)xt(t);else{if("tag"!==t.type||"if"!==t.tag)continue;{const e=[];for(const r of t.children)"hr"!==r.type&&("list"===r.type&&xt(r),e.push(r));t.children=e}}i.push(t)}t.children=[n]}}],Ct={ordered_list:"list",bullet_list:"list",code_inline:"code",list_item:"item",variable:"text"};function Et(e,t){for(const r of t){e.annotations.push(r);const{name:t,value:n,type:a}=r;"attribute"===a?(void 0!==e.attributes[t]&&e.errors.push({id:"duplicate-attribute",level:"warning",message:`Attribute '${t}' already set`}),e.attributes[t]=n):"class"===a&&(e.attributes.class?e.attributes.class[t]=n:e.attributes.class={[t]:n})}}function St(e,t,r,n,a,i){if("frontmatter"===e.type)return void(t[0].attributes.frontmatter=e.content);if(e.hidden||"text"===e.type&&""===e.content)return;const o=e.errors||[],s=t[t.length-1],{tag:c,attributes:l,error:u}=e.meta||{};if("annotation"===e.type)return i?Et(i,l):s.errors.push({id:"no-inline-annotations",level:"error",message:`Can't apply inline annotations to '${s.type}'`});let f=e.type.replace(/_(open|close)$/,"");if(Ct[f]&&(f=Ct[f]),"error"===f){const{message:e,location:t}=u;o.push({id:"parse-error",level:"critical",message:e,location:t})}if(e.nesting<0){if(s.type===f&&s.tag===c)return s.lines&&e.map&&s.lines.push(...e.map),t.pop();o.push({id:"missing-opening",level:"critical",message:`Node '${f}' is missing opening`})}const p=function(e,t){switch(t){case"heading":return{level:Number(e.tag.replace("h",""))};case"list":{const t=e.attrs?Object.fromEntries(e.attrs):void 0,r=e.type.startsWith("ordered");return r&&t?.start?{ordered:!0,start:t.start,marker:e.markup}:{ordered:r,marker:e.markup}}case"link":{const t=Object.fromEntries(e.attrs);return t.title?{href:t.href,title:t.title}:{href:t.href}}case"image":{const t=Object.fromEntries(e.attrs);return t.title?{alt:e.content,src:t.src,title:t.title}:{alt:e.content,src:t.src}}case"em":case"strong":return{marker:e.markup};case"text":case"code":case"comment":return{content:(e.meta||{}).variable||e.content};case"fence":{const[t]=e.info.split(" ",1);return""===t||t===Pe?{content:e.content}:{content:e.content,language:t}}case"td":case"th":if(e.attrs){const t=Object.fromEntries(e.attrs);let r;if(t.style&&(t.style.includes("left")?r="left":t.style.includes("center")?r="center":t.style.includes("right")&&(r="right")),r)return{align:r}}return{};default:return{}}}(e,f),d=new We(f,p,void 0,c||void 0),{position:h={}}=e;if(d.errors=o,!1!==a&&(d.lines=e.map||s.lines||[],d.location={file:r,start:{line:d.lines[0],character:h.start},end:{line:d.lines[1],character:h.end}}),i&&(d.inline=!0),l&&["tag","fence","image"].includes(f)&&Et(d,l),n&&"slot"===c&&"string"===typeof d.attributes.primary?s.slots[d.attributes.primary]=d:s.push(d),e.nesting>0&&t.push(d),!Array.isArray(e.children))return;"inline"===d.type&&(i=s),t.push(d);if(!("image"===f))for(const m of e.children)St(m,t,r,n,a,i);t.pop()}var Dt={};f(Dt,{blockquote:()=>Lt,code:()=>Wt,comment:()=>Qt,document:()=>jt,em:()=>Zt,error:()=>er,fence:()=>zt,hardbreak:()=>Xt,heading:()=>Ot,hr:()=>Mt,image:()=>Ft,inline:()=>Yt,item:()=>It,link:()=>Gt,list:()=>Nt,node:()=>tr,paragraph:()=>qt,s:()=>Ht,softbreak:()=>Kt,strong:()=>Vt,table:()=>Tt,tbody:()=>Bt,td:()=>Pt,text:()=>Jt,th:()=>Rt,thead:()=>Ut,tr:()=>$t});var jt={render:"article",children:["heading","paragraph","image","table","tag","fence","blockquote","comment","list","hr"],attributes:{frontmatter:{render:!1}}},Ot={children:["inline"],attributes:{level:{type:Number,render:!1,required:!0}},transform:(e,t)=>new ze(`h${e.attributes.level}`,e.transformAttributes(t),e.transformChildren(t))},qt={render:"p",children:["inline"]},Ft={render:"img",attributes:{src:{type:String,required:!0},alt:{type:String},title:{type:String}}},zt={render:"pre",attributes:{content:{type:String,render:!1,required:!0},language:{type:String,render:"data-language"},process:{type:Boolean,render:!1,default:!0}},transform(e,t){const r=e.transformAttributes(t),n=e.children.length?e.transformChildren(t):[e.attributes.content];return new ze("pre",r,n)}},Lt={render:"blockquote",children:["heading","paragraph","image","table","tag","fence","blockquote","list","hr"]},It={render:"li",children:["inline","heading","paragraph","image","table","tag","fence","blockquote","list","hr"]},Nt={children:["item"],attributes:{ordered:{type:Boolean,render:!1,required:!0},start:{type:Number},marker:{type:String,render:!1}},transform:(e,t)=>new ze(e.attributes.ordered?"ol":"ul",e.transformAttributes(t),e.transformChildren(t))},Mt={render:"hr"},Tt={render:"table"},Pt={render:"td",children:["inline","heading","paragraph","image","table","tag","fence","blockquote","list","hr"],attributes:{align:{type:String},colspan:{type:Number,render:"colSpan"},rowspan:{type:Number,render:"rowSpan"}}},Rt={render:"th",attributes:{width:{type:Number},align:{type:String},colspan:{type:Number,render:"colSpan"},rowspan:{type:Number,render:"rowSpan"}}},$t={render:"tr",children:["th","td"]},Bt={render:"tbody",children:["tr","tag"]},Ut={render:"thead",children:["tr"]},Vt={render:"strong",children:["em","s","link","code","text","tag"],attributes:{marker:{type:String,render:!1}}},Zt={render:"em",children:["strong","s","link","code","text","tag"],attributes:{marker:{type:String,render:!1}}},Ht={render:"s",children:["strong","em","link","code","text","tag"]},Yt={children:["strong","em","s","code","text","tag","link","image","hardbreak","softbreak","comment"]},Gt={render:"a",children:["strong","em","s","code","text","tag"],attributes:{href:{type:String,required:!0},title:{type:String}}},Wt={render:"code",attributes:{content:{type:String,render:!1,required:!0}},transform(e,t){const r=e.transformAttributes(t);return new ze("code",r,[e.attributes.content])}},Jt={attributes:{content:{type:String,required:!0}},transform:e=>e.attributes.content},Xt={render:"br"},Kt={transform:()=>" "},Qt={attributes:{content:{type:String,required:!0}}},er={},tr={},rr=p(Ee()),{escapeHtml:nr}=(0,rr.default)().utils,ar=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function ir(e,t){return"string"!==typeof e?"Fragment":e[0]!==e[0].toUpperCase()?e:t instanceof Function?t(e):t[e]}function or(e){return e.map(cr).join(", ")}function sr(e){if(null==e||"object"!==typeof e)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map((e=>sr(e))).join(", ")}]`;if("Tag"===e.$$mdtype)return cr(e);if("object"!==typeof e)return JSON.stringify(e);return`{${Object.entries(e).map((([e,t])=>[JSON.stringify(e),sr(t)].join(": "))).join(", ")}}`}function cr(e){if(Array.isArray(e))return`React.createElement(React.Fragment, null, ${or(e)})`;if(null===e||"object"!==typeof e||!ze.isTag(e))return JSON.stringify(e);const{name:t,attributes:{class:r,...n}={},children:a=[]}=e;return r&&(n.className=r),`React.createElement(\n tagName(${JSON.stringify(t)}, components),\n ${0==Object.keys(n).length?"null":sr(n)},\n ${or(a)})`}var lr={html:function e(t){if("string"===typeof t||"number"===typeof t)return nr(String(t));if(Array.isArray(t))return t.map(e).join("");if(null===t||"object"!==typeof t||!ze.isTag(t))return"";const{name:r,attributes:n,children:a=[]}=t;if(!r)return e(a);let i=`<${r}`;for(const[o,s]of Object.entries(n??{}))i+=` ${o.toLowerCase()}="${nr(String(s))}"`;return i+=">",ar.has(r)||(a.length&&(i+=e(a)),i+=``),i},react:function(e,t,{components:r={}}={}){function n(e){if(null==e||"object"!==typeof e)return e;if(Array.isArray(e))return e.map((e=>n(e)));if("Tag"===e.$$mdtype)return a(e);if("object"!==typeof e)return e;const t={};for(const[r,a]of Object.entries(e))t[r]=n(a);return t}function a(e){if(Array.isArray(e))return t.createElement(t.Fragment,null,...e.map(a));if(null===e||"object"!==typeof e||!ze.isTag(e))return e;const{name:i,attributes:{class:o,...s}={},children:c=[]}=e;return o&&(s.className=o),t.createElement(function(e,t){return"string"!==typeof e||e[0]!==e[0].toUpperCase()?e:t instanceof Function?t(e):t[e]}(i,r),0==Object.keys(s).length?null:n(s),...c.map(a))}return a(e)},reactStatic:function(e){return`\n (({components = {}} = {}) => {\n ${ir}\n return ${cr(e)};\n })\n`}},ur={else:_t,if:kt,partial:{inline:!1,selfClosing:!0,attributes:{file:{type:class{validate(e,t){const{partials:r={}}=t;return r[e]?[]:[{id:"attribute-value-invalid",level:"error",message:`Partial \`${e}\` not found. The 'file' attribute must be set in \`config.partials\``}]}},render:!1,required:!0},variables:{type:Object,render:!1}},transform(e,t){const{partials:r={}}=t,{file:n,variables:a}=e.attributes,i=r[n];if(!i)return null;const o={...t,variables:{...t.variables,...a,"$$partial:filename":n}},s=e=>e.resolve(o).transformChildren(o);return Array.isArray(i)?i.flatMap(s):s(i)}},slot:{attributes:{primary:{type:String,required:!0}}},table:{children:["table"],inline:!1}},fr=p(Ce()),pr=p(d());function dr(e,t,r){try{const{type:r,meta:n,nesting:a=0}=(0,pr.parse)(t,{Variable:Me,Function:Te}),i=e.push(r,"",a);return i.info=t,i.meta=n,e.delimiters||(e.delimiters=[]),i}catch(n){if(!(n instanceof pr.SyntaxError))throw n;const{message:t,location:{start:a,end:i}}=n,o=r?{start:{offset:a.offset+r},end:{offset:i.offset+r}}:null,s=e.push("error","",0);return s.meta={error:{message:t,location:o}},s}}function hr(e,t,r,n){const a=e.bMarks[t]+e.tShift[t],i=e.eMarks[t];if(!e.src.startsWith(Pe,a))return!1;const o=Ve(e.src,a),s=e.src.slice(0,i).trim().length;if(!o||o"process"===e.name&&!e.value))||(t.children=He(t.content,t.map[0]))}}function br(e){e.block.ruler.before("paragraph","annotations",hr,{alt:["paragraph","blockquote"]}),e.inline.ruler.push("containers",mr),e.core.ruler.push("annotations",gr)}var yr="---";function vr(e,t){return e.src.slice(e.bMarks[t],e.eMarks[t]).trim()}function kr(e,t,r,n){if(0!=t||vr(e,0)!=yr)return!1;const a=function(e,t){for(let r=1;rt===e)):n.returns===e)}if(Ke.isAst(t))return!0;if(Array.isArray(e))return e.some((e=>jr(e,t,r,n)));if("string"===typeof e&&(e=Dr[e]),"function"===typeof e){const a=new e;if(a.validate)return a.validate(t,r,n)}return null!=t&&t.constructor===e}function Or(e){return"string"===typeof e?e:Array.isArray(e)?e.map(Or).join(" | "):e.name}function qr(e,t){const r=t.functions?.[e.name],n=[];if(!r)return[{id:"function-undefined",level:"critical",message:`Undefined function: '${e.name}'`}];if(r.validate&&n.push(...r.validate(e,t)),r.parameters)for(const[a,i]of Object.entries(e.parameters)){const o=r.parameters?.[a];if(o){if((!Ke.isAst(i)||Ke.isFunction(i))&&o.type){const r=jr(o.type,i,t,a);!1===r?n.push({id:"parameter-type-invalid",level:"error",message:`Parameter '${a}' of '${e.name}' must be type of '${Or(o.type)}'`}):Array.isArray(r)&&n.push(...r)}}else n.push({id:"parameter-undefined",level:"error",message:`Invalid parameter: '${a}'`})}for(const[a,{required:i}]of Object.entries(r.parameters??{}))i&&void 0===e.parameters[a]&&n.push({id:"parameter-missing-required",level:"error",message:`Missing required parameter: '${a}'`});return n}function Fr(e,t){if(e.length<=t)return JSON.stringify(e);return`[${e.slice(0,t).map((e=>JSON.stringify(e))).join(",")}, ... ${e.length-t} more]`}function zr(e,t){const r=e.findSchema(t),n=[...e.errors||[]];if(!r)return n.push({id:e.tag?"tag-undefined":"node-undefined",level:"critical",message:e.tag?`Undefined tag: '${e.tag}'`:`Undefined node: '${e.type}'`}),n;void 0!=r.inline&&e.inline!==r.inline&&n.push({id:"tag-placement-invalid",level:"critical",message:`'${e.tag}' tag should be ${r.inline?"inline":"block"}`}),r.selfClosing&&e.children.length>0&&n.push({id:"tag-selfclosing-has-children",level:"critical",message:`'${e.tag}' tag should be self-closing`});const a={...Ye,...r.attributes};for(const i of Object.keys(e.slots)){const e=r.slots?.[i];e||n.push({id:"slot-undefined",level:"error",message:`Invalid slot: '${i}'`})}for(let[i,o]of Object.entries(e.attributes)){const e=a[i];if(!e){n.push({id:"attribute-undefined",level:"error",message:`Invalid attribute: '${i}'`});continue}let{type:r,matches:s,errorLevel:c}=e;if(Ke.isAst(o))if(Ke.isFunction(o)&&t.validation?.validateFunctions)n.push(...qr(o,t));else{if(!Ke.isVariable(o)||!t.variables)continue;{let e=!1,r=t.variables;for(const t of o.path){if(!Object.prototype.hasOwnProperty.call(r,t)){e=!0;break}r=r[t]}e&&n.push({id:"variable-undefined",level:"error",message:`Undefined variable: '${o.path.join(".")}'`})}}if(r){const e=jr(r,o,t,i);!1===e&&n.push({id:"attribute-type-invalid",level:c||"error",message:`Attribute '${i}' must be type of '${Or(r)}'`}),Array.isArray(e)&&n.push(...e)}if("function"===typeof s&&(s=s(t)),Array.isArray(s)&&!s.includes(o)&&n.push({id:"attribute-value-invalid",level:c||"error",message:`Attribute '${i}' must match one of ${Fr(s,8)}. Got '${o}' instead.`}),s instanceof RegExp&&!s.test(o)&&n.push({id:"attribute-value-invalid",level:c||"error",message:`Attribute '${i}' must match ${s}. Got '${o}' instead.`}),"function"===typeof e.validate){const r=e.validate(o,t,i);Array.isArray(r)&&n.push(...r)}}for(const[i,{required:o}]of Object.entries(a))o&&void 0===e.attributes[i]&&n.push({id:"attribute-missing-required",level:"error",message:`Missing required attribute: '${i}'`});if(r.slots)for(const[i,{required:o}]of Object.entries(r.slots))o&&void 0===e.slots[i]&&n.push({id:"slot-missing-required",level:"error",message:`Missing required slot: '${i}'`});for(const{type:i}of e.children)r.children&&"error"!==i&&!r.children.includes(i)&&n.push({id:"child-invalid",level:"warning",message:`Can't nest '${i}' in '${e.tag||e.type}'`});if(r.validate){const a=r.validate(e,t);if(Ue(a))return a.then((e=>n.concat(e)));n.push(...a)}return n}function*Lr(e,t=[]){yield[e,t];for(const r of[...Object.values(e.slots),...e.children])yield*Lr(r,[...t,e])}var Ir=new Sr;function Nr(e={}){return{...e,tags:{...ur,...e.tags},nodes:{...Dt,...e.nodes},functions:{...wt,...e.functions}}}function Mr(e,t){return"string"===typeof e&&(e=Ir.tokenize(e)),function(e,t){const r=new We("document"),n=[r];"string"===typeof t&&(t={file:t});for(const a of e)St(a,n,t?.file,t?.slots,t?.location);if(n.length>1)for(const a of n.slice(1))a.errors.push({id:"missing-closing",level:"critical",message:`Node '${a.tag||a.type}' is missing closing`});for(const a of At)a(r);return r}(e,t)}function Tr(e,t){return Array.isArray(e)?e.flatMap((e=>e.resolve(t))):e.resolve(t)}function Pr(e,t){const r=Nr(t),n=Tr(e,r);return Array.isArray(n)?n.flatMap((e=>e.transform(r))):n.transform(r)}function Rr(e,t){return function(e,t){const r=[...Lr(e)].map((([e,r])=>{const{type:n,lines:a,location:i}=e,o=zr(e,{...t,validation:{...t.validation,parents:r}});return Ue(o)?o.then((e=>e.map((e=>({type:n,lines:a,location:i,error:e}))))):o.map((e=>({type:n,lines:a,location:i,error:e})))}));return r.some(Ue)?Promise.all(r).then((e=>e.flat())):r.flat()}(e,Nr(t))}var $r=class{constructor(e){this.parse=Mr,this.resolve=e=>Tr(e,this.config),this.transform=e=>Pr(e,this.config),this.validate=e=>Rr(e,this.config),this.config=e}};$r.nodes=Dt,$r.tags=ur,$r.functions=wt,$r.globalAttributes=Ye,$r.renderers=lr,$r.transforms=At,$r.Ast=Ke,$r.Tag=ze,$r.Tokenizer=Sr,$r.parseTags=He,$r.transformer=Ge,$r.validator=zr,$r.parse=Mr,$r.transform=Pr,$r.validate=Rr,$r.createElement=function(e,t={},...r){return{name:e,attributes:t,children:r}},$r.truthy=vt,$r.format=yt},33436:(e,t,r)=>{function n(e,{target:t=document.body}={}){if("string"!==typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=e,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const a=document.getSelection(),i=a.rangeCount>0&&a.getRangeAt(0);t.append(r),r.select(),r.selectionStart=0,r.selectionEnd=e.length;let o=!1;try{o=document.execCommand("copy")}catch{}return r.remove(),i&&(a.removeAllRanges(),a.addRange(i)),n&&n.focus(),o}r.d(t,{A:()=>n})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7529.658d363e12e73df83b60.chunk.js b/src/web/gui/v2/7529.658d363e12e73df83b60.chunk.js deleted file mode 100644 index b5c87231b..000000000 --- a/src/web/gui/v2/7529.658d363e12e73df83b60.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fef08628-86a7-43cd-a204-367ad851ff11",e._sentryDebugIdIdentifier="sentry-dbid-fef08628-86a7-43cd-a204-367ad851ff11")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7529],{67529:(e,n,d)=>{d.r(n),d.d(n,{AuthTokenCallback:()=>t,default:()=>a});var f=d(96540),o=d(38819);const t=()=>{const e=(0,o.W6)("redirect_uri"),n=(0,o.W6)("token");return(0,f.useEffect)((()=>{e&&n&&(localStorage.setItem("netdataJWT",n),location.href=decodeURIComponent(e))}),[]),null},a=t}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7840.2f2023f2eb1dcc943d94.chunk.js b/src/web/gui/v2/7840.2f2023f2eb1dcc943d94.chunk.js deleted file mode 100644 index c69510bf7..000000000 --- a/src/web/gui/v2/7840.2f2023f2eb1dcc943d94.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="8601ed23-6969-43ce-a05e-e4f49fef792e",e._sentryDebugIdIdentifier="sentry-dbid-8601ed23-6969-43ce-a05e-e4f49fef792e")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7840],{17840:(e,t,r)=>{r.r(t),r.d(t,{default:()=>h});var n=r(96540),o=r(47767),a=(r(30067),r(93518),r(17333),r(41393),r(8159),r(98992),r(54520),r(81454),r(37550),r(62953),r(3296),r(27208),r(48408),r(83199)),c=r(22292),i=r(79731),s=r(9224);const u=new URLSearchParams(window.location.search.substr(1)),d=()=>{location.assign("https://registry.my-netdata.io/goto-host-from-alarm.html".concat(location.search))},l=e=>fetch(e,{redirect:"follow"}).then((()=>e)),f=e=>{let t="top;nowelcome=1";for(let[n,o]of u.entries())n=decodeURIComponent(n),"agentID"!==n&&(t+=";".concat(encodeURIComponent(n)),o=decodeURIComponent(o),""!==o&&(t+="=".concat(encodeURIComponent(o))));const r=new URL(e);return"/"===r.pathname&&(r.pathname=""),r.hash=t,r.toString()},p=(e,t)=>{if(!u.has("agentID"))return void(document.body.innerHTML='

    missing "agentID" query string parameter

    ');(async(e,t)=>{try{return(await(0,s.tz)(t,e)).data}catch(r){const{data:e}=r.response;document.body.innerHTML="".concat((0,i.o)(null===e||void 0===e?void 0:e.errorMsgKey),"

    Getting you back to Netdata...");const t=new Error((0,i.o)(null===e||void 0===e?void 0:e.errorMsgKey)||"Redirect error");throw t.name="".concat((null===e||void 0===e?void 0:e.errorMsgKey)||"Server error"),t.stack="".concat((null===e||void 0===e?void 0:e.errorCode)||"Redirect error code"),t}})(decodeURIComponent(u.get("agentID")||"unknown_agent_id"),e).catch((e=>{if("ErrVisitedNodeNotFound"!==(null===e||void 0===e?void 0:e.name))throw document.body.innerHTML="

    ".concat(null===e||void 0===e?void 0:e.message,"

    "),e;d()})).then((e=>{var r;const n=null===e||void 0===e||null===(r=e.urls)||void 0===r?void 0:r.map(f),o="https:"===location.protocol&&n.some((e=>!e.startsWith("https:"))),a=o?n.filter((e=>e.startsWith("https:"))):n;if(0!==a.length)return Promise.any(a.map(l)).then((()=>{location.assign("url".concat(t))}),(()=>{o?location.protocol="http:":document.body.innerHTML="\n
    \n ")}));o?location.protocol="http:":d()}))},v=()=>{const e=(0,c.NJ)(),{search:t}=(0,o.zy)();return(0,n.useEffect)((()=>{e&&p(e,t||"")}),[e,t]),n.createElement(a.H4,null,"Redirecting...")},h=()=>n.createElement(o.BV,null,n.createElement(o.qh,{path:"/redirects/alerts",element:n.createElement(v,null)}),n.createElement(o.qh,{path:"/redirects/alarms",element:n.createElement(v,null)})," ")},84428:(e,t,r)=>{var n=r(78227)("iterator"),o=!1;try{var a=0,c={next:function(){return{done:!!a++}},return:function(){o=!0}};c[n]=function(){return this},Array.from(c,(function(){throw 2}))}catch(i){}e.exports=function(e,t){try{if(!t&&!o)return!1}catch(i){return!1}var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},e(a)}catch(i){}return r}},87290:(e,t,r)=>{var n=r(50516),o=r(19088);e.exports=!n&&!o&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,t,r)=>{var n=r(24475),o=r(44576);e.exports="process"===o(n.process)},16193:(e,t,r)=>{var n=r(79504),o=Error,a=n("".replace),c=String(new o("zxcasd").stack),i=/\n\s*at [^:]*:[^\n]*/,s=i.test(c);e.exports=function(e,t){if(s&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=a(e,i,"");return e}},80747:(e,t,r)=>{var n=r(66699),o=r(16193),a=r(24659),c=Error.captureStackTrace;e.exports=function(e,t,r,i){a&&(c?c(e,t):n(e,"stack",o(r,i)))}},24659:(e,t,r)=>{var n=r(79039),o=r(6980);e.exports=!n((function(){var e=new Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},77584:(e,t,r)=>{var n=r(20034),o=r(66699);e.exports=function(e,t){n(t)&&"cause"in t&&o(e,"cause",t.cause)}},32603:(e,t,r)=>{var n=r(655);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},10916:(e,t,r)=>{var n=r(24475),o=r(80550),a=r(94901),c=r(92796),i=r(33706),s=r(78227),u=r(87290),d=r(50516),l=r(96395),f=r(77388),p=o&&o.prototype,v=s("species"),h=!1,g=a(n.PromiseRejectionEvent),m=c("Promise",(function(){var e=i(o),t=e!==String(o);if(!t&&66===f)return!0;if(l&&(!p.catch||!p.finally))return!0;if(!f||f<51||!/native code/.test(e)){var r=new o((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};if((r.constructor={})[v]=n,!(h=r.then((function(){}))instanceof n))return!0}return!t&&(u||d)&&!g}));e.exports={CONSTRUCTOR:m,REJECTION_EVENT:g,SUBCLASSING:h}},90537:(e,t,r)=>{var n=r(80550),o=r(84428),a=r(10916).CONSTRUCTOR;e.exports=a||!o((function(e){n.all(e).then(void 0,(function(){}))}))},17145:(e,t,r)=>{var n=r(46518),o=r(1625),a=r(42787),c=r(52967),i=r(77740),s=r(2360),u=r(66699),d=r(6980),l=r(77584),f=r(80747),p=r(72652),v=r(32603),h=r(78227)("toStringTag"),g=Error,m=[].push,y=function(e,t){var r,n=o(b,this);c?r=c(new g,n?a(this):b):(r=n?this:s(b),u(r,h,"Error")),void 0!==t&&u(r,"message",v(t)),f(r,y,r.stack,1),arguments.length>2&&l(r,arguments[2]);var i=[];return p(e,m,{that:i}),u(r,"errors",i),r};c?c(y,g):i(y,g,{name:!0});var b=y.prototype=s(g.prototype,{constructor:d(1,y),message:d(1,""),name:d(1,"AggregateError")});n({global:!0,constructor:!0,arity:2},{AggregateError:y})},30067:(e,t,r)=>{r(17145)},93518:(e,t,r)=>{var n=r(46518),o=r(69565),a=r(79306),c=r(97751),i=r(36043),s=r(1103),u=r(72652),d=r(90537),l="No one promise resolved";n({target:"Promise",stat:!0,forced:d},{any:function(e){var t=this,r=c("AggregateError"),n=i.f(t),d=n.resolve,f=n.reject,p=s((function(){var n=a(t.resolve),c=[],i=0,s=1,p=!1;u(e,(function(e){var a=i++,u=!1;s++,o(n,t,e).then((function(e){u||p||(p=!0,d(e))}),(function(e){u||p||(u=!0,c[a]=e,--s||f(new r(c,l)))}))})),--s||f(new r(c,l))}));return p.error&&f(p.value),n.promise}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/785.d016913841bcc0209d5b.chunk.js b/src/web/gui/v2/785.d016913841bcc0209d5b.chunk.js deleted file mode 100644 index 8b95ef5d9..000000000 --- a/src/web/gui/v2/785.d016913841bcc0209d5b.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="9ed79861-050e-4ee2-ae0b-209bed9bcbc6",e._sentryDebugIdIdentifier="sentry-dbid-9ed79861-050e-4ee2-ae0b-209bed9bcbc6")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[785],{52919:(e,t,a)=>{a.d(t,{D7:()=>r,Jp:()=>d,NT:()=>u,N_:()=>h,iS:()=>s,vE:()=>i,v_:()=>o,xI:()=>c,z6:()=>m});var n=a(8711),l=a(83199);const o=n.default.img.withConfig({displayName:"styled__Illustration",componentId:"sc-1yhntgl-0"})(["margin:0 auto;"]),r=(0,n.default)(l.Text).withConfig({displayName:"styled__StyledText",componentId:"sc-1yhntgl-1"})(["display:block;"]),d=n.default.div.withConfig({displayName:"styled__TextHeader",componentId:"sc-1yhntgl-2"})(["margin-bottom:",";font-weight:700;"],(0,l.getSizeBy)(2)),c=n.default.div.withConfig({displayName:"styled__StaticCheckmarks",componentId:"sc-1yhntgl-3"})(["margin-top:",";margin-bottom:",";"],(0,l.getSizeBy)(2),(0,l.getSizeBy)(5)),s=n.default.div.withConfig({displayName:"styled__CheckmarkLine",componentId:"sc-1yhntgl-4"})(["display:flex;align-items:center;"]),i=(0,n.default)(l.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-1yhntgl-5"})(["margin-right:4px;height:18px;> use{fill:",";}"],(0,l.getColor)("primary")),u=(0,n.default)(i).withConfig({displayName:"styled__HelpIcon",componentId:"sc-1yhntgl-6"})(["vertical-align:middle;"]),m=n.default.div.withConfig({displayName:"styled__LearnMoreSection",componentId:"sc-1yhntgl-7"})(["margin-top:",";"],(0,l.getSizeBy)(4)),h=n.default.a.withConfig({displayName:"styled__Link",componentId:"sc-1yhntgl-8"})(["text-decoration:underline;color:",";&:visited{color:",";}"],(0,l.getColor)("success"),(0,l.getColor)("success"))},40785:(e,t,a)=>{a.r(t),a.d(t,{DashboardContent:()=>ze,default:()=>Fe});var n=a(96540),l=a(47767),o=a(43124);var r=a(56820),d=a(3914),c=a(69765),s=a(35304),i=a(21591),u=a(68980),m=a(54621),h=a(91517),b=a(28738);const g=()=>n.createElement(b.A,{title:"Loading charts...","data-testid":"dashboardLoading"});a(62953);var f=a(67602),p=a(3705),v=a(86652),E=a(58388),y=a(11128),C=a(47762),A=a(58168),x=a(83199),w=a(49667);const I=e=>{let{compact:t,...a}=e;const[,l]=(0,f.A)("addChartModal"),o=(0,C.TG)().length>0;return n.createElement(x.Flex,(0,A.A)({column:!0,alignItems:"center",justifyContent:"center",overflow:{vertical:"auto"},flex:!0,basis:0,"data-testid":"dashboardBlankSlate"},a),!t&&n.createElement(x.Flex,{as:"img",src:w.$,height:"35%"}),n.createElement(x.H3,{margin:[6,0,2]},"Empty Dashboard"),o?n.createElement(n.Fragment,null,n.createElement(x.Text,{textAlign:"center"},"Let\u2019s fill your dashboard."),n.createElement(x.Text,{textAlign:"center"},"Go to a node view or node list and add one chart to this Dashboard or just use")):n.createElement(n.Fragment,null,n.createElement(x.Text,{textAlign:"center"},"You don't have any available node to retrieve charts from."),n.createElement(x.Text,{textAlign:"center"},"Please verify your nodes' state and/or connect a new node to Netdata")),!t&&n.createElement(x.Button,{margin:[8,0,0,0],onClick:l,disabled:!o,label:"Add chart","data-testid":"dashboardBlankSlate-addChart"}))};a(3064),a(41393),a(98992),a(72577),a(81454);var k=a(15327),D=a(74618),N=a(45765),S=a(67990),_=a(69388),T=a(23931),z=a(57605),F=a(67544),M=(a(9920),a(3949),a(45387)),B=a(36196),L=a(80925),R=a(13752),j=a(92815),H=a(72582),G=a(64125),U=a(44644),K=a(29217);const O=()=>n.createElement(x.Flex,{column:!0,width:"300px",gap:1},n.createElement(x.TextSmall,{strong:!0},"Not finding a chart?"),n.createElement(x.TextSmall,null,"When selecting",n.createElement(x.TextSmall,{strong:!0,margin:[0,1]},"All Nodes"),"you search and add charts using their context. The outcome will be a composite chart over All Nodes, like on the Overview tab."),n.createElement(x.TextSmall,null,"When you select a",n.createElement(x.TextSmall,{strong:!0,margin:[0,1]},"specific Node"),"you search and add charts using their name. The result is a specific chart over the node selected, like on Single Node tab.")),Y=()=>n.createElement(K.A,{isBasic:!0,plain:!0,content:O,align:"bottom"},n.createElement(x.Icon,{name:"question",color:"textDescription",size:"small"})),J=e=>{let{spaceId:t,roomId:a,value:l,onChange:o,options:r,testid:c,selectedNodeIds:s}=e;const i=null===l||void 0===l?void 0:l.value,u=(0,L.e)(),m=(0,T.R7)(i&&a,i),h=(0,d.dg)(),b=(0,U.CS)({type:"chart",entity:i}),g=(0,n.useMemo)((()=>{u.getNodes({id:"newDashboardChart"}).forEach((e=>e.destroy()));const{info:e,valueRange:n,height:l,colors:o}=(0,M.Ay)(m),r=u.makeChart({attributes:{id:"newDashboardChart",contextScope:[i],host:h?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(t,"/rooms/").concat(a),roomId:a,info:e,valueRange:n,height:l+207,enabledNavigation:!1,selectedNodes:s,...o&&{colors:o},toolboxElements:[H.default,R.default,j.default,G.A]}});return u.getRoot().appendChild(r),r}),[u,i]);return(0,n.useLayoutEffect)((()=>{g&&b&&(g.updateAttributes(b),g.trigger("fetch"))}),[g,a,i,b]),(0,n.useLayoutEffect)((()=>()=>g.destroy()),[]),n.createElement(x.Flex,{gap:6,column:!0},n.createElement(x.Flex,{gap:2,column:!0,"data-testid":c},n.createElement(x.Flex,{gap:2},n.createElement(x.H5,null,"Context in room overview"),n.createElement(Y,null)),n.createElement(x.Select,{options:r,value:l,onChange:o,isClearable:!0,form:c})),l&&n.createElement(x.Flex,{height:{min:"320px"},column:!0},n.createElement(B.A,{chart:g,margin:[2,0,0]})))};var W=a(18202);const P={label:"All Nodes",value:"all-nodes"},X={label:"All Nodes (no reachable nodes)",value:"all-nodes",isDisabled:!0},q=e=>{let{id:t,isLive:a,nodeStatus:n,name:l}=e;return{label:a?l:"".concat(l," (").concat(n,")"),value:t,isDisabled:!a}},Q=e=>({value:e,label:e}),V=e=>{let{id:t,onClose:a}=e;const l=(0,d.vt)(),o=(0,c.ID)(),r=(0,u.fz)(t,"name"),s=(0,c.XA)("name"),i=(0,S.CK)(),m=(0,C.BU)().length>0,h=(0,S.nj)(),b=(0,C.Gt)(i),g=(0,F.nM)(t),f=m?P:X,[p,v]=(0,n.useState)(f.value),[E,y]=(0,n.useState)(null),A=(0,n.useMemo)((()=>[f,...b.map(q)]),[b]),w=(0,n.useMemo)((()=>A.find((e=>{let{value:t}=e;return t===p}))),[A,p]),I=(0,n.useCallback)((e=>{v((null===e||void 0===e?void 0:e.value)||f.value),y(null)}),[]),M=(0,n.useMemo)((()=>p===f.value?[]:[p]),[p]),B=(0,_.A)(o,M,{spaceId:l});if(B)throw B;const R=(0,T.R7)(o),j=(0,n.useMemo)((()=>Object.keys(R).sort(((e,t)=>e.localeCompare(t,void 0,{sensitivity:"accent",ignorePunctuation:!0}))).map(Q)),[R]);(0,n.useEffect)((()=>{j.length&&w&&y((e=>e||j[0].value))}),[E,j,w]);const H=(0,n.useMemo)((()=>E&&Q(E)),[E]),G=(0,n.useCallback)((e=>y(null===e||void 0===e?void 0:e.value)),[]),U=R[E],K=(0,L.e)(),O=(0,n.useCallback)((()=>{const e=K.getNode({id:"newDashboardChart"}),t=(0,W.A)(e.getAttributes());g(t.contextScope,t,(()=>setTimeout(a)))}),[p,U]),Y=!E,V=(0,z.A)();return(0,n.useEffect)((()=>(V(!0),()=>V(!1)))),n.createElement(k.GO,{onClose:a},n.createElement(D.z,{onClose:a,title:"Add Chart to Dashboard"},n.createElement(x.Button,{label:"Add chart",icon:"plus",onClick:O,disabled:Y,"data-testid":"addChartModal-addChart-button"})),n.createElement(N.U,null,"Add Charts to ",r),n.createElement(k.Yv,{overflow:"visible"},n.createElement(x.Flex,{gap:6,column:!0},n.createElement(x.Flex,{gap:2,column:!0,"data-testid":"addChartModal-selectNodes"},n.createElement(x.H5,null,"Nodes in ",s),n.createElement(x.Select,{options:A,value:w,onChange:I,isLoading:!h,isClearable:!0,form:"addChartModal-selectNodes"})),H&&n.createElement(J,{id:t,spaceId:l,roomId:o,value:H,onChange:G,options:j,testid:"addChartModal-selectChart",selectedNodeIds:M}))))};var Z=a(83084),$=a(76777),ee=a(27467),te=a(16579),ae=a(63314),ne=(a(14905),a(8872),a(79304)),le=a(44554);const oe=function(e,t){let{containerIds:a,containers:n,layout:l}=e,{extraKey:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r={},d=a.reduce(((e,a)=>{const d=(0,le.bj)(l[a],"vertical");return e[a]={...n[a],level:0,id:a,subMenuIds:d.reduce(((e,n)=>{let{id:l}=n;return"text"!==t(l).type&&e.push("".concat(a,"|").concat(l)),e}),[]),subMenuChartIds:[],link:"".concat((0,ne.A)("menu_".concat(a))),forceVisibility:!0,arFlavour:"anomaly",extraKey:o},d.forEach((e=>{const n="".concat(a,"|").concat(e.id),l=t(e.id);"text"!==l.type&&(r[n]={name:l.title,level:1,id:n,menuGroupId:a,chartIds:[],link:"".concat((0,ne.A)("menu_".concat(a,"_submenu_").concat(n))),arFlavour:"anomaly",showAR:!1,extraKey:o})})),e}),{});return{menuGroupIds:a,menuGroupById:d,subMenuById:r}};var re=a(75793);const de=e=>{let{id:t}=e;const a=(0,u.fz)(t,"name");return n.createElement(re.A,{TextComponent:x.H0,text:a})};var ce=a(46741);const se=()=>{const[,e]=(0,f.A)("addChartModal"),t=(0,ce.JT)("dashboard:Update");return(0,C.TG)().length>0?n.createElement(x.Button,{neutral:!0,flavour:"hollow",label:"Add chart",icon:"chart_added",onClick:e,"data-testid":"dashboardHeaderActionBar-addChart-button","data-ga":"action-bar::click-add-chart::cust-dashboard",disabled:!t}):null},ie=e=>{let{id:t}=e;const a=(0,F.Kv)(t),l=(0,ce.JT)("dashboard:Update");return n.createElement(x.Button,{neutral:!0,flavour:"hollow",label:"Add text",icon:"text_add",onClick:a,"data-testid":"dashboardHeaderActionBar-addText-button","data-ga":"action-bar::click-add-text::cust-dashboard",disabled:!l})};var ue=a(71835),me=a(2025),he=a(64754);const be=e=>{let{id:t}=e;const[,a]=(0,ue.A)(),l=(0,me.DH)(t,{onFail:a}),o=(0,u.fz)(t,"processing"),r=(0,u.fz)(t,"isOwner"),d=(0,u.zN)(t);return n.createElement(he.A,{permission:r?"dashboard:UpdateSelf":"dashboard:Update",flavour:"hollow",label:"Save",icon:"save",onClick:()=>l(),disabled:d,isLoading:o,"data-testid":"dashboardHeaderActionBar-save-button","data-ga":"action-bar::click-save::cust-dashboard"})},ge=e=>{let{id:t}=e;return n.createElement(x.Flex,{gap:2},n.createElement(se,null),n.createElement(ie,{id:t}),n.createElement(be,{id:t}))},fe=(0,n.memo)(ge);var pe=a(58384),ve=a(87659),Ee=a(78969),ye=a(92138),Ce=a(8018),Ae=a(52919);const xe=e=>{let{close:t}=e;const[a,o]=(0,n.useState)(!0),r=(0,u.zi)(),[d,s]=(0,u.TN)({id:r,key:"name"}),i=(0,u.oj)("slug"),h=(0,ye.A)(i),[b,g]=(0,n.useState)(d),f=(0,me.DH)(r),p=(0,m.DF)(),v=(0,l.Zp)(),E=(0,c.r9)(),y=b.length>0,C=a&&y&&b!==d,A=(0,n.useCallback)((()=>{s(b),f().then((e=>{let{data:a}=e;const{slug:n}=a;if(h===n)return void t();const l="".concat(E,"/dashboards/").concat(n);p({id:r,slug:n,path:l}),v(l,{replace:!0}),t()}))}),[t,b,r,E,h]);return n.createElement(k.GO,{onClose:t,"data-testid":"renameDashboard-modal"},n.createElement(D.z,{onClose:t,title:"Rename Dashboard"},n.createElement(x.Button,{label:"Save Changes",onClick:A,disabled:!C})),n.createElement(N.U,{"data-testid":"renameDashboard-title"},"Rename dashboard ",d),n.createElement(k.Yv,null,n.createElement(Ce.A,{value:b,label:"Name",onChange:e=>{g(e.target.value)},isValid:a,setIsValid:o,isDirty:y,instantFeedback:"all",onKeyDown:e=>e.keyCode===Ee.I7&&C&&A(),"data-testid":"renameDashboard-input"}),n.createElement(x.Flex,{column:!0,justifyContent:"between",height:"100%",margin:[8,0,16],"data-testid":"renameDashboard-learnMoreSection"},n.createElement(Ae.z6,null,n.createElement(Ae.NT,{name:"help"}),n.createElement(x.Text,null,"Learn more about Dashboards")," ",n.createElement(Ae.N_,{href:"https://learn.netdata.cloud/docs/cloud/visualize/dashboards",target:"_blank",rel:"noopener noreferrer"},"In our documentation")),n.createElement(Ae.v_,{src:w.$}))))},we=()=>{const e=(0,l.Zp)(),t=(0,d.bq)(),a=(0,c.QW)(),o=(0,u.zi)(),{name:r}=(0,u.fz)(o),s=(0,c.XA)("name"),[i,,m,h]=(0,ve.A)(),[b,,g,f]=(0,ve.A)(),p=(0,n.useCallback)((()=>{e("/spaces/".concat(t,"/rooms/").concat(a,"/dashboards"))}),[t,a]),v=(0,F.A_)(o,{onSuccess:p}),E=(0,ce.JT)("dashboard:Update"),y=(0,ce.JT)("dashboard:Delete");return n.createElement(n.Fragment,null,n.createElement(pe.A,{category:"dashboard",context:"title",testId:"dashboardDropdown"},(e=>{let{close:t}=e;return n.createElement(n.Fragment,null,n.createElement(pe.t,{icon:"pencilOutline",onClick:()=>{t(),g()},"data-testid":"renameDashboard-option","data-ga":"dropdown-item::click-rename-dashboard::cust-dashboard",disabled:!E},"Rename Dashboard"),n.createElement(pe.t,{icon:"trashcan",color:"errorText",onClick:()=>{t(),m()},"data-testid":"removeDashboard-option","data-ga":"dropdown-item::click-remove-dashboard::cust-dashboard",disabled:!y},"Delete Dashboard"))})),b&&n.createElement(xe,{close:f}),i&&n.createElement(x.ConfirmationDialog,{confirmLabel:"Yes, delete","data-ga":"delete-dashboard-dialog","data-testid":"deleteDashboardDialog",handleConfirm:v,handleDecline:h,message:n.createElement(n.Fragment,null,"You are about to delete ",n.createElement("strong",null,r)," from ",n.createElement("strong",null,s),".",n.createElement("br",null),"Are you sure you want to continue?"),title:"Delete ".concat(r)}))},Ie=e=>{let{id:t}=e;return n.createElement(x.Flex,{justifyContent:"between",padding:[3],"data-testid":"dashboardHeader"},n.createElement(x.Flex,{alignItems:"center"},n.createElement(we,null),n.createElement(de,{id:t})),n.createElement(fe,{id:t}))},ke=(0,n.memo)(Ie);var De=a(86008);const Ne=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];!function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const{navigator:a}=(0,n.useContext)(l.jb),o=(0,l.zy)();(0,n.useEffect)((()=>{if(!t)return;const n=a.block((t=>{const a={...t,retry(){n(),t.retry()}};e(a)}));return n}),[a,e,t,o])}((0,n.useCallback)((t=>{"REPLACE"!==t.action?window.confirm(e)&&t.retry():t.retry()}),[e]),t)},Se=()=>((0,$.A)(),null),_e=(0,n.memo)((e=>{let{id:t}=e;const[a,,,l]=(0,f.A)("addChartModal"),{fullyLoaded:o,cardIds:r,name:d}=(0,u.fz)(t);(e=>{const t=(0,u.zN)(e);Ne("Are you sure you want to leave this dashboard?\nChanges will be lost.",!t)})(t);const[s,{width:i}]=(0,p.A)(),m=(0,c.ID)(),[h,b]=(0,ee.N9)("chartName",{key:m,extraKey:t,flavour:"val"}),g=(0,y.w7)({extraKey:"dashboard",merge:!1,scoped:!0}),A=((0,C.TG)(g),(0,v.Xc)(t)),x=(0,E.T6)(t);return n.createElement(ae.Ay,{feature:"custom-dashboard"},n.createElement(te.A,{getObject:x,ids:A,getMenu:oe,extraKey:t},n.createElement(Se,null),n.createElement(Z.A,{ref:s,overflow:"hidden"},n.createElement(ke,{id:t}),o&&r.length>0&&n.createElement(De.A,{id:t,containerWidth:i,initialChartName:h,onChartNameChange:b}),o&&0===r.length&&n.createElement(I,null),a&&n.createElement(V,{id:t,onClose:l}))))}));var Te=a(85686);const ze=e=>{let{id:t}=e;const a=(0,d.vt)(),l=(0,d.bq)(),o=(0,c.ID)(),r=(0,c.QW)(),s=(0,u.oj)("state");return(0,h.A)(t,{spaceId:a,spaceSlug:l,roomId:o,roomSlug:r})?n.createElement(g,null):n.createElement(ae.Ay,{feature:"Dashboard",dashboardId:t},"notAvailable"==s?n.createElement(Te.A,{flavour:"dashboard"}):n.createElement(_e,{id:t}))},Fe=(0,n.memo)((e=>{let{customDashboardId:t}=e;(0,s.A)(),(e=>{const{dashboardSlug:t=e}=(0,l.g)(),a=(0,o.Xv)(),r=(0,o.Tf)();(0,n.useEffect)((()=>{r!==t&&a(t)}),[r,t]),(0,n.useEffect)((()=>()=>a(null)),[])})(t),(0,r.z1)(t);const a=(0,u.zi)(t),d=(0,u.oj)("slug");(0,m.ZB)({title:d,id:a,destination:d,type:"dashboards",droppable:!0,droppableProps:{dashboardId:a,dropArea:!0}});const c=(0,i.RQ)();return n.createElement(ze,{id:c?a:null})}))}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7857.813ae058cca579e05462.chunk.js b/src/web/gui/v2/7857.813ae058cca579e05462.chunk.js deleted file mode 100644 index 8d60c3724..000000000 --- a/src/web/gui/v2/7857.813ae058cca579e05462.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7acfc46e-2ecc-4a4b-a71f-3099ab003030",e._sentryDebugIdIdentifier="sentry-dbid-7acfc46e-2ecc-4a4b-a71f-3099ab003030")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7857],{45413:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=t.ElementType=void 0,function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(n=t.ElementType||(t.ElementType={})),t.isTag=function(e){return e.type===n.Tag||e.type===n.Script||e.type===n.Style},t.Root=n.Root,t.Text=n.Text,t.Directive=n.Directive,t.Comment=n.Comment,t.Script=n.Script,t.Style=n.Style,t.Tag=n.Tag,t.CDATA=n.CDATA,t.Doctype=n.Doctype},41141:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.DomHandler=void 0;var i=n(45413),a=n(36957);o(n(36957),t);var l={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},s=function(){function e(e,t,n){this.dom=[],this.root=new a.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,"function"===typeof t&&(n=t,t=l),"object"===typeof e&&(t=e,e=void 0),this.callback=null!==e&&void 0!==e?e:null,this.options=null!==t&&void 0!==t?t:l,this.elementCB=null!==n&&void 0!==n?n:null}return e.prototype.onparserinit=function(e){this.parser=e},e.prototype.onreset=function(){this.dom=[],this.root=new a.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},e.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},e.prototype.onerror=function(e){this.handleCallback(e)},e.prototype.onclosetag=function(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)},e.prototype.onopentag=function(e,t){var n=this.options.xmlMode?i.ElementType.Tag:void 0,r=new a.Element(e,t,void 0,n);this.addNode(r),this.tagStack.push(r)},e.prototype.ontext=function(e){var t=this.lastNode;if(t&&t.type===i.ElementType.Text)t.data+=e,this.options.withEndIndices&&(t.endIndex=this.parser.endIndex);else{var n=new a.Text(e);this.addNode(n),this.lastNode=n}},e.prototype.oncomment=function(e){if(this.lastNode&&this.lastNode.type===i.ElementType.Comment)this.lastNode.data+=e;else{var t=new a.Comment(e);this.addNode(t),this.lastNode=t}},e.prototype.oncommentend=function(){this.lastNode=null},e.prototype.oncdatastart=function(){var e=new a.Text(""),t=new a.CDATA([e]);this.addNode(t),e.parent=t,this.lastNode=e},e.prototype.oncdataend=function(){this.lastNode=null},e.prototype.onprocessinginstruction=function(e,t){var n=new a.ProcessingInstruction(e,t);this.addNode(n)},e.prototype.handleCallback=function(e){if("function"===typeof this.callback)this.callback(e,this.dom);else if(e)throw e},e.prototype.addNode=function(e){var t=this.tagStack[this.tagStack.length-1],n=t.children[t.children.length-1];this.options.withStartIndices&&(e.startIndex=this.parser.startIndex),this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),t.children.push(e),n&&(e.prev=n,n.next=e),e.parent=t,this.lastNode=null},e}();t.DomHandler=s,t.default=s},36957:function(e,t,n){"use strict";var r=this&&this.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!==typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(a);t.NodeWithChildren=p;var d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=i.ElementType.CDATA,t}return r(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),t}(p);t.CDATA=d;var f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=i.ElementType.Root,t}return r(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),t}(p);t.Document=f;var h=function(e){function t(t,n,r,o){void 0===r&&(r=[]),void 0===o&&(o="script"===t?i.ElementType.Script:"style"===t?i.ElementType.Style:i.ElementType.Tag);var a=e.call(this,r)||this;return a.name=t,a.attribs=n,a.type=o,a}return r(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,r;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(r=e["x-attribsPrefix"])||void 0===r?void 0:r[t]}}))},enumerable:!1,configurable:!0}),t}(p);function m(e){return(0,i.isTag)(e)}function g(e){return e.type===i.ElementType.CDATA}function y(e){return e.type===i.ElementType.Text}function v(e){return e.type===i.ElementType.Comment}function b(e){return e.type===i.ElementType.Directive}function x(e){return e.type===i.ElementType.Root}function k(e,t){var n;if(void 0===t&&(t=!1),y(e))n=new s(e.data);else if(v(e))n=new c(e.data);else if(m(e)){var r=t?w(e.children):[],i=new h(e.name,o({},e.attribs),r);r.forEach((function(e){return e.parent=i})),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]=o({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]=o({},e["x-attribsPrefix"])),n=i}else if(g(e)){r=t?w(e.children):[];var a=new d(r);r.forEach((function(e){return e.parent=a})),n=a}else if(x(e)){r=t?w(e.children):[];var l=new f(r);r.forEach((function(e){return e.parent=l})),e["x-mode"]&&(l["x-mode"]=e["x-mode"]),n=l}else{if(!b(e))throw new Error("Not implemented yet: ".concat(e.type));var p=new u(e.name,e.data);null!=e["x-name"]&&(p["x-name"]=e["x-name"],p["x-publicId"]=e["x-publicId"],p["x-systemId"]=e["x-systemId"]),n=p}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function w(e){for(var t=e.map((function(e){return k(e,!0)})),n=1;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CASE_SENSITIVE_TAG_NAMES_MAP=t.CASE_SENSITIVE_TAG_NAMES=void 0,t.CASE_SENSITIVE_TAG_NAMES=["animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","linearGradient","radialGradient","textPath"],t.CASE_SENSITIVE_TAG_NAMES_MAP=t.CASE_SENSITIVE_TAG_NAMES.reduce((function(e,t){return e[t.toLowerCase()]=t,e}),{})},65496:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="html",r="head",o="body",i=/<([a-zA-Z]+[0-9]?)/,a=//i,l=//i,s=function(e,t){throw new Error("This browser does not support `document.implementation.createHTMLDocument`")},c=function(e,t){throw new Error("This browser does not support `DOMParser.prototype.parseFromString`")},u="object"===typeof window&&window.DOMParser;if("function"===typeof u){var p=new u;s=c=function(e,t){return t&&(e="<".concat(t,">").concat(e,"")),p.parseFromString(e,"text/html")}}if("object"===typeof document&&document.implementation){var d=document.implementation.createHTMLDocument();s=function(e,t){if(t){var n=d.documentElement.querySelector(t);return n&&(n.innerHTML=e),d}return d.documentElement.innerHTML=e,d}}var f,h="object"===typeof document&&document.createElement("template");h&&h.content&&(f=function(e){return h.innerHTML=e,h.content.childNodes}),t.default=function(e){var t,u,p=e.match(i),d=p&&p[1]?p[1].toLowerCase():"";switch(d){case n:var h=c(e);if(!a.test(e))null===(t=null===(g=h.querySelector(r))||void 0===g?void 0:g.parentNode)||void 0===t||t.removeChild(g);if(!l.test(e))null===(u=null===(g=h.querySelector(o))||void 0===g?void 0:g.parentNode)||void 0===u||u.removeChild(g);return h.querySelectorAll(n);case r:case o:var m=s(e).querySelectorAll(d);return l.test(e)&&a.test(e)?m[0].parentNode.childNodes:m;default:return f?f(e):(g=s(e,o).querySelector(o)).childNodes;var g}}},92471:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(65496)),i=n(67731),a=/<(![a-zA-Z\s]+)>/;t.default=function(e){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];var t=e.match(a),n=t?t[1]:void 0;return(0,i.formatDOM)((0,o.default)(e),null,n)}},67731:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatDOM=t.formatAttributes=void 0;var r=n(41141),o=n(15270);function i(e){for(var t={},n=0,r=e.length;n{var r=n(41141),o=n(92471).default,i=n(20840),a=n(10308);o="function"===typeof o.default?o.default:o;var l={lowerCaseAttributeNames:!1};function s(e,t){if("string"!==typeof e)throw new TypeError("First argument must be a string");return""===e?[]:a(o(e,(t=t||{}).htmlparser2||l),t)}s.domToReact=a,s.htmlToDOM=o,s.attributesToProps=i,s.Comment=r.Comment,s.Element=r.Element,s.ProcessingInstruction=r.ProcessingInstruction,s.Text=r.Text,e.exports=s,s.default=s},20840:(e,t,n)=>{var r=n(14210),o=n(74958),i=["checked","value"],a=["input","select","textarea"],l={reset:!0,submit:!0};function s(e){return r.possibleStandardNames[e]}e.exports=function(e,t){var n,c,u,p,d,f={},h=(e=e||{}).type&&l[e.type];for(n in e)if(u=e[n],r.isCustomAttribute(n))f[n]=u;else if(p=s(c=n.toLowerCase()))switch(d=r.getPropertyInfo(p),-1===i.indexOf(p)||-1===a.indexOf(t)||h||(p=s("default"+c)),f[p]=u,d&&d.type){case r.BOOLEAN:f[p]=!0;break;case r.OVERLOADED_BOOLEAN:""===u&&(f[p]=!0)}else o.PRESERVE_CUSTOM_ATTRIBUTES&&(f[n]=u);return o.setStyleProp(e.style,f),f}},10308:(e,t,n)=>{var r=n(96540),o=n(20840),i=n(74958),a=i.setStyleProp,l=i.canTextBeChildOfNode;function s(e){return i.PRESERVE_CUSTOM_ATTRIBUTES&&"tag"===e.type&&i.isCustomComponent(e.name,e.attribs)}e.exports=function e(t,n){for(var c,u,p,d,f,h=(n=n||{}).library||r,m=h.cloneElement,g=h.createElement,y=h.isValidElement,v=[],b="function"===typeof n.replace,x=n.transform||i.returnFirstArg,k=n.trim,w=0,E=t.length;w1&&(p=m(p,{key:p.key||w})),v.push(x(p,c,w));else if("text"!==c.type){switch(d=c.attribs,s(c)?a(d.style,d):d&&(d=o(d,c.name)),f=null,c.type){case"script":case"style":c.children[0]&&(d.dangerouslySetInnerHTML={__html:c.children[0].data});break;case"tag":"textarea"===c.name&&c.children[0]?d.defaultValue=c.children[0].data:c.children&&c.children.length&&(f=e(c.children,n));break;default:continue}E>1&&(d.key=w),v.push(x(g(c.name,d,f),c,w))}else{if((u=!c.data.trim().length)&&c.parent&&!l(c.parent))continue;if(k&&u)continue;v.push(x(c.data,c,w))}return 1===v.length?v[0]:v}},74958:(e,t,n)=>{var r=n(96540),o=n(35229).default,i=new Set(["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"]);var a={reactCompat:!0};var l=r.version.split(".")[0]>=16,s=new Set(["tr","tbody","thead","tfoot","colgroup","table","head","html","frameset"]);e.exports={PRESERVE_CUSTOM_ATTRIBUTES:l,ELEMENTS_WITH_NO_TEXT_CHILDREN:s,isCustomComponent:function(e,t){return-1===e.indexOf("-")?t&&"string"===typeof t.is:!i.has(e)},setStyleProp:function(e,t){if(null!==e&&void 0!==e)try{t.style=o(e,a)}catch(n){t.style={}}},canTextBeChildOfNode:function(e){return!s.has(e.name)},returnFirstArg:function(e){return e}}},19788:e=>{var t=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,r=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,a=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,s=/^\s+|\s+$/g,c="";function u(e){return e?e.replace(s,c):c}e.exports=function(e,s){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];s=s||{};var p=1,d=1;function f(e){var t=e.match(n);t&&(p+=t.length);var r=e.lastIndexOf("\n");d=~r?e.length-r:d+e.length}function h(){var e={line:p,column:d};return function(t){return t.position=new m(e),b(),t}}function m(e){this.start=e,this.end={line:p,column:d},this.source=s.source}m.prototype.content=e;var g=[];function y(t){var n=new Error(s.source+":"+p+":"+d+": "+t);if(n.reason=t,n.filename=s.source,n.line=p,n.column=d,n.source=e,!s.silent)throw n;g.push(n)}function v(t){var n=t.exec(e);if(n){var r=n[0];return f(r),e=e.slice(r.length),n}}function b(){v(r)}function x(e){var t;for(e=e||[];t=k();)!1!==t&&e.push(t);return e}function k(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;c!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,c===e.charAt(n-1))return y("End of comment missing");var r=e.slice(2,n-2);return d+=2,f(r),e=e.slice(n),d+=2,t({type:"comment",comment:r})}}function w(){var e=h(),n=v(o);if(n){if(k(),!v(i))return y("property missing ':'");var r=v(a),s=e({type:"declaration",property:u(n[0].replace(t,c)),value:r?u(r[0].replace(t,c)):c});return v(l),s}}return b(),function(){var e,t=[];for(x(t);e=w();)!1!==e&&(t.push(e),x(t));return t}()}},14210:(e,t,n)=>{"use strict";function r(e,t,n,r,o,i,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}const o={};["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"].forEach((e=>{o[e]=new r(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((([e,t])=>{o[e]=new r(e,1,!1,t,null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((e=>{o[e]=new r(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((e=>{o[e]=new r(e,2,!1,e,null,!1,!1)})),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach((e=>{o[e]=new r(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((e=>{o[e]=new r(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((e=>{o[e]=new r(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((e=>{o[e]=new r(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((e=>{o[e]=new r(e,5,!1,e.toLowerCase(),null,!1,!1)}));const i=/[\-\:]([a-z])/g,a=e=>e[1].toUpperCase();["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach((e=>{const t=e.replace(i,a);o[t]=new r(t,1,!1,e,null,!1,!1)})),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach((e=>{const t=e.replace(i,a);o[t]=new r(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((e=>{const t=e.replace(i,a);o[t]=new r(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((e=>{o[e]=new r(e,1,!1,e.toLowerCase(),null,!1,!1)}));o.xlinkHref=new r("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((e=>{o[e]=new r(e,1,!1,e.toLowerCase(),null,!0,!0)}));const{CAMELCASE:l,SAME:s,possibleStandardNames:c}=n(96811),u=RegExp.prototype.test.bind(new RegExp("^(data|aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$")),p=Object.keys(c).reduce(((e,t)=>{const n=c[t];return n===s?e[t]=t:n===l?e[t.toLowerCase()]=t:e[t]=n,e}),{});t.BOOLEAN=3,t.BOOLEANISH_STRING=2,t.NUMERIC=5,t.OVERLOADED_BOOLEAN=4,t.POSITIVE_NUMERIC=6,t.RESERVED=0,t.STRING=1,t.getPropertyInfo=function(e){return o.hasOwnProperty(e)?o[e]:null},t.isCustomAttribute=u,t.possibleStandardNames=p},96811:(e,t)=>{t.SAME=0;t.CAMELCASE=1,t.possibleStandardNames={accept:0,acceptCharset:1,"accept-charset":"acceptCharset",accessKey:1,action:0,allowFullScreen:1,alt:0,as:0,async:0,autoCapitalize:1,autoComplete:1,autoCorrect:1,autoFocus:1,autoPlay:1,autoSave:1,capture:0,cellPadding:1,cellSpacing:1,challenge:0,charSet:1,checked:0,children:0,cite:0,class:"className",classID:1,className:1,cols:0,colSpan:1,content:0,contentEditable:1,contextMenu:1,controls:0,controlsList:1,coords:0,crossOrigin:1,dangerouslySetInnerHTML:1,data:0,dateTime:1,default:0,defaultChecked:1,defaultValue:1,defer:0,dir:0,disabled:0,disablePictureInPicture:1,disableRemotePlayback:1,download:0,draggable:0,encType:1,enterKeyHint:1,for:"htmlFor",form:0,formMethod:1,formAction:1,formEncType:1,formNoValidate:1,formTarget:1,frameBorder:1,headers:0,height:0,hidden:0,high:0,href:0,hrefLang:1,htmlFor:1,httpEquiv:1,"http-equiv":"httpEquiv",icon:0,id:0,innerHTML:1,inputMode:1,integrity:0,is:0,itemID:1,itemProp:1,itemRef:1,itemScope:1,itemType:1,keyParams:1,keyType:1,kind:0,label:0,lang:0,list:0,loop:0,low:0,manifest:0,marginWidth:1,marginHeight:1,max:0,maxLength:1,media:0,mediaGroup:1,method:0,min:0,minLength:1,multiple:0,muted:0,name:0,noModule:1,nonce:0,noValidate:1,open:0,optimum:0,pattern:0,placeholder:0,playsInline:1,poster:0,preload:0,profile:0,radioGroup:1,readOnly:1,referrerPolicy:1,rel:0,required:0,reversed:0,role:0,rows:0,rowSpan:1,sandbox:0,scope:0,scoped:0,scrolling:0,seamless:0,selected:0,shape:0,size:0,sizes:0,span:0,spellCheck:1,src:0,srcDoc:1,srcLang:1,srcSet:1,start:0,step:0,style:0,summary:0,tabIndex:1,target:0,title:0,type:0,useMap:1,value:0,width:0,wmode:0,wrap:0,about:0,accentHeight:1,"accent-height":"accentHeight",accumulate:0,additive:0,alignmentBaseline:1,"alignment-baseline":"alignmentBaseline",allowReorder:1,alphabetic:0,amplitude:0,arabicForm:1,"arabic-form":"arabicForm",ascent:0,attributeName:1,attributeType:1,autoReverse:1,azimuth:0,baseFrequency:1,baselineShift:1,"baseline-shift":"baselineShift",baseProfile:1,bbox:0,begin:0,bias:0,by:0,calcMode:1,capHeight:1,"cap-height":"capHeight",clip:0,clipPath:1,"clip-path":"clipPath",clipPathUnits:1,clipRule:1,"clip-rule":"clipRule",color:0,colorInterpolation:1,"color-interpolation":"colorInterpolation",colorInterpolationFilters:1,"color-interpolation-filters":"colorInterpolationFilters",colorProfile:1,"color-profile":"colorProfile",colorRendering:1,"color-rendering":"colorRendering",contentScriptType:1,contentStyleType:1,cursor:0,cx:0,cy:0,d:0,datatype:0,decelerate:0,descent:0,diffuseConstant:1,direction:0,display:0,divisor:0,dominantBaseline:1,"dominant-baseline":"dominantBaseline",dur:0,dx:0,dy:0,edgeMode:1,elevation:0,enableBackground:1,"enable-background":"enableBackground",end:0,exponent:0,externalResourcesRequired:1,fill:0,fillOpacity:1,"fill-opacity":"fillOpacity",fillRule:1,"fill-rule":"fillRule",filter:0,filterRes:1,filterUnits:1,floodOpacity:1,"flood-opacity":"floodOpacity",floodColor:1,"flood-color":"floodColor",focusable:0,fontFamily:1,"font-family":"fontFamily",fontSize:1,"font-size":"fontSize",fontSizeAdjust:1,"font-size-adjust":"fontSizeAdjust",fontStretch:1,"font-stretch":"fontStretch",fontStyle:1,"font-style":"fontStyle",fontVariant:1,"font-variant":"fontVariant",fontWeight:1,"font-weight":"fontWeight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:1,"glyph-name":"glyphName",glyphOrientationHorizontal:1,"glyph-orientation-horizontal":"glyphOrientationHorizontal",glyphOrientationVertical:1,"glyph-orientation-vertical":"glyphOrientationVertical",glyphRef:1,gradientTransform:1,gradientUnits:1,hanging:0,horizAdvX:1,"horiz-adv-x":"horizAdvX",horizOriginX:1,"horiz-origin-x":"horizOriginX",ideographic:0,imageRendering:1,"image-rendering":"imageRendering",in2:0,in:0,inlist:0,intercept:0,k1:0,k2:0,k3:0,k4:0,k:0,kernelMatrix:1,kernelUnitLength:1,kerning:0,keyPoints:1,keySplines:1,keyTimes:1,lengthAdjust:1,letterSpacing:1,"letter-spacing":"letterSpacing",lightingColor:1,"lighting-color":"lightingColor",limitingConeAngle:1,local:0,markerEnd:1,"marker-end":"markerEnd",markerHeight:1,markerMid:1,"marker-mid":"markerMid",markerStart:1,"marker-start":"markerStart",markerUnits:1,markerWidth:1,mask:0,maskContentUnits:1,maskUnits:1,mathematical:0,mode:0,numOctaves:1,offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:1,"overline-position":"overlinePosition",overlineThickness:1,"overline-thickness":"overlineThickness",paintOrder:1,"paint-order":"paintOrder",panose1:0,"panose-1":"panose1",pathLength:1,patternContentUnits:1,patternTransform:1,patternUnits:1,pointerEvents:1,"pointer-events":"pointerEvents",points:0,pointsAtX:1,pointsAtY:1,pointsAtZ:1,prefix:0,preserveAlpha:1,preserveAspectRatio:1,primitiveUnits:1,property:0,r:0,radius:0,refX:1,refY:1,renderingIntent:1,"rendering-intent":"renderingIntent",repeatCount:1,repeatDur:1,requiredExtensions:1,requiredFeatures:1,resource:0,restart:0,result:0,results:0,rotate:0,rx:0,ry:0,scale:0,security:0,seed:0,shapeRendering:1,"shape-rendering":"shapeRendering",slope:0,spacing:0,specularConstant:1,specularExponent:1,speed:0,spreadMethod:1,startOffset:1,stdDeviation:1,stemh:0,stemv:0,stitchTiles:1,stopColor:1,"stop-color":"stopColor",stopOpacity:1,"stop-opacity":"stopOpacity",strikethroughPosition:1,"strikethrough-position":"strikethroughPosition",strikethroughThickness:1,"strikethrough-thickness":"strikethroughThickness",string:0,stroke:0,strokeDasharray:1,"stroke-dasharray":"strokeDasharray",strokeDashoffset:1,"stroke-dashoffset":"strokeDashoffset",strokeLinecap:1,"stroke-linecap":"strokeLinecap",strokeLinejoin:1,"stroke-linejoin":"strokeLinejoin",strokeMiterlimit:1,"stroke-miterlimit":"strokeMiterlimit",strokeWidth:1,"stroke-width":"strokeWidth",strokeOpacity:1,"stroke-opacity":"strokeOpacity",suppressContentEditableWarning:1,suppressHydrationWarning:1,surfaceScale:1,systemLanguage:1,tableValues:1,targetX:1,targetY:1,textAnchor:1,"text-anchor":"textAnchor",textDecoration:1,"text-decoration":"textDecoration",textLength:1,textRendering:1,"text-rendering":"textRendering",to:0,transform:0,typeof:0,u1:0,u2:0,underlinePosition:1,"underline-position":"underlinePosition",underlineThickness:1,"underline-thickness":"underlineThickness",unicode:0,unicodeBidi:1,"unicode-bidi":"unicodeBidi",unicodeRange:1,"unicode-range":"unicodeRange",unitsPerEm:1,"units-per-em":"unitsPerEm",unselectable:0,vAlphabetic:1,"v-alphabetic":"vAlphabetic",values:0,vectorEffect:1,"vector-effect":"vectorEffect",version:0,vertAdvY:1,"vert-adv-y":"vertAdvY",vertOriginX:1,"vert-origin-x":"vertOriginX",vertOriginY:1,"vert-origin-y":"vertOriginY",vHanging:1,"v-hanging":"vHanging",vIdeographic:1,"v-ideographic":"vIdeographic",viewBox:1,viewTarget:1,visibility:0,vMathematical:1,"v-mathematical":"vMathematical",vocab:0,widths:0,wordSpacing:1,"word-spacing":"wordSpacing",writingMode:1,"writing-mode":"writingMode",x1:0,x2:0,x:0,xChannelSelector:1,xHeight:1,"x-height":"xHeight",xlinkActuate:1,"xlink:actuate":"xlinkActuate",xlinkArcrole:1,"xlink:arcrole":"xlinkArcrole",xlinkHref:1,"xlink:href":"xlinkHref",xlinkRole:1,"xlink:role":"xlinkRole",xlinkShow:1,"xlink:show":"xlinkShow",xlinkTitle:1,"xlink:title":"xlinkTitle",xlinkType:1,"xlink:type":"xlinkType",xmlBase:1,"xml:base":"xmlBase",xmlLang:1,"xml:lang":"xmlLang",xmlns:0,"xml:space":"xmlSpace",xmlnsXlink:1,"xmlns:xlink":"xmlnsXlink",xmlSpace:1,y1:0,y2:0,y:0,yChannelSelector:1,z:0,zoomAndPan:1}},35229:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(51133)),i=n(98917);t.default=function(e,t){var n={};return e&&"string"===typeof e?((0,o.default)(e,(function(e,r){e&&r&&(n[(0,i.camelCase)(e,t)]=r)})),n):n}},98917:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.camelCase=void 0;var n=/^--[a-zA-Z0-9-]+$/,r=/-([a-z])/g,o=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,l=function(e,t){return t.toUpperCase()},s=function(e,t){return"".concat(t,"-")};t.camelCase=function(e,t){return void 0===t&&(t={}),function(e){return!e||o.test(e)||n.test(e)}(e)?e:(e=e.toLowerCase(),(e=t.reactCompat?e.replace(a,s):e.replace(i,s)).replace(r,l))}},51133:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(19788));t.default=function(e,t){var n=null;if(!e||"string"!==typeof e)return n;var r=(0,o.default)(e),i="function"===typeof t;return r.forEach((function(e){if("declaration"===e.type){var r=e.property,o=e.value;i?t(r,o,e):o&&((n=n||{})[r]=o)}})),n}},87836:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(2642),o=n(35840);function i(e,t){const n=+(0,r.a)(e);return(0,o.w)(e,n+t)}},93001:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(87836);function o(e,t){return(0,r.A)(e,1e3*t)}},29708:(e,t,n)=>{"use strict";n.d(t,{W:()=>o});var r=n(93001);function o(e,t){return(0,r.p)(e,-t)}},25232:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>o});var r=n(86614);r.domToReact,r.htmlToDOM,r.attributesToProps,r.Comment,r.Element,r.ProcessingInstruction,r.Text;const o=r}}]); \ No newline at end of file diff --git a/src/web/gui/v2/7959.4f20f4b203e2bad8af39.chunk.js b/src/web/gui/v2/7959.4f20f4b203e2bad8af39.chunk.js deleted file mode 100644 index f61fba954..000000000 --- a/src/web/gui/v2/7959.4f20f4b203e2bad8af39.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e64832dc-26ea-4e8b-9ee9-4433adcc06fb",e._sentryDebugIdIdentifier="sentry-dbid-e64832dc-26ea-4e8b-9ee9-4433adcc06fb")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[7959],{7959:(e,n,t)=>{t.r(n),t.d(n,{default:()=>g});t(62953);var a=t(96540),o=t(83199),l=t(3914),s=t(87659),r=t(46741),c=t(98496),i=t(39522),d=t(4659),m=t(84976);const u={noRoomPermission:{header:e=>"Your role doesn't give you permission to access any of the troubleshooting information on ".concat(e,".")},noSpacePermission:{header:e=>"Your role doesn't give you permission to access any information on ".concat(e,".")},noRooms:{header:e=>"You currently don't have permission to see any room on ".concat(e,".")}},f=e=>{let{onClick:n,spaceName:t}=e;return a.createElement(a.Fragment,null,a.createElement(o.Text,{margin:[2,0,0]},"You can also leave this Space if you wish. "),a.createElement(o.Button,{flavour:"borderless",icon:"switch_off",label:"Leave ".concat(t),margin:[0,0,0,7],onClick:n,strong:!0}))},g=e=>{let{reason:n}=e;const t=(0,l.ap)(),[g,,b,p]=(0,s.A)(),{header:h}=u[n],y=(0,l.bq)(),E=(0,r.JT)("billing:ReadBasic");return a.createElement(c.A,{title:h(t.name)},a.createElement(a.Fragment,null,"noSpacePermission"===n&&a.createElement(a.Fragment,null,a.createElement(o.Text,null,"Please contact the Space administrators if this is unexpected."),a.createElement(f,{onClick:b,spaceName:t.name})),E&&"noRooms"!==n&&a.createElement(o.Text,null,"To manage Plan & Billing information please"," ",a.createElement(d.A,{as:m.N_,to:"/spaces/".concat(y,"/settings/billing")},"click here.")),"noRooms"===n&&a.createElement(a.Fragment,null,a.createElement(o.Text,null,"Please contact a Space administrator or manager if this is unexpected."),a.createElement(f,{onClick:b,spaceName:t.name})),g&&a.createElement(i.A,{id:t.id,name:t.name,onClose:p})))}},39522:(e,n,t)=>{t.d(n,{A:()=>v});var a=t(58168),o=t(96540),l=t(83199),s=t(47767),r=t(22292),c=t(55463),i=(t(17333),t(98992),t(54520),t(62953),t(47444)),d=t(71835),m=t(54702),u=t(55189),f=t(3914),g=t(48849),b=t(56639),p=t(14994);var h=t(57992);const y="leave-space-dialog",E="leaveSpaceDialog",v=e=>{let{id:n,name:t,onClose:v}=e;const w=(0,s.Zp)(),C=(0,r.uW)("id"),A=(0,c.Gi)(),S=(0,c.i3)(),k=(0,c.pB)(),_=(e=>{const[,n]=(0,d.A)();return(0,i.Zs)((t=>{let{snapshot:a,set:o,reset:l}=t;return async t=>{let{currentUserId:s,onSuccess:r,onError:i}=t;const d=await a.getPromise((0,f.nC)("ids")),h=d.filter((n=>e!==n)),[y]=h;if(!y)return void n({header:"Spaces",text:u.sh.leave});const{slug:E}=y&&await a.getPromise((0,b.Ay)(y));o((0,f.nC)("ids"),h),o(g.A,(n=>n.filter((n=>n!==e))));try{await(0,m.XY)(e,[s]),r&&r(E),(0,c.Z8)(l,e),(0,p.Is)(l,e),l((0,b.Ay)(e))}catch(v){o((0,f.nC)("ids"),d),i&&i()}}}),[e])})(n),L=(0,h.A)(n),P=(0,o.useCallback)((e=>w("/spaces/".concat(e))),[]),Y=1===A.length,I=1===S.length&&k,x=Y?{confirmLabel:"Yes, leave","data-ga":"".concat(y,"-last-member"),"data-testid":"".concat(E,"LastMember"),handleConfirm:()=>L({onSuccess:P}),message:o.createElement(o.Fragment,null,"If you leave, space ",o.createElement("strong",null,t)," will be deleted immediately.",o.createElement("br",null),"Are you sure you want to continue?"),title:"Leave and delete ".concat(t," space")}:I?{confirmLabel:"Give rights","data-ga":"".concat(y,"-last-admin"),"data-testid":"".concat(E,"LastAdmin"),handleConfirm:()=>w("users"),isConfirmPositive:!0,message:o.createElement(o.Fragment,null,"You are the last admin of ",o.createElement("strong",null,t)," space. Please give admin rights to another member so you can leave this space."),title:"Leave ".concat(t," space")}:{confirmLabel:"Yes, leave","data-ga":y,"data-testid":E,handleConfirm:()=>_({currentUserId:C,onSuccess:P}),message:o.createElement(o.Fragment,null,"You are about to leave ",o.createElement("strong",null,t)," space.",o.createElement("br",null),"Are you sure you want to continue?"),title:"Leave ".concat(t," space")};return o.createElement(l.ConfirmationDialog,(0,a.A)({handleDecline:v},x))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8059.4fdc76bb2cac1f74b41b.chunk.js b/src/web/gui/v2/8059.4fdc76bb2cac1f74b41b.chunk.js deleted file mode 100644 index f86454512..000000000 --- a/src/web/gui/v2/8059.4fdc76bb2cac1f74b41b.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="b3079749-081a-4019-8834-624f6596c442",e._sentryDebugIdIdentifier="sentry-dbid-b3079749-081a-4019-8834-624f6596c442")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8059],{62232:(e,t,a)=>{a.d(t,{A:()=>g});var n=a(58168),l=(a(17333),a(41393),a(98992),a(54520),a(81454),a(8711)),r=a(68090),o=a.n(r),c=a(96540),i=a(83199);const s=(0,l.default)(i.Box).withConfig({displayName:"breadcrumbs__StyledItemContainer",componentId:"sc-3u39st-0"})([""]),d=(0,l.css)(["&:hover{color:",";}"],(e=>{let{withHover:t,theme:a}=e;return t&&(0,i.getColor)("success")({theme:a})})),u=(0,l.default)(i.Text).withConfig({displayName:"breadcrumbs__StyledText",componentId:"sc-3u39st-1"})(["",""],d),m=(0,l.default)(i.TextSmall).withConfig({displayName:"breadcrumbs__StyledTextSmall",componentId:"sc-3u39st-2"})(["",""],d),g=e=>{let{items:t,isBig:a,showBackButton:l=!0,testid:r="",...d}=e;const g=(0,c.useMemo)((()=>{if(null===t||void 0===t||!t.length||!l)return null;return o()(t.filter((e=>{let{onClick:t}=e;return!!t}))).onClick}),[t,l]);if(null===t||void 0===t||!t.length)return null;const h=a?u:m;return c.createElement(i.Flex,(0,n.A)({gap:4},d),l&&c.createElement(i.Button,{onClick:g,icon:"chevron_left",label:"Back",neutral:!0,flavour:"hollow",small:!0,padding:[0,2,0,1],textTransform:"uppercase","data-testid":"".concat(r,"-breadcrumbs-backButton")}),c.createElement(i.Flex,{gap:2,alignItems:"center"},t.map(((e,t)=>{let{isDisabled:a,name:l,onClick:o}=e;return c.createElement(s,(0,n.A)({key:t,alignItems:"center"},o&&{cursor:"pointer",onClick:o},{"data-testid":"".concat(r,"-breadcrumbs-level-").concat(t)}),c.createElement(h,{color:a&&"textLite","data-testid":"".concat(r,"-breadcrumbs-level-").concat(t),withHover:!!o},0!==t&&" / ",l))}))))}},88059:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Ve});var n=a(96540),l=a(47444),r=a(51074),o=a(83084),c=a(96935),i=a(99292),s=a(83199),d=a(67990),u=a(99739),m=a(23452),g=a(64118),h=a(28738),f=(a(41393),a(81454),a(62953),a(63950)),b=a.n(f),C=a(58168),E=a(8711),y=a(40267),p=a(33195),v=a(47130);const w=(0,E.default)(s.Text).attrs({whiteSpace:"normal",wordBreak:"break-word"}).withConfig({displayName:"tableSchema__TextCell",componentId:"sc-u3gyvm-0"})(["",""],(e=>{let{monospace:t}=e;return t?"font-family: monospace;":""})),A=e=>t=>{let{getValue:a}=t;return n.createElement(w,e,a())},x=(0,E.default)(s.Icon).withConfig({displayName:"tableSchema__StyledIcon",componentId:"sc-u3gyvm-1"})(["vertical-align:middle;"]),I=e=>{let{flavour:t,value:a,...l}=e;return n.createElement(s.Flex,(0,C.A)({padding:[0,2]},l,{justifyContent:"center"}),0===a?n.createElement(w,{textAlign:"center"},"-"):n.createElement(y.A,{flavour:t,"data-testid":"alertView-alertPill-".concat(t)},a))},T={id:"chevron",header:"",cell:()=>n.createElement(x,{rotate:2,name:"chevron_left",color:"textDescription"})},N={displayName:!1},S=(0,v.A)(w),k=[{id:"summary",accessorKey:"summary",header:"Alert",cell:e=>{let{getValue:t,row:a}=e;const l=t(),{name:r}=(null===a||void 0===a?void 0:a.original)||{},o=l!=r?l:null;return n.createElement(S,{monospace:!0,strong:!0,"data-testid":"alertName",tooltip:o},r)},fullWidth:!0},{id:"nodesRunningAlert",accessorKey:"nodeCount",header:"Nodes Running Alert",cell:e=>{let{getValue:t}=e;return n.createElement(w,{textAlign:"center","data-testid":"nodesRunningAlert"},t())}},{id:"alertInstances",accessorKey:"instanceCount",header:"Alert Instances",cell:e=>{let{getValue:t}=e;return n.createElement(w,{textAlign:"center","data-testid":"alertInstances"},t())}},{id:"criticalNodes",accessorKey:"criticalCount",header:"Critical",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"critical",value:t(),"data-testid":"criticalNodes"})}},{id:"warningNodes",accessorKey:"warningCount",header:"Warning",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"warning",value:t(),"data-testid":"warningNodes"})}},{id:"clearNodes",accessorKey:"clearCount",header:"Clear",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"clear",value:t(),"data-testid":"clearNodes"})}},{id:"errorNodes",accessorKey:"errorCount",header:"Error",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"neutral",value:t(),"data-testid":"errorNodes"})}},{id:"uniqueConfigs",accessorKey:"configCount",header:"Configs",cell:e=>{let{getValue:t}=e;return n.createElement(w,{textAlign:"center","data-testid":"uniqueConfigs"},t())}},{id:"silencing",accessorKey:"silencing",header:"Silencing",cell:e=>{let{getValue:t}=e;return n.createElement(p.A,{silencing:t()})}},{id:"displayName",accessorKey:"displayName",header:"Name",cell:e=>{let{getValue:t}=e;return n.createElement(w,{"data-testid":"alertName"},t())}}];var V=a(45976),K=a(87815),_=a(47767),R=a(97054),D=a(47762);const L=(0,E.default)(s.TextSmall).withConfig({displayName:"styled__StyledLinkText",componentId:"sc-1y769u1-0"})(["",""],"\n cursor: pointer;\n overflow-wrap: break-word;\n max-width: 140px;\n &:hover {\n opacity: 0.7;\n }\n"),F=(0,E.default)(s.TextSmall).withConfig({displayName:"styled__StyledText",componentId:"sc-1y769u1-1"})(["&:hover{color:",";text-decoration:underline;}"],(0,s.getColor)("accent"));var B=a(75793),M=a(4659),P=a(29217),W=a(63119),z=a(69418),G=a(73865),j=a(13271),q=a(93155);const U=e=>{let{row:t,value:a,openModal:l}=e;const{id:r,info:o}=t.original,c=(0,n.useCallback)((()=>{l({alertId:r})}),[r]);return n.createElement(M.A,{Component:s.TextSmall,flavour:"tableLink",cursor:"pointer",showToolTip:!0,content:o,onClick:c,"data-testid":"alertsTableSchema-alertName-".concat(a),"data-ga":"alerts-table::click-alert::alerts-view::".concat(a)},a)},H=e=>{let{getValue:t}=e;const a=(0,_.Zp)(),l=t(),[,r]=(0,j.sK)(),o="Go to ".concat(l," context in charts overview"),[c,i]=(0,R.Ay)(),d=(0,n.useCallback)((()=>{r(l),a("/spaces/".concat(c,"/rooms/").concat(i,"/overview"))}),[l,r,a,c,i]);return n.createElement(M.A,{Component:s.TextSmall,flavour:"tableLink",cursor:"pointer",showToolTip:!0,content:o,onClick:d,"data-testid":"alertsTableSchema-alertContext-".concat(l)},l)},O=e=>{let{row:t,nodeId:a}=e;const{id:l}=t.original,r=(0,D.xY)(a,"name"),o=(0,D.d3)(a,{alertId:l}),[,,c]=(0,z.A)(),{hasLimitations:i,maxNodes:d,preferredNodes:u}=(0,G.A)(),m=q.bO&&i&&c>d&&!u.includes(a);return n.createElement(s.Flex,{width:35,"data-testid":"alertsTableSchema-nodeName-".concat(r),"data-ga":"alerts-table::click-node::alerts-view::".concat(r)},m?n.createElement(P.A,{content:n.createElement(W.u,{name:r}),align:"bottom",isBasic:!0},n.createElement(s.Flex,{gap:1},n.createElement(s.Icon,{name:"padlock",size:"small",color:"text"}),n.createElement(s.Text,null,n.createElement(B.A,{text:r,TextComponent:s.Text})))):n.createElement(L,{onClick:o},n.createElement(B.A,{text:r,TextComponent:F})))},Y=e=>{let{row:t,value:a}=e;const{id:l,nodeId:r,instanceName:o}=t.original,c=(0,D.d3)(r,{alertId:l});return n.createElement(s.Flex,{"data-testid":"alertsTableSchema-chart-id-".concat(a),"data-ga":"alerts-table::click-chartId::alerts-view::".concat(a)},n.createElement(L,{onClick:c},n.createElement(B.A,{TextComponent:F,text:o})))},J={},Q=e=>{let{openModal:t}=e;return[{id:"status",accessorKey:"status",header:"Status",cell:e=>{let{getValue:t}=e;return n.createElement(y.A,{flavour:t(),"data-testid":"alertsTable-alertPill","data-ga":"alerts-table::click-status::alerts-view::".concat(t())},t())}},{id:"summary",accessorKey:"summary",header:"Alert",cell:e=>{let{row:a,getValue:l}=e;return n.createElement(U,{row:a,value:l(),openModal:t})},fullWidth:!0},{id:"displayName",accessorKey:"displayName",header:"Name",cell:e=>{let{row:a,getValue:l}=e;return n.createElement(U,{row:a,value:l(),openModal:t})}},{id:"context",accessorKey:"context",header:"Context",cell:H},{id:"instance",header:"Instance",accessorKey:"instance",cell:e=>{let{row:t,getValue:a}=e;return n.createElement(Y,{row:t,value:a()})}},{id:"nodeName",header:"Node",accessorKey:"nodeId",cell:e=>{let{row:t,getValue:a}=e;return n.createElement(O,{row:t,nodeId:a()})}},{id:"value",header:"Latest value",accessorKey:"value",cell:e=>{let{row:t,getValue:a}=e;const{status:l,units:r}=t.original;return n.createElement(V.A,{loaded:!0,status:l,units:r,value:a(),"data-testid":"alertsTableSchema-alertValue","data-ga":"alerts-table::click-alert-value::alerts-view"})}},{id:"lastUpdated",header:"Updated at",accessorKey:"lastUpdated",cell:e=>{let{getValue:t}=e;return n.createElement(K.A,{rawTime:t(),secs:!0,"data-testid":"alertsTableSchema-latestUpdated"})}},{id:"lastStatusChangeValue",header:"Triggered value",accessorKey:"lastStatusChangeValue",cell:e=>{let{row:t,getValue:a}=e;const{status:l,units:r}=t.original;return n.createElement(V.A,{loaded:!0,status:l,units:r,value:a(),"data-testid":"alertsTableSchema-triggeredValue","data-ga":"alerts-table::click-triggered-value::alerts-view"})}},{id:"lastStatusChange",header:"Triggered at",accessorKey:"lastStatusChange",cell:e=>{let{getValue:t}=e;return n.createElement(K.A,{rawTime:t(),secs:!0,"data-testid":"alertsTableSchema-lastStatusChange"})}},{id:"silencing",accessorKey:"silencing",header:"Silencing",cell:e=>{let{getValue:t}=e;return n.createElement(p.A,{silencing:t()})}}]},Z=[{id:"summary",accessorKey:"summary",header:"Alert",cell:A({"data-testid":"alertInstanceName"}),fullWidth:!0},{id:"instance",header:"Instance",accessorKey:"instance",cell:e=>{let{row:t,getValue:a}=e;return n.createElement(Y,{row:t,value:a()})}},{id:"status",accessorKey:"status",header:"Status",cell:e=>{let{getValue:t}=e;return n.createElement(s.Flex,{padding:[0,2]},n.createElement(y.A,{flavour:t(),"data-testid":"alertView-alertPill-value",border:void 0},t()))},size:80},{id:"lastStatusChangeValue",accessorKey:"lastStatusChangeValue",header:"Triggered value",cell:e=>{let{getValue:t,row:a}=e;const{status:l,units:r}=a.original;return n.createElement(V.A,{loaded:!0,status:l,units:r,value:t(),"data-testid":"alertsTableSchema-alertValue"})}},{id:"lastStatusChange",accessorKey:"lastStatusChange",header:"Triggered at",cell:e=>{let{getValue:t}=e;return n.createElement(K.A,{rawTime:t(),secs:!0,nowrap:!0})}},{id:"displayName",accessorKey:"displayName",header:"Name",cell:A({"data-testid":"alertInstanceName"})}];var $=a(92136),X=a(3914),ee=a(69765),te=a(51913),ae=a(8239);const ne=()=>{const e=(0,_.Zp)(),t=(0,X.bq)(),a=(0,ee.ID)(),[,l]=(0,te.bg)(),r=(0,X.dg)(),{setState:o}=(0,ae.L5)();return{rowActions:(0,n.useMemo)((()=>r?{}:{alertConfiguration:{handleAction:a=>{let{nd:n,name:l}=a;o({nodeId:n,alertName:l,isAlert:!0}),e("/spaces/".concat(t,"/settings/configurations"),{replace:!0})},icon:"pencilOutline",tooltipText:"Edit this alert configuration",confirmation:!1},goto:{handleAction:a=>{const{name:n,nodeId:l,context:r,instance:o}=a,c={alertName:n,context:r,instance:o,nodeId:l};e("/spaces/".concat(t,"/settings/notifications#notificationsActiveTab=1&silencingRulePrefill=").concat(JSON.stringify(c)))},tooltipText:"Add new silencing rule",icon:"alarm_off",dataGa:"alerts-table::click-link-to-manager::active-alerts-table"},info:{handleAction:e=>l({roomId:a,alert:e}),tooltipText:"Get some help from Netdata Assistant",icon:"netdataAssistant",dataGa:"alerts::click-assistant-icon::active-alerts-table"}}),[r,l])}},le={right:["actions"]},re=()=>{const[{alertName:e,nodeId:t}]=(0,g.DV)(),a=(0,g.q1)(e,t),[l,r,,o]=(0,$.A)(),{rowActions:c}=ne(),i=(0,n.useCallback)((e=>r({alertId:e.data.id})),[e,t]);return n.createElement(n.Fragment,null,n.createElement(s.Table,{data:a,dataColumns:Z,onClickRow:i,enableSorting:!0,enableColumnVisibility:!0,enableResizing:!0,columnPinning:le,rowActions:c}),l&&o)};a(14905),a(98992),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215);var oe=a(54830);const ce=[{id:"nodeName",accessorKey:"nodeId",header:"Node",cell:e=>{let{getValue:t,row:a}=e;const[,,l]=(0,z.A)(),{hasLimitations:r,maxNodes:o,preferredNodes:c}=(0,G.A)(),i=r&&l>o,s=(0,D.xY)(t(),"name");return n.createElement(oe.A,{nodeId:a.original.nodeId,name:s,preferredNodes:c,showLockedNodes:i})}},{id:"nodes",accessorKey:"nodeCount",header:"Node Instances",cell:A({"data-testid":"nodes",textAlign:"center"})},{id:"instances",accessorKey:"instanceCount",header:"Alert Instances",cell:A({"data-testid":"instances",textAlign:"center"})},{id:"critical",accessorKey:"criticalCount",header:"Critical",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"critical",value:t()})}},{id:"warning",accessorKey:"warningCount",header:"Warning",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"warning",value:t()})}},{id:"clear",accessorKey:"clearCount",header:"Clear",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"clear",value:t()})}},{id:"error",accessorKey:"errorCount",header:"Error",cell:e=>{let{getValue:t}=e;return n.createElement(I,{flavour:"neutral",value:t(),"data-testid":"errors"})}},{id:"configs",accessorKey:"configCount",header:"Configs",cell:A({"data-testid":"configs",textAlign:"center"})},T],ie={right:["actions"]},se=()=>{const[{alertName:e},t]=(0,g.DV)(),a=(0,g.q1)(e),l=(0,n.useCallback)((a=>{t({alertName:e,nodeId:a.data.nodeId})}),[e,t]),r=(0,n.useMemo)((()=>Object.values(a.reduce(((e,t)=>{switch(e[t.nodeId]||(e[t.nodeId]={nodeId:t.nodeId,nodeCount:1,instanceCount:0,criticalCount:0,warningCount:0,clearCount:0,errorCount:0,configCount:0,configs:new Set}),e[t.nodeId].instanceCount=e[t.nodeId].instanceCount+1,t.status){case"warning":e[t.nodeId].warningCount=e[t.nodeId].warningCount+1;break;case"critical":e[t.nodeId].criticalCount=e[t.nodeId].criticalCount+1;break;case"clear":e[t.nodeId].clearCount=e[t.nodeId].clearCount+1;break;default:t.value||(e[t.nodeId].errorCount=e[t.nodeId].errorCount+1)}return e[t.nodeId].configCount=e[t.nodeId].configs.add(t.aci).size,e}),{}))),[a]);return n.createElement(s.Table,{data:r,dataColumns:ce,onClickRow:l,enableSorting:!0,enableColumnVisibility:!0,enableResizing:!0,columnPinning:ie})};var de=a(62232);const ue=()=>{var e;const[{alertName:t,nodeId:a},l]=(0,g.DV)(),r=(0,D.Gt)(a?[a]:[]),o=null===r||void 0===r||null===(e=r[0])||void 0===e?void 0:e.name,c=(0,n.useMemo)((()=>o?[{name:"All Alert Configs",onClick:()=>{l({alertName:null,nodeId:null})}},{name:t,onClick:()=>{l({alertName:t,nodeId:null})}},{name:o}]:t?[{name:"All Alert Configs",onClick:()=>{l({alertName:null,nodeId:null})}},{name:t}]:null),[t,o,l]);return n.createElement(de.A,{padding:[2,0,0],items:c,testid:"alertConfigurations"})},me=()=>n.createElement(s.Text,null,"Loading..."),ge={right:["actions"]},he=(0,n.memo)((()=>{const e=(0,g.oU)(),[{alertName:t,nodeId:a},l]=(0,g.DV)(),[,r]=(0,te.Ws)(),o=(0,n.useCallback)((e=>{l({alertName:e.data.name})}),[]),{rowActions:c}=(()=>{const e=(0,ee.ID)(),[,t]=(0,te.bg)(),[,a]=(0,g.DV)(),l=(0,X.dg)();return{rowActions:(0,n.useMemo)((()=>({goto:{handleAction:e=>{let{name:t}=e;return a({alertName:t})},icon:"chevron_right",tooltipText:"Show configuration"},...!l&&{info:{handleAction:a=>t({roomId:e,alert:a}),tooltipText:"Get some help from Netdata Assistant",icon:"netdataAssistant",iconColor:"primary",neutral:!1,dataGa:"alerts::click-assistant-icon::active-alerts-table"}}})),[l,t])}})();return(0,n.useEffect)((()=>{const t=e.map((e=>{let{name:t}=e;return{name:t}}));r(t)}),[e]),n.createElement(s.Flex,{column:!0,gap:4,height:"calc(100% - 100px)",overflow:"hidden"},n.createElement(ue,null),a&&n.createElement(n.Suspense,{fallback:n.createElement(me,null)},n.createElement(re,null)),!a&&t&&n.createElement(n.Suspense,{fallback:n.createElement(me,null)},n.createElement(se,null)),!a&&!t&&n.createElement(s.Table,{data:e,dataColumns:k,enableSorting:!0,enableColumnVisibility:!0,columnPinning:ge,enableColumnPinning:!0,enableResizing:!0,rowActions:c,onClickRow:o,columnVisibility:N,onSearch:b(),meta:{searchStyles:{width:"350px"}}}))})),fe=he,be=[{id:"lastStatusChange",desc:!0}],Ce={right:["actions"]},Ee=()=>{const e=(0,m.QD)({extraKey:"alerts"}),[,t]=(0,te.Ws)(),[a,l,,r]=(0,$.A)(),{rowActions:o}=ne();return(0,n.useEffect)((()=>{t(e)}),[e]),n.createElement(n.Fragment,null,n.createElement(s.Table,{enableSorting:!0,enableColumnVisibility:!0,columnVisibility:J,data:e,dataColumns:Q({openModal:l}),rowActions:o,sortBy:be,columnPinning:Ce,onSearch:b(),enableColumnPinning:!0,enableResizing:!0,meta:{searchStyles:{width:"350px"}}}),a&&r)};var ye=a(21290);const pe=()=>{const e=(()=>{const{localeTimeString:e,localeDateString:t}=(0,ye.$j)(),a=(0,r.s)("updatedAt");return(0,n.useMemo)((()=>{if(!a)return;const n=new Date(a);return"".concat(t(n,{long:!0})," ").concat(e(n,{secs:!0}))}),[a,e,t])})();return n.createElement(s.Flex,{column:!0,justifyContent:"center",alignItems:"center",gap:4},n.createElement(s.Icon,{name:"checkmark",width:"168px",height:"168px",margin:[13,0,0]}),n.createElement(s.H3,{margin:[10,0,0]},"This room has no active alerts, you are all good!"),n.createElement(s.Text,{margin:[2,0,0,0]},"Visit later or check your notifications"),n.createElement(s.TextSmall,{color:"textLite"},"Last updated at: ",e))},ve=(0,n.memo)(pe);var we=a(68831);const Ae=()=>n.createElement(s.Flex,{column:!0,justifyContent:"center",alignItems:"center",margin:[12,0,0]},n.createElement("img",{src:"".concat(we.A.assetsBaseURL,"/img/no-filter-results.png"),alt:"No Filter Results",title:"No Filter Results"}),n.createElement(s.H3,null,"There are no results for these filtering criteria")),xe=(0,n.memo)(Ae);var Ie=a(63314);const Te=e=>{let{count:t}=e;const a=(0,r.s)("ids"),l=(0,r.s)("loaded"),o=(0,g.Gq)(a).length;return l?o?t?n.createElement(Ie.Ay,{feature:"AlertsActive",mode:"AlertsTable"},n.createElement(Ee,null)):n.createElement(Ie.Ay,{feature:"AlertsActive",mode:"NoFilterResultsIndication"},n.createElement(xe,null)):n.createElement(Ie.Ay,{feature:"AlertsActive",mode:"NoAlertsIndication"},n.createElement(ve,null)):n.createElement(h.A,{title:"Loading alerts..."})};var Ne=a(90204);const Se=()=>{const{selectedTab:e,handleTabChange:t}=(0,Ne.A)(),a=(0,m.QD)({extraKey:"alerts"}).length,l=(0,g.zu)();return(0,d.nj)()&&!l.length?n.createElement(Ie.Ay,{feature:"Alerts",mode:"NoNodesView"},n.createElement(u.A,null)):n.createElement(s.Tabs,{selected:e,onChange:t,height:"100%",padding:[4,4,0]},n.createElement(s.Tab,{label:n.createElement(s.Text,null,"Raised (",a,")"),maxWidth:"100%","data-testid":"alertTabs-activeAlerts"},n.createElement(Te,{count:a})),n.createElement(s.Tab,{label:n.createElement(s.Text,null,"Alert Configurations"),maxWidth:"100%","data-testid":"alertTabs-configurations"},n.createElement(n.Suspense,{fallback:n.createElement(h.A,{title:"Loading alert configurations..."})},n.createElement(Ie.Ay,{feature:"AlertsConfiguration"},n.createElement(fe,null)))))},ke=["chartIndexing","alerts","info","config"],Ve=()=>{const e=(0,r.s)("ids"),t=(0,l.vc)(c.J7),a=!!e.length&&1!==t;return n.createElement(o.A,{sidebar:a&&n.createElement(i.Ay,{title:"Alerts",flavour:"alerts",loaded:!0,hasSearch:!1,hiddenTabs:ke})},n.createElement(Se,null))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8239.c85fc9f3599f198a9efb.chunk.js b/src/web/gui/v2/8239.c85fc9f3599f198a9efb.chunk.js deleted file mode 100644 index 11ea868c2..000000000 --- a/src/web/gui/v2/8239.c85fc9f3599f198a9efb.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="4c4444fc-a2ae-4dd7-a82e-f2eeee2a30f0",e._sentryDebugIdIdentifier="sentry-dbid-4c4444fc-a2ae-4dd7-a82e-f2eeee2a30f0")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8239],{16607:(e,t,n)=>{n.d(t,{A:()=>l});var o=n(58168),r=n(96540),a=n(83199),d=n(29217);const l=e=>t=>{let{tooltip:n,onClick:l,...i}=t;const c=(0,r.useRef)(),s=(0,r.useCallback)((e=>{var t,n;null===l||void 0===l||l(e),null===(t=c.current)||void 0===t||null===(n=t.blur)||void 0===n||n.call(t)}),[l,c.current]),u=(0,r.useMemo)((()=>({...i,...l?{onClick:s}:{}})),[s,i]);return r.createElement(d.A,{align:"bottom",content:n},r.createElement(a.Box,null,r.createElement(e,(0,o.A)({ref:c},u))))}},70895:(e,t,n)=>{n.d(t,{A:()=>g,j:()=>h});var o=n(58168),r=(n(3064),n(98992),n(72577),n(62953),n(96540)),a=n(83199),d=n(3914),l=n(20378),i=n(46741),c=n(19673);const s={Business:!0,Pro:!0,Homelab:!0,Community:!1},u=()=>{const{loaded:e,value:t}=(0,c.JN)();return{loaded:e,isPaid:e&&s[null===t||void 0===t?void 0:t.class]}};const f=(0,n(16607).A)(a.Button),p=["Business","Pro","Homelab"],h=e=>{let{view:t,edit:n,ifForbidden:o="disabled",tooltip:a,disabled:c}=e;const s=(0,d.dg)(),f=(0,i.JT)("agent:ReadDynCfg"),h=(0,i.JT)("agent:EditDynCfg"),g=(0,i.JT)("billing:Manage"),b=(0,d.UV)("ids"),m=(0,d.jw)(b),[v]=(0,l.Q8)(),{userStatus:y,spaceId:k}=v||{},C=s&&"loggedIn"==y,_=!!k&&function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!e)return!1;const{plan:n}=t.find((t=>{let{id:n}=t;return n==e}))||{};for(let o=0;o<=p.length;o++)if(n.startsWith(p[o]))return!0;return!1}(k,m),A=C?_:n?h:!t||f,{loaded:P,isPaid:w}=u();return{hidden:"hide"===o&&!A,isDisabled:"disabled"===o&&!A||c,tooltipText:(0,r.useMemo)((()=>A?a:P?w||s?"User does not have sufficient permissions to perform this action. Please contact your admin to grant access.":"Upgrade your plan to use this feature.":null),[P,w,A,a]),showUpgradeButton:g&&!A&&!w,hasPermission:A}},g=(0,r.forwardRef)(((e,t)=>{let{view:n,edit:a,ifForbidden:d,tooltip:l,disabled:i,...c}=e;const{hidden:s,isDisabled:u,tooltipText:p}=h({view:n,edit:a,ifForbidden:d,tooltip:l,disabled:i});return s?null:r.createElement(f,(0,o.A)({ref:t,disabled:u,tooltip:p},c))}))},94390:(e,t,n)=>{n.d(t,{$7:()=>r,D9:()=>f,DR:()=>d,FL:()=>o,Fn:()=>p,Sd:()=>a,T_:()=>h,V6:()=>s,V8:()=>g,bM:()=>c,g7:()=>i,gh:()=>u,lp:()=>b,q4:()=>l,zy:()=>m});const o=51,r="/health/alerts/prototypes",a="health:alert:prototype",d="".concat(a,":"),l="dyncfg",i={template:{color:"success"},default:{color:"text"}},c={accepted:{label:"Accepted",color:"success",icon:"checkmark_s"},disabled:{label:"Disabled",color:["neutral","grey100"],icon:"none_selected"},failed:{label:"Failed",color:["red","red100"],icon:"warning_triangle"},orphan:{label:"Orphan",color:["neutral","grey90"],icon:"checkmark_partial_s"},incomplete:{label:"Incomplete",color:["yellow","yellow100"],icon:"incindent_manager"},running:{label:"Running",color:"success",icon:"checkmark_s"}},s={internal:{icon:"internalConfig"},stock:{icon:"stockConfig"},user:{icon:"userConfig"},discovered:{icon:"discoveredConfig"},dyncfg:{icon:"dynamicConfig"}},u={loaded:!0,value:{},hasError:!1},f="__unsaved__",p="Something went wrong",h={accepted:{label:"Accepted",color:"border",searchCondition:{status:"accepted"}},disabled:{label:"Disabled",color:"border",searchCondition:{status:"disabled"}},failed:{label:"Failed",color:"border",searchCondition:{status:"failed"}},orphan:{label:"Orphan",color:"border",searchCondition:{status:"orphan"}},incomplete:{label:"Incomplete",color:"border",searchCondition:{status:"incomplete"}},running:{label:"Running",color:"border",searchCondition:{status:"running"}}},g={internal:{label:"Internal",color:"border",searchCondition:{source_type:"internal"}},stock:{label:"Stock",color:"border",searchCondition:{source_type:"stock"}},user:{label:"User",color:"border",searchCondition:{source_type:"user"}},discovered:{label:"Discovered",color:"border",searchCondition:{source_type:"discovered"}},dyncfg:{label:"Dynamic configuration",color:"border",searchCondition:{source_type:"dyncfg"}}},b={restartRequired:{label:"Restart required",color:"border",searchCondition:{restart_required:!0}},pluginRejected:{label:"Plugin rejected",color:"border",searchCondition:{plugin_rejected:!0}}},m=["restartRequired","pluginRejected","failed","incomplete"]},8239:(e,t,n)=>{n.d(t,{Nj:()=>K,hp:()=>J,SW:()=>T,Hj:()=>z,t8:()=>O,wd:()=>L,L5:()=>$,OD:()=>B,_O:()=>Y,QH:()=>N,sh:()=>F,IP:()=>G,OU:()=>H,ZN:()=>M,SD:()=>Q,EZ:()=>V,DP:()=>x,O_:()=>W,xS:()=>q,y8:()=>Z,MQ:()=>X,_F:()=>D});n(96167),n(17333),n(9920),n(41393),n(98992),n(54520),n(3949),n(81454),n(62953);var o=n(96540),r=n(47444),a=(n(48408),n(26655)),d=n(37618),l=n(49286);const i=e=>({...e,attention:(0,l.bn)(e.attention)}),c={tree:a.A.get,schema:a.A.get,get:a.A.get,enable:a.A.get,disable:a.A.get,restart:a.A.get,remove:a.A.get,add:a.A.post,update:a.A.post,test:a.A.post,userconfig:a.A.post,default:a.A.get},s=function(){let{node:e={},searchParams:t={},payload:n={},...o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=Object.entries(e);if(!t.length)return"";const n=new URLSearchParams;return t.forEach((e=>{let[t,o]=e;o&&n.append(t,o)})),"?".concat(n.toString())}(t),{action:l}=t,s=c[l]||c.default,u={..."tree"==l?{transform:i,...o}:{...o},...d.Ay?{baseURL:window.envSettings.agentApiUrl,...o}:{...o}},f=s==a.A.get?[u]:[n,u];if(d.Ay){const{value:t,isParent:n}=e,o=n?"":"/host/".concat(t);return s("".concat(o,"/api/v1/config").concat(r),...f)}return s("/api/v2/nodes/".concat(null===e||void 0===e?void 0:e.value,"/config").concat(r),...f)},u=e=>{let{node:t,path:n,id:o}=e;return s({node:t,searchParams:{action:"tree",path:n,id:o},allow401:!0})},f=e=>{let{id:t,node:n}=e;return s({node:n,searchParams:{action:"enable",id:t}})},p=e=>{let{id:t,node:n}=e;return s({node:n,searchParams:{action:"disable",id:t}})},h=e=>{let{id:t,name:n,node:o,payload:r}=e;return s({node:o,searchParams:{action:"add",name:n,id:t},payload:r})},g=e=>{let{id:t,node:n,payload:o}=e;return s({node:n,searchParams:{action:"update",id:t},payload:o})},b=(0,r.eU)({key:"newConfigurationItemAtom",default:null}),m=(0,r.eU)({key:"dyncnfModalAtom",default:null}),v=(0,r.eU)({key:"dyncnfKeyAtom",default:0}),y=(0,r.Iz)({key:"dyncnfVirtualListScrollPosition",default:0}),k=(0,r.eU)({key:"dyncnfOpenItems",default:[]}),C=(0,r.Iz)({key:"dyncnfItemTree",default:null}),_=(0,r.eU)({key:"dyncfgAlertNavigationAtom",default:{}}),A={value:"",error:null},P=(0,r.eU)({key:"dyncfgUserConfig",default:A});var w=n(70895),E=n(81198),S=n(94390);const U=(0,r.K0)({key:"configurationsTree",get:e=>{let{node:t,path:n}=e;return e=>{let{get:o}=e;return o(v),u({node:t,path:n})}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),j=(0,r.K0)({key:"configurationsSchema",get:e=>{let{id:t,node:n}=e;return e=>{let{get:o}=e;return o(v),(e=>{let{id:t,node:n}=e;return s({node:n,searchParams:{action:"schema",id:t}})})({id:t,node:n})}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),I=(0,r.K0)({key:"configurationsData",get:e=>{let{id:t,node:n}=e;return e=>{let{get:o}=e;return o(v),(e=>{let{id:t,node:n}=e;return s({node:n,searchParams:{action:"get",id:t}})})({id:t,node:n})}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),R=(0,r.K0)({key:"virtualListScrollPositionSelector",get:e=>{let{node:t,path:n}=e;return e=>{let{get:o}=e;return o(y({node:t,path:n}))}},set:e=>{let{node:t,path:n}=e;return(e,o)=>{let{set:r}=e;r(y({node:t,path:n}),o)}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),D=e=>{let{node:t,path:n}=e;return(0,r.L4)(R({node:t,path:n}))},L=function(){var e,t;let{node:n,path:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,r.xf)(U({node:n,path:o})),d="hasError"===a.state;return{loaded:"loading"!==a.state,value:null===(e=a.contents)||void 0===e?void 0:e.data,hasError:d,error:(null===(t=a.contents)||void 0===t||null===(t=t.response)||void 0===t?void 0:t.data)||(d?S.Fn:null)}},O=function(){var e,t;let{id:n,node:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,r.xf)(j({id:n,node:o})),d=(0,r.RH)(j({id:n,node:o})),l="hasError"===a.state;return{loaded:"loading"!==a.state,value:null===(e=a.contents)||void 0===e?void 0:e.data,hasError:l,error:(null===(t=a.contents)||void 0===t||null===(t=t.response)||void 0===t?void 0:t.data)||(l?S.Fn:null),refresh:d}},T=function(){var e,t;let{id:n,node:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,r.xf)(I({id:n,node:o})),d=(0,r.RH)(I({id:n,node:o})),l="hasError"===a.state;return{loaded:"loading"!==a.state,value:null===(e=a.contents)||void 0===e?void 0:e.data,hasError:l,error:(null===(t=a.contents)||void 0===t||null===(t=t.response)||void 0===t?void 0:t.data)||(l?S.Fn:null),refresh:d}},F=()=>(0,r.vc)(b),N=()=>(0,r.L4)(b),B=()=>(0,r.L4)(m),x=e=>{let{id:t,node:n}=e;return e=>(e?f:p)({id:t,node:n})},M=e=>{let{id:t,node:n}=e;return()=>(e=>{let{id:t,node:n}=e;return s({node:n,searchParams:{action:"restart",id:t}})})({id:t,node:n})},H=e=>{let{id:t,node:n}=e;return()=>(e=>{let{id:t,node:n}=e;return s({node:n,searchParams:{action:"remove",id:t}})})({id:t,node:n})},q=e=>{let{id:t,node:n}=e;return e=>g({id:t,node:n,payload:e})},J=e=>{let{id:t,isNewItem:n}=e;const r=(0,o.useMemo)((()=>n?h:g),[n]);return(0,o.useCallback)((function(){let{nodes:e=[],payload:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=n?o.name:void 0,d=e.map((e=>r({id:t,node:e,name:a,payload:o})));return Promise.allSettled(d)}),[t,r,n])},K=e=>{let{id:t,node:n}=e;return e=>{let{name:o,...r}=e;return h({id:t,name:o,node:n,payload:r})}},V=e=>{let{id:t,node:n}=e;return e=>{let{name:o,payload:r}=e;return(e=>{let{id:t,name:n,node:o,payload:r}=e;return s({node:o,searchParams:{action:"test",name:n,id:t},payload:r})})({id:t,name:o,node:n,payload:r})}},Z=e=>{let{id:t,node:n}=e;const r=(0,o.useRef)(),{hasPermission:a}=(0,w.j)({edit:!0});return function(){let{name:e="test",payload:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a?(r.current&&r.current.cancel(),r.current=(e=>{let{id:t,name:n,node:o,payload:r}=e;return s({node:o,searchParams:{action:"userconfig",name:n,id:t},payload:r,noResponseParsing:!0})})({id:t,name:e,node:n,payload:o}),r.current):Promise.resolve({data:""})}},z=()=>{const e=(0,r.lZ)(v),[,t]=N();return()=>{e((e=>e+1)),t(null)}},Q=e=>{let{node:t,path:n,isNewItem:r}=e;const{loaded:a,value:d,hasError:l}=L({node:t,path:n});return(0,o.useCallback)((e=>{var t;if(!a||l)return null;const{tree:n}=d||{},o=(0,E.dG)(n);return r?o[e]:o[null===(t=o[e])||void 0===t?void 0:t.template]}),[a,l,d,r])},G=()=>{const[e,t]=(0,r.L4)(k),n=(0,o.useCallback)((e=>{t((t=>t.filter((t=>t!=e))))}),[t]);return{openItems:e,toggle:(0,o.useCallback)(((e,o)=>{o?t((t=>[...t,e])):n(e)}),[t,n]),close:n}},W=e=>{let{node:t,id:n}=e;return(0,r.Zs)((e=>{let{set:o}=e;return async()=>{u({node:t,id:n}).then((e=>{let{data:n}=e;const{tree:r}=n||{};if(r){const e=Object.values(r)[0];e&&Object.entries(e).forEach((e=>{let[n,r]=e;o(C({node:t,id:n}),(0,l.bn)(r))}))}})).catch((()=>{}))}}),[t,n])},Y=e=>{let{node:t,id:n}=e;return(0,r.vc)(C({node:t,id:n}))},$=()=>{const[e,t]=(0,r.L4)(_),n=(0,o.useCallback)((()=>t({})),[t]);return{state:e,setState:t,refresh:n}},X=()=>{const[{value:e,error:t},n]=(0,r.L4)(P),a=(0,o.useCallback)((e=>t=>{n({...A,[e]:t})}),[n]);return{value:e,error:t,setValue:a("value"),setError:a("error"),refresh:(0,o.useCallback)((()=>n(A)),[n])}}},81198:(e,t,n)=>{n.d(t,{J3:()=>o,UE:()=>r,dG:()=>a,m8:()=>d});n(25440),n(17333),n(14905),n(98992),n(54520),n(8872),n(62953);const o=e=>{const t=null===e||void 0===e?void 0:e.split(":");return t?t[t.length-1]:""},r=e=>null===e||void 0===e?void 0:e.split(":").slice(0,-1).join(":"),a=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.entries(e).reduce(((e,t)=>{let[n,o]=t;return n.match(/\/[^/]+/g)?{...e,...o}:o}),{})},d=function(){const e=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.entries(e).reduce(((e,t)=>{let[n,o]=t;return{...e,[n.replace(/^\/[^/]+/,"")]:o}}),{})}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});return Object.entries(e).reduce(((e,t)=>{let[n,o]=t;return{...e,[n]:Object.entries(o).reduce(((e,t)=>{let[n,r]=t;if(["template","single"].includes(r.type)&&(e[n]={...r}),"template"==r.type){const t=Object.entries(o).filter((e=>{let[,{template:t}]=e;return t==n})).reduce(((e,t)=>{let[n,o]=t;return{...e,[n]:o}}),{});Object.keys(t).length&&(e[n].templateChildren=t)}return e}),{})}}),{})}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js b/src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js deleted file mode 100644 index 92877d3b6..000000000 --- a/src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt */ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ee85b709-a5a9-4ce7-b1e4-2d0b15541cf3",e._sentryDebugIdIdentifier="sentry-dbid-ee85b709-a5a9-4ce7-b1e4-2d0b15541cf3")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8323],{20748:(e,t,r)=>{"use strict";var n,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}(e,["fill","width","height","style"]);return i.default.createElement("svg",a({viewBox:"0 0 24 24",style:a({fill:r,width:o,height:l},c)},d),i.default.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}},54657:(e,t,r)=>{"use strict";var n,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}(e,["fill","width","height","style"]);return i.default.createElement("svg",a({viewBox:"0 0 24 24",style:a({fill:r,width:o,height:l},c)},d),i.default.createElement("path",{d:"M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z"}))}},80909:(e,t,r)=>{var n=r(30641),a=r(38329)(n);e.exports=a},30641:(e,t,r)=>{var n=r(86649),a=r(95950);e.exports=function(e,t){return e&&n(e,t,a)}},28077:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},41799:(e,t,r)=>{var n=r(37217),a=r(60270);e.exports=function(e,t,r,o){var i=r.length,s=i,l=!o;if(null==e)return!s;for(e=Object(e);i--;){var u=r[i];if(l&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i{var n=r(93663),a=r(87978),o=r(83488),i=r(56449),s=r(50583);e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?i(e)?a(e[0],e[1]):n(e):s(e)}},5128:(e,t,r)=>{var n=r(80909),a=r(64894);e.exports=function(e,t){var r=-1,o=a(e)?Array(e.length):[];return n(e,(function(e,n,a){o[++r]=t(e,n,a)})),o}},93663:(e,t,r)=>{var n=r(41799),a=r(10776),o=r(67197);e.exports=function(e){var t=a(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(r){return r===e||n(r,e,t)}}},87978:(e,t,r)=>{var n=r(60270),a=r(58156),o=r(80631),i=r(28586),s=r(30756),l=r(67197),u=r(77797);e.exports=function(e,t){return i(e)&&s(t)?l(u(e),t):function(r){var i=a(r,e);return void 0===i&&i===t?o(r,e):n(t,i,3)}}},47237:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},17255:(e,t,r)=>{var n=r(47422);e.exports=function(e){return function(t){return n(t,e)}}},24066:(e,t,r)=>{var n=r(83488);e.exports=function(e){return"function"==typeof e?e:n}},38329:(e,t,r)=>{var n=r(64894);e.exports=function(e,t){return function(r,a){if(null==r)return r;if(!n(r))return e(r,a);for(var o=r.length,i=t?o:-1,s=Object(r);(t?i--:++i{var n=r(30756),a=r(95950);e.exports=function(e){for(var t=a(e),r=t.length;r--;){var o=t[r],i=e[o];t[r]=[o,i,n(i)]}return t}},49326:(e,t,r)=>{var n=r(31769),a=r(72428),o=r(56449),i=r(30361),s=r(30294),l=r(77797);e.exports=function(e,t,r){for(var u=-1,c=(t=n(t,e)).length,d=!1;++u{var n=r(23805);e.exports=function(e){return e===e&&!n(e)}},67197:e=>{e.exports=function(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}},88055:(e,t,r)=>{var n=r(9999);e.exports=function(e){return n(e,5)}},33215:(e,t,r)=>{var n=r(30641),a=r(24066);e.exports=function(e,t){return e&&n(e,a(t))}},80631:(e,t,r)=>{var n=r(28077),a=r(49326);e.exports=function(e,t){return null!=e&&a(e,t,n)}},85015:(e,t,r)=>{var n=r(72552),a=r(56449),o=r(40346);e.exports=function(e){return"string"==typeof e||!a(e)&&o(e)&&"[object String]"==n(e)}},55378:(e,t,r)=>{var n=r(34932),a=r(15389),o=r(5128),i=r(56449);e.exports=function(e,t){return(i(e)?n:o)(e,a(t,3))}},50583:(e,t,r)=>{var n=r(47237),a=r(17255),o=r(28586),i=r(77797);e.exports=function(e){return o(e)?n(i(e)):a(e)}},30857:()=>{},17790:(e,t,r)=>{var n=r(19852);function a(e){this.mode=n.MODE_8BIT_BYTE,this.data=e}a.prototype={getLength:function(e){return this.data.length},write:function(e){for(var t=0;t{function t(){this.buffer=new Array,this.length=0}t.prototype={get:function(e){var t=Math.floor(e/8);return 1==(this.buffer[t]>>>7-e%8&1)},put:function(e,t){for(var r=0;r>>t-r-1&1))},getLengthInBits:function(){return this.length},putBit:function(e){var t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},e.exports=t},41537:e=>{e.exports={L:1,M:0,Q:3,H:2}},30501:(e,t,r)=>{var n=r(39341);function a(e,t){if(void 0==e.length)throw new Error(e.length+"/"+t);for(var r=0;r{var n=r(17790),a=r(12835),o=r(10046),i=r(38759),s=r(30501);function l(e,t){this.typeNumber=e,this.errorCorrectLevel=t,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}var u=l.prototype;u.addData=function(e){var t=new n(e);this.dataList.push(t),this.dataCache=null},u.isDark=function(e,t){if(e<0||this.moduleCount<=e||t<0||this.moduleCount<=t)throw new Error(e+","+t);return this.modules[e][t]},u.getModuleCount=function(){return this.moduleCount},u.make=function(){if(this.typeNumber<1){var e=1;for(e=1;e<40;e++){for(var t=a.getRSBlocks(e,this.errorCorrectLevel),r=new o,n=0,s=0;s=7&&this.setupTypeNumber(e),null==this.dataCache&&(this.dataCache=l.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,t)},u.setupPositionProbePattern=function(e,t){for(var r=-1;r<=7;r++)if(!(e+r<=-1||this.moduleCount<=e+r))for(var n=-1;n<=7;n++)t+n<=-1||this.moduleCount<=t+n||(this.modules[e+r][t+n]=0<=r&&r<=6&&(0==n||6==n)||0<=n&&n<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=n&&n<=4)},u.getBestMaskPattern=function(){for(var e=0,t=0,r=0;r<8;r++){this.makeImpl(!0,r);var n=i.getLostPoint(this);(0==r||e>n)&&(e=n,t=r)}return t},u.createMovieClip=function(e,t,r){var n=e.createEmptyMovieClip(t,r);this.make();for(var a=0;a>r&1);this.modules[Math.floor(r/3)][r%3+this.moduleCount-8-3]=n}for(r=0;r<18;r++){n=!e&&1==(t>>r&1);this.modules[r%3+this.moduleCount-8-3][Math.floor(r/3)]=n}},u.setupTypeInfo=function(e,t){for(var r=this.errorCorrectLevel<<3|t,n=i.getBCHTypeInfo(r),a=0;a<15;a++){var o=!e&&1==(n>>a&1);a<6?this.modules[a][8]=o:a<8?this.modules[a+1][8]=o:this.modules[this.moduleCount-15+a][8]=o}for(a=0;a<15;a++){o=!e&&1==(n>>a&1);a<8?this.modules[8][this.moduleCount-a-1]=o:a<9?this.modules[8][15-a-1+1]=o:this.modules[8][15-a-1]=o}this.modules[this.moduleCount-8][8]=!e},u.mapData=function(e,t){for(var r=-1,n=this.moduleCount-1,a=7,o=0,s=this.moduleCount-1;s>0;s-=2)for(6==s&&s--;;){for(var l=0;l<2;l++)if(null==this.modules[n][s-l]){var u=!1;o>>a&1)),i.getMask(t,n,s-l)&&(u=!u),this.modules[n][s-l]=u,-1==--a&&(o++,a=7)}if((n+=r)<0||this.moduleCount<=n){n-=r,r=-r;break}}},l.PAD0=236,l.PAD1=17,l.createData=function(e,t,r){for(var n=a.getRSBlocks(e,t),s=new o,u=0;u8*d)throw new Error("code length overflow. ("+s.getLengthInBits()+">"+8*d+")");for(s.getLengthInBits()+4<=8*d&&s.put(0,4);s.getLengthInBits()%8!=0;)s.putBit(!1);for(;!(s.getLengthInBits()>=8*d)&&(s.put(l.PAD0,8),!(s.getLengthInBits()>=8*d));)s.put(l.PAD1,8);return l.createBytes(s,n)},l.createBytes=function(e,t){for(var r=0,n=0,a=0,o=new Array(t.length),l=new Array(t.length),u=0;u=0?h.get(v):0}}var g=0;for(p=0;p{var n=r(41537);function a(e,t){this.totalCount=e,this.dataCount=t}a.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],a.getRSBlocks=function(e,t){var r=a.getRsBlockTable(e,t);if(void 0==r)throw new Error("bad rs block @ typeNumber:"+e+"/errorCorrectLevel:"+t);for(var n=r.length/3,o=new Array,i=0;i{for(var t={glog:function(e){if(e<1)throw new Error("glog("+e+")");return t.LOG_TABLE[e]},gexp:function(e){for(;e<0;)e+=255;for(;e>=256;)e-=255;return t.EXP_TABLE[e]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},r=0;r<8;r++)t.EXP_TABLE[r]=1<{e.exports={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8}},38759:(e,t,r)=>{var n=r(19852),a=r(30501),o=r(39341),i=0,s=1,l=2,u=3,c=4,d=5,p=6,f=7,h={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(e){for(var t=e<<10;h.getBCHDigit(t)-h.getBCHDigit(h.G15)>=0;)t^=h.G15<=0;)t^=h.G18<>>=1;return t},getPatternPosition:function(e){return h.PATTERN_POSITION_TABLE[e-1]},getMask:function(e,t,r){switch(e){case i:return(t+r)%2==0;case s:return t%2==0;case l:return r%3==0;case u:return(t+r)%3==0;case c:return(Math.floor(t/2)+Math.floor(r/3))%2==0;case d:return t*r%2+t*r%3==0;case p:return(t*r%2+t*r%3)%2==0;case f:return(t*r%3+(t+r)%2)%2==0;default:throw new Error("bad maskPattern:"+e)}},getErrorCorrectPolynomial:function(e){for(var t=new a([1],0),r=0;r5&&(r+=3+o-5)}for(n=0;n{"use strict";var n=r(96540),a=r(58527),o={},i=function(e,t,r,n){var a=e+"-"+t+"-"+r+(n?"-server":"");if(o[a])return o[a];var i=function(e,t,r,n){if("undefined"===typeof document&&!n)return null;var a=n?new n:document.createElement("canvas");a.width=2*r,a.height=2*r;var o=a.getContext("2d");return o?(o.fillStyle=e,o.fillRect(0,0,a.width,a.height),o.fillStyle=t,o.fillRect(0,0,r,r),o.translate(r,r),o.fillRect(0,0,r,r),a.toDataURL()):null}(e,t,r,n);return o[a]=i,i},s=Object.assign||function(e){for(var t=1;ti?1:Math.round(100*c/i)/100,t.a!==d)return{h:t.h,s:t.s,l:t.l,a:d,source:"rgb"}}else{var p=void 0;if(n!==(p=u<0?0:u>o?1:Math.round(100*u/o)/100))return{h:t.h,s:t.s,l:t.l,a:p,source:"rgb"}}return null}(e,n.props.hsl,n.props.direction,n.props.a,n.container);t&&"function"===typeof n.props.onChange&&n.props.onChange(t,e)},n.handleMouseDown=function(e){n.handleChange(e),window.addEventListener("mousemove",n.handleChange),window.addEventListener("mouseup",n.handleMouseUp)},n.handleMouseUp=function(){n.unbindEventListeners()},n.unbindEventListeners=function(){window.removeEventListener("mousemove",n.handleChange),window.removeEventListener("mouseup",n.handleMouseUp)},p(n,r)}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),d(t,[{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"render",value:function(){var e=this,t=this.props.rgb,r=(0,a.Ay)({default:{alpha:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius},checkboard:{absolute:"0px 0px 0px 0px",overflow:"hidden",borderRadius:this.props.radius},gradient:{absolute:"0px 0px 0px 0px",background:"linear-gradient(to right, rgba("+t.r+","+t.g+","+t.b+", 0) 0%,\n rgba("+t.r+","+t.g+","+t.b+", 1) 100%)",boxShadow:this.props.shadow,borderRadius:this.props.radius},container:{position:"relative",height:"100%",margin:"0 3px"},pointer:{position:"absolute",left:100*t.a+"%"},slider:{width:"4px",borderRadius:"1px",height:"8px",boxShadow:"0 0 2px rgba(0, 0, 0, .6)",background:"#fff",marginTop:"1px",transform:"translateX(-2px)"}},vertical:{gradient:{background:"linear-gradient(to bottom, rgba("+t.r+","+t.g+","+t.b+", 0) 0%,\n rgba("+t.r+","+t.g+","+t.b+", 1) 100%)"},pointer:{left:0,top:100*t.a+"%"}},overwrite:c({},this.props.style)},{vertical:"vertical"===this.props.direction,overwrite:!0});return n.createElement("div",{style:r.alpha},n.createElement("div",{style:r.checkboard},n.createElement(u,{renderers:this.props.renderers})),n.createElement("div",{style:r.gradient}),n.createElement("div",{style:r.container,ref:function(t){return e.container=t},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},n.createElement("div",{style:r.pointer},this.props.pointer?n.createElement(this.props.pointer,this.props):n.createElement("div",{style:r.slider}))))}}]),t}(n.PureComponent||n.Component);var h=function(){function e(e,t){for(var r=0;r-1)){var a=r.getArrowOffset(),o=38===e.keyCode?n+a:n-a;r.setUpdatedValue(o,e)}},r.handleDrag=function(e){if(r.props.dragLabel){var t=Math.round(r.props.value+e.movementX);t>=0&&t<=r.props.dragMax&&r.props.onChange&&r.props.onChange(r.getValueObjectWithLabel(t),e)}},r.handleMouseDown=function(e){r.props.dragLabel&&(e.preventDefault(),r.handleDrag(e),window.addEventListener("mousemove",r.handleDrag),window.addEventListener("mouseup",r.handleMouseUp))},r.handleMouseUp=function(){r.unbindEventListeners()},r.unbindEventListeners=function(){window.removeEventListener("mousemove",r.handleDrag),window.removeEventListener("mouseup",r.handleMouseUp)},r.state={value:String(e.value).toUpperCase(),blurValue:String(e.value).toUpperCase()},r.inputId="rc-editable-input-"+g++,r}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),h(t,[{key:"componentDidUpdate",value:function(e,t){this.props.value===this.state.value||e.value===this.props.value&&t.value===this.state.value||(this.input===document.activeElement?this.setState({blurValue:String(this.props.value).toUpperCase()}):this.setState({value:String(this.props.value).toUpperCase(),blurValue:!this.state.blurValue&&String(this.props.value).toUpperCase()}))}},{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"getValueObjectWithLabel",value:function(e){return function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},this.props.label,e)}},{key:"getArrowOffset",value:function(){return this.props.arrowOffset||1}},{key:"setUpdatedValue",value:function(e,t){var r=this.props.label?this.getValueObjectWithLabel(e):e;this.props.onChange&&this.props.onChange(r,t),this.setState({value:e})}},{key:"render",value:function(){var e=this,t=(0,a.Ay)({default:{wrap:{position:"relative"}},"user-override":{wrap:this.props.style&&this.props.style.wrap?this.props.style.wrap:{},input:this.props.style&&this.props.style.input?this.props.style.input:{},label:this.props.style&&this.props.style.label?this.props.style.label:{}},"dragLabel-true":{label:{cursor:"ew-resize"}}},{"user-override":!0},this.props);return n.createElement("div",{style:t.wrap},n.createElement("input",{id:this.inputId,style:t.input,ref:function(t){return e.input=t},value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,onBlur:this.handleBlur,placeholder:this.props.placeholder,spellCheck:"false"}),this.props.label&&!this.props.hideLabel?n.createElement("label",{htmlFor:this.inputId,style:t.label,onMouseDown:this.handleMouseDown},this.props.label):null)}}]),t}(n.PureComponent||n.Component);var b=function(){function e(e,t){for(var r=0;ro?0:360*(-100*u/o+100)/100,r.h!==c)return{h:c,s:r.s,l:r.l,a:r.a,source:"hsl"}}else{var d=void 0;if(d=l<0?0:l>a?359:100*l/a*360/100,r.h!==d)return{h:d,s:r.s,l:r.l,a:r.a,source:"hsl"}}return null}(e,n.props.direction,n.props.hsl,n.container);t&&"function"===typeof n.props.onChange&&n.props.onChange(t,e)},n.handleMouseDown=function(e){n.handleChange(e),window.addEventListener("mousemove",n.handleChange),window.addEventListener("mouseup",n.handleMouseUp)},n.handleMouseUp=function(){n.unbindEventListeners()},y(n,r)}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),b(t,[{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"unbindEventListeners",value:function(){window.removeEventListener("mousemove",this.handleChange),window.removeEventListener("mouseup",this.handleMouseUp)}},{key:"render",value:function(){var e=this,t=this.props.direction,r=void 0===t?"horizontal":t,o=(0,a.Ay)({default:{hue:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius,boxShadow:this.props.shadow},container:{padding:"0 2px",position:"relative",height:"100%",borderRadius:this.props.radius},pointer:{position:"absolute",left:100*this.props.hsl.h/360+"%"},slider:{marginTop:"1px",width:"4px",borderRadius:"1px",height:"8px",boxShadow:"0 0 2px rgba(0, 0, 0, .6)",background:"#fff",transform:"translateX(-2px)"}},vertical:{pointer:{left:"0px",top:-100*this.props.hsl.h/360+100+"%"}}},{vertical:"vertical"===r});return n.createElement("div",{style:o.hue},n.createElement("div",{className:"hue-"+r,style:o.container,ref:function(t){return e.container=t},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},n.createElement("style",null,"\n .hue-horizontal {\n background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0\n 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n background: -webkit-linear-gradient(to right, #f00 0%, #ff0\n 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n }\n\n .hue-vertical {\n background: linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%,\n #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n background: -webkit-linear-gradient(to top, #f00 0%, #ff0 17%,\n #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);\n }\n "),n.createElement("div",{style:o.pointer},this.props.pointer?n.createElement(this.props.pointer,this.props):n.createElement("div",{style:o.slider}))))}}]),t}(n.PureComponent||n.Component);var x=r(5556),k=r.n(x);const D=function(){this.__data__=[],this.size=0};const C=function(e,t){return e===t||e!==e&&t!==t};const E=function(e,t){for(var r=e.length;r--;)if(C(e[r][0],t))return r;return-1};var A=Array.prototype.splice;const S=function(e){var t=this.__data__,r=E(t,e);return!(r<0)&&(r==t.length-1?t.pop():A.call(t,r,1),--this.size,!0)};const _=function(e){var t=this.__data__,r=E(t,e);return r<0?void 0:t[r][1]};const M=function(e){return E(this.__data__,e)>-1};const T=function(e,t){var r=this.__data__,n=E(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function O(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e<=9007199254740991};const ut=function(e){return null!=e&<(e.length)&&!$(e)};const ct=function(e){return tt(e)&&ut(e)};const dt=function(){return!1};var pt="object"==typeof exports&&exports&&!exports.nodeType&&exports,ft=pt&&"object"==typeof module&&module&&!module.nodeType&&module,ht=ft&&ft.exports===pt?B.Buffer:void 0;const vt=(ht?ht.isBuffer:void 0)||dt;var gt=Function.prototype,mt=Object.prototype,bt=gt.toString,yt=mt.hasOwnProperty,wt=bt.call(Object);const xt=function(e){if(!tt(e)||"[object Object]"!=X(e))return!1;var t=$e(e);if(null===t)return!0;var r=yt.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&bt.call(r)==wt};var kt={};kt["[object Float32Array]"]=kt["[object Float64Array]"]=kt["[object Int8Array]"]=kt["[object Int16Array]"]=kt["[object Int32Array]"]=kt["[object Uint8Array]"]=kt["[object Uint8ClampedArray]"]=kt["[object Uint16Array]"]=kt["[object Uint32Array]"]=!0,kt["[object Arguments]"]=kt["[object Array]"]=kt["[object ArrayBuffer]"]=kt["[object Boolean]"]=kt["[object DataView]"]=kt["[object Date]"]=kt["[object Error]"]=kt["[object Function]"]=kt["[object Map]"]=kt["[object Number]"]=kt["[object Object]"]=kt["[object RegExp]"]=kt["[object Set]"]=kt["[object String]"]=kt["[object WeakMap]"]=!1;const Dt=function(e){return tt(e)&<(e.length)&&!!kt[X(e)]};const Ct=function(e){return function(t){return e(t)}};var Et="object"==typeof exports&&exports&&!exports.nodeType&&exports,At=Et&&"object"==typeof module&&module&&!module.nodeType&&module,St=At&&At.exports===Et&&Y.process,_t=function(){try{var e=At&&At.require&&At.require("util").types;return e||St&&St.binding&&St.binding("util")}catch(t){}}();var Mt=_t&&_t.isTypedArray;const Tt=Mt?Ct(Mt):Dt;const Ot=function(e,t){if(("constructor"!==t||"function"!==typeof e[t])&&"__proto__"!=t)return e[t]};var Pt=Object.prototype.hasOwnProperty;const Nt=function(e,t,r){var n=e[t];Pt.call(e,t)&&C(n,r)&&(void 0!==r||t in e)||Fe(e,t,r)};const Rt=function(e,t,r,n){var a=!r;r||(r={});for(var o=-1,i=t.length;++o-1&&e%1==0&&e0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Zt);const tr=function(e,t){return er(Vt(e,t,Kt),e+"")};const rr=function(e,t,r){if(!V(r))return!1;var n=typeof t;return!!("number"==n?ut(r)&&Yt(t,r.length):"string"==n&&t in r)&&C(r[t],e)};const nr=function(e){return tr((function(t,r){var n=-1,a=r.length,o=a>1?r[a-1]:void 0,i=a>2?r[2]:void 0;for(o=e.length>3&&"function"==typeof o?(a--,o):void 0,i&&rr(r[0],r[1],i)&&(o=a<3?void 0:o,a=1),t=Object(t);++n=t||r<0||d&&e-u>=o}function v(){var e=ir();if(h(e))return g(e);s=setTimeout(v,function(e){var r=t-(e-l);return d?br(r,o-(e-u)):r}(e))}function g(e){return s=void 0,p&&n?f(e):(n=a=void 0,i)}function m(){var e=ir(),r=h(e);if(n=arguments,a=this,l=e,r){if(void 0===s)return function(e){return u=e,s=setTimeout(v,t),c?f(e):i}(l);if(d)return clearTimeout(s),s=setTimeout(v,t),f(l)}return void 0===s&&(s=setTimeout(v,t)),i}return t=gr(t)||0,V(r)&&(c=!!r.leading,o=(d="maxWait"in r)?mr(gr(r.maxWait)||0,t):o,p="trailing"in r?!!r.trailing:p),m.cancel=function(){void 0!==s&&clearTimeout(s),u=0,n=l=a=s=void 0},m.flush=function(){return void 0===s?i:g(ir())},m};const wr=function(e,t,r){var n=!0,a=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return V(r)&&(n="leading"in r?!!r.leading:n,a="trailing"in r?!!r.trailing:a),yr(e,t,{leading:n,maxWait:t,trailing:a})};var xr=function(){function e(e,t){for(var r=0;ra&&(l=a),u<0?u=0:u>o&&(u=o);var c=l/a,d=1-u/o;return{h:t.h,s:c,v:d,a:t.a,source:"hsv"}}(e,r.props.hsl,r.container),e)},r.handleMouseDown=function(e){r.handleChange(e);var t=r.getContainerRenderWindow();t.addEventListener("mousemove",r.handleChange),t.addEventListener("mouseup",r.handleMouseUp)},r.handleMouseUp=function(){r.unbindEventListeners()},r.throttle=wr((function(e,t,r){e(t,r)}),50),r}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),xr(t,[{key:"componentWillUnmount",value:function(){this.throttle.cancel(),this.unbindEventListeners()}},{key:"getContainerRenderWindow",value:function(){for(var e=this.container,t=window;!t.document.contains(e)&&t.parent!==t;)t=t.parent;return t}},{key:"unbindEventListeners",value:function(){var e=this.getContainerRenderWindow();e.removeEventListener("mousemove",this.handleChange),e.removeEventListener("mouseup",this.handleMouseUp)}},{key:"render",value:function(){var e=this,t=this.props.style||{},r=t.color,o=t.white,i=t.black,s=t.pointer,l=t.circle,u=(0,a.Ay)({default:{color:{absolute:"0px 0px 0px 0px",background:"hsl("+this.props.hsl.h+",100%, 50%)",borderRadius:this.props.radius},white:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius},black:{absolute:"0px 0px 0px 0px",boxShadow:this.props.shadow,borderRadius:this.props.radius},pointer:{position:"absolute",top:-100*this.props.hsv.v+100+"%",left:100*this.props.hsv.s+"%",cursor:"default"},circle:{width:"4px",height:"4px",boxShadow:"0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3),\n 0 0 1px 2px rgba(0,0,0,.4)",borderRadius:"50%",cursor:"hand",transform:"translate(-2px, -2px)"}},custom:{color:r,white:o,black:i,pointer:s,circle:l}},{custom:!!this.props.style});return n.createElement("div",{style:u.color,ref:function(t){return e.container=t},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},n.createElement("style",null,"\n .saturation-white {\n background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0));\n background: linear-gradient(to right, #fff, rgba(255,255,255,0));\n }\n .saturation-black {\n background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0));\n background: linear-gradient(to top, #000, rgba(0,0,0,0));\n }\n "),n.createElement("div",{style:u.white,className:"saturation-white"},n.createElement("div",{style:u.black,className:"saturation-black"}),n.createElement("div",{style:u.pointer},this.props.pointer?n.createElement(this.props.pointer,this.props):n.createElement("div",{style:u.circle}))))}}]),t}(n.PureComponent||n.Component);const Dr=kr;const Cr=function(e,t){for(var r=-1,n=null==e?0:e.length;++r1&&(r-=1),r<1/6?e+6*(t-e)*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e}if(e=tn(e,360),t=tn(t,100),r=tn(r,100),0===t)n=a=o=r;else{var s=r<.5?r*(1+t):r+t-r*t,l=2*r-s;n=i(l,s,e+1/3),a=i(l,s,e),o=i(l,s,e-1/3)}return{r:255*n,g:255*a,b:255*o}}(e.h,n,o),i=!0,s="hsl"),e.hasOwnProperty("a")&&(r=e.a));var l,u,c;return r=en(r),{ok:i,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||r.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=r.ok}function Fr(e,t,r){e=tn(e,255),t=tn(t,255),r=tn(r,255);var n,a,o=Math.max(e,t,r),i=Math.min(e,t,r),s=(o+i)/2;if(o==i)n=a=0;else{var l=o-i;switch(a=s>.5?l/(2-o-i):l/(o+i),o){case e:n=(t-r)/l+(t>1)+720)%360;--t;)n.h=(n.h+a)%360,o.push(Lr(n));return o}function $r(e,t){t=t||6;for(var r=Lr(e).toHsv(),n=r.h,a=r.s,o=r.v,i=[],s=1/t;t--;)i.push(Lr({h:n,s:a,v:o})),o=(o+s)%1;return i}Lr.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},getLuminance:function(){var e,t,r,n=this.toRgb();return e=n.r/255,t=n.g/255,r=n.b/255,.2126*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},setAlpha:function(e){return this._a=en(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=Yr(this._r,this._g,this._b);return{h:360*e.h,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=Yr(this._r,this._g,this._b),t=Math.round(360*e.h),r=Math.round(100*e.s),n=Math.round(100*e.v);return 1==this._a?"hsv("+t+", "+r+"%, "+n+"%)":"hsva("+t+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var e=Fr(this._r,this._g,this._b);return{h:360*e.h,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=Fr(this._r,this._g,this._b),t=Math.round(360*e.h),r=Math.round(100*e.s),n=Math.round(100*e.l);return 1==this._a?"hsl("+t+", "+r+"%, "+n+"%)":"hsla("+t+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(e){return jr(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return function(e,t,r,n,a){var o=[an(Math.round(e).toString(16)),an(Math.round(t).toString(16)),an(Math.round(r).toString(16)),an(sn(n))];if(a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*tn(this._r,255))+"%",g:Math.round(100*tn(this._g,255))+"%",b:Math.round(100*tn(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*tn(this._r,255))+"%, "+Math.round(100*tn(this._g,255))+"%, "+Math.round(100*tn(this._b,255))+"%)":"rgba("+Math.round(100*tn(this._r,255))+"%, "+Math.round(100*tn(this._g,255))+"%, "+Math.round(100*tn(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(Jr[jr(this._r,this._g,this._b,!0)]||!1)},toFilter:function(e){var t="#"+Br(this._r,this._g,this._b,this._a),r=t,n=this._gradientType?"GradientType = 1, ":"";if(e){var a=Lr(e);r="#"+Br(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+t+",endColorstr="+r+")"},toString:function(e){var t=!!e;e=e||this._format;var r=!1,n=this._a<1&&this._a>=0;return t||!n||"hex"!==e&&"hex6"!==e&&"hex3"!==e&&"hex4"!==e&&"hex8"!==e&&"name"!==e?("rgb"===e&&(r=this.toRgbString()),"prgb"===e&&(r=this.toPercentageRgbString()),"hex"!==e&&"hex6"!==e||(r=this.toHexString()),"hex3"===e&&(r=this.toHexString(!0)),"hex4"===e&&(r=this.toHex8String(!0)),"hex8"===e&&(r=this.toHex8String()),"name"===e&&(r=this.toName()),"hsl"===e&&(r=this.toHslString()),"hsv"===e&&(r=this.toHsvString()),r||this.toHexString()):"name"===e&&0===this._a?this.toName():this.toRgbString()},clone:function(){return Lr(this.toString())},_applyModification:function(e,t){var r=e.apply(null,[this].concat([].slice.call(t)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(Ur,arguments)},brighten:function(){return this._applyModification(qr,arguments)},darken:function(){return this._applyModification(zr,arguments)},desaturate:function(){return this._applyModification(Ir,arguments)},saturate:function(){return this._applyModification(Hr,arguments)},greyscale:function(){return this._applyModification(Wr,arguments)},spin:function(){return this._applyModification(Qr,arguments)},_applyCombination:function(e,t){return e.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(Vr,arguments)},complement:function(){return this._applyCombination(Kr,arguments)},monochromatic:function(){return this._applyCombination($r,arguments)},splitcomplement:function(){return this._applyCombination(Xr,arguments)},triad:function(){return this._applyCombination(Gr,[3])},tetrad:function(){return this._applyCombination(Gr,[4])}},Lr.fromRatio=function(e,t){if("object"==Pr(e)){var r={};for(var n in e)e.hasOwnProperty(n)&&(r[n]="a"===n?e[n]:on(e[n]));e=r}return Lr(e,t)},Lr.equals=function(e,t){return!(!e||!t)&&Lr(e).toRgbString()==Lr(t).toRgbString()},Lr.random=function(){return Lr.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},Lr.mix=function(e,t,r){r=0===r?0:r||50;var n=Lr(e).toRgb(),a=Lr(t).toRgb(),o=r/100;return Lr({r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a})},Lr.readability=function(e,t){var r=Lr(e),n=Lr(t);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)},Lr.isReadable=function(e,t,r){var n,a,o=Lr.readability(e,t);switch(a=!1,(n=function(e){var t,r;t=((e=e||{level:"AA",size:"small"}).level||"AA").toUpperCase(),r=(e.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==r&&"large"!==r&&(r="small");return{level:t,size:r}}(r)).level+n.size){case"AAsmall":case"AAAlarge":a=o>=4.5;break;case"AAlarge":a=o>=3;break;case"AAAsmall":a=o>=7}return a},Lr.mostReadable=function(e,t,r){var n,a,o,i,s=null,l=0;a=(r=r||{}).includeFallbackColors,o=r.level,i=r.size;for(var u=0;ul&&(l=n,s=Lr(t[u]));return Lr.isReadable(e,s,{level:o,size:i})||!a?s:(r.includeFallbackColors=!1,Lr.mostReadable(e,["#fff","#000"],r))};var Zr=Lr.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Jr=Lr.hexNames=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}(Zr);function en(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function tn(e,t){(function(e){return"string"==typeof e&&-1!=e.indexOf(".")&&1===parseFloat(e)})(e)&&(e="100%");var r=function(e){return"string"===typeof e&&-1!=e.indexOf("%")}(e);return e=Math.min(t,Math.max(0,parseFloat(e))),r&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function rn(e){return Math.min(1,Math.max(0,e))}function nn(e){return parseInt(e,16)}function an(e){return 1==e.length?"0"+e:""+e}function on(e){return e<=1&&(e=100*e+"%"),e}function sn(e){return Math.round(255*parseFloat(e)).toString(16)}function ln(e){return nn(e)/255}var un=function(){var e="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",t="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?",r="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?";return{CSS_UNIT:new RegExp(e),rgb:new RegExp("rgb"+t),rgba:new RegExp("rgba"+r),hsl:new RegExp("hsl"+t),hsla:new RegExp("hsla"+r),hsv:new RegExp("hsv"+t),hsva:new RegExp("hsva"+r),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function cn(e){return!!un.CSS_UNIT.exec(e)}var dn=function(e){var t=0,r=0;return Or(["r","g","b","a","h","s","l","v"],(function(n){if(e[n]&&(t+=1,isNaN(e[n])||(r+=1),"s"===n||"l"===n)){/^\d+%$/.test(e[n])&&(r+=1)}})),t===r&&e},pn=function(e,t){var r=e.hex?Lr(e.hex):Lr(e),n=r.toHsl(),a=r.toHsv(),o=r.toRgb(),i=r.toHex();return 0===n.s&&(n.h=t||0,a.h=t||0),{hsl:n,hex:"000000"===i&&0===o.a?"transparent":"#"+i,rgb:o,hsv:a,oldHue:e.h||t||n.h,source:e.source}},fn=function(e){if("transparent"===e)return!0;var t="#"===String(e).charAt(0)?1:0;return e.length!==4+t&&e.length<7+t&&Lr(e).isValid()},hn=function(e){if(!e)return"#fff";var t=pn(e);return"transparent"===t.hex?"rgba(0,0,0,0.4)":(299*t.rgb.r+587*t.rgb.g+114*t.rgb.b)/1e3>=128?"#000":"#fff"},vn=function(e,t){return Lr(t+" ("+e.replace("\xb0","")+")")._ok},gn=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"span";return function(r){function a(){var e,t,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a);for(var n=arguments.length,o=Array(n),i=0;is))return!1;var u=o.get(e),c=o.get(t);if(u&&c)return u==t&&c==e;var d=-1,p=!0,f=2&r?new On:void 0;for(o.set(e,t),o.set(t,e);++d1&&(e.a=1),r.props.onChange({h:r.props.hsl.h,s:r.props.hsl.s,l:r.props.hsl.l,a:Math.round(100*e.a)/100,source:"rgb"},t)):(e.h||e.s||e.l)&&("string"===typeof e.s&&e.s.includes("%")&&(e.s=e.s.replace("%","")),"string"===typeof e.l&&e.l.includes("%")&&(e.l=e.l.replace("%","")),1==e.s?e.s=.01:1==e.l&&(e.l=.01),r.props.onChange({h:e.h||r.props.hsl.h,s:Number(yo(e.s)?r.props.hsl.s:e.s),l:Number(yo(e.l)?r.props.hsl.l:e.l),source:"hsl"},t))},r.showHighlight=function(e){e.currentTarget.style.background="#eee"},r.hideHighlight=function(e){e.currentTarget.style.background="transparent"},1!==e.hsl.a&&"hex"===e.view?r.state={view:"rgb"}:r.state={view:e.view},r}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),xo(t,[{key:"render",value:function(){var e=this,t=(0,a.Ay)({default:{wrap:{paddingTop:"16px",display:"flex"},fields:{flex:"1",display:"flex",marginLeft:"-6px"},field:{paddingLeft:"6px",width:"100%"},alpha:{paddingLeft:"6px",width:"100%"},toggle:{width:"32px",textAlign:"right",position:"relative"},icon:{marginRight:"-4px",marginTop:"12px",cursor:"pointer",position:"relative"},iconHighlight:{position:"absolute",width:"24px",height:"28px",background:"#eee",borderRadius:"4px",top:"10px",left:"12px",display:"none"},input:{fontSize:"11px",color:"#333",width:"100%",borderRadius:"2px",border:"none",boxShadow:"inset 0 0 0 1px #dadada",height:"21px",textAlign:"center"},label:{textTransform:"uppercase",fontSize:"11px",lineHeight:"11px",color:"#969696",textAlign:"center",display:"block",marginTop:"12px"},svg:{fill:"#333",width:"24px",height:"24px",border:"1px transparent solid",borderRadius:"5px"}},disableAlpha:{alpha:{display:"none"}}},this.props,this.state),r=void 0;return"hex"===this.state.view?r=n.createElement("div",{style:t.fields,className:"flexbox-fix"},n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"hex",value:this.props.hex,onChange:this.handleChange}))):"rgb"===this.state.view?r=n.createElement("div",{style:t.fields,className:"flexbox-fix"},n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"r",value:this.props.rgb.r,onChange:this.handleChange})),n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"g",value:this.props.rgb.g,onChange:this.handleChange})),n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"b",value:this.props.rgb.b,onChange:this.handleChange})),n.createElement("div",{style:t.alpha},n.createElement(m,{style:{input:t.input,label:t.label},label:"a",value:this.props.rgb.a,arrowOffset:.01,onChange:this.handleChange}))):"hsl"===this.state.view&&(r=n.createElement("div",{style:t.fields,className:"flexbox-fix"},n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"h",value:Math.round(this.props.hsl.h),onChange:this.handleChange})),n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"s",value:Math.round(100*this.props.hsl.s)+"%",onChange:this.handleChange})),n.createElement("div",{style:t.field},n.createElement(m,{style:{input:t.input,label:t.label},label:"l",value:Math.round(100*this.props.hsl.l)+"%",onChange:this.handleChange})),n.createElement("div",{style:t.alpha},n.createElement(m,{style:{input:t.input,label:t.label},label:"a",value:this.props.hsl.a,arrowOffset:.01,onChange:this.handleChange})))),n.createElement("div",{style:t.wrap,className:"flexbox-fix"},r,n.createElement("div",{style:t.toggle},n.createElement("div",{style:t.icon,onClick:this.toggleViews,ref:function(t){return e.icon=t}},n.createElement(wo.A,{style:t.svg,onMouseOver:this.showHighlight,onMouseEnter:this.showHighlight,onMouseOut:this.hideHighlight}))))}}],[{key:"getDerivedStateFromProps",value:function(e,t){return 1!==e.hsl.a&&"hex"===t.view?{view:"rgb"}:null}}]),t}(n.Component);ko.defaultProps={view:"hex"};const Do=ko;const Co=function(){var e=(0,a.Ay)({default:{picker:{width:"12px",height:"12px",borderRadius:"6px",transform:"translate(-6px, -1px)",backgroundColor:"rgb(248, 248, 248)",boxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.37)"}}});return n.createElement("div",{style:e.picker})};const Eo=function(){var e=(0,a.Ay)({default:{picker:{width:"12px",height:"12px",borderRadius:"6px",boxShadow:"inset 0 0 0 1px #fff",transform:"translate(-6px, -6px)"}}});return n.createElement("div",{style:e.picker})};var Ao=function(e){var t=e.width,r=e.onChange,o=e.disableAlpha,i=e.rgb,s=e.hsl,l=e.hsv,c=e.hex,d=e.renderers,p=e.styles,h=void 0===p?{}:p,v=e.className,g=void 0===v?"":v,m=e.defaultView,b=(0,a.Ay)(nr({default:{picker:{width:t,background:"#fff",borderRadius:"2px",boxShadow:"0 0 2px rgba(0,0,0,.3), 0 4px 8px rgba(0,0,0,.3)",boxSizing:"initial",fontFamily:"Menlo"},saturation:{width:"100%",paddingBottom:"55%",position:"relative",borderRadius:"2px 2px 0 0",overflow:"hidden"},Saturation:{radius:"2px 2px 0 0"},body:{padding:"16px 16px 12px"},controls:{display:"flex"},color:{width:"32px"},swatch:{marginTop:"6px",width:"16px",height:"16px",borderRadius:"8px",position:"relative",overflow:"hidden"},active:{absolute:"0px 0px 0px 0px",borderRadius:"8px",boxShadow:"inset 0 0 0 1px rgba(0,0,0,.1)",background:"rgba("+i.r+", "+i.g+", "+i.b+", "+i.a+")",zIndex:"2"},toggles:{flex:"1"},hue:{height:"10px",position:"relative",marginBottom:"8px"},Hue:{radius:"2px"},alpha:{height:"10px",position:"relative"},Alpha:{radius:"2px"}},disableAlpha:{color:{width:"22px"},alpha:{display:"none"},hue:{marginBottom:"0px"},swatch:{width:"10px",height:"10px",marginTop:"0px"}}},h),{disableAlpha:o});return n.createElement("div",{style:b.picker,className:"chrome-picker "+g},n.createElement("div",{style:b.saturation},n.createElement(Dr,{style:b.Saturation,hsl:s,hsv:l,pointer:Eo,onChange:r})),n.createElement("div",{style:b.body},n.createElement("div",{style:b.controls,className:"flexbox-fix"},n.createElement("div",{style:b.color},n.createElement("div",{style:b.swatch},n.createElement("div",{style:b.active}),n.createElement(u,{renderers:d}))),n.createElement("div",{style:b.toggles},n.createElement("div",{style:b.hue},n.createElement(w,{style:b.Hue,hsl:s,pointer:Co,onChange:r})),n.createElement("div",{style:b.alpha},n.createElement(f,{style:b.Alpha,rgb:i,hsl:s,pointer:Co,renderers:d,onChange:r})))),n.createElement(Do,{rgb:i,hsl:s,hex:c,view:m,onChange:r,disableAlpha:o})))};Ao.propTypes={width:k().oneOfType([k().string,k().number]),disableAlpha:k().bool,styles:k().object,defaultView:k().oneOf(["hex","rgb","hsl"])},Ao.defaultProps={width:225,disableAlpha:!1,styles:{}};bn(Ao);const So=function(e){var t=e.color,r=e.onClick,o=void 0===r?function(){}:r,i=e.onSwatchHover,s=e.active,l=(0,a.Ay)({default:{color:{background:t,width:"15px",height:"15px",float:"left",marginRight:"5px",marginBottom:"5px",position:"relative",cursor:"pointer"},dot:{absolute:"5px 5px 5px 5px",background:hn(t),borderRadius:"50%",opacity:"0"}},active:{dot:{opacity:"1"}},"color-#FFFFFF":{color:{boxShadow:"inset 0 0 0 1px #ddd"},dot:{background:"#000"}},transparent:{dot:{background:"#000"}}},{active:s,"color-#FFFFFF":"#FFFFFF"===t,transparent:"transparent"===t});return n.createElement(Dn,{style:l.color,color:t,onClick:o,onHover:i,focusStyle:{boxShadow:"0 0 4px "+t}},n.createElement("div",{style:l.dot}))};const _o=function(e){var t=e.hex,r=e.rgb,o=e.onChange,i=(0,a.Ay)({default:{fields:{display:"flex",paddingBottom:"6px",paddingRight:"5px",position:"relative"},active:{position:"absolute",top:"6px",left:"5px",height:"9px",width:"9px",background:t},HEXwrap:{flex:"6",position:"relative"},HEXinput:{width:"80%",padding:"0px",paddingLeft:"20%",border:"none",outline:"none",background:"none",fontSize:"12px",color:"#333",height:"16px"},HEXlabel:{display:"none"},RGBwrap:{flex:"3",position:"relative"},RGBinput:{width:"70%",padding:"0px",paddingLeft:"30%",border:"none",outline:"none",background:"none",fontSize:"12px",color:"#333",height:"16px"},RGBlabel:{position:"absolute",top:"3px",left:"0px",lineHeight:"16px",textTransform:"uppercase",fontSize:"12px",color:"#999"}}}),s=function(e,t){e.r||e.g||e.b?o({r:e.r||r.r,g:e.g||r.g,b:e.b||r.b,source:"rgb"},t):o({hex:e.hex,source:"hex"},t)};return n.createElement("div",{style:i.fields,className:"flexbox-fix"},n.createElement("div",{style:i.active}),n.createElement(m,{style:{wrap:i.HEXwrap,input:i.HEXinput,label:i.HEXlabel},label:"hex",value:t,onChange:s}),n.createElement(m,{style:{wrap:i.RGBwrap,input:i.RGBinput,label:i.RGBlabel},label:"r",value:r.r,onChange:s}),n.createElement(m,{style:{wrap:i.RGBwrap,input:i.RGBinput,label:i.RGBlabel},label:"g",value:r.g,onChange:s}),n.createElement(m,{style:{wrap:i.RGBwrap,input:i.RGBinput,label:i.RGBlabel},label:"b",value:r.b,onChange:s}))};var Mo=function(e){var t=e.onChange,r=e.onSwatchHover,o=e.colors,i=e.hex,s=e.rgb,l=e.styles,u=void 0===l?{}:l,c=e.className,d=void 0===c?"":c,p=(0,a.Ay)(nr({default:{Compact:{background:"#f6f6f6",radius:"4px"},compact:{paddingTop:"5px",paddingLeft:"5px",boxSizing:"initial",width:"240px"},clear:{clear:"both"}}},u)),f=function(e,r){e.hex?fn(e.hex)&&t({hex:e.hex,source:"hex"},r):t(e,r)};return n.createElement(or,{style:p.Compact,styles:u},n.createElement("div",{style:p.compact,className:"compact-picker "+d},n.createElement("div",null,Ga(o,(function(e){return n.createElement(So,{key:e,color:e,active:e.toLowerCase()===i,onClick:f,onSwatchHover:r})})),n.createElement("div",{style:p.clear})),n.createElement(_o,{hex:i,rgb:s,onChange:f})))};Mo.propTypes={colors:k().arrayOf(k().string),styles:k().object},Mo.defaultProps={colors:["#4D4D4D","#999999","#FFFFFF","#F44E3B","#FE9200","#FCDC00","#DBDF00","#A4DD00","#68CCCA","#73D8FF","#AEA1FF","#FDA1FF","#333333","#808080","#cccccc","#D33115","#E27300","#FCC400","#B0BC00","#68BC00","#16A5A5","#009CE0","#7B64FF","#FA28FF","#000000","#666666","#B3B3B3","#9F0500","#C45100","#FB9E00","#808900","#194D33","#0C797D","#0062B1","#653294","#AB149E"],styles:{}};bn(Mo);const To=(0,a.H8)((function(e){var t=e.hover,r=e.color,o=e.onClick,i=e.onSwatchHover,s={position:"relative",zIndex:"2",outline:"2px solid #fff",boxShadow:"0 0 5px 2px rgba(0,0,0,0.25)"},l=(0,a.Ay)({default:{swatch:{width:"25px",height:"25px",fontSize:"0"}},hover:{swatch:s}},{hover:t});return n.createElement("div",{style:l.swatch},n.createElement(Dn,{color:r,onClick:o,onHover:i,focusStyle:s}))}));var Oo=function(e){var t=e.width,r=e.colors,o=e.onChange,i=e.onSwatchHover,s=e.triangle,l=e.styles,u=void 0===l?{}:l,c=e.className,d=void 0===c?"":c,p=(0,a.Ay)(nr({default:{card:{width:t,background:"#fff",border:"1px solid rgba(0,0,0,0.2)",boxShadow:"0 3px 12px rgba(0,0,0,0.15)",borderRadius:"4px",position:"relative",padding:"5px",display:"flex",flexWrap:"wrap"},triangle:{position:"absolute",border:"7px solid transparent",borderBottomColor:"#fff"},triangleShadow:{position:"absolute",border:"8px solid transparent",borderBottomColor:"rgba(0,0,0,0.15)"}},"hide-triangle":{triangle:{display:"none"},triangleShadow:{display:"none"}},"top-left-triangle":{triangle:{top:"-14px",left:"10px"},triangleShadow:{top:"-16px",left:"9px"}},"top-right-triangle":{triangle:{top:"-14px",right:"10px"},triangleShadow:{top:"-16px",right:"9px"}},"bottom-left-triangle":{triangle:{top:"35px",left:"10px",transform:"rotate(180deg)"},triangleShadow:{top:"37px",left:"9px",transform:"rotate(180deg)"}},"bottom-right-triangle":{triangle:{top:"35px",right:"10px",transform:"rotate(180deg)"},triangleShadow:{top:"37px",right:"9px",transform:"rotate(180deg)"}}},u),{"hide-triangle":"hide"===s,"top-left-triangle":"top-left"===s,"top-right-triangle":"top-right"===s,"bottom-left-triangle":"bottom-left"===s,"bottom-right-triangle":"bottom-right"===s}),f=function(e,t){return o({hex:e,source:"hex"},t)};return n.createElement("div",{style:p.card,className:"github-picker "+d},n.createElement("div",{style:p.triangleShadow}),n.createElement("div",{style:p.triangle}),Ga(r,(function(e){return n.createElement(To,{color:e,key:e,onClick:f,onSwatchHover:i})})))};Oo.propTypes={width:k().oneOfType([k().string,k().number]),colors:k().arrayOf(k().string),triangle:k().oneOf(["hide","top-left","top-right","bottom-left","bottom-right"]),styles:k().object},Oo.defaultProps={width:200,colors:["#B80000","#DB3E00","#FCCB00","#008B02","#006B76","#1273DE","#004DCF","#5300EB","#EB9694","#FAD0C3","#FEF3BD","#C1E1C5","#BEDADC","#C4DEF6","#BED3F3","#D4C4FB"],triangle:"top-left",styles:{}};bn(Oo);const Po=function(e){var t=e.direction,r=(0,a.Ay)({default:{picker:{width:"18px",height:"18px",borderRadius:"50%",transform:"translate(-9px, -1px)",backgroundColor:"rgb(248, 248, 248)",boxShadow:"0 1px 4px 0 rgba(0, 0, 0, 0.37)"}},vertical:{picker:{transform:"translate(-3px, -9px)"}}},{vertical:"vertical"===t});return n.createElement("div",{style:r.picker})};var No=Object.assign||function(e){for(var t=1;t.5});return n.createElement("div",{style:r.picker})};const Yo=function(){var e=(0,a.Ay)({default:{triangle:{width:0,height:0,borderStyle:"solid",borderWidth:"4px 0 4px 6px",borderColor:"transparent transparent transparent #fff",position:"absolute",top:"1px",left:"1px"},triangleBorder:{width:0,height:0,borderStyle:"solid",borderWidth:"5px 0 5px 8px",borderColor:"transparent transparent transparent #555"},left:{Extend:"triangleBorder",transform:"translate(-13px, -4px)"},leftInside:{Extend:"triangle",transform:"translate(-8px, -5px)"},right:{Extend:"triangleBorder",transform:"translate(20px, -14px) rotate(180deg)"},rightInside:{Extend:"triangle",transform:"translate(-8px, -5px)"}}});return n.createElement("div",{style:e.pointer},n.createElement("div",{style:e.left},n.createElement("div",{style:e.leftInside})),n.createElement("div",{style:e.right},n.createElement("div",{style:e.rightInside})))};const jo=function(e){var t=e.onClick,r=e.label,o=e.children,i=e.active,s=(0,a.Ay)({default:{button:{backgroundImage:"linear-gradient(-180deg, #FFFFFF 0%, #E6E6E6 100%)",border:"1px solid #878787",borderRadius:"2px",height:"20px",boxShadow:"0 1px 0 0 #EAEAEA",fontSize:"14px",color:"#000",lineHeight:"20px",textAlign:"center",marginBottom:"10px",cursor:"pointer"}},active:{button:{boxShadow:"0 0 0 1px #878787"}}},{active:i});return n.createElement("div",{style:s.button,onClick:t},r||o)};const Bo=function(e){var t=e.rgb,r=e.currentColor,o=(0,a.Ay)({default:{swatches:{border:"1px solid #B3B3B3",borderBottom:"1px solid #F0F0F0",marginBottom:"2px",marginTop:"1px"},new:{height:"34px",background:"rgb("+t.r+","+t.g+", "+t.b+")",boxShadow:"inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 1px 0 #000"},current:{height:"34px",background:r,boxShadow:"inset 1px 0 0 #000, inset -1px 0 0 #000, inset 0 -1px 0 #000"},label:{fontSize:"14px",color:"#000",textAlign:"center"}}});return n.createElement("div",null,n.createElement("div",{style:o.label},"new"),n.createElement("div",{style:o.swatches},n.createElement("div",{style:o.new}),n.createElement("div",{style:o.current})),n.createElement("div",{style:o.label},"current"))};var Io=function(){function e(e,t){for(var r=0;r100&&(e.a=100),e.a/=100,t({h:o.h,s:o.s,l:o.l,a:e.a,source:"rgb"},n))};return n.createElement("div",{style:l.fields,className:"flexbox-fix"},n.createElement("div",{style:l.double},n.createElement(m,{style:{input:l.input,label:l.label},label:"hex",value:i.replace("#",""),onChange:u})),n.createElement("div",{style:l.single},n.createElement(m,{style:{input:l.input,label:l.label},label:"r",value:r.r,onChange:u,dragLabel:"true",dragMax:"255"})),n.createElement("div",{style:l.single},n.createElement(m,{style:{input:l.input,label:l.label},label:"g",value:r.g,onChange:u,dragLabel:"true",dragMax:"255"})),n.createElement("div",{style:l.single},n.createElement(m,{style:{input:l.input,label:l.label},label:"b",value:r.b,onChange:u,dragLabel:"true",dragMax:"255"})),n.createElement("div",{style:l.alpha},n.createElement(m,{style:{input:l.input,label:l.label},label:"a",value:Math.round(100*r.a),onChange:u,dragLabel:"true",dragMax:"100"})))};var Uo=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,a=t.excludeDates,o=t.excludeDateIntervals,i=t.includeDates,s=t.includeDateIntervals,l=t.filterDate;return pr(e,{minDate:r,maxDate:n})||a&&a.some((function(t){return $t(e,t)}))||o&&o.some((function(t){var r=t.start,n=t.end;return ct.default(e,{start:r,end:n})}))||i&&!i.some((function(t){return $t(e,t)}))||s&&!s.some((function(t){var r=t.start,n=t.end;return ct.default(e,{start:r,end:n})}))||l&&!l(jt(e))||!1}function or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.excludeDates,n=t.excludeDateIntervals;return n&&n.length>0?n.some((function(t){var r=t.start,n=t.end;return ct.default(e,{start:r,end:n})})):r&&r.some((function(t){return $t(e,t)}))||!1}function ir(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,a=t.excludeDates,o=t.includeDates,i=t.filterDate;return pr(e,{minDate:$e.default(r),maxDate:tt.default(n)})||a&&a.some((function(t){return Xt(e,t)}))||o&&!o.some((function(t){return Xt(e,t)}))||i&&!i(jt(e))||!1}function sr(e,t,r,n){var a=Fe.default(e),o=Re.default(e),i=Fe.default(t),s=Re.default(t),l=Fe.default(n);return a===i&&a===l?o<=r&&r<=s:a=r||la:void 0}function lr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,a=t.excludeDates,o=t.includeDates,i=t.filterDate;return pr(e,{minDate:r,maxDate:n})||a&&a.some((function(t){return Vt(e,t)}))||o&&!o.some((function(t){return Vt(e,t)}))||i&&!i(jt(e))||!1}function ur(e,t,r){if(!he.default(t)||!he.default(r))return!1;var n=Fe.default(t),a=Fe.default(r);return n<=e&&a>=e}function cr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,a=t.excludeDates,o=t.includeDates,i=t.filterDate,s=new Date(e,0,1);return pr(s,{minDate:Je.default(r),maxDate:rt.default(n)})||a&&a.some((function(e){return Gt(s,e)}))||o&&!o.some((function(e){return Gt(s,e)}))||i&&!i(jt(s))||!1}function dr(e,t,r,n){var a=Fe.default(e),o=Le.default(e),i=Fe.default(t),s=Le.default(t),l=Fe.default(n);return a===i&&a===l?o<=r&&r<=s:a=r||la:void 0}function pr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate;return r&&Qe.default(e,r)<0||n&&Qe.default(e,n)>0}function fr(e,t){return t.some((function(t){return Te.default(t)===Te.default(e)&&Me.default(t)===Me.default(e)}))}function hr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.excludeTimes,n=t.includeTimes,a=t.filterTime;return r&&fr(e,r)||n&&!fr(e,n)||a&&!a(e)||!1}function vr(e,t){var r=t.minTime,n=t.maxTime;if(!r||!n)throw new Error("Both minTime and maxTime props required");var a,o=jt(),i=Ie.default(Be.default(o,Me.default(e)),Te.default(e)),s=Ie.default(Be.default(o,Me.default(r)),Te.default(r)),l=Ie.default(Be.default(o,Me.default(n)),Te.default(n));try{a=!ct.default(i,{start:s,end:l})}catch(e){a=!1}return a}function gr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,a=Ee.default(e,1);return r&&Ke.default(r,a)>0||n&&n.every((function(e){return Ke.default(e,a)>0}))||!1}function mr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,a=we.default(e,1);return r&&Ke.default(a,r)>0||n&&n.every((function(e){return Ke.default(a,e)>0}))||!1}function br(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,a=Se.default(e,1);return r&&Ge.default(r,a)>0||n&&n.every((function(e){return Ge.default(e,a)>0}))||!1}function yr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,a=ke.default(e,1);return r&&Ge.default(a,r)>0||n&&n.every((function(e){return Ge.default(a,e)>0}))||!1}function wr(e){var t=e.minDate,r=e.includeDates;if(r&&t){var n=r.filter((function(e){return Qe.default(e,t)>=0}));return qe.default(n)}return r?qe.default(r):t}function xr(e){var t=e.maxDate,r=e.includeDates;if(r&&t){var n=r.filter((function(e){return Qe.default(e,t)<=0}));return ze.default(n)}return r?ze.default(r):t}function kr(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"react-datepicker__day--highlighted",r=new Map,n=0,a=e.length;n0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"react-datepicker__day--holidays",r=new Map;return e.forEach((function(e){var n=e.date,a=e.holidayName;if(fe.default(n)){var o=It(n,"MM.dd.yyyy"),i=r.get(o)||{};if(!("className"in i)||i.className!==t||(s=i.holidayNames,l=[a],s.length!==l.length||!s.every((function(e,t){return e===l[t]})))){var s,l;i.className=t;var u=i.holidayNames;i.holidayNames=u?[].concat(Tt(u),[a]):[a],r.set(o,i)}}})),r}function Cr(e,t,r,n,a){for(var o=a.length,i=[],s=0;s1&&void 0!==arguments[1]?arguments[1]:Ft,r=Math.ceil(Fe.default(e)/t)*t;return{startPeriod:r-(t-1),endPeriod:r}}function Sr(e){var t=e.getSeconds(),r=e.getMilliseconds();return dt.default(e.getTime()-1e3*t-r)}function _r(e,t,r,n){for(var a=[],o=0;o<2*t+1;o++){var i=e+t-o,s=!0;r&&(s=Fe.default(r)<=i),n&&s&&(s=Fe.default(n)>=i),s&&a.push(i)}return a}var Mr=function(e){Et(n,e);var r=Mt(n);function n(e){var a;wt(this,n),Dt(_t(a=r.call(this,e)),"renderOptions",(function(){var e=a.props.year,t=a.state.yearsList.map((function(t){return de.default.createElement("div",{className:e===t?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:t,onClick:a.onChange.bind(_t(a),t),"aria-selected":e===t?"true":void 0},e===t?de.default.createElement("span",{className:"react-datepicker__year-option--selected"},"\u2713"):"",t)})),r=a.props.minDate?Fe.default(a.props.minDate):null,n=a.props.maxDate?Fe.default(a.props.maxDate):null;return n&&a.state.yearsList.find((function(e){return e===n}))||t.unshift(de.default.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:a.incrementYears},de.default.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),r&&a.state.yearsList.find((function(e){return e===r}))||t.push(de.default.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:a.decrementYears},de.default.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),t})),Dt(_t(a),"onChange",(function(e){a.props.onChange(e)})),Dt(_t(a),"handleClickOutside",(function(){a.props.onCancel()})),Dt(_t(a),"shiftYears",(function(e){var t=a.state.yearsList.map((function(t){return t+e}));a.setState({yearsList:t})})),Dt(_t(a),"incrementYears",(function(){return a.shiftYears(1)})),Dt(_t(a),"decrementYears",(function(){return a.shiftYears(-1)}));var o=e.yearDropdownItemNumber,i=e.scrollableYearDropdown,s=o||(i?10:5);return a.state={yearsList:_r(a.props.year,s,a.props.minDate,a.props.maxDate)},a.dropdownRef=t.createRef(),a}return kt(n,[{key:"componentDidMount",value:function(){var e=this.dropdownRef.current;if(e){var t=e.children?Array.from(e.children):null,r=t?t.find((function(e){return e.ariaSelected})):null;e.scrollTop=r?r.offsetTop+(r.clientHeight-e.clientHeight)/2:(e.scrollHeight-e.clientHeight)/2}}},{key:"render",value:function(){var e=pe.default({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return de.default.createElement("div",{className:e,ref:this.dropdownRef},this.renderOptions())}}]),n}(de.default.Component),Tr=ht.default(Mr),Or=function(e){Et(r,e);var t=Mt(r);function r(){var e;wt(this,r);for(var n=arguments.length,a=new Array(n),o=0;o0?a.get(o).holidayNames.join(", "):""})),Dt(_t(e),"getTabIndex",(function(t,r){var n=t||e.props.selected,a=r||e.props.preSelection;return(!e.props.showWeekPicker||!e.props.showWeekNumber&&e.isStartOfWeek())&&(e.isKeyboardSelected()||e.isSameDay(n)&&$t(a,n))?0:-1})),Dt(_t(e),"handleFocusDay",(function(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=!1;0===e.getTabIndex()&&!r.isInputFocused&&e.isSameDay(e.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(n=!0),e.props.inline&&!e.props.shouldFocusDayInline&&(n=!1),e.props.containerRef&&e.props.containerRef.current&&e.props.containerRef.current.contains(document.activeElement)&&document.activeElement.classList.contains("react-datepicker__day")&&(n=!0),e.props.monthShowsDuplicateDaysEnd&&e.isAfterMonth()&&(n=!1),e.props.monthShowsDuplicateDaysStart&&e.isBeforeMonth()&&(n=!1)),n&&(null===(t=e.dayEl.current)||void 0===t||t.focus({preventScroll:!0}))})),Dt(_t(e),"renderDayContents",(function(){return e.props.monthShowsDuplicateDaysEnd&&e.isAfterMonth()||e.props.monthShowsDuplicateDaysStart&&e.isBeforeMonth()?null:e.props.renderDayContents?e.props.renderDayContents(Pe.default(e.props.day),e.props.day):Pe.default(e.props.day)})),Dt(_t(e),"render",(function(){return de.default.createElement("div",{ref:e.dayEl,className:e.getClassNames(e.props.day),onKeyDown:e.handleOnKeyDown,onClick:e.handleClick,onMouseEnter:e.handleMouseEnter,tabIndex:e.getTabIndex(),"aria-label":e.getAriaLabel(),role:"option",title:e.getTitle(),"aria-disabled":e.isDisabled(),"aria-current":e.isCurrentDay()?"date":void 0,"aria-selected":e.isSelected()||e.isInRange()},e.renderDayContents(),""!==e.getTitle()&&de.default.createElement("span",{className:"holiday-overlay"},e.getTitle()))})),e}return kt(r,[{key:"componentDidMount",value:function(){this.handleFocusDay()}},{key:"componentDidUpdate",value:function(e){this.handleFocusDay(e)}}]),r}(de.default.Component),Ir=function(e){Et(r,e);var t=Mt(r);function r(){var e;wt(this,r);for(var n=arguments.length,a=new Array(n),o=0;o0&&void 0!==arguments[0]?arguments[0]:{},r=!1;0===e.getTabIndex()&&!t.isInputFocused&&$t(e.props.date,e.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(r=!0),e.props.inline&&!e.props.shouldFocusDayInline&&(r=!1),e.props.containerRef&&e.props.containerRef.current&&e.props.containerRef.current.contains(document.activeElement)&&document.activeElement&&document.activeElement.classList.contains("react-datepicker__week-number")&&(r=!0)),r&&e.weekNumberEl.current&&e.weekNumberEl.current.focus({preventScroll:!0})})),e}return kt(r,[{key:"componentDidMount",value:function(){this.handleFocusWeekNumber()}},{key:"componentDidUpdate",value:function(e){this.handleFocusWeekNumber(e)}},{key:"render",value:function(){var e=this.props,t=e.weekNumber,r=e.ariaLabelPrefix,n=void 0===r?"week ":r,a={"react-datepicker__week-number":!0,"react-datepicker__week-number--clickable":!!e.onClick,"react-datepicker__week-number--selected":$t(this.props.date,this.props.selected),"react-datepicker__week-number--keyboard-selected":this.isKeyboardSelected()};return de.default.createElement("div",{ref:this.weekNumberEl,className:pe.default(a),"aria-label":"".concat(n," ").concat(this.props.weekNumber),onClick:this.handleClick,onKeyDown:this.handleOnKeyDown,tabIndex:this.getTabIndex()},t)}}],[{key:"defaultProps",get:function(){return{ariaLabelPrefix:"week "}}}]),r}(de.default.Component),Hr=function(e){Et(r,e);var t=Mt(r);function r(){var e;wt(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=6,s=!r&&!e.isWeekInMonth(o);if(i||s){if(!e.props.peekNextMonth)break;a=!0}}return t})),Dt(_t(e),"onMonthClick",(function(t,r){e.handleDayClick(qt(He.default(e.props.day,r)),t)})),Dt(_t(e),"onMonthMouseEnter",(function(t){e.handleDayMouseEnter(qt(He.default(e.props.day,t)))})),Dt(_t(e),"handleMonthNavigation",(function(t,r){e.isDisabled(r)||e.isExcluded(r)||(e.props.setPreSelection(r),e.MONTH_REFS[t].current&&e.MONTH_REFS[t].current.focus())})),Dt(_t(e),"onMonthKeyDown",(function(t,r){var n=e.props,a=n.selected,o=n.preSelection,i=n.disabledKeyboardNavigation,s=n.showTwoColumnMonthYearPicker,l=n.showFourColumnMonthYearPicker,u=n.setPreSelection,c=t.key;if("Tab"!==c&&t.preventDefault(),!i){var d=Qr(l,s),p=zr[d].verticalNavigationOffset,f=zr[d].grid;switch(c){case"Enter":e.onMonthClick(t,r),u(a);break;case"ArrowRight":e.handleMonthNavigation(11===r?0:r+1,we.default(o,1));break;case"ArrowLeft":e.handleMonthNavigation(0===r?11:r-1,Ee.default(o,1));break;case"ArrowUp":e.handleMonthNavigation(f[0].includes(r)?r+12-p:r-p,Ee.default(o,p));break;case"ArrowDown":e.handleMonthNavigation(f[f.length-1].includes(r)?r-12+p:r+p,we.default(o,p))}}})),Dt(_t(e),"onQuarterClick",(function(t,r){e.handleDayClick(Qt(We.default(e.props.day,r)),t)})),Dt(_t(e),"onQuarterMouseEnter",(function(t){e.handleDayMouseEnter(Qt(We.default(e.props.day,t)))})),Dt(_t(e),"handleQuarterNavigation",(function(t,r){e.isDisabled(r)||e.isExcluded(r)||(e.props.setPreSelection(r),e.QUARTER_REFS[t-1].current&&e.QUARTER_REFS[t-1].current.focus())})),Dt(_t(e),"onQuarterKeyDown",(function(t,r){var n=t.key;if(!e.props.disabledKeyboardNavigation)switch(n){case"Enter":e.onQuarterClick(t,r),e.props.setPreSelection(e.props.selected);break;case"ArrowRight":e.handleQuarterNavigation(4===r?1:r+1,xe.default(e.props.preSelection,1));break;case"ArrowLeft":e.handleQuarterNavigation(1===r?4:r-1,Ae.default(e.props.preSelection,1))}})),Dt(_t(e),"getMonthClassNames",(function(t){var r=e.props,n=r.day,a=r.startDate,o=r.endDate,i=r.selected,s=r.minDate,l=r.maxDate,u=r.preSelection,c=r.monthClassName,d=r.excludeDates,p=r.includeDates,f=c?c(He.default(n,t)):void 0,h=He.default(n,t);return pe.default("react-datepicker__month-text","react-datepicker__month-".concat(t),f,{"react-datepicker__month-text--disabled":(s||l||d||p)&&ir(h,e.props),"react-datepicker__month-text--selected":e.isSelectedMonth(n,t,i),"react-datepicker__month-text--keyboard-selected":!e.props.disabledKeyboardNavigation&&Re.default(u)===t,"react-datepicker__month-text--in-selecting-range":e.isInSelectingRangeMonth(t),"react-datepicker__month-text--in-range":sr(a,o,t,n),"react-datepicker__month-text--range-start":e.isRangeStartMonth(t),"react-datepicker__month-text--range-end":e.isRangeEndMonth(t),"react-datepicker__month-text--selecting-range-start":e.isSelectingMonthRangeStart(t),"react-datepicker__month-text--selecting-range-end":e.isSelectingMonthRangeEnd(t),"react-datepicker__month-text--today":e.isCurrentMonth(n,t)})})),Dt(_t(e),"getTabIndex",(function(t){var r=Re.default(e.props.preSelection);return e.props.disabledKeyboardNavigation||t!==r?"-1":"0"})),Dt(_t(e),"getQuarterTabIndex",(function(t){var r=Le.default(e.props.preSelection);return e.props.disabledKeyboardNavigation||t!==r?"-1":"0"})),Dt(_t(e),"getAriaLabel",(function(t){var r=e.props,n=r.chooseDayAriaLabelPrefix,a=void 0===n?"Choose":n,o=r.disabledDayAriaLabelPrefix,i=void 0===o?"Not available":o,s=r.day,l=He.default(s,t),u=e.isDisabled(l)||e.isExcluded(l)?i:a;return"".concat(u," ").concat(It(l,"MMMM yyyy"))})),Dt(_t(e),"getQuarterClassNames",(function(t){var r=e.props,n=r.day,a=r.startDate,o=r.endDate,i=r.selected,s=r.minDate,l=r.maxDate,u=r.preSelection,c=r.disabledKeyboardNavigation;return pe.default("react-datepicker__quarter-text","react-datepicker__quarter-".concat(t),{"react-datepicker__quarter-text--disabled":(s||l)&&lr(We.default(n,t),e.props),"react-datepicker__quarter-text--selected":e.isSelectedQuarter(n,t,i),"react-datepicker__quarter-text--keyboard-selected":!c&&Le.default(u)===t,"react-datepicker__quarter-text--in-selecting-range":e.isInSelectingRangeQuarter(t),"react-datepicker__quarter-text--in-range":dr(a,o,t,n),"react-datepicker__quarter-text--range-start":e.isRangeStartQuarter(t),"react-datepicker__quarter-text--range-end":e.isRangeEndQuarter(t)})})),Dt(_t(e),"getMonthContent",(function(t){var r=e.props,n=r.showFullMonthYearPicker,a=r.renderMonthContent,o=r.locale,i=r.day,s=nr(t,o),l=rr(t,o);return a?a(t,s,l,i):n?l:s})),Dt(_t(e),"getQuarterContent",(function(t){var r=e.props,n=r.renderQuarterContent,a=function(e,t){return It(We.default(jt(),e),"QQQ",t)}(t,r.locale);return n?n(t,a):a})),Dt(_t(e),"renderMonths",(function(){var t=e.props,r=t.showTwoColumnMonthYearPicker,n=t.showFourColumnMonthYearPicker,a=t.day,o=t.selected;return zr[Qr(n,r)].grid.map((function(t,r){return de.default.createElement("div",{className:"react-datepicker__month-wrapper",key:r},t.map((function(t,r){return de.default.createElement("div",{ref:e.MONTH_REFS[t],key:r,onClick:function(r){e.onMonthClick(r,t)},onKeyDown:function(r){e.onMonthKeyDown(r,t)},onMouseEnter:function(){return e.onMonthMouseEnter(t)},tabIndex:e.getTabIndex(t),className:e.getMonthClassNames(t),role:"option","aria-label":e.getAriaLabel(t),"aria-current":e.isCurrentMonth(a,t)?"date":void 0,"aria-selected":e.isSelectedMonth(a,t,o)},e.getMonthContent(t))})))}))})),Dt(_t(e),"renderQuarters",(function(){var t=e.props,r=t.day,n=t.selected;return de.default.createElement("div",{className:"react-datepicker__quarter-wrapper"},[1,2,3,4].map((function(t,a){return de.default.createElement("div",{key:a,ref:e.QUARTER_REFS[a],role:"option",onClick:function(r){e.onQuarterClick(r,t)},onKeyDown:function(r){e.onQuarterKeyDown(r,t)},onMouseEnter:function(){return e.onQuarterMouseEnter(t)},className:e.getQuarterClassNames(t),"aria-selected":e.isSelectedQuarter(r,t,n),tabIndex:e.getQuarterTabIndex(t),"aria-current":e.isCurrentQuarter(r,t)?"date":void 0},e.getQuarterContent(t))})))})),Dt(_t(e),"getClassNames",(function(){var t=e.props,r=t.selectingDate,n=t.selectsStart,a=t.selectsEnd,o=t.showMonthYearPicker,i=t.showQuarterYearPicker,s=t.showWeekPicker;return pe.default("react-datepicker__month",{"react-datepicker__month--selecting-range":r&&(n||a)},{"react-datepicker__monthPicker":o},{"react-datepicker__quarterPicker":i},{"react-datepicker__weekPicker":s})})),e}return kt(r,[{key:"render",value:function(){var e=this.props,t=e.showMonthYearPicker,r=e.showQuarterYearPicker,n=e.day,a=e.ariaLabelPrefix,o=void 0===a?"month ":a;return de.default.createElement("div",{className:this.getClassNames(),onMouseLeave:this.handleMouseLeave,"aria-label":"".concat(o," ").concat(It(n,"yyyy-MM")),role:"listbox"},t?this.renderMonths():r?this.renderQuarters():this.renderWeeks())}}]),r}(de.default.Component),Gr=function(e){Et(r,e);var t=Mt(r);function r(){var e;wt(this,r);for(var n=arguments.length,a=new Array(n),o=0;o0&&void 0!==arguments[0]?arguments[0]:{}).className||"").split(/\s+/);return Zr.some((function(t){return e.indexOf(t)>=0}))})(e.target)&&n.props.onDropdownFocus()})),Dt(_t(n),"getDateInView",(function(){var e=n.props,t=e.preSelection,r=e.selected,a=e.openToDate,o=wr(n.props),i=xr(n.props),s=jt();return a||r||t||(o&&ut.default(s,o)?o:i&<.default(s,i)?i:s)})),Dt(_t(n),"increaseMonth",(function(){n.setState((function(e){var t=e.date;return{date:we.default(t,1)}}),(function(){return n.handleMonthChange(n.state.date)}))})),Dt(_t(n),"decreaseMonth",(function(){n.setState((function(e){var t=e.date;return{date:Ee.default(t,1)}}),(function(){return n.handleMonthChange(n.state.date)}))})),Dt(_t(n),"handleDayClick",(function(e,t,r){n.props.onSelect(e,t,r),n.props.setPreSelection&&n.props.setPreSelection(e)})),Dt(_t(n),"handleDayMouseEnter",(function(e){n.setState({selectingDate:e}),n.props.onDayMouseEnter&&n.props.onDayMouseEnter(e)})),Dt(_t(n),"handleMonthMouseLeave",(function(){n.setState({selectingDate:null}),n.props.onMonthMouseLeave&&n.props.onMonthMouseLeave()})),Dt(_t(n),"handleYearMouseEnter",(function(e,t){n.setState({selectingDate:Ue.default(jt(),t)}),n.props.onYearMouseEnter&&n.props.onYearMouseEnter(e,t)})),Dt(_t(n),"handleYearMouseLeave",(function(e,t){n.props.onYearMouseLeave&&n.props.onYearMouseLeave(e,t)})),Dt(_t(n),"handleYearChange",(function(e){n.props.onYearChange&&(n.props.onYearChange(e),n.setState({isRenderAriaLiveMessage:!0})),n.props.adjustDateOnChange&&(n.props.onSelect&&n.props.onSelect(e),n.props.setOpen&&n.props.setOpen(!0)),n.props.setPreSelection&&n.props.setPreSelection(e)})),Dt(_t(n),"handleMonthChange",(function(e){n.handleCustomMonthChange(e),n.props.adjustDateOnChange&&(n.props.onSelect&&n.props.onSelect(e),n.props.setOpen&&n.props.setOpen(!0)),n.props.setPreSelection&&n.props.setPreSelection(e)})),Dt(_t(n),"handleCustomMonthChange",(function(e){n.props.onMonthChange&&(n.props.onMonthChange(e),n.setState({isRenderAriaLiveMessage:!0}))})),Dt(_t(n),"handleMonthYearChange",(function(e){n.handleYearChange(e),n.handleMonthChange(e)})),Dt(_t(n),"changeYear",(function(e){n.setState((function(t){var r=t.date;return{date:Ue.default(r,e)}}),(function(){return n.handleYearChange(n.state.date)}))})),Dt(_t(n),"changeMonth",(function(e){n.setState((function(t){var r=t.date;return{date:He.default(r,e)}}),(function(){return n.handleMonthChange(n.state.date)}))})),Dt(_t(n),"changeMonthYear",(function(e){n.setState((function(t){var r=t.date;return{date:Ue.default(He.default(r,Re.default(e)),Fe.default(e))}}),(function(){return n.handleMonthYearChange(n.state.date)}))})),Dt(_t(n),"header",(function(){var e=Ut(arguments.length>0&&void 0!==arguments[0]?arguments[0]:n.state.date,n.props.locale,n.props.calendarStartDay),t=[];return n.props.showWeekNumbers&&t.push(de.default.createElement("div",{key:"W",className:"react-datepicker__day-name"},n.props.weekLabel||"#")),t.concat([0,1,2,3,4,5,6].map((function(t){var r=be.default(e,t),a=n.formatWeekday(r,n.props.locale),o=n.props.weekDayClassName?n.props.weekDayClassName(r):void 0;return de.default.createElement("div",{key:t,className:pe.default("react-datepicker__day-name",o)},a)})))})),Dt(_t(n),"formatWeekday",(function(e,t){return n.props.formatWeekDay?function(e,t,r){return t(It(e,"EEEE",r))}(e,n.props.formatWeekDay,t):n.props.useWeekdaysShort?function(e,t){return It(e,"EEE",t)}(e,t):function(e,t){return It(e,"EEEEEE",t)}(e,t)})),Dt(_t(n),"decreaseYear",(function(){n.setState((function(e){var t=e.date;return{date:Se.default(t,n.props.showYearPicker?n.props.yearItemNumber:1)}}),(function(){return n.handleYearChange(n.state.date)}))})),Dt(_t(n),"clearSelectingDate",(function(){n.setState({selectingDate:null})})),Dt(_t(n),"renderPreviousButton",(function(){if(!n.props.renderCustomHeader){var e;switch(!0){case n.props.showMonthYearPicker:e=br(n.state.date,n.props);break;case n.props.showYearPicker:e=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.yearItemNumber,a=void 0===n?Ft:n,o=Ar(zt(Se.default(e,a)),a).endPeriod,i=r&&Fe.default(r);return i&&i>o||!1}(n.state.date,n.props);break;default:e=gr(n.state.date,n.props)}if((n.props.forceShowMonthNavigation||n.props.showDisabledMonthNavigation||!e)&&!n.props.showTimeSelectOnly){var t=["react-datepicker__navigation","react-datepicker__navigation--previous"],r=n.decreaseMonth;(n.props.showMonthYearPicker||n.props.showQuarterYearPicker||n.props.showYearPicker)&&(r=n.decreaseYear),e&&n.props.showDisabledMonthNavigation&&(t.push("react-datepicker__navigation--previous--disabled"),r=null);var a=n.props.showMonthYearPicker||n.props.showQuarterYearPicker||n.props.showYearPicker,o=n.props,i=o.previousMonthButtonLabel,s=o.previousYearButtonLabel,l=n.props,u=l.previousMonthAriaLabel,c=void 0===u?"string"==typeof i?i:"Previous Month":u,d=l.previousYearAriaLabel,p=void 0===d?"string"==typeof s?s:"Previous Year":d;return de.default.createElement("button",{type:"button",className:t.join(" "),onClick:r,onKeyDown:n.props.handleOnKeyDown,"aria-label":a?p:c},de.default.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"].join(" ")},a?n.props.previousYearButtonLabel:n.props.previousMonthButtonLabel))}}})),Dt(_t(n),"increaseYear",(function(){n.setState((function(e){var t=e.date;return{date:ke.default(t,n.props.showYearPicker?n.props.yearItemNumber:1)}}),(function(){return n.handleYearChange(n.state.date)}))})),Dt(_t(n),"renderNextButton",(function(){if(!n.props.renderCustomHeader){var e;switch(!0){case n.props.showMonthYearPicker:e=yr(n.state.date,n.props);break;case n.props.showYearPicker:e=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.yearItemNumber,a=void 0===n?Ft:n,o=Ar(ke.default(e,a),a).startPeriod,i=r&&Fe.default(r);return i&&i0&&void 0!==arguments[0]?arguments[0]:n.state.date,t=["react-datepicker__current-month"];return n.props.showYearDropdown&&t.push("react-datepicker__current-month--hasYearDropdown"),n.props.showMonthDropdown&&t.push("react-datepicker__current-month--hasMonthDropdown"),n.props.showMonthYearDropdown&&t.push("react-datepicker__current-month--hasMonthYearDropdown"),de.default.createElement("div",{className:t.join(" ")},It(e,n.props.dateFormat,n.props.locale))})),Dt(_t(n),"renderYearDropdown",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(n.props.showYearDropdown&&!e)return de.default.createElement(Or,{adjustDateOnChange:n.props.adjustDateOnChange,date:n.state.date,onSelect:n.props.onSelect,setOpen:n.props.setOpen,dropdownMode:n.props.dropdownMode,onChange:n.changeYear,minDate:n.props.minDate,maxDate:n.props.maxDate,year:Fe.default(n.state.date),scrollableYearDropdown:n.props.scrollableYearDropdown,yearDropdownItemNumber:n.props.yearDropdownItemNumber})})),Dt(_t(n),"renderMonthDropdown",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(n.props.showMonthDropdown&&!e)return de.default.createElement(Rr,{dropdownMode:n.props.dropdownMode,locale:n.props.locale,onChange:n.changeMonth,month:Re.default(n.state.date),useShortMonthInDropdown:n.props.useShortMonthInDropdown})})),Dt(_t(n),"renderMonthYearDropdown",(function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(n.props.showMonthYearDropdown&&!e)return de.default.createElement(jr,{dropdownMode:n.props.dropdownMode,locale:n.props.locale,dateFormat:n.props.dateFormat,onChange:n.changeMonthYear,minDate:n.props.minDate,maxDate:n.props.maxDate,date:n.state.date,scrollableMonthYearDropdown:n.props.scrollableMonthYearDropdown})})),Dt(_t(n),"handleTodayButtonClick",(function(e){n.props.onSelect(Kt(),e),n.props.setPreSelection&&n.props.setPreSelection(Kt())})),Dt(_t(n),"renderTodayButton",(function(){if(n.props.todayButton&&!n.props.showTimeSelectOnly)return de.default.createElement("div",{className:"react-datepicker__today-button",onClick:function(e){return n.handleTodayButtonClick(e)}},n.props.todayButton)})),Dt(_t(n),"renderDefaultHeader",(function(e){var t=e.monthDate,r=e.i;return de.default.createElement("div",{className:"react-datepicker__header ".concat(n.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},n.renderCurrentMonth(t),de.default.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(n.props.dropdownMode),onFocus:n.handleDropdownFocus},n.renderMonthDropdown(0!==r),n.renderMonthYearDropdown(0!==r),n.renderYearDropdown(0!==r)),de.default.createElement("div",{className:"react-datepicker__day-names"},n.header(t)))})),Dt(_t(n),"renderCustomHeader",(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.monthDate,r=e.i;if(n.props.showTimeSelect&&!n.state.monthContainer||n.props.showTimeSelectOnly)return null;var a=gr(n.state.date,n.props),o=mr(n.state.date,n.props),i=br(n.state.date,n.props),s=yr(n.state.date,n.props),l=!n.props.showMonthYearPicker&&!n.props.showQuarterYearPicker&&!n.props.showYearPicker;return de.default.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:n.props.onDropdownFocus},n.props.renderCustomHeader(bt(bt({},n.state),{},{customHeaderCount:r,monthDate:t,changeMonth:n.changeMonth,changeYear:n.changeYear,decreaseMonth:n.decreaseMonth,increaseMonth:n.increaseMonth,decreaseYear:n.decreaseYear,increaseYear:n.increaseYear,prevMonthButtonDisabled:a,nextMonthButtonDisabled:o,prevYearButtonDisabled:i,nextYearButtonDisabled:s})),l&&de.default.createElement("div",{className:"react-datepicker__day-names"},n.header(t)))})),Dt(_t(n),"renderYearHeader",(function(){var e=n.state.date,t=n.props,r=t.showYearPicker,a=Ar(e,t.yearItemNumber),o=a.startPeriod,i=a.endPeriod;return de.default.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},r?"".concat(o," - ").concat(i):Fe.default(e))})),Dt(_t(n),"renderHeader",(function(e){switch(!0){case void 0!==n.props.renderCustomHeader:return n.renderCustomHeader(e);case n.props.showMonthYearPicker||n.props.showQuarterYearPicker||n.props.showYearPicker:return n.renderYearHeader(e);default:return n.renderDefaultHeader(e)}})),Dt(_t(n),"renderMonths",(function(){var e;if(!n.props.showTimeSelectOnly&&!n.props.showYearPicker){for(var t=[],r=n.props.showPreviousMonths?n.props.monthsShown-1:0,a=Ee.default(n.state.date,r),o=null!==(e=n.props.monthSelectedIn)&&void 0!==e?e:r,i=0;i0;t.push(de.default.createElement("div",{key:u,ref:function(e){n.monthContainer=e},className:"react-datepicker__month-container"},n.renderHeader({monthDate:l,i:i}),de.default.createElement(Kr,{chooseDayAriaLabelPrefix:n.props.chooseDayAriaLabelPrefix,disabledDayAriaLabelPrefix:n.props.disabledDayAriaLabelPrefix,weekAriaLabelPrefix:n.props.weekAriaLabelPrefix,ariaLabelPrefix:n.props.monthAriaLabelPrefix,onChange:n.changeMonthYear,day:l,dayClassName:n.props.dayClassName,calendarStartDay:n.props.calendarStartDay,monthClassName:n.props.monthClassName,onDayClick:n.handleDayClick,handleOnKeyDown:n.props.handleOnDayKeyDown,onDayMouseEnter:n.handleDayMouseEnter,onMouseLeave:n.handleMonthMouseLeave,onWeekSelect:n.props.onWeekSelect,orderInDisplay:i,formatWeekNumber:n.props.formatWeekNumber,locale:n.props.locale,minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,excludeDateIntervals:n.props.excludeDateIntervals,highlightDates:n.props.highlightDates,holidays:n.props.holidays,selectingDate:n.state.selectingDate,includeDates:n.props.includeDates,includeDateIntervals:n.props.includeDateIntervals,inline:n.props.inline,shouldFocusDayInline:n.props.shouldFocusDayInline,fixedHeight:n.props.fixedHeight,filterDate:n.props.filterDate,preSelection:n.props.preSelection,setPreSelection:n.props.setPreSelection,selected:n.props.selected,selectsStart:n.props.selectsStart,selectsEnd:n.props.selectsEnd,selectsRange:n.props.selectsRange,selectsDisabledDaysInRange:n.props.selectsDisabledDaysInRange,showWeekNumbers:n.props.showWeekNumbers,startDate:n.props.startDate,endDate:n.props.endDate,peekNextMonth:n.props.peekNextMonth,setOpen:n.props.setOpen,shouldCloseOnSelect:n.props.shouldCloseOnSelect,renderDayContents:n.props.renderDayContents,renderMonthContent:n.props.renderMonthContent,renderQuarterContent:n.props.renderQuarterContent,renderYearContent:n.props.renderYearContent,disabledKeyboardNavigation:n.props.disabledKeyboardNavigation,showMonthYearPicker:n.props.showMonthYearPicker,showFullMonthYearPicker:n.props.showFullMonthYearPicker,showTwoColumnMonthYearPicker:n.props.showTwoColumnMonthYearPicker,showFourColumnMonthYearPicker:n.props.showFourColumnMonthYearPicker,showYearPicker:n.props.showYearPicker,showQuarterYearPicker:n.props.showQuarterYearPicker,showWeekPicker:n.props.showWeekPicker,isInputFocused:n.props.isInputFocused,containerRef:n.containerRef,monthShowsDuplicateDaysEnd:c,monthShowsDuplicateDaysStart:d})))}return t}})),Dt(_t(n),"renderYears",(function(){if(!n.props.showTimeSelectOnly)return n.props.showYearPicker?de.default.createElement("div",{className:"react-datepicker__year--container"},n.renderHeader(),de.default.createElement(Xr,Ct({onDayClick:n.handleDayClick,selectingDate:n.state.selectingDate,clearSelectingDate:n.clearSelectingDate,date:n.state.date},n.props,{onYearMouseEnter:n.handleYearMouseEnter,onYearMouseLeave:n.handleYearMouseLeave}))):void 0})),Dt(_t(n),"renderTimeSection",(function(){if(n.props.showTimeSelect&&(n.state.monthContainer||n.props.showTimeSelectOnly))return de.default.createElement(Gr,{selected:n.props.selected,openToDate:n.props.openToDate,onChange:n.props.onTimeChange,timeClassName:n.props.timeClassName,format:n.props.timeFormat,includeTimes:n.props.includeTimes,intervals:n.props.timeIntervals,minTime:n.props.minTime,maxTime:n.props.maxTime,excludeTimes:n.props.excludeTimes,filterTime:n.props.filterTime,timeCaption:n.props.timeCaption,todayButton:n.props.todayButton,showMonthDropdown:n.props.showMonthDropdown,showMonthYearDropdown:n.props.showMonthYearDropdown,showYearDropdown:n.props.showYearDropdown,withPortal:n.props.withPortal,monthRef:n.state.monthContainer,injectTimes:n.props.injectTimes,locale:n.props.locale,handleOnKeyDown:n.props.handleOnKeyDown,showTimeSelectOnly:n.props.showTimeSelectOnly})})),Dt(_t(n),"renderInputTimeSection",(function(){var e=new Date(n.props.selected),t=Bt(e)&&Boolean(n.props.selected)?"".concat(Er(e.getHours()),":").concat(Er(e.getMinutes())):"";if(n.props.showTimeInput)return de.default.createElement(Vr,{date:e,timeString:t,timeInputLabel:n.props.timeInputLabel,onChange:n.props.onTimeChange,customTimeInput:n.props.customTimeInput})})),Dt(_t(n),"renderAriaLiveRegion",(function(){var e,t=Ar(n.state.date,n.props.yearItemNumber),r=t.startPeriod,a=t.endPeriod;return e=n.props.showYearPicker?"".concat(r," - ").concat(a):n.props.showMonthYearPicker||n.props.showQuarterYearPicker?Fe.default(n.state.date):"".concat(rr(Re.default(n.state.date),n.props.locale)," ").concat(Fe.default(n.state.date)),de.default.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},n.state.isRenderAriaLiveMessage&&e)})),Dt(_t(n),"renderChildren",(function(){if(n.props.children)return de.default.createElement("div",{className:"react-datepicker__children-container"},n.props.children)})),n.containerRef=de.default.createRef(),n.state={date:n.getDateInView(),selectingDate:null,monthContainer:null,isRenderAriaLiveMessage:!1},n}return kt(r,[{key:"componentDidMount",value:function(){var e=this;this.props.showTimeSelect&&(this.assignMonthContainer=void e.setState({monthContainer:e.monthContainer}))}},{key:"componentDidUpdate",value:function(e){var t=this;if(!this.props.preSelection||$t(this.props.preSelection,e.preSelection)&&this.props.monthSelectedIn===e.monthSelectedIn)this.props.openToDate&&!$t(this.props.openToDate,e.openToDate)&&this.setState({date:this.props.openToDate});else{var r=!Xt(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},(function(){return r&&t.handleCustomMonthChange(t.state.date)}))}}},{key:"render",value:function(){var e=this.props.container||$r;return de.default.createElement("div",{style:{display:"contents"},ref:this.containerRef},de.default.createElement(e,{className:pe.default("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showPopperArrow:this.props.showPopperArrow,arrowProps:this.props.arrowProps},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren()))}}],[{key:"defaultProps",get:function(){return{onDropdownFocus:function(){},monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",customTimeInput:null,yearItemNumber:Ft}}}]),r}(de.default.Component),en=function(e){var t=e.icon,r=e.className,n=void 0===r?"":r,a=e.onClick,o="react-datepicker__calendar-icon";return de.default.isValidElement(t)?de.default.cloneElement(t,{className:"".concat(t.props.className||""," ").concat(o," ").concat(n),onClick:function(e){"function"==typeof t.props.onClick&&t.props.onClick(e),"function"==typeof a&&a(e)}}):"string"==typeof t?de.default.createElement("i",{className:"".concat(o," ").concat(t," ").concat(n),"aria-hidden":"true",onClick:a}):de.default.createElement("svg",{className:"".concat(o," ").concat(n),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:a},de.default.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},tn=function(e){Et(r,e);var t=Mt(r);function r(e){var n;return wt(this,r),(n=t.call(this,e)).el=document.createElement("div"),n}return kt(r,[{key:"componentDidMount",value:function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)}},{key:"componentWillUnmount",value:function(){this.portalRoot.removeChild(this.el)}},{key:"render",value:function(){return vt.default.createPortal(this.props.children,this.el)}}]),r}(de.default.Component),rn=function(e){return!e.disabled&&-1!==e.tabIndex},nn=function(e){Et(r,e);var t=Mt(r);function r(e){var n;return wt(this,r),Dt(_t(n=t.call(this,e)),"getTabChildren",(function(){return Array.prototype.slice.call(n.tabLoopRef.current.querySelectorAll("[tabindex], a, button, input, select, textarea"),1,-1).filter(rn)})),Dt(_t(n),"handleFocusStart",(function(){var e=n.getTabChildren();e&&e.length>1&&e[e.length-1].focus()})),Dt(_t(n),"handleFocusEnd",(function(){var e=n.getTabChildren();e&&e.length>1&&e[0].focus()})),n.tabLoopRef=de.default.createRef(),n}return kt(r,[{key:"render",value:function(){return this.props.enableTabLoop?de.default.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},de.default.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:"0",onFocus:this.handleFocusStart}),this.props.children,de.default.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:"0",onFocus:this.handleFocusEnd})):this.props.children}}],[{key:"defaultProps",get:function(){return{enableTabLoop:!0}}}]),r}(de.default.Component),an=function(e){Et(r,e);var t=Mt(r);function r(){return wt(this,r),t.apply(this,arguments)}return kt(r,[{key:"render",value:function(){var e,t=this.props,r=t.className,n=t.wrapperClassName,a=t.hidePopper,o=t.popperComponent,i=t.popperModifiers,s=t.popperPlacement,l=t.popperProps,u=t.targetComponent,c=t.enableTabLoop,d=t.popperOnKeyDown,p=t.portalId,f=t.portalHost;if(!a){var h=pe.default("react-datepicker-popper",r);e=de.default.createElement(le.Popper,Ct({modifiers:i,placement:s},l),(function(e){var t=e.ref,r=e.style,n=e.placement,a=e.arrowProps;return de.default.createElement(nn,{enableTabLoop:c},de.default.createElement("div",{ref:t,style:r,className:h,"data-placement":n,onKeyDown:d},de.default.cloneElement(o,{arrowProps:a})))}))}this.props.popperContainer&&(e=de.default.createElement(this.props.popperContainer,{},e)),p&&!a&&(e=de.default.createElement(tn,{portalId:p,portalHost:f},e));var v=pe.default("react-datepicker-wrapper",n);return de.default.createElement(le.Manager,{className:"react-datepicker-manager"},de.default.createElement(le.Reference,null,(function(e){var t=e.ref;return de.default.createElement("div",{ref:t,className:v},u)})),e)}}],[{key:"defaultProps",get:function(){return{hidePopper:!0,popperModifiers:[],popperProps:{},popperPlacement:"bottom-start"}}}]),r}(de.default.Component),on="react-datepicker-ignore-onclickoutside",sn=ht.default(Jr),ln="Date input not valid.",un=function(e){Et(r,e);var t=Mt(r);function r(e){var n;return wt(this,r),Dt(_t(n=t.call(this,e)),"getPreSelection",(function(){return n.props.openToDate?n.props.openToDate:n.props.selectsEnd&&n.props.startDate?n.props.startDate:n.props.selectsStart&&n.props.endDate?n.props.endDate:jt()})),Dt(_t(n),"modifyHolidays",(function(){var e;return null===(e=n.props.holidays)||void 0===e?void 0:e.reduce((function(e,t){var r=new Date(t.date);return he.default(r)?[].concat(Tt(e),[bt(bt({},t),{},{date:r})]):e}),[])})),Dt(_t(n),"calcInitialState",(function(){var e,t=n.getPreSelection(),r=wr(n.props),a=xr(n.props),o=r&&ut.default(t,Xe.default(r))?r:a&<.default(t,et.default(a))?a:t;return{open:n.props.startOpen||!1,preventFocus:!1,preSelection:null!==(e=n.props.selectsRange?n.props.startDate:n.props.selected)&&void 0!==e?e:o,highlightDates:kr(n.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1}})),Dt(_t(n),"clearPreventFocusTimeout",(function(){n.preventFocusTimeout&&clearTimeout(n.preventFocusTimeout)})),Dt(_t(n),"setFocus",(function(){n.input&&n.input.focus&&n.input.focus({preventScroll:!0})})),Dt(_t(n),"setBlur",(function(){n.input&&n.input.blur&&n.input.blur(),n.cancelFocusInput()})),Dt(_t(n),"setOpen",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];n.setState({open:e,preSelection:e&&n.state.open?n.state.preSelection:n.calcInitialState().preSelection,lastPreSelectChange:dn},(function(){e||n.setState((function(e){return{focused:!!t&&e.focused}}),(function(){!t&&n.setBlur(),n.setState({inputValue:null})}))}))})),Dt(_t(n),"inputOk",(function(){return fe.default(n.state.preSelection)})),Dt(_t(n),"isCalendarOpen",(function(){return void 0===n.props.open?n.state.open&&!n.props.disabled&&!n.props.readOnly:n.props.open})),Dt(_t(n),"handleFocus",(function(e){n.state.preventFocus||(n.props.onFocus(e),n.props.preventOpenOnFocus||n.props.readOnly||n.setOpen(!0)),n.setState({focused:!0})})),Dt(_t(n),"sendFocusBackToInput",(function(){n.preventFocusTimeout&&n.clearPreventFocusTimeout(),n.setState({preventFocus:!0},(function(){n.preventFocusTimeout=setTimeout((function(){n.setFocus(),n.setState({preventFocus:!1})}))}))})),Dt(_t(n),"cancelFocusInput",(function(){clearTimeout(n.inputFocusTimeout),n.inputFocusTimeout=null})),Dt(_t(n),"deferFocusInput",(function(){n.cancelFocusInput(),n.inputFocusTimeout=setTimeout((function(){return n.setFocus()}),1)})),Dt(_t(n),"handleDropdownFocus",(function(){n.cancelFocusInput()})),Dt(_t(n),"handleBlur",(function(e){(!n.state.open||n.props.withPortal||n.props.showTimeInput)&&n.props.onBlur(e),n.setState({focused:!1})})),Dt(_t(n),"handleCalendarClickOutside",(function(e){n.props.inline||n.setOpen(!1),n.props.onClickOutside(e),n.props.withPortal&&e.preventDefault()})),Dt(_t(n),"handleChange",(function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&(c=pt.default(o,i.slice(0,o.length),new Date)),Bt(c)||(c=new Date(o))),Bt(c)&&p?c:null));n.props.showTimeSelectOnly&&n.props.selected&&f&&!$t(f,n.props.selected)&&(f=gt.default(n.props.selected,{hours:Te.default(f),minutes:Me.default(f),seconds:_e.default(f)})),!f&&a.target.value||(n.props.showWeekPicker&&(f=Ut(f,n.props.locale,n.props.calendarStartDay)),n.setSelected(f,a,!0))}})),Dt(_t(n),"handleSelect",(function(e,t,r){if(n.props.shouldCloseOnSelect&&!n.props.showTimeSelect&&n.sendFocusBackToInput(),n.props.onChangeRaw&&n.props.onChangeRaw(t),n.props.showWeekPicker&&(e=Ut(e,n.props.locale,n.props.calendarStartDay)),n.setSelected(e,t,!1,r),n.props.showDateSelect&&n.setState({isRenderAriaLiveMessage:!0}),!n.props.shouldCloseOnSelect||n.props.showTimeSelect)n.setPreSelection(e);else if(!n.props.inline){n.props.selectsRange||n.setOpen(!1);var a=n.props,o=a.startDate,i=a.endDate;!o||i||ut.default(e,o)||n.setOpen(!1)}})),Dt(_t(n),"setSelected",(function(e,t,r,a){var o=e;if(n.props.showYearPicker){if(null!==o&&cr(Fe.default(o),n.props))return}else if(n.props.showMonthYearPicker){if(null!==o&&ir(o,n.props))return}else if(null!==o&&ar(o,n.props))return;var i=n.props,s=i.onChange,l=i.selectsRange,u=i.startDate,c=i.endDate;if(!Zt(n.props.selected,o)||n.props.allowSameDay||l)if(null!==o&&(!n.props.selected||r&&(n.props.showTimeSelect||n.props.showTimeSelectOnly||n.props.showTimeInput)||(o=Wt(o,{hour:Te.default(n.props.selected),minute:Me.default(n.props.selected),second:_e.default(n.props.selected)})),n.props.inline||n.setState({preSelection:o}),n.props.focusSelectedMonth||n.setState({monthSelectedIn:a})),l){var d=u&&c;u||c?u&&!c&&(ut.default(o,u)?s([o,null],t):s([u,o],t)):s([o,null],t),d&&s([o,null],t)}else s(o,t);r||(n.props.onSelect(o,t),n.setState({inputValue:null}))})),Dt(_t(n),"setPreSelection",(function(e){var t=void 0!==n.props.minDate,r=void 0!==n.props.maxDate,a=!0;if(e){n.props.showWeekPicker&&(e=Ut(e,n.props.locale,n.props.calendarStartDay));var o=Xe.default(e);if(t&&r)a=Jt(e,n.props.minDate,n.props.maxDate);else if(t){var i=Xe.default(n.props.minDate);a=lt.default(e,i)||Zt(o,i)}else if(r){var s=et.default(n.props.maxDate);a=ut.default(e,s)||Zt(o,s)}}a&&n.setState({preSelection:e})})),Dt(_t(n),"toggleCalendar",(function(){n.setOpen(!n.state.open)})),Dt(_t(n),"handleTimeChange",(function(e){var t=n.props.selected?n.props.selected:n.getPreSelection(),r=n.props.selected?e:Wt(t,{hour:Te.default(e),minute:Me.default(e)});n.setState({preSelection:r}),n.props.onChange(r),n.props.shouldCloseOnSelect&&(n.sendFocusBackToInput(),n.setOpen(!1)),n.props.showTimeInput&&n.setOpen(!0),(n.props.showTimeSelectOnly||n.props.showTimeSelect)&&n.setState({isRenderAriaLiveMessage:!0}),n.setState({inputValue:null})})),Dt(_t(n),"onInputClick",(function(){n.props.disabled||n.props.readOnly||n.setOpen(!0),n.props.onInputClick()})),Dt(_t(n),"onInputKeyDown",(function(e){n.props.onKeyDown(e);var t=e.key;if(n.state.open||n.props.inline||n.props.preventOpenOnFocus){if(n.state.open){if("ArrowDown"===t||"ArrowUp"===t){e.preventDefault();var r=n.props.showWeekPicker&&n.props.showWeekNumbers?'.react-datepicker__week-number[tabindex="0"]':'.react-datepicker__day[tabindex="0"]',a=n.calendar.componentNode&&n.calendar.componentNode.querySelector(r);return void(a&&a.focus({preventScroll:!0}))}var o=jt(n.state.preSelection);"Enter"===t?(e.preventDefault(),n.inputOk()&&n.state.lastPreSelectChange===dn?(n.handleSelect(o,e),!n.props.shouldCloseOnSelect&&n.setPreSelection(o)):n.setOpen(!1)):"Escape"===t?(e.preventDefault(),n.sendFocusBackToInput(),n.setOpen(!1)):"Tab"===t&&n.setOpen(!1),n.inputOk()||n.props.onInputError({code:1,msg:ln})}}else"ArrowDown"!==t&&"ArrowUp"!==t&&"Enter"!==t||n.onInputClick()})),Dt(_t(n),"onPortalKeyDown",(function(e){"Escape"===e.key&&(e.preventDefault(),n.setState({preventFocus:!0},(function(){n.setOpen(!1),setTimeout((function(){n.setFocus(),n.setState({preventFocus:!1})}))})))})),Dt(_t(n),"onDayKeyDown",(function(e){n.props.onKeyDown(e);var t=e.key,r=jt(n.state.preSelection);if("Enter"===t)e.preventDefault(),n.handleSelect(r,e),!n.props.shouldCloseOnSelect&&n.setPreSelection(r);else if("Escape"===t)e.preventDefault(),n.setOpen(!1),n.inputOk()||n.props.onInputError({code:1,msg:ln});else if(!n.props.disabledKeyboardNavigation){var a;switch(t){case"ArrowLeft":a=n.props.showWeekPicker?Ce.default(r,1):De.default(r,1);break;case"ArrowRight":a=n.props.showWeekPicker?ye.default(r,1):be.default(r,1);break;case"ArrowUp":a=Ce.default(r,1);break;case"ArrowDown":a=ye.default(r,1);break;case"PageUp":a=Ee.default(r,1);break;case"PageDown":a=we.default(r,1);break;case"Home":a=Se.default(r,1);break;case"End":a=ke.default(r,1);break;default:a=null}if(!a)return void(n.props.onInputError&&n.props.onInputError({code:1,msg:ln}));if(e.preventDefault(),n.setState({lastPreSelectChange:dn}),n.props.adjustDateOnChange&&n.setSelected(a),n.setPreSelection(a),n.props.inline){var o=Re.default(r),i=Re.default(a),s=Fe.default(r),l=Fe.default(a);o!==i||s!==l?n.setState({shouldFocusDayInline:!0}):n.setState({shouldFocusDayInline:!1})}}})),Dt(_t(n),"onPopperKeyDown",(function(e){"Escape"===e.key&&(e.preventDefault(),n.sendFocusBackToInput())})),Dt(_t(n),"onClearClick",(function(e){e&&e.preventDefault&&e.preventDefault(),n.sendFocusBackToInput(),n.props.selectsRange?n.props.onChange([null,null],e):n.props.onChange(null,e),n.setState({inputValue:null})})),Dt(_t(n),"clear",(function(){n.onClearClick()})),Dt(_t(n),"onScroll",(function(e){"boolean"==typeof n.props.closeOnScroll&&n.props.closeOnScroll?e.target!==document&&e.target!==document.documentElement&&e.target!==document.body||n.setOpen(!1):"function"==typeof n.props.closeOnScroll&&n.props.closeOnScroll(e)&&n.setOpen(!1)})),Dt(_t(n),"renderCalendar",(function(){return n.props.inline||n.isCalendarOpen()?de.default.createElement(sn,{ref:function(e){n.calendar=e},locale:n.props.locale,calendarStartDay:n.props.calendarStartDay,chooseDayAriaLabelPrefix:n.props.chooseDayAriaLabelPrefix,disabledDayAriaLabelPrefix:n.props.disabledDayAriaLabelPrefix,weekAriaLabelPrefix:n.props.weekAriaLabelPrefix,monthAriaLabelPrefix:n.props.monthAriaLabelPrefix,adjustDateOnChange:n.props.adjustDateOnChange,setOpen:n.setOpen,shouldCloseOnSelect:n.props.shouldCloseOnSelect,dateFormat:n.props.dateFormatCalendar,useWeekdaysShort:n.props.useWeekdaysShort,formatWeekDay:n.props.formatWeekDay,dropdownMode:n.props.dropdownMode,selected:n.props.selected,preSelection:n.state.preSelection,onSelect:n.handleSelect,onWeekSelect:n.props.onWeekSelect,openToDate:n.props.openToDate,minDate:n.props.minDate,maxDate:n.props.maxDate,selectsStart:n.props.selectsStart,selectsEnd:n.props.selectsEnd,selectsRange:n.props.selectsRange,startDate:n.props.startDate,endDate:n.props.endDate,excludeDates:n.props.excludeDates,excludeDateIntervals:n.props.excludeDateIntervals,filterDate:n.props.filterDate,onClickOutside:n.handleCalendarClickOutside,formatWeekNumber:n.props.formatWeekNumber,highlightDates:n.state.highlightDates,holidays:Dr(n.modifyHolidays()),includeDates:n.props.includeDates,includeDateIntervals:n.props.includeDateIntervals,includeTimes:n.props.includeTimes,injectTimes:n.props.injectTimes,inline:n.props.inline,shouldFocusDayInline:n.state.shouldFocusDayInline,peekNextMonth:n.props.peekNextMonth,showMonthDropdown:n.props.showMonthDropdown,showPreviousMonths:n.props.showPreviousMonths,useShortMonthInDropdown:n.props.useShortMonthInDropdown,showMonthYearDropdown:n.props.showMonthYearDropdown,showWeekNumbers:n.props.showWeekNumbers,showYearDropdown:n.props.showYearDropdown,withPortal:n.props.withPortal,forceShowMonthNavigation:n.props.forceShowMonthNavigation,showDisabledMonthNavigation:n.props.showDisabledMonthNavigation,scrollableYearDropdown:n.props.scrollableYearDropdown,scrollableMonthYearDropdown:n.props.scrollableMonthYearDropdown,todayButton:n.props.todayButton,weekLabel:n.props.weekLabel,outsideClickIgnoreClass:on,fixedHeight:n.props.fixedHeight,monthsShown:n.props.monthsShown,monthSelectedIn:n.state.monthSelectedIn,onDropdownFocus:n.handleDropdownFocus,onMonthChange:n.props.onMonthChange,onYearChange:n.props.onYearChange,dayClassName:n.props.dayClassName,weekDayClassName:n.props.weekDayClassName,monthClassName:n.props.monthClassName,timeClassName:n.props.timeClassName,showDateSelect:n.props.showDateSelect,showTimeSelect:n.props.showTimeSelect,showTimeSelectOnly:n.props.showTimeSelectOnly,onTimeChange:n.handleTimeChange,timeFormat:n.props.timeFormat,timeIntervals:n.props.timeIntervals,minTime:n.props.minTime,maxTime:n.props.maxTime,excludeTimes:n.props.excludeTimes,filterTime:n.props.filterTime,timeCaption:n.props.timeCaption,className:n.props.calendarClassName,container:n.props.calendarContainer,yearItemNumber:n.props.yearItemNumber,yearDropdownItemNumber:n.props.yearDropdownItemNumber,previousMonthAriaLabel:n.props.previousMonthAriaLabel,previousMonthButtonLabel:n.props.previousMonthButtonLabel,nextMonthAriaLabel:n.props.nextMonthAriaLabel,nextMonthButtonLabel:n.props.nextMonthButtonLabel,previousYearAriaLabel:n.props.previousYearAriaLabel,previousYearButtonLabel:n.props.previousYearButtonLabel,nextYearAriaLabel:n.props.nextYearAriaLabel,nextYearButtonLabel:n.props.nextYearButtonLabel,timeInputLabel:n.props.timeInputLabel,disabledKeyboardNavigation:n.props.disabledKeyboardNavigation,renderCustomHeader:n.props.renderCustomHeader,popperProps:n.props.popperProps,renderDayContents:n.props.renderDayContents,renderMonthContent:n.props.renderMonthContent,renderQuarterContent:n.props.renderQuarterContent,renderYearContent:n.props.renderYearContent,onDayMouseEnter:n.props.onDayMouseEnter,onMonthMouseLeave:n.props.onMonthMouseLeave,onYearMouseEnter:n.props.onYearMouseEnter,onYearMouseLeave:n.props.onYearMouseLeave,selectsDisabledDaysInRange:n.props.selectsDisabledDaysInRange,showTimeInput:n.props.showTimeInput,showMonthYearPicker:n.props.showMonthYearPicker,showFullMonthYearPicker:n.props.showFullMonthYearPicker,showTwoColumnMonthYearPicker:n.props.showTwoColumnMonthYearPicker,showFourColumnMonthYearPicker:n.props.showFourColumnMonthYearPicker,showYearPicker:n.props.showYearPicker,showQuarterYearPicker:n.props.showQuarterYearPicker,showWeekPicker:n.props.showWeekPicker,showPopperArrow:n.props.showPopperArrow,excludeScrollbar:n.props.excludeScrollbar,handleOnKeyDown:n.props.onKeyDown,handleOnDayKeyDown:n.onDayKeyDown,isInputFocused:n.state.focused,customTimeInput:n.props.customTimeInput,setPreSelection:n.setPreSelection},n.props.children):null})),Dt(_t(n),"renderAriaLiveRegion",(function(){var e,t=n.props,r=t.dateFormat,a=t.locale,o=n.props.showTimeInput||n.props.showTimeSelect?"PPPPp":"PPPP";return e=n.props.selectsRange?"Selected start date: ".concat(Ht(n.props.startDate,{dateFormat:o,locale:a}),". ").concat(n.props.endDate?"End date: "+Ht(n.props.endDate,{dateFormat:o,locale:a}):""):n.props.showTimeSelectOnly?"Selected time: ".concat(Ht(n.props.selected,{dateFormat:r,locale:a})):n.props.showYearPicker?"Selected year: ".concat(Ht(n.props.selected,{dateFormat:"yyyy",locale:a})):n.props.showMonthYearPicker?"Selected month: ".concat(Ht(n.props.selected,{dateFormat:"MMMM yyyy",locale:a})):n.props.showQuarterYearPicker?"Selected quarter: ".concat(Ht(n.props.selected,{dateFormat:"yyyy, QQQ",locale:a})):"Selected date: ".concat(Ht(n.props.selected,{dateFormat:o,locale:a})),de.default.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e)})),Dt(_t(n),"renderDateInput",(function(){var e,t=pe.default(n.props.className,Dt({},on,n.state.open)),r=n.props.customInput||de.default.createElement("input",{type:"text"}),a=n.props.customInputRef||"ref",o="string"==typeof n.props.value?n.props.value:"string"==typeof n.state.inputValue?n.state.inputValue:n.props.selectsRange?function(e,t,r){if(!e)return"";var n=Ht(e,r),a=t?Ht(t,r):"";return"".concat(n," - ").concat(a)}(n.props.startDate,n.props.endDate,n.props):Ht(n.props.selected,n.props);return de.default.cloneElement(r,(Dt(Dt(Dt(Dt(Dt(Dt(Dt(Dt(Dt(Dt(e={},a,(function(e){n.input=e})),"value",o),"onBlur",n.handleBlur),"onChange",n.handleChange),"onClick",n.onInputClick),"onFocus",n.handleFocus),"onKeyDown",n.onInputKeyDown),"id",n.props.id),"name",n.props.name),"form",n.props.form),Dt(Dt(Dt(Dt(Dt(Dt(Dt(Dt(Dt(Dt(e,"autoFocus",n.props.autoFocus),"placeholder",n.props.placeholderText),"disabled",n.props.disabled),"autoComplete",n.props.autoComplete),"className",pe.default(r.props.className,t)),"title",n.props.title),"readOnly",n.props.readOnly),"required",n.props.required),"tabIndex",n.props.tabIndex),"aria-describedby",n.props.ariaDescribedBy),Dt(Dt(Dt(e,"aria-invalid",n.props.ariaInvalid),"aria-labelledby",n.props.ariaLabelledBy),"aria-required",n.props.ariaRequired)))})),Dt(_t(n),"renderClearButton",(function(){var e=n.props,t=e.isClearable,r=e.disabled,a=e.selected,o=e.startDate,i=e.endDate,s=e.clearButtonTitle,l=e.clearButtonClassName,u=void 0===l?"":l,c=e.ariaLabelClose,d=void 0===c?"Close":c;return!t||null==a&&null==o&&null==i?null:de.default.createElement("button",{type:"button",className:pe.default("react-datepicker__close-icon",u,{"react-datepicker__close-icon--disabled":r}),disabled:r,"aria-label":d,onClick:n.onClearClick,title:s,tabIndex:-1})})),n.state=n.calcInitialState(),n.preventFocusTimeout=null,n}return kt(r,[{key:"componentDidMount",value:function(){window.addEventListener("scroll",this.onScroll,!0)}},{key:"componentDidUpdate",value:function(e,t){var r,n;e.inline&&(r=e.selected,n=this.props.selected,r&&n?Re.default(r)!==Re.default(n)||Fe.default(r)!==Fe.default(n):r!==n)&&this.setPreSelection(this.props.selected),void 0!==this.state.monthSelectedIn&&e.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),e.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:kr(this.props.highlightDates)}),t.focused||Zt(e.selected,this.props.selected)||this.setState({inputValue:null}),t.open!==this.state.open&&(!1===t.open&&!0===this.state.open&&this.props.onCalendarOpen(),!0===t.open&&!1===this.state.open&&this.props.onCalendarClose())}},{key:"componentWillUnmount",value:function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0)}},{key:"renderInputContainer",value:function(){var e=this.props,t=e.showIcon,r=e.icon,n=e.calendarIconClassname,a=e.toggleCalendarOnIconClick,o=this.state.open;return de.default.createElement("div",{className:"react-datepicker__input-container".concat(t?" react-datepicker__view-calendar-icon":"")},t&&de.default.createElement(en,Ct({icon:r,className:"".concat(n," ").concat(o&&"react-datepicker-ignore-onclickoutside")},a?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())}},{key:"render",value:function(){var e=this.renderCalendar();if(this.props.inline)return e;if(this.props.withPortal){var t=this.state.open?de.default.createElement(nn,{enableTabLoop:this.props.enableTabLoop},de.default.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},e)):null;return this.state.open&&this.props.portalId&&(t=de.default.createElement(tn,{portalId:this.props.portalId,portalHost:this.props.portalHost},t)),de.default.createElement("div",null,this.renderInputContainer(),t)}return de.default.createElement(an,{className:this.props.popperClassName,wrapperClassName:this.props.wrapperClassName,hidePopper:!this.isCalendarOpen(),portalId:this.props.portalId,portalHost:this.props.portalHost,popperModifiers:this.props.popperModifiers,targetComponent:this.renderInputContainer(),popperContainer:this.props.popperContainer,popperComponent:e,popperPlacement:this.props.popperPlacement,popperProps:this.props.popperProps,popperOnKeyDown:this.onPopperKeyDown,enableTabLoop:this.props.enableTabLoop})}}],[{key:"defaultProps",get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",onChange:function(){},disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",onFocus:function(){},onBlur:function(){},onKeyDown:function(){},onInputClick:function(){},onSelect:function(){},onClickOutside:function(){},onMonthChange:function(){},onCalendarOpen:function(){},onCalendarClose:function(){},preventOpenOnFocus:!1,onYearChange:function(){},onInputError:function(){},monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:Ft,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1}}}]),r}(de.default.Component),cn="input",dn="navigate";e.CalendarContainer=$r,e.default=un,e.getDefaultLocale=er,e.registerLocale=function(e,t){var r="undefined"!=typeof window?window:globalThis;r.__localeData__||(r.__localeData__={}),r.__localeData__[e]=t},e.setDefaultLocale=function(e){("undefined"!=typeof window?window:globalThis).__localeId__=e},Object.defineProperty(e,"__esModule",{value:!0})}(t,r(96540),r(5556),r(46942),r(47586),r(92964),r(56658),r(62658),r(92908),r(7806),r(12454),r(83214),r(58980),r(38733),r(10443),r(5377),r(5231),r(63801),r(70486),r(80187),r(89691),r(30161),r(2928),r(24234),r(37066),r(98308),r(17286),r(63571),r(12335),r(78991),r(42231),r(63701),r(49864),r(5618),r(32455),r(38990),r(50136),r(53511),r(38195),r(88138),r(26876),r(15163),r(34631),r(63501),r(78918),r(65068),r(3494),r(49128),r(81191),r(15898),r(16010),r(13238),r(35269),r(68840),r(65104),r(15549),r(58559),r(99699),r(71082),r(85670),r(73908),r(40961),r(32430),r(2402))},98090:(e,t,r)=>{"use strict";r.d(t,{A:()=>d});var n={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};const a=function(e,t,r){var a,o=n[e];return a="string"===typeof o?o:1===t?o.one:o.other.replace("{{count}}",t.toString()),null!==r&&void 0!==r&&r.addSuffix?r.comparison&&r.comparison>0?"in "+a:a+" ago":a};function o(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.width?String(t.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}var i={date:o({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:o({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:o({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})};var s={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function l(e){return function(t,r){var n;if("formatting"===(null!==r&&void 0!==r&&r.context?String(r.context):"standalone")&&e.formattingValues){var a=e.defaultFormattingWidth||e.defaultWidth,o=null!==r&&void 0!==r&&r.width?String(r.width):a;n=e.formattingValues[o]||e.formattingValues[a]}else{var i=e.defaultWidth,s=null!==r&&void 0!==r&&r.width?String(r.width):e.defaultWidth;n=e.values[s]||e.values[i]}return n[e.argumentCallback?e.argumentCallback(t):t]}}function u(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.width,a=n&&e.matchPatterns[n]||e.matchPatterns[e.defaultMatchWidth],o=t.match(a);if(!o)return null;var i,s=o[0],l=n&&e.parsePatterns[n]||e.parsePatterns[e.defaultParseWidth],u=Array.isArray(l)?function(e,t){for(var r=0;r20||n<10)switch(n%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd"}return r+"th"},era:l({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:l({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:l({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:l({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:l({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(c={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}},function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.match(c.matchPattern);if(!r)return null;var n=r[0],a=e.match(c.parsePattern);if(!a)return null;var o=c.valueCallback?c.valueCallback(a[0]):a[0];return{value:o=t.valueCallback?t.valueCallback(o):o,rest:e.slice(n.length)}}),era:u({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:u({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:u({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:u({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:u({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}}},28458:(e,t,r)=>{"use strict";r.d(t,{q:()=>a});var n={};function a(){return n}},49668:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=function(e,t){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},a=function(e,t){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}};const o={p:a,P:function(e,t){var r,o=e.match(/(P+)(p+)?/)||[],i=o[1],s=o[2];if(!s)return n(e,t);switch(i){case"P":r=t.dateTime({width:"short"});break;case"PP":r=t.dateTime({width:"medium"});break;case"PPP":r=t.dateTime({width:"long"});break;default:r=t.dateTime({width:"full"})}return r.replace("{{date}}",n(i,t)).replace("{{time}}",a(s,t))}}},40460:(e,t,r)=>{"use strict";function n(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()}r.d(t,{A:()=>n})},49717:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(99699),a=r(74715),o=r(76535),i=r(11151);var s=6048e5;function l(e){(0,i.A)(1,arguments);var t=(0,n.default)(e),r=(0,a.A)(t).getTime()-function(e){(0,i.A)(1,arguments);var t=(0,o.A)(e),r=new Date(0);return r.setUTCFullYear(t,0,4),r.setUTCHours(0,0,0,0),(0,a.A)(r)}(t).getTime();return Math.round(r/s)+1}},76535:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(99699),a=r(11151),o=r(74715);function i(e){(0,a.A)(1,arguments);var t=(0,n.default)(e),r=t.getUTCFullYear(),i=new Date(0);i.setUTCFullYear(r+1,0,4),i.setUTCHours(0,0,0,0);var s=(0,o.A)(i),l=new Date(0);l.setUTCFullYear(r,0,4),l.setUTCHours(0,0,0,0);var u=(0,o.A)(l);return t.getTime()>=s.getTime()?r+1:t.getTime()>=u.getTime()?r:r-1}},9478:(e,t,r)=>{"use strict";r.d(t,{A:()=>c});var n=r(99699),a=r(67350),o=r(38888),i=r(11151),s=r(67668),l=r(28458);var u=6048e5;function c(e,t){(0,i.A)(1,arguments);var r=(0,n.default)(e),c=(0,a.A)(r,t).getTime()-function(e,t){var r,n,u,c,d,p,f,h;(0,i.A)(1,arguments);var v=(0,l.q)(),g=(0,s.A)(null!==(r=null!==(n=null!==(u=null!==(c=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==c?c:null===t||void 0===t||null===(d=t.locale)||void 0===d||null===(p=d.options)||void 0===p?void 0:p.firstWeekContainsDate)&&void 0!==u?u:v.firstWeekContainsDate)&&void 0!==n?n:null===(f=v.locale)||void 0===f||null===(h=f.options)||void 0===h?void 0:h.firstWeekContainsDate)&&void 0!==r?r:1),m=(0,o.A)(e,t),b=new Date(0);return b.setUTCFullYear(m,0,g),b.setUTCHours(0,0,0,0),(0,a.A)(b,t)}(r,t).getTime();return Math.round(c/u)+1}},38888:(e,t,r)=>{"use strict";r.d(t,{A:()=>l});var n=r(99699),a=r(11151),o=r(67350),i=r(67668),s=r(28458);function l(e,t){var r,l,u,c,d,p,f,h;(0,a.A)(1,arguments);var v=(0,n.default)(e),g=v.getUTCFullYear(),m=(0,s.q)(),b=(0,i.A)(null!==(r=null!==(l=null!==(u=null!==(c=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==c?c:null===t||void 0===t||null===(d=t.locale)||void 0===d||null===(p=d.options)||void 0===p?void 0:p.firstWeekContainsDate)&&void 0!==u?u:m.firstWeekContainsDate)&&void 0!==l?l:null===(f=m.locale)||void 0===f||null===(h=f.options)||void 0===h?void 0:h.firstWeekContainsDate)&&void 0!==r?r:1);if(!(b>=1&&b<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var y=new Date(0);y.setUTCFullYear(g+1,0,b),y.setUTCHours(0,0,0,0);var w=(0,o.A)(y,t),x=new Date(0);x.setUTCFullYear(g,0,b),x.setUTCHours(0,0,0,0);var k=(0,o.A)(x,t);return v.getTime()>=w.getTime()?g+1:v.getTime()>=k.getTime()?g:g-1}},9581:(e,t,r)=>{"use strict";r.d(t,{ef:()=>o,lJ:()=>s,xM:()=>i});var n=["D","DD"],a=["YY","YYYY"];function o(e){return-1!==n.indexOf(e)}function i(e){return-1!==a.indexOf(e)}function s(e,t,r){if("YYYY"===e)throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(t,"`) for formatting years to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("YY"===e)throw new RangeError("Use `yy` instead of `YY` (in `".concat(t,"`) for formatting years to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("D"===e)throw new RangeError("Use `d` instead of `D` (in `".concat(t,"`) for formatting days of the month to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("DD"===e)throw new RangeError("Use `dd` instead of `DD` (in `".concat(t,"`) for formatting days of the month to the input `").concat(r,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"))}},11151:(e,t,r)=>{"use strict";function n(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}r.d(t,{A:()=>n})},74715:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e),r=t.getUTCDay(),o=(r<1?7:0)+r-1;return t.setUTCDate(t.getUTCDate()-o),t.setUTCHours(0,0,0,0),t}},67350:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});var n=r(99699),a=r(11151),o=r(67668),i=r(28458);function s(e,t){var r,s,l,u,c,d,p,f;(0,a.A)(1,arguments);var h=(0,i.q)(),v=(0,o.A)(null!==(r=null!==(s=null!==(l=null!==(u=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==u?u:null===t||void 0===t||null===(c=t.locale)||void 0===c||null===(d=c.options)||void 0===d?void 0:d.weekStartsOn)&&void 0!==l?l:h.weekStartsOn)&&void 0!==s?s:null===(p=h.locale)||void 0===p||null===(f=p.options)||void 0===f?void 0:f.weekStartsOn)&&void 0!==r?r:0);if(!(v>=0&&v<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var g=(0,n.default)(e),m=g.getUTCDay(),b=(m{"use strict";function n(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}r.d(t,{A:()=>n})},7806:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t);return isNaN(i)?new Date(NaN):i?(r.setDate(r.getDate()+i),r):r}},92908:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(67668),a=r(77871),o=r(11151),i=36e5;function s(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.A)(e,r*i)}},77871:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e).getTime(),i=(0,n.A)(t);return new Date(r+i)}},62658:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(67668),a=r(77871),o=r(11151),i=6e4;function s(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.A)(e,r*i)}},83214:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t);if(isNaN(i))return new Date(NaN);if(!i)return r;var s=r.getDate(),l=new Date(r.getTime());return l.setMonth(r.getMonth()+i+1,0),s>=l.getDate()?l:(r.setFullYear(l.getFullYear(),l.getMonth(),s),r)}},58980:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(83214),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=3*(0,n.A)(t);return(0,a.default)(e,r)}},12454:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(7806),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=7*(0,n.A)(t);return(0,a.default)(e,r)}},38733:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(83214),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.default)(e,12*r)}},4019:(e,t,r)=>{"use strict";r.d(t,{Cg:()=>n,_m:()=>o,s0:()=>a});Math.pow(10,8);var n=6e4,a=36e5,o=1e3},53511:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(40460),a=r(26876),o=r(11151),i=864e5;function s(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),s=(0,a.default)(t),l=r.getTime()-(0,n.A)(r),u=s.getTime()-(0,n.A)(s);return Math.round((l-u)/i)}},38195:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return 12*(r.getFullYear()-o.getFullYear())+(r.getMonth()-o.getMonth())}},88138:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getFullYear()-o.getFullYear()}},65068:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e);return t.setHours(23,59,59,999),t}},49128:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e),r=t.getMonth();return t.setFullYear(t.getFullYear(),r+1,0),t.setHours(23,59,59,999),t}},3494:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(28458),a=r(99699),o=r(67668),i=r(11151);function s(e,t){var r,s,l,u,c,d,p,f;(0,i.A)(1,arguments);var h=(0,n.q)(),v=(0,o.A)(null!==(r=null!==(s=null!==(l=null!==(u=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==u?u:null===t||void 0===t||null===(c=t.locale)||void 0===c||null===(d=c.options)||void 0===d?void 0:d.weekStartsOn)&&void 0!==l?l:h.weekStartsOn)&&void 0!==s?s:null===(p=h.locale)||void 0===p||null===(f=p.options)||void 0===f?void 0:f.weekStartsOn)&&void 0!==r?r:0);if(!(v>=0&&v<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var g=(0,a.default)(e),m=g.getDay(),b=6+(m{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e),r=t.getFullYear();return t.setFullYear(r+1,0,0),t.setHours(23,59,59,999),t}},56658:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>R});var n=r(92964),a=r(50670),o=r(99699),i=r(11151);var s=r(49717),l=r(76535),u=r(9478),c=r(38888);function d(e,t){for(var r=e<0?"-":"",n=Math.abs(e).toString();n.length0?r:1-r;return d("yy"===t?n%100:n,t.length)},M:function(e,t){var r=e.getUTCMonth();return"M"===t?String(r+1):d(r+1,2)},d:function(e,t){return d(e.getUTCDate(),t.length)},a:function(e,t){var r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.toUpperCase();case"aaa":return r;case"aaaaa":return r[0];default:return"am"===r?"a.m.":"p.m."}},h:function(e,t){return d(e.getUTCHours()%12||12,t.length)},H:function(e,t){return d(e.getUTCHours(),t.length)},m:function(e,t){return d(e.getUTCMinutes(),t.length)},s:function(e,t){return d(e.getUTCSeconds(),t.length)},S:function(e,t){var r=t.length,n=e.getUTCMilliseconds();return d(Math.floor(n*Math.pow(10,r-3)),t.length)}};var f="midnight",h="noon",v="morning",g="afternoon",m="evening",b="night";function y(e,t){var r=e>0?"-":"+",n=Math.abs(e),a=Math.floor(n/60),o=n%60;if(0===o)return r+String(a);var i=t||"";return r+String(a)+i+d(o,2)}function w(e,t){return e%60===0?(e>0?"-":"+")+d(Math.abs(e)/60,2):x(e,t)}function x(e,t){var r=t||"",n=e>0?"-":"+",a=Math.abs(e);return n+d(Math.floor(a/60),2)+r+d(a%60,2)}const k={G:function(e,t,r){var n=e.getUTCFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return r.era(n,{width:"abbreviated"});case"GGGGG":return r.era(n,{width:"narrow"});default:return r.era(n,{width:"wide"})}},y:function(e,t,r){if("yo"===t){var n=e.getUTCFullYear(),a=n>0?n:1-n;return r.ordinalNumber(a,{unit:"year"})}return p.y(e,t)},Y:function(e,t,r,n){var a=(0,c.A)(e,n),o=a>0?a:1-a;return"YY"===t?d(o%100,2):"Yo"===t?r.ordinalNumber(o,{unit:"year"}):d(o,t.length)},R:function(e,t){return d((0,l.A)(e),t.length)},u:function(e,t){return d(e.getUTCFullYear(),t.length)},Q:function(e,t,r){var n=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(n);case"QQ":return d(n,2);case"Qo":return r.ordinalNumber(n,{unit:"quarter"});case"QQQ":return r.quarter(n,{width:"abbreviated",context:"formatting"});case"QQQQQ":return r.quarter(n,{width:"narrow",context:"formatting"});default:return r.quarter(n,{width:"wide",context:"formatting"})}},q:function(e,t,r){var n=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(n);case"qq":return d(n,2);case"qo":return r.ordinalNumber(n,{unit:"quarter"});case"qqq":return r.quarter(n,{width:"abbreviated",context:"standalone"});case"qqqqq":return r.quarter(n,{width:"narrow",context:"standalone"});default:return r.quarter(n,{width:"wide",context:"standalone"})}},M:function(e,t,r){var n=e.getUTCMonth();switch(t){case"M":case"MM":return p.M(e,t);case"Mo":return r.ordinalNumber(n+1,{unit:"month"});case"MMM":return r.month(n,{width:"abbreviated",context:"formatting"});case"MMMMM":return r.month(n,{width:"narrow",context:"formatting"});default:return r.month(n,{width:"wide",context:"formatting"})}},L:function(e,t,r){var n=e.getUTCMonth();switch(t){case"L":return String(n+1);case"LL":return d(n+1,2);case"Lo":return r.ordinalNumber(n+1,{unit:"month"});case"LLL":return r.month(n,{width:"abbreviated",context:"standalone"});case"LLLLL":return r.month(n,{width:"narrow",context:"standalone"});default:return r.month(n,{width:"wide",context:"standalone"})}},w:function(e,t,r,n){var a=(0,u.A)(e,n);return"wo"===t?r.ordinalNumber(a,{unit:"week"}):d(a,t.length)},I:function(e,t,r){var n=(0,s.A)(e);return"Io"===t?r.ordinalNumber(n,{unit:"week"}):d(n,t.length)},d:function(e,t,r){return"do"===t?r.ordinalNumber(e.getUTCDate(),{unit:"date"}):p.d(e,t)},D:function(e,t,r){var n=function(e){(0,i.A)(1,arguments);var t=(0,o.default)(e),r=t.getTime();t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0);var n=r-t.getTime();return Math.floor(n/864e5)+1}(e);return"Do"===t?r.ordinalNumber(n,{unit:"dayOfYear"}):d(n,t.length)},E:function(e,t,r){var n=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return r.day(n,{width:"abbreviated",context:"formatting"});case"EEEEE":return r.day(n,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},e:function(e,t,r,n){var a=e.getUTCDay(),o=(a-n.weekStartsOn+8)%7||7;switch(t){case"e":return String(o);case"ee":return d(o,2);case"eo":return r.ordinalNumber(o,{unit:"day"});case"eee":return r.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return r.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(a,{width:"short",context:"formatting"});default:return r.day(a,{width:"wide",context:"formatting"})}},c:function(e,t,r,n){var a=e.getUTCDay(),o=(a-n.weekStartsOn+8)%7||7;switch(t){case"c":return String(o);case"cc":return d(o,t.length);case"co":return r.ordinalNumber(o,{unit:"day"});case"ccc":return r.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return r.day(a,{width:"narrow",context:"standalone"});case"cccccc":return r.day(a,{width:"short",context:"standalone"});default:return r.day(a,{width:"wide",context:"standalone"})}},i:function(e,t,r){var n=e.getUTCDay(),a=0===n?7:n;switch(t){case"i":return String(a);case"ii":return d(a,t.length);case"io":return r.ordinalNumber(a,{unit:"day"});case"iii":return r.day(n,{width:"abbreviated",context:"formatting"});case"iiiii":return r.day(n,{width:"narrow",context:"formatting"});case"iiiiii":return r.day(n,{width:"short",context:"formatting"});default:return r.day(n,{width:"wide",context:"formatting"})}},a:function(e,t,r){var n=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"aaa":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},b:function(e,t,r){var n,a=e.getUTCHours();switch(n=12===a?h:0===a?f:a/12>=1?"pm":"am",t){case"b":case"bb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"bbb":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},B:function(e,t,r){var n,a=e.getUTCHours();switch(n=a>=17?m:a>=12?g:a>=4?v:b,t){case"B":case"BB":case"BBB":return r.dayPeriod(n,{width:"abbreviated",context:"formatting"});case"BBBBB":return r.dayPeriod(n,{width:"narrow",context:"formatting"});default:return r.dayPeriod(n,{width:"wide",context:"formatting"})}},h:function(e,t,r){if("ho"===t){var n=e.getUTCHours()%12;return 0===n&&(n=12),r.ordinalNumber(n,{unit:"hour"})}return p.h(e,t)},H:function(e,t,r){return"Ho"===t?r.ordinalNumber(e.getUTCHours(),{unit:"hour"}):p.H(e,t)},K:function(e,t,r){var n=e.getUTCHours()%12;return"Ko"===t?r.ordinalNumber(n,{unit:"hour"}):d(n,t.length)},k:function(e,t,r){var n=e.getUTCHours();return 0===n&&(n=24),"ko"===t?r.ordinalNumber(n,{unit:"hour"}):d(n,t.length)},m:function(e,t,r){return"mo"===t?r.ordinalNumber(e.getUTCMinutes(),{unit:"minute"}):p.m(e,t)},s:function(e,t,r){return"so"===t?r.ordinalNumber(e.getUTCSeconds(),{unit:"second"}):p.s(e,t)},S:function(e,t){return p.S(e,t)},X:function(e,t,r,n){var a=(n._originalDate||e).getTimezoneOffset();if(0===a)return"Z";switch(t){case"X":return w(a);case"XXXX":case"XX":return x(a);default:return x(a,":")}},x:function(e,t,r,n){var a=(n._originalDate||e).getTimezoneOffset();switch(t){case"x":return w(a);case"xxxx":case"xx":return x(a);default:return x(a,":")}},O:function(e,t,r,n){var a=(n._originalDate||e).getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+y(a,":");default:return"GMT"+x(a,":")}},z:function(e,t,r,n){var a=(n._originalDate||e).getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+y(a,":");default:return"GMT"+x(a,":")}},t:function(e,t,r,n){var a=n._originalDate||e;return d(Math.floor(a.getTime()/1e3),t.length)},T:function(e,t,r,n){return d((n._originalDate||e).getTime(),t.length)}};var D=r(49668),C=r(40460),E=r(9581),A=r(67668),S=r(28458),_=r(98090),M=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,T=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,O=/^'([^]*?)'?$/,P=/''/g,N=/[a-zA-Z]/;function R(e,t,r){var s,l,u,c,d,p,f,h,v,g,m,b,y,w,x,R,L,F;(0,i.A)(2,arguments);var Y=String(t),j=(0,S.q)(),B=null!==(s=null!==(l=null===r||void 0===r?void 0:r.locale)&&void 0!==l?l:j.locale)&&void 0!==s?s:_.A,I=(0,A.A)(null!==(u=null!==(c=null!==(d=null!==(p=null===r||void 0===r?void 0:r.firstWeekContainsDate)&&void 0!==p?p:null===r||void 0===r||null===(f=r.locale)||void 0===f||null===(h=f.options)||void 0===h?void 0:h.firstWeekContainsDate)&&void 0!==d?d:j.firstWeekContainsDate)&&void 0!==c?c:null===(v=j.locale)||void 0===v||null===(g=v.options)||void 0===g?void 0:g.firstWeekContainsDate)&&void 0!==u?u:1);if(!(I>=1&&I<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var H=(0,A.A)(null!==(m=null!==(b=null!==(y=null!==(w=null===r||void 0===r?void 0:r.weekStartsOn)&&void 0!==w?w:null===r||void 0===r||null===(x=r.locale)||void 0===x||null===(R=x.options)||void 0===R?void 0:R.weekStartsOn)&&void 0!==y?y:j.weekStartsOn)&&void 0!==b?b:null===(L=j.locale)||void 0===L||null===(F=L.options)||void 0===F?void 0:F.weekStartsOn)&&void 0!==m?m:0);if(!(H>=0&&H<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!B.localize)throw new RangeError("locale must contain localize property");if(!B.formatLong)throw new RangeError("locale must contain formatLong property");var W=(0,o.default)(e);if(!(0,n.default)(W))throw new RangeError("Invalid time value");var U=(0,C.A)(W),q=(0,a.A)(W,U),z={firstWeekContainsDate:I,weekStartsOn:H,locale:B,_originalDate:W};return Y.match(T).map((function(e){var t=e[0];return"p"===t||"P"===t?(0,D.A[t])(e,B.formatLong):e})).join("").match(M).map((function(n){if("''"===n)return"'";var a=n[0];if("'"===a)return function(e){var t=e.match(O);if(!t)return e;return t[1].replace(P,"'")}(n);var o=k[a];if(o)return null!==r&&void 0!==r&&r.useAdditionalWeekYearTokens||!(0,E.xM)(n)||(0,E.lJ)(n,t,String(e)),null!==r&&void 0!==r&&r.useAdditionalDayOfYearTokens||!(0,E.ef)(n)||(0,E.lJ)(n,t,String(e)),o(q,n,B.localize,z);if(a.match(N))throw new RangeError("Format string contains an unescaped latin alphabet character `"+a+"`");return n})).join("")}},24234:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getDate()}},2928:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getDay()}},30161:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getHours()}},37066:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(99699),a=r(15163),o=r(11151);function i(e){return(0,o.A)(1,arguments),(0,a.default)(e,{weekStartsOn:1})}function s(e){(0,o.A)(1,arguments);var t=function(e){(0,o.A)(1,arguments);var t=(0,n.default)(e),r=t.getFullYear(),a=new Date(0);a.setFullYear(r+1,0,4),a.setHours(0,0,0,0);var s=i(a),l=new Date(0);l.setFullYear(r,0,4),l.setHours(0,0,0,0);var u=i(l);return t.getTime()>=s.getTime()?r+1:t.getTime()>=u.getTime()?r:r-1}(e),r=new Date(0);return r.setFullYear(t,0,4),r.setHours(0,0,0,0),i(r)}var l=6048e5;function u(e){(0,o.A)(1,arguments);var t=(0,n.default)(e),r=i(t).getTime()-s(t).getTime();return Math.round(r/l)+1}},89691:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getMinutes()}},98308:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getMonth()}},17286:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e);return Math.floor(t.getMonth()/3)+1}},80187:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getSeconds()}},12335:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getTime()}},63571:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){return(0,a.A)(1,arguments),(0,n.default)(e).getFullYear()}},65104:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getTime()>o.getTime()}},15549:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getTime(){"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(82284),a=r(11151);function o(e){return(0,a.A)(1,arguments),e instanceof Date||"object"===(0,n.A)(e)&&"[object Date]"===Object.prototype.toString.call(e)}},15898:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getTime()===o.getTime()}},16010:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(26876),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getTime()===o.getTime()}},13238:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getFullYear()===o.getFullYear()&&r.getMonth()===o.getMonth()}},68840:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(63501),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getTime()===o.getTime()}},35269:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e),o=(0,n.default)(t);return r.getFullYear()===o.getFullYear()}},92964:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(47586),a=r(99699),o=r(11151);function i(e){if((0,o.A)(1,arguments),!(0,n.default)(e)&&"number"!==typeof e)return!1;var t=(0,a.default)(e);return!isNaN(Number(t))}},58559:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e,t){(0,a.A)(2,arguments);var r=(0,n.default)(e).getTime(),o=(0,n.default)(t.start).getTime(),i=(0,n.default)(t.end).getTime();if(!(o<=i))throw new RangeError("Invalid interval");return r>=o&&r<=i}},50136:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(82284),a=r(99699),o=r(11151);function i(e){var t,r;if((0,o.A)(1,arguments),e&&"function"===typeof e.forEach)t=e;else{if("object"!==(0,n.A)(e)||null===e)return new Date(NaN);t=Array.prototype.slice.call(e)}return t.forEach((function(e){var t=(0,a.default)(e);(void 0===r||r{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(82284),a=r(99699),o=r(11151);function i(e){var t,r;if((0,o.A)(1,arguments),e&&"function"===typeof e.forEach)t=e;else{if("object"!==(0,n.A)(e)||null===e)return new Date(NaN);t=Array.prototype.slice.call(e)}return t.forEach((function(e){var t=(0,a.default)(e);(void 0===r||r>t||isNaN(t.getDate()))&&(r=t)})),r||new Date(NaN)}},71082:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>Ze});var n=r(82284),a=r(27800);function o(e,t){var r="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=(0,a.A)(e))||t&&e&&"number"===typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,l=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){l=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw i}}}}var i=r(98090),s=r(50670),l=r(99699);function u(e,t){if(null==e)throw new TypeError("assign requires that input parameter not be null or undefined");for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}var c=r(49668),d=r(40460),p=r(9581),f=r(67668),h=r(11151),v=r(9417),g=r(85501),m=r(49640),b=r(23029),y=r(92901),w=r(64467),x=function(){function e(){(0,b.A)(this,e),(0,w.A)(this,"priority",void 0),(0,w.A)(this,"subPriority",0)}return(0,y.A)(e,[{key:"validate",value:function(e,t){return!0}}]),e}(),k=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(e,n,a,o,i){var s;return(0,b.A)(this,r),(s=t.call(this)).value=e,s.validateValue=n,s.setValue=a,s.priority=o,i&&(s.subPriority=i),s}return(0,y.A)(r,[{key:"validate",value:function(e,t){return this.validateValue(e,this.value,t)}},{key:"set",value:function(e,t,r){return this.setValue(e,t,this.value,r)}}]),r}(x),D=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o0,a=n?t:1-t;if(a<=50)r=e||100;else{var o=a+50;r=e+100*Math.floor(o/100)-(e>=o%100?100:0)}return n?r:1-r}function oe(e){return e%400===0||e%4===0&&e%100!==0}var ie=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o0}},{key:"set",value:function(e,t,r){var n=e.getUTCFullYear();if(r.isTwoDigitYear){var a=ae(r.year,n);return e.setUTCFullYear(a,0,1),e.setUTCHours(0,0,0,0),e}var o="era"in t&&1!==t.era?1-r.year:r.year;return e.setUTCFullYear(o,0,1),e.setUTCHours(0,0,0,0),e}}]),r}(C),se=r(38888),le=r(67350),ue=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o0}},{key:"set",value:function(e,t,r,n){var a=(0,se.A)(e,n);if(r.isTwoDigitYear){var o=ae(r.year,a);return e.setUTCFullYear(o,0,n.firstWeekContainsDate),e.setUTCHours(0,0,0,0),(0,le.A)(e,n)}var i="era"in t&&1!==t.era?1-r.year:r.year;return e.setUTCFullYear(i,0,n.firstWeekContainsDate),e.setUTCHours(0,0,0,0),(0,le.A)(e,n)}}]),r}(C),ce=r(74715),de=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=4}},{key:"set",value:function(e,t,r){return e.setUTCMonth(3*(r-1),1),e.setUTCHours(0,0,0,0),e}}]),r}(C),he=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=4}},{key:"set",value:function(e,t,r){return e.setUTCMonth(3*(r-1),1),e.setUTCHours(0,0,0,0),e}}]),r}(C),ve=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=11}},{key:"set",value:function(e,t,r){return e.setUTCMonth(r,1),e.setUTCHours(0,0,0,0),e}}]),r}(C),ge=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=11}},{key:"set",value:function(e,t,r){return e.setUTCMonth(r,1),e.setUTCHours(0,0,0,0),e}}]),r}(C),me=r(9478);var be=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=53}},{key:"set",value:function(e,t,r,n){return(0,le.A)(function(e,t,r){(0,h.A)(2,arguments);var n=(0,l.default)(e),a=(0,f.A)(t),o=(0,me.A)(n,r)-a;return n.setUTCDate(n.getUTCDate()-7*o),n}(e,r,n),n)}}]),r}(C),ye=r(49717);var we=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=53}},{key:"set",value:function(e,t,r){return(0,ce.A)(function(e,t){(0,h.A)(2,arguments);var r=(0,l.default)(e),n=(0,f.A)(t),a=(0,ye.A)(r)-n;return r.setUTCDate(r.getUTCDate()-7*a),r}(e,r))}}]),r}(C),xe=[31,28,31,30,31,30,31,31,30,31,30,31],ke=[31,29,31,30,31,30,31,31,30,31,30,31],De=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=ke[n]:t>=1&&t<=xe[n]}},{key:"set",value:function(e,t,r){return e.setUTCDate(r),e.setUTCHours(0,0,0,0),e}}]),r}(C),Ce=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=366:t>=1&&t<=365}},{key:"set",value:function(e,t,r){return e.setUTCMonth(0,r),e.setUTCHours(0,0,0,0),e}}]),r}(C),Ee=r(28458);function Ae(e,t,r){var n,a,o,i,s,u,c,d;(0,h.A)(2,arguments);var p=(0,Ee.q)(),v=(0,f.A)(null!==(n=null!==(a=null!==(o=null!==(i=null===r||void 0===r?void 0:r.weekStartsOn)&&void 0!==i?i:null===r||void 0===r||null===(s=r.locale)||void 0===s||null===(u=s.options)||void 0===u?void 0:u.weekStartsOn)&&void 0!==o?o:p.weekStartsOn)&&void 0!==a?a:null===(c=p.locale)||void 0===c||null===(d=c.options)||void 0===d?void 0:d.weekStartsOn)&&void 0!==n?n:0);if(!(v>=0&&v<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var g=(0,l.default)(e),m=(0,f.A)(t),b=((m%7+7)%7=0&&t<=6}},{key:"set",value:function(e,t,r,n){return(e=Ae(e,r,n)).setUTCHours(0,0,0,0),e}}]),r}(C),_e=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=6}},{key:"set",value:function(e,t,r,n){return(e=Ae(e,r,n)).setUTCHours(0,0,0,0),e}}]),r}(C),Me=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=6}},{key:"set",value:function(e,t,r,n){return(e=Ae(e,r,n)).setUTCHours(0,0,0,0),e}}]),r}(C);var Te=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=7}},{key:"set",value:function(e,t,r){return e=function(e,t){(0,h.A)(2,arguments);var r=(0,f.A)(t);r%7===0&&(r-=7);var n=(0,l.default)(e),a=((r%7+7)%7<1?7:0)+r-n.getUTCDay();return n.setUTCDate(n.getUTCDate()+a),n}(e,r),e.setUTCHours(0,0,0,0),e}}]),r}(C),Oe=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=12}},{key:"set",value:function(e,t,r){var n=e.getUTCHours()>=12;return n&&r<12?e.setUTCHours(r+12,0,0,0):n||12!==r?e.setUTCHours(r,0,0,0):e.setUTCHours(0,0,0,0),e}}]),r}(C),Le=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=23}},{key:"set",value:function(e,t,r){return e.setUTCHours(r,0,0,0),e}}]),r}(C),Fe=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=11}},{key:"set",value:function(e,t,r){return e.getUTCHours()>=12&&r<12?e.setUTCHours(r+12,0,0,0):e.setUTCHours(r,0,0,0),e}}]),r}(C),Ye=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&t<=24}},{key:"set",value:function(e,t,r){var n=r<=24?r%24:r;return e.setUTCHours(n,0,0,0),e}}]),r}(C),je=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=59}},{key:"set",value:function(e,t,r){return e.setUTCMinutes(r,0,0),e}}]),r}(C),Be=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=0&&t<=59}},{key:"set",value:function(e,t,r){return e.setUTCSeconds(r,0),e}}]),r}(C),Ie=function(e){(0,g.A)(r,e);var t=(0,m.A)(r);function r(){var e;(0,b.A)(this,r);for(var n=arguments.length,a=new Array(n),o=0;o=1&&j<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var B=(0,f.A)(null!==(A=null!==(S=null!==(_=null!==(M=null===a||void 0===a?void 0:a.weekStartsOn)&&void 0!==M?M:null===a||void 0===a||null===(T=a.locale)||void 0===T||null===(O=T.options)||void 0===O?void 0:O.weekStartsOn)&&void 0!==_?_:F.weekStartsOn)&&void 0!==S?S:null===(P=F.locale)||void 0===P||null===(N=P.options)||void 0===N?void 0:N.weekStartsOn)&&void 0!==A?A:0);if(!(B>=0&&B<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(""===L)return""===R?(0,l.default)(r):new Date(NaN);var I,H={firstWeekContainsDate:j,weekStartsOn:B,locale:Y},W=[new D],U=L.match(Ke).map((function(e){var t=e[0];return t in c.A?(0,c.A[t])(e,Y.formatLong):e})).join("").match(Qe),q=[],z=o(U);try{var Q=function(){var t=I.value;null!==a&&void 0!==a&&a.useAdditionalWeekYearTokens||!(0,p.xM)(t)||(0,p.lJ)(t,L,e),null!==a&&void 0!==a&&a.useAdditionalDayOfYearTokens||!(0,p.ef)(t)||(0,p.lJ)(t,L,e);var r=t[0],n=ze[r];if(n){var o=n.incompatibleTokens;if(Array.isArray(o)){var i=q.find((function(e){return o.includes(e.token)||e.token===r}));if(i)throw new RangeError("The format string mustn't contain `".concat(i.fullToken,"` and `").concat(t,"` at the same time"))}else if("*"===n.incompatibleTokens&&q.length>0)throw new RangeError("The format string mustn't contain `".concat(t,"` and any other token at the same time"));q.push({token:r,fullToken:t});var s=n.run(R,t,Y.match,H);if(!s)return{v:new Date(NaN)};W.push(s.setter),R=s.rest}else{if(r.match($e))throw new RangeError("Format string contains an unescaped latin alphabet character `"+r+"`");if("''"===t?t="'":"'"===r&&(t=t.match(Ge)[1].replace(Xe,"'")),0!==R.indexOf(t))return{v:new Date(NaN)};R=R.slice(t.length)}};for(z.s();!(I=z.n()).done;){var K=Q();if("object"===(0,n.A)(K))return K.v}}catch(re){z.e(re)}finally{z.f()}if(R.length>0&&Ve.test(R))return new Date(NaN);var G=W.map((function(e){return e.priority})).sort((function(e,t){return t-e})).filter((function(e,t,r){return r.indexOf(e)===t})).map((function(e){return W.filter((function(t){return t.priority===e})).sort((function(e,t){return t.subPriority-e.subPriority}))})).map((function(e){return e[0]})),X=(0,l.default)(r);if(isNaN(X.getTime()))return new Date(NaN);var V,$=(0,s.A)(X,(0,d.A)(X)),Z={},J=o(G);try{for(J.s();!(V=J.n()).done;){var ee=V.value;if(!ee.validate($,H))return new Date(NaN);var te=ee.set($,Z,H);Array.isArray(te)?($=te[0],u(Z,te[1])):$=te}}catch(re){J.e(re)}finally{J.f()}return $}},85670:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(4019),a=r(11151),o=r(67668);function i(e,t){var r;(0,a.A)(1,arguments);var i=(0,o.A)(null!==(r=null===t||void 0===t?void 0:t.additionalDigits)&&void 0!==r?r:2);if(2!==i&&1!==i&&0!==i)throw new RangeError("additionalDigits must be 0, 1 or 2");if("string"!==typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var v,g=function(e){var t,r={},n=e.split(s.dateTimeDelimiter);if(n.length>2)return r;/:/.test(n[0])?t=n[0]:(r.date=n[0],t=n[1],s.timeZoneDelimiter.test(r.date)&&(r.date=e.split(s.timeZoneDelimiter)[0],t=e.substr(r.date.length,e.length)));if(t){var a=s.timezone.exec(t);a?(r.time=t.replace(a[1],""),r.timezone=a[1]):r.time=t}return r}(e);if(g.date){var m=function(e,t){var r=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),n=e.match(r);if(!n)return{year:NaN,restDateString:""};var a=n[1]?parseInt(n[1]):null,o=n[2]?parseInt(n[2]):null;return{year:null===o?a:100*o,restDateString:e.slice((n[1]||n[2]).length)}}(g.date,i);v=function(e,t){if(null===t)return new Date(NaN);var r=e.match(l);if(!r)return new Date(NaN);var n=!!r[4],a=d(r[1]),o=d(r[2])-1,i=d(r[3]),s=d(r[4]),u=d(r[5])-1;if(n)return function(e,t,r){return t>=1&&t<=53&&r>=0&&r<=6}(0,s,u)?function(e,t,r){var n=new Date(0);n.setUTCFullYear(e,0,4);var a=n.getUTCDay()||7,o=7*(t-1)+r+1-a;return n.setUTCDate(n.getUTCDate()+o),n}(t,s,u):new Date(NaN);var c=new Date(0);return function(e,t,r){return t>=0&&t<=11&&r>=1&&r<=(f[t]||(h(e)?29:28))}(t,o,i)&&function(e,t){return t>=1&&t<=(h(e)?366:365)}(t,a)?(c.setUTCFullYear(t,o,Math.max(a,i)),c):new Date(NaN)}(m.restDateString,m.year)}if(!v||isNaN(v.getTime()))return new Date(NaN);var b,y=v.getTime(),w=0;if(g.time&&(w=function(e){var t=e.match(u);if(!t)return NaN;var r=p(t[1]),a=p(t[2]),o=p(t[3]);if(!function(e,t,r){if(24===e)return 0===t&&0===r;return r>=0&&r<60&&t>=0&&t<60&&e>=0&&e<25}(r,a,o))return NaN;return r*n.s0+a*n.Cg+1e3*o}(g.time),isNaN(w)))return new Date(NaN);if(!g.timezone){var x=new Date(y+w),k=new Date(0);return k.setFullYear(x.getUTCFullYear(),x.getUTCMonth(),x.getUTCDate()),k.setHours(x.getUTCHours(),x.getUTCMinutes(),x.getUTCSeconds(),x.getUTCMilliseconds()),k}return b=function(e){if("Z"===e)return 0;var t=e.match(c);if(!t)return 0;var r="+"===t[1]?-1:1,a=parseInt(t[2]),o=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,o))return NaN;return r*(a*n.s0+o*n.Cg)}(g.timezone),isNaN(b)?new Date(NaN):new Date(y+w+b)}var s={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},l=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,u=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,c=/^([+-])(\d{2})(?::?(\d{2}))?$/;function d(e){return e?parseInt(e):1}function p(e){return e&&parseFloat(e.replace(",","."))||0}var f=[31,null,31,30,31,30,31,31,30,31,30,31];function h(e){return e%400===0||e%4===0&&e%100!==0}},2402:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>l});var n=r(82284),a=r(99699),o=r(49864),i=r(67668),s=r(11151);function l(e,t){if((0,s.A)(2,arguments),"object"!==(0,n.A)(t)||null===t)throw new RangeError("values parameter must be an object");var r=(0,a.default)(e);return isNaN(r.getTime())?new Date(NaN):(null!=t.year&&r.setFullYear(t.year),null!=t.month&&(r=(0,o.default)(r,t.month)),null!=t.date&&r.setDate((0,i.A)(t.date)),null!=t.hours&&r.setHours((0,i.A)(t.hours)),null!=t.minutes&&r.setMinutes((0,i.A)(t.minutes)),null!=t.seconds&&r.setSeconds((0,i.A)(t.seconds)),null!=t.milliseconds&&r.setMilliseconds((0,i.A)(t.milliseconds)),r)}},63701:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t);return r.setHours(i),r}},42231:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t);return r.setMinutes(i),r}},49864:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t),s=r.getFullYear(),l=r.getDate(),u=new Date(0);u.setFullYear(s,i,15),u.setHours(0,0,0,0);var c=function(e){(0,o.A)(1,arguments);var t=(0,a.default)(e),r=t.getFullYear(),n=t.getMonth(),i=new Date(0);return i.setFullYear(r,n+1,0),i.setHours(0,0,0,0),i.getDate()}(u);return r.setMonth(i,Math.min(l,c)),r}},5618:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(67668),a=r(99699),o=r(49864),i=r(11151);function s(e,t){(0,i.A)(2,arguments);var r=(0,a.default)(e),s=(0,n.A)(t)-(Math.floor(r.getMonth()/3)+1);return(0,o.default)(r,r.getMonth()+3*s)}},78991:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t);return r.setSeconds(i),r}},32455:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(99699),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,a.default)(e),i=(0,n.A)(t);return isNaN(r.getTime())?new Date(NaN):(r.setFullYear(i),r)}},26876:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e);return t.setHours(0,0,0,0),t}},34631:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e);return t.setDate(1),t.setHours(0,0,0,0),t}},63501:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e),r=t.getMonth(),o=r-r%3;return t.setMonth(o,1),t.setHours(0,0,0,0),t}},15163:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>s});var n=r(99699),a=r(67668),o=r(11151),i=r(28458);function s(e,t){var r,s,l,u,c,d,p,f;(0,o.A)(1,arguments);var h=(0,i.q)(),v=(0,a.A)(null!==(r=null!==(s=null!==(l=null!==(u=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==u?u:null===t||void 0===t||null===(c=t.locale)||void 0===c||null===(d=c.options)||void 0===d?void 0:d.weekStartsOn)&&void 0!==l?l:h.weekStartsOn)&&void 0!==s?s:null===(p=h.locale)||void 0===p||null===(f=p.options)||void 0===f?void 0:f.weekStartsOn)&&void 0!==r?r:0);if(!(v>=0&&v<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var g=(0,n.default)(e),m=g.getDay(),b=(m{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(99699),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=(0,n.default)(e),r=new Date(0);return r.setFullYear(t.getFullYear(),0,1),r.setHours(0,0,0,0),r}},10443:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(7806),a=r(11151),o=r(67668);function i(e,t){(0,a.A)(2,arguments);var r=(0,o.A)(t);return(0,n.default)(e,-r)}},50670:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(77871),a=r(11151),o=r(67668);function i(e,t){(0,a.A)(2,arguments);var r=(0,o.A)(t);return(0,n.A)(e,-r)}},5231:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(83214),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.default)(e,-r)}},63801:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(58980),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.default)(e,-r)}},5377:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(12454),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.default)(e,-r)}},70486:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var n=r(67668),a=r(38733),o=r(11151);function i(e,t){(0,o.A)(2,arguments);var r=(0,n.A)(t);return(0,a.default)(e,-r)}},99699:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>o});var n=r(82284),a=r(11151);function o(e){(0,a.A)(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"===(0,n.A)(e)&&"[object Date]"===t?new Date(e.getTime()):"number"===typeof e||"[object Number]"===t?new Date(e):("string"!==typeof e&&"[object String]"!==t||"undefined"===typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments"),console.warn((new Error).stack)),new Date(NaN))}},30115:e=>{var t="undefined"!==typeof Element,r="function"===typeof Map,n="function"===typeof Set,a="function"===typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,u,c;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!==l--;)if(!o(e[l],i[l]))return!1;return!0}if(r&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(l=c.next()).done;)if(!i.has(l.value[0]))return!1;for(c=e.entries();!(l=c.next()).done;)if(!o(l.value[1],i.get(l.value[0])))return!1;return!0}if(n&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(l=c.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!==l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"===typeof e.valueOf&&"function"===typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"===typeof e.toString&&"function"===typeof i.toString)return e.toString()===i.toString();if((s=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!==l--;)if(!Object.prototype.hasOwnProperty.call(i,u[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!==l--;)if(("_owner"!==u[l]&&"__v"!==u[l]&&"__o"!==u[l]||!e.$$typeof)&&!o(e[u[l]],i[u[l]]))return!1;return!0}return e!==e&&i!==i}e.exports=function(e,t){try{return o(e,t)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}}},73908:(e,t,r)=>{"use strict";r.r(t),r.d(t,{IGNORE_CLASS_NAME:()=>h,default:()=>g});var n=r(96540),a=r(40961);function o(e,t){return o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},o(e,t)}function i(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function s(e,t,r){return e===t||(e.correspondingElement?e.correspondingElement.classList.contains(r):e.classList.contains(r))}var l,u,c=(void 0===l&&(l=0),function(){return++l}),d={},p={},f=["touchstart","touchmove"],h="ignore-react-onclickoutside";function v(e,t){var r={};return-1!==f.indexOf(t)&&u&&(r.passive=!e.props.preventDefault),r}const g=function(e,t){var r,l,f=e.displayName||e.name||"Component";return l=r=function(r){var l,h;function g(e){var n;return(n=r.call(this,e)||this).__outsideClickHandler=function(e){if("function"!==typeof n.__clickOutsideHandlerProp){var t=n.getInstance();if("function"!==typeof t.props.handleClickOutside){if("function"!==typeof t.handleClickOutside)throw new Error("WrappedComponent: "+f+" lacks a handleClickOutside(event) function for processing outside click events.");t.handleClickOutside(e)}else t.props.handleClickOutside(e)}else n.__clickOutsideHandlerProp(e)},n.__getComponentNode=function(){var e=n.getInstance();return t&&"function"===typeof t.setClickOutsideRef?t.setClickOutsideRef()(e):"function"===typeof e.setClickOutsideRef?e.setClickOutsideRef():(0,a.findDOMNode)(e)},n.enableOnClickOutside=function(){if("undefined"!==typeof document&&!p[n._uid]){"undefined"===typeof u&&(u=function(){if("undefined"!==typeof window&&"function"===typeof window.addEventListener){var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}}),r=function(){};return window.addEventListener("testPassiveEventSupport",r,t),window.removeEventListener("testPassiveEventSupport",r,t),e}}()),p[n._uid]=!0;var e=n.props.eventTypes;e.forEach||(e=[e]),d[n._uid]=function(e){var t;null!==n.componentNode&&(n.props.preventDefault&&e.preventDefault(),n.props.stopPropagation&&e.stopPropagation(),n.props.excludeScrollbar&&(t=e,document.documentElement.clientWidth<=t.clientX||document.documentElement.clientHeight<=t.clientY)||function(e,t,r){if(e===t)return!0;for(;e.parentNode||e.host;){if(e.parentNode&&s(e,t,r))return!0;e=e.parentNode||e.host}return e}(e.composed&&e.composedPath&&e.composedPath().shift()||e.target,n.componentNode,n.props.outsideClickIgnoreClass)===document&&n.__outsideClickHandler(e))},e.forEach((function(e){document.addEventListener(e,d[n._uid],v(i(n),e))}))}},n.disableOnClickOutside=function(){delete p[n._uid];var e=d[n._uid];if(e&&"undefined"!==typeof document){var t=n.props.eventTypes;t.forEach||(t=[t]),t.forEach((function(t){return document.removeEventListener(t,e,v(i(n),t))})),delete d[n._uid]}},n.getRef=function(e){return n.instanceRef=e},n._uid=c(),n}h=r,(l=g).prototype=Object.create(h.prototype),l.prototype.constructor=l,o(l,h);var m=g.prototype;return m.getInstance=function(){if(e.prototype&&!e.prototype.isReactComponent)return this;var t=this.instanceRef;return t.getInstance?t.getInstance():t},m.componentDidMount=function(){if("undefined"!==typeof document&&document.createElement){var e=this.getInstance();if(t&&"function"===typeof t.handleClickOutside&&(this.__clickOutsideHandlerProp=t.handleClickOutside(e),"function"!==typeof this.__clickOutsideHandlerProp))throw new Error("WrappedComponent: "+f+" lacks a function for processing outside click events specified by the handleClickOutside config option.");this.componentNode=this.__getComponentNode(),this.props.disableOnClickOutside||this.enableOnClickOutside()}},m.componentDidUpdate=function(){this.componentNode=this.__getComponentNode()},m.componentWillUnmount=function(){this.disableOnClickOutside()},m.render=function(){var t=this.props;t.excludeScrollbar;var r=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n=0||(a[r]=e[r]);return a}(t,["excludeScrollbar"]);return e.prototype&&e.prototype.isReactComponent?r.ref=this.getRef:r.wrappedRef=this.getRef,r.disableOnClickOutside=this.disableOnClickOutside,r.enableOnClickOutside=this.enableOnClickOutside,(0,n.createElement)(e,r)},g}(n.Component),r.displayName="OnClickOutside("+f+")",r.defaultProps={eventTypes:["mousedown","touchstart"],excludeScrollbar:t&&t.excludeScrollbar||!1,outsideClickIgnoreClass:h,preventDefault:!1,stopPropagation:!1},r.getClass=function(){return e.getClass?e.getClass():e},l}},32430:(e,t,r)=>{"use strict";r.r(t),r.d(t,{Manager:()=>i,Popper:()=>Le,Reference:()=>je,usePopper:()=>Oe});var n=r(96540),a=n.createContext(),o=n.createContext();function i(e){var t=e.children,r=n.useState(null),i=r[0],s=r[1],l=n.useRef(!1);n.useEffect((function(){return function(){l.current=!0}}),[]);var u=n.useCallback((function(e){l.current||s(e)}),[]);return n.createElement(a.Provider,{value:i},n.createElement(o.Provider,{value:u},t))}var s=function(e){return Array.isArray(e)?e[0]:e},l=function(e){if("function"===typeof e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0&&y(n.width)/e.offsetWidth||1,o=e.offsetHeight>0&&y(n.height)/e.offsetHeight||1);var i=(h(e)?f(e):window).visualViewport,s=!x()&&r,l=(n.left+(s&&i?i.offsetLeft:0))/a,u=(n.top+(s&&i?i.offsetTop:0))/o,c=n.width/a,d=n.height/o;return{width:c,height:d,top:u,right:l+c,bottom:u+d,left:l,x:l,y:u}}function D(e){var t=f(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function C(e){return e?(e.nodeName||"").toLowerCase():null}function E(e){return((h(e)?e.ownerDocument:e.document)||window.document).documentElement}function A(e){return k(E(e)).left+D(e).scrollLeft}function S(e){return f(e).getComputedStyle(e)}function _(e){var t=S(e),r=t.overflow,n=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+a+n)}function M(e,t,r){void 0===r&&(r=!1);var n=v(t),a=v(t)&&function(e){var t=e.getBoundingClientRect(),r=y(t.width)/e.offsetWidth||1,n=y(t.height)/e.offsetHeight||1;return 1!==r||1!==n}(t),o=E(t),i=k(e,a,r),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!r)&&(("body"!==C(t)||_(o))&&(s=function(e){return e!==f(e)&&v(e)?{scrollLeft:(t=e).scrollLeft,scrollTop:t.scrollTop}:D(e);var t}(t)),v(t)?((l=k(t,!0)).x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=A(o))),{x:i.left+s.scrollLeft-l.x,y:i.top+s.scrollTop-l.y,width:i.width,height:i.height}}function T(e){var t=k(e),r=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-r)<=1&&(r=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:n}}function O(e){return"html"===C(e)?e:e.assignedSlot||e.parentNode||(g(e)?e.host:null)||E(e)}function P(e){return["html","body","#document"].indexOf(C(e))>=0?e.ownerDocument.body:v(e)&&_(e)?e:P(O(e))}function N(e,t){var r;void 0===t&&(t=[]);var n=P(e),a=n===(null==(r=e.ownerDocument)?void 0:r.body),o=f(n),i=a?[o].concat(o.visualViewport||[],_(n)?n:[]):n,s=t.concat(i);return a?s:s.concat(N(O(i)))}function R(e){return["table","td","th"].indexOf(C(e))>=0}function L(e){return v(e)&&"fixed"!==S(e).position?e.offsetParent:null}function F(e){for(var t=f(e),r=L(e);r&&R(r)&&"static"===S(r).position;)r=L(r);return r&&("html"===C(r)||"body"===C(r)&&"static"===S(r).position)?t:r||function(e){var t=/firefox/i.test(w());if(/Trident/i.test(w())&&v(e)&&"fixed"===S(e).position)return null;var r=O(e);for(g(r)&&(r=r.host);v(r)&&["html","body"].indexOf(C(r))<0;){var n=S(r);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||t&&"filter"===n.willChange||t&&n.filter&&"none"!==n.filter)return r;r=r.parentNode}return null}(e)||t}var Y="top",j="bottom",B="right",I="left",H="auto",W=[Y,j,B,I],U="start",q="end",z="clippingParents",Q="viewport",K="popper",G="reference",X=W.reduce((function(e,t){return e.concat([t+"-"+U,t+"-"+q])}),[]),V=[].concat(W,[H]).reduce((function(e,t){return e.concat([t,t+"-"+U,t+"-"+q])}),[]),$=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function Z(e){var t=new Map,r=new Set,n=[];function a(e){r.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!r.has(e)){var n=t.get(e);n&&a(n)}})),n.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){r.has(e.name)||a(e)})),n}function J(e){var t;return function(){return t||(t=new Promise((function(r){Promise.resolve().then((function(){t=void 0,r(e())}))}))),t}}var ee={placement:"bottom",modifiers:[],strategy:"absolute"};function te(){for(var e=arguments.length,t=new Array(e),r=0;r=0?"x":"y"}function se(e){var t,r=e.reference,n=e.element,a=e.placement,o=a?ae(a):null,i=a?oe(a):null,s=r.x+r.width/2-n.width/2,l=r.y+r.height/2-n.height/2;switch(o){case Y:t={x:s,y:r.y-n.height};break;case j:t={x:s,y:r.y+r.height};break;case B:t={x:r.x+r.width,y:l};break;case I:t={x:r.x-n.width,y:l};break;default:t={x:r.x,y:r.y}}var u=o?ie(o):null;if(null!=u){var c="y"===u?"height":"width";switch(i){case U:t[u]=t[u]-(r[c]/2-n[c]/2);break;case q:t[u]=t[u]+(r[c]/2-n[c]/2)}}return t}var le={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ue(e){var t,r=e.popper,n=e.popperRect,a=e.placement,o=e.variation,i=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,d=e.isFixed,p=i.x,h=void 0===p?0:p,v=i.y,g=void 0===v?0:v,m="function"===typeof c?c({x:h,y:g}):{x:h,y:g};h=m.x,g=m.y;var b=i.hasOwnProperty("x"),w=i.hasOwnProperty("y"),x=I,k=Y,D=window;if(u){var C=F(r),A="clientHeight",_="clientWidth";if(C===f(r)&&"static"!==S(C=E(r)).position&&"absolute"===s&&(A="scrollHeight",_="scrollWidth"),a===Y||(a===I||a===B)&&o===q)k=j,g-=(d&&C===D&&D.visualViewport?D.visualViewport.height:C[A])-n.height,g*=l?1:-1;if(a===I||(a===Y||a===j)&&o===q)x=B,h-=(d&&C===D&&D.visualViewport?D.visualViewport.width:C[_])-n.width,h*=l?1:-1}var M,T=Object.assign({position:s},u&&le),O=!0===c?function(e,t){var r=e.x,n=e.y,a=t.devicePixelRatio||1;return{x:y(r*a)/a||0,y:y(n*a)/a||0}}({x:h,y:g},f(r)):{x:h,y:g};return h=O.x,g=O.y,l?Object.assign({},T,((M={})[k]=w?"0":"",M[x]=b?"0":"",M.transform=(D.devicePixelRatio||1)<=1?"translate("+h+"px, "+g+"px)":"translate3d("+h+"px, "+g+"px, 0)",M)):Object.assign({},T,((t={})[k]=w?g+"px":"",t[x]=b?h+"px":"",t.transform="",t))}const ce={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,r=e.options,n=e.name,a=r.offset,o=void 0===a?[0,0]:a,i=V.reduce((function(e,r){return e[r]=function(e,t,r){var n=ae(e),a=[I,Y].indexOf(n)>=0?-1:1,o="function"===typeof r?r(Object.assign({},t,{placement:e})):r,i=o[0],s=o[1];return i=i||0,s=(s||0)*a,[I,B].indexOf(n)>=0?{x:s,y:i}:{x:i,y:s}}(r,t.rects,o),e}),{}),s=i[t.placement],l=s.x,u=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[n]=i}};var de={left:"right",right:"left",bottom:"top",top:"bottom"};function pe(e){return e.replace(/left|right|bottom|top/g,(function(e){return de[e]}))}var fe={start:"end",end:"start"};function he(e){return e.replace(/start|end/g,(function(e){return fe[e]}))}function ve(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(r&&g(r)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function ge(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function me(e,t,r){return t===Q?ge(function(e,t){var r=f(e),n=E(e),a=r.visualViewport,o=n.clientWidth,i=n.clientHeight,s=0,l=0;if(a){o=a.width,i=a.height;var u=x();(u||!u&&"fixed"===t)&&(s=a.offsetLeft,l=a.offsetTop)}return{width:o,height:i,x:s+A(e),y:l}}(e,r)):h(t)?function(e,t){var r=k(e,!1,"fixed"===t);return r.top=r.top+e.clientTop,r.left=r.left+e.clientLeft,r.bottom=r.top+e.clientHeight,r.right=r.left+e.clientWidth,r.width=e.clientWidth,r.height=e.clientHeight,r.x=r.left,r.y=r.top,r}(t,r):ge(function(e){var t,r=E(e),n=D(e),a=null==(t=e.ownerDocument)?void 0:t.body,o=m(r.scrollWidth,r.clientWidth,a?a.scrollWidth:0,a?a.clientWidth:0),i=m(r.scrollHeight,r.clientHeight,a?a.scrollHeight:0,a?a.clientHeight:0),s=-n.scrollLeft+A(e),l=-n.scrollTop;return"rtl"===S(a||r).direction&&(s+=m(r.clientWidth,a?a.clientWidth:0)-o),{width:o,height:i,x:s,y:l}}(E(e)))}function be(e,t,r,n){var a="clippingParents"===t?function(e){var t=N(O(e)),r=["absolute","fixed"].indexOf(S(e).position)>=0&&v(e)?F(e):e;return h(r)?t.filter((function(e){return h(e)&&ve(e,r)&&"body"!==C(e)})):[]}(e):[].concat(t),o=[].concat(a,[r]),i=o[0],s=o.reduce((function(t,r){var a=me(e,r,n);return t.top=m(a.top,t.top),t.right=b(a.right,t.right),t.bottom=b(a.bottom,t.bottom),t.left=m(a.left,t.left),t}),me(e,i,n));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function ye(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function we(e,t){return t.reduce((function(t,r){return t[r]=e,t}),{})}function xe(e,t){void 0===t&&(t={});var r=t,n=r.placement,a=void 0===n?e.placement:n,o=r.strategy,i=void 0===o?e.strategy:o,s=r.boundary,l=void 0===s?z:s,u=r.rootBoundary,c=void 0===u?Q:u,d=r.elementContext,p=void 0===d?K:d,f=r.altBoundary,v=void 0!==f&&f,g=r.padding,m=void 0===g?0:g,b=ye("number"!==typeof m?m:we(m,W)),y=p===K?G:K,w=e.rects.popper,x=e.elements[v?y:p],D=be(h(x)?x:x.contextElement||E(e.elements.popper),l,c,i),C=k(e.elements.reference),A=se({reference:C,element:w,strategy:"absolute",placement:a}),S=ge(Object.assign({},w,A)),_=p===K?S:C,M={top:D.top-_.top+b.top,bottom:_.bottom-D.bottom+b.bottom,left:D.left-_.left+b.left,right:_.right-D.right+b.right},T=e.modifiersData.offset;if(p===K&&T){var O=T[a];Object.keys(M).forEach((function(e){var t=[B,j].indexOf(e)>=0?1:-1,r=[Y,j].indexOf(e)>=0?"y":"x";M[e]+=O[r]*t}))}return M}function ke(e,t,r){return m(e,b(t,r))}const De={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,r=e.options,n=e.name,a=r.mainAxis,o=void 0===a||a,i=r.altAxis,s=void 0!==i&&i,l=r.boundary,u=r.rootBoundary,c=r.altBoundary,d=r.padding,p=r.tether,f=void 0===p||p,h=r.tetherOffset,v=void 0===h?0:h,g=xe(t,{boundary:l,rootBoundary:u,padding:d,altBoundary:c}),y=ae(t.placement),w=oe(t.placement),x=!w,k=ie(y),D="x"===k?"y":"x",C=t.modifiersData.popperOffsets,E=t.rects.reference,A=t.rects.popper,S="function"===typeof v?v(Object.assign({},t.rects,{placement:t.placement})):v,_="number"===typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),M=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(C){if(o){var P,N="y"===k?Y:I,R="y"===k?j:B,L="y"===k?"height":"width",H=C[k],W=H+g[N],q=H-g[R],z=f?-A[L]/2:0,Q=w===U?E[L]:A[L],K=w===U?-A[L]:-E[L],G=t.elements.arrow,X=f&&G?T(G):{width:0,height:0},V=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},$=V[N],Z=V[R],J=ke(0,E[L],X[L]),ee=x?E[L]/2-z-J-$-_.mainAxis:Q-J-$-_.mainAxis,te=x?-E[L]/2+z+J+Z+_.mainAxis:K+J+Z+_.mainAxis,re=t.elements.arrow&&F(t.elements.arrow),ne=re?"y"===k?re.clientTop||0:re.clientLeft||0:0,se=null!=(P=null==M?void 0:M[k])?P:0,le=H+te-se,ue=ke(f?b(W,H+ee-se-ne):W,H,f?m(q,le):q);C[k]=ue,O[k]=ue-H}if(s){var ce,de="x"===k?Y:I,pe="x"===k?j:B,fe=C[D],he="y"===D?"height":"width",ve=fe+g[de],ge=fe-g[pe],me=-1!==[Y,I].indexOf(y),be=null!=(ce=null==M?void 0:M[D])?ce:0,ye=me?ve:fe-E[he]-A[he]-be+_.altAxis,we=me?fe+E[he]+A[he]-be-_.altAxis:ge,De=f&&me?function(e,t,r){var n=ke(e,t,r);return n>r?r:n}(ye,fe,we):ke(f?ye:ve,fe,f?we:ge);C[D]=De,O[D]=De-fe}t.modifiersData[n]=O}},requiresIfExists:["offset"]};const Ce={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,r=e.state,n=e.name,a=e.options,o=r.elements.arrow,i=r.modifiersData.popperOffsets,s=ae(r.placement),l=ie(s),u=[I,B].indexOf(s)>=0?"height":"width";if(o&&i){var c=function(e,t){return ye("number"!==typeof(e="function"===typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:we(e,W))}(a.padding,r),d=T(o),p="y"===l?Y:I,f="y"===l?j:B,h=r.rects.reference[u]+r.rects.reference[l]-i[l]-r.rects.popper[u],v=i[l]-r.rects.reference[l],g=F(o),m=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=h/2-v/2,y=c[p],w=m-d[u]-c[f],x=m/2-d[u]/2+b,k=ke(y,x,w),D=l;r.modifiersData[n]=((t={})[D]=k,t.centerOffset=k-x,t)}},effect:function(e){var t=e.state,r=e.options.element,n=void 0===r?"[data-popper-arrow]":r;null!=n&&("string"!==typeof n||(n=t.elements.popper.querySelector(n)))&&ve(t.elements.popper,n)&&(t.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ee(e,t,r){return void 0===r&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function Ae(e){return[Y,B,j,I].some((function(t){return e[t]>=0}))}var Se=re({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,r=e.instance,n=e.options,a=n.scroll,o=void 0===a||a,i=n.resize,s=void 0===i||i,l=f(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&u.forEach((function(e){e.addEventListener("scroll",r.update,ne)})),s&&l.addEventListener("resize",r.update,ne),function(){o&&u.forEach((function(e){e.removeEventListener("scroll",r.update,ne)})),s&&l.removeEventListener("resize",r.update,ne)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,r=e.name;t.modifiersData[r]=se({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,r=e.options,n=r.gpuAcceleration,a=void 0===n||n,o=r.adaptive,i=void 0===o||o,s=r.roundOffsets,l=void 0===s||s,u={placement:ae(t.placement),variation:oe(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:a,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ue(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ue(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var r=t.styles[e]||{},n=t.attributes[e]||{},a=t.elements[e];v(a)&&C(a)&&(Object.assign(a.style,r),Object.keys(n).forEach((function(e){var t=n[e];!1===t?a.removeAttribute(e):a.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,r={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,r.popper),t.styles=r,t.elements.arrow&&Object.assign(t.elements.arrow.style,r.arrow),function(){Object.keys(t.elements).forEach((function(e){var n=t.elements[e],a=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:r[e]).reduce((function(e,t){return e[t]="",e}),{});v(n)&&C(n)&&(Object.assign(n.style,o),Object.keys(a).forEach((function(e){n.removeAttribute(e)})))}))}},requires:["computeStyles"]},ce,{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,r=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var a=r.mainAxis,o=void 0===a||a,i=r.altAxis,s=void 0===i||i,l=r.fallbackPlacements,u=r.padding,c=r.boundary,d=r.rootBoundary,p=r.altBoundary,f=r.flipVariations,h=void 0===f||f,v=r.allowedAutoPlacements,g=t.options.placement,m=ae(g),b=l||(m===g||!h?[pe(g)]:function(e){if(ae(e)===H)return[];var t=pe(e);return[he(e),t,he(t)]}(g)),y=[g].concat(b).reduce((function(e,r){return e.concat(ae(r)===H?function(e,t){void 0===t&&(t={});var r=t,n=r.placement,a=r.boundary,o=r.rootBoundary,i=r.padding,s=r.flipVariations,l=r.allowedAutoPlacements,u=void 0===l?V:l,c=oe(n),d=c?s?X:X.filter((function(e){return oe(e)===c})):W,p=d.filter((function(e){return u.indexOf(e)>=0}));0===p.length&&(p=d);var f=p.reduce((function(t,r){return t[r]=xe(e,{placement:r,boundary:a,rootBoundary:o,padding:i})[ae(r)],t}),{});return Object.keys(f).sort((function(e,t){return f[e]-f[t]}))}(t,{placement:r,boundary:c,rootBoundary:d,padding:u,flipVariations:h,allowedAutoPlacements:v}):r)}),[]),w=t.rects.reference,x=t.rects.popper,k=new Map,D=!0,C=y[0],E=0;E=0,T=M?"width":"height",O=xe(t,{placement:A,boundary:c,rootBoundary:d,altBoundary:p,padding:u}),P=M?_?B:I:_?j:Y;w[T]>x[T]&&(P=pe(P));var N=pe(P),R=[];if(o&&R.push(O[S]<=0),s&&R.push(O[P]<=0,O[N]<=0),R.every((function(e){return e}))){C=A,D=!1;break}k.set(A,R)}if(D)for(var L=function(e){var t=y.find((function(t){var r=k.get(t);if(r)return r.slice(0,e).every((function(e){return e}))}));if(t)return C=t,"break"},F=h?3:1;F>0;F--){if("break"===L(F))break}t.placement!==C&&(t.modifiersData[n]._skip=!0,t.placement=C,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},De,Ce,{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,r=e.name,n=t.rects.reference,a=t.rects.popper,o=t.modifiersData.preventOverflow,i=xe(t,{elementContext:"reference"}),s=xe(t,{altBoundary:!0}),l=Ee(i,n),u=Ee(s,a,o),c=Ae(l),d=Ae(u);t.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":d})}}]}),_e=r(30115),Me=r.n(_e),Te=[],Oe=function(e,t,r){void 0===r&&(r={});var a=n.useRef(null),o={onFirstUpdate:r.onFirstUpdate,placement:r.placement||"bottom",strategy:r.strategy||"absolute",modifiers:r.modifiers||Te},i=n.useState({styles:{popper:{position:o.strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),s=i[0],l=i[1],u=n.useMemo((function(){return{name:"updateState",enabled:!0,phase:"write",fn:function(e){var t=e.state,r=Object.keys(t.elements);p.flushSync((function(){l({styles:c(r.map((function(e){return[e,t.styles[e]||{}]}))),attributes:c(r.map((function(e){return[e,t.attributes[e]]})))})}))},requires:["computeStyles"]}}),[]),f=n.useMemo((function(){var e={onFirstUpdate:o.onFirstUpdate,placement:o.placement,strategy:o.strategy,modifiers:[].concat(o.modifiers,[u,{name:"applyStyles",enabled:!1}])};return Me()(a.current,e)?a.current||e:(a.current=e,e)}),[o.onFirstUpdate,o.placement,o.strategy,o.modifiers,u]),h=n.useRef();return d((function(){h.current&&h.current.setOptions(f)}),[f]),d((function(){if(null!=e&&null!=t){var n=(r.createPopper||Se)(e,t,f);return h.current=n,function(){n.destroy(),h.current=null}}}),[e,t,r.createPopper]),{state:h.current?h.current.state:null,styles:s.styles,attributes:s.attributes,update:h.current?h.current.update:null,forceUpdate:h.current?h.current.forceUpdate:null}},Pe=function(){},Ne=function(){return Promise.resolve(null)},Re=[];function Le(e){var t=e.placement,r=void 0===t?"bottom":t,o=e.strategy,i=void 0===o?"absolute":o,l=e.modifiers,c=void 0===l?Re:l,d=e.referenceElement,p=e.onFirstUpdate,f=e.innerRef,h=e.children,v=n.useContext(a),g=n.useState(null),m=g[0],b=g[1],y=n.useState(null),w=y[0],x=y[1];n.useEffect((function(){u(f,m)}),[f,m]);var k=n.useMemo((function(){return{placement:r,strategy:i,onFirstUpdate:p,modifiers:[].concat(c,[{name:"arrow",enabled:null!=w,options:{element:w}}])}}),[r,i,p,c,w]),D=Oe(d||v,m,k),C=D.state,E=D.styles,A=D.forceUpdate,S=D.update,_=n.useMemo((function(){return{ref:b,style:E.popper,placement:C?C.placement:r,hasPopperEscaped:C&&C.modifiersData.hide?C.modifiersData.hide.hasPopperEscaped:null,isReferenceHidden:C&&C.modifiersData.hide?C.modifiersData.hide.isReferenceHidden:null,arrowProps:{style:E.arrow,ref:x},forceUpdate:A||Pe,update:S||Ne}}),[b,x,r,C,E,S,A]);return s(h)(_)}var Fe=r(9771),Ye=r.n(Fe);function je(e){var t=e.children,r=e.innerRef,a=n.useContext(o),i=n.useCallback((function(e){u(r,e),l(a,e)}),[r,a]);return n.useEffect((function(){return function(){return u(r,null)}}),[]),n.useEffect((function(){Ye()(Boolean(a),"`Reference` should not be used outside of a `Manager` component.")}),[a]),s(t)({ref:i})}},41853:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}(e,["bgColor","bgD","fgD","fgColor","size","title","viewBoxSize"]);return i.default.createElement("svg",n({},d,{height:l,ref:t,viewBox:"0 0 "+c+" "+c,width:l}),u?i.default.createElement("title",null,u):null,i.default.createElement("path",{d:a,fill:r}),i.default.createElement("path",{d:o,fill:s}))}));c.displayName="QRCodeSvg",c.propTypes=l,c.defaultProps=u,t.default=c},194:(e,t,r)=>{"use strict";var n=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}(e,["bgColor","fgColor","level","size","value"]),f=new a.default(-1,o.default[s]);f.addData(d),f.make();var h=f.modules;return l.default.createElement(u.default,n({},p,{bgColor:r,bgD:h.map((function(e,t){return e.map((function(e,r){return e?"":"M "+r+" "+t+" l 1 0 0 1 -1 0 Z"})).join(" ")})).join(" "),fgColor:i,fgD:h.map((function(e,t){return e.map((function(e,r){return e?"M "+r+" "+t+" l 1 0 0 1 -1 0 Z":""})).join(" ")})).join(" "),ref:t,size:c,viewBoxSize:h.length}))}));p.displayName="QRCode",p.propTypes=d,p.defaultProps={bgColor:"#FFFFFF",fgColor:"#000000",level:"L",size:256},t.Ay=p},26892:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.autoprefix=void 0;var n,a=r(33215),o=(n=a)&&n.__esModule?n:{default:n},i=Object.assign||function(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.active=void 0;var n,a=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"span";return function(r){function n(){var r,o,l;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);for(var u=arguments.length,c=Array(u),d=0;d{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hover=void 0;var n,a=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"span";return function(r){function n(){var r,o,l;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);for(var u=arguments.length,c=Array(u),d=0;d{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.flattenNames=void 0;var n=s(r(85015)),a=s(r(33215)),o=s(r(11331)),i=s(r(55378));function s(e){return e&&e.__esModule?e:{default:e}}var l=t.flattenNames=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=[];return(0,i.default)(t,(function(t){Array.isArray(t)?e(t).map((function(e){return r.push(e)})):(0,o.default)(t)?(0,a.default)(t,(function(e,t){!0===e&&r.push(t),r.push(t+"-"+e)})):(0,n.default)(t)&&r.push(t)})),r};t.default=l},58527:(e,t,r)=>{"use strict";t.H8=void 0;var n=u(r(99265)),a=u(r(76203)),o=u(r(26892)),i=u(r(16686)),s=u(r(75268)),l=u(r(62693));function u(e){return e&&e.__esModule?e:{default:e}}i.default,t.H8=i.default,s.default,l.default;var c=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(e,t){var r={},n=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];r[e]=t};return 0===e&&n("first-child"),e===t-1&&n("last-child"),(0===e||e%2===0)&&n("even"),1===Math.abs(e%2)&&n("odd"),n("nth-child",e),r}},76203:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mergeClasses=void 0;var n=i(r(33215)),a=i(r(88055)),o=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:[],r=e.default&&(0,a.default)(e.default)||{};return t.map((function(t){var a=e[t];return a&&(0,n.default)(a,(function(e,t){r[t]||(r[t]={}),r[t]=o({},r[t],a[t])})),t})),r};t.default=s},9771:e=>{"use strict";var t=function(){};e.exports=t},46942:(e,t)=>{var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e="",t=0;t{"use strict";var n=r(20034),a=r(44576),o=r(78227)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[o])?!!t:"RegExp"===a(e))}},61034:(e,t,r)=>{"use strict";var n=r(69565),a=r(39297),o=r(1625),i=r(67979),s=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in s||a(e,"flags")||!o(s,e)?t:n(i,e)}},93514:(e,t,r)=>{"use strict";r(6469)("flat")},79978:(e,t,r)=>{"use strict";var n=r(46518),a=r(69565),o=r(79504),i=r(67750),s=r(94901),l=r(64117),u=r(60788),c=r(655),d=r(55966),p=r(61034),f=r(2478),h=r(78227),v=r(96395),g=h("replace"),m=TypeError,b=o("".indexOf),y=o("".replace),w=o("".slice),x=Math.max;n({target:"String",proto:!0},{replaceAll:function(e,t){var r,n,o,h,k,D,C,E,A,S=i(this),_=0,M=0,T="";if(!l(e)){if((r=u(e))&&(n=c(i(p(e))),!~b(n,"g")))throw new m("`.replaceAll` does not allow non-global regexes");if(o=d(e,g))return a(o,e,S,t);if(v&&r)return y(c(S),e,t)}for(h=c(S),k=c(e),(D=s(t))||(t=c(t)),C=k.length,E=x(1,C),_=b(h,k);-1!==_;)A=D?c(t(k,_,h)):f(k,h,_,[],void 0,t),T+=w(h,M,_)+A,M=_+C,_=_+E>h.length?-1:b(h,k,_+E);return M{"use strict";var n=r(46518),a=r(90679),o=r(42787),i=r(66699),s=r(39297),l=r(78227),u=r(53982),c=r(96395),d=l("toStringTag"),p=TypeError,f=function(){if(a(this,u),o(this)===u)throw new p("Abstract class AsyncIterator not directly constructable")};f.prototype=u,s(u,d)||i(u,d,"AsyncIterator"),!c&&s(u,"constructor")&&u.constructor!==Object||i(u,"constructor",f),n({global:!0,constructor:!0,forced:c},{AsyncIterator:f})},86994:(e,t,r)=>{"use strict";var n=r(46518),a=r(36639).toArray;n({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return a(this,void 0,[])}})},41795:(e,t,r)=>{"use strict";var n=r(46518),a=r(28551),o=r(72652),i=r(1767),s=[].push;n({target:"Iterator",proto:!0,real:!0},{toArray:function(){var e=[];return o(i(a(this)),s,{that:e,IS_RECORD:!0}),e}})},14123:(e,t,r)=>{"use strict";function n(e){return t=>{const r=(e?Math[e]:Math.trunc)(t);return 0===r?0:r}}r.d(t,{u:()=>n})},82526:(e,t,r)=>{"use strict";r.d(t,{W:()=>s});var n=r(13999),a=r(4883),o=r(35840),i=r(2642);function s(e,t){const{years:r=0,months:s=0,weeks:l=0,days:u=0,hours:c=0,minutes:d=0,seconds:p=0}=t,f=(0,i.a)(e),h=s||r?(0,a.P)(f,s+12*r):f,v=u||l?(0,n.f)(h,u+7*l):h,g=1e3*(p+60*(d+60*c));return(0,o.w)(e,v.getTime()+g)}},13999:(e,t,r)=>{"use strict";r.d(t,{f:()=>o});var n=r(2642),a=r(35840);function o(e,t){const r=(0,n.a)(e);return isNaN(t)?(0,a.w)(e,NaN):t?(r.setDate(r.getDate()+t),r):r}},4883:(e,t,r)=>{"use strict";r.d(t,{P:()=>o});var n=r(2642),a=r(35840);function o(e,t){const r=(0,n.a)(e);if(isNaN(t))return(0,a.w)(e,NaN);if(!t)return r;const o=r.getDate(),i=(0,a.w)(e,r.getTime());i.setMonth(r.getMonth()+t+1,0);return o>=i.getDate()?i:(r.setFullYear(i.getFullYear(),i.getMonth(),o),r)}},25733:(e,t,r)=>{"use strict";r.d(t,{z:()=>a});var n=r(2642);function a(e,t){const r=(0,n.a)(e),a=(0,n.a)(t),o=r.getTime()-a.getTime();return o<0?-1:o>0?1:o}},17764:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(20514),a=r(2642);function o(e,t){const r=(0,a.a)(e),o=(0,a.a)(t),s=i(r,o),l=Math.abs((0,n.m)(r,o));r.setDate(r.getDate()-s*l);const u=s*(l-Number(i(r,o)===-s));return 0===u?0:u}function i(e,t){const r=e.getFullYear()-t.getFullYear()||e.getMonth()-t.getMonth()||e.getDate()-t.getDate()||e.getHours()-t.getHours()||e.getMinutes()-t.getMinutes()||e.getSeconds()-t.getSeconds()||e.getMilliseconds()-t.getMilliseconds();return r<0?-1:r>0?1:r}},50502:(e,t,r)=>{"use strict";r.d(t,{M:()=>i});var n=r(14123),a=r(2940),o=r(77275);function i(e,t,r){const i=(0,o.b)(e,t)/a.s0;return(0,n.u)(r?.roundingMethod)(i)}},77275:(e,t,r)=>{"use strict";r.d(t,{b:()=>a});var n=r(2642);function a(e,t){return+(0,n.a)(e)-+(0,n.a)(t)}},10648:(e,t,r)=>{"use strict";r.d(t,{o:()=>i});var n=r(14123),a=r(2940),o=r(77275);function i(e,t,r){const i=(0,o.b)(e,t)/a.Cg;return(0,n.u)(r?.roundingMethod)(i)}},49858:(e,t,r)=>{"use strict";r.d(t,{W:()=>u});var n=r(25733),a=r(2642);function o(e,t){const r=(0,a.a)(e),n=(0,a.a)(t);return 12*(r.getFullYear()-n.getFullYear())+(r.getMonth()-n.getMonth())}var i=r(37519),s=r(71359);function l(e){const t=(0,a.a)(e);return+(0,i.D)(t)===+(0,s.p)(t)}function u(e,t){const r=(0,a.a)(e),i=(0,a.a)(t),s=(0,n.z)(r,i),u=Math.abs(o(r,i));let c;if(u<1)c=0;else{1===r.getMonth()&&r.getDate()>27&&r.setDate(30),r.setMonth(r.getMonth()-s*u);let t=(0,n.z)(r,i)===-s;l((0,a.a)(e))&&1===u&&1===(0,n.z)(e,i)&&(t=!1),c=s*(u-Number(t))}return 0===c?0:c}},43924:(e,t,r)=>{"use strict";r.d(t,{O:()=>o});var n=r(14123),a=r(77275);function o(e,t,r){const o=(0,a.b)(e,t)/1e3;return(0,n.u)(r?.roundingMethod)(o)}},33607:(e,t,r)=>{"use strict";r.d(t,{V:()=>i});var n=r(25733),a=r(2642);function o(e,t){const r=(0,a.a)(e),n=(0,a.a)(t);return r.getFullYear()-n.getFullYear()}function i(e,t){const r=(0,a.a)(e),i=(0,a.a)(t),s=(0,n.z)(r,i),l=Math.abs(o(r,i));r.setFullYear(1584),i.setFullYear(1584);const u=s*(l-+((0,n.z)(r,i)===-s));return 0===u?0:u}},37519:(e,t,r)=>{"use strict";r.d(t,{D:()=>a});var n=r(2642);function a(e){const t=(0,n.a)(e);return t.setHours(23,59,59,999),t}},71359:(e,t,r)=>{"use strict";r.d(t,{p:()=>a});var n=r(2642);function a(e){const t=(0,n.a)(e),r=t.getMonth();return t.setFullYear(t.getFullYear(),r+1,0),t.setHours(23,59,59,999),t}},31826:(e,t,r)=>{"use strict";r.d(t,{k:()=>c});var n=r(96519),a=r(82695),o=r(14123),i=r(40215),s=r(25733),l=r(2940),u=r(2642);function c(e,t,r){const c=(0,a.q)(),d=r?.locale??c.locale??n.c,p=(0,s.z)(e,t);if(isNaN(p))throw new RangeError("Invalid time value");const f=Object.assign({},r,{addSuffix:r?.addSuffix,comparison:p});let h,v;p>0?(h=(0,u.a)(t),v=(0,u.a)(e)):(h=(0,u.a)(e),v=(0,u.a)(t));const g=(0,o.u)(r?.roundingMethod??"round"),m=v.getTime()-h.getTime(),b=m/l.Cg,y=(m-((0,i.G)(v)-(0,i.G)(h)))/l.Cg,w=r?.unit;let x;if(x=w||(b<1?"second":b<60?"minute":b{"use strict";r.d(t,{W:()=>a});var n=r(2642);function a(e){return(0,n.a)(e).getTime()}},26010:(e,t,r)=>{"use strict";r.d(t,{_:()=>a});var n=r(2642);function a(e){return Math.trunc(+(0,n.a)(e)/1e3)}},6593:(e,t,r)=>{"use strict";r.d(t,{F:()=>d});var n=r(82526),a=r(17764),o=r(50502),i=r(10648),s=r(49858),l=r(43924),u=r(33607),c=r(2642);function d(e){const t=(0,c.a)(e.start),r=(0,c.a)(e.end),d={},p=(0,u.V)(r,t);p&&(d.years=p);const f=(0,n.W)(t,{years:d.years}),h=(0,s.W)(r,f);h&&(d.months=h);const v=(0,n.W)(f,{months:d.months}),g=(0,a.c)(r,v);g&&(d.days=g);const m=(0,n.W)(v,{days:d.days}),b=(0,o.M)(r,m);b&&(d.hours=b);const y=(0,n.W)(m,{hours:d.hours}),w=(0,i.o)(r,y);w&&(d.minutes=w);const x=(0,n.W)(y,{minutes:d.minutes}),k=(0,l.O)(r,x);return k&&(d.seconds=k),d}},72880:(e,t,r)=>{"use strict";r.d(t,{Y:()=>a});var n=r(2642);function a(e,t){return+(0,n.a)(e)<+(0,n.a)(t)}},84128:(e,t,r)=>{"use strict";r.d(t,{u:()=>o});var n=r(16074),a=r(58380);function o(e,t,r){return(0,n.f)((0,a.qg)(e,t,new Date,r))}},85551:(e,t,r)=>{"use strict";r.d(t,{r:()=>a});var n=r(51730);function a(e,t){return+(0,n.o)(e)===+(0,n.o)(t)}},58380:(e,t,r)=>{"use strict";r.d(t,{qg:()=>ge});var n=r(35840),a=r(82695);function o(){return Object.assign({},(0,a.q)())}var i=r(96519),s=r(2642),l=r(36847),u=r(76992);function c(e,t){const r=t instanceof Date?(0,n.w)(t,0):new t(0);return r.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),r.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),r}class d{subPriority=0;validate(e,t){return!0}}class p extends d{constructor(e,t,r,n,a){super(),this.value=e,this.validateValue=t,this.setValue=r,this.priority=n,a&&(this.subPriority=a)}validate(e,t){return this.validateValue(e,this.value,t)}set(e,t,r){return this.setValue(e,t,this.value,r)}}class f extends d{priority=10;subPriority=-1;set(e,t){return t.timestampIsSet?e:(0,n.w)(e,c(e,Date))}}class h{run(e,t,r,n){const a=this.parse(e,t,r,n);return a?{setter:new p(a.value,this.validate,this.set,this.priority,this.subPriority),rest:a.rest}:null}validate(e,t,r){return!0}}var v=r(2940);const g=/^(1[0-2]|0?\d)/,m=/^(3[0-1]|[0-2]?\d)/,b=/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,y=/^(5[0-3]|[0-4]?\d)/,w=/^(2[0-3]|[0-1]?\d)/,x=/^(2[0-4]|[0-1]?\d)/,k=/^(1[0-1]|0?\d)/,D=/^(1[0-2]|0?\d)/,C=/^[0-5]?\d/,E=/^[0-5]?\d/,A=/^\d/,S=/^\d{1,2}/,_=/^\d{1,3}/,M=/^\d{1,4}/,T=/^-?\d+/,O=/^-?\d/,P=/^-?\d{1,2}/,N=/^-?\d{1,3}/,R=/^-?\d{1,4}/,L=/^([+-])(\d{2})(\d{2})?|Z/,F=/^([+-])(\d{2})(\d{2})|Z/,Y=/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,j=/^([+-])(\d{2}):(\d{2})|Z/,B=/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/;function I(e,t){return e?{value:t(e.value),rest:e.rest}:e}function H(e,t){const r=t.match(e);return r?{value:parseInt(r[0],10),rest:t.slice(r[0].length)}:null}function W(e,t){const r=t.match(e);if(!r)return null;if("Z"===r[0])return{value:0,rest:t.slice(1)};const n="+"===r[1]?1:-1,a=r[2]?parseInt(r[2],10):0,o=r[3]?parseInt(r[3],10):0,i=r[5]?parseInt(r[5],10):0;return{value:n*(a*v.s0+o*v.Cg+i*v._m),rest:t.slice(r[0].length)}}function U(e){return H(T,e)}function q(e,t){switch(e){case 1:return H(A,t);case 2:return H(S,t);case 3:return H(_,t);case 4:return H(M,t);default:return H(new RegExp("^\\d{1,"+e+"}"),t)}}function z(e,t){switch(e){case 1:return H(O,t);case 2:return H(P,t);case 3:return H(N,t);case 4:return H(R,t);default:return H(new RegExp("^-?\\d{1,"+e+"}"),t)}}function Q(e){switch(e){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;default:return 0}}function K(e,t){const r=t>0,n=r?t:1-t;let a;if(n<=50)a=e||100;else{const t=n+50;a=e+100*Math.trunc(t/100)-(e>=t%100?100:0)}return r?a:1-a}function G(e){return e%400===0||e%4===0&&e%100!==0}var X=r(29220),V=r(92528);var $=r(83787);var Z=r(50016);function J(e,t,r){const n=(0,s.a)(e),a=(0,Z.N)(n,r)-t;return n.setDate(n.getDate()-7*a),n}var ee=r(76974);function te(e,t){const r=(0,s.a)(e),n=(0,ee.s)(r)-t;return r.setDate(r.getDate()-7*n),r}const re=[31,28,31,30,31,30,31,31,30,31,30,31],ne=[31,29,31,30,31,30,31,31,30,31,30,31];var ae=r(13999);function oe(e,t,r){const n=(0,a.q)(),o=r?.weekStartsOn??r?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,i=(0,s.a)(e),l=i.getDay(),u=7-o,c=t<0||t>6?t-(l+u)%7:((t%7+7)%7+u)%7-(l+u)%7;return(0,ae.f)(i,c)}function ie(e){let t=(0,s.a)(e).getDay();return 0===t&&(t=7),t}function se(e,t){const r=(0,s.a)(e),n=t-ie(r);return(0,ae.f)(r,n)}var le=r(40215);const ue={G:new class extends h{priority=140;parse(e,t,r){switch(t){case"G":case"GG":case"GGG":return r.era(e,{width:"abbreviated"})||r.era(e,{width:"narrow"});case"GGGGG":return r.era(e,{width:"narrow"});default:return r.era(e,{width:"wide"})||r.era(e,{width:"abbreviated"})||r.era(e,{width:"narrow"})}}set(e,t,r){return t.era=r,e.setFullYear(r,0,1),e.setHours(0,0,0,0),e}incompatibleTokens=["R","u","t","T"]},y:new class extends h{priority=130;incompatibleTokens=["Y","R","u","w","I","i","e","c","t","T"];parse(e,t,r){const n=e=>({year:e,isTwoDigitYear:"yy"===t});switch(t){case"y":return I(q(4,e),n);case"yo":return I(r.ordinalNumber(e,{unit:"year"}),n);default:return I(q(t.length,e),n)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,r){const n=e.getFullYear();if(r.isTwoDigitYear){const t=K(r.year,n);return e.setFullYear(t,0,1),e.setHours(0,0,0,0),e}const a="era"in t&&1!==t.era?1-r.year:r.year;return e.setFullYear(a,0,1),e.setHours(0,0,0,0),e}},Y:new class extends h{priority=130;parse(e,t,r){const n=e=>({year:e,isTwoDigitYear:"YY"===t});switch(t){case"Y":return I(q(4,e),n);case"Yo":return I(r.ordinalNumber(e,{unit:"year"}),n);default:return I(q(t.length,e),n)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,r,n){const a=(0,X.h)(e,n);if(r.isTwoDigitYear){const t=K(r.year,a);return e.setFullYear(t,0,n.firstWeekContainsDate),e.setHours(0,0,0,0),(0,V.k)(e,n)}const o="era"in t&&1!==t.era?1-r.year:r.year;return e.setFullYear(o,0,n.firstWeekContainsDate),e.setHours(0,0,0,0),(0,V.k)(e,n)}incompatibleTokens=["y","R","u","Q","q","M","L","I","d","D","i","t","T"]},R:new class extends h{priority=130;parse(e,t){return z("R"===t?4:t.length,e)}set(e,t,r){const a=(0,n.w)(e,0);return a.setFullYear(r,0,4),a.setHours(0,0,0,0),(0,$.b)(a)}incompatibleTokens=["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]},u:new class extends h{priority=130;parse(e,t){return z("u"===t?4:t.length,e)}set(e,t,r){return e.setFullYear(r,0,1),e.setHours(0,0,0,0),e}incompatibleTokens=["G","y","Y","R","w","I","i","e","c","t","T"]},Q:new class extends h{priority=120;parse(e,t,r){switch(t){case"Q":case"QQ":return q(t.length,e);case"Qo":return r.ordinalNumber(e,{unit:"quarter"});case"QQQ":return r.quarter(e,{width:"abbreviated",context:"formatting"})||r.quarter(e,{width:"narrow",context:"formatting"});case"QQQQQ":return r.quarter(e,{width:"narrow",context:"formatting"});default:return r.quarter(e,{width:"wide",context:"formatting"})||r.quarter(e,{width:"abbreviated",context:"formatting"})||r.quarter(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=1&&t<=4}set(e,t,r){return e.setMonth(3*(r-1),1),e.setHours(0,0,0,0),e}incompatibleTokens=["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]},q:new class extends h{priority=120;parse(e,t,r){switch(t){case"q":case"qq":return q(t.length,e);case"qo":return r.ordinalNumber(e,{unit:"quarter"});case"qqq":return r.quarter(e,{width:"abbreviated",context:"standalone"})||r.quarter(e,{width:"narrow",context:"standalone"});case"qqqqq":return r.quarter(e,{width:"narrow",context:"standalone"});default:return r.quarter(e,{width:"wide",context:"standalone"})||r.quarter(e,{width:"abbreviated",context:"standalone"})||r.quarter(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=1&&t<=4}set(e,t,r){return e.setMonth(3*(r-1),1),e.setHours(0,0,0,0),e}incompatibleTokens=["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]},M:new class extends h{incompatibleTokens=["Y","R","q","Q","L","w","I","D","i","e","c","t","T"];priority=110;parse(e,t,r){const n=e=>e-1;switch(t){case"M":return I(H(g,e),n);case"MM":return I(q(2,e),n);case"Mo":return I(r.ordinalNumber(e,{unit:"month"}),n);case"MMM":return r.month(e,{width:"abbreviated",context:"formatting"})||r.month(e,{width:"narrow",context:"formatting"});case"MMMMM":return r.month(e,{width:"narrow",context:"formatting"});default:return r.month(e,{width:"wide",context:"formatting"})||r.month(e,{width:"abbreviated",context:"formatting"})||r.month(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=11}set(e,t,r){return e.setMonth(r,1),e.setHours(0,0,0,0),e}},L:new class extends h{priority=110;parse(e,t,r){const n=e=>e-1;switch(t){case"L":return I(H(g,e),n);case"LL":return I(q(2,e),n);case"Lo":return I(r.ordinalNumber(e,{unit:"month"}),n);case"LLL":return r.month(e,{width:"abbreviated",context:"standalone"})||r.month(e,{width:"narrow",context:"standalone"});case"LLLLL":return r.month(e,{width:"narrow",context:"standalone"});default:return r.month(e,{width:"wide",context:"standalone"})||r.month(e,{width:"abbreviated",context:"standalone"})||r.month(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=11}set(e,t,r){return e.setMonth(r,1),e.setHours(0,0,0,0),e}incompatibleTokens=["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]},w:new class extends h{priority=100;parse(e,t,r){switch(t){case"w":return H(y,e);case"wo":return r.ordinalNumber(e,{unit:"week"});default:return q(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,r,n){return(0,V.k)(J(e,r,n),n)}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","i","t","T"]},I:new class extends h{priority=100;parse(e,t,r){switch(t){case"I":return H(y,e);case"Io":return r.ordinalNumber(e,{unit:"week"});default:return q(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,r){return(0,$.b)(te(e,r))}incompatibleTokens=["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]},d:new class extends h{priority=90;subPriority=1;parse(e,t,r){switch(t){case"d":return H(m,e);case"do":return r.ordinalNumber(e,{unit:"date"});default:return q(t.length,e)}}validate(e,t){const r=G(e.getFullYear()),n=e.getMonth();return r?t>=1&&t<=ne[n]:t>=1&&t<=re[n]}set(e,t,r){return e.setDate(r),e.setHours(0,0,0,0),e}incompatibleTokens=["Y","R","q","Q","w","I","D","i","e","c","t","T"]},D:new class extends h{priority=90;subpriority=1;parse(e,t,r){switch(t){case"D":case"DD":return H(b,e);case"Do":return r.ordinalNumber(e,{unit:"date"});default:return q(t.length,e)}}validate(e,t){return G(e.getFullYear())?t>=1&&t<=366:t>=1&&t<=365}set(e,t,r){return e.setMonth(0,r),e.setHours(0,0,0,0),e}incompatibleTokens=["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]},E:new class extends h{priority=90;parse(e,t,r){switch(t){case"E":case"EE":case"EEE":return r.day(e,{width:"abbreviated",context:"formatting"})||r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"});case"EEEEE":return r.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"});default:return r.day(e,{width:"wide",context:"formatting"})||r.day(e,{width:"abbreviated",context:"formatting"})||r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,r,n){return(e=oe(e,r,n)).setHours(0,0,0,0),e}incompatibleTokens=["D","i","e","c","t","T"]},e:new class extends h{priority=90;parse(e,t,r,n){const a=e=>{const t=7*Math.floor((e-1)/7);return(e+n.weekStartsOn+6)%7+t};switch(t){case"e":case"ee":return I(q(t.length,e),a);case"eo":return I(r.ordinalNumber(e,{unit:"day"}),a);case"eee":return r.day(e,{width:"abbreviated",context:"formatting"})||r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"});case"eeeee":return r.day(e,{width:"narrow",context:"formatting"});case"eeeeee":return r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"});default:return r.day(e,{width:"wide",context:"formatting"})||r.day(e,{width:"abbreviated",context:"formatting"})||r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,r,n){return(e=oe(e,r,n)).setHours(0,0,0,0),e}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]},c:new class extends h{priority=90;parse(e,t,r,n){const a=e=>{const t=7*Math.floor((e-1)/7);return(e+n.weekStartsOn+6)%7+t};switch(t){case"c":case"cc":return I(q(t.length,e),a);case"co":return I(r.ordinalNumber(e,{unit:"day"}),a);case"ccc":return r.day(e,{width:"abbreviated",context:"standalone"})||r.day(e,{width:"short",context:"standalone"})||r.day(e,{width:"narrow",context:"standalone"});case"ccccc":return r.day(e,{width:"narrow",context:"standalone"});case"cccccc":return r.day(e,{width:"short",context:"standalone"})||r.day(e,{width:"narrow",context:"standalone"});default:return r.day(e,{width:"wide",context:"standalone"})||r.day(e,{width:"abbreviated",context:"standalone"})||r.day(e,{width:"short",context:"standalone"})||r.day(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=6}set(e,t,r,n){return(e=oe(e,r,n)).setHours(0,0,0,0),e}incompatibleTokens=["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]},i:new class extends h{priority=90;parse(e,t,r){const n=e=>0===e?7:e;switch(t){case"i":case"ii":return q(t.length,e);case"io":return r.ordinalNumber(e,{unit:"day"});case"iii":return I(r.day(e,{width:"abbreviated",context:"formatting"})||r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"}),n);case"iiiii":return I(r.day(e,{width:"narrow",context:"formatting"}),n);case"iiiiii":return I(r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"}),n);default:return I(r.day(e,{width:"wide",context:"formatting"})||r.day(e,{width:"abbreviated",context:"formatting"})||r.day(e,{width:"short",context:"formatting"})||r.day(e,{width:"narrow",context:"formatting"}),n)}}validate(e,t){return t>=1&&t<=7}set(e,t,r){return(e=se(e,r)).setHours(0,0,0,0),e}incompatibleTokens=["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"]},a:new class extends h{priority=80;parse(e,t,r){switch(t){case"a":case"aa":case"aaa":return r.dayPeriod(e,{width:"abbreviated",context:"formatting"})||r.dayPeriod(e,{width:"narrow",context:"formatting"});case"aaaaa":return r.dayPeriod(e,{width:"narrow",context:"formatting"});default:return r.dayPeriod(e,{width:"wide",context:"formatting"})||r.dayPeriod(e,{width:"abbreviated",context:"formatting"})||r.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,r){return e.setHours(Q(r),0,0,0),e}incompatibleTokens=["b","B","H","k","t","T"]},b:new class extends h{priority=80;parse(e,t,r){switch(t){case"b":case"bb":case"bbb":return r.dayPeriod(e,{width:"abbreviated",context:"formatting"})||r.dayPeriod(e,{width:"narrow",context:"formatting"});case"bbbbb":return r.dayPeriod(e,{width:"narrow",context:"formatting"});default:return r.dayPeriod(e,{width:"wide",context:"formatting"})||r.dayPeriod(e,{width:"abbreviated",context:"formatting"})||r.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,r){return e.setHours(Q(r),0,0,0),e}incompatibleTokens=["a","B","H","k","t","T"]},B:new class extends h{priority=80;parse(e,t,r){switch(t){case"B":case"BB":case"BBB":return r.dayPeriod(e,{width:"abbreviated",context:"formatting"})||r.dayPeriod(e,{width:"narrow",context:"formatting"});case"BBBBB":return r.dayPeriod(e,{width:"narrow",context:"formatting"});default:return r.dayPeriod(e,{width:"wide",context:"formatting"})||r.dayPeriod(e,{width:"abbreviated",context:"formatting"})||r.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,r){return e.setHours(Q(r),0,0,0),e}incompatibleTokens=["a","b","t","T"]},h:new class extends h{priority=70;parse(e,t,r){switch(t){case"h":return H(D,e);case"ho":return r.ordinalNumber(e,{unit:"hour"});default:return q(t.length,e)}}validate(e,t){return t>=1&&t<=12}set(e,t,r){const n=e.getHours()>=12;return n&&r<12?e.setHours(r+12,0,0,0):n||12!==r?e.setHours(r,0,0,0):e.setHours(0,0,0,0),e}incompatibleTokens=["H","K","k","t","T"]},H:new class extends h{priority=70;parse(e,t,r){switch(t){case"H":return H(w,e);case"Ho":return r.ordinalNumber(e,{unit:"hour"});default:return q(t.length,e)}}validate(e,t){return t>=0&&t<=23}set(e,t,r){return e.setHours(r,0,0,0),e}incompatibleTokens=["a","b","h","K","k","t","T"]},K:new class extends h{priority=70;parse(e,t,r){switch(t){case"K":return H(k,e);case"Ko":return r.ordinalNumber(e,{unit:"hour"});default:return q(t.length,e)}}validate(e,t){return t>=0&&t<=11}set(e,t,r){return e.getHours()>=12&&r<12?e.setHours(r+12,0,0,0):e.setHours(r,0,0,0),e}incompatibleTokens=["h","H","k","t","T"]},k:new class extends h{priority=70;parse(e,t,r){switch(t){case"k":return H(x,e);case"ko":return r.ordinalNumber(e,{unit:"hour"});default:return q(t.length,e)}}validate(e,t){return t>=1&&t<=24}set(e,t,r){const n=r<=24?r%24:r;return e.setHours(n,0,0,0),e}incompatibleTokens=["a","b","h","H","K","t","T"]},m:new class extends h{priority=60;parse(e,t,r){switch(t){case"m":return H(C,e);case"mo":return r.ordinalNumber(e,{unit:"minute"});default:return q(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,r){return e.setMinutes(r,0,0),e}incompatibleTokens=["t","T"]},s:new class extends h{priority=50;parse(e,t,r){switch(t){case"s":return H(E,e);case"so":return r.ordinalNumber(e,{unit:"second"});default:return q(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,r){return e.setSeconds(r,0),e}incompatibleTokens=["t","T"]},S:new class extends h{priority=30;parse(e,t){return I(q(t.length,e),(e=>Math.trunc(e*Math.pow(10,3-t.length))))}set(e,t,r){return e.setMilliseconds(r),e}incompatibleTokens=["t","T"]},X:new class extends h{priority=10;parse(e,t){switch(t){case"X":return W(L,e);case"XX":return W(F,e);case"XXXX":return W(Y,e);case"XXXXX":return W(B,e);default:return W(j,e)}}set(e,t,r){return t.timestampIsSet?e:(0,n.w)(e,e.getTime()-(0,le.G)(e)-r)}incompatibleTokens=["t","T","x"]},x:new class extends h{priority=10;parse(e,t){switch(t){case"x":return W(L,e);case"xx":return W(F,e);case"xxxx":return W(Y,e);case"xxxxx":return W(B,e);default:return W(j,e)}}set(e,t,r){return t.timestampIsSet?e:(0,n.w)(e,e.getTime()-(0,le.G)(e)-r)}incompatibleTokens=["t","T","X"]},t:new class extends h{priority=40;parse(e){return U(e)}set(e,t,r){return[(0,n.w)(e,1e3*r),{timestampIsSet:!0}]}incompatibleTokens="*"},T:new class extends h{priority=20;parse(e){return U(e)}set(e,t,r){return[(0,n.w)(e,r),{timestampIsSet:!0}]}incompatibleTokens="*"}},ce=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,de=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,pe=/^'([^]*?)'?$/,fe=/''/g,he=/\S/,ve=/[a-zA-Z]/;function ge(e,t,r,a){const c=o(),d=a?.locale??c.locale??i.c,p=a?.firstWeekContainsDate??a?.locale?.options?.firstWeekContainsDate??c.firstWeekContainsDate??c.locale?.options?.firstWeekContainsDate??1,h=a?.weekStartsOn??a?.locale?.options?.weekStartsOn??c.weekStartsOn??c.locale?.options?.weekStartsOn??0;if(""===t)return""===e?(0,s.a)(r):(0,n.w)(r,NaN);const v={firstWeekContainsDate:p,weekStartsOn:h,locale:d},g=[new f],m=t.match(de).map((e=>{const t=e[0];if(t in l.m){return(0,l.m[t])(e,d.formatLong)}return e})).join("").match(ce),b=[];for(let o of m){!a?.useAdditionalWeekYearTokens&&(0,u.xM)(o)&&(0,u.Ss)(o,t,e),!a?.useAdditionalDayOfYearTokens&&(0,u.ef)(o)&&(0,u.Ss)(o,t,e);const i=o[0],s=ue[i];if(s){const{incompatibleTokens:t}=s;if(Array.isArray(t)){const e=b.find((e=>t.includes(e.token)||e.token===i));if(e)throw new RangeError(`The format string mustn't contain \`${e.fullToken}\` and \`${o}\` at the same time`)}else if("*"===s.incompatibleTokens&&b.length>0)throw new RangeError(`The format string mustn't contain \`${o}\` and any other token at the same time`);b.push({token:i,fullToken:o});const a=s.run(e,o,d.match,v);if(!a)return(0,n.w)(r,NaN);g.push(a.setter),e=a.rest}else{if(i.match(ve))throw new RangeError("Format string contains an unescaped latin alphabet character `"+i+"`");if("''"===o?o="'":"'"===i&&(o=o.match(pe)[1].replace(fe,"'")),0!==e.indexOf(o))return(0,n.w)(r,NaN);e=e.slice(o.length)}}if(e.length>0&&he.test(e))return(0,n.w)(r,NaN);const y=g.map((e=>e.priority)).sort(((e,t)=>t-e)).filter(((e,t,r)=>r.indexOf(e)===t)).map((e=>g.filter((t=>t.priority===e)).sort(((e,t)=>t.subPriority-e.subPriority)))).map((e=>e[0]));let w=(0,s.a)(r);if(isNaN(w.getTime()))return(0,n.w)(r,NaN);const x={};for(const o of y){if(!o.validate(w,v))return(0,n.w)(r,NaN);const e=o.set(w,x,v);Array.isArray(e)?(w=e[0],Object.assign(x,e[1])):w=e}return(0,n.w)(r,w)}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt b/src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt deleted file mode 100644 index 827f2732c..000000000 --- a/src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt +++ /dev/null @@ -1,5 +0,0 @@ -/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/ diff --git a/src/web/gui/v2/8323.e22de33686bb2f34063c.css b/src/web/gui/v2/8323.e22de33686bb2f34063c.css deleted file mode 100644 index 371f90fba..000000000 --- a/src/web/gui/v2/8323.e22de33686bb2f34063c.css +++ /dev/null @@ -1,2 +0,0 @@ -.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow,.react-datepicker__navigation-icon::before{border-color:#ccc;border-style:solid;border-width:3px 3px 0 0;content:"";display:block;height:9px;position:absolute;top:6px;width:9px}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle,.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{margin-left:-4px;position:absolute;width:0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::before,.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::before,.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::after,.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::after{box-sizing:content-box;position:absolute;border:8px solid transparent;height:0;width:1px;content:"";z-index:-1;border-width:8px;left:-8px}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::before,.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::before{border-bottom-color:#aeaeae}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle{top:0;margin-top:-8px}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::before,.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::after{border-top:none;border-bottom-color:#f0f0f0}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::after{top:0}.react-datepicker-popper[data-placement^=bottom] .react-datepicker__triangle::before{top:-1px;border-bottom-color:#aeaeae}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle{bottom:0;margin-bottom:-8px}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::before,.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::after{border-bottom:none;border-top-color:#fff}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::after{bottom:0}.react-datepicker-popper[data-placement^=top] .react-datepicker__triangle::before{bottom:-1px;border-top-color:#aeaeae}.react-datepicker-wrapper{display:inline-block;padding:0;border:0}.react-datepicker{font-family:"Helvetica Neue", helvetica, arial, sans-serif;font-size:0.8rem;background-color:#fff;color:#000;border:1px solid #aeaeae;border-radius:0.3rem;display:inline-block;position:relative}.react-datepicker--time-only .react-datepicker__triangle{left:35px}.react-datepicker--time-only .react-datepicker__time-container{border-left:0}.react-datepicker--time-only .react-datepicker__time,.react-datepicker--time-only .react-datepicker__time-box{border-bottom-left-radius:0.3rem;border-bottom-right-radius:0.3rem}.react-datepicker__triangle{position:absolute;left:50px}.react-datepicker-popper{z-index:1}.react-datepicker-popper[data-placement^=bottom]{padding-top:10px}.react-datepicker-popper[data-placement=bottom-end] .react-datepicker__triangle,.react-datepicker-popper[data-placement=top-end] .react-datepicker__triangle{left:auto;right:50px}.react-datepicker-popper[data-placement^=top]{padding-bottom:10px}.react-datepicker-popper[data-placement^=right]{padding-left:8px}.react-datepicker-popper[data-placement^=right] .react-datepicker__triangle{left:auto;right:42px}.react-datepicker-popper[data-placement^=left]{padding-right:8px}.react-datepicker-popper[data-placement^=left] .react-datepicker__triangle{left:42px;right:auto}.react-datepicker__header{text-align:center;background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:0.3rem;padding:8px 0;position:relative}.react-datepicker__header--time{padding-bottom:8px;padding-left:5px;padding-right:5px}.react-datepicker__header--time:not(.react-datepicker__header--time--only){border-top-left-radius:0}.react-datepicker__header:not(.react-datepicker__header--has-time-select){border-top-right-radius:0.3rem}.react-datepicker__year-dropdown-container--select,.react-datepicker__month-dropdown-container--select,.react-datepicker__month-year-dropdown-container--select,.react-datepicker__year-dropdown-container--scroll,.react-datepicker__month-dropdown-container--scroll,.react-datepicker__month-year-dropdown-container--scroll{display:inline-block;margin:0 15px}.react-datepicker__current-month,.react-datepicker-time__header,.react-datepicker-year-header{margin-top:0;color:#000;font-weight:bold;font-size:0.944rem}.react-datepicker-time__header{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.react-datepicker__navigation{align-items:center;background:none;display:flex;justify-content:center;text-align:center;cursor:pointer;position:absolute;top:2px;padding:0;border:none;z-index:1;height:32px;width:32px;text-indent:-999em;overflow:hidden}.react-datepicker__navigation--previous{left:2px}.react-datepicker__navigation--next{right:2px}.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button){right:85px}.react-datepicker__navigation--years{position:relative;top:0;display:block;margin-left:auto;margin-right:auto}.react-datepicker__navigation--years-previous{top:4px}.react-datepicker__navigation--years-upcoming{top:-4px}.react-datepicker__navigation:hover *::before{border-color:#a6a6a6}.react-datepicker__navigation-icon{position:relative;top:-1px;font-size:20px;width:0}.react-datepicker__navigation-icon--next{left:-2px}.react-datepicker__navigation-icon--next::before{transform:rotate(45deg);left:-7px}.react-datepicker__navigation-icon--previous{right:-2px}.react-datepicker__navigation-icon--previous::before{transform:rotate(225deg);right:-7px}.react-datepicker__month-container{float:left}.react-datepicker__year{margin:0.4rem;text-align:center}.react-datepicker__year-wrapper{display:flex;flex-wrap:wrap;max-width:180px}.react-datepicker__year .react-datepicker__year-text{display:inline-block;width:4rem;margin:2px}.react-datepicker__month{margin:0.4rem;text-align:center}.react-datepicker__month .react-datepicker__month-text,.react-datepicker__month .react-datepicker__quarter-text{display:inline-block;width:4rem;margin:2px}.react-datepicker__input-time-container{clear:both;width:100%;float:left;margin:5px 0 10px 15px;text-align:left}.react-datepicker__input-time-container .react-datepicker-time__caption{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container{display:inline-block}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input{display:inline-block;margin-left:10px}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input{width:auto}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-inner-spin-button,.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__input input[type=time]{-moz-appearance:textfield}.react-datepicker__input-time-container .react-datepicker-time__input-container .react-datepicker-time__delimiter{margin-left:5px;display:inline-block}.react-datepicker__time-container{float:right;border-left:1px solid #aeaeae;width:85px}.react-datepicker__time-container--with-today-button{display:inline;border:1px solid #aeaeae;border-radius:0.3rem;position:absolute;right:-87px;top:0}.react-datepicker__time-container .react-datepicker__time{position:relative;background:white;border-bottom-right-radius:0.3rem}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{width:85px;overflow-x:hidden;margin:0 auto;text-align:center;border-bottom-right-radius:0.3rem}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list{list-style:none;margin:0;height:calc(195px + 1.7rem / 2);overflow-y:scroll;padding-right:0;padding-left:0;width:100%;box-sizing:content-box}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item{height:30px;padding:5px 10px;white-space:nowrap}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover{cursor:pointer;background-color:#f0f0f0}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected{background-color:#216ba5;color:white;font-weight:bold}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover{background-color:#216ba5}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled{color:#ccc}.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover{cursor:default;background-color:transparent}.react-datepicker__week-number{color:#ccc;display:inline-block;width:1.7rem;line-height:1.7rem;text-align:center;margin:0.166rem}.react-datepicker__week-number.react-datepicker__week-number--clickable{cursor:pointer}.react-datepicker__week-number.react-datepicker__week-number--clickable:not(.react-datepicker__week-number--selected,.react-datepicker__week-number--keyboard-selected):hover{border-radius:0.3rem;background-color:#f0f0f0}.react-datepicker__week-number--selected{border-radius:0.3rem;background-color:#216ba5;color:#fff}.react-datepicker__week-number--selected:hover{background-color:#1d5d90}.react-datepicker__week-number--keyboard-selected{border-radius:0.3rem;background-color:#2a87d0;color:#fff}.react-datepicker__week-number--keyboard-selected:hover{background-color:#1d5d90}.react-datepicker__day-names{white-space:nowrap;margin-bottom:-8px}.react-datepicker__week{white-space:nowrap}.react-datepicker__day-name,.react-datepicker__day,.react-datepicker__time-name{color:#000;display:inline-block;width:1.7rem;line-height:1.7rem;text-align:center;margin:0.166rem}.react-datepicker__day,.react-datepicker__month-text,.react-datepicker__quarter-text,.react-datepicker__year-text{cursor:pointer}.react-datepicker__day:hover,.react-datepicker__month-text:hover,.react-datepicker__quarter-text:hover,.react-datepicker__year-text:hover{border-radius:0.3rem;background-color:#f0f0f0}.react-datepicker__day--today,.react-datepicker__month-text--today,.react-datepicker__quarter-text--today,.react-datepicker__year-text--today{font-weight:bold}.react-datepicker__day--highlighted,.react-datepicker__month-text--highlighted,.react-datepicker__quarter-text--highlighted,.react-datepicker__year-text--highlighted{border-radius:0.3rem;background-color:#3dcc4a;color:#fff}.react-datepicker__day--highlighted:hover,.react-datepicker__month-text--highlighted:hover,.react-datepicker__quarter-text--highlighted:hover,.react-datepicker__year-text--highlighted:hover{background-color:#32be3f}.react-datepicker__day--highlighted-custom-1,.react-datepicker__month-text--highlighted-custom-1,.react-datepicker__quarter-text--highlighted-custom-1,.react-datepicker__year-text--highlighted-custom-1{color:magenta}.react-datepicker__day--highlighted-custom-2,.react-datepicker__month-text--highlighted-custom-2,.react-datepicker__quarter-text--highlighted-custom-2,.react-datepicker__year-text--highlighted-custom-2{color:green}.react-datepicker__day--holidays,.react-datepicker__month-text--holidays,.react-datepicker__quarter-text--holidays,.react-datepicker__year-text--holidays{position:relative;border-radius:0.3rem;background-color:#ff6803;color:#fff}.react-datepicker__day--holidays .holiday-overlay,.react-datepicker__month-text--holidays .holiday-overlay,.react-datepicker__quarter-text--holidays .holiday-overlay,.react-datepicker__year-text--holidays .holiday-overlay{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background-color:#333;color:#fff;padding:4px;border-radius:4px;white-space:nowrap;visibility:hidden;opacity:0;transition:visibility 0s, opacity 0.3s ease-in-out}.react-datepicker__day--holidays:hover,.react-datepicker__month-text--holidays:hover,.react-datepicker__quarter-text--holidays:hover,.react-datepicker__year-text--holidays:hover{background-color:#cf5300}.react-datepicker__day--holidays:hover .holiday-overlay,.react-datepicker__month-text--holidays:hover .holiday-overlay,.react-datepicker__quarter-text--holidays:hover .holiday-overlay,.react-datepicker__year-text--holidays:hover .holiday-overlay{visibility:visible;opacity:1}.react-datepicker__day--selected,.react-datepicker__day--in-selecting-range,.react-datepicker__day--in-range,.react-datepicker__month-text--selected,.react-datepicker__month-text--in-selecting-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--selected,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--selected,.react-datepicker__year-text--in-selecting-range,.react-datepicker__year-text--in-range{border-radius:0.3rem;background-color:#216ba5;color:#fff}.react-datepicker__day--selected:hover,.react-datepicker__day--in-selecting-range:hover,.react-datepicker__day--in-range:hover,.react-datepicker__month-text--selected:hover,.react-datepicker__month-text--in-selecting-range:hover,.react-datepicker__month-text--in-range:hover,.react-datepicker__quarter-text--selected:hover,.react-datepicker__quarter-text--in-selecting-range:hover,.react-datepicker__quarter-text--in-range:hover,.react-datepicker__year-text--selected:hover,.react-datepicker__year-text--in-selecting-range:hover,.react-datepicker__year-text--in-range:hover{background-color:#1d5d90}.react-datepicker__day--keyboard-selected,.react-datepicker__month-text--keyboard-selected,.react-datepicker__quarter-text--keyboard-selected,.react-datepicker__year-text--keyboard-selected{border-radius:0.3rem;background-color:#bad9f1;color:#000}.react-datepicker__day--keyboard-selected:hover,.react-datepicker__month-text--keyboard-selected:hover,.react-datepicker__quarter-text--keyboard-selected:hover,.react-datepicker__year-text--keyboard-selected:hover{background-color:#1d5d90}.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__month-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__quarter-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range),.react-datepicker__year-text--in-selecting-range:not(.react-datepicker__day--in-range,.react-datepicker__month-text--in-range,.react-datepicker__quarter-text--in-range,.react-datepicker__year-text--in-range){background-color:rgba(33,107,165,0.5)}.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__month-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__quarter-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__month--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range),.react-datepicker__year--selecting-range .react-datepicker__year-text--in-range:not(.react-datepicker__day--in-selecting-range,.react-datepicker__month-text--in-selecting-range,.react-datepicker__quarter-text--in-selecting-range,.react-datepicker__year-text--in-selecting-range){background-color:#f0f0f0;color:#000}.react-datepicker__day--disabled,.react-datepicker__month-text--disabled,.react-datepicker__quarter-text--disabled,.react-datepicker__year-text--disabled{cursor:default;color:#ccc}.react-datepicker__day--disabled:hover,.react-datepicker__month-text--disabled:hover,.react-datepicker__quarter-text--disabled:hover,.react-datepicker__year-text--disabled:hover{background-color:transparent}.react-datepicker__input-container{position:relative;display:inline-block;width:100%}.react-datepicker__input-container .react-datepicker__calendar-icon{position:absolute;padding:0.5rem;box-sizing:content-box}.react-datepicker__view-calendar-icon input{padding:6px 10px 5px 25px}.react-datepicker__year-read-view,.react-datepicker__month-read-view,.react-datepicker__month-year-read-view{border:1px solid transparent;border-radius:0.3rem;position:relative}.react-datepicker__year-read-view:hover,.react-datepicker__month-read-view:hover,.react-datepicker__month-year-read-view:hover{cursor:pointer}.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__year-read-view--down-arrow,.react-datepicker__month-read-view--down-arrow,.react-datepicker__month-year-read-view--down-arrow{transform:rotate(135deg);right:-16px;top:0}.react-datepicker__year-dropdown,.react-datepicker__month-dropdown,.react-datepicker__month-year-dropdown{background-color:#f0f0f0;position:absolute;width:50%;left:25%;top:30px;z-index:1;text-align:center;border-radius:0.3rem;border:1px solid #aeaeae}.react-datepicker__year-dropdown:hover,.react-datepicker__month-dropdown:hover,.react-datepicker__month-year-dropdown:hover{cursor:pointer}.react-datepicker__year-dropdown--scrollable,.react-datepicker__month-dropdown--scrollable,.react-datepicker__month-year-dropdown--scrollable{height:150px;overflow-y:scroll}.react-datepicker__year-option,.react-datepicker__month-option,.react-datepicker__month-year-option{line-height:20px;width:100%;display:block;margin-left:auto;margin-right:auto}.react-datepicker__year-option:first-of-type,.react-datepicker__month-option:first-of-type,.react-datepicker__month-year-option:first-of-type{border-top-left-radius:0.3rem;border-top-right-radius:0.3rem}.react-datepicker__year-option:last-of-type,.react-datepicker__month-option:last-of-type,.react-datepicker__month-year-option:last-of-type{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom-left-radius:0.3rem;border-bottom-right-radius:0.3rem}.react-datepicker__year-option:hover,.react-datepicker__month-option:hover,.react-datepicker__month-year-option:hover{background-color:#ccc}.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__year-option--selected,.react-datepicker__month-option--selected,.react-datepicker__month-year-option--selected{position:absolute;left:15px}.react-datepicker__close-icon{cursor:pointer;background-color:transparent;border:0;outline:0;padding:0 6px 0 0;position:absolute;top:0;right:0;height:100%;display:table-cell;vertical-align:middle}.react-datepicker__close-icon::after{cursor:pointer;background-color:#216ba5;color:#fff;border-radius:50%;height:16px;width:16px;padding:2px;font-size:12px;line-height:1;text-align:center;display:table-cell;vertical-align:middle;content:"×"}.react-datepicker__close-icon--disabled{cursor:default}.react-datepicker__close-icon--disabled::after{cursor:default;background-color:#ccc}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;cursor:pointer;text-align:center;font-weight:bold;padding:5px 0;clear:left}.react-datepicker__portal{position:fixed;width:100vw;height:100vh;background-color:rgba(0,0,0,0.8);left:0;top:0;justify-content:center;align-items:center;display:flex;z-index:2147483647}.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__time-name{width:3rem;line-height:3rem}@media (max-width: 400px), (max-height: 550px){.react-datepicker__portal .react-datepicker__day-name,.react-datepicker__portal .react-datepicker__day,.react-datepicker__portal .react-datepicker__time-name{width:2rem;line-height:2rem}}.react-datepicker__portal .react-datepicker__current-month,.react-datepicker__portal .react-datepicker-time__header{font-size:1.44rem}.react-datepicker__children-container{width:13.8rem;margin:0.4rem;padding-right:0.2rem;padding-left:0.2rem;height:auto}.react-datepicker__aria-live{position:absolute;clip-path:circle(0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;white-space:nowrap}.react-datepicker__calendar-icon{width:1em;height:1em;vertical-align:-0.125em} - diff --git a/src/web/gui/v2/8505.c330f2104fefd71717da.chunk.js b/src/web/gui/v2/8505.c330f2104fefd71717da.chunk.js deleted file mode 100644 index eef2a88b9..000000000 --- a/src/web/gui/v2/8505.c330f2104fefd71717da.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="80647485-8a0e-4651-b370-ef6ea86fc55d",e._sentryDebugIdIdentifier="sentry-dbid-80647485-8a0e-4651-b370-ef6ea86fc55d")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8505],{8505:(e,t,n)=>{n.r(t),n.d(t,{default:()=>y});n(62953);var a=n(96540),r=n(84929),o=n(16074),l=n(63933),i=n(82526),d=n(29176),s=n(87991),c=n(26655),u=n(47444),f=n(83199),p=n(5396),g=n(4659),b=n(87659);const m=(0,u.gD)({key:"fetchLicense",get:()=>c.A.get("/api/v1/license").then((e=>e.data)).catch((()=>null))}),w=(0,u.eU)({key:"licenseAtom",default:m}),y=()=>{if(!window.envSettings.onprem)return null;const e=(0,u.xf)(w),[t,n]=(0,b.A)(),[c,m]=(0,a.useState)(),[y,E]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{if("hasValue"!==e.state)return;const t=e.contents,a=(0,r.H)(t.exp);if(m(a),!(0,o.f)(a))return;const i=parseInt((a-new Date)/1e3/60/60/24);if(i>30)return;const d=localStorage.getItem("dismissLicenceWarning");d&&(0,o.f)((0,r.H)(d))&&!(0,l.R)((0,r.H)(d))&&i>0||(n(!0),i<0&&E(!0))}),[e]),t?y?a.createElement(f.Layer,{full:!0,backdropProps:{backdropBlur:"3px"}},a.createElement(p.A,{testId:"onprem-banner",width:"100%",background:"errorBackground",position:"absolute",top:"0",tooltipProps:{align:"top"},zIndex:20},a.createElement(f.Flex,{justifyContent:"center",alignItems:"center",width:"100%",gap:2},a.createElement(f.Text,null,"Your Netdata Enterprise On-prem License has expired on ",(0,s.GP)(c,"PPPP"),". Please contact your admin /"," ",a.createElement(g.A,{"data-testid":"renew",href:"mailto:billing@netdata.cloud",as:"a",cursor:"pointer",textDecoration:"underline",color:"main"},"billing@netdata.cloud")," ","to renew your license.")))):a.createElement(p.A,{testId:"onprem-banner",width:"100%",background:"warningBackground",position:"absolute",top:"0",onClose:()=>{n(),localStorage.setItem("dismissLicenceWarning",(0,i.W)(new Date,{days:1}).toISOString())},tooltipProps:{align:"top"},zIndex:20},a.createElement(f.Flex,{justifyContent:"center",alignItems:"center",width:"100%",gap:2},a.createElement(f.Text,null,"Your Netdata Enterprise On-prem License will expire in ",(0,d.m)(c),". Please contact your admin /"," ",a.createElement(g.A,{"data-testid":"renew",href:"mailto:billing@netdata.cloud",as:"a",cursor:"pointer",textDecoration:"underline",color:"main"},"billing@netdata.cloud")," ","to renew your license."))):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/86.2c88d4d37b88e2620051.chunk.js b/src/web/gui/v2/86.2c88d4d37b88e2620051.chunk.js deleted file mode 100644 index ca4e5c42a..000000000 --- a/src/web/gui/v2/86.2c88d4d37b88e2620051.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8dce808c-0875-4ae0-b589-d21a5bf0a9b0",e._sentryDebugIdIdentifier="sentry-dbid-8dce808c-0875-4ae0-b589-d21a5bf0a9b0")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[86],{60086:(e,n,t)=>{t.r(n),t.d(n,{default:()=>U});var a=t(58168),r=(t(62953),t(96540)),o=t(83199),l=t(16074),d=t(84929),i=t(63933),s=t(82526),c=t(29176),p=t(87991),u=t(5396),b=t(29217),f=t(87659),g=t(92155),m=t(25624),E=t(99904),w=t(35454),y=t(24864),x=t(93476),I=t(28061);const h=new Date("12/31/2023 23:59:59 +2"),A=new Date,S=(k=(0,g.A)(y.PL),e=>{let{canUpgrade:n,...t}=e;return n?r.createElement(k,t):r.createElement(b.A,{content:"You don't have permissions to upgrade the plan"},r.createElement(o.Flex,null,r.createElement(k,(0,a.A)({disabled:!0},t))))});var k;const U=e=>{let{flavour:n="banner"}=e;const{onTrial:t,sidebarWarningVisible:a,bannerVisible:b,dismissBanner:g,type:k,canUpgrade:U,planIsFreeOrEarlyBird:D}=(0,m.A)(),{coupon:_}=(0,E.A)(),v=parseFloat((h-A)/1e3/60/60/24),B=_||(v>0?"50SURPRISE":""),C=(0,I.A)(B),P=!t&&D,[R,T]=(0,f.A)();return(0,r.useEffect)((()=>{const e=localStorage.getItem("dismissSidebarBanner");e&&(0,l.f)((0,d.H)(e))&&!(0,i.R)((0,d.H)(e))||T(!0)}),[]),"sidebar"==n&&(a||P)?R?r.createElement(y.bg,{type:t?k:"default",column:!0,gap:2,margin:[2],padding:[2]},r.createElement(o.Box,{"data-testid":"close-button",as:o.Icon,color:"text",cursor:"pointer",name:"x",position:"absolute",right:"2px",top:"2px",width:"12px",height:"12px",onClick:()=>{T(),localStorage.setItem("dismissSidebarBanner",(0,s.W)(new Date,{days:3}).toISOString())}}),r.createElement(x.A,{flavour:t?n:"freePlanUpgrade",couponRemainingDays:v,expDate:h,onUpdateClick:C}),r.createElement(S,{feature:"UpgradeToBusiness",isStart:!0,small:!0,"data-testid":"upgradeToBusiness-sidebar",label:v>0?"Upgrade now!":"Upgrade",canUpgrade:U,onClick:C}),v>0&&(0,l.f)(h)&&r.createElement(o.TextNano,{strong:!0,textAlign:"center",lineHeight:.8},"Expires"," ",v<1?"".concat((0,c.m)(h,{addSuffix:!0})," ").concat((0,p.GP)(h,"'at' p")):"on ".concat((0,p.GP)(h,"do 'of' MMM', at' p")))):null:b?r.createElement(u.A,{testId:"trial-banner",width:"100%",background:w.ue[k],onClose:g,tooltipProps:{align:"top"},zIndex:20},r.createElement(x.A,{flavour:n,onUpdateClick:C})):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8637.0958494526e838a60d2b.js b/src/web/gui/v2/8637.0958494526e838a60d2b.js deleted file mode 100644 index 21e04559c..000000000 --- a/src/web/gui/v2/8637.0958494526e838a60d2b.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 8637.0958494526e838a60d2b.js.LICENSE.txt */ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="86db4fec-f805-4ffb-a487-2a38cbe66c27",e._sentryDebugIdIdentifier="sentry-dbid-86db4fec-f805-4ffb-a487-2a38cbe66c27")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8637],{43375:(e,t,n)=>{"use strict";n.d(t,{Mp:()=>Ye,Hd:()=>pt,vL:()=>ne,Pf:()=>xe,cA:()=>ge,IG:()=>ye,fp:()=>E,WB:()=>lt,Sj:()=>D,TT:()=>T,Qo:()=>R,fF:()=>Je,E5:()=>c,PM:()=>Qe,zM:()=>nt,MS:()=>v,FR:()=>y});var r=n(96540),o=n(40961),i=n(74979);const a={display:"none"};function s(e){let{id:t,value:n}=e;return r.createElement("div",{id:t,style:a},n)}function u(e){let{id:t,announcement:n,ariaLiveType:o="assertive"}=e;return r.createElement("div",{id:t,style:{position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"},role:"status","aria-live":o,"aria-atomic":!0},n)}const l=(0,r.createContext)(null);function c(e){const t=(0,r.useContext)(l);(0,r.useEffect)((()=>{if(!t)throw new Error("useDndMonitor must be used within a children of ");return t(e)}),[e,t])}const f={draggable:"\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n "},d={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was moved over droppable area "+n.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:n}=e;return n?"Draggable item "+t.id+" was dropped over droppable area "+n.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function h(e){let{announcements:t=d,container:n,hiddenTextDescribedById:a,screenReaderInstructions:l=f}=e;const{announce:h,announcement:p}=function(){const[e,t]=(0,r.useState)("");return{announce:(0,r.useCallback)((e=>{null!=e&&t(e)}),[]),announcement:e}}(),g=(0,i.YG)("DndLiveRegion"),[v,y]=(0,r.useState)(!1);if((0,r.useEffect)((()=>{y(!0)}),[]),c((0,r.useMemo)((()=>({onDragStart(e){let{active:n}=e;h(t.onDragStart({active:n}))},onDragMove(e){let{active:n,over:r}=e;t.onDragMove&&h(t.onDragMove({active:n,over:r}))},onDragOver(e){let{active:n,over:r}=e;h(t.onDragOver({active:n,over:r}))},onDragEnd(e){let{active:n,over:r}=e;h(t.onDragEnd({active:n,over:r}))},onDragCancel(e){let{active:n,over:r}=e;h(t.onDragCancel({active:n,over:r}))}})),[h,t])),!v)return null;const m=r.createElement(r.Fragment,null,r.createElement(s,{id:a,value:l.draggable}),r.createElement(u,{id:g,announcement:p}));return n?(0,o.createPortal)(m,n):m}var p;function g(){}function v(e,t){return(0,r.useMemo)((()=>({sensor:e,options:null!=t?t:{}})),[e,t])}function y(){for(var e=arguments.length,t=new Array(e),n=0;n[...t].filter((e=>null!=e))),[...t])}!function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"}(p||(p={}));const m=Object.freeze({x:0,y:0});function b(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function _(e,t){const n=(0,i.e_)(e);if(!n)return"0 0";return(n.x-t.left)/t.width*100+"% "+(n.y-t.top)/t.height*100+"%"}function w(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function x(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return r-n}function S(e){let{left:t,top:n,height:r,width:o}=e;return[{x:t,y:n},{x:t+o,y:n},{x:t,y:n+r},{x:t+o,y:n+r}]}function A(e,t,n){return void 0===t&&(t=e.left),void 0===n&&(n=e.top),{x:t+.5*e.width,y:n+.5*e.height}}const E=e=>{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const o=A(t,t.left,t.top),i=[];for(const a of r){const{id:e}=a,t=n.get(e);if(t){const n=b(A(t),o);i.push({id:e,data:{droppableContainer:a,value:n}})}}return i.sort(w)};function C(e,t){const n=Math.max(t.top,e.top),r=Math.max(t.left,e.left),o=Math.min(t.left+t.width,e.left+e.width),i=Math.min(t.top+t.height,e.top+e.height),a=o-r,s=i-n;if(r{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const o=[];for(const i of r){const{id:e}=i,r=n.get(e);if(r){const n=C(r,t);n>0&&o.push({id:e,data:{droppableContainer:i,value:n}})}}return o.sort(x)};function O(e,t){const{top:n,left:r,bottom:o,right:i}=t;return n<=e.y&&e.y<=o&&r<=e.x&&e.x<=i}const T=e=>{let{droppableContainers:t,droppableRects:n,pointerCoordinates:r}=e;if(!r)return[];const o=[];for(const i of t){const{id:e}=i,t=n.get(e);if(t&&O(r,t)){const n=S(t).reduce(((e,t)=>e+b(r,t)),0),a=Number((n/4).toFixed(4));o.push({id:e,data:{droppableContainer:i,value:a}})}}return o.sort(w)};function k(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:m}function M(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o({...t,top:t.top+e*n.y,bottom:t.bottom+e*n.y,left:t.left+e*n.x,right:t.right+e*n.x})),{...t})}}const P=M(1);function I(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}const N={ignoreTransform:!1};function D(e,t){void 0===t&&(t=N);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:t,transformOrigin:r}=(0,i.zk)(e).getComputedStyle(e);t&&(n=function(e,t,n){const r=I(t);if(!r)return e;const{scaleX:o,scaleY:i,x:a,y:s}=r,u=e.left-a-(1-o)*parseFloat(n),l=e.top-s-(1-i)*parseFloat(n.slice(n.indexOf(" ")+1)),c=o?e.width/o:e.width,f=i?e.height/i:e.height;return{width:c,height:f,top:l,right:u+c,bottom:l+f,left:u}}(n,t,r))}const{top:r,left:o,width:a,height:s,bottom:u,right:l}=n;return{top:r,left:o,width:a,height:s,bottom:u,right:l}}function L(e){return D(e,{ignoreTransform:!0})}function F(e,t){const n=[];return e?function r(o){if(null!=t&&n.length>=t)return n;if(!o)return n;if((0,i.wz)(o)&&null!=o.scrollingElement&&!n.includes(o.scrollingElement))return n.push(o.scrollingElement),n;if(!(0,i.sb)(o)||(0,i.xZ)(o))return n;if(n.includes(o))return n;const a=(0,i.zk)(e).getComputedStyle(o);return o!==e&&function(e,t){void 0===t&&(t=(0,i.zk)(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some((e=>{const r=t[e];return"string"===typeof r&&n.test(r)}))}(o,a)&&n.push(o),function(e,t){return void 0===t&&(t=(0,i.zk)(e).getComputedStyle(e)),"fixed"===t.position}(o,a)?n:r(o.parentNode)}(e):n}function j(e){const[t]=F(e,1);return null!=t?t:null}function U(e){return i.Sw&&e?(0,i.l6)(e)?e:(0,i.Ll)(e)?(0,i.wz)(e)||e===(0,i.TW)(e).scrollingElement?window:(0,i.sb)(e)?e:null:null:null}function z(e){return(0,i.l6)(e)?e.scrollX:e.scrollLeft}function B(e){return(0,i.l6)(e)?e.scrollY:e.scrollTop}function V(e){return{x:z(e),y:B(e)}}var $;function H(e){return!(!i.Sw||!e)&&e===document.scrollingElement}function W(e){const t={x:0,y:0},n=H(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height};return{isTop:e.scrollTop<=t.y,isLeft:e.scrollLeft<=t.x,isBottom:e.scrollTop>=r.y,isRight:e.scrollLeft>=r.x,maxScroll:r,minScroll:t}}!function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"}($||($={}));const q={x:.2,y:.2};function G(e,t,n,r,o){let{top:i,left:a,right:s,bottom:u}=n;void 0===r&&(r=10),void 0===o&&(o=q);const{isTop:l,isBottom:c,isLeft:f,isRight:d}=W(e),h={x:0,y:0},p={x:0,y:0},g=t.height*o.y,v=t.width*o.x;return!l&&i<=t.top+g?(h.y=$.Backward,p.y=r*Math.abs((t.top+g-i)/g)):!c&&u>=t.bottom-g&&(h.y=$.Forward,p.y=r*Math.abs((t.bottom-g-u)/g)),!d&&s>=t.right-v?(h.x=$.Forward,p.x=r*Math.abs((t.right-v-s)/v)):!f&&a<=t.left+v&&(h.x=$.Backward,p.x=r*Math.abs((t.left+v-a)/v)),{direction:h,speed:p}}function Y(e){if(e===document.scrollingElement){const{innerWidth:e,innerHeight:t}=window;return{top:0,left:0,right:e,bottom:t,width:e,height:t}}const{top:t,left:n,right:r,bottom:o}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:o,width:e.clientWidth,height:e.clientHeight}}function X(e){return e.reduce(((e,t)=>(0,i.WQ)(e,V(t))),m)}function K(e,t){if(void 0===t&&(t=D),!e)return;const{top:n,left:r,bottom:o,right:i}=t(e);j(e)&&(o<=0||i<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const Z=[["x",["left","right"],function(e){return e.reduce(((e,t)=>e+z(t)),0)}],["y",["top","bottom"],function(e){return e.reduce(((e,t)=>e+B(t)),0)}]];class Q{constructor(e,t){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const n=F(t),r=X(n);this.rect={...e},this.width=e.width,this.height=e.height;for(const[o,i,a]of Z)for(const e of i)Object.defineProperty(this,e,{get:()=>{const t=a(n),i=r[o]-t;return this.rect[e]+i},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class J{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach((e=>{var t;return null==(t=this.target)?void 0:t.removeEventListener(...e)}))},this.target=e}add(e,t,n){var r;null==(r=this.target)||r.addEventListener(e,t,n),this.listeners.push([e,t,n])}}function ee(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return"number"===typeof t?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t&&r>t.y}var te,ne;function re(e){e.preventDefault()}function oe(e){e.stopPropagation()}!function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"}(te||(te={})),function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"}(ne||(ne={}));const ie={start:[ne.Space,ne.Enter],cancel:[ne.Esc],end:[ne.Space,ne.Enter]},ae=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case ne.Right:return{...n,x:n.x+25};case ne.Left:return{...n,x:n.x-25};case ne.Down:return{...n,y:n.y+25};case ne.Up:return{...n,y:n.y-25}}};class se{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;const{event:{target:t}}=e;this.props=e,this.listeners=new J((0,i.TW)(t)),this.windowListeners=new J((0,i.zk)(t)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(te.Resize,this.handleCancel),this.windowListeners.add(te.VisibilityChange,this.handleCancel),setTimeout((()=>this.listeners.add(te.Keydown,this.handleKeyDown)))}handleStart(){const{activeNode:e,onStart:t}=this.props,n=e.node.current;n&&K(n),t(m)}handleKeyDown(e){if((0,i.kx)(e)){const{active:t,context:n,options:r}=this.props,{keyboardCodes:o=ie,coordinateGetter:a=ae,scrollBehavior:s="smooth"}=r,{code:u}=e;if(o.end.includes(u))return void this.handleEnd(e);if(o.cancel.includes(u))return void this.handleCancel(e);const{collisionRect:l}=n.current,c=l?{x:l.left,y:l.top}:m;this.referenceCoordinates||(this.referenceCoordinates=c);const f=a(e,{active:t,context:n.current,currentCoordinates:c});if(f){const t=(0,i.Re)(f,c),r={x:0,y:0},{scrollableAncestors:o}=n.current;for(const n of o){const o=e.code,{isTop:i,isRight:a,isLeft:u,isBottom:l,maxScroll:c,minScroll:d}=W(n),h=Y(n),p={x:Math.min(o===ne.Right?h.right-h.width/2:h.right,Math.max(o===ne.Right?h.left:h.left+h.width/2,f.x)),y:Math.min(o===ne.Down?h.bottom-h.height/2:h.bottom,Math.max(o===ne.Down?h.top:h.top+h.height/2,f.y))},g=o===ne.Right&&!a||o===ne.Left&&!u,v=o===ne.Down&&!l||o===ne.Up&&!i;if(g&&p.x!==f.x){const e=n.scrollLeft+t.x,i=o===ne.Right&&e<=c.x||o===ne.Left&&e>=d.x;if(i&&!t.y)return void n.scrollTo({left:e,behavior:s});r.x=i?n.scrollLeft-e:o===ne.Right?n.scrollLeft-c.x:n.scrollLeft-d.x,r.x&&n.scrollBy({left:-r.x,behavior:s});break}if(v&&p.y!==f.y){const e=n.scrollTop+t.y,i=o===ne.Down&&e<=c.y||o===ne.Up&&e>=d.y;if(i&&!t.x)return void n.scrollTo({top:e,behavior:s});r.y=i?n.scrollTop-e:o===ne.Down?n.scrollTop-c.y:n.scrollTop-d.y,r.y&&n.scrollBy({top:-r.y,behavior:s});break}}this.handleMove(e,(0,i.WQ)((0,i.Re)(f,this.referenceCoordinates),r))}}}handleMove(e,t){const{onMove:n}=this.props;e.preventDefault(),n(t)}handleEnd(e){const{onEnd:t}=this.props;e.preventDefault(),this.detach(),t()}handleCancel(e){const{onCancel:t}=this.props;e.preventDefault(),this.detach(),t()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}function ue(e){return Boolean(e&&"distance"in e)}function le(e){return Boolean(e&&"delay"in e)}se.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=ie,onActivation:o}=t,{active:i}=n;const{code:a}=e.nativeEvent;if(r.start.includes(a)){const t=i.activatorNode.current;return(!t||e.target===t)&&(e.preventDefault(),null==o||o({event:e.nativeEvent}),!0)}return!1}}];class ce{constructor(e,t,n){var r;void 0===n&&(n=function(e){const{EventTarget:t}=(0,i.zk)(e);return e instanceof t?e:(0,i.TW)(e)}(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=t;const{event:o}=e,{target:a}=o;this.props=e,this.events=t,this.document=(0,i.TW)(a),this.documentListeners=new J(this.document),this.listeners=new J(n),this.windowListeners=new J((0,i.zk)(a)),this.initialCoordinates=null!=(r=(0,i.e_)(o))?r:m,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:t,bypassActivationConstraint:n}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),this.windowListeners.add(te.Resize,this.handleCancel),this.windowListeners.add(te.DragStart,re),this.windowListeners.add(te.VisibilityChange,this.handleCancel),this.windowListeners.add(te.ContextMenu,re),this.documentListeners.add(te.Keydown,this.handleKeydown),t){if(null!=n&&n({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(le(t))return void(this.timeoutId=setTimeout(this.handleStart,t.delay));if(ue(t))return}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),null!==this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:e}=this,{onStart:t}=this.props;e&&(this.activated=!0,this.documentListeners.add(te.Click,oe,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(te.SelectionChange,this.removeTextSelection),t(e))}handleMove(e){var t;const{activated:n,initialCoordinates:r,props:o}=this,{onMove:a,options:{activationConstraint:s}}=o;if(!r)return;const u=null!=(t=(0,i.e_)(e))?t:m,l=(0,i.Re)(r,u);if(!n&&s){if(ue(s)){if(null!=s.tolerance&&ee(l,s.tolerance))return this.handleCancel();if(ee(l,s.distance))return this.handleStart()}return le(s)&&ee(l,s.tolerance)?this.handleCancel():void 0}e.cancelable&&e.preventDefault(),a(u)}handleEnd(){const{onEnd:e}=this.props;this.detach(),e()}handleCancel(){const{onCancel:e}=this.props;this.detach(),e()}handleKeydown(e){e.code===ne.Esc&&this.handleCancel()}removeTextSelection(){var e;null==(e=this.document.getSelection())||e.removeAllRanges()}}const fe={move:{name:"pointermove"},end:{name:"pointerup"}};class de extends ce{constructor(e){const{event:t}=e,n=(0,i.TW)(t.target);super(e,fe,n)}}de.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!(!n.isPrimary||0!==n.button)&&(null==r||r({event:n}),!0)}}];const he={move:{name:"mousemove"},end:{name:"mouseup"}};var pe;!function(e){e[e.RightClick=2]="RightClick"}(pe||(pe={}));class ge extends ce{constructor(e){super(e,he,(0,i.TW)(e.event.target))}}ge.activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button!==pe.RightClick&&(null==r||r({event:n}),!0)}}];const ve={move:{name:"touchmove"},end:{name:"touchend"}};class ye extends ce{constructor(e){super(e,ve)}static setup(){return window.addEventListener(ve.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(ve.move.name,e)};function e(){}}}var me,be;function _e(e){let{acceleration:t,activator:n=me.Pointer,canScroll:o,draggingRect:a,enabled:s,interval:u=5,order:l=be.TreeOrder,pointerCoordinates:c,scrollableAncestors:f,scrollableAncestorRects:d,delta:h,threshold:p}=e;const g=function(e){let{delta:t,disabled:n}=e;const r=(0,i.ZC)(t);return(0,i.KG)((e=>{if(n||!r||!e)return we;const o={x:Math.sign(t.x-r.x),y:Math.sign(t.y-r.y)};return{x:{[$.Backward]:e.x[$.Backward]||-1===o.x,[$.Forward]:e.x[$.Forward]||1===o.x},y:{[$.Backward]:e.y[$.Backward]||-1===o.y,[$.Forward]:e.y[$.Forward]||1===o.y}}}),[n,t,r])}({delta:h,disabled:!s}),[v,y]=(0,i.$$)(),m=(0,r.useRef)({x:0,y:0}),b=(0,r.useRef)({x:0,y:0}),_=(0,r.useMemo)((()=>{switch(n){case me.Pointer:return c?{top:c.y,bottom:c.y,left:c.x,right:c.x}:null;case me.DraggableRect:return a}}),[n,a,c]),w=(0,r.useRef)(null),x=(0,r.useCallback)((()=>{const e=w.current;if(!e)return;const t=m.current.x*b.current.x,n=m.current.y*b.current.y;e.scrollBy(t,n)}),[]),S=(0,r.useMemo)((()=>l===be.TreeOrder?[...f].reverse():f),[l,f]);(0,r.useEffect)((()=>{if(s&&f.length&&_){for(const e of S){if(!1===(null==o?void 0:o(e)))continue;const n=f.indexOf(e),r=d[n];if(!r)continue;const{direction:i,speed:a}=G(e,r,_,t,p);for(const e of["x","y"])g[e][i[e]]||(a[e]=0,i[e]=0);if(a.x>0||a.y>0)return y(),w.current=e,v(x,u),m.current=a,void(b.current=i)}m.current={x:0,y:0},b.current={x:0,y:0},y()}else y()}),[t,x,o,y,s,u,JSON.stringify(_),JSON.stringify(g),v,f,S,d,JSON.stringify(p)])}ye.activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:o}=n;return!(o.length>1)&&(null==r||r({event:n}),!0)}}],function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"}(me||(me={})),function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"}(be||(be={}));const we={x:{[$.Backward]:!1,[$.Forward]:!1},y:{[$.Backward]:!1,[$.Forward]:!1}};var xe,Se;!function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"}(xe||(xe={})),function(e){e.Optimized="optimized"}(Se||(Se={}));const Ae=new Map;function Ee(e,t){return(0,i.KG)((n=>e?n||("function"===typeof t?t(e):e):null),[t,e])}function Ce(e){let{callback:t,disabled:n}=e;const o=(0,i._q)(t),a=(0,r.useMemo)((()=>{if(n||"undefined"===typeof window||"undefined"===typeof window.ResizeObserver)return;const{ResizeObserver:e}=window;return new e(o)}),[n]);return(0,r.useEffect)((()=>()=>null==a?void 0:a.disconnect()),[a]),a}function Re(e){return new Q(D(e),e)}function Oe(e,t,n){void 0===t&&(t=Re);const[o,a]=(0,r.useReducer)((function(r){if(!e)return null;var o;if(!1===e.isConnected)return null!=(o=null!=r?r:n)?o:null;const i=t(e);if(JSON.stringify(r)===JSON.stringify(i))return r;return i}),null),s=function(e){let{callback:t,disabled:n}=e;const o=(0,i._q)(t),a=(0,r.useMemo)((()=>{if(n||"undefined"===typeof window||"undefined"===typeof window.MutationObserver)return;const{MutationObserver:e}=window;return new e(o)}),[o,n]);return(0,r.useEffect)((()=>()=>null==a?void 0:a.disconnect()),[a]),a}({callback(t){if(e)for(const n of t){const{type:t,target:r}=n;if("childList"===t&&r instanceof HTMLElement&&r.contains(e)){a();break}}}}),u=Ce({callback:a});return(0,i.Es)((()=>{a(),e?(null==u||u.observe(e),null==s||s.observe(document.body,{childList:!0,subtree:!0})):(null==u||u.disconnect(),null==s||s.disconnect())}),[e]),o}const Te=[];function ke(e,t){void 0===t&&(t=[]);const n=(0,r.useRef)(null);return(0,r.useEffect)((()=>{n.current=null}),t),(0,r.useEffect)((()=>{const t=e!==m;t&&!n.current&&(n.current=e),!t&&n.current&&(n.current=null)}),[e]),n.current?(0,i.Re)(e,n.current):m}function Me(e){return(0,r.useMemo)((()=>e?function(e){const t=e.innerWidth,n=e.innerHeight;return{top:0,left:0,right:t,bottom:n,width:t,height:n}}(e):null),[e])}const Pe=[];function Ie(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return(0,i.sb)(t)?t:e}const Ne=[{sensor:de,options:{}},{sensor:se,options:{}}],De={current:{}},Le={draggable:{measure:L},droppable:{measure:L,strategy:xe.WhileDragging,frequency:Se.Optimized},dragOverlay:{measure:D}};class Fe extends Map{get(e){var t;return null!=e&&null!=(t=super.get(e))?t:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter((e=>{let{disabled:t}=e;return!t}))}getNodeFor(e){var t,n;return null!=(t=null==(n=this.get(e))?void 0:n.node.current)?t:void 0}}const je={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Fe,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:g},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Le,measureDroppableContainers:g,windowRect:null,measuringScheduled:!1},Ue={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:g,draggableNodes:new Map,over:null,measureDroppableContainers:g},ze=(0,r.createContext)(Ue),Be=(0,r.createContext)(je);function Ve(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Fe}}}function $e(e,t){switch(t.type){case p.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case p.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case p.DragEnd:case p.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case p.RegisterDroppable:{const{element:n}=t,{id:r}=n,o=new Fe(e.droppable.containers);return o.set(r,n),{...e,droppable:{...e.droppable,containers:o}}}case p.SetDroppableDisabled:{const{id:n,key:r,disabled:o}=t,i=e.droppable.containers.get(n);if(!i||r!==i.key)return e;const a=new Fe(e.droppable.containers);return a.set(n,{...i,disabled:o}),{...e,droppable:{...e.droppable,containers:a}}}case p.UnregisterDroppable:{const{id:n,key:r}=t,o=e.droppable.containers.get(n);if(!o||r!==o.key)return e;const i=new Fe(e.droppable.containers);return i.delete(n),{...e,droppable:{...e.droppable,containers:i}}}default:return e}}function He(e){let{disabled:t}=e;const{active:n,activatorEvent:o,draggableNodes:a}=(0,r.useContext)(ze),s=(0,i.ZC)(o),u=(0,i.ZC)(null==n?void 0:n.id);return(0,r.useEffect)((()=>{if(!t&&!o&&s&&null!=u){if(!(0,i.kx)(s))return;if(document.activeElement===s.target)return;const e=a.get(u);if(!e)return;const{activatorNode:t,node:n}=e;if(!t.current&&!n.current)return;requestAnimationFrame((()=>{for(const e of[t.current,n.current]){if(!e)continue;const t=(0,i.ag)(e);if(t){t.focus();break}}}))}}),[o,t,a,u,s]),null}function We(e,t){let{transform:n,...r}=t;return null!=e&&e.length?e.reduce(((e,t)=>t({transform:e,...r})),n):n}const qe=(0,r.createContext)({...m,scaleX:1,scaleY:1});var Ge;!function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"}(Ge||(Ge={}));const Ye=(0,r.memo)((function(e){var t,n,a,s;let{id:u,accessibility:c,autoScroll:f=!0,children:d,sensors:g=Ne,collisionDetection:v=R,measuring:y,modifiers:b,..._}=e;const w=(0,r.useReducer)($e,void 0,Ve),[x,S]=w,[A,E]=function(){const[e]=(0,r.useState)((()=>new Set)),t=(0,r.useCallback)((t=>(e.add(t),()=>e.delete(t))),[e]);return[(0,r.useCallback)((t=>{let{type:n,event:r}=t;e.forEach((e=>{var t;return null==(t=e[n])?void 0:t.call(e,r)}))}),[e]),t]}(),[C,O]=(0,r.useState)(Ge.Uninitialized),T=C===Ge.Initialized,{draggable:{active:M,nodes:I,translate:N},droppable:{containers:L}}=x,z=M?I.get(M):null,B=(0,r.useRef)({initial:null,translated:null}),$=(0,r.useMemo)((()=>{var e;return null!=M?{id:M,data:null!=(e=null==z?void 0:z.data)?e:De,rect:B}:null}),[M,z]),W=(0,r.useRef)(null),[q,G]=(0,r.useState)(null),[Y,K]=(0,r.useState)(null),Z=(0,i.YN)(_,Object.values(_)),J=(0,i.YG)("DndDescribedBy",u),ee=(0,r.useMemo)((()=>L.getEnabled()),[L]),te=(ne=y,(0,r.useMemo)((()=>({draggable:{...Le.draggable,...null==ne?void 0:ne.draggable},droppable:{...Le.droppable,...null==ne?void 0:ne.droppable},dragOverlay:{...Le.dragOverlay,...null==ne?void 0:ne.dragOverlay}})),[null==ne?void 0:ne.draggable,null==ne?void 0:ne.droppable,null==ne?void 0:ne.dragOverlay]));var ne;const{droppableRects:re,measureDroppableContainers:oe,measuringScheduled:ie}=function(e,t){let{dragging:n,dependencies:o,config:a}=t;const[s,u]=(0,r.useState)(null),{frequency:l,measure:c,strategy:f}=a,d=(0,r.useRef)(e),h=function(){switch(f){case xe.Always:return!1;case xe.BeforeDragging:return n;default:return!n}}(),p=(0,i.YN)(h),g=(0,r.useCallback)((function(e){void 0===e&&(e=[]),p.current||u((t=>null===t?e:t.concat(e.filter((e=>!t.includes(e))))))}),[p]),v=(0,r.useRef)(null),y=(0,i.KG)((t=>{if(h&&!n)return Ae;if(!t||t===Ae||d.current!==e||null!=s){const t=new Map;for(let n of e){if(!n)continue;if(s&&s.length>0&&!s.includes(n.id)&&n.rect.current){t.set(n.id,n.rect.current);continue}const e=n.node.current,r=e?new Q(c(e),e):null;n.rect.current=r,r&&t.set(n.id,r)}return t}return t}),[e,s,n,h,c]);return(0,r.useEffect)((()=>{d.current=e}),[e]),(0,r.useEffect)((()=>{h||g()}),[n,h]),(0,r.useEffect)((()=>{s&&s.length>0&&u(null)}),[JSON.stringify(s)]),(0,r.useEffect)((()=>{h||"number"!==typeof l||null!==v.current||(v.current=setTimeout((()=>{g(),v.current=null}),l))}),[l,h,g,...o]),{droppableRects:y,measureDroppableContainers:g,measuringScheduled:null!=s}}(ee,{dragging:T,dependencies:[N.x,N.y],config:te.droppable}),ae=function(e,t){const n=null!==t?e.get(t):void 0,r=n?n.node.current:null;return(0,i.KG)((e=>{var n;return null===t?null:null!=(n=null!=r?r:e)?n:null}),[r,t])}(I,M),se=(0,r.useMemo)((()=>Y?(0,i.e_)(Y):null),[Y]),ue=function(){const e=!1===(null==q?void 0:q.autoScrollEnabled),t="object"===typeof f?!1===f.enabled:!1===f,n=T&&!e&&!t;if("object"===typeof f)return{...f,enabled:n};return{enabled:n}}(),le=function(e,t){return Ee(e,t)}(ae,te.draggable.measure);!function(e){let{activeNode:t,measure:n,initialRect:o,config:a=!0}=e;const s=(0,r.useRef)(!1),{x:u,y:l}="boolean"===typeof a?{x:a,y:a}:a;(0,i.Es)((()=>{if(!u&&!l||!t)return void(s.current=!1);if(s.current||!o)return;const e=null==t?void 0:t.node.current;if(!e||!1===e.isConnected)return;const r=k(n(e),o);if(u||(r.x=0),l||(r.y=0),s.current=!0,Math.abs(r.x)>0||Math.abs(r.y)>0){const t=j(e);t&&t.scrollBy({top:r.y,left:r.x})}}),[t,u,l,o,n])}({activeNode:M?I.get(M):null,config:ue.layoutShiftCompensation,initialRect:le,measure:te.draggable.measure});const ce=Oe(ae,te.draggable.measure,le),fe=Oe(ae?ae.parentElement:null),de=(0,r.useRef)({activatorEvent:null,active:null,activeNode:ae,collisionRect:null,collisions:null,droppableRects:re,draggableNodes:I,draggingNode:null,draggingNodeRect:null,droppableContainers:L,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),he=L.getNodeFor(null==(t=de.current.over)?void 0:t.id),pe=function(e){let{measure:t}=e;const[n,o]=(0,r.useState)(null),a=Ce({callback:(0,r.useCallback)((e=>{for(const{target:n}of e)if((0,i.sb)(n)){o((e=>{const r=t(n);return e?{...e,width:r.width,height:r.height}:r}));break}}),[t])}),s=(0,r.useCallback)((e=>{const n=Ie(e);null==a||a.disconnect(),n&&(null==a||a.observe(n)),o(n?t(n):null)}),[t,a]),[u,l]=(0,i.lk)(s);return(0,r.useMemo)((()=>({nodeRef:u,rect:n,setRef:l})),[n,u,l])}({measure:te.dragOverlay.measure}),ge=null!=(n=pe.nodeRef.current)?n:ae,ve=T?null!=(a=pe.rect)?a:ce:null,ye=Boolean(pe.nodeRef.current&&pe.rect),me=k(be=ye?null:ce,Ee(be));var be;const we=Me(ge?(0,i.zk)(ge):null),Se=function(e){const t=(0,r.useRef)(e),n=(0,i.KG)((n=>e?n&&n!==Te&&e&&t.current&&e.parentNode===t.current.parentNode?n:F(e):Te),[e]);return(0,r.useEffect)((()=>{t.current=e}),[e]),n}(T?null!=he?he:ae:null),Re=function(e,t){void 0===t&&(t=D);const[n]=e,o=Me(n?(0,i.zk)(n):null),[a,s]=(0,r.useReducer)((function(){return e.length?e.map((e=>H(e)?o:new Q(t(e),e))):Pe}),Pe),u=Ce({callback:s});return e.length>0&&a===Pe&&s(),(0,i.Es)((()=>{e.length?e.forEach((e=>null==u?void 0:u.observe(e))):(null==u||u.disconnect(),s())}),[e]),a}(Se),Fe=We(b,{transform:{x:N.x-me.x,y:N.y-me.y,scaleX:1,scaleY:1},activatorEvent:Y,active:$,activeNodeRect:ce,containerNodeRect:fe,draggingNodeRect:ve,over:de.current.over,overlayNodeRect:pe.rect,scrollableAncestors:Se,scrollableAncestorRects:Re,windowRect:we}),je=se?(0,i.WQ)(se,N):null,Ue=function(e){const[t,n]=(0,r.useState)(null),o=(0,r.useRef)(e),a=(0,r.useCallback)((e=>{const t=U(e.target);t&&n((e=>e?(e.set(t,V(t)),new Map(e)):null))}),[]);return(0,r.useEffect)((()=>{const t=o.current;if(e!==t){r(t);const i=e.map((e=>{const t=U(e);return t?(t.addEventListener("scroll",a,{passive:!0}),[t,V(t)]):null})).filter((e=>null!=e));n(i.length?new Map(i):null),o.current=e}return()=>{r(e),r(t)};function r(e){e.forEach((e=>{const t=U(e);null==t||t.removeEventListener("scroll",a)}))}}),[a,e]),(0,r.useMemo)((()=>e.length?t?Array.from(t.values()).reduce(((e,t)=>(0,i.WQ)(e,t)),m):X(e):m),[e,t])}(Se),Ye=ke(Ue),Xe=ke(Ue,[ce]),Ke=(0,i.WQ)(Fe,Ye),Ze=ve?P(ve,Fe):null,Qe=$&&Ze?v({active:$,collisionRect:Ze,droppableRects:re,droppableContainers:ee,pointerCoordinates:je}):null,Je=function(e,t){if(!e||0===e.length)return null;const[n]=e;return t?n[t]:n}(Qe,"id"),[et,tt]=(0,r.useState)(null),nt=function(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}(ye?Fe:(0,i.WQ)(Fe,Xe),null!=(s=null==et?void 0:et.rect)?s:null,ce),rt=(0,r.useCallback)(((e,t)=>{let{sensor:n,options:r}=t;if(null==W.current)return;const i=I.get(W.current);if(!i)return;const a=e.nativeEvent,s=new n({active:W.current,activeNode:i,event:a,options:r,context:de,onStart(e){const t=W.current;if(null==t)return;const n=I.get(t);if(!n)return;const{onDragStart:r}=Z.current,i={active:{id:t,data:n.data,rect:B}};(0,o.unstable_batchedUpdates)((()=>{null==r||r(i),O(Ge.Initializing),S({type:p.DragStart,initialCoordinates:e,active:t}),A({type:"onDragStart",event:i})}))},onMove(e){S({type:p.DragMove,coordinates:e})},onEnd:u(p.DragEnd),onCancel:u(p.DragCancel)});function u(e){return async function(){const{active:t,collisions:n,over:r,scrollAdjustedTranslate:i}=de.current;let s=null;if(t&&i){const{cancelDrop:o}=Z.current;if(s={activatorEvent:a,active:t,collisions:n,delta:i,over:r},e===p.DragEnd&&"function"===typeof o){await Promise.resolve(o(s))&&(e=p.DragCancel)}}W.current=null,(0,o.unstable_batchedUpdates)((()=>{S({type:e}),O(Ge.Uninitialized),tt(null),G(null),K(null);const t=e===p.DragEnd?"onDragEnd":"onDragCancel";if(s){const e=Z.current[t];null==e||e(s),A({type:t,event:s})}}))}}(0,o.unstable_batchedUpdates)((()=>{G(s),K(e.nativeEvent)}))}),[I]),ot=(0,r.useCallback)(((e,t)=>(n,r)=>{const o=n.nativeEvent,i=I.get(r);if(null!==W.current||!i||o.dndKit||o.defaultPrevented)return;const a={active:i};!0===e(n,t.options,a)&&(o.dndKit={capturedBy:t.sensor},W.current=r,rt(n,t))}),[I,rt]),it=function(e,t){return(0,r.useMemo)((()=>e.reduce(((e,n)=>{const{sensor:r}=n;return[...e,...r.activators.map((e=>({eventName:e.eventName,handler:t(e.handler,n)})))]}),[])),[e,t])}(g,ot);!function(e){(0,r.useEffect)((()=>{if(!i.Sw)return;const t=e.map((e=>{let{sensor:t}=e;return null==t.setup?void 0:t.setup()}));return()=>{for(const e of t)null==e||e()}}),e.map((e=>{let{sensor:t}=e;return t})))}(g),(0,i.Es)((()=>{ce&&C===Ge.Initializing&&O(Ge.Initialized)}),[ce,C]),(0,r.useEffect)((()=>{const{onDragMove:e}=Z.current,{active:t,activatorEvent:n,collisions:r,over:i}=de.current;if(!t||!n)return;const a={active:t,activatorEvent:n,collisions:r,delta:{x:Ke.x,y:Ke.y},over:i};(0,o.unstable_batchedUpdates)((()=>{null==e||e(a),A({type:"onDragMove",event:a})}))}),[Ke.x,Ke.y]),(0,r.useEffect)((()=>{const{active:e,activatorEvent:t,collisions:n,droppableContainers:r,scrollAdjustedTranslate:i}=de.current;if(!e||null==W.current||!t||!i)return;const{onDragOver:a}=Z.current,s=r.get(Je),u=s&&s.rect.current?{id:s.id,rect:s.rect.current,data:s.data,disabled:s.disabled}:null,l={active:e,activatorEvent:t,collisions:n,delta:{x:i.x,y:i.y},over:u};(0,o.unstable_batchedUpdates)((()=>{tt(u),null==a||a(l),A({type:"onDragOver",event:l})}))}),[Je]),(0,i.Es)((()=>{de.current={activatorEvent:Y,active:$,activeNode:ae,collisionRect:Ze,collisions:Qe,droppableRects:re,draggableNodes:I,draggingNode:ge,draggingNodeRect:ve,droppableContainers:L,over:et,scrollableAncestors:Se,scrollAdjustedTranslate:Ke},B.current={initial:ve,translated:Ze}}),[$,ae,Qe,Ze,I,ge,ve,re,L,et,Se,Ke]),_e({...ue,delta:N,draggingRect:Ze,pointerCoordinates:je,scrollableAncestors:Se,scrollableAncestorRects:Re});const at=(0,r.useMemo)((()=>({active:$,activeNode:ae,activeNodeRect:ce,activatorEvent:Y,collisions:Qe,containerNodeRect:fe,dragOverlay:pe,draggableNodes:I,droppableContainers:L,droppableRects:re,over:et,measureDroppableContainers:oe,scrollableAncestors:Se,scrollableAncestorRects:Re,measuringConfiguration:te,measuringScheduled:ie,windowRect:we})),[$,ae,ce,Y,Qe,fe,pe,I,L,re,et,oe,Se,Re,te,ie,we]),st=(0,r.useMemo)((()=>({activatorEvent:Y,activators:it,active:$,activeNodeRect:ce,ariaDescribedById:{draggable:J},dispatch:S,draggableNodes:I,over:et,measureDroppableContainers:oe})),[Y,it,$,ce,S,J,I,et,oe]);return r.createElement(l.Provider,{value:E},r.createElement(ze.Provider,{value:st},r.createElement(Be.Provider,{value:at},r.createElement(qe.Provider,{value:nt},d)),r.createElement(He,{disabled:!1===(null==c?void 0:c.restoreFocus)})),r.createElement(h,{...c,hiddenTextDescribedById:J}))})),Xe=(0,r.createContext)(null),Ke="button",Ze="Droppable";function Qe(e){let{id:t,data:n,disabled:o=!1,attributes:a}=e;const s=(0,i.YG)(Ze),{activators:u,activatorEvent:l,active:c,activeNodeRect:f,ariaDescribedById:d,draggableNodes:h,over:p}=(0,r.useContext)(ze),{role:g=Ke,roleDescription:v="draggable",tabIndex:y=0}=null!=a?a:{},m=(null==c?void 0:c.id)===t,b=(0,r.useContext)(m?qe:Xe),[_,w]=(0,i.lk)(),[x,S]=(0,i.lk)(),A=function(e,t){return(0,r.useMemo)((()=>e.reduce(((e,n)=>{let{eventName:r,handler:o}=n;return e[r]=e=>{o(e,t)},e}),{})),[e,t])}(u,t),E=(0,i.YN)(n);(0,i.Es)((()=>(h.set(t,{id:t,key:s,node:_,activatorNode:x,data:E}),()=>{const e=h.get(t);e&&e.key===s&&h.delete(t)})),[h,t]);return{active:c,activatorEvent:l,activeNodeRect:f,attributes:(0,r.useMemo)((()=>({role:g,tabIndex:y,"aria-disabled":o,"aria-pressed":!(!m||g!==Ke)||void 0,"aria-roledescription":v,"aria-describedby":d.draggable})),[o,g,y,m,v,d.draggable]),isDragging:m,listeners:o?void 0:A,node:_,over:p,setNodeRef:w,setActivatorNodeRef:S,transform:b}}function Je(){return(0,r.useContext)(Be)}const et="Droppable",tt={timeout:25};function nt(e){let{data:t,disabled:n=!1,id:o,resizeObserverConfig:a}=e;const s=(0,i.YG)(et),{active:u,dispatch:l,over:c,measureDroppableContainers:f}=(0,r.useContext)(ze),d=(0,r.useRef)({disabled:n}),h=(0,r.useRef)(!1),g=(0,r.useRef)(null),v=(0,r.useRef)(null),{disabled:y,updateMeasurementsFor:m,timeout:b}={...tt,...a},_=(0,i.YN)(null!=m?m:o),w=Ce({callback:(0,r.useCallback)((()=>{h.current?(null!=v.current&&clearTimeout(v.current),v.current=setTimeout((()=>{f(Array.isArray(_.current)?_.current:[_.current]),v.current=null}),b)):h.current=!0}),[b]),disabled:y||!u}),x=(0,r.useCallback)(((e,t)=>{w&&(t&&(w.unobserve(t),h.current=!1),e&&w.observe(e))}),[w]),[S,A]=(0,i.lk)(x),E=(0,i.YN)(t);return(0,r.useEffect)((()=>{w&&S.current&&(w.disconnect(),h.current=!1,w.observe(S.current))}),[S,w]),(0,i.Es)((()=>(l({type:p.RegisterDroppable,element:{id:o,key:s,disabled:n,node:S,rect:g,data:E}}),()=>l({type:p.UnregisterDroppable,key:s,id:o}))),[o]),(0,r.useEffect)((()=>{n!==d.current.disabled&&(l({type:p.SetDroppableDisabled,id:o,key:s,disabled:n}),d.current.disabled=n)}),[o,s,n,l]),{active:u,rect:g,isOver:(null==c?void 0:c.id)===o,node:S,over:c,setNodeRef:A}}function rt(e){let{animation:t,children:n}=e;const[o,a]=(0,r.useState)(null),[s,u]=(0,r.useState)(null),l=(0,i.ZC)(n);return n||o||!l||a(l),(0,i.Es)((()=>{if(!s)return;const e=null==o?void 0:o.key,n=null==o?void 0:o.props.id;null!=e&&null!=n?Promise.resolve(t(n,s)).then((()=>{a(null)})):a(null)}),[t,o,s]),r.createElement(r.Fragment,null,n,o?(0,r.cloneElement)(o,{ref:u}):null)}const ot={x:0,y:0,scaleX:1,scaleY:1};function it(e){let{children:t}=e;return r.createElement(ze.Provider,{value:Ue},r.createElement(qe.Provider,{value:ot},t))}const at={position:"fixed",touchAction:"none"},st=e=>(0,i.kx)(e)?"transform 250ms ease":void 0,ut=(0,r.forwardRef)(((e,t)=>{let{as:n,activatorEvent:o,adjustScale:a,children:s,className:u,rect:l,style:c,transform:f,transition:d=st}=e;if(!l)return null;const h=a?f:{...f,scaleX:1,scaleY:1},p={...at,width:l.width,height:l.height,top:l.top,left:l.left,transform:i.Ks.Transform.toString(h),transformOrigin:a&&o?_(o,l):void 0,transition:"function"===typeof d?d(o):d,...c};return r.createElement(n,{className:u,style:p,ref:t},s)})),lt=e=>t=>{let{active:n,dragOverlay:r}=t;const o={},{styles:i,className:a}=e;if(null!=i&&i.active)for(const[e,s]of Object.entries(i.active))void 0!==s&&(o[e]=n.node.style.getPropertyValue(e),n.node.style.setProperty(e,s));if(null!=i&&i.dragOverlay)for(const[e,s]of Object.entries(i.dragOverlay))void 0!==s&&r.node.style.setProperty(e,s);return null!=a&&a.active&&n.node.classList.add(a.active),null!=a&&a.dragOverlay&&r.node.classList.add(a.dragOverlay),function(){for(const[e,t]of Object.entries(o))n.node.style.setProperty(e,t);null!=a&&a.active&&n.node.classList.remove(a.active)}},ct={duration:250,easing:"ease",keyframes:e=>{let{transform:{initial:t,final:n}}=e;return[{transform:i.Ks.Transform.toString(t)},{transform:i.Ks.Transform.toString(n)}]},sideEffects:lt({styles:{active:{opacity:"0"}}})};function ft(e){let{config:t,draggableNodes:n,droppableContainers:r,measuringConfiguration:o}=e;return(0,i._q)(((e,a)=>{if(null===t)return;const s=n.get(e);if(!s)return;const u=s.node.current;if(!u)return;const l=Ie(a);if(!l)return;const{transform:c}=(0,i.zk)(a).getComputedStyle(a),f=I(c);if(!f)return;const d="function"===typeof t?t:function(e){const{duration:t,easing:n,sideEffects:r,keyframes:o}={...ct,...e};return e=>{let{active:i,dragOverlay:a,transform:s,...u}=e;if(!t)return;const l={x:a.rect.left-i.rect.left,y:a.rect.top-i.rect.top},c={scaleX:1!==s.scaleX?i.rect.width*s.scaleX/a.rect.width:1,scaleY:1!==s.scaleY?i.rect.height*s.scaleY/a.rect.height:1},f={x:s.x-l.x,y:s.y-l.y,...c},d=o({...u,active:i,dragOverlay:a,transform:{initial:s,final:f}}),[h]=d,p=d[d.length-1];if(JSON.stringify(h)===JSON.stringify(p))return;const g=null==r?void 0:r({active:i,dragOverlay:a,...u}),v=a.node.animate(d,{duration:t,easing:n,fill:"forwards"});return new Promise((e=>{v.onfinish=()=>{null==g||g(),e()}}))}}(t);return K(u,o.draggable.measure),d({active:{id:e,data:s.data,node:u,rect:o.draggable.measure(u)},draggableNodes:n,dragOverlay:{node:a,rect:o.dragOverlay.measure(l)},droppableContainers:r,measuringConfiguration:o,transform:f})}))}let dt=0;function ht(e){return(0,r.useMemo)((()=>{if(null!=e)return dt++,dt}),[e])}const pt=r.memo((e=>{let{adjustScale:t=!1,children:n,dropAnimation:o,style:i,transition:a,modifiers:s,wrapperElement:u="div",className:l,zIndex:c=999}=e;const{activatorEvent:f,active:d,activeNodeRect:h,containerNodeRect:p,draggableNodes:g,droppableContainers:v,dragOverlay:y,over:m,measuringConfiguration:b,scrollableAncestors:_,scrollableAncestorRects:w,windowRect:x}=Je(),S=(0,r.useContext)(qe),A=ht(null==d?void 0:d.id),E=We(s,{activatorEvent:f,active:d,activeNodeRect:h,containerNodeRect:p,draggingNodeRect:y.rect,over:m,overlayNodeRect:y.rect,scrollableAncestors:_,scrollableAncestorRects:w,transform:S,windowRect:x}),C=Ee(h),R=ft({config:o,draggableNodes:g,droppableContainers:v,measuringConfiguration:b}),O=C?y.setRef:void 0;return r.createElement(it,null,r.createElement(rt,{animation:R},d&&A?r.createElement(ut,{key:A,id:d.id,ref:O,as:u,activatorEvent:f,adjustScale:t,className:l,transition:a,rect:C,style:{zIndex:c,...i},transform:E},n):null))}))},43627:(e,t,n)=>{"use strict";n.d(t,{_G:()=>h,be:()=>a,gB:()=>v,gl:()=>S,m$:()=>c,uU:()=>m});var r=n(96540),o=n(43375),i=n(74979);function a(e,t,n){const r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function s(e,t){return e.reduce(((e,n,r)=>{const o=t.get(n);return o&&(e[r]=o),e}),Array(e.length))}function u(e){return null!==e&&e>=0}const l={scaleX:1,scaleY:1},c=e=>{var t;let{rects:n,activeNodeRect:r,activeIndex:o,overIndex:i,index:a}=e;const s=null!=(t=n[o])?t:r;if(!s)return null;const u=function(e,t,n){const r=e[t],o=e[t-1],i=e[t+1];if(!r||!o&&!i)return 0;if(no&&a<=i?{x:-s.width-u,y:0,...l}:a=i?{x:s.width+u,y:0,...l}:{x:0,y:0,...l}};const f=e=>{let{rects:t,activeIndex:n,overIndex:r,index:o}=e;const i=a(t,r,n),s=t[o],u=i[o];return u&&s?{x:u.left-s.left,y:u.top-s.top,scaleX:u.width/s.width,scaleY:u.height/s.height}:null},d={scaleX:1,scaleY:1},h=e=>{var t;let{activeIndex:n,activeNodeRect:r,index:o,rects:i,overIndex:a}=e;const s=null!=(t=i[n])?t:r;if(!s)return null;if(o===n){const e=i[a];return e?{x:0,y:nn&&o<=a?{x:0,y:-s.height-u,...d}:o=a?{x:0,y:s.height+u,...d}:{x:0,y:0,...d}};const p="Sortable",g=r.createContext({activeIndex:-1,containerId:p,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:f,disabled:{draggable:!1,droppable:!1}});function v(e){let{children:t,id:n,items:a,strategy:u=f,disabled:l=!1}=e;const{active:c,dragOverlay:d,droppableRects:h,over:v,measureDroppableContainers:y}=(0,o.fF)(),m=(0,i.YG)(p,n),b=Boolean(null!==d.rect),_=(0,r.useMemo)((()=>a.map((e=>"object"===typeof e&&"id"in e?e.id:e))),[a]),w=null!=c,x=c?_.indexOf(c.id):-1,S=v?_.indexOf(v.id):-1,A=(0,r.useRef)(_),E=!function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{E&&w&&y(_)}),[E,_,w,y]),(0,r.useEffect)((()=>{A.current=_}),[_]);const O=(0,r.useMemo)((()=>({activeIndex:x,containerId:m,disabled:R,disableTransforms:C,items:_,overIndex:S,useDragOverlay:b,sortedRects:s(_,h),strategy:u})),[x,m,R.draggable,R.droppable,C,_,S,h,b,u]);return r.createElement(g.Provider,{value:O},t)}const y=e=>{let{id:t,items:n,activeIndex:r,overIndex:o}=e;return a(n,r,o).indexOf(t)},m=e=>{let{containerId:t,isSorting:n,wasDragging:r,index:o,items:i,newIndex:a,previousItems:s,previousContainerId:u,transition:l}=e;return!(!l||!r)&&((s===i||o!==a)&&(!!n||a!==o&&t===u))},b={duration:200,easing:"ease"},_="transform",w=i.Ks.Transition.toString({property:_,duration:0,easing:"linear"}),x={roleDescription:"sortable"};function S(e){let{animateLayoutChanges:t=m,attributes:n,disabled:a,data:s,getNewIndex:l=y,id:c,strategy:f,resizeObserverConfig:d,transition:h=b}=e;const{items:p,containerId:v,activeIndex:S,disabled:A,disableTransforms:E,sortedRects:C,overIndex:R,useDragOverlay:O,strategy:T}=(0,r.useContext)(g),k=function(e,t){var n,r;if("boolean"===typeof e)return{draggable:e,droppable:!1};return{draggable:null!=(n=null==e?void 0:e.draggable)?n:t.draggable,droppable:null!=(r=null==e?void 0:e.droppable)?r:t.droppable}}(a,A),M=p.indexOf(c),P=(0,r.useMemo)((()=>({sortable:{containerId:v,index:M,items:p},...s})),[v,s,M,p]),I=(0,r.useMemo)((()=>p.slice(p.indexOf(c))),[p,c]),{rect:N,node:D,isOver:L,setNodeRef:F}=(0,o.zM)({id:c,data:P,disabled:k.droppable,resizeObserverConfig:{updateMeasurementsFor:I,...d}}),{active:j,activatorEvent:U,activeNodeRect:z,attributes:B,setNodeRef:V,listeners:$,isDragging:H,over:W,setActivatorNodeRef:q,transform:G}=(0,o.PM)({id:c,data:P,attributes:{...x,...n},disabled:k.draggable}),Y=(0,i.jn)(F,V),X=Boolean(j),K=X&&!E&&u(S)&&u(R),Z=!O&&H,Q=Z&&K?G:null,J=K?null!=Q?Q:(null!=f?f:T)({rects:C,activeNodeRect:z,activeIndex:S,overIndex:R,index:M}):null,ee=u(S)&&u(R)?l({id:c,items:p,activeIndex:S,overIndex:R}):M,te=null==j?void 0:j.id,ne=(0,r.useRef)({activeId:te,items:p,newIndex:ee,containerId:v}),re=p!==ne.current.items,oe=t({active:j,containerId:v,isDragging:H,isSorting:X,id:c,index:M,items:p,newIndex:ne.current.newIndex,previousItems:ne.current.items,previousContainerId:ne.current.containerId,transition:h,wasDragging:null!=ne.current.activeId}),ie=function(e){let{disabled:t,index:n,node:a,rect:s}=e;const[u,l]=(0,r.useState)(null),c=(0,r.useRef)(n);return(0,i.Es)((()=>{if(!t&&n!==c.current&&a.current){const e=s.current;if(e){const t=(0,o.Sj)(a.current,{ignoreTransform:!0}),n={x:e.left-t.left,y:e.top-t.top,scaleX:e.width/t.width,scaleY:e.height/t.height};(n.x||n.y)&&l(n)}}n!==c.current&&(c.current=n)}),[t,n,a,s]),(0,r.useEffect)((()=>{u&&l(null)}),[u]),u}({disabled:!oe,index:M,node:D,rect:N});return(0,r.useEffect)((()=>{X&&ne.current.newIndex!==ee&&(ne.current.newIndex=ee),v!==ne.current.containerId&&(ne.current.containerId=v),p!==ne.current.items&&(ne.current.items=p)}),[X,ee,v,p]),(0,r.useEffect)((()=>{if(te===ne.current.activeId)return;if(te&&!ne.current.activeId)return void(ne.current.activeId=te);const e=setTimeout((()=>{ne.current.activeId=te}),50);return()=>clearTimeout(e)}),[te]),{active:j,activeIndex:S,attributes:B,data:P,rect:N,index:M,newIndex:ee,items:p,isOver:L,isSorting:X,isDragging:H,listeners:$,node:D,overIndex:R,over:W,setNodeRef:Y,setActivatorNodeRef:q,setDroppableNodeRef:F,setDraggableNodeRef:V,transform:null!=ie?ie:J,transition:function(){if(ie||re&&ne.current.newIndex===M)return w;if(Z&&!(0,i.kx)(U)||!h)return;if(X||oe)return i.Ks.Transition.toString({...h,property:_});return}()}}o.vL.Down,o.vL.Right,o.vL.Up,o.vL.Left},74979:(e,t,n)=>{"use strict";n.d(t,{$$:()=>g,Es:()=>h,KG:()=>y,Ks:()=>R,Ll:()=>s,Re:()=>A,Sw:()=>i,TW:()=>d,WQ:()=>S,YG:()=>w,YN:()=>v,ZC:()=>b,_q:()=>p,ag:()=>T,e_:()=>C,jn:()=>o,kx:()=>E,l6:()=>a,lk:()=>m,sb:()=>c,wz:()=>l,xZ:()=>f,zk:()=>u});var r=n(96540);function o(){for(var e=arguments.length,t=new Array(e),n=0;ne=>{t.forEach((t=>t(e)))}),t)}const i="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement;function a(e){const t=Object.prototype.toString.call(e);return"[object Window]"===t||"[object global]"===t}function s(e){return"nodeType"in e}function u(e){var t,n;return e?a(e)?e:s(e)&&null!=(t=null==(n=e.ownerDocument)?void 0:n.defaultView)?t:window:window}function l(e){const{Document:t}=u(e);return e instanceof t}function c(e){return!a(e)&&e instanceof u(e).HTMLElement}function f(e){return e instanceof u(e).SVGElement}function d(e){return e?a(e)?e.document:s(e)?l(e)?e:c(e)||f(e)?e.ownerDocument:document:document:document}const h=i?r.useLayoutEffect:r.useEffect;function p(e){const t=(0,r.useRef)(e);return h((()=>{t.current=e})),(0,r.useCallback)((function(){for(var e=arguments.length,n=new Array(e),r=0;r{e.current=setInterval(t,n)}),[]),(0,r.useCallback)((()=>{null!==e.current&&(clearInterval(e.current),e.current=null)}),[])]}function v(e,t){void 0===t&&(t=[e]);const n=(0,r.useRef)(e);return h((()=>{n.current!==e&&(n.current=e)}),t),n}function y(e,t){const n=(0,r.useRef)();return(0,r.useMemo)((()=>{const t=e(n.current);return n.current=t,t}),[...t])}function m(e){const t=p(e),n=(0,r.useRef)(null),o=(0,r.useCallback)((e=>{e!==n.current&&(null==t||t(e,n.current)),n.current=e}),[]);return[n,o]}function b(e){const t=(0,r.useRef)();return(0,r.useEffect)((()=>{t.current=e}),[e]),t.current}let _={};function w(e,t){return(0,r.useMemo)((()=>{if(t)return t;const n=null==_[e]?0:_[e]+1;return _[e]=n,e+"-"+n}),[e,t])}function x(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o{const r=Object.entries(n);for(const[o,i]of r){const n=t[o];null!=n&&(t[o]=n+e*i)}return t}),{...t})}}const S=x(1),A=x(-1);function E(e){if(!e)return!1;const{KeyboardEvent:t}=u(e.target);return t&&e instanceof t}function C(e){if(function(e){if(!e)return!1;const{TouchEvent:t}=u(e.target);return t&&e instanceof t}(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return function(e){return"clientX"in e&&"clientY"in e}(e)?{x:e.clientX,y:e.clientY}:null}const R=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[R.Translate.toString(e),R.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}}),O="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function T(e){return e.matches(O)?e:e.querySelector(O)}},12009:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=n(96540).createContext(null)},70659:(e,t,n)=>{"use strict";n.d(t,{A:()=>ge});var r={};n.r(r),n.d(r,{a11yNotify:()=>oe,addFilter:()=>V,clearFilters:()=>H,removeFilter:()=>W,reset:()=>q,setCurrent:()=>G,setFilter:()=>Y,setResultsPerPage:()=>X,setSearchTerm:()=>K,setSort:()=>Z,trackAutocompleteClickThrough:()=>$,trackAutocompleteSuggestionClickThrough:()=>ie,trackClickThrough:()=>Q});var o=n(96540),i=n(58168);function a(e){return"/"===e.charAt(0)}function s(e,t){for(var n=t,r=n+1,o=e.length;r=0;d--){var h=o[d];"."===h?s(o,d):".."===h?(s(o,d),f++):f&&(s(o,d),f--)}if(!l)for(;f--;f)o.unshift("..");!l||""===o[0]||o[0]&&a(o[0])||o.unshift("");var p=o.join("/");return n&&"/"!==p.substr(-1)&&(p+="/"),p};var l=!0,c="Invariant failed";function f(e){return"/"===e.charAt(0)?e:"/"+e}function d(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function h(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function g(e,t,n,r){var o;"string"===typeof e?(o=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,i.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(a){throw a instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):a}return n&&(o.key=n),r?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=u(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname="/"),o}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"===typeof e?e(t,n):e;"string"===typeof i?"function"===typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rfunction(e){return void 0!==e&&null!==e&&"number"===typeof e}(e)?`n_${e}_n`:function(e){return e&&"boolean"===typeof e}(e)?`b_${e}_b`:t(e),decode(e,t){if(/n_-?[\d\.]*_n/.test(e)){const t=e.substring(2,e.length-2);return Number(t)}if(/^b_(true|false)*_b$/.test(e)){return function(e){if("true"===e)return!0;if("false"===e)return!1;throw"Invalid type parsed as Boolean value"}(e.substring(2,e.length-2))}return t(e)}},R={parse:e=>E().parse(e,{ignoreQueryPrefix:!0,decoder:C.decode,arrayLimit:1e3}),stringify:e=>E().stringify(e,{encoder:C.encode})};function O(e){return Array.isArray(e)?e[e.length-1]:e}function T(e){return function(e){if(!function(e){return!isNaN(e)}(e))return;return parseInt(e,10)}(O(e))}function k(e){return e.filters}function M(e){return T(e.current)}function P(e){return O(e.q)}function I(e){const t=O(e["sort-field"]),n=O(e["sort-direction"]);return t?[t,n]:[]}function N(e){return T(e.size)}function D(e){return e.sort}class L{constructor(e={}){this.routingOptions={readUrl:e.readUrl||this.readUrl.bind(this),writeUrl:e.writeUrl||this.writeUrl.bind(this),urlToState:e.urlToState||this.urlToState.bind(this),stateToUrl:e.stateToUrl||this.stateToUrl.bind(this),routeChangeHandler:e.routeChangeHandler||this.routeChangeHandler.bind(this)},this.history="undefined"!==typeof window?x():function(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,r=t.initialEntries,o=void 0===r?["/"]:r,a=t.initialIndex,s=void 0===a?0:a,u=t.keyLength,l=void 0===u?6:u,c=v();function f(e){(0,i.A)(_,e),_.length=_.entries.length,c.notifyListeners(_.location,_.action)}function d(){return Math.random().toString(36).substr(2,l)}var h=S(s,0,o.length-1),y=o.map((function(e){return g(e,void 0,"string"===typeof e?d():e.key||d())})),m=p;function b(e){var t=S(_.index+e,0,_.entries.length-1),r=_.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?f({action:"POP",location:r,index:t}):f()}))}var _={length:y.length,action:"POP",location:y[h],index:h,entries:y,createHref:m,push:function(e,t){var r="PUSH",o=g(e,t,d(),_.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=_.index+1,n=_.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),f({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=g(e,t,d(),_.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(_.entries[_.index]=o,f({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=_.index+e;return t>=0&&t<_.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return _}(),this.lastPushSearchString=""}readUrl(){return this.history?this.history.location.search:""}writeUrl(e,{replaceUrl:t=!1}={}){(t?this.history.replace:this.history.push)(`?${e}`)}urlToState(e){return function(e){const t={current:M(e),filters:k(e),searchTerm:P(e),resultsPerPage:N(e),sortField:I(e)[0],sortDirection:I(e)[1],sortList:D(e)};return Object.keys(t).reduce(((e,n)=>{const r=t[n];return r&&(e[n]=r),e}),{})}(R.parse(e))}stateToUrl(e){return`${function(e){return R.stringify(function({searchTerm:e,current:t,filters:n,resultsPerPage:r,sortDirection:o,sortField:i,sortList:a}){const s={};return t>1&&(s.current=t),e&&(s.q=e),r&&(s.size=r),n&&n.length>0&&(s.filters=n),a&&a.length>0?s.sort=a:i&&(s["sort-field"]=i,s["sort-direction"]=o),s}(e))}(e)}`}getStateFromURL(){return this.routingOptions.urlToState(this.routingOptions.readUrl())}pushStateToURL(e,{replaceUrl:t=!1}={}){const n=this.routingOptions.stateToUrl(e);this.lastPushSearchString=n,this.routingOptions.writeUrl(n,{replaceUrl:t})}onURLStateChange(e){this.unlisten=this.routingOptions.routeChangeHandler((t=>{`?${this.lastPushSearchString}`!==t&&(this.lastPushSearchString="",e(this.routingOptions.urlToState(t)))}).bind(this))}routeChangeHandler(e){return this.history.listen((t=>{e(t.search)}))}tearDown(){this.unlisten()}}class F{constructor(){this.requestSequence=0,this.lastCompleted=0}next(){return++this.requestSequence}isOldRequest(e){return e{e.apply(null,r)}),t)};return r.cancel=()=>{n&&(clearTimeout(n),n=null)},r}class U{constructor(){this.debounceCache={}}runWithDebounce(e,t,n,...r){if(!e)return n(...r);const o=`${t}|${e.toString()}`;let i=this.debounceCache[o];i||(this.debounceCache[o]=j(n,e),i=this.debounceCache[o]),i(...r)}cancelByName(e){Object.entries(this.debounceCache).filter((([t])=>t.startsWith(`${e}|`))).forEach((([e,t])=>t.cancel()))}}U.debounce=(e,t)=>j(t,e);const z=U;var B=n(65433);function V(e,t,n="all"){this.debug&&console.log("Search UI: Action","addFilter",...arguments);const{filters:r}=this.state,o=r.find((t=>t.field===e&&t.type===n))||null,i=r.filter((t=>t.field!==e||t.type!==n))||[],a=(null===o||void 0===o?void 0:o.values)||[],s=a.find((e=>(0,B.doFilterValuesMatch)(e,t)))?a:a.concat(t);this._updateSearchResults({current:1,filters:[...i,{field:e,values:s,type:n}]});this.events.emit({type:"FacetFilterSelected",field:e,value:(0,B.serialiseFilter)(s),query:this.state.searchTerm})}function $(e,t=[]){this.debug&&console.log("Search UI: Action","trackAutocompleteClickThrough",...arguments);const{autocompletedResultsRequestId:n,searchTerm:r,autocompletedResults:o,current:i,resultsPerPage:a,totalResults:s,filters:u}=this.state,l=o.findIndex((t=>t._meta.id===e)),c=o[l],f=this.events;f.autocompleteResultClick({query:r,documentId:e,requestId:n,tags:t,result:c,resultIndex:l}),f.emit({type:"ResultSelected",documentId:e,query:r,position:l,origin:"autocomplete",tags:t,totalResults:s,filters:u,currentPage:i,resultsPerPage:a})}function H(e=[]){this.debug&&console.log("Search UI: Action","clearFilters",...arguments);const{filters:t}=this.state,n=t.filter((t=>{const n=t.field;return e.includes(n)}));this._updateSearchResults({current:1,filters:n})}function W(e,t,n){this.debug&&console.log("Search UI: Action","removeFilter",...arguments);const{filters:r}=this.state;let o=r;o=!t&&n?r.filter((t=>!(t.field===e&&t.type===n))):t?(0,B.removeSingleFilterValue)(r,e,t,n):r.filter((t=>t.field!==e)),this._updateSearchResults({current:1,filters:o});this.events.emit({type:"FacetFilterRemoved",field:e,value:t&&(0,B.serialiseFilter)([t]),query:this.state.searchTerm})}function q(){this.debug&&console.log("Search UI: Action","reset",...arguments),this._setState(this.startingState),this.trackUrlState&&this.URLManager.pushStateToURL(this.state)}function G(e){this.debug&&console.log("Search UI: Action","setCurrent",...arguments),this._updateSearchResults({current:e})}function Y(e,t,n="all"){this.debug&&console.log("Search UI: Action","setFilter",...arguments);let{filters:r}=this.state;r=r.filter((t=>t.field!==e||t.type!==n)),this._updateSearchResults({current:1,filters:[...r,{field:e,values:[t],type:n}]});this.events.emit({type:"FacetFilterSelected",field:e,value:t&&(0,B.serialiseFilter)([t]),query:this.state.searchTerm})}function X(e){this.debug&&console.log("Search UI: Action","setResultsPerPage",...arguments),this._updateSearchResults({current:1,resultsPerPage:e})}function K(e,{autocompleteMinimumCharacters:t=0,autocompleteResults:n=!1,autocompleteSuggestions:r=!1,shouldClearFilters:o=!0,refresh:i=!0,debounce:a=0}={}){this.debug&&console.log("Search UI: Action","setSearchTerm",...arguments),this._setState({searchTerm:e}),i&&this.debounceManager.runWithDebounce(a,"_updateSearchResults",this._updateSearchResults,Object.assign({current:1},o&&{filters:[]})),(n||r)&&e.length>=t&&this.debounceManager.runWithDebounce(a,"_updateAutocomplete",this._updateAutocomplete,e,{autocompleteResults:n,autocompleteSuggestions:r})}function Z(e,t){this.debug&&console.log("Search UI: Action","setSort",...arguments);const n={current:1,sortList:null,sortField:null,sortDirection:null};Array.isArray(e)?n.sortList=e:(n.sortField=e,n.sortDirection=t),this._updateSearchResults(n)}function Q(e,t=[]){this.debug&&console.log("Search UI: Action","trackClickThrough",...arguments);const{requestId:n,searchTerm:r,results:o,current:i,resultsPerPage:a,totalResults:s,filters:u}=this.state,l=o.findIndex((t=>t._meta.id===e)),c=o[l],f=this.events;this.events.resultClick({query:r,documentId:e,requestId:n,tags:t,result:c,page:i,resultsPerPage:a,resultIndexOnPage:l}),f.emit({type:"ResultSelected",documentId:e,query:r,origin:"results",position:l,tags:t,totalResults:s,filters:u,currentPage:i,resultsPerPage:a})}const J="search-ui-screen-reader-notifications",ee="undefined"!==typeof document,te=()=>{if(!ee)return null;let e=document.getElementById(J);return e||(e=document.createElement("div"),e.id=J,e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.style.position="absolute",e.style.width="1px",e.style.height="1px",e.style.margin="-1px",e.style.padding="0",e.style.border="0",e.style.overflow="hidden",e.style.clip="rect(0 0 0 0)",document.body.appendChild(e),e)},ne=e=>{const t=te();t&&(t.textContent=e)},re={searchResults:({start:e,end:t,totalResults:n,searchTerm:r})=>{let o=`Showing ${e} to ${t} results out of ${n}`;return r&&(o+=`, searching for "${r}".`),o}};function oe(e,t){if(!this.hasA11yNotifications)return;const n=this.a11yNotificationMessages[e];if(!n){const t=`Could not find corresponding message function in a11yNotificationMessages: "${e}"`;return void console.warn("Action","a11yNotify",t)}const r=n(t);ne(r),this.debug&&console.log("Search UI: Action","a11yNotify",{messageFunc:e,messageArgs:t,message:r})}function ie(e,t,n=[]){this.debug&&console.log("Search UI: Action","trackAutocompleteSuggestionClickThrough",...arguments);const{searchTerm:r}=this.state;this.events.emit({type:"AutocompleteSuggestionSelected",position:t,query:r,tags:n,suggestion:e})}function ae(e,t,n){if(n){if(t){const r=t[e].bind(t);return(...e)=>n(...e,r)}return n}return t&&t[e]?t[e].bind(t):()=>{throw`No ${e} handler provided and no Connector provided. You must configure one or the other.`}}const se=class{constructor({apiConnector:e,onSearch:t,onAutocomplete:n,onResultClick:r,onAutocompleteResultClick:o,plugins:i=[]}={}){this.search=ae("onSearch",e,t),this.autocomplete=ae("onAutocomplete",e,n),this.resultClick=ae("onResultClick",e,r),this.autocompleteResultClick=ae("onAutocompleteResultClick",e,o),this.plugins=i}emit(e){this.plugins.forEach((t=>{t.subscribe(e)}))}};var ue=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o(t[r]&&"function"===typeof t[r]&&!t[r]({filters:n})||(e[r]=o),e)),{})}const de=class{constructor({apiConnector:e,autocompleteQuery:t={},plugins:n=[],debug:o,initialState:i,onSearch:a,onAutocomplete:s,onResultClick:u,onAutocompleteResultClick:l,searchQuery:c={},trackUrlState:f=!0,routingOptions:d={},urlPushDebounceLength:h=500,hasA11yNotifications:p=!1,a11yNotificationMessages:g={},alwaysSearchOnInitialLoad:v=!1}){let y;this.state=ce,this._updateAutocomplete=(e,{autocompleteResults:t,autocompleteSuggestions:n}={})=>{const r=this.autocompleteRequestSequencer.next(),o=Object.assign(Object.assign({},t&&{results:this.autocompleteQuery.results||{}}),n&&{suggestions:this.autocompleteQuery.suggestions||{}});return this.events.autocomplete({searchTerm:e},o).then((e=>{this.autocompleteRequestSequencer.isOldRequest(r)||(this.autocompleteRequestSequencer.completed(r),this._setState(e))}))},this._updateSearchResults=(e,{skipPushToUrl:t=!1,replaceUrl:n=!1}={})=>{const{current:r,filters:o,resultsPerPage:i,searchTerm:a,sortDirection:s,sortField:u,sortList:l}=Object.assign(Object.assign({},this.state),e);this.debounceManager.cancelByName("_updateSearchResults"),this._setState({current:r,error:"",filters:o,resultsPerPage:i,searchTerm:a,sortDirection:s,sortField:u,sortList:l}),this._makeSearchRequest({skipPushToUrl:t,replaceUrl:n})},this._makeSearchRequest=z.debounce(0,(({skipPushToUrl:e,replaceUrl:t})=>{const{current:n,filters:r,resultsPerPage:o,searchTerm:i,sortDirection:a,sortField:s,sortList:u}=this.state;this._setState({isLoading:!0});const l=this.searchRequestSequencer.next(),c=this.searchQuery,{conditionalFacets:f}=c,d=ue(c,["conditionalFacets"]),h=Object.assign(Object.assign({},d),{facets:fe(this.searchQuery.facets,f,r)}),p=Object.assign(Object.assign({},le(this.state)),{filters:(0,B.mergeFilters)(r,this.searchQuery.filters)});return this.events.search(p,h).then((c=>{if(this.searchRequestSequencer.isOldRequest(l))return;this.searchRequestSequencer.completed(l);const{totalResults:f}=c;this.events.emit({type:"SearchQuery",filters:this.state.filters,query:this.state.searchTerm,currentPage:p.current,resultsPerPage:p.resultsPerPage,totalResults:f});const d=0===f?0:(n-1)*o+1,h=f{var t;"Invalid credentials"!==e.message?this._setState({error:`An unexpected error occurred: ${e.message}`}):this._setState(Object.assign({},(null===(t=this.apiConnector)||void 0===t?void 0:t.state)&&Object.assign({},this.apiConnector.state)))}))})),this.actions=Object.entries(r).reduce(((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n.bind(this)})),{}),this.actions=Object.assign(Object.assign({},this.actions),(null===e||void 0===e?void 0:e.actions)&&Object.assign({},e.actions)),Object.assign(this,this.actions),this.events=new se({apiConnector:e,onSearch:a,onAutocomplete:s,onResultClick:u,onAutocompleteResultClick:l,plugins:n}),this.debug=o,this.debug&&(console.warn("Search UI Debugging is enabled. This should be turned off in production deployments."),"undefined"!==typeof window&&(window.searchUI=this)),this.autocompleteRequestSequencer=new F,this.searchRequestSequencer=new F,this.debounceManager=new z,this.autocompleteQuery=t,this.searchQuery=c,this.subscriptions=[],this.trackUrlState=f,this.urlPushDebounceLength=h,this.alwaysSearchOnInitialLoad=v,this.apiConnector=e,f?(this.URLManager=new L(d),y=this.URLManager.getStateFromURL(),this.URLManager.onURLStateChange((e=>{this._updateSearchResults(Object.assign(Object.assign({},ce),e),{skipPushToUrl:!0})}))):y={},this.hasA11yNotifications=p,this.hasA11yNotifications&&te(),this.a11yNotificationMessages=Object.assign(Object.assign({},re),g),this.startingState=Object.assign(Object.assign({},this.state),i);const m=le(Object.assign(Object.assign({},this.startingState),y));this.state=Object.assign(Object.assign(Object.assign({},this.state),(null===e||void 0===e?void 0:e.state)&&Object.assign({},e.state)),m),(m.searchTerm||m.filters.length>0||this.alwaysSearchOnInitialLoad)&&this._updateSearchResults(m,{replaceUrl:!0})}_setState(e){const t=Object.assign(Object.assign({},this.state),e);this.debug&&console.log("Search UI: State Update",e,t),this.state=t,this.subscriptions.forEach((e=>e(t)))}setSearchQuery(e){this.searchQuery=e,this._updateSearchResults({})}setAutocompleteQuery(e){this.autocompleteQuery=e}subscribeToStateChanges(e){this.subscriptions.push(e)}unsubscribeToStateChanges(e){this.subscriptions=this.subscriptions.filter((t=>t!==e))}tearDown(){this.subscriptions=[],this.URLManager&&this.URLManager.tearDown(),this.debounceManager.cancelByName("pushStateToURL")}getActions(){return this.actions}getState(){return Object.assign({},this.state)}};var he=n(12009);const pe={moreFilters:({visibleOptionsCount:e,showingAll:t})=>{let n=t?"All ":"";return n+=`${e} options shown.`,n}},ge=({children:e,config:t,driver:n})=>{const[r,i]=(0,o.useState)(null);if((0,o.useEffect)((()=>{const e=n||new de(Object.assign(Object.assign({},t),{a11yNotificationMessages:Object.assign(Object.assign({},pe),t.a11yNotificationMessages)}));return i(e),()=>{e.tearDown()}}),[]),(0,o.useEffect)((()=>{r&&r.setSearchQuery(t.searchQuery)}),[t.searchQuery]),(0,o.useEffect)((()=>{r&&r.setAutocompleteQuery(t.autocompleteQuery)}),[t.autocompleteQuery]),!r)return null;const a={driver:r};return o.createElement(he.A.Provider,{value:a},e)}},46963:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(96540),o=n(12009),i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o{this.mounted&&this.setState((n=>a(Object.assign(Object.assign({},n),t),e,this.props)))},this.mounted=!1,this.state=Object.assign({},a(function(e){return Object.assign(Object.assign({},e.driver.getState()),e.driver.getActions())}(n),e,t))}componentDidMount(){this.mounted=!0,this.context.driver.subscribeToStateChanges(this.subscription)}componentWillUnmount(){this.mounted=!1,this.context.driver.unsubscribeToStateChanges(this.subscription)}render(){const e=i(this.props,[]);return r.createElement(t,Object.assign({},this.state,e))}}return n.contextType=o.A,n}};var u=n(5556),l=n.n(u);function c({mapContextToProps:e,children:t}){const n=s(e)((e=>t(e)));return r.createElement(n,null)}c.propTypes={mapContextToProps:l().func,children:l().func.isRequired};const f=c},81703:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(65433);const o=Object.assign({},r);var i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o{if("value"==t.type)return t.sort&&console.warn("search-ui-site-search-connector: Site Search does not support 'sort' on facets"),t.size&&console.warn("search-ui-site-search-connector: Site Search does not support 'size' on facets"),[e,t];console.warn(`search-ui-site-search-connector: Dropping ${e} facet, only value facets are supported in Site Search`)})).filter((e=>e)).map((([e])=>e));return t.length?t:void 0}(t.facets),u=function(e){if(e&&0!==Object.keys(e).length)return e.reduce(((e,t)=>{const n=t.field,r=t.values;if(e[n])return console.warn("search-ui-site-search-connector: More than one filter found for a single field"),e;if(t.type&&"all"!==t.type&&"any"!==t.type)return console.warn(`search-ui-site-search-connector: Unsupported filter type "${t.type}" found, only "all" and "any" are currently supported`),e;if(void 0!==r.find((e=>"object"===typeof e))){if(r.length>1)return console.warn("search-ui-site-search-connector: Cannot apply more than 1 none-value filters to a single field"),e;const t=r[0];if(o.isFilterValueRange(t)){const{name:r}=t,o=i(t,["name"]);return e[n]=Object.assign({type:"range"},o),e}return e}return e[n]=Object.assign(Object.assign({},"any"===t.type?{}:{type:"and"}),{values:r}),e}),{})}(void 0!==t.filters?t.filters:e.filters),l=void 0!==t.current?t.current:e.current,c=void 0!==t.resultsPerPage?t.resultsPerPage:e.resultsPerPage,f=void 0!==t.sortDirection?t.sortDirection:e.sortDirection,d=void 0!==t.sortField?t.sortField:e.sortField,h=void 0!==t.sortList?t.sortList:e.sortList,[p,g]=(v=t.result_fields)?[Object.keys(v),Object.entries(v).reduce(((e,[t,n])=>n.snippet?Object.assign(Object.assign({},e),{[t]:n.snippet}):e),{})]:[];var v;const y=(m=t.search_fields)?Object.keys(m):[];var m;const b=e.searchTerm;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c&&{per_page:c}),l&&{page:l}),f&&{sort_direction:{[n]:f}}),d&&{sort_field:{[n]:d}}),h&&{sort_list:{[n]:h}}),u&&{filters:{[n]:u}}),s&&{facets:{[n]:s}}),p&&{fetch_fields:{[n]:p}}),g&&{highlight_fields:{[n]:g}}),y&&!!y.length&&{search_fields:{[n]:y}}),{q:b})}var s=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);oObject.assign(Object.assign({},e),{[t]:n});function l(e,t){const n=function(e,t){return e[t].map((e=>{const{highlight:t,sort:n}=e,r=s(e,["highlight","sort"]),o=Object.entries(r).filter((([e])=>!e.startsWith("_"))).map((([e,t])=>{return[e,(n=t,{raw:n})];var n})).reduce(u,{});return Object.entries(t).forEach((([e,t])=>{o[e].snippet=t})),o}))}(e.records,t),r=e.info[t].num_pages,o=e.info[t].total_result_count,i=(a=e.info[t]).facets?Object.entries(a.facets).map((([e,t])=>[e,[{field:e,data:Object.entries(t).map((([e,t])=>({value:e,count:t}))),type:"value"}]])).reduce(u,{}):{};var a;return Object.assign({rawResponse:e,results:n,totalPages:r,totalResults:o,requestId:""},Object.keys(i).length>0&&{facets:i})}var c=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(t){i(t)}}function s(e){try{u(r.throw(e))}catch(t){i(t)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))};function f(e,t,n,r){return c(this,void 0,void 0,(function*(){const o=new Headers({"Content-Type":"application/json"}),i=yield fetch(`https://search-api.swiftype.com/api/v1/public/${n}`,{method:t,headers:o,body:JSON.stringify(Object.assign({engine_key:e},r)),credentials:"include"});let a;try{a=yield i.json()}catch(s){}if(i.status>=200&&i.status<300)return a;{const e=a&&a.errors&&Object.entries(a.errors).length>0?JSON.stringify(a.errors):i.status;throw new Error(`${e}`)}}))}var d=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(t){i(t)}}function s(e){try{u(r.throw(e))}catch(t){i(t)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))};function h(e,t,n){const r=Object.entries(Object.assign({engine_key:e},n)).map((([e,t])=>`${e}=${encodeURIComponent(t)}`)).join("&");return fetch(`https://search-api.swiftype.com/api/v1/public/${t}?${r}`,{method:"GET",credentials:"include"})}const p=class{constructor({documentType:e,engineKey:t,beforeSearchCall:n=((e,t)=>t(e)),beforeAutocompleteResultsCall:r=((e,t)=>t(e))}){this.documentType=e,this.engineKey=t,this.beforeSearchCall=n,this.beforeAutocompleteResultsCall=r,this.request=f.bind(this,t),this._get=h.bind(this,t)}onResultClick({query:e,documentId:t,tags:n}){n&&n.length>0&&console.warn("search-ui-site-search-connector: Site Search does not support tags on click"),this._get("analytics/pc",{t:(new Date).getTime(),q:e,doc_id:t})}onAutocompleteResultClick({query:e,documentId:t,tags:n}){n&&console.warn("search-ui-site-search-connector: Site Search does not support tags on autocompleteClick"),this._get("analytics/pas",{t:(new Date).getTime(),q:e,doc_id:t})}onSearch(e,t){const n=a(e,t,this.documentType);return this.beforeSearchCall(n,(e=>this.request("POST","engines/search.json",e).then((e=>l(e,this.documentType)))))}onAutocomplete({searchTerm:e},t){return d(this,void 0,void 0,(function*(){if(t.results){const n=a({searchTerm:e},t.results,this.documentType);return this.beforeAutocompleteResultsCall(n,(e=>this.request("POST","engines/suggest.json",e).then((e=>({autocompletedResults:l(e,this.documentType).results})))))}t.suggestions&&console.warn("search-ui-site-search-connector: Site Search does support query suggestions on autocomplete")}))}}},65433:(e,t,n)=>{"use strict";n.r(t),n.d(t,{doFilterValuesMatch:()=>l,findFilterValues:()=>a,isFilterValueRange:()=>f,markSelectedFacetValuesFromFilters:()=>u,mergeFilters:()=>c,removeSingleFilterValue:()=>s,serialiseFilter:()=>d});var r=n(62303),o=n.n(r),i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);oe.field===t&&e.type===n));return r?r.values:[]}function s(e,t,n,r){return e.reduce(((e,o)=>{const{field:a,values:s,type:u}=o,c=i(o,["field","values","type"]);if(a===t&&(!r||u===r)){const t=s.filter((e=>!l(e,n)));return t.length>0?e.concat(Object.assign({field:a,values:t,type:u},c)):e}return e.concat(o)}),[])}function u(e,t,n,r){const o=e.data,i=a(t,n,r)||[];return Object.assign(Object.assign({},e),{data:o.map((e=>Object.assign(Object.assign({},e),{selected:i.some((t=>l(t,e.value)))})))})}function l(e,t){return!!(e&&e.name&&t&&t.name&&e.name===t.name)||o()(e,t,{strict:!0})}function c(e,t){return t?t.reduce(((e,t)=>e.find((e=>e.type===t.type&&e.field===t.field))?e:[...e,t]),e):e}function f(e){return"object"===typeof e&&void 0!==e.name}const d=e=>e.reduce(((e,t)=>(f(t)?e.push(t.name):e.push(t.toString()),e)),[]).join(",")},62303:(e,t,n)=>{var r=n(1189),o=n(47244),i=n(37653),a=n(14035),s=n(71589),u=n(62120),l=Date.prototype.getTime;function c(e,t,n){var h=n||{};return!!(h.strict?i(e,t):e===t)||(!e||!t||"object"!==typeof e&&"object"!==typeof t?h.strict?i(e,t):e==t:function(e,t,n){var i,h;if(typeof e!==typeof t)return!1;if(f(e)||f(t))return!1;if(e.prototype!==t.prototype)return!1;if(o(e)!==o(t))return!1;var p=a(e),g=a(t);if(p!==g)return!1;if(p||g)return e.source===t.source&&s(e)===s(t);if(u(e)&&u(t))return l.call(e)===l.call(t);var v=d(e),y=d(t);if(v!==y)return!1;if(v||y){if(e.length!==t.length)return!1;for(i=0;i=0;i--)if(m[i]!=b[i])return!1;for(i=m.length-1;i>=0;i--)if(!c(e[h=m[i]],t[h],n))return!1;return!0}(e,t,h))}function f(e){return null===e||void 0===e}function d(e){return!(!e||"object"!==typeof e||"number"!==typeof e.length)&&("function"===typeof e.copy&&"function"===typeof e.slice&&!(e.length>0&&"number"!==typeof e[0]))}e.exports=c},84300:(e,t,n)=>{"use strict";n.d(t,{A:()=>oe});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?c(_,--m):0,v--,10===b&&(v=1,g--),b}function A(){return b=m2||O(b)>3?"":" "}function I(e,t){for(;--t&&A()&&!(b<48||b>102||b>57&&b<65||b>70&&b<97););return R(e,C()+(t<6&&32==E()&&32==A()))}function N(e){for(;A();)switch(b){case e:return m;case 34:case 39:34!==e&&39!==e&&N(b);break;case 40:41===e&&N(e);break;case 92:A()}return m}function D(e,t){for(;A()&&e+b!==57&&(e+b!==84||47!==E()););return"/*"+R(t,m-1)+"*"+i(47===e?e:A())}function L(e){for(;!O(E());)A();return R(e,m)}var F="-ms-",j="-moz-",U="-webkit-",z="comm",B="rule",V="decl",$="@keyframes";function H(e,t){for(var n="",r=h(e),o=0;o0&&d(j)-y&&p(b>32?K(j+";",r,n,y-1):K(u(j," ","")+";",r,n,y-2),h);break;case 59:j+=";";default:if(p(F=Y(j,t,n,g,v,o,f,T,k=[],N=[],y),a),123===O)if(0===v)G(j,t,F,F,k,a,y,f,N);else switch(99===m&&110===c(j,3)?100:m){case 100:case 108:case 109:case 115:G(e,F,F,r&&p(Y(e,F,F,0,0,o,f,T,o,k=[],y),N),o,N,y,f,r?k:N);break;default:G(j,F,F,F,[""],N,0,f,N)}}g=v=b=0,w=R=1,T=j="",y=s;break;case 58:y=1+d(j),b=_;default:if(w<1)if(123==O)--w;else if(125==O&&0==w++&&125==S())continue;switch(j+=i(O),O*w){case 38:R=v>0?1:(j+="\f",-1);break;case 44:f[g++]=(d(j)-1)*R,R=1;break;case 64:45===E()&&(j+=M(A())),m=E(),v=y=d(T=j+=L(C())),O++;break;case 45:45===_&&2==d(j)&&(w=0)}}return a}function Y(e,t,n,r,i,a,l,c,d,p,g){for(var v=i-1,y=0===i?a:[""],m=h(y),b=0,_=0,x=0;b0?y[S]+" "+A:u(A,/&\f/g,y[S])))&&(d[x++]=E);return w(e,t,n,0===i?B:c,d,p,g)}function X(e,t,n){return w(e,t,n,z,i(b),f(e,2,-2),0)}function K(e,t,n,r){return w(e,t,n,V,f(e,0,r),f(e,r+1,-1),r)}var Z=function(e,t,n){for(var r=0,o=0;r=o,o=E(),38===r&&12===o&&(t[n]=1),!O(o);)A();return R(e,m)},Q=function(e,t){return k(function(e,t){var n=-1,r=44;do{switch(O(r)){case 0:38===r&&12===E()&&(t[n]=1),e[n]+=Z(m-1,t,n);break;case 2:e[n]+=M(r);break;case 4:if(44===r){e[++n]=58===E()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=A());return e}(T(e),t))},J=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||J.get(n))&&!r){J.set(e,!0);for(var o=[],i=Q(t,o),a=n.props,s=0,u=0;s6)switch(c(e,t+1)){case 109:if(45!==c(e,t+4))break;case 102:return u(e,/(.+:)(.+)-([^]+)/,"$1"+U+"$2-$3$1"+j+(108==c(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?ne(u(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==c(e,t+1))break;case 6444:switch(c(e,d(e)-3-(~l(e,"!important")&&10))){case 107:return u(e,":",":"+U)+e;case 101:return u(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+U+(45===c(e,14)?"inline-":"")+"box$3$1"+U+"$2$3$1"+F+"$2box$3")+e}break;case 5936:switch(c(e,t+11)){case 114:return U+e+F+u(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return U+e+F+u(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return U+e+F+u(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return U+e+F+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case V:e.return=ne(e.value,e.length);break;case $:return H([x(e,{value:u(e.value,"@","@"+U)})],r);case B:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return H([x(e,{props:[u(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return H([x(e,{props:[u(t,/:(plac\w+)/,":"+U+"input-$1")]}),x(e,{props:[u(t,/:(plac\w+)/,":-moz-$1")]}),x(e,{props:[u(t,/:(plac\w+)/,F+"input-$1")]})],r)}return""}))}}],oe=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o=e.stylisPlugins||re;var i,a,s={},u=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n{"use strict";function r(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}n.d(t,{A:()=>r})},24553:(e,t,n)=>{"use strict";n.d(t,{AH:()=>T,Y:()=>O,i7:()=>k});var r=n(96540),o=n.t(r,2),i=n(84300);var a=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)};var s={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},u=n(36289),l=/[A-Z]|^ms/g,c=/_EMO_([^_]+?)_([^]*?)_EMO_/g,f=function(e){return 45===e.charCodeAt(1)},d=function(e){return null!=e&&"boolean"!==typeof e},h=(0,u.A)((function(e){return f(e)?e:e.replace(l,"-$&").toLowerCase()})),p=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(c,(function(e,t,n){return v={name:t,styles:n,next:v},t}))}return 1===s[e]||f(e)||"number"!==typeof t||0===t?t:t+"px"};function g(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return v={name:n.name,styles:n.styles,next:v},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)v={name:r.name,styles:r.styles,next:v},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+u;return{name:l,styles:o,next:v}},b=!!o.useInsertionEffect&&o.useInsertionEffect,_=b||function(e){return e()},w=(b||r.useLayoutEffect,{}.hasOwnProperty),x=r.createContext("undefined"!==typeof HTMLElement?(0,i.A)({key:"css"}):null);x.Provider;var S=function(e){return(0,r.forwardRef)((function(t,n){var o=(0,r.useContext)(x);return e(t,o,n)}))};var A=r.createContext({});var E="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",C=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return a(t,n,r),_((function(){return function(e,t,n){a(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}}(t,n,r)})),null};var R=S((function(e,t,n){var o=e.css;"string"===typeof o&&void 0!==t.registered[o]&&(o=t.registered[o]);var i=e[E],a=[o],s="";"string"===typeof e.className?s=function(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}(t.registered,a,e.className):null!=e.className&&(s=e.className+" ");var u=m(a,void 0,r.useContext(A));s+=t.key+"-"+u.name;var l={};for(var c in e)w.call(e,c)&&"css"!==c&&c!==E&&(l[c]=e[c]);return l.ref=n,l.className=s,r.createElement(r.Fragment,null,r.createElement(C,{cache:t,serialized:u,isStringTag:"string"===typeof i}),r.createElement(i,l))})),O=(n(4146),function(e,t){var n=arguments;if(null==t||!w.call(t,"css"))return r.createElement.apply(void 0,n);var o=n.length,i=new Array(o);i[0]=R,i[1]=function(e,t){var n={};for(var r in t)w.call(t,r)&&(n[r]=t[r]);return n[E]=e,n}(e,t);for(var a=2;a{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;ts,B6:()=>S,Gh:()=>T,HS:()=>k,Oi:()=>i,Rr:()=>u,pX:()=>D,pb:()=>E,rc:()=>o,tH:()=>N,tW:()=>x,ue:()=>c,yD:()=>O}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(o||(o={}));function i(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function a(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function s(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function u(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}var l;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(l||(l={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function c(e,t,n){void 0===n&&(n="/");let r=E(("string"===typeof t?u(t):t).pathname||"/",n);if(null==r)return null;let o=f(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let i=null;for(let a=0;null==i&&a{let s={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};s.relativePath.startsWith("/")&&(i(s.relativePath.startsWith(r),'Absolute route path "'+s.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),s.relativePath=s.relativePath.slice(r.length));let u=k([r,s.relativePath]),l=n.concat(s);e.children&&e.children.length>0&&(i(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+u+'".'),f(e.children,t,l,u)),(null!=e.path||e.index)&&t.push({path:u,score:_(u,e.index),routesMeta:l})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of d(e.path))o(e,t,r);else o(e,t)})),t}function d(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(0===r.length)return o?[i,""]:[i];let a=d(r.join("/")),s=[];return s.push(...a.map((e=>""===e?i:[i,e].join("/")))),o&&s.push(...a),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const h=/^:[\w-]+$/,p=3,g=2,v=1,y=10,m=-2,b=e=>"*"===e;function _(e,t){let n=e.split("/"),r=n.length;return n.some(b)&&(r+=m),t&&(r+=g),n.filter((e=>!b(e))).reduce(((e,t)=>e+(h.test(t)?p:""===t?v:y)),r)}function w(e,t){let{routesMeta:n}=e,r={},o="/",i=[];for(let a=0;anull==e?"":"string"===typeof e?e:String(e);return r+n.split(/\/+/).map(((e,n,r)=>{if(n===r.length-1&&"*"===e){return o(t["*"])}const a=e.match(/^:([\w-]+)(\??)$/);if(a){const[,e,n]=a;let r=t[e];return i("?"===n||null!=r,'Missing ":'+e+'" param'),o(r)}return e.replace(/\?$/g,"")})).filter((e=>!!e)).join("/")}function S(e,t){"string"===typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);a("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,((e,t,n)=>(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let i=new RegExp(o,t?void 0:"i");return[i,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let i=o[0],s=i.replace(/(.)\/+$/,"$1"),u=o.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=u[n]||"";s=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}const a=u[n];return e[r]=o&&!a?void 0:(a||"").replace(/%2F/g,"/"),e}),{}),pathname:i,pathnameBase:s,pattern:e}}function A(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return a(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function E(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function C(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function R(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function O(e,t){let n=R(e);return t?n.map(((t,n)=>n===e.length-1?t.pathname:t.pathnameBase)):n.map((e=>e.pathnameBase))}function T(e,t,n,o){let a;void 0===o&&(o=!1),"string"===typeof e?a=u(e):(a=r({},e),i(!a.pathname||!a.pathname.includes("?"),C("?","pathname","search",a)),i(!a.pathname||!a.pathname.includes("#"),C("#","pathname","hash",a)),i(!a.search||!a.search.includes("#"),C("#","search","hash",a)));let s,l=""===e||""===a.pathname,c=l?"/":a.pathname;if(null==c)s=n;else{let e=t.length-1;if(!o&&c.startsWith("..")){let t=c.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}s=e>=0?t[e]:"/"}let f=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"===typeof e?u(e):e,i=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:i,search:P(r),hash:I(o)}}(a,s),d=c&&"/"!==c&&c.endsWith("/"),h=(l||"."===c)&&n.endsWith("/");return f.pathname.endsWith("/")||!d&&!h||(f.pathname+="/"),f}const k=e=>e.join("/").replace(/\/\/+/g,"/"),M=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),P=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",I=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class N extends Error{}function D(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const L=["post","put","patch","delete"],F=(new Set(L),["get",...L]);new Set(F),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred")},10390:(e,t,n)=>{"use strict";n.d(t,{Ts:()=>Zt,mn:()=>Qt});var r=n(17412),o=n(6936),i=n(39653),a=n(92220),s=n(42531),u=n(86641);const l=[];function c(e){const t=e.defaultIntegrations||[],n=e.integrations;let r;t.forEach((e=>{e.isDefaultInstance=!0})),r=Array.isArray(n)?[...t,...n]:"function"===typeof n?(0,o.k9)(n(t)):t;const i=function(e){const t={};return e.forEach((e=>{const{name:n}=e,r=t[n];r&&!r.isDefaultInstance&&e.isDefaultInstance||(t[n]=e)})),Object.keys(t).map((e=>t[e]))}(r),a=function(e,t){for(let n=0;n"Debug"===e.name));if(-1!==a){const[e]=i.splice(a,1);i.push(e)}return i}function f(e,t){for(const n of t)n&&n.afterAllSetup&&n.afterAllSetup(e)}function d(e,t,n){if(n[t.name])a.T&&r.vF.log(`Integration skipped because it was already installed: ${t.name}`);else{if(n[t.name]=t,-1===l.indexOf(t.name)&&(t.setupOnce(s.lb,u.BF),l.push(t.name)),t.setup&&"function"===typeof t.setup&&t.setup(e),e.on&&"function"===typeof t.preprocessEvent){const n=t.preprocessEvent.bind(t);e.on("preprocessEvent",((t,r)=>n(t,r,e)))}if(e.addEventProcessor&&"function"===typeof t.processEvent){const n=t.processEvent.bind(t),r=Object.assign(((t,r)=>n(t,r,e)),{id:t.name});e.addEventProcessor(r)}a.T&&r.vF.log(`Integration installed: ${t.name}`)}}function h(e,t){return Object.assign((function(...e){return t(...e)}),{id:e})}const p=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/],g=[/^.*\/healthcheck$/,/^.*\/healthy$/,/^.*\/live$/,/^.*\/ready$/,/^.*\/heartbeat$/,/^.*\/health$/,/^.*\/healthz$/],v="InboundFilters",y=(e={})=>({name:v,setupOnce(){},processEvent(t,n,s){const u=s.getOptions(),l=function(e={},t={}){return{allowUrls:[...e.allowUrls||[],...t.allowUrls||[]],denyUrls:[...e.denyUrls||[],...t.denyUrls||[]],ignoreErrors:[...e.ignoreErrors||[],...t.ignoreErrors||[],...e.disableErrorDefaults?[]:p],ignoreTransactions:[...e.ignoreTransactions||[],...t.ignoreTransactions||[],...e.disableTransactionDefaults?[]:g],ignoreInternal:void 0===e.ignoreInternal||e.ignoreInternal}}(e,u);return function(e,t){if(t.ignoreInternal&&function(e){try{return"SentryError"===e.exception.values[0].type}catch(t){}return!1}(e))return a.T&&r.vF.warn(`Event dropped due to being internal Sentry Error.\nEvent: ${(0,o.$X)(e)}`),!0;if(function(e,t){if(e.type||!t||!t.length)return!1;return function(e){const t=[];e.message&&t.push(e.message);let n;try{n=e.exception.values[e.exception.values.length-1]}catch(i){}n&&n.value&&(t.push(n.value),n.type&&t.push(`${n.type}: ${n.value}`));a.T&&0===t.length&&r.vF.error(`Could not extract message for event ${(0,o.$X)(e)}`);return t}(e).some((e=>(0,i.Xr)(e,t)))}(e,t.ignoreErrors))return a.T&&r.vF.warn(`Event dropped due to being matched by \`ignoreErrors\` option.\nEvent: ${(0,o.$X)(e)}`),!0;if(function(e,t){if("transaction"!==e.type||!t||!t.length)return!1;const n=e.transaction;return!!n&&(0,i.Xr)(n,t)}(e,t.ignoreTransactions))return a.T&&r.vF.warn(`Event dropped due to being matched by \`ignoreTransactions\` option.\nEvent: ${(0,o.$X)(e)}`),!0;if(function(e,t){if(!t||!t.length)return!1;const n=m(e);return!!n&&(0,i.Xr)(n,t)}(e,t.denyUrls))return a.T&&r.vF.warn(`Event dropped due to being matched by \`denyUrls\` option.\nEvent: ${(0,o.$X)(e)}.\nUrl: ${m(e)}`),!0;if(!function(e,t){if(!t||!t.length)return!0;const n=m(e);return!n||(0,i.Xr)(n,t)}(e,t.allowUrls))return a.T&&r.vF.warn(`Event dropped due to not being matched by \`allowUrls\` option.\nEvent: ${(0,o.$X)(e)}.\nUrl: ${m(e)}`),!0;return!1}(t,l)?null:t}});h(v,y);function m(e){try{let n;try{n=e.exception.values[0].stacktrace.frames}catch(t){}return n?function(e=[]){for(let t=e.length-1;t>=0;t--){const n=e[t];if(n&&""!==n.filename&&"[native code]"!==n.filename)return n.filename||null}return null}(n):null}catch(n){return a.T&&r.vF.error(`Cannot extract url for event ${(0,o.$X)(e)}`),null}}var b=n(68411),_=n(83741);let w;const x="FunctionToString",S=new WeakMap,A=()=>({name:x,setupOnce(){w=Function.prototype.toString;try{Function.prototype.toString=function(...e){const t=(0,b.sp)(this),n=S.has((0,_.KU)())&&void 0!==t?t:this;return w.apply(n,e)}}catch(e){}},setup(e){S.set(e,!0)}});h(x,A);function E(e,t){!0===t.debug&&(a.T?r.vF.enable():(0,r.pq)((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})));(0,_.o5)().update(t.initialScope);const n=new e(t);!function(e){const t=(0,u.BF)().getStackTop();t.client=e,t.scope.setClient(e)}(n),function(e){e.init?e.init():e.setupIntegrations&&e.setupIntegrations()}(n)}var C=n(5644);const R=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function O(e,t=!1){const{host:n,path:r,pass:o,port:i,projectId:a,protocol:s,publicKey:u}=e;return`${s}://${u}${t&&o?`:${o}`:""}@${n}${i?`:${i}`:""}/${r?`${r}/`:r}${a}`}function T(e){return{protocol:e.protocol,publicKey:e.publicKey||"",pass:e.pass||"",host:e.host,port:e.port||"",path:e.path||"",projectId:e.projectId}}function k(e){const t="string"===typeof e?function(e){const t=R.exec(e);if(!t)return void(0,r.pq)((()=>{console.error(`Invalid Sentry Dsn: ${e}`)}));const[n,o,i="",a,s="",u]=t.slice(1);let l="",c=u;const f=c.split("/");if(f.length>1&&(l=f.slice(0,-1).join("/"),c=f.pop()),c){const e=c.match(/^\d+/);e&&(c=e[0])}return T({host:a,pass:i,path:l,projectId:c,port:s,protocol:n,publicKey:o})}(e):T(e);if(t&&function(e){if(!C.T)return!0;const{port:t,projectId:n,protocol:o}=e;return!["protocol","publicKey","host","projectId"].find((t=>!e[t]&&(r.vF.error(`Invalid Sentry Dsn: ${t} missing`),!0)))&&(n.match(/^\d+$/)?function(e){return"http"===e||"https"===e}(o)?!t||!isNaN(parseInt(t,10))||(r.vF.error(`Invalid Sentry Dsn: Invalid port ${t}`),!1):(r.vF.error(`Invalid Sentry Dsn: Invalid protocol ${o}`),!1):(r.vF.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1))}(t))return t}const M="7";function P(e){const t=e.protocol?`${e.protocol}:`:"",n=e.port?`:${e.port}`:"";return`${t}//${e.host}${n}${e.path?`/${e.path}`:""}/api/`}function I(e,t={}){const n="string"===typeof t?t:t.tunnel,r="string"!==typeof t&&t._metadata?t._metadata.sdk:void 0;return n||`${function(e){return`${P(e)}${e.projectId}/envelope/`}(e)}?${function(e,t){return(0,b.u4)({sentry_key:e.publicKey,sentry_version:M,...t&&{sentry_client:`${t.name}/${t.version}`}})}(e,r)}`}var N=n(83917),D=n(16341);const L=(0,D.VZ)();function F(){if(!("fetch"in L))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(e){return!1}}function j(e){return e&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(e.toString())}const U=(0,D.VZ)();const z={},B={};function V(e,t){z[e]=z[e]||[],z[e].push(t)}function $(e,t){B[e]||(t(),B[e]=!0)}function H(e,t){const n=e&&z[e];if(n)for(const i of n)try{i(t)}catch(o){C.T&&r.vF.error(`Error while triggering instrumentation handler.\nType: ${e}\nName: ${(0,N.qQ)(i)}\nError:`,o)}}const W=D.OW;let q;function G(e){const t="history";V(t,e),$(t,Y)}function Y(){if(!function(){const e=U.chrome,t=e&&e.app&&e.app.runtime,n="history"in U&&!!U.history.pushState&&!!U.history.replaceState;return!t&&n}())return;const e=W.onpopstate;function t(e){return function(...t){const n=t.length>2?t[2]:void 0;if(n){const e=q,t=String(n);q=t;H("history",{from:e,to:t})}return e.apply(this,t)}}W.onpopstate=function(...t){const n=W.location.href,r=q;q=n;if(H("history",{from:r,to:n}),e)try{return e.apply(this,t)}catch(o){}},(0,b.GS)(W.history,"pushState",t),(0,b.GS)(W.history,"replaceState",t)}var X=n(73816),K=n(60690),Z=n(42181);function Q(e,t=[]){return[e,t]}function J(e,t){const[n,r]=e;return[n,[...r,t]]}function ee(e,t){const n=e[1];for(const r of n){if(t(r,r[0].type))return!0}return!1}function te(e,t){return(t||new TextEncoder).encode(e)}function ne(e,t){const[n,r]=e;let o=JSON.stringify(n);function i(e){"string"===typeof o?o="string"===typeof e?o+e:[te(o,t),e]:o.push("string"===typeof e?te(e,t):e)}for(const s of r){const[e,t]=s;if(i(`\n${JSON.stringify(e)}\n`),"string"===typeof t||t instanceof Uint8Array)i(t);else{let e;try{e=JSON.stringify(t)}catch(a){e=JSON.stringify((0,Z.S8)(t))}i(e)}}return"string"===typeof o?o:function(e){const t=e.reduce(((e,t)=>e+t.length),0),n=new Uint8Array(t);let r=0;for(const o of e)n.set(o,r),r+=o.length;return n}(o)}function re(e,t){const n="string"===typeof e.data?te(e.data,t):e.data;return[(0,b.Ce)({type:"attachment",length:n.length,filename:e.filename,content_type:e.contentType,attachment_type:e.attachmentType}),n]}const oe={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",span:"span",statsd:"metric_bucket"};function ie(e){return oe[e]}function ae(e){if(!e||!e.sdk)return;const{name:t,version:n}=e.sdk;return{name:t,version:n}}class se extends Error{constructor(e,t="warn"){super(e),this.message=e,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=t}}function ue(e,t,n,r){const o=ae(n),i=e.type&&"replay_event"!==e.type?e.type:"event";!function(e,t){t&&(e.sdk=e.sdk||{},e.sdk.name=e.sdk.name||t.name,e.sdk.version=e.sdk.version||t.version,e.sdk.integrations=[...e.sdk.integrations||[],...t.integrations||[]],e.sdk.packages=[...e.sdk.packages||[],...t.packages||[]])}(e,n&&n.sdk);const a=function(e,t,n,r){const o=e.sdkProcessingMetadata&&e.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:e.event_id,sent_at:(new Date).toISOString(),...t&&{sdk:t},...!!n&&r&&{dsn:O(r)},...o&&{trace:(0,b.Ce)({...o})}}}(e,o,r,t);delete e.sdkProcessingMetadata;return Q(a,[[{type:i},e]])}function le(e,t,n,r){const o={sent_at:(new Date).toISOString()};n&&n.sdk&&(o.sdk={name:n.sdk.name,version:n.sdk.version}),r&&t&&(o.dsn=O(t));const i=function(e){const t=function(e){let t="";for(const n of e){const e=Object.entries(n.tags),r=e.length>0?`|#${e.map((([e,t])=>`${e}:${t}`)).join(",")}`:"";t+=`${n.name}@${n.unit}:${n.metric}|${n.metricType}${r}|T${n.timestamp}\n`}return t}(e);return[{type:"statsd",length:t.length},t]}(e);return Q(o,[i])}var ce=n(7058),fe=n(75452),de=n(49475);const he="Not capturing exception because it's already been captured.";class pe{constructor(e){if(this._options=e,this._integrations={},this._integrationsInitialized=!1,this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],e.dsn?this._dsn=k(e.dsn):a.T&&r.vF.warn("No DSN provided, client will not send events."),this._dsn){const t=I(this._dsn,e);this._transport=e.transport({recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:t})}}captureException(e,t,n){if((0,o.GR)(e))return void(a.T&&r.vF.log(he));let i=t&&t.event_id;return this._process(this.eventFromException(e,t).then((e=>this._captureEvent(e,t,n))).then((e=>{i=e}))),i}captureMessage(e,t,n,r){let o=n&&n.event_id;const i=(0,X.NF)(e)?e:String(e),a=(0,X.sO)(e)?this.eventFromMessage(i,t,n):this.eventFromException(e,n);return this._process(a.then((e=>this._captureEvent(e,n,r))).then((e=>{o=e}))),o}captureEvent(e,t,n){if(t&&t.originalException&&(0,o.GR)(t.originalException))return void(a.T&&r.vF.log(he));let i=t&&t.event_id;const s=(e.sdkProcessingMetadata||{}).capturedSpanScope;return this._process(this._captureEvent(e,t,s||n).then((e=>{i=e}))),i}captureSession(e){"string"!==typeof e.release?a.T&&r.vF.warn("Discarded session because of missing or non-string release"):(this.sendSession(e),(0,ce.qO)(e,{init:!1}))}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}flush(e){const t=this._transport;return t?(this.metricsAggregator&&this.metricsAggregator.flush(),this._isClientDoneProcessing(e).then((n=>t.flush(e).then((e=>n&&e))))):(0,K.XW)(!0)}close(e){return this.flush(e).then((e=>(this.getOptions().enabled=!1,this.metricsAggregator&&this.metricsAggregator.close(),e)))}getEventProcessors(){return this._eventProcessors}addEventProcessor(e){this._eventProcessors.push(e)}setupIntegrations(e){(e&&!this._integrationsInitialized||this._isEnabled()&&!this._integrationsInitialized)&&this._setupIntegrations()}init(){this._isEnabled()&&this._setupIntegrations()}getIntegrationById(e){return this.getIntegrationByName(e)}getIntegrationByName(e){return this._integrations[e]}getIntegration(e){try{return this._integrations[e.id]||null}catch(t){return a.T&&r.vF.warn(`Cannot retrieve integration ${e.id} from the current Client`),null}}addIntegration(e){const t=this._integrations[e.name];d(this,e,this._integrations),t||f(this,[e])}sendEvent(e,t={}){this.emit("beforeSendEvent",e,t);let n=ue(e,this._dsn,this._options._metadata,this._options.tunnel);for(const o of t.attachments||[])n=J(n,re(o,this._options.transportOptions&&this._options.transportOptions.textEncoder));const r=this._sendEnvelope(n);r&&r.then((t=>this.emit("afterSendEvent",e,t)),null)}sendSession(e){const t=function(e,t,n,r){const o=ae(n);return Q({sent_at:(new Date).toISOString(),...o&&{sdk:o},...!!r&&t&&{dsn:O(t)}},["aggregates"in e?[{type:"sessions"},e]:[{type:"session"},e.toJSON()]])}(e,this._dsn,this._options._metadata,this._options.tunnel);this._sendEnvelope(t)}recordDroppedEvent(e,t,n){if(this._options.sendClientReports){const n=`${e}:${t}`;a.T&&r.vF.log(`Adding outcome: "${n}"`),this._outcomes[n]=this._outcomes[n]+1||1}}captureAggregateMetrics(e){a.T&&r.vF.log(`Flushing aggregated metrics, number of metrics: ${e.length}`);const t=le(e,this._dsn,this._options._metadata,this._options.tunnel);this._sendEnvelope(t)}on(e,t){this._hooks[e]||(this._hooks[e]=[]),this._hooks[e].push(t)}emit(e,...t){this._hooks[e]&&this._hooks[e].forEach((e=>e(...t)))}_setupIntegrations(){const{integrations:e}=this._options;this._integrations=function(e,t){const n={};return t.forEach((t=>{t&&d(e,t,n)})),n}(this,e),f(this,e),this._integrationsInitialized=!0}_updateSessionFromEvent(e,t){let n=!1,r=!1;const o=t.exception&&t.exception.values;if(o){r=!0;for(const e of o){const t=e.mechanism;if(t&&!1===t.handled){n=!0;break}}}const i="ok"===e.status;(i&&0===e.errors||i&&n)&&((0,ce.qO)(e,{...n&&{status:"crashed"},errors:e.errors||Number(r||n)}),this.captureSession(e))}_isClientDoneProcessing(e){return new K.T2((t=>{let n=0;const r=setInterval((()=>{0==this._numProcessing?(clearInterval(r),t(!0)):(n+=1,e&&n>=e&&(clearInterval(r),t(!1)))}),1)}))}_isEnabled(){return!1!==this.getOptions().enabled&&void 0!==this._transport}_prepareEvent(e,t,n,r=(0,u.rm)()){const o=this.getOptions(),i=Object.keys(this._integrations);return!t.integrations&&i.length>0&&(t.integrations=i),this.emit("preprocessEvent",e,t),(0,de.mG)(o,e,t,n,this,r).then((e=>{if(null===e)return e;const t={...r.getPropagationContext(),...n?n.getPropagationContext():void 0};if(!(e.contexts&&e.contexts.trace)&&t){const{traceId:r,spanId:o,parentSpanId:i,dsc:a}=t;e.contexts={trace:{trace_id:r,span_id:o,parent_span_id:i},...e.contexts};const s=a||(0,fe.l)(r,this,n);e.sdkProcessingMetadata={dynamicSamplingContext:s,...e.sdkProcessingMetadata}}return e}))}_captureEvent(e,t={},n){return this._processEvent(e,t,n).then((e=>e.event_id),(e=>{if(a.T){const t=e;"log"===t.logLevel?r.vF.log(t.message):r.vF.warn(t)}}))}_processEvent(e,t,n){const r=this.getOptions(),{sampleRate:o}=r,i=ve(e),a=ge(e),s=e.type||"error",u=`before send for type \`${s}\``;if(a&&"number"===typeof o&&Math.random()>o)return this.recordDroppedEvent("sample_rate","error",e),(0,K.xg)(new se(`Discarding event because it's not included in the random sample (sampling rate = ${o})`,"log"));const l="replay_event"===s?"replay":s,c=(e.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this._prepareEvent(e,t,n,c).then((n=>{if(null===n)throw this.recordDroppedEvent("event_processor",l,e),new se("An event processor returned `null`, will not send event.","log");if(t.data&&!0===t.data.__sentry__)return n;const o=function(e,t,n){const{beforeSend:r,beforeSendTransaction:o}=e;if(ge(t)&&r)return r(t,n);if(ve(t)&&o)return o(t,n);return t}(r,n,t);return function(e,t){const n=`${t} must return \`null\` or a valid event.`;if((0,X.Qg)(e))return e.then((e=>{if(!(0,X.Qd)(e)&&null!==e)throw new se(n);return e}),(e=>{throw new se(`${t} rejected with ${e}`)}));if(!(0,X.Qd)(e)&&null!==e)throw new se(n);return e}(o,u)})).then((r=>{if(null===r)throw this.recordDroppedEvent("before_send",l,e),new se(`${u} returned \`null\`, will not send event.`,"log");const o=n&&n.getSession();!i&&o&&this._updateSessionFromEvent(o,r);const a=r.transaction_info;if(i&&a&&r.transaction!==e.transaction){const e="custom";r.transaction_info={...a,source:e}}return this.sendEvent(r,t),r})).then(null,(e=>{if(e instanceof se)throw e;throw this.captureException(e,{data:{__sentry__:!0},originalException:e}),new se(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${e}`)}))}_process(e){this._numProcessing++,e.then((e=>(this._numProcessing--,e)),(e=>(this._numProcessing--,e)))}_sendEnvelope(e){if(this.emit("beforeEnvelope",e),this._isEnabled()&&this._transport)return this._transport.send(e).then(null,(e=>{a.T&&r.vF.error("Error while sending event:",e)}));a.T&&r.vF.error("Transport disabled")}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.keys(e).map((t=>{const[n,r]=t.split(":");return{reason:n,category:r,quantity:e[t]}}))}}function ge(e){return void 0===e.type}function ve(e){return"transaction"===e.type}var ye=n(40601);var me=n(89297);const be="undefined"===typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__;function _e(e,t){const n=xe(e,t),r={type:t&&t.name,value:Ae(t)};return n.length&&(r.stacktrace={frames:n}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function we(e,t){return{exception:{values:[_e(e,t)]}}}function xe(e,t){const n=t.stacktrace||t.stack||"",r=function(e){if(e){if("number"===typeof e.framesToPop)return e.framesToPop;if(Se.test(e.message))return 1}return 0}(t);try{return e(n,r)}catch(o){}return[]}const Se=/Minified React error #\d+;/i;function Ae(e){const t=e&&e.message;return t?t.error&&"string"===typeof t.error.message?t.error.message:t:"No error message"}function Ee(e,t,n,r,i){let a;if((0,X.T2)(t)&&t.error){return we(e,t.error)}if((0,X.BD)(t)||(0,X.W6)(t)){const i=t;if("stack"in t)a=we(e,t);else{const t=i.name||((0,X.BD)(i)?"DOMError":"DOMException"),s=i.message?`${t}: ${i.message}`:t;a=Ce(e,s,n,r),(0,o.gO)(a,s)}return"code"in i&&(a.tags={...a.tags,"DOMException.code":`${i.code}`}),a}if((0,X.bJ)(t))return we(e,t);if((0,X.Qd)(t)||(0,X.xH)(t)){return a=function(e,t,n,r){const o=(0,_.KU)(),i=o&&o.getOptions().normalizeDepth,a={exception:{values:[{type:(0,X.xH)(t)?t.constructor.name:r?"UnhandledRejection":"Error",value:Re(t,{isUnhandledRejection:r})}]},extra:{__serialized__:(0,Z.cd)(t,i)}};if(n){const t=xe(e,n);t.length&&(a.exception.values[0].stacktrace={frames:t})}return a}(e,t,n,i),(0,o.M6)(a,{synthetic:!0}),a}return a=Ce(e,t,n,r),(0,o.gO)(a,`${t}`,void 0),(0,o.M6)(a,{synthetic:!0}),a}function Ce(e,t,n,r){const o={};if(r&&n){const r=xe(e,n);r.length&&(o.exception={values:[{value:t,stacktrace:{frames:r}}]})}if((0,X.NF)(t)){const{__sentry_template_string__:e,__sentry_template_values__:n}=t;return o.logentry={message:e,params:n},o}return o.message=t,o}function Re(e,{isUnhandledRejection:t}){const n=(0,b.HF)(e),r=t?"promise rejection":"exception";if((0,X.T2)(e))return`Event \`ErrorEvent\` captured as ${r} with message \`${e.message}\``;if((0,X.xH)(e)){return`Event \`${function(e){try{const t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch(t){}}(e)}\` (type=${e.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${n}`}const Oe=D.OW;let Te=0;function ke(){return Te>0}function Me(e,t={},n){if("function"!==typeof e)return e;try{const t=e.__sentry_wrapped__;if(t)return t;if((0,b.sp)(e))return e}catch(i){return e}const r=function(){const r=Array.prototype.slice.call(arguments);try{n&&"function"===typeof n&&n.apply(this,arguments);const o=r.map((e=>Me(e,t)));return e.apply(this,o)}catch(i){throw Te++,setTimeout((()=>{Te--})),(0,_.v4)((e=>{e.addEventProcessor((e=>(t.mechanism&&((0,o.gO)(e,void 0,void 0),(0,o.M6)(e,t.mechanism)),e.extra={...e.extra,arguments:r},e))),(0,_.Cp)(i)})),i}};try{for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=e[t])}catch(a){}(0,b.pO)(r,e),(0,b.my)(e,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get:()=>e.name})}catch(a){}return r}class Pe extends pe{constructor(e){const t=Oe.SENTRY_SDK_SOURCE||"npm";(0,ye.K)(e,"browser",["browser"],t),super(e),e.sendClientReports&&Oe.document&&Oe.document.addEventListener("visibilitychange",(()=>{"hidden"===Oe.document.visibilityState&&this._flushOutcomes()}))}eventFromException(e,t){return function(e,t,n,r){const i=Ee(e,t,n&&n.syntheticException||void 0,r);return(0,o.M6)(i),i.level="error",n&&n.event_id&&(i.event_id=n.event_id),(0,K.XW)(i)}(this._options.stackParser,e,t,this._options.attachStacktrace)}eventFromMessage(e,t="info",n){return function(e,t,n="info",r,o){const i=Ce(e,t,r&&r.syntheticException||void 0,o);return i.level=n,r&&r.event_id&&(i.event_id=r.event_id),(0,K.XW)(i)}(this._options.stackParser,e,t,n,this._options.attachStacktrace)}captureUserFeedback(e){if(!this._isEnabled())return void(be&&r.vF.warn("SDK not enabled, will not capture user feedback."));const t=function(e,{metadata:t,tunnel:n,dsn:r}){const o={event_id:e.event_id,sent_at:(new Date).toISOString(),...t&&t.sdk&&{sdk:{name:t.sdk.name,version:t.sdk.version}},...!!n&&!!r&&{dsn:O(r)}},i=function(e){return[{type:"user_report"},e]}(e);return Q(o,[i])}(e,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this._sendEnvelope(t)}_prepareEvent(e,t,n){return e.platform=e.platform||"javascript",super._prepareEvent(e,t,n)}_flushOutcomes(){const e=this._clearOutcomes();if(0===e.length)return void(be&&r.vF.log("No outcomes to send"));if(!this._dsn)return void(be&&r.vF.log("No dsn provided, will not send outcomes"));be&&r.vF.log("Sending outcomes:",e);const t=(n=e,Q((o=this._options.tunnel&&O(this._dsn))?{dsn:o}:{},[[{type:"client_report"},{timestamp:i||(0,me.lu)(),discarded_events:n}]]));var n,o,i;this._sendEnvelope(t)}}function Ie(){"console"in D.OW&&r.Ow.forEach((function(e){e in D.OW.console&&(0,b.GS)(D.OW.console,e,(function(t){return r.Z9[e]=t,function(...t){H("console",{args:t,level:e});const n=r.Z9[e];n&&n.apply(D.OW.console,t)}}))}))}const Ne=D.OW,De=1e3;let Le,Fe,je;function Ue(){if(!Ne.document)return;const e=H.bind(null,"dom"),t=ze(e,!0);Ne.document.addEventListener("click",t,!1),Ne.document.addEventListener("keypress",t,!1),["EventTarget","Node"].forEach((t=>{const n=Ne[t]&&Ne[t].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&((0,b.GS)(n,"addEventListener",(function(t){return function(n,r,o){if("click"===n||"keypress"==n)try{const r=this,i=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},a=i[n]=i[n]||{refCount:0};if(!a.handler){const r=ze(e);a.handler=r,t.call(this,n,r,o)}a.refCount++}catch(i){}return t.call(this,n,r,o)}})),(0,b.GS)(n,"removeEventListener",(function(e){return function(t,n,r){if("click"===t||"keypress"==t)try{const n=this,o=n.__sentry_instrumentation_handlers__||{},i=o[t];i&&(i.refCount--,i.refCount<=0&&(e.call(this,t,i.handler,r),i.handler=void 0,delete o[t]),0===Object.keys(o).length&&delete n.__sentry_instrumentation_handlers__)}catch(o){}return e.call(this,t,n,r)}})))}))}function ze(e,t=!1){return n=>{if(!n||n._sentryCaptured)return;const r=function(e){try{return e.target}catch(t){return null}}(n);if(function(e,t){return"keypress"===e&&(!t||!t.tagName||"INPUT"!==t.tagName&&"TEXTAREA"!==t.tagName&&!t.isContentEditable)}(n.type,r))return;(0,b.my)(n,"_sentryCaptured",!0),r&&!r._sentryId&&(0,b.my)(r,"_sentryId",(0,o.eJ)());const i="keypress"===n.type?"input":n.type;if(!function(e){if(e.type!==Fe)return!1;try{if(!e.target||e.target._sentryId!==je)return!1}catch(t){}return!0}(n)){e({event:n,name:i,global:t}),Fe=n.type,je=r?r._sentryId:void 0}clearTimeout(Le),Le=Ne.setTimeout((()=>{je=void 0,Fe=void 0}),De)}}const Be=D.OW,Ve="__sentry_xhr_v3__";function $e(){if(!Be.XMLHttpRequest)return;const e=XMLHttpRequest.prototype;(0,b.GS)(e,"open",(function(e){return function(...t){const n=Date.now(),r=(0,X.Kg)(t[0])?t[0].toUpperCase():void 0,o=function(e){if((0,X.Kg)(e))return e;try{return e.toString()}catch(t){}return}(t[1]);if(!r||!o)return e.apply(this,t);this[Ve]={method:r,url:o,request_headers:{}},"POST"===r&&o.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const i=()=>{const e=this[Ve];if(e&&4===this.readyState){try{e.status_code=this.status}catch(t){}H("xhr",{args:[r,o],endTimestamp:Date.now(),startTimestamp:n,xhr:this})}};return"onreadystatechange"in this&&"function"===typeof this.onreadystatechange?(0,b.GS)(this,"onreadystatechange",(function(e){return function(...t){return i(),e.apply(this,t)}})):this.addEventListener("readystatechange",i),(0,b.GS)(this,"setRequestHeader",(function(e){return function(...t){const[n,r]=t,o=this[Ve];return o&&(0,X.Kg)(n)&&(0,X.Kg)(r)&&(o.request_headers[n.toLowerCase()]=r),e.apply(this,t)}})),e.apply(this,t)}})),(0,b.GS)(e,"send",(function(e){return function(...t){const n=this[Ve];if(!n)return e.apply(this,t);void 0!==t[0]&&(n.body=t[0]);return H("xhr",{args:[n.method,n.url],startTimestamp:Date.now(),xhr:this}),e.apply(this,t)}}))}function He(){(function(){if("string"===typeof EdgeRuntime)return!0;if(!F())return!1;if(j(L.fetch))return!0;let e=!1;const t=L.document;if(t&&"function"===typeof t.createElement)try{const n=t.createElement("iframe");n.hidden=!0,t.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=j(n.contentWindow.fetch)),t.head.removeChild(n)}catch(n){C.T&&r.vF.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",n)}return e})()&&(0,b.GS)(D.OW,"fetch",(function(e){return function(...t){const{method:n,url:r}=function(e){if(0===e.length)return{method:"GET",url:""};if(2===e.length){const[t,n]=e;return{url:qe(t),method:We(n,"method")?String(n.method).toUpperCase():"GET"}}const t=e[0];return{url:qe(t),method:We(t,"method")?String(t.method).toUpperCase():"GET"}}(t),o={args:t,fetchData:{method:n,url:r},startTimestamp:Date.now()};return H("fetch",{...o}),e.apply(D.OW,t).then((e=>(H("fetch",{...o,endTimestamp:Date.now(),response:e}),e)),(e=>{throw H("fetch",{...o,endTimestamp:Date.now(),error:e}),e}))}}))}function We(e,t){return!!e&&"object"===typeof e&&!!e[t]}function qe(e){return"string"===typeof e?e:e?We(e,"url")?e.url:e.toString?e.toString():"":""}var Ge=n(19766);const Ye=["fatal","error","warning","log","info","debug"];function Xe(e){return"warn"===e?"warning":Ye.includes(e)?e:"log"}function Ke(e){if(!e)return{};const t=e.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};const n=t[6]||"",r=t[8]||"";return{host:t[4],path:t[5],protocol:t[2],search:n,hash:r,relative:t[5]+n+r}}const Ze=1024,Qe="Breadcrumbs",Je=(e={})=>{const t={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...e};return{name:Qe,setupOnce(){},setup(e){var n;t.console&&function(e){const t="console";V(t,e),$(t,Ie)}(function(e){return function(t){if((0,_.KU)()!==e)return;const n={category:"console",data:{arguments:t.args,logger:"console"},level:Xe(t.level),message:(0,i.gt)(t.args," ")};if("assert"===t.level){if(!1!==t.args[0])return;n.message=`Assertion failed: ${(0,i.gt)(t.args.slice(1)," ")||"console.assert"}`,n.data.arguments=t.args.slice(1)}(0,_.ZQ)(n,{input:t.args,level:t.level})}}(e)),t.dom&&(n=function(e,t){return function(n){if((0,_.KU)()!==e)return;let o,i,a="object"===typeof t?t.serializeAttribute:void 0,s="object"===typeof t&&"number"===typeof t.maxStringLength?t.maxStringLength:void 0;s&&s>Ze&&(be&&r.vF.warn(`\`dom.maxStringLength\` cannot exceed 1024, but a value of ${s} was configured. Sentry will use 1024 instead.`),s=Ze),"string"===typeof a&&(a=[a]);try{const e=n.event,t=function(e){return!!e&&!!e.target}(e)?e.target:e;o=(0,Ge.Hd)(t,{keyAttrs:a,maxStringLength:s}),i=(0,Ge.xE)(t)}catch(l){o=""}if(0===o.length)return;const u={category:`ui.${n.name}`,message:o};i&&(u.data={"ui.component_name":i}),(0,_.ZQ)(u,{event:n.event,name:n.name,global:n.global})}}(e,t.dom),V("dom",n),$("dom",Ue)),t.xhr&&function(e){V("xhr",e),$("xhr",$e)}(function(e){return function(t){if((0,_.KU)()!==e)return;const{startTimestamp:n,endTimestamp:r}=t,o=t.xhr[Ve];if(!n||!r||!o)return;const{method:i,url:a,status_code:s,body:u}=o,l={method:i,url:a,status_code:s},c={xhr:t.xhr,input:u,startTimestamp:n,endTimestamp:r};(0,_.ZQ)({category:"xhr",data:l,type:"http"},c)}}(e)),t.fetch&&function(e){const t="fetch";V(t,e),$(t,He)}(function(e){return function(t){if((0,_.KU)()!==e)return;const{startTimestamp:n,endTimestamp:r}=t;if(r&&(!t.fetchData.url.match(/sentry_key/)||"POST"!==t.fetchData.method))if(t.error){const e=t.fetchData,o={data:t.error,input:t.args,startTimestamp:n,endTimestamp:r};(0,_.ZQ)({category:"fetch",data:e,level:"error",type:"http"},o)}else{const e=t.response,o={...t.fetchData,status_code:e&&e.status},i={input:t.args,response:e,startTimestamp:n,endTimestamp:r};(0,_.ZQ)({category:"fetch",data:o,type:"http"},i)}}}(e)),t.history&&G(function(e){return function(t){if((0,_.KU)()!==e)return;let n=t.from,r=t.to;const o=Ke(Oe.location.href);let i=n?Ke(n):void 0;const a=Ke(r);i&&i.path||(i=o),o.protocol===a.protocol&&o.host===a.host&&(r=a.relative),o.protocol===i.protocol&&o.host===i.host&&(n=i.relative),(0,_.ZQ)({category:"navigation",data:{from:n,to:r}})}}(e)),t.sentry&&e.on&&e.on("beforeSendEvent",function(e){return function(t){(0,_.KU)()===e&&(0,_.ZQ)({category:"sentry."+("transaction"===t.type?"transaction":"event"),event_id:t.event_id,level:t.level,message:(0,o.$X)(t)},{event:t})}}(e))}}};h(Qe,Je);const et="Dedupe",tt=()=>{let e;return{name:et,setupOnce(){},processEvent(t){if(t.type)return t;try{if(function(e,t){if(!t)return!1;if(function(e,t){const n=e.message,r=t.message;if(!n&&!r)return!1;if(n&&!r||!n&&r)return!1;if(n!==r)return!1;if(!rt(e,t))return!1;if(!nt(e,t))return!1;return!0}(e,t))return!0;if(function(e,t){const n=ot(t),r=ot(e);if(!n||!r)return!1;if(n.type!==r.type||n.value!==r.value)return!1;if(!rt(e,t))return!1;if(!nt(e,t))return!1;return!0}(e,t))return!0;return!1}(t,e))return be&&r.vF.warn("Event dropped due to being a duplicate of previously captured event."),null}catch(n){}return e=t}}};h(et,tt);function nt(e,t){let n=it(e),r=it(t);if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;if(r.length!==n.length)return!1;for(let o=0;o{const t={onerror:!0,onunhandledrejection:!0,...e};return{name:ct,setupOnce(){Error.stackTraceLimit=50},setup(e){t.onerror&&(!function(e){!function(e){const t="error";V(t,e),$(t,st)}((t=>{const{stackParser:n,attachStacktrace:r}=pt();if((0,_.KU)()!==e||ke())return;const{msg:o,url:i,line:a,column:s,error:u}=t,l=void 0===u&&(0,X.Kg)(o)?function(e,t,n,r){const o=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;let i=(0,X.T2)(e)?e.message:e,a="Error";const s=i.match(o);s&&(a=s[1],i=s[2]);const u={exception:{values:[{type:a,value:i}]}};return dt(u,t,n,r)}(o,i,a,s):dt(Ee(n,u||o,void 0,r,!1),i,a,s);l.level="error",(0,_.r)(l,{originalException:u,mechanism:{handled:!1,type:"onerror"}})}))}(e),ht("onerror")),t.onunhandledrejection&&(!function(e){!function(e){const t="unhandledrejection";V(t,e),$(t,lt)}((t=>{const{stackParser:n,attachStacktrace:r}=pt();if((0,_.KU)()!==e||ke())return;const o=function(e){if((0,X.sO)(e))return e;const t=e;try{if("reason"in t)return t.reason;if("detail"in t&&"reason"in t.detail)return t.detail.reason}catch(n){}return e}(t),i=(0,X.sO)(o)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(o)}`}]}}:Ee(n,o,void 0,r,!0);i.level="error",(0,_.r)(i,{originalException:o,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(e),ht("onunhandledrejection"))}}};h(ct,ft);function dt(e,t,n,r){const o=e.exception=e.exception||{},i=o.values=o.values||[],a=i[0]=i[0]||{},s=a.stacktrace=a.stacktrace||{},u=s.frames=s.frames||[],l=isNaN(parseInt(r,10))?void 0:r,c=isNaN(parseInt(n,10))?void 0:n,f=(0,X.Kg)(t)&&t.length>0?t:(0,Ge.$N)();return 0===u.length&&u.push({colno:l,filename:f,function:"?",in_app:!0,lineno:c}),e}function ht(e){be&&r.vF.log(`Global Handler attached: ${e}`)}function pt(){const e=(0,_.KU)();return e&&e.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const gt="HttpContext",vt=()=>({name:gt,setupOnce(){},preprocessEvent(e){if(!Oe.navigator&&!Oe.location&&!Oe.document)return;const t=e.request&&e.request.url||Oe.location&&Oe.location.href,{referrer:n}=Oe.document||{},{userAgent:r}=Oe.navigator||{},o={...e.request&&e.request.headers,...n&&{Referer:n},...r&&{"User-Agent":r}},i={...e.request,...t&&{url:t},headers:o};e.request=i}});h(gt,vt);function yt(e,t,n=250,r,o,a,s){if(!a.exception||!a.exception.values||!s||!(0,X.tH)(s.originalException,Error))return;const u=a.exception.values.length>0?a.exception.values[a.exception.values.length-1]:void 0;var l,c;u&&(a.exception.values=(l=mt(e,t,o,s.originalException,r,a.exception.values,u,0),c=n,l.map((e=>(e.value&&(e.value=(0,i.xv)(e.value,c)),e)))))}function mt(e,t,n,r,o,i,a,s){if(i.length>=n+1)return i;let u=[...i];if((0,X.tH)(r[o],Error)){bt(a,s);const i=e(t,r[o]),l=u.length;_t(i,o,l,s),u=mt(e,t,n,r[o],o,[i,...u],i,l)}return Array.isArray(r.errors)&&r.errors.forEach(((r,i)=>{if((0,X.tH)(r,Error)){bt(a,s);const l=e(t,r),c=u.length;_t(l,`errors[${i}]`,c,s),u=mt(e,t,n,r,o,[l,...u],l,c)}})),u}function bt(e,t){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,..."AggregateError"===e.type&&{is_exception_group:!0},exception_id:t}}function _t(e,t,n,r){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,type:"chained",source:t,exception_id:n,parent_id:r}}const wt="LinkedErrors",xt=(e={})=>{const t=e.limit||5,n=e.key||"cause";return{name:wt,setupOnce(){},preprocessEvent(e,r,o){const i=o.getOptions();yt(_e,i.stackParser,i.maxValueLength,n,t,e,r)}}},St=(h(wt,xt),["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"]),At="TryCatch",Et=(e={})=>{const t={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...e};return{name:At,setupOnce(){t.setTimeout&&(0,b.GS)(Oe,"setTimeout",Ct),t.setInterval&&(0,b.GS)(Oe,"setInterval",Ct),t.requestAnimationFrame&&(0,b.GS)(Oe,"requestAnimationFrame",Rt),t.XMLHttpRequest&&"XMLHttpRequest"in Oe&&(0,b.GS)(XMLHttpRequest.prototype,"send",Ot);const e=t.eventTarget;if(e){(Array.isArray(e)?e:St).forEach(Tt)}}}};h(At,Et);function Ct(e){return function(...t){const n=t[0];return t[0]=Me(n,{mechanism:{data:{function:(0,N.qQ)(e)},handled:!1,type:"instrument"}}),e.apply(this,t)}}function Rt(e){return function(t){return e.apply(this,[Me(t,{mechanism:{data:{function:"requestAnimationFrame",handler:(0,N.qQ)(e)},handled:!1,type:"instrument"}})])}}function Ot(e){return function(...t){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((e=>{e in n&&"function"===typeof n[e]&&(0,b.GS)(n,e,(function(t){const n={mechanism:{data:{function:e,handler:(0,N.qQ)(t)},handled:!1,type:"instrument"}},r=(0,b.sp)(t);return r&&(n.mechanism.data.handler=(0,N.qQ)(r)),Me(t,n)}))})),e.apply(this,t)}}function Tt(e){const t=Oe,n=t[e]&&t[e].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&((0,b.GS)(n,"addEventListener",(function(t){return function(n,r,o){try{"function"===typeof r.handleEvent&&(r.handleEvent=Me(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:(0,N.qQ)(r),target:e},handled:!1,type:"instrument"}}))}catch(i){}return t.apply(this,[n,Me(r,{mechanism:{data:{function:"addEventListener",handler:(0,N.qQ)(r),target:e},handled:!1,type:"instrument"}}),o])}})),(0,b.GS)(n,"removeEventListener",(function(e){return function(t,n,r){const o=n;try{const n=o&&o.__sentry_wrapped__;n&&e.call(this,t,n,r)}catch(i){}return e.call(this,t,o,r)}})))}const kt="?";function Mt(e,t,n,r){const o={filename:e,function:t,in_app:!0};return void 0!==n&&(o.lineno=n),void 0!==r&&(o.colno=r),o}const Pt=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,It=/\((\S*)(?::(\d+))(?::(\d+))\)/,Nt=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Dt=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Lt=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Ft=[[30,e=>{const t=Pt.exec(e);if(t){if(t[2]&&0===t[2].indexOf("eval")){const e=It.exec(t[2]);e&&(t[2]=e[1],t[3]=e[2],t[4]=e[3])}const[e,n]=Ut(t[1]||kt,t[2]);return Mt(n,e,t[3]?+t[3]:void 0,t[4]?+t[4]:void 0)}}],[50,e=>{const t=Nt.exec(e);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){const e=Dt.exec(t[3]);e&&(t[1]=t[1]||"eval",t[3]=e[1],t[4]=e[2],t[5]="")}let e=t[3],n=t[1]||kt;return[n,e]=Ut(n,e),Mt(e,n,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}}],[40,e=>{const t=Lt.exec(e);return t?Mt(t[2],t[1]||kt,+t[3],t[4]?+t[4]:void 0):void 0}]],jt=(0,N.gd)(...Ft),Ut=(e,t)=>{const n=-1!==e.indexOf("safari-extension"),r=-1!==e.indexOf("safari-web-extension");return n||r?[-1!==e.indexOf("@")?e.split("@")[0]:kt,n?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};function zt(e){const t=[];function n(e){return t.splice(t.indexOf(e),1)[0]}return{$:t,add:function(r){if(!(void 0===e||t.lengthn(o))).then(null,(()=>n(o).then(null,(()=>{})))),o},drain:function(e){return new K.T2(((n,r)=>{let o=t.length;if(!o)return n(!0);const i=setTimeout((()=>{e&&e>0&&n(!1)}),e);t.forEach((e=>{(0,K.XW)(e).then((()=>{--o||(clearTimeout(i),n(!0))}),r)}))}))}}}const Bt=6e4;function Vt(e,{statusCode:t,headers:n},r=Date.now()){const o={...e},i=n&&n["x-sentry-rate-limits"],a=n&&n["retry-after"];if(i)for(const s of i.trim().split(",")){const[e,t,,,n]=s.split(":",5),i=parseInt(e,10),a=1e3*(isNaN(i)?60:i);if(t)for(const s of t.split(";"))"metric_bucket"===s&&n&&!n.split(";").includes("custom")||(o[s]=r+a);else o.all=r+a}else a?o.all=r+function(e,t=Date.now()){const n=parseInt(`${e}`,10);if(!isNaN(n))return 1e3*n;const r=Date.parse(`${e}`);return isNaN(r)?Bt:r-t}(a,r):429===t&&(o.all=r+6e4);return o}const $t=30;function Ht(e,t,n=zt(e.bufferSize||$t)){let o={};function i(i){const s=[];if(ee(i,((t,n)=>{const r=ie(n);if(function(e,t,n=Date.now()){return function(e,t){return e[t]||e.all||0}(e,t)>n}(o,r)){const o=Wt(t,n);e.recordDroppedEvent("ratelimit_backoff",r,o)}else s.push(t)})),0===s.length)return(0,K.XW)();const u=Q(i[0],s),l=t=>{ee(u,((n,r)=>{const o=Wt(n,r);e.recordDroppedEvent(t,ie(r),o)}))};return n.add((()=>t({body:ne(u,e.textEncoder)}).then((e=>(void 0!==e.statusCode&&(e.statusCode<200||e.statusCode>=300)&&a.T&&r.vF.warn(`Sentry responded with status code ${e.statusCode} to sent event.`),o=Vt(o,e),e)),(e=>{throw l("network_error"),e})))).then((e=>e),(e=>{if(e instanceof se)return a.T&&r.vF.error("Skipped sending event because buffer is full."),l("queue_overflow"),(0,K.XW)();throw e}))}return i.__sentry__baseTransport__=!0,{send:i,flush:e=>n.drain(e)}}function Wt(e,t){if("event"===t||"transaction"===t)return Array.isArray(e)?e[1]:void 0}let qt;function Gt(e,t=function(){if(qt)return qt;if(j(Oe.fetch))return qt=Oe.fetch.bind(Oe);const e=Oe.document;let t=Oe.fetch;if(e&&"function"===typeof e.createElement)try{const n=e.createElement("iframe");n.hidden=!0,e.head.appendChild(n);const r=n.contentWindow;r&&r.fetch&&(t=r.fetch),e.head.removeChild(n)}catch(n){be&&r.vF.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",n)}return qt=t.bind(Oe)}()){let n=0,o=0;return Ht(e,(function(r){const i=r.body.length;n+=i,o++;const a={body:r.body,method:"POST",referrerPolicy:"origin",headers:e.headers,keepalive:n<=6e4&&o<15,...e.fetchOptions};try{return t(e.url,a).then((e=>(n-=i,o--,{statusCode:e.status,headers:{"x-sentry-rate-limits":e.headers.get("X-Sentry-Rate-Limits"),"retry-after":e.headers.get("Retry-After")}})))}catch(s){return qt=void 0,n-=i,o--,(0,K.xg)(s)}}))}const Yt=4;function Xt(e){return Ht(e,(function(t){return new K.T2(((n,r)=>{const o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=()=>{o.readyState===Yt&&n({statusCode:o.status,headers:{"x-sentry-rate-limits":o.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":o.getResponseHeader("Retry-After")}})},o.open("POST",e.url);for(const t in e.headers)Object.prototype.hasOwnProperty.call(e.headers,t)&&o.setRequestHeader(t,e.headers[t]);o.send(t.body)}))}))}const Kt=[y(),A(),Et(),Je(),ft(),xt(),tt(),vt()];function Zt(e={}){void 0===e.defaultIntegrations&&(e.defaultIntegrations=[...Kt]),void 0===e.release&&("string"===typeof __SENTRY_RELEASE__&&(e.release=__SENTRY_RELEASE__),Oe.SENTRY_RELEASE&&Oe.SENTRY_RELEASE.id&&(e.release=Oe.SENTRY_RELEASE.id)),void 0===e.autoSessionTracking&&(e.autoSessionTracking=!0),void 0===e.sendClientReports&&(e.sendClientReports=!0);const t={...e,stackParser:(0,N.vk)(e.stackParser||jt),integrations:c(e),transport:e.transport||(F()?Gt:Xt)};E(Pe,t),e.autoSessionTracking&&function(){if("undefined"===typeof Oe.document)return void(be&&r.vF.warn("Session tracking in non-browser environment with @sentry/browser is not supported."));(0,_.J0)({ignoreDuration:!0}),(0,_.J5)(),G((({from:e,to:t})=>{void 0!==e&&e!==t&&((0,_.J0)({ignoreDuration:!0}),(0,_.J5)())}))}()}const Qt=(e={},t=(0,u.BF)())=>{if(!Oe.document)return void(be&&r.vF.error("Global document not defined in showReportDialog call"));const{client:n,scope:o}=t.getStackTop(),i=e.dsn||n&&n.getDsn();if(!i)return void(be&&r.vF.error("DSN not configured for showReportDialog call"));o&&(e.user={...o.getUser(),...e.user}),e.eventId||(e.eventId=t.lastEventId());const a=Oe.document.createElement("script");a.async=!0,a.crossOrigin="anonymous",a.src=function(e,t){const n=k(e);if(!n)return"";const r=`${P(n)}embed/error-page/`;let o=`dsn=${O(n)}`;for(const i in t)if("dsn"!==i&&"onClose"!==i)if("user"===i){const e=t.user;if(!e)continue;e.name&&(o+=`&name=${encodeURIComponent(e.name)}`),e.email&&(o+=`&email=${encodeURIComponent(e.email)}`)}else o+=`&${encodeURIComponent(i)}=${encodeURIComponent(t[i])}`;return`${r}?${o}`}(i,e),e.onLoad&&(a.onload=e.onLoad);const{onClose:s}=e;if(s){const e=t=>{if("__sentry_reportdialog_closed__"===t.data)try{s()}finally{Oe.removeEventListener("message",e)}};Oe.addEventListener("message",e)}const l=Oe.document.head||Oe.document.body;l?l.appendChild(a):be&&r.vF.error("Not injecting report dialog. No injection point found in HTML")}},92967:(e,t,n)=>{"use strict";n.d(t,{U:()=>r});const r="production"},92220:(e,t,n)=>{"use strict";n.d(t,{T:()=>r});const r="undefined"===typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__},42531:(e,t,n)=>{"use strict";n.d(t,{jB:()=>c,lG:()=>u,lb:()=>l});var r=n(16341),o=n(60690),i=n(17412),a=n(73816),s=n(92220);function u(){return(0,r.BY)("globalEventProcessors",(()=>[]))}function l(e){u().push(e)}function c(e,t,n,r=0){return new o.T2(((o,u)=>{const l=e[r];if(null===t||"function"!==typeof l)o(t);else{const f=l({...t},n);s.T&&l.id&&null===f&&i.vF.log(`Event processor "${l.id}" dropped event`),(0,a.Qg)(f)?f.then((t=>c(e,t,n,r+1).then(o))).then(null,u):c(e,f,n,r+1).then(o).then(null,u)}}))}},83741:(e,t,n)=>{"use strict";n.d(t,{Cp:()=>u,J0:()=>g,J5:()=>m,KU:()=>h,ZQ:()=>c,gV:()=>f,o5:()=>p,r:()=>l,v4:()=>d});var r=n(16341),o=n(92967),i=n(86641),a=n(7058),s=n(49475);function u(e,t){return(0,i.BF)().captureException(e,(0,s.li)(t))}function l(e,t){return(0,i.BF)().captureEvent(e,t)}function c(e,t){(0,i.BF)().addBreadcrumb(e,t)}function f(e){(0,i.BF)().setUser(e)}function d(...e){const t=(0,i.BF)();if(2===e.length){const[n,r]=e;return n?t.withScope((()=>(t.getStackTop().scope=n,r(n)))):t.withScope(r)}return t.withScope(e[0])}function h(){return(0,i.BF)().getClient()}function p(){return(0,i.BF)().getScope()}function g(e){const t=h(),n=(0,i.rm)(),s=p(),{release:u,environment:l=o.U}=t&&t.getOptions()||{},{userAgent:c}=r.OW.navigator||{},f=(0,a.fj)({release:u,environment:l,user:s.getUser()||n.getUser(),...c&&{userAgent:c},...e}),d=n.getSession();return d&&"ok"===d.status&&(0,a.qO)(d,{status:"exited"}),v(),n.setSession(f),s.setSession(f),f}function v(){const e=(0,i.rm)(),t=p(),n=t.getSession()||e.getSession();n&&(0,a.Vu)(n),y(),e.setSession(),t.setSession()}function y(){const e=(0,i.rm)(),t=p(),n=h(),r=t.getSession()||e.getSession();r&&n&&n.captureSession&&n.captureSession(r)}function m(e=!1){e?v():y()}},86641:(e,t,n)=>{"use strict";n.d(t,{BF:()=>m,rm:()=>b});var r=n(73816),o=n(6936),i=n(89297),a=n(17412),s=n(16341),u=n(92967),l=n(92220),c=n(22486),f=n(7058),d=n(57986);const h=parseFloat(d.M),p=100;class g{constructor(e,t,n,r=h){let o,i;this._version=r,t?o=t:(o=new c.HG,o.setClient(e)),n?i=n:(i=new c.HG,i.setClient(e)),this._stack=[{scope:o}],e&&this.bindClient(e),this._isolationScope=i}isOlderThan(e){return this._version(this.popScope(),e)),(e=>{throw this.popScope(),e})):(this.popScope(),n)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStack(){return this._stack}getStackTop(){return this._stack[this._stack.length-1]}captureException(e,t){const n=this._lastEventId=t&&t.event_id?t.event_id:(0,o.eJ)(),r=new Error("Sentry syntheticException");return this.getScope().captureException(e,{originalException:e,syntheticException:r,...t,event_id:n}),n}captureMessage(e,t,n){const r=this._lastEventId=n&&n.event_id?n.event_id:(0,o.eJ)(),i=new Error(e);return this.getScope().captureMessage(e,t,{originalException:e,syntheticException:i,...n,event_id:r}),r}captureEvent(e,t){const n=t&&t.event_id?t.event_id:(0,o.eJ)();return e.type||(this._lastEventId=n),this.getScope().captureEvent(e,{...t,event_id:n}),n}lastEventId(){return this._lastEventId}addBreadcrumb(e,t){const{scope:n,client:r}=this.getStackTop();if(!r)return;const{beforeBreadcrumb:o=null,maxBreadcrumbs:s=p}=r.getOptions&&r.getOptions()||{};if(s<=0)return;const u={timestamp:(0,i.lu)(),...e},l=o?(0,a.pq)((()=>o(u,t))):u;null!==l&&(r.emit&&r.emit("beforeAddBreadcrumb",l,t),n.addBreadcrumb(l,s))}setUser(e){this.getScope().setUser(e),this.getIsolationScope().setUser(e)}setTags(e){this.getScope().setTags(e),this.getIsolationScope().setTags(e)}setExtras(e){this.getScope().setExtras(e),this.getIsolationScope().setExtras(e)}setTag(e,t){this.getScope().setTag(e,t),this.getIsolationScope().setTag(e,t)}setExtra(e,t){this.getScope().setExtra(e,t),this.getIsolationScope().setExtra(e,t)}setContext(e,t){this.getScope().setContext(e,t),this.getIsolationScope().setContext(e,t)}configureScope(e){const{scope:t,client:n}=this.getStackTop();n&&e(t)}run(e){const t=y(this);try{e(this)}finally{y(t)}}getIntegration(e){const t=this.getClient();if(!t)return null;try{return t.getIntegration(e)}catch(n){return l.T&&a.vF.warn(`Cannot retrieve integration ${e.id} from the current Hub`),null}}startTransaction(e,t){const n=this._callExtensionMethod("startTransaction",e,t);if(l.T&&!n){this.getClient()?a.vF.warn("Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n"):a.vF.warn("Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'")}return n}traceHeaders(){return this._callExtensionMethod("traceHeaders")}captureSession(e=!1){if(e)return this.endSession();this._sendSessionUpdate()}endSession(){const e=this.getStackTop().scope,t=e.getSession();t&&(0,f.Vu)(t),this._sendSessionUpdate(),e.setSession()}startSession(e){const{scope:t,client:n}=this.getStackTop(),{release:r,environment:o=u.U}=n&&n.getOptions()||{},{userAgent:i}=s.OW.navigator||{},a=(0,f.fj)({release:r,environment:o,user:t.getUser(),...i&&{userAgent:i},...e}),l=t.getSession&&t.getSession();return l&&"ok"===l.status&&(0,f.qO)(l,{status:"exited"}),this.endSession(),t.setSession(a),a}shouldSendDefaultPii(){const e=this.getClient(),t=e&&e.getOptions();return Boolean(t&&t.sendDefaultPii)}_sendSessionUpdate(){const{scope:e,client:t}=this.getStackTop(),n=e.getSession();n&&t&&t.captureSession&&t.captureSession(n)}_callExtensionMethod(e,...t){const n=v().__SENTRY__;if(n&&n.extensions&&"function"===typeof n.extensions[e])return n.extensions[e].apply(this,t);l.T&&a.vF.warn(`Extension method ${e} couldn't be found, doing nothing.`)}}function v(){return s.OW.__SENTRY__=s.OW.__SENTRY__||{extensions:{},hub:void 0},s.OW}function y(e){const t=v(),n=x(t);return S(t,e),n}function m(){const e=v();if(e.__SENTRY__&&e.__SENTRY__.acs){const t=e.__SENTRY__.acs.getCurrentHub();if(t)return t}return _(e)}function b(){return m().getIsolationScope()}function _(e=v()){return w(e)&&!x(e).isOlderThan(h)||S(e,new g),x(e)}function w(e){return!!(e&&e.__SENTRY__&&e.__SENTRY__.hub)}function x(e){return(0,s.BY)("hub",(()=>new g),e)}function S(e,t){if(!e)return!1;return(e.__SENTRY__=e.__SENTRY__||{}).hub=t,!0}},22486:(e,t,n)=>{"use strict";n.d(t,{HG:()=>f,m6:()=>d});var r=n(73816),o=n(89297),i=n(6936),a=n(17412),s=n(42531),u=n(7058),l=n(41535);let c;class f{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=h()}static clone(e){return e?e.clone():new f}clone(){const e=new f;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._extra={...this._extra},e._contexts={...this._contexts},e._user=this._user,e._level=this._level,e._span=this._span,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._requestSession=this._requestSession,e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e}setClient(e){this._client=e}getClient(){return this._client}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this._session&&(0,u.qO)(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(e){return this._requestSession=e,this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,t){return this._tags={...this._tags,[e]:t},this._notifyScopeListeners(),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,t){return this._extra={...this._extra,[e]:t},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,t){return null===t?delete this._contexts[e]:this._contexts[e]=t,this._notifyScopeListeners(),this}setSpan(e){return this._span=e,this._notifyScopeListeners(),this}getSpan(){return this._span}getTransaction(){const e=this._span;return e&&e.transaction}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;const t="function"===typeof e?e(this):e;if(t instanceof f){const e=t.getScopeData();this._tags={...this._tags,...e.tags},this._extra={...this._extra,...e.extra},this._contexts={...this._contexts,...e.contexts},e.user&&Object.keys(e.user).length&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint.length&&(this._fingerprint=e.fingerprint),t.getRequestSession()&&(this._requestSession=t.getRequestSession()),e.propagationContext&&(this._propagationContext=e.propagationContext)}else if((0,r.Qd)(t)){const t=e;this._tags={...this._tags,...t.tags},this._extra={...this._extra,...t.extra},this._contexts={...this._contexts,...t.contexts},t.user&&(this._user=t.user),t.level&&(this._level=t.level),t.fingerprint&&(this._fingerprint=t.fingerprint),t.requestSession&&(this._requestSession=t.requestSession),t.propagationContext&&(this._propagationContext=t.propagationContext)}return this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this._attachments=[],this._propagationContext=h(),this}addBreadcrumb(e,t){const n="number"===typeof t?t:100;if(n<=0)return this;const r={timestamp:(0,o.lu)(),...e},i=this._breadcrumbs;return i.push(r),this._breadcrumbs=i.length>n?i.slice(-n):i,this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this._attachments=[],this}getScopeData(){const{_breadcrumbs:e,_attachments:t,_contexts:n,_tags:r,_extra:o,_user:i,_level:a,_fingerprint:s,_eventProcessors:u,_propagationContext:l,_sdkProcessingMetadata:c,_transactionName:f,_span:d}=this;return{breadcrumbs:e,attachments:t,contexts:n,tags:r,extra:o,user:i,level:a,fingerprint:s||[],eventProcessors:u,propagationContext:l,sdkProcessingMetadata:c,transactionName:f,span:d}}applyToEvent(e,t={},n=[]){(0,l.e2)(e,this.getScopeData());const r=[...n,...(0,s.lG)(),...this._eventProcessors];return(0,s.jB)(r,e,t)}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...e},this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,t){const n=t&&t.event_id?t.event_id:(0,i.eJ)();if(!this._client)return a.vF.warn("No client configured on scope - will not capture exception!"),n;const r=new Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:r,...t,event_id:n},this),n}captureMessage(e,t,n){const r=n&&n.event_id?n.event_id:(0,i.eJ)();if(!this._client)return a.vF.warn("No client configured on scope - will not capture message!"),r;const o=new Error(e);return this._client.captureMessage(e,t,{originalException:e,syntheticException:o,...n,event_id:r},this),r}captureEvent(e,t){const n=t&&t.event_id?t.event_id:(0,i.eJ)();return this._client?(this._client.captureEvent(e,{...t,event_id:n},this),n):(a.vF.warn("No client configured on scope - will not capture event!"),n)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach((e=>{e(this)})),this._notifyingListeners=!1)}}function d(){return c||(c=new f),c}function h(){return{traceId:(0,i.eJ)(),spanId:(0,i.eJ)().substring(16)}}},7058:(e,t,n)=>{"use strict";n.d(t,{Vu:()=>u,fj:()=>a,qO:()=>s});var r=n(89297),o=n(6936),i=n(68411);function a(e){const t=(0,r.zf)(),n={sid:(0,o.eJ)(),init:!0,timestamp:t,started:t,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(e){return(0,i.Ce)({sid:`${e.sid}`,init:e.init,started:new Date(1e3*e.started).toISOString(),timestamp:new Date(1e3*e.timestamp).toISOString(),status:e.status,errors:e.errors,did:"number"===typeof e.did||"string"===typeof e.did?`${e.did}`:void 0,duration:e.duration,abnormal_mechanism:e.abnormal_mechanism,attrs:{release:e.release,environment:e.environment,ip_address:e.ipAddress,user_agent:e.userAgent}})}(n)};return e&&s(n,e),n}function s(e,t={}){if(t.user&&(!e.ipAddress&&t.user.ip_address&&(e.ipAddress=t.user.ip_address),e.did||t.did||(e.did=t.user.id||t.user.email||t.user.username)),e.timestamp=t.timestamp||(0,r.zf)(),t.abnormal_mechanism&&(e.abnormal_mechanism=t.abnormal_mechanism),t.ignoreDuration&&(e.ignoreDuration=t.ignoreDuration),t.sid&&(e.sid=32===t.sid.length?t.sid:(0,o.eJ)()),void 0!==t.init&&(e.init=t.init),!e.did&&t.did&&(e.did=`${t.did}`),"number"===typeof t.started&&(e.started=t.started),e.ignoreDuration)e.duration=void 0;else if("number"===typeof t.duration)e.duration=t.duration;else{const t=e.timestamp-e.started;e.duration=t>=0?t:0}t.release&&(e.release=t.release),t.environment&&(e.environment=t.environment),!e.ipAddress&&t.ipAddress&&(e.ipAddress=t.ipAddress),!e.userAgent&&t.userAgent&&(e.userAgent=t.userAgent),"number"===typeof t.errors&&(e.errors=t.errors),t.status&&(e.status=t.status)}function u(e,t){let n={};t?n={status:t}:"ok"===e.status&&(n={status:"exited"}),s(e,n)}},75452:(e,t,n)=>{"use strict";n.d(t,{k:()=>l,l:()=>u});var r=n(68411),o=n(92967),i=n(83741),a=n(34636),s=n(3445);function u(e,t,n){const i=t.getOptions(),{publicKey:a}=t.getDsn()||{},{segment:s}=n&&n.getUser()||{},u=(0,r.Ce)({environment:i.environment||o.U,release:i.release,user_segment:s,public_key:a,trace_id:e});return t.emit&&t.emit("createDsc",u),u}function l(e){const t=(0,i.KU)();if(!t)return{};const n=u((0,s.et)(e).trace_id||"",t,(0,i.o5)()),r=(0,a.z)(e);if(!r)return n;const o=r&&r._frozenDynamicSamplingContext;if(o)return o;const{sampleRate:l,source:c}=r.metadata;null!=l&&(n.sample_rate=`${l}`);const f=(0,s.et)(r);return c&&"url"!==c&&(n.transaction=f.description),n.sampled=String((0,s.pK)(r)),t.emit&&t.emit("createDsc",n),n}},41535:(e,t,n)=>{"use strict";n.d(t,{Rg:()=>l,e2:()=>u});var r=n(68411),o=n(6936),i=n(75452),a=n(34636),s=n(3445);function u(e,t){const{fingerprint:n,span:u,breadcrumbs:l,sdkProcessingMetadata:c}=t;!function(e,t){const{extra:n,tags:o,user:i,contexts:a,level:s,transactionName:u}=t,l=(0,r.Ce)(n);l&&Object.keys(l).length&&(e.extra={...l,...e.extra});const c=(0,r.Ce)(o);c&&Object.keys(c).length&&(e.tags={...c,...e.tags});const f=(0,r.Ce)(i);f&&Object.keys(f).length&&(e.user={...f,...e.user});const d=(0,r.Ce)(a);d&&Object.keys(d).length&&(e.contexts={...d,...e.contexts});s&&(e.level=s);u&&(e.transaction=u)}(e,t),u&&function(e,t){e.contexts={trace:(0,s.kX)(t),...e.contexts};const n=(0,a.z)(t);if(n){e.sdkProcessingMetadata={dynamicSamplingContext:(0,i.k)(t),...e.sdkProcessingMetadata};const r=(0,s.et)(n).description;r&&(e.tags={transaction:r,...e.tags})}}(e,u),function(e,t){e.fingerprint=e.fingerprint?(0,o.k9)(e.fingerprint):[],t&&(e.fingerprint=e.fingerprint.concat(t));e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint}(e,n),function(e,t){const n=[...e.breadcrumbs||[],...t];e.breadcrumbs=n.length?n:void 0}(e,l),function(e,t){e.sdkProcessingMetadata={...e.sdkProcessingMetadata,...t}}(e,c)}function l(e,t){const{extra:n,tags:r,user:o,contexts:i,level:a,sdkProcessingMetadata:s,breadcrumbs:u,fingerprint:l,eventProcessors:f,attachments:d,propagationContext:h,transactionName:p,span:g}=t;c(e,"extra",n),c(e,"tags",r),c(e,"user",o),c(e,"contexts",i),c(e,"sdkProcessingMetadata",s),a&&(e.level=a),p&&(e.transactionName=p),g&&(e.span=g),u.length&&(e.breadcrumbs=[...e.breadcrumbs,...u]),l.length&&(e.fingerprint=[...e.fingerprint,...l]),f.length&&(e.eventProcessors=[...e.eventProcessors,...f]),d.length&&(e.attachments=[...e.attachments,...d]),e.propagationContext={...e.propagationContext,...h}}function c(e,t,n){if(n&&Object.keys(n).length){e[t]={...e[t]};for(const r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[t][r]=n[r])}}},34636:(e,t,n)=>{"use strict";function r(e){return e.transaction}n.d(t,{z:()=>r})},49475:(e,t,n)=>{"use strict";n.d(t,{li:()=>g,mG:()=>h});var r=n(6936),o=n(89297),i=n(39653),a=n(16341),s=n(42181),u=n(92967),l=n(42531),c=n(22486),f=n(41535),d=n(3445);function h(e,t,n,h,g,v){const{normalizeDepth:y=3,normalizeMaxBreadth:m=1e3}=e,b={...t,event_id:t.event_id||n.event_id||(0,r.eJ)(),timestamp:t.timestamp||(0,o.lu)()},_=n.integrations||e.integrations.map((e=>e.name));!function(e,t){const{environment:n,release:r,dist:o,maxValueLength:a=250}=t;"environment"in e||(e.environment="environment"in t?n:u.U);void 0===e.release&&void 0!==r&&(e.release=r);void 0===e.dist&&void 0!==o&&(e.dist=o);e.message&&(e.message=(0,i.xv)(e.message,a));const s=e.exception&&e.exception.values&&e.exception.values[0];s&&s.value&&(s.value=(0,i.xv)(s.value,a));const l=e.request;l&&l.url&&(l.url=(0,i.xv)(l.url,a))}(b,e),function(e,t){t.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=[...e.sdk.integrations||[],...t])}(b,_),void 0===t.type&&function(e,t){const n=a.OW._sentryDebugIds;if(!n)return;let r;const o=p.get(t);o?r=o:(r=new Map,p.set(t,r));const i=Object.keys(n).reduce(((e,o)=>{let i;const a=r.get(o);a?i=a:(i=t(o),r.set(o,i));for(let t=i.length-1;t>=0;t--){const r=i[t];if(r.filename){e[r.filename]=n[o];break}}return e}),{});try{e.exception.values.forEach((e=>{e.stacktrace.frames.forEach((e=>{e.filename&&(e.debug_id=i[e.filename])}))}))}catch(s){}}(b,e.stackParser);const w=function(e,t){if(!t)return e;const n=e?e.clone():new c.HG;return n.update(t),n}(h,n.captureContext);n.mechanism&&(0,r.M6)(b,n.mechanism);const x=g&&g.getEventProcessors?g.getEventProcessors():[],S=(0,c.m6)().getScopeData();if(v){const e=v.getScopeData();(0,f.Rg)(S,e)}if(w){const e=w.getScopeData();(0,f.Rg)(S,e)}const A=[...n.attachments||[],...S.attachments];A.length&&(n.attachments=A),(0,f.e2)(b,S);const E=[...x,...(0,l.lG)(),...S.eventProcessors];return(0,l.jB)(E,b,n).then((e=>(e&&function(e){const t={};try{e.exception.values.forEach((e=>{e.stacktrace.frames.forEach((e=>{e.debug_id&&(e.abs_path?t[e.abs_path]=e.debug_id:e.filename&&(t[e.filename]=e.debug_id),delete e.debug_id)}))}))}catch(r){}if(0===Object.keys(t).length)return;e.debug_meta=e.debug_meta||{},e.debug_meta.images=e.debug_meta.images||[];const n=e.debug_meta.images;Object.keys(t).forEach((e=>{n.push({type:"sourcemap",code_file:e,debug_id:t[e]})}))}(e),"number"===typeof y&&y>0?function(e,t,n){if(!e)return null;const r={...e,...e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map((e=>({...e,...e.data&&{data:(0,s.S8)(e.data,t,n)}})))},...e.user&&{user:(0,s.S8)(e.user,t,n)},...e.contexts&&{contexts:(0,s.S8)(e.contexts,t,n)},...e.extra&&{extra:(0,s.S8)(e.extra,t,n)}};e.contexts&&e.contexts.trace&&r.contexts&&(r.contexts.trace=e.contexts.trace,e.contexts.trace.data&&(r.contexts.trace.data=(0,s.S8)(e.contexts.trace.data,t,n)));e.spans&&(r.spans=e.spans.map((e=>{const r=(0,d.et)(e).data;return r&&(e.data=(0,s.S8)(r,t,n)),e})));return r}(e,y,m):e)))}const p=new WeakMap;function g(e){if(e)return function(e){return e instanceof c.HG||"function"===typeof e}(e)||function(e){return Object.keys(e).some((e=>v.includes(e)))}(e)?{captureContext:e}:e}const v=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"]},40601:(e,t,n)=>{"use strict";n.d(t,{K:()=>o});var r=n(57986);function o(e,t,n=[t],o="npm"){const i=e._metadata||{};i.sdk||(i.sdk={name:`sentry.javascript.${t}`,packages:n.map((e=>({name:`${o}:@sentry/${e}`,version:r.M}))),version:r.M}),e._metadata=i}},3445:(e,t,n)=>{"use strict";n.d(t,{et:()=>a,kX:()=>i,pK:()=>s});var r=n(68411);const o=1;function i(e){const{spanId:t,traceId:n}=e.spanContext(),{data:o,op:i,parent_span_id:s,status:u,tags:l,origin:c}=a(e);return(0,r.Ce)({data:o,op:i,parent_span_id:s,span_id:t,status:u,tags:l,trace_id:n,origin:c})}function a(e){return function(e){return"function"===typeof e.getSpanJSON}(e)?e.getSpanJSON():"function"===typeof e.toJSON?e.toJSON():{}}function s(e){const{traceFlags:t}=e.spanContext();return Boolean(t&o)}},57986:(e,t,n)=>{"use strict";n.d(t,{M:()=>r});const r="7.112.2"},41358:(e,t,n)=>{"use strict";n.d(t,{tH:()=>c});var r=n(83741),o=n(10390),i=n(73816),a=n(17412),s=(n(4146),n(96540));const u="undefined"===typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__;const l={componentStack:null,error:null,eventId:null};class c extends s.Component{constructor(e){super(e),c.prototype.__init.call(this),this.state=l,this._openFallbackReportDialog=!0;const t=(0,r.KU)();t&&t.on&&e.showDialog&&(this._openFallbackReportDialog=!1,t.on("afterSendEvent",(t=>{t.type||t.event_id!==this._lastEventId||(0,o.mn)({...e.dialogOptions,eventId:this._lastEventId})})))}componentDidCatch(e,{componentStack:t}){const{beforeCapture:n,onError:a,showDialog:u,dialogOptions:l}=this.props;(0,r.v4)((c=>{if(function(e){const t=e.match(/^([^.]+)/);return null!==t&&parseInt(t[0])>=17}(s.version)&&(0,i.bJ)(e)){const n=new Error(e.message);n.name=`React ErrorBoundary ${e.name}`,n.stack=t,function(e,t){const n=new WeakMap;!function e(t,r){if(!n.has(t))return t.cause?(n.set(t,!0),e(t.cause,r)):void(t.cause=r)}(e,t)}(e,n)}n&&n(c,e,t);const f=(0,r.Cp)(e,{captureContext:{contexts:{react:{componentStack:t}}},mechanism:{handled:!!this.props.fallback}});a&&a(e,t,f),u&&(this._lastEventId=f,this._openFallbackReportDialog&&(0,o.mn)({...l,eventId:f})),this.setState({error:e,componentStack:t,eventId:f})}))}componentDidMount(){const{onMount:e}=this.props;e&&e()}componentWillUnmount(){const{error:e,componentStack:t,eventId:n}=this.state,{onUnmount:r}=this.props;r&&r(e,t,n)}__init(){this.resetErrorBoundary=()=>{const{onReset:e}=this.props,{error:t,componentStack:n,eventId:r}=this.state;e&&e(t,n,r),this.setState(l)}}render(){const{fallback:e,children:t}=this.props,n=this.state;if(n.error){let t;return t="function"===typeof e?e({error:n.error,componentStack:n.componentStack,resetError:this.resetErrorBoundary,eventId:n.eventId}):e,s.isValidElement(t)?t:(e&&u&&a.vF.warn("fallback did not produce a valid ReactElement"),null)}return"function"===typeof t?t():t}}},12968:(e,t,n)=>{"use strict";n.d(t,{T:()=>i});var r=n(10390),o=n(40601);function i(e){const t={...e};(0,o.K)(t,"react"),(0,r.Ts)(t)}},19766:(e,t,n)=>{"use strict";n.d(t,{$N:()=>u,Hd:()=>a,xE:()=>l});var r=n(73816);const o=(0,n(16341).VZ)(),i=80;function a(e,t={}){if(!e)return"";try{let n=e;const r=5,o=[];let a=0,u=0;const l=" > ",c=l.length;let f;const d=Array.isArray(t)?t:t.keyAttrs,h=!Array.isArray(t)&&t.maxStringLength||i;for(;n&&a++1&&u+o.length*c+f.length>=h));)o.push(f),u+=f.length,n=n.parentNode;return o.reverse().join(l)}catch(n){return""}}function s(e,t){const n=e,i=[];let a,s,u,l,c;if(!n||!n.tagName)return"";if(o.HTMLElement&&n instanceof HTMLElement&&n.dataset&&n.dataset.sentryComponent)return n.dataset.sentryComponent;i.push(n.tagName.toLowerCase());const f=t&&t.length?t.filter((e=>n.getAttribute(e))).map((e=>[e,n.getAttribute(e)])):null;if(f&&f.length)f.forEach((e=>{i.push(`[${e[0]}="${e[1]}"]`)}));else if(n.id&&i.push(`#${n.id}`),a=n.className,a&&(0,r.Kg)(a))for(s=a.split(/\s+/),c=0;c{"use strict";n.d(t,{T:()=>r});const r="undefined"===typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__},73816:(e,t,n)=>{"use strict";n.d(t,{BD:()=>s,Kg:()=>l,L2:()=>_,NF:()=>c,Qd:()=>d,Qg:()=>v,T2:()=>a,W6:()=>u,bJ:()=>o,gd:()=>g,mE:()=>y,sO:()=>f,tH:()=>b,vq:()=>p,xH:()=>h,yr:()=>m});const r=Object.prototype.toString;function o(e){switch(r.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return b(e,Error)}}function i(e,t){return r.call(e)===`[object ${t}]`}function a(e){return i(e,"ErrorEvent")}function s(e){return i(e,"DOMError")}function u(e){return i(e,"DOMException")}function l(e){return i(e,"String")}function c(e){return"object"===typeof e&&null!==e&&"__sentry_template_string__"in e&&"__sentry_template_values__"in e}function f(e){return null===e||c(e)||"object"!==typeof e&&"function"!==typeof e}function d(e){return i(e,"Object")}function h(e){return"undefined"!==typeof Event&&b(e,Event)}function p(e){return"undefined"!==typeof Element&&b(e,Element)}function g(e){return i(e,"RegExp")}function v(e){return Boolean(e&&e.then&&"function"===typeof e.then)}function y(e){return d(e)&&"nativeEvent"in e&&"preventDefault"in e&&"stopPropagation"in e}function m(e){return"number"===typeof e&&e!==e}function b(e,t){try{return e instanceof t}catch(n){return!1}}function _(e){return!("object"!==typeof e||null===e||!e.__isVue&&!e._isVue)}},17412:(e,t,n)=>{"use strict";n.d(t,{Ow:()=>i,Z9:()=>a,pq:()=>s,vF:()=>u});var r=n(5644),o=n(16341);const i=["debug","info","warn","error","log","assert","trace"],a={};function s(e){if(!("console"in o.OW))return e();const t=o.OW.console,n={},r=Object.keys(a);r.forEach((e=>{const r=a[e];n[e]=t[e],t[e]=r}));try{return e()}finally{r.forEach((e=>{t[e]=n[e]}))}}const u=function(){let e=!1;const t={enable:()=>{e=!0},disable:()=>{e=!1},isEnabled:()=>e};return r.T?i.forEach((n=>{t[n]=(...t)=>{e&&s((()=>{o.OW.console[n](`Sentry Logger [${n}]:`,...t)}))}})):i.forEach((e=>{t[e]=()=>{}})),t}()},6936:(e,t,n)=>{"use strict";n.d(t,{$X:()=>s,GR:()=>c,M6:()=>l,eJ:()=>i,gO:()=>u,k9:()=>f});var r=n(68411),o=n(16341);function i(){const e=o.OW,t=e.crypto||e.msCrypto;let n=()=>16*Math.random();try{if(t&&t.randomUUID)return t.randomUUID().replace(/-/g,"");t&&t.getRandomValues&&(n=()=>{const e=new Uint8Array(1);return t.getRandomValues(e),e[0]})}catch(r){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(e=>(e^(15&n())>>e/4).toString(16)))}function a(e){return e.exception&&e.exception.values?e.exception.values[0]:void 0}function s(e){const{message:t,event_id:n}=e;if(t)return t;const r=a(e);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function u(e,t,n){const r=e.exception=e.exception||{},o=r.values=r.values||[],i=o[0]=o[0]||{};i.value||(i.value=t||""),i.type||(i.type=n||"Error")}function l(e,t){const n=a(e);if(!n)return;const r=n.mechanism;if(n.mechanism={type:"generic",handled:!0,...r,...t},t&&"data"in t){const e={...r&&r.data,...t.data};n.mechanism.data=e}}function c(e){if(e&&e.__sentry_captured__)return!0;try{(0,r.my)(e,"__sentry_captured__",!0)}catch(t){}return!1}function f(e){return Array.isArray(e)?e:[e]}},42181:(e,t,n)=>{"use strict";n.d(t,{S8:()=>a,cd:()=>s});var r=n(73816);var o=n(68411),i=n(83917);function a(e,t=100,n=1/0){try{return u("",e,t,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function s(e,t=3,n=102400){const r=a(e,t);return o=r,function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(o))>n?s(e,t-1,n):r;var o}function u(e,t,a=1/0,s=1/0,l=function(){const e="function"===typeof WeakSet,t=e?new WeakSet:[];return[function(n){if(e)return!!t.has(n)||(t.add(n),!1);for(let e=0;e=s){g[n]="[MaxProperties ~]";break}const e=y[n];g[n]=u(n,e,h-1,s,l),v++}return f(t),g}},68411:(e,t,n)=>{"use strict";n.d(t,{Ce:()=>y,GS:()=>u,HF:()=>v,W4:()=>h,my:()=>l,pO:()=>c,sp:()=>f,u4:()=>d});var r=n(19766),o=n(5644),i=n(73816),a=n(17412),s=n(39653);function u(e,t,n){if(!(t in e))return;const r=e[t],o=n(r);"function"===typeof o&&c(o,r),e[t]=o}function l(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0})}catch(r){o.T&&a.vF.log(`Failed to add non-enumerable property "${t}" to object`,e)}}function c(e,t){try{const n=t.prototype||{};e.prototype=t.prototype=n,l(e,"__sentry_original__",t)}catch(n){}}function f(e){return e.__sentry_original__}function d(e){return Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&")}function h(e){if((0,i.bJ)(e))return{message:e.message,name:e.name,stack:e.stack,...g(e)};if((0,i.xH)(e)){const t={type:e.type,target:p(e.target),currentTarget:p(e.currentTarget),...g(e)};return"undefined"!==typeof CustomEvent&&(0,i.tH)(e,CustomEvent)&&(t.detail=e.detail),t}return e}function p(e){try{return(0,i.vq)(e)?(0,r.Hd)(e):Object.prototype.toString.call(e)}catch(t){return""}}function g(e){if("object"===typeof e&&null!==e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}return{}}function v(e,t=40){const n=Object.keys(h(e));if(n.sort(),!n.length)return"[object has no keys]";if(n[0].length>=t)return(0,s.xv)(n[0],t);for(let r=n.length;r>0;r--){const e=n.slice(0,r).join(", ");if(!(e.length>t))return r===n.length?e:(0,s.xv)(e,t)}return""}function y(e){return m(e,new Map)}function m(e,t){if(function(e){if(!(0,i.Qd)(e))return!1;try{const t=Object.getPrototypeOf(e).constructor.name;return!t||"Object"===t}catch(t){return!0}}(e)){const n=t.get(e);if(void 0!==n)return n;const r={};t.set(e,r);for(const o of Object.keys(e))"undefined"!==typeof e[o]&&(r[o]=m(e[o],t));return r}if(Array.isArray(e)){const n=t.get(e);if(void 0!==n)return n;const r=[];return t.set(e,r),e.forEach((e=>{r.push(m(e,t))})),r}return e}},83917:(e,t,n)=>{"use strict";n.d(t,{gd:()=>a,qQ:()=>l,vk:()=>s});const r=50,o=/\(error: (.*)\)/,i=/captureMessage|captureException/;function a(...e){const t=e.sort(((e,t)=>e[0]-t[0])).map((e=>e[1]));return(e,n=0)=>{const a=[],s=e.split("\n");for(let i=n;i1024)continue;const n=o.test(e)?e.replace(o,"$1"):e;if(!n.match(/\S*Error: /)){for(const e of t){const t=e(n);if(t){a.push(t);break}}if(a.length>=r)break}}return function(e){if(!e.length)return[];const t=Array.from(e);/sentryWrapped/.test(t[t.length-1].function||"")&&t.pop();t.reverse(),i.test(t[t.length-1].function||"")&&(t.pop(),i.test(t[t.length-1].function||"")&&t.pop());return t.slice(0,r).map((e=>({...e,filename:e.filename||t[t.length-1].filename,function:e.function||"?"})))}(a)}}function s(e){return Array.isArray(e)?a(...e):e}const u="";function l(e){try{return e&&"function"===typeof e&&e.name||u}catch(t){return u}}},39653:(e,t,n)=>{"use strict";n.d(t,{Xr:()=>a,gt:()=>i,xv:()=>o});var r=n(73816);function o(e,t=0){return"string"!==typeof e||0===t||e.length<=t?e:`${e.slice(0,t)}...`}function i(e,t){if(!Array.isArray(e))return"";const n=[];for(let i=0;ifunction(e,t,n=!1){return!!(0,r.Kg)(e)&&((0,r.gd)(t)?t.test(e):!!(0,r.Kg)(t)&&(n?e===t:e.includes(t)))}(e,t,n)))}},60690:(e,t,n)=>{"use strict";n.d(t,{T2:()=>s,XW:()=>i,xg:()=>a});var r,o=n(73816);function i(e){return new s((t=>{t(e)}))}function a(e){return new s(((t,n)=>{n(e)}))}!function(e){e[e.PENDING=0]="PENDING";e[e.RESOLVED=1]="RESOLVED";e[e.REJECTED=2]="REJECTED"}(r||(r={}));class s{constructor(e){s.prototype.__init.call(this),s.prototype.__init2.call(this),s.prototype.__init3.call(this),s.prototype.__init4.call(this),this._state=r.PENDING,this._handlers=[];try{e(this._resolve,this._reject)}catch(t){this._reject(t)}}then(e,t){return new s(((n,r)=>{this._handlers.push([!1,t=>{if(e)try{n(e(t))}catch(o){r(o)}else n(t)},e=>{if(t)try{n(t(e))}catch(o){r(o)}else r(e)}]),this._executeHandlers()}))}catch(e){return this.then((e=>e),e)}finally(e){return new s(((t,n)=>{let r,o;return this.then((t=>{o=!1,r=t,e&&e()}),(t=>{o=!0,r=t,e&&e()})).then((()=>{o?n(r):t(r)}))}))}__init(){this._resolve=e=>{this._setResult(r.RESOLVED,e)}}__init2(){this._reject=e=>{this._setResult(r.REJECTED,e)}}__init3(){this._setResult=(e,t)=>{this._state===r.PENDING&&((0,o.Qg)(t)?t.then(this._resolve,this._reject):(this._state=e,this._value=t,this._executeHandlers()))}}__init4(){this._executeHandlers=()=>{if(this._state===r.PENDING)return;const e=this._handlers.slice();this._handlers=[],e.forEach((e=>{e[0]||(this._state===r.RESOLVED&&e[1](this._value),this._state===r.REJECTED&&e[2](this._value),e[0]=!0)}))}}}},89297:(e,t,n)=>{"use strict";n.d(t,{lu:()=>i,zf:()=>a});var r=n(16341);const o=1e3;function i(){return Date.now()/o}const a=function(){const{performance:e}=r.OW;if(!e||!e.now)return i;const t=Date.now()-e.now(),n=void 0==e.timeOrigin?t:e.timeOrigin;return()=>(n+e.now())/o}();let s;(()=>{const{performance:e}=r.OW;if(!e||!e.now)return void(s="none");const t=36e5,n=e.now(),o=Date.now(),i=e.timeOrigin?Math.abs(e.timeOrigin+n-o):t,a=i{"use strict";function r(e){return e&&e.Math==Math?e:void 0}n.d(t,{BY:()=>a,OW:()=>o,VZ:()=>i});const o="object"==typeof globalThis&&r(globalThis)||"object"==typeof window&&r(window)||"object"==typeof self&&r(self)||"object"==typeof n.g&&r(n.g)||function(){return this}()||{};function i(){return o}function a(e,t,n){const r=n||o,i=r.__SENTRY__=r.__SENTRY__||{};return i[e]||(i[e]=t())}},50402:(e,t,n)=>{"use strict";function r(){return r=Object.assign||function(e){for(var t=1;th,default:()=>p,get:()=>o,responsive:()=>d});var o=function(e,t,n,r,o){for(t=t&&t.split?t.split("."):[t],r=0;r=0)return o(e,t,t);var n=Math.abs(t),r=o(e,n,n);return"string"===typeof r?"-"+r:-1*r},f=["margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","top","bottom","left","right"].reduce((function(e,t){var n;return r({},e,((n={})[t]=c,n))}),{}),d=function(e){return function(t){var n={},r=o(t,"breakpoints",i),a=[null].concat(r.map((function(e){return"@media screen and (min-width: "+e+")"})));for(var s in e){var u="function"===typeof e[s]?e[s](t):e[s];if(null!=u)if(Array.isArray(u))for(var l=0;l{"use strict";var r=n(70453),o=n(10487),i=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"===typeof n&&i(e,".prototype.")>-1?o(n):n}},10487:(e,t,n)=>{"use strict";var r=n(66743),o=n(70453),i=n(96897),a=n(69675),s=o("%Function.prototype.apply%"),u=o("%Function.prototype.call%"),l=o("%Reflect.apply%",!0)||r.call(u,s),c=n(30655),f=o("%Math.max%");e.exports=function(e){if("function"!==typeof e)throw new a("a function is required");var t=l(r,u,arguments);return i(t,1+f(0,e.length-(arguments.length-1)),!0)};var d=function(){return l(r,s,arguments)};c?c(e.exports,"apply",{value:d}):e.exports.apply=d},92151:e=>{var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],n=0;n{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to,default:()=>i});const i=o},3939:e=>{!function(){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n={rotl:function(e,t){return e<>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&n.rotl(e,8)|4278255360&n.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],n=0,r=0;n>>5]|=e[n]<<24-r%32;return t},wordsToBytes:function(e){for(var t=[],n=0;n<32*e.length;n+=8)t.push(e[n>>>5]>>>24-n%32&255);return t},bytesToHex:function(e){for(var t=[],n=0;n>>4).toString(16)),t.push((15&e[n]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],n=0;n>>6*(3-i)&63)):n.push("=");return n.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var n=[],r=0,o=0;r>>6-2*o);return n}};e.exports=n}()},30454:e=>{"use strict";var t="%[a-f0-9]{2}",n=new RegExp("("+t+")|([^%]+?)","gi"),r=new RegExp("("+t+")+","gi");function o(e,t){try{return[decodeURIComponent(e.join(""))]}catch(i){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],o(n),o(r))}function i(e){try{return decodeURIComponent(e)}catch(i){for(var t=e.match(n)||[],r=1;r{"use strict";var r=n(30655),o=n(58068),i=n(69675),a=n(75795);e.exports=function(e,t,n){if(!e||"object"!==typeof e&&"function"!==typeof e)throw new i("`obj` must be an object or a function`");if("string"!==typeof t&&"symbol"!==typeof t)throw new i("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!==typeof arguments[3]&&null!==arguments[3])throw new i("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!==typeof arguments[4]&&null!==arguments[4])throw new i("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!==typeof arguments[5]&&null!==arguments[5])throw new i("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!==typeof arguments[6])throw new i("`loose`, if provided, must be a boolean");var s=arguments.length>3?arguments[3]:null,u=arguments.length>4?arguments[4]:null,l=arguments.length>5?arguments[5]:null,c=arguments.length>6&&arguments[6],f=!!a&&a(e,t);if(r)r(e,t,{configurable:null===l&&f?f.configurable:!l,enumerable:null===s&&f?f.enumerable:!s,value:n,writable:null===u&&f?f.writable:!u});else{if(!c&&(s||u||l))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=n}}},38452:(e,t,n)=>{"use strict";var r=n(1189),o="function"===typeof Symbol&&"symbol"===typeof Symbol("foo"),i=Object.prototype.toString,a=Array.prototype.concat,s=n(30041),u=n(30592)(),l=function(e,t,n,r){if(t in e)if(!0===r){if(e[t]===n)return}else if("function"!==typeof(o=r)||"[object Function]"!==i.call(o)||!r())return;var o;u?s(e,t,n,!0):s(e,t,n)},c=function(e,t){var n=arguments.length>2?arguments[2]:{},i=r(t);o&&(i=a.call(i,Object.getOwnPropertySymbols(t)));for(var s=0;s{"use strict";n.r(t),n.d(t,{default:()=>r.default});var r=n(77887)},76641:(e,t,n)=>{"use strict";n.d(t,{A4:()=>_,GH:()=>i,Tj:()=>o,Z7:()=>s,fi:()=>a});var r=n(43015),o=function(e,t,n,r,o,a){return i(e,t,n,(function(e){return"logscale"!==e&&r(e)}),o,a)},i=function(e,t,n,o,i,a){var s,u,l,c,f=o("pixelsPerLabel"),d=[];if(a)for(s=0;s=c/4){for(var v=p;v>=h;v--){var m=y[v],b=Math.log(m/e)/Math.log(t/e)*n,_={v:m};null===g||Math.abs(b-g.pixel_coord)>=f?g={tickValue:m,pixel_coord:b}:_.label="",d.push(_)}d.reverse()}}if(0===d.length){var w,x;o("labelsKMG2")?(w=[1,2,4,8,16,32,64,128,256],x=16):(w=[1,2,5,10,20,50,100],x=10);var S,A,E,C=Math.ceil(n/f),R=Math.abs(t-e)/C,O=Math.floor(Math.log(R)/Math.log(x)),T=Math.pow(x,O);for(u=0;uf));u++);for(A>E&&(S*=-1),s=0;s<=c;s++)l=A+s*S,d.push({v:l})}}var k=o("axisLabelFormatter");for(s=0;s=0?_(e,t,a,r,o):[]},s={MILLISECONDLY:0,TWO_MILLISECONDLY:1,FIVE_MILLISECONDLY:2,TEN_MILLISECONDLY:3,FIFTY_MILLISECONDLY:4,HUNDRED_MILLISECONDLY:5,FIVE_HUNDRED_MILLISECONDLY:6,SECONDLY:7,TWO_SECONDLY:8,FIVE_SECONDLY:9,TEN_SECONDLY:10,THIRTY_SECONDLY:11,MINUTELY:12,TWO_MINUTELY:13,FIVE_MINUTELY:14,TEN_MINUTELY:15,THIRTY_MINUTELY:16,HOURLY:17,TWO_HOURLY:18,SIX_HOURLY:19,DAILY:20,TWO_DAILY:21,WEEKLY:22,MONTHLY:23,QUARTERLY:24,BIANNUAL:25,ANNUAL:26,DECADAL:27,CENTENNIAL:28,NUM_GRANULARITIES:29},u=0,l=1,c=2,f=3,d=4,h=5,p=6,g=7,v=[];v[s.MILLISECONDLY]={datefield:p,step:1,spacing:1},v[s.TWO_MILLISECONDLY]={datefield:p,step:2,spacing:2},v[s.FIVE_MILLISECONDLY]={datefield:p,step:5,spacing:5},v[s.TEN_MILLISECONDLY]={datefield:p,step:10,spacing:10},v[s.FIFTY_MILLISECONDLY]={datefield:p,step:50,spacing:50},v[s.HUNDRED_MILLISECONDLY]={datefield:p,step:100,spacing:100},v[s.FIVE_HUNDRED_MILLISECONDLY]={datefield:p,step:500,spacing:500},v[s.SECONDLY]={datefield:h,step:1,spacing:1e3},v[s.TWO_SECONDLY]={datefield:h,step:2,spacing:2e3},v[s.FIVE_SECONDLY]={datefield:h,step:5,spacing:5e3},v[s.TEN_SECONDLY]={datefield:h,step:10,spacing:1e4},v[s.THIRTY_SECONDLY]={datefield:h,step:30,spacing:3e4},v[s.MINUTELY]={datefield:d,step:1,spacing:6e4},v[s.TWO_MINUTELY]={datefield:d,step:2,spacing:12e4},v[s.FIVE_MINUTELY]={datefield:d,step:5,spacing:3e5},v[s.TEN_MINUTELY]={datefield:d,step:10,spacing:6e5},v[s.THIRTY_MINUTELY]={datefield:d,step:30,spacing:18e5},v[s.HOURLY]={datefield:f,step:1,spacing:36e5},v[s.TWO_HOURLY]={datefield:f,step:2,spacing:72e5},v[s.SIX_HOURLY]={datefield:f,step:6,spacing:216e5},v[s.DAILY]={datefield:c,step:1,spacing:864e5},v[s.TWO_DAILY]={datefield:c,step:2,spacing:1728e5},v[s.WEEKLY]={datefield:c,step:7,spacing:6048e5},v[s.MONTHLY]={datefield:l,step:1,spacing:2629746e3},v[s.QUARTERLY]={datefield:l,step:3,spacing:7889238e3},v[s.BIANNUAL]={datefield:l,step:6,spacing:15778476e3},v[s.ANNUAL]={datefield:u,step:1,spacing:31556952e3},v[s.DECADAL]={datefield:u,step:10,spacing:31556952e4},v[s.CENTENNIAL]={datefield:u,step:100,spacing:31556952e5};var y=function(){for(var e=[],t=-39;t<=39;t++)for(var n=Math.pow(10,t),r=1;r<=9;r++){var o=n*r;e.push(o)}return e}(),m=function(e,t,n,r){for(var o=r("pixelsPerLabel"),i=0;i=o)return i}return-1},b=function(e,t,n){var r=v[n].spacing;return Math.round(1*(t-e)/r)},_=function(e,t,n,o,i){var a=o("axisLabelFormatter"),y=o("labelsUTC")?r.DateAccessorsUTC:r.DateAccessorsLocal,m=v[n].datefield,b=v[n].step,_=v[n].spacing,w=new Date(e),x=[];x[u]=y.getFullYear(w),x[l]=y.getMonth(w),x[c]=y.getDate(w),x[f]=y.getHours(w),x[d]=y.getMinutes(w),x[h]=y.getSeconds(w),x[p]=y.getMilliseconds(w);var S=x[m]%b;n==s.WEEKLY&&(S=y.getDay(w)),x[m]-=S;for(var A=m+1;A=s.DAILY||y.getHours(C)%b===0)&&E.push({v:R,label:a.call(i,C,n,o,i)}),x[m]+=b,R=(C=y.makeDate.apply(null,x)).getTime();return E}},43015:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Circles:()=>Z,DASHED_LINE:()=>c,DOTTED_LINE:()=>l,DOT_DASH_LINE:()=>f,DateAccessorsLocal:()=>O,DateAccessorsUTC:()=>T,HORIZONTAL:()=>d,Iterator:()=>W,LN_TEN:()=>a,LOG_SCALE:()=>i,VERTICAL:()=>h,addEvent:()=>g,binarySearch:()=>I,cancelEvent:()=>y,clone:()=>V,createCanvas:()=>$,createIterator:()=>q,dateAxisLabelFormatter:()=>ve,dateParser:()=>N,dateStrToMillis:()=>D,dateString_:()=>M,dateValueFormatter:()=>ye,detectLineDelimiter:()=>Q,dragGetX_:()=>x,dragGetY_:()=>S,findPos:()=>b,floatFormat:()=>C,getContext:()=>p,getContextPixelRatio:()=>H,hmsString_:()=>k,hsvToRGB:()=>m,isArrayLike:()=>z,isCanvasSupported:()=>ie,isDateLike:()=>B,isNodeContainedBy:()=>J,isOK:()=>A,isPixelChangingOptionList:()=>K,isValidPoint:()=>E,log10:()=>s,logRangeFraction:()=>u,numberAxisLabelFormatter:()=>pe,numberValueFormatter:()=>he,pageX:()=>_,pageY:()=>w,parseFloat_:()=>ae,pow:()=>ee,removeEvent:()=>v,repeatAndCleanup:()=>Y,requestAnimFrame:()=>G,round_:()=>P,setupDOMready_:()=>we,toRGB_:()=>oe,type:()=>o,typeArrayLike:()=>U,update:()=>L,updateDeep:()=>j,zeropad:()=>R});var r=n(76641);function o(e){return null===e?"null":typeof e}var i=10,a=Math.log(i),s=function(e){return Math.log(e)/a},u=function(e,t,n){var r=s(e),o=r+n*(s(t)-r);return Math.pow(i,o)},l=[2,2],c=[7,3],f=[7,2,2,2],d=1,h=2,p=function(e){return e.getContext("2d")},g=function(e,t,n){e.addEventListener(t,n,!1)};function v(e,t,n){e.removeEventListener(t,n,!1)}function y(e){return(e=e||window.event).stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,e.cancel=!0,e.returnValue=!1,!1}function m(e,t,n){var r,o,i;if(0===t)r=n,o=n,i=n;else{var a=Math.floor(6*e),s=6*e-a,u=n*(1-t),l=n*(1-t*s),c=n*(1-t*(1-s));switch(a){case 1:r=l,o=n,i=u;break;case 2:r=u,o=n,i=c;break;case 3:r=u,o=l,i=n;break;case 4:r=c,o=u,i=n;break;case 5:r=n,o=u,i=l;break;case 6:case 0:r=n,o=c,i=u}}return"rgb("+(r=Math.floor(255*r+.5))+","+(o=Math.floor(255*o+.5))+","+(i=Math.floor(255*i+.5))+")"}function b(e){var t=e.getBoundingClientRect(),n=window,r=document.documentElement;return{x:t.left+(n.pageXOffset||r.scrollLeft),y:t.top+(n.pageYOffset||r.scrollTop)}}function _(e){return!e.pageX||e.pageX<0?0:e.pageX}function w(e){return!e.pageY||e.pageY<0?0:e.pageY}function x(e,t){return _(e)-t.px}function S(e,t){return w(e)-t.py}function A(e){return!!e&&!isNaN(e)}function E(e,t){return!!e&&(null!==e.yval&&(null!==e.x&&void 0!==e.x&&(null!==e.y&&void 0!==e.y&&!(isNaN(e.x)||!t&&isNaN(e.y)))))}function C(e,t){var n=Math.min(Math.max(1,t||2),21);return Math.abs(e)<.001&&0!==e?e.toExponential(n-1):e.toPrecision(n)}function R(e){return e<10?"0"+e:""+e}var O={getFullYear:e=>e.getFullYear(),getMonth:e=>e.getMonth(),getDate:e=>e.getDate(),getHours:e=>e.getHours(),getMinutes:e=>e.getMinutes(),getSeconds:e=>e.getSeconds(),getMilliseconds:e=>e.getMilliseconds(),getDay:e=>e.getDay(),makeDate:function(e,t,n,r,o,i,a){return new Date(e,t,n,r,o,i,a)}},T={getFullYear:e=>e.getUTCFullYear(),getMonth:e=>e.getUTCMonth(),getDate:e=>e.getUTCDate(),getHours:e=>e.getUTCHours(),getMinutes:e=>e.getUTCMinutes(),getSeconds:e=>e.getUTCSeconds(),getMilliseconds:e=>e.getUTCMilliseconds(),getDay:e=>e.getUTCDay(),makeDate:function(e,t,n,r,o,i,a){return new Date(Date.UTC(e,t,n,r,o,i,a))}};function k(e,t,n,r){var o=R(e)+":"+R(t);if(n&&(o+=":"+R(n),r)){var i=""+r;o+="."+("000"+i).substring(i.length)}return o}function M(e,t){var n=t?T:O,r=new Date(e),o=n.getFullYear(r),i=n.getMonth(r),a=n.getDate(r),s=n.getHours(r),u=n.getMinutes(r),l=n.getSeconds(r),c=n.getMilliseconds(r),f=""+o+"/"+R(i+1)+"/"+R(a);return 3600*s+60*u+l+.001*c&&(f+=" "+k(s,u,l,c)),f}function P(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function I(e,t,n,r,o){if(null!==r&&void 0!==r&&null!==o&&void 0!==o||(r=0,o=t.length-1),r>o)return-1;null!==n&&void 0!==n||(n=0);var i,a=function(e){return e>=0&&ee?n>0&&a(i=s-1)&&t[i]e?s:I(e,t,n,s+1,o):-1}function N(e){var t,n;if((-1==e.search("-")||-1!=e.search("T")||-1!=e.search("Z"))&&(n=D(e))&&!isNaN(n))return n;if(-1!=e.search("-")){for(t=e.replace("-","/","g");-1!=t.search("-");)t=t.replace("-","/");n=D(t)}else n=D(e);return n&&!isNaN(n)||console.error("Couldn't parse "+e+" as a date"),n}function D(e){return new Date(e).getTime()}function L(e,t){if("undefined"!=typeof t&&null!==t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var F="undefined"!==typeof Node&&null!==Node&&"object"===typeof Node?function(e){return e instanceof Node}:function(e){return"object"===typeof e&&"number"===typeof e.nodeType&&"string"===typeof e.nodeName};function j(e,t){if("undefined"!=typeof t&&null!==t)for(var n in t)if(t.hasOwnProperty(n)){const r=t[n];null===r?e[n]=null:z(r)?e[n]=r.slice():F(r)?e[n]=r:"object"==typeof r?("object"==typeof e[n]&&null!==e[n]||(e[n]={}),j(e[n],r)):e[n]=r}return e}function U(e){if(null===e)return"null";const t=typeof e;return("object"===t||"function"===t&&"function"===typeof e.item)&&"number"===typeof e.length&&3!==e.nodeType&&4!==e.nodeType?"array":t}function z(e){const t=typeof e;return null!==e&&("object"===t||"function"===t&&"function"===typeof e.item)&&"number"===typeof e.length&&3!==e.nodeType&&4!==e.nodeType}function B(e){return null!==e&&"object"===typeof e&&"function"===typeof e.getTime}function V(e){for(var t=[],n=0;n=t||G.call(window,(function(){var t=(new Date).getTime()-a;o=i;var l=(i=Math.floor(t/n))-o;i+l>s||i>=s?(e(s),r()):(0!==l&&e(i),u())}))}()}else r()}var X={annotationClickHandler:!0,annotationDblClickHandler:!0,annotationMouseOutHandler:!0,annotationMouseOverHandler:!0,axisLineColor:!0,axisLineWidth:!0,clickCallback:!0,drawCallback:!0,drawHighlightPointCallback:!0,drawPoints:!0,drawPointCallback:!0,drawGrid:!0,fillAlpha:!0,gridLineColor:!0,gridLineWidth:!0,hideOverlayOnMouseOut:!0,highlightCallback:!0,highlightCircleSize:!0,interactionModel:!0,labelsDiv:!0,labelsKMB:!0,labelsKMG2:!0,labelsSeparateLines:!0,labelsShowZeroValues:!0,legend:!0,panEdgeFraction:!0,pixelsPerYLabel:!0,pointClickCallback:!0,pointSize:!0,rangeSelectorPlotFillColor:!0,rangeSelectorPlotFillGradientColor:!0,rangeSelectorPlotStrokeColor:!0,rangeSelectorBackgroundStrokeColor:!0,rangeSelectorBackgroundLineWidth:!0,rangeSelectorPlotLineWidth:!0,rangeSelectorForegroundStrokeColor:!0,rangeSelectorForegroundLineWidth:!0,rangeSelectorAlpha:!0,showLabelsOnHighlight:!0,showRoller:!0,strokeWidth:!0,underlayCallback:!0,unhighlightCallback:!0,zoomCallback:!0};function K(e,t){var n={};if(e)for(var r=1;r=u){for(c=f.length;c>0;)if(l=ee(u,c),--c,s>=l)return s/l>=Math.pow(10,o)?e.toExponential(r):P(e/l,r)+f[c]}else if(s<1){for(c=0;c=1););return s*l=Math.pow(10,o)||s=r.Z7.DECADAL)return""+i;if(t>=r.Z7.MONTHLY)return ge[a]+" "+i;if(0===3600*u+60*l+c+.001*f||t>=r.Z7.DAILY)return R(s)+" "+ge[a];if(tr.Z7.MINUTELY?k(u,l,c,0):k(u,l,c,f)}function ye(e,t){return M(e,t("labelsUTC"))}var me=[],be=!1;function _e(e){return"function"===typeof e&&e(),!0}function we(e){if("undefined"!==typeof document){const t=function(){if(!be){be=!0,e.onDOMready=_e,document.removeEventListener("DOMContentLoaded",t,!1),window.removeEventListener("load",t,!1);for(let e=0;e{"use strict";n.r(t),n.d(t,{default:()=>Z});var r=n(43015),o=function(e){this.dygraph_=e,this.points=[],this.setNames=[],this.annotations=[],this.yAxes_=null,this.xTicks_=null,this.yTicks_=null};o.prototype.addDataset=function(e,t){this.points.push(t),this.setNames.push(e)},o.prototype.getPlotArea=function(){return this.area_},o.prototype.computePlotArea=function(){var e={x:0,y:0};e.w=this.dygraph_.width_-e.x-this.dygraph_.getOption("rightGap"),e.h=this.dygraph_.height_;var t={chart_div:this.dygraph_.graphDiv,reserveSpaceLeft:function(t){var n={x:e.x,y:e.y,w:t,h:e.h};return e.x+=t,e.w-=t,n},reserveSpaceRight:function(t){var n={x:e.x+e.w-t,y:e.y,w:t,h:e.h};return e.w-=t,n},reserveSpaceTop:function(t){var n={x:e.x,y:e.y,w:e.w,h:t};return e.y+=t,e.h-=t,n},reserveSpaceBottom:function(t){var n={x:e.x,y:e.y+e.h-t,w:e.w,h:t};return e.h-=t,n},chartRect:function(){return{x:e.x,y:e.y,w:e.w,h:e.h}}};this.dygraph_.cascadeEvents_("layout",t),this.area_=e},o.prototype.setAnnotations=function(e){this.annotations=[];for(var t=this.dygraph_.getOption("xValueParser")||function(e){return e},n=0;n=0&&r<1&&this.xticks.push({pos:r,label:n,has_tick:i});for(this.yticks=[],e=0;e0&&r<=1&&this.yticks.push({axis:e,pos:r,label:n,has_tick:i})},o.prototype._evaluateAnnotations=function(){var e,t={};for(e=0;e=2,v=e.drawingContext;v.save(),g&&v.setLineDash&&v.setLineDash(o);var y=a._drawSeries(e,p,n,u,i,f,c,t);a._drawPointsOnLine(e,y,s,t,u),g&&v.setLineDash&&v.setLineDash([]),v.restore()},a._drawSeries=function(e,t,n,r,o,i,a,s){var u,l,c=null,f=null,d=null,h=[],p=!0,g=e.drawingContext;g.beginPath(),g.strokeStyle=s,g.lineWidth=n;for(var v=t.array_,y=t.end_,m=t.predicate_,b=t.start_;b0;n--)if(2==(s=t[n])[0]){var r=t[n-1];r[1]==s[1]&&r[2]==s[2]&&t.splice(n,1)}for(n=0;n2&&!e){var o=0;2==t[0][0]&&o++;var i=null,a=null;for(n=o;nt[a][2]&&(a=n)}}var l=t[i],c=t[a];t.splice(o,t.length-o),ia?(t.push(c),t.push(l)):t.push(l)}}}(n);for(var i=0,a=t.length;i1||s-n>1),n=s);t.push([e,o,a])};return{moveTo:function(e,t){a(2,e,t)},lineTo:function(e,t){a(1,e,t)},stroke:function(){i(!0),e.stroke()},fill:function(){i(!0),e.fill()},beginPath:function(){i(!0),e.beginPath()},closePath:function(){i(!0),e.closePath()},_count:function(){return o}}},a._fillPlotter=function(e){if(!e.singleSeriesName&&0===e.seriesIndex){for(var t=e.dygraph,n=t.getLabels().slice(1),o=n.length;o>=0;o--)t.visibility()[o]||n.splice(o,1);var i=function(){for(var e=0;e=0;o--){var i=r[o];e.lineTo(i[0],i[1])}},v=f-1;v>=0;v--){var y=e.drawingContext,m=n[v];if(t.getBooleanOption("fillGraph",m)){var b=t.getNumericOption("fillAlpha",m),_=t.getBooleanOption("stepPlot",m),w=h[v],x=t.axisPropertiesForSeries(m),S=1+x.minyval*x.yscale;S<0?S=0:S>1&&(S=1),S=l.h*S+l.y;var A,E=c[v],C=r.createIterator(E,0,E.length,a._getIteratorPredicate(t.getBooleanOption("connectSeparatedPoints",m))),R=NaN,O=[-1,-1],T=r.toRGB_(w),k="rgba("+T.r+","+T.g+","+T.b+","+b+")";y.fillStyle=k,y.beginPath();var M,P=!0;(E.length>2*t.width_||Z.FORCE_FAST_PROXY)&&(y=a._fastCanvasProxy(y));for(var I,N=[];C.hasNext;)if(I=C.next(),r.isOK(I.y)||_){if(d){if(!P&&M==I.xval)continue;var D;P=!1,M=I.xval,D=void 0===(s=p[I.canvasx])?S:u?s[0]:s,A=[I.canvasy,D],_?-1===O[0]?p[I.canvasx]=[I.canvasy,S]:p[I.canvasx]=[I.canvasy,O[0]]:p[I.canvasx]=I.canvasy}else A=isNaN(I.canvasy)&&_?[l.y+l.h,S]:[I.canvasy,S];isNaN(R)?(y.moveTo(I.canvasx,A[1]),y.lineTo(I.canvasx,A[0])):(_?(y.lineTo(I.canvasx,O[0]),y.lineTo(I.canvasx,A[0])):y.lineTo(I.canvasx,A[0]),d&&(N.push([R,O[1]]),u&&s?N.push([I.canvasx,s[1]]):N.push([I.canvasx,A[1]]))),O=A,R=I.canvasx}else g(y,R,O[1],N),N=[],R=NaN,null===I.y_stacked||isNaN(I.y_stacked)||(p[I.canvasx]=l.h*I.y_stacked+l.y);u=_,A&&I&&(g(y,I.canvasx,A[1],N),N=[]),y.fill()}}}};const s=a;var u=n(76641),l={maybeTreatMouseOpAsClick:function(e,t,n){n.dragEndX=r.dragGetX_(e,n),n.dragEndY=r.dragGetY_(e,n);var o=Math.abs(n.dragEndX-n.dragStartX),i=Math.abs(n.dragEndY-n.dragStartY);o<2&&i<2&&void 0!==t.lastx_&&null!==t.lastx_&&l.treatMouseOpAsClick(t,e,n),n.regionWidth=o,n.regionHeight=i},startPan:function(e,t,n){var o,i;n.isPanning=!0;var a=t.xAxisRange();if(t.getOptionForAxis("logscale","x")?(n.initialLeftmostDate=r.log10(a[0]),n.dateRange=r.log10(a[1])-r.log10(a[0])):(n.initialLeftmostDate=a[0],n.dateRange=a[1]-a[0]),n.xUnitsPerPixel=n.dateRange/(t.plotter_.area.w-1),t.getNumericOption("panEdgeFraction")){var s=t.width_*t.getNumericOption("panEdgeFraction"),u=t.xAxisExtremes(),l=t.toDomXCoord(u[0])-s,c=t.toDomXCoord(u[1])+s,f=t.toDataXCoord(l),d=t.toDataXCoord(c);n.boundedDates=[f,d];var h=[],p=t.height_*t.getNumericOption("panEdgeFraction");for(o=0;on.boundedDates[1]&&(i=(o-=i-n.boundedDates[1])+n.dateRange),t.getOptionForAxis("logscale","x")?t.dateWindow_=[Math.pow(r.LOG_SCALE,o),Math.pow(r.LOG_SCALE,i)]:t.dateWindow_=[o,i],n.is2DPan)for(var a=n.dragEndY-n.dragStartY,s=0;s=10&&n.dragDirection==r.HORIZONTAL){var i=Math.min(n.dragStartX,n.dragEndX),a=Math.max(n.dragStartX,n.dragEndX);(i=Math.max(i,o.x))<(a=Math.min(a,o.x+o.w))&&t.doZoomX_(i,a),n.cancelNextDblclick=!0}else if(n.regionHeight>=10&&n.dragDirection==r.VERTICAL){var s=Math.min(n.dragStartY,n.dragEndY),u=Math.max(n.dragStartY,n.dragEndY);(s=Math.max(s,o.y))<(u=Math.min(u,o.y+o.h))&&t.doZoomY_(s,u),n.cancelNextDblclick=!0}n.dragStartX=null,n.dragStartY=null},l.startTouch=function(e,t,n){e.preventDefault(),e.touches.length>1&&(n.startTimeForDoubleTapMs=null);for(var r=[],o=0;o=2){n.initialPinchCenter={pageX:.5*(r[0].pageX+r[1].pageX),pageY:.5*(r[0].pageY+r[1].pageY),dataX:.5*(r[0].dataX+r[1].dataX),dataY:.5*(r[0].dataY+r[1].dataY)};var s=180/Math.PI*Math.atan2(n.initialPinchCenter.pageY-r[0].pageY,r[0].pageX-n.initialPinchCenter.pageX);(s=Math.abs(s))>90&&(s=90-s),n.touchDirections={x:s<67.5,y:s>22.5}}n.initialRange={x:t.xAxisRange(),y:t.yAxisRange()}},l.moveTouch=function(e,t,n){n.startTimeForDoubleTapMs=null;var r,o=[];for(r=0;r=2){var p=l[1].pageX-c.pageX;s=(o[1].pageX-a.pageX)/p;var g=l[1].pageY-c.pageY;u=(o[1].pageY-a.pageY)/g}s=Math.min(8,Math.max(.125,s)),u=Math.min(8,Math.max(.125,u));var v=!1;if(n.touchDirections.x){var y=c.dataX-f.dataX/s;t.dateWindow_=[y+(n.initialRange.x[0]-c.dataX)/s,y+(n.initialRange.x[1]-c.dataX)/s],v=!0}if(n.touchDirections.y)for(r=0;r<1;r++){var m=t.axes_[r];if(t.attributes_.getForAxis("logscale",r));else{y=c.dataY-f.dataY/u;m.valueRange=[y+(n.initialRange.y[0]-c.dataY)/u,y+(n.initialRange.y[1]-c.dataY)/u],v=!0}}if(t.drawGraph_(!1),v&&o.length>1&&t.getFunctionOption("zoomCallback")){var b=t.xAxisRange();t.getFunctionOption("zoomCallback").call(t,b[0],b[1],t.yAxisRanges())}},l.endTouch=function(e,t,n){if(0!==e.touches.length)l.startTouch(e,t,n);else if(1==e.changedTouches.length){var r=(new Date).getTime(),o=e.changedTouches[0];n.startTimeForDoubleTapMs&&r-n.startTimeForDoubleTapMs<500&&n.doubleTapX&&Math.abs(n.doubleTapX-o.screenX)<50&&n.doubleTapY&&Math.abs(n.doubleTapY-o.screenY)<50?t.resetZoom():(n.startTimeForDoubleTapMs=r,n.doubleTapX=o.screenX,n.doubleTapY=o.screenY)}};var c=function(e,t,n){return en?e-n:0};l.defaultModel={mousedown:function(e,t,n){if(!e.button||2!=e.button){n.initializeMouseDown(e,t,n),e.altKey||e.shiftKey?l.startPan(e,t,n):l.startZoom(e,t,n);var o=function(e){if(n.isZooming){var o=function(e,t){var n=r.findPos(t.canvas_),o={left:n.x,right:n.x+t.canvas_.offsetWidth,top:n.y,bottom:n.y+t.canvas_.offsetHeight},i={x:r.pageX(e),y:r.pageY(e)},a=c(i.x,o.left,o.right),s=c(i.y,o.top,o.bottom);return Math.max(a,s)}(e,t);o<100?l.moveZoom(e,t,n):null!==n.dragEndX&&(n.dragEndX=null,n.dragEndY=null,t.clearZoomRect_())}else n.isPanning&&l.movePan(e,t,n)},i=function(e){n.isZooming?null!==n.dragEndX?l.endZoom(e,t,n):l.maybeTreatMouseOpAsClick(e,t,n):n.isPanning&&l.endPan(e,t,n),r.removeEvent(document,"mousemove",o),r.removeEvent(document,"mouseup",i),n.destroy()};t.addAndTrackEvent(document,"mousemove",o),t.addAndTrackEvent(document,"mouseup",i)}},willDestroyContextMyself:!0,touchstart:function(e,t,n){l.startTouch(e,t,n)},touchmove:function(e,t,n){l.moveTouch(e,t,n)},touchend:function(e,t,n){l.endTouch(e,t,n)},dblclick:function(e,t,n){if(n.cancelNextDblclick)n.cancelNextDblclick=!1;else{var r={canvasx:n.dragEndX,canvasy:n.dragEndY,cancelable:!0};t.cascadeEvents_("dblclick",r)||e.altKey||e.shiftKey||t.resetZoom()}}},l.nonInteractiveModel_={mousedown:function(e,t,n){n.initializeMouseDown(e,t,n)},mouseup:l.maybeTreatMouseOpAsClick},l.dragIsPanInteractionModel={mousedown:function(e,t,n){n.initializeMouseDown(e,t,n),l.startPan(e,t,n)},mousemove:function(e,t,n){n.isPanning&&l.movePan(e,t,n)},mouseup:function(e,t,n){n.isPanning&&l.endPan(e,t,n)}};const f=l;const d={highlightCircleSize:3,highlightSeriesOpts:null,highlightSeriesBackgroundAlpha:.5,highlightSeriesBackgroundColor:"rgb(255, 255, 255)",labelsSeparateLines:!1,labelsShowZeroValues:!0,labelsKMB:!1,labelsKMG2:!1,showLabelsOnHighlight:!0,digitsAfterDecimal:2,maxNumberWidth:6,sigFigs:null,strokeWidth:1,strokeBorderWidth:0,strokeBorderColor:"white",axisTickSize:3,axisLabelFontSize:14,rightGap:5,showRoller:!1,xValueParser:void 0,delimiter:",",sigma:2,errorBars:!1,fractions:!1,wilsonInterval:!0,customBars:!1,fillGraph:!1,fillAlpha:.15,connectSeparatedPoints:!1,stackedGraph:!1,stackedGraphNaNFill:"all",hideOverlayOnMouseOut:!0,resizable:"no",legend:"onmouseover",legendFollowOffsetX:50,legendFollowOffsetY:-50,stepPlot:!1,xRangePad:0,yRangePad:null,drawAxesAtZero:!1,titleHeight:28,xLabelHeight:18,yLabelWidth:18,axisLineColor:"black",axisLineWidth:.3,gridLineWidth:.3,axisLabelWidth:50,gridLineColor:"rgb(128,128,128)",interactionModel:f.defaultModel,animatedZooms:!1,animateBackgroundFade:!0,showRangeSelector:!1,rangeSelectorHeight:40,rangeSelectorPlotStrokeColor:"#808FAB",rangeSelectorPlotFillGradientColor:"white",rangeSelectorPlotFillColor:"#A7B1C4",rangeSelectorBackgroundStrokeColor:"gray",rangeSelectorBackgroundLineWidth:1,rangeSelectorPlotLineWidth:1.5,rangeSelectorForegroundStrokeColor:"black",rangeSelectorForegroundLineWidth:1,rangeSelectorAlpha:.6,showInRangeSelector:null,plotter:[s._fillPlotter,s._errorPlotter,s._linePlotter],plugins:[],axes:{x:{pixelsPerLabel:70,axisLabelWidth:60,axisLabelFormatter:r.dateAxisLabelFormatter,valueFormatter:r.dateValueFormatter,drawGrid:!0,drawAxis:!0,independentTicks:!0,ticker:u.fi},y:{axisLabelWidth:50,pixelsPerLabel:30,valueFormatter:r.numberValueFormatter,axisLabelFormatter:r.numberAxisLabelFormatter,drawGrid:!0,drawAxis:!0,independentTicks:!0,ticker:u.GH},y2:{axisLabelWidth:50,pixelsPerLabel:30,valueFormatter:r.numberValueFormatter,axisLabelFormatter:r.numberAxisLabelFormatter,drawAxis:!0,drawGrid:!1,independentTicks:!1,ticker:u.GH}}};var h=function(e){this.dygraph_=e,this.yAxes_=[],this.xAxis_={},this.series_={},this.global_=this.dygraph_.attrs_,this.user_=this.dygraph_.user_attrs_||{},this.labels_=[],this.highlightSeries_=this.get("highlightSeriesOpts")||{},this.reparseSeries()};h.AXIS_STRING_MAPPINGS_={y:0,Y:0,y1:0,Y1:0,y2:1,Y2:1},h.axisToIndex_=function(e){if("string"==typeof e){if(h.AXIS_STRING_MAPPINGS_.hasOwnProperty(e))return h.AXIS_STRING_MAPPINGS_[e];throw"Unknown axis : "+e}if("number"==typeof e){if(0===e||1===e)return e;throw"Dygraphs only supports two y-axes, indexed from 0-1."}if(e)throw"Unknown axis : "+e;return 0},h.prototype.reparseSeries=function(){var e=this.get("labels");if(e){this.labels_=e.slice(1),this.yAxes_=[{series:[],options:{}}],this.xAxis_={options:{}},this.series_={};for(var t=this.user_.series||{},n=0;n1&&r.update(this.yAxes_[1].options,s.y2||{}),r.update(this.xAxis_.options,s.x||{})}},h.prototype.get=function(e){var t=this.getGlobalUser_(e);return null!==t?t:this.getGlobalDefault_(e)},h.prototype.getGlobalUser_=function(e){return this.user_.hasOwnProperty(e)?this.user_[e]:null},h.prototype.getGlobalDefault_=function(e){return this.global_.hasOwnProperty(e)?this.global_[e]:d.hasOwnProperty(e)?d[e]:null},h.prototype.getForAxis=function(e,t){var n,r;if("number"==typeof t)r=0===(n=t)?"y":"y2";else{if("y1"==t&&(t="y"),"y"==t)n=0;else if("y2"==t)n=1;else{if("x"!=t)throw"Unknown axis "+t;n=-1}r=t}var o=-1==n?this.xAxis_:this.yAxes_[n];if(o){var i=o.options;if(i.hasOwnProperty(e))return i[e]}if("x"!==t||"logscale"!==e){var a=this.getGlobalUser_(e);if(null!==a)return a}var s=d.axes[r];return s.hasOwnProperty(e)?s[e]:this.getGlobalDefault_(e)},h.prototype.getForSeries=function(e,t){if(t===this.dygraph_.getHighlightSeries()&&this.highlightSeries_.hasOwnProperty(e))return this.highlightSeries_[e];if(!this.series_.hasOwnProperty(t))throw"Unknown series: "+t;var n=this.series_[t],r=n.options;return r.hasOwnProperty(e)?r[e]:this.getForAxis(e,n.yAxis)},h.prototype.numAxes=function(){return this.yAxes_.length},h.prototype.axisForSeries=function(e){return this.series_[e].yAxis},h.prototype.axisOptions=function(e){return this.yAxes_[e].options},h.prototype.seriesForAxis=function(e){return this.yAxes_[e].series},h.prototype.seriesNames=function(){return this.labels_};const p=h;function g(){this.tarps=[]}g.prototype.cover=function(){for(var e=document.getElementsByTagName("iframe"),t=0;ti)&&(i=r),(null===o||rr&&(u=r),li)&&(i=l),(null===o||u=0){var f=e[r-t];null===f[1]||isNaN(f[1])||(i-=f[2][0],s-=f[1],a-=f[2][1],u-=1)}c[r]=u?[e[r][0],1*s/u,[1*i/u,1*a/u]]:[e[r][0],null,[null,null]]}return c};const R=C;var O=function(){};(O.prototype=new w).extractSeries=function(e,t,n){var r,o,i,a,s,u=[];const l=n.get("labels")[t],c=n.getForSeries("logscale",l);for(var f=0;f=0&&(i-=e[r-t][2][0],a-=e[r-t][2][1]);var s=e[r][0],u=a?i/a:0;o[r]=[s,100*u]}return o};const T=O;var k=function(){};(k.prototype=new S).extractSeries=function(e,t,n){var r,o,i,a,s,u,l,c=[];const f=n.get("labels")[t],d=n.getForSeries("logscale",f),h=n.getForSeries("sigma",f);for(var p=0;p=0&&(f-=e[r-t][2][2],d-=e[r-t][2][3]);var p=e[r][0],g=d?f/d:0;if(s)if(d){var v=g<0?0:g,y=d,m=a*Math.sqrt(v*(1-v)/y+a*a/(4*y*y)),b=1+a*a/d;u=(v+a*a/(2*d)-m)/b,l=(v+a*a/(2*d)+m)/b,o[r]=[p,v*h,[u*h,l*h]]}else o[r]=[p,0,[0,0]];else c=d?a*Math.sqrt(g*(1-g)/d):1,o[r]=[p,h*g,[h*(g-c),h*(g+c)]]}return o};const M=k;var P=function(){this.annotations_=[]};P.prototype.toString=function(){return"Annotations Plugin"},P.prototype.activate=function(e){return{clearChart:this.clearChart,didDrawChart:this.didDrawChart}},P.prototype.detachLabels=function(){for(var e=0;ei.x+i.w||u.canvasyi.y+i.h)){var l=u.annotation,c=6;l.hasOwnProperty("tickHeight")&&(c=l.tickHeight);var f=document.createElement("div");f.style.fontSize=t.getOption("axisLabelFontSize")+"px";var d="dygraph-annotation";l.hasOwnProperty("icon")||(d+=" dygraphDefaultAnnotation dygraph-default-annotation"),l.hasOwnProperty("cssClass")&&(d+=" "+l.cssClass),f.className=d;var h=l.hasOwnProperty("width")?l.width:16,p=l.hasOwnProperty("height")?l.height:16;if(l.hasOwnProperty("icon")){var g=document.createElement("img");g.src=l.icon,g.width=h,g.height=p,f.appendChild(g)}else u.annotation.hasOwnProperty("shortText")&&f.appendChild(document.createTextNode(u.annotation.shortText));var v=u.canvasx-h/2;f.style.left=v+"px";var y=0;if(l.attachAtBottom){var m=i.y+i.h-p-c;a[v]?m-=a[v]:a[v]=0,a[v]+=c+p,y=m}else y=u.canvasy-p-c;f.style.top=y+"px",f.style.width=h+"px",f.style.height=p+"px",f.title=u.annotation.text,f.style.color=t.colorsMap_[u.name],f.style.borderColor=t.colorsMap_[u.name],l.div=f,t.addAndTrackEvent(f,"click",o("clickHandler","annotationClickHandler",u)),t.addAndTrackEvent(f,"mouseover",o("mouseOverHandler","annotationMouseOverHandler",u)),t.addAndTrackEvent(f,"mouseout",o("mouseOutHandler","annotationMouseOutHandler",u)),t.addAndTrackEvent(f,"dblclick",o("dblClickHandler","annotationDblClickHandler",u)),r.appendChild(f),this.annotations_.push(f);var b=e.drawingContext;if(b.save(),b.strokeStyle=l.hasOwnProperty("tickColor")?l.tickColor:t.colorsMap_[u.name],b.lineWidth=l.hasOwnProperty("tickWidth")?l.tickWidth:t.getOption("strokeWidth"),b.beginPath(),l.attachAtBottom){m=y+p;b.moveTo(u.canvasx,m),b.lineTo(u.canvasx,m+c)}else b.moveTo(u.canvasx,u.canvasy),b.lineTo(u.canvasx,u.canvasy-2-c);b.closePath(),b.stroke(),b.restore()}}},P.prototype.destroy=function(){this.detachLabels()};const I=P;var N=function(){this.xlabels_=[],this.ylabels_=[]};N.prototype.toString=function(){return"Axes Plugin"},N.prototype.activate=function(e){return{layout:this.layout,clearChart:this.clearChart,willDrawChart:this.willDrawChart}},N.prototype.layout=function(e){var t,n=e.dygraph;if(n.getOptionForAxis("drawAxis","y")){var r=n.getOptionForAxis("axisLabelWidth","y")+2*n.getOptionForAxis("axisTickSize","y");e.reserveSpaceLeft(r)}n.getOptionForAxis("drawAxis","x")&&(t=n.getOption("xAxisHeight")?n.getOption("xAxisHeight"):n.getOptionForAxis("axisLabelFontSize","x")+2*n.getOptionForAxis("axisTickSize","x"),e.reserveSpaceBottom(t));if(2==n.numAxes()){if(n.getOptionForAxis("drawAxis","y2")){r=n.getOptionForAxis("axisLabelWidth","y2")+2*n.getOptionForAxis("axisTickSize","y2");e.reserveSpaceRight(r)}}else n.numAxes()>2&&n.error("Only two y-axes are supported at this time. (Trying to use "+n.numAxes()+")")},N.prototype.detachLabels=function(){function e(e){for(var t=0;t0){var b=t.numAxes(),_=[y("y"),y("y2")];g.yticks.forEach((function(e){if(void 0!==e.label){a=v.x;var t="y1",n=_[0];if(1==e.axis&&(a=v.x+v.w,-1,t="y2",n=_[1]),n("drawAxis")){var r=n("axisLabelFontSize");s=v.y+e.pos*v.h,i=p(e.label,"y",2==b?t:null);var o=s-r/2;o<0&&(o=0),o+r+3>f?i.style.bottom="0":i.style.top=Math.min(o,f-2*r)+"px",0===e.axis?(i.style.left=v.x-n("axisLabelWidth")-n("axisTickSize")+"px",i.style.textAlign="right"):1==e.axis&&(i.style.left=v.x+v.w+n("axisTickSize")+"px",i.style.textAlign="left"),i.style.width=n("axisLabelWidth")+"px",l.appendChild(i),m.ylabels_.push(i)}}}))}var w;if(t.getOption("drawAxesAtZero"))((A=t.toPercentXCoord(0))>1||A<0||isNaN(A))&&(A=0),w=n(v.x+A*v.w);else w=n(v.x);u.strokeStyle=t.getOptionForAxis("axisLineColor","y"),u.lineWidth=t.getOptionForAxis("axisLineWidth","y"),u.beginPath(),u.moveTo(w,o(v.y)),u.lineTo(w,o(v.y+v.h)),u.closePath(),u.stroke(),2==t.numAxes()&&t.getOptionForAxis("drawAxis","y2")&&(u.strokeStyle=t.getOptionForAxis("axisLineColor","y2"),u.lineWidth=t.getOptionForAxis("axisLineWidth","y2"),u.beginPath(),u.moveTo(o(v.x+v.w),o(v.y)),u.lineTo(o(v.x+v.w),o(v.y+v.h)),u.closePath(),u.stroke())}if(t.getOptionForAxis("drawAxis","x")){if(g.xticks){var x=y("x");g.xticks.forEach((function(e){if(void 0!==e.label){a=v.x+e.pos*v.w,s=v.y+v.h,(i=p(e.label,"x")).style.textAlign="center",i.style.top=s+x("axisTickSize")+"px";var t=a-x("axisLabelWidth")/2;t+x("axisLabelWidth")>c&&(t=c-x("axisLabelWidth"),i.style.textAlign="right"),t<0&&(t=0,i.style.textAlign="left"),i.style.left=t+"px",i.style.width=x("axisLabelWidth")+"px",l.appendChild(i),m.xlabels_.push(i)}}))}var S,A;if(u.strokeStyle=t.getOptionForAxis("axisLineColor","x"),u.lineWidth=t.getOptionForAxis("axisLineWidth","x"),u.beginPath(),t.getOption("drawAxesAtZero"))((A=t.toPercentYCoord(0,0))>1||A<0)&&(A=1),S=o(v.y+A*v.h);else S=o(v.y+v.h);u.moveTo(n(v.x),S),u.lineTo(n(v.x+v.w),S),u.closePath(),u.stroke()}u.restore()};const D=N;var L=function(){this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};L.prototype.toString=function(){return"ChartLabels Plugin"},L.prototype.activate=function(e){return{layout:this.layout,didDrawChart:this.didDrawChart}};var F=function(e){var t=document.createElement("div");return t.style.position="absolute",t.style.left=e.x+"px",t.style.top=e.y+"px",t.style.width=e.w+"px",t.style.height=e.h+"px",t};L.prototype.detachLabels_=function(){for(var e=[this.title_div_,this.xlabel_div_,this.ylabel_div_,this.y2label_div_],t=0;t=2);r=a.yticks,i.save(),r.forEach((e=>{if(e.has_tick){var r=e.axis;h[r]&&(i.save(),p[r]&&i.setLineDash&&i.setLineDash(g[r]),i.strokeStyle=f[r],i.lineWidth=d[r],t=u(s.x),n=l(s.y+e.pos*s.h),i.beginPath(),i.moveTo(t,n),i.lineTo(t+s.w,n),i.stroke(),i.restore())}})),i.restore()}if(o.getOptionForAxis("drawGrid","x")){r=a.xticks,i.save();g=o.getOptionForAxis("gridLinePattern","x");(p=g&&g.length>=2)&&i.setLineDash&&i.setLineDash(g),i.strokeStyle=o.getOptionForAxis("gridLineColor","x"),i.lineWidth=o.getOptionForAxis("gridLineWidth","x"),r.forEach((e=>{e.has_tick&&(t=u(s.x+e.pos*s.w),n=l(s.y+s.h),i.beginPath(),i.moveTo(t,n),i.lineTo(t,s.y),i.stroke())})),p&&i.setLineDash&&i.setLineDash([]),i.restore()}},z.prototype.destroy=function(){};const B=z;var V=function(){this.legend_div_=null,this.is_generated_div_=!1};V.prototype.toString=function(){return"Legend Plugin"},V.prototype.activate=function(e){var t,n=e.getOption("labelsDiv");return n&&null!==n?t="string"==typeof n||n instanceof String?document.getElementById(n):n:((t=document.createElement("div")).className="dygraph-legend",e.graphDiv.appendChild(t),this.is_generated_div_=!0),this.legend_div_=t,this.one_em_width_=10,{select:this.select,deselect:this.deselect,predraw:this.predraw,didDrawChart:this.didDrawChart}};function $(e,t,n){if(!e||e.length<=1)return`
    `;var r,o,i,a,s=0,u=0,l=[];for(r=0;r<=e.length;r++)s+=e[r%e.length];if((a=Math.floor(n/(s-e[0])))>1){for(r=0;r`;return c}V.prototype.select=function(e){var t=e.selectedX,n=e.selectedPoints,r=e.selectedRow,o=e.dygraph.getOption("legend");if("never"!==o){var i=V.generateLegendHTML(e.dygraph,t,n,this.one_em_width_,r);if(i instanceof Node&&i.nodeType===Node.DOCUMENT_FRAGMENT_NODE?(this.legend_div_.innerHTML="",this.legend_div_.appendChild(i)):this.legend_div_.innerHTML=i,this.legend_div_.style.display="","follow"===o){var a,s=e.dygraph.plotter_.area,u=this.legend_div_.offsetWidth,l=e.dygraph.getOptionForAxis("axisLabelWidth","y"),c=e.dygraph.getHighlightSeries();c&&(a=n.find((e=>e.name===c)))||(a=n[0]);const t=e.dygraph.getNumericOption("legendFollowOffsetX"),r=e.dygraph.getNumericOption("legendFollowOffsetY");var f=a.x*s.w+t,d=a.y*s.h+r;f+u+1>s.w&&(f=f-2*t-u-(l-s.x)),this.legend_div_.style.left=l+f+"px",this.legend_div_.style.top=d+"px"}else if("onmouseover"===o&&this.is_generated_div_){s=e.dygraph.plotter_.area,u=this.legend_div_.offsetWidth;this.legend_div_.style.left=s.x+s.w-u-1+"px",this.legend_div_.style.top=s.y+"px"}}else this.legend_div_.style.display="none"},V.prototype.deselect=function(e){"always"!==e.dygraph.getOption("legend")&&(this.legend_div_.style.display="none");var t=function(e){var t=document.createElement("span");t.setAttribute("style","margin: 0; padding: 0 0 0 1em; border: 0;"),e.appendChild(t);var n=t.offsetWidth;return e.removeChild(t),n}(this.legend_div_);this.one_em_width_=t;var n=V.generateLegendHTML(e.dygraph,void 0,void 0,t,null);n instanceof Node&&n.nodeType===Node.DOCUMENT_FRAGMENT_NODE?(this.legend_div_.innerHTML="",this.legend_div_.appendChild(n)):this.legend_div_.innerHTML=n},V.prototype.didDrawChart=function(e){this.deselect(e)},V.prototype.predraw=function(e){if(this.is_generated_div_){e.dygraph.graphDiv.appendChild(this.legend_div_);var t=e.dygraph.plotter_.area,n=this.legend_div_.offsetWidth;this.legend_div_.style.left=t.x+t.w-n-1+"px",this.legend_div_.style.top=t.y+"px"}},V.prototype.destroy=function(){this.legend_div_=null},V.generateLegendHTML=function(e,t,n,o,i){var a,s={dygraph:e,x:t,i:i,series:[]},u={},l=e.getLabels();if(l)for(var c=1;c/g,">")),isVisible:f.visible,color:f.color};s.series.push(d),u[l[c]]=d}if("undefined"!==typeof t){var h=e.optionsViewForAxis_("x"),p=h("valueFormatter");s.xHTML=p.call(e,t,h,l[0],e,i,0);var g=[],v=e.numAxes();for(c=0;c":" "),n+=`${i.dashHTML} ${i.labelHTML}`)}return n}n=e.xHTML+":";for(o=0;o"),n+=` ${i.labelHTML}: ${i.yHTML}`}return n};const H=V;var W=function(){this.hasTouchInterface_="undefined"!=typeof TouchEvent,this.isMobileDevice_=/mobile|android/gi.test(navigator.appVersion),this.interfaceCreated_=!1};W.prototype.toString=function(){return"RangeSelector Plugin"},W.prototype.activate=function(e){return this.dygraph_=e,this.getOption_("showRangeSelector")&&this.createInterface_(),{layout:this.reserveSpace_,predraw:this.renderStaticLayer_,didDrawChart:this.renderInteractiveLayer_}},W.prototype.destroy=function(){this.bgcanvas_=null,this.fgcanvas_=null,this.leftZoomHandle_=null,this.rightZoomHandle_=null},W.prototype.getOption_=function(e,t){return this.dygraph_.getOption(e,t)},W.prototype.setDefaultOption_=function(e,t){this.dygraph_.attrs_[e]=t},W.prototype.createInterface_=function(){this.createCanvases_(),this.createZoomHandles_(),this.initInteraction_(),this.getOption_("animatedZooms")&&(console.warn("Animated zooms and range selector are not compatible; disabling animatedZooms."),this.dygraph_.updateOptions({animatedZooms:!1},!0)),this.interfaceCreated_=!0,this.addToGraph_()},W.prototype.addToGraph_=function(){var e=this.graphDiv_=this.dygraph_.graphDiv;e.appendChild(this.bgcanvas_),e.appendChild(this.fgcanvas_),e.appendChild(this.leftZoomHandle_),e.appendChild(this.rightZoomHandle_)},W.prototype.removeFromGraph_=function(){var e=this.graphDiv_;e.removeChild(this.bgcanvas_),e.removeChild(this.fgcanvas_),e.removeChild(this.leftZoomHandle_),e.removeChild(this.rightZoomHandle_),this.graphDiv_=null},W.prototype.reserveSpace_=function(e){this.getOption_("showRangeSelector")&&e.reserveSpaceBottom(this.getOption_("rangeSelectorHeight")+4)},W.prototype.renderStaticLayer_=function(){this.updateVisibility_()&&(this.resize_(),this.drawStaticLayer_())},W.prototype.renderInteractiveLayer_=function(){this.updateVisibility_()&&!this.isChangingRange_&&(this.placeZoomHandles_(),this.drawInteractiveLayer_())},W.prototype.updateVisibility_=function(){var e=this.getOption_("showRangeSelector");if(e)this.interfaceCreated_?this.graphDiv_&&this.graphDiv_.parentNode||this.addToGraph_():this.createInterface_();else if(this.graphDiv_){this.removeFromGraph_();var t=this.dygraph_;setTimeout((function(){t.width_=0,t.resize()}),1)}return e},W.prototype.resize_=function(){function e(e,t,n,o){var i=o||r.getContextPixelRatio(t);e.style.top=n.y+"px",e.style.left=n.x+"px",e.width=n.w*i,e.height=n.h*i,e.style.width=n.w+"px",e.style.height=n.h+"px",1!=i&&t.scale(i,i)}var t=this.dygraph_.layout_.getPlotArea(),n=0;this.dygraph_.getOptionForAxis("drawAxis","x")&&(n=this.getOption_("xAxisHeight")||this.getOption_("axisLabelFontSize")+2*this.getOption_("axisTickSize")),this.canvasRect_={x:t.x,y:t.y+t.h+n+4,w:t.w,h:this.getOption_("rangeSelectorHeight")};var o=this.dygraph_.getNumericOption("pixelRatio");e(this.bgcanvas_,this.bgcanvas_ctx_,this.canvasRect_,o),e(this.fgcanvas_,this.fgcanvas_ctx_,this.canvasRect_,o)},W.prototype.createCanvases_=function(){this.bgcanvas_=r.createCanvas(),this.bgcanvas_.className="dygraph-rangesel-bgcanvas",this.bgcanvas_.style.position="absolute",this.bgcanvas_.style.zIndex=9,this.bgcanvas_ctx_=r.getContext(this.bgcanvas_),this.fgcanvas_=r.createCanvas(),this.fgcanvas_.className="dygraph-rangesel-fgcanvas",this.fgcanvas_.style.position="absolute",this.fgcanvas_.style.zIndex=9,this.fgcanvas_.style.cursor="default",this.fgcanvas_ctx_=r.getContext(this.fgcanvas_)},W.prototype.createZoomHandles_=function(){var e=new Image;e.className="dygraph-rangesel-zoomhandle",e.style.position="absolute",e.style.zIndex=10,e.style.visibility="hidden",e.style.cursor="col-resize",e.width=9,e.height=16,e.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=",this.isMobileDevice_&&(e.width*=2,e.height*=2),this.leftZoomHandle_=e,this.rightZoomHandle_=e.cloneNode(!1)},W.prototype.initInteraction_=function(){var e,t,n,o,i,a,s,u,l,c,d,h,p,g,y=this,m=document,b=0,_=null,w=!1,x=!1,S=!this.isMobileDevice_,A=new v;e=function(e){var t=y.dygraph_.xAxisExtremes(),n=(t[1]-t[0])/y.canvasRect_.w;return[t[0]+(e.leftHandlePos-y.canvasRect_.x)*n,t[0]+(e.rightHandlePos-y.canvasRect_.x)*n]},t=function(e){return r.cancelEvent(e),w=!0,b=e.clientX,_=e.target?e.target:e.srcElement,"mousedown"!==e.type&&"dragstart"!==e.type||(r.addEvent(m,"mousemove",n),r.addEvent(m,"mouseup",o)),y.fgcanvas_.style.cursor="col-resize",A.cover(),!0},n=function(e){if(!w)return!1;r.cancelEvent(e);var t=e.clientX-b;if(Math.abs(t)<4)return!0;b=e.clientX;var n,o=y.getZoomHandleStatus_();_==y.leftZoomHandle_?(n=o.leftHandlePos+t,n=Math.min(n,o.rightHandlePos-_.width-3),n=Math.max(n,y.canvasRect_.x)):(n=o.rightHandlePos+t,n=Math.min(n,y.canvasRect_.x+y.canvasRect_.w),n=Math.max(n,o.leftHandlePos+_.width+3));var a=_.width/2;return _.style.left=n-a+"px",y.drawInteractiveLayer_(),S&&i(),!0},o=function(e){return!!w&&(w=!1,A.uncover(),r.removeEvent(m,"mousemove",n),r.removeEvent(m,"mouseup",o),y.fgcanvas_.style.cursor="default",S||i(),!0)},i=function(){try{var t=y.getZoomHandleStatus_();if(y.isChangingRange_=!0,t.isZoomed){var n=e(t);y.dygraph_.doZoomXDates_(n[0],n[1])}else y.dygraph_.resetZoom()}finally{y.isChangingRange_=!1}},a=function(e){var t=y.leftZoomHandle_.getBoundingClientRect(),n=t.left+t.width/2,r=(t=y.rightZoomHandle_.getBoundingClientRect()).left+t.width/2;return e.clientX>n&&e.clientX=y.canvasRect_.x+y.canvasRect_.w?o=(i=y.canvasRect_.x+y.canvasRect_.w)-a:(o+=t,i+=t);var s=y.leftZoomHandle_.width/2;return y.leftZoomHandle_.style.left=o-s+"px",y.rightZoomHandle_.style.left=i-s+"px",y.drawInteractiveLayer_(),S&&c(),!0},l=function(e){return!!x&&(x=!1,r.removeEvent(m,"mousemove",u),r.removeEvent(m,"mouseup",l),S||c(),!0)},c=function(){try{y.isChangingRange_=!0,y.dygraph_.dateWindow_=e(y.getZoomHandleStatus_()),y.dygraph_.drawGraph_(!1)}finally{y.isChangingRange_=!1}},d=function(e){if(!w&&!x){var t=a(e)?"move":"default";t!=y.fgcanvas_.style.cursor&&(y.fgcanvas_.style.cursor=t)}},h=function(e){"touchstart"==e.type&&1==e.targetTouches.length?t(e.targetTouches[0])&&r.cancelEvent(e):"touchmove"==e.type&&1==e.targetTouches.length?n(e.targetTouches[0])&&r.cancelEvent(e):o(e)},p=function(e){"touchstart"==e.type&&1==e.targetTouches.length?s(e.targetTouches[0])&&r.cancelEvent(e):"touchmove"==e.type&&1==e.targetTouches.length?u(e.targetTouches[0])&&r.cancelEvent(e):l(e)},g=function(e,t){for(var n=["touchstart","touchend","touchmove","touchcancel"],r=0;r1&&(p=d.rollingAverage(p,t.rollPeriod(),h,e)),f.push(p)}var g=[];for(e=0;e0)&&(_=Math.min(_,x),w=Math.max(w,x))}var S=.25;if(n)for(w=r.log10(w),w+=w*S,_=r.log10(_),e=0;ethis.canvasRect_.x||n+1=0;i--){var a=o[i][0];if(o[i][1].call(a,n),n.propagationStopped)break}return n.defaultPrevented},X.prototype.getPluginInstance_=function(e){for(var t=0;t!!e.valueRange)).indexOf(!0)>=0;if(null===e||void 0===e)return t||n;if("y"===e)return n;throw new Error(`axis parameter is [${e}] must be null, 'x' or 'y'.`)},X.prototype.toString=function(){var e=this.maindiv_;return"[Dygraph "+(e&&e.id?e.id:e)+"]"},X.prototype.attr_=function(e,t){return t?this.attributes_.getForSeries(e,t):this.attributes_.get(e)},X.prototype.getOption=function(e,t){return this.attr_(e,t)},X.prototype.getNumericOption=function(e,t){return this.getOption(e,t)},X.prototype.getStringOption=function(e,t){return this.getOption(e,t)},X.prototype.getBooleanOption=function(e,t){return this.getOption(e,t)},X.prototype.getFunctionOption=function(e,t){return this.getOption(e,t)},X.prototype.getOptionForAxis=function(e,t){return this.attributes_.getForAxis(e,t)},X.prototype.optionsViewForAxis_=function(e){var t=this;return function(n){var r=t.user_attrs_.axes;return r&&r[e]&&r[e].hasOwnProperty(n)?r[e][n]:("x"!==e||"logscale"!==n)&&("undefined"!=typeof t.user_attrs_[n]?t.user_attrs_[n]:(r=t.attrs_.axes)&&r[e]&&r[e].hasOwnProperty(n)?r[e][n]:"y"==e&&t.axes_[0].hasOwnProperty(n)?t.axes_[0][n]:"y2"==e&&t.axes_[1].hasOwnProperty(n)?t.axes_[1][n]:t.attr_(n))}},X.prototype.rollPeriod=function(){return this.rollPeriod_},X.prototype.xAxisRange=function(){return this.dateWindow_?this.dateWindow_:this.xAxisExtremes()},X.prototype.xAxisExtremes=function(){var e=this.getNumericOption("xRangePad")/this.plotter_.area.w;if(0===this.numRows())return[0-e,1+e];var t=this.rawData_[0][0],n=this.rawData_[this.rawData_.length-1][0];if(e){var r=n-t;t-=r*e,n+=r*e}return[t,n]},X.prototype.yAxisExtremes=function(){const e=this.gatherDatasets_(this.rolledSeries_,null),{extremes:t}=e,n=this.axes_;this.computeYAxisRanges_(t);const r=this.axes_;return this.axes_=n,r.map((e=>e.extremeRange))},X.prototype.yAxisRange=function(e){if("undefined"==typeof e&&(e=0),e<0||e>=this.axes_.length)return null;var t=this.axes_[e];return[t.computedValueRange[0],t.computedValueRange[1]]},X.prototype.yAxisRanges=function(){for(var e=[],t=0;t=this.rawData_.length||t<0||t>=this.rawData_[e].length?null:this.rawData_[e][t]},X.prototype.createInterface_=function(){var e=this.maindiv_;this.graphDiv=document.createElement("div"),this.graphDiv.style.textAlign="left",this.graphDiv.style.position="relative",e.appendChild(this.graphDiv),this.canvas_=r.createCanvas(),this.canvas_.style.position="absolute",this.canvas_.style.top=0,this.canvas_.style.left=0,this.hidden_=this.createPlotKitCanvas_(this.canvas_),this.canvas_ctx_=r.getContext(this.canvas_),this.hidden_ctx_=r.getContext(this.hidden_),this.resizeElements_(),this.graphDiv.appendChild(this.hidden_),this.graphDiv.appendChild(this.canvas_),this.mouseEventElement_=this.createMouseEventElement_(),this.layout_=new i(this);var t=this;if(this.mouseMoveHandler_=function(e){t.mouseMove_(e)},this.mouseOutHandler_=function(e){var n=e.target||e.fromElement,o=e.relatedTarget||e.toElement;r.isNodeContainedBy(n,t.graphDiv)&&!r.isNodeContainedBy(o,t.graphDiv)&&t.mouseOut_(e)},this.addAndTrackEvent(window,"mouseout",this.mouseOutHandler_),this.addAndTrackEvent(this.mouseEventElement_,"mousemove",this.mouseMoveHandler_),!this.resizeHandler_){this.resizeHandler_=function(e){t.resize()},this.addAndTrackEvent(window,"resize",this.resizeHandler_),this.resizeObserver_=null;var n=this.getStringOption("resizable");if("undefined"===typeof ResizeObserver&&"no"!==n&&(console.error("ResizeObserver unavailable; ignoring resizable property"),n="no"),"horizontal"===n||"vertical"===n||"both"===n?e.style.resize=n:"passive"!==n&&(n="no"),"no"!==n){window.getComputedStyle(e).overflow;"visible"===window.getComputedStyle(e).overflow&&(e.style.overflow="hidden"),this.resizeObserver_=new ResizeObserver(this.resizeHandler_),this.resizeObserver_.observe(e)}}},X.prototype.resizeElements_=function(){this.graphDiv.style.width=this.width_+"px",this.graphDiv.style.height=this.height_+"px";var e=this.getNumericOption("pixelRatio"),t=e||r.getContextPixelRatio(this.canvas_ctx_);this.canvas_.width=this.width_*t,this.canvas_.height=this.height_*t,this.canvas_.style.width=this.width_+"px",this.canvas_.style.height=this.height_+"px",1!==t&&this.canvas_ctx_.scale(t,t);var n=e||r.getContextPixelRatio(this.hidden_ctx_);this.hidden_.width=this.width_*n,this.hidden_.height=this.height_*n,this.hidden_.style.width=this.width_+"px",this.hidden_.style.height=this.height_+"px",1!==n&&this.hidden_ctx_.scale(n,n)},X.prototype.destroy=function(){this.canvas_ctx_.restore(),this.hidden_ctx_.restore();for(var e=this.plugins_.length-1;e>=0;e--){var t=this.plugins_.pop();t.plugin.destroy&&t.plugin.destroy()}var n=function(e){for(;e.hasChildNodes();)n(e.firstChild),e.removeChild(e.firstChild)};this.removeTrackedEvents_(),r.removeEvent(window,"mouseout",this.mouseOutHandler_),r.removeEvent(this.mouseEventElement_,"mousemove",this.mouseMoveHandler_),this.resizeObserver_&&(this.resizeObserver_.disconnect(),this.resizeObserver_=null),r.removeEvent(window,"resize",this.resizeHandler_),this.resizeHandler_=null,n(this.maindiv_);var o=function(e){for(var t in e)"object"===typeof e[t]&&(e[t]=null)};o(this.layout_),o(this.plotter_),o(this)},X.prototype.createPlotKitCanvas_=function(e){var t=r.createCanvas();return t.style.position="absolute",t.style.top=e.style.top,t.style.left=e.style.left,t.width=this.width_,t.height=this.height_,t.style.width=this.width_+"px",t.style.height=this.height_+"px",t},X.prototype.createMouseEventElement_=function(){return this.canvas_},X.prototype.setColors_=function(){var e=this.getLabels(),t=e.length-1;this.colors_=[],this.colorsMap_={};for(var n=this.getNumericOption("colorSaturation")||1,o=this.getNumericOption("colorValue")||.5,i=Math.ceil(t/2),a=this.getOption("colors"),s=this.visibility(),u=0;u{e.valueRange&&delete e.valueRange})),this.drawGraph_(),void(a&&a.call(this,r,o,this.yAxisRanges()));var s=null,u=null,l=null,c=null;e&&(s=this.xAxisRange(),u=[r,o]),t&&(l=this.yAxisRanges(),c=this.yAxisExtremes());const f=this;this.doAnimatedZoom(s,u,l,c,(function(){f.dateWindow_=null,f.axes_.forEach((e=>{e.valueRange&&delete e.valueRange})),a&&a.call(f,r,o,f.yAxisRanges())}))},X.prototype.doAnimatedZoom=function(e,t,n,o,i){var a,s,u=this.getBooleanOption("animatedZooms")?X.ANIMATION_STEPS:1,l=[],c=[];if(null!==e&&null!==t)for(a=1;a<=u;a++)s=X.zoomAnimationFunction(a,u),l[a-1]=[e[0]*(1-s)+s*t[0],e[1]*(1-s)+s*t[1]];if(null!==n&&null!==o)for(a=1;a<=u;a++){s=X.zoomAnimationFunction(a,u);for(var f=[],d=0;d=0;--f)for(var d=this.layout_.points[f],h=0;h=u.length)){var l=u[s];if(r.isValidPoint(l)){var c=l.canvasy;if(e>l.canvasx&&s+10)c+=(e-l.canvasx)/d*(f.canvasy-l.canvasy)}else if(e0){var d,h=u[s-1];if(r.isValidPoint(h))if((d=l.canvasx-h.canvasx)>0)c+=(l.canvasx-e)/d*(h.canvasy-l.canvasy)}(0===a||c=0){var a=0,s=this.attr_("labels");for(t=1;ta&&(a=u)}var l=this.previousVerticalX_;n.clearRect(l-a-1,0,2*a+2,this.height_)}if(this.selPoints_.length>0){var c=this.selPoints_[0].canvasx;for(n.save(),t=0;t=0){e!=this.lastRow_&&(o=!0),this.lastRow_=e;for(var i=0;i=0&&s=0&&(o=!0),this.lastRow_=-1;if(this.selPoints_.length?this.lastx_=this.selPoints_[0].xval:this.lastx_=null,void 0!==t&&(this.highlightSet_!==t&&(o=!0),this.highlightSet_=t),void 0!==n&&(this.lockedSet_=n),o&&(this.updateSelection_(void 0),r)){var c=this.getFunctionOption("highlightCallback");if(c){c.call(this,{},this.lastx_,this.selPoints_,this.lastRow_,this.highlightSet_)}}return o},X.prototype.mouseOut_=function(e){this.getFunctionOption("unhighlightCallback")&&this.getFunctionOption("unhighlightCallback").call(this,e),this.getBooleanOption("hideOverlayOnMouseOut")&&!this.lockedSet_&&this.clearSelection()},X.prototype.clearSelection=function(){this.cascadeEvents_("deselect",{}),this.lockedSet_=!1,this.fadeLevel?this.animateSelection_(-1):(this.canvas_ctx_.clearRect(0,0,this.width_,this.height_),this.fadeLevel=0,this.selPoints_=[],this.lastx_=null,this.lastRow_=-1,this.highlightSet_=null)},X.prototype.getSelection=function(){if(!this.selPoints_||this.selPoints_.length<1)return-1;for(var e=0;e1&&(n=this.dataHandler_.rollingAverage(n,this.rollPeriod_,this.attributes_,t)),this.rolledSeries_.push(n)}this.drawGraph_();var r=new Date;this.drawingTimeMs_=r-e},X.PointType=void 0,X.stackPoints_=function(e,t,n,r){for(var o=null,i=null,a=null,s=-1,u=function(t){if(!(s>=t))for(var n=t;nn[1]&&(n[1]=h),h=1;n--)if(this.visibility()[n-1]){if(t){s=e[n];var d=t[0],h=t[1];for(o=null,i=null,r=0;r=d&&null===o&&(o=r),s[r][0]<=h&&(i=r);null===o&&(o=0);for(var p=o,g=!0;g&&p>0;)g=null===s[--p][1];null===i&&(i=s.length-1);var v=i;for(g=!0;g&&v0;){this.readyFns_.pop()(this)}},X.prototype.computeYAxes_=function(){var e,t,n;for(this.axes_=[],e=0;e0&&(v=0),y<0&&(y=0)),v==1/0&&(v=0),y==-1/0&&(y=1),0===(n=y-v)&&(0!==y?n=Math.abs(y):(y=1,n=1));var b=y,_=v;t&&(f?(b=y+i*n,_=v):((_=v-i*n)<0&&v>=0&&(_=0),(b=y+i*n)>0&&y<=0&&(b=0))),c.extremeRange=[_,b]}if(c.valueRange){var w=s(c.valueRange[0])?c.extremeRange[0]:c.valueRange[0],x=s(c.valueRange[1])?c.extremeRange[1]:c.valueRange[1];c.computedValueRange=[w,x]}else c.computedValueRange=c.extremeRange;if(!t){if((w=c.computedValueRange[0])===(x=c.computedValueRange[1]))if(0===w)x=1;else{var S=Math.abs(w/10);w-=S,x+=S}if(f){var A=i/(2*i-1),E=(i-1)/(2*i-1);c.computedValueRange[0]=r.logRangeFraction(w,x,A),c.computedValueRange[1]=r.logRangeFraction(w,x,E)}else n=x-w,c.computedValueRange[0]=w-n*i,c.computedValueRange[1]=x+n*i}if(h){c.independentTicks=h;var C=(R=this.optionsViewForAxis_("y"+(l?"2":"")))("ticker");c.ticks=C(c.computedValueRange[0],c.computedValueRange[1],this.plotter_.area.h,R,this),a||(a=c)}}if(void 0===a)throw'Configuration Error: At least one axis has to have the "independentTicks" option activated.';for(l=0;l0&&"e"!=e[n-1]&&"E"!=e[n-1]||e.indexOf("/")>=0||isNaN(parseFloat(e)))&&(t=!0),this.setXAxisOptions_(t)},X.prototype.setXAxisOptions_=function(e){e?(this.attrs_.xValueParser=r.dateParser,this.attrs_.axes.x.valueFormatter=r.dateValueFormatter,this.attrs_.axes.x.ticker=u.fi,this.attrs_.axes.x.axisLabelFormatter=r.dateAxisLabelFormatter):(this.attrs_.xValueParser=function(e){return parseFloat(e)},this.attrs_.axes.x.valueFormatter=function(e){return e},this.attrs_.axes.x.ticker=u.GH,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter)},X.prototype.parseCSV_=function(e){var t,n,o=[],i=r.detectLineDelimiter(e),a=e.split(i||"\n"),s=this.getStringOption("delimiter");-1==a[0].indexOf(s)&&a[0].indexOf("\t")>=0&&(s="\t");var u=0;"labels"in this.user_attrs_||(u=1,this.attrs_.labels=a[0].split(s),this.attributes_.reparseSeries());for(var l,c=!1,f=this.attr_("labels").length,d=!1,h=u;h0&&v[0]0;)t=String.fromCharCode(65+(e-1)%26)+t.toLowerCase(),e=Math.floor((e-1)/26);return t},n=e.getNumberOfColumns(),o=e.getNumberOfRows(),i=e.getColumnType(0);if("date"==i||"datetime"==i)this.attrs_.xValueParser=r.dateParser,this.attrs_.axes.x.valueFormatter=r.dateValueFormatter,this.attrs_.axes.x.ticker=u.fi,this.attrs_.axes.x.axisLabelFormatter=r.dateAxisLabelFormatter;else{if("number"!=i)throw new Error("only 'date', 'datetime' and 'number' types are supported for column 1 of DataTable input (Got '"+i+"')");this.attrs_.xValueParser=function(e){return parseFloat(e)},this.attrs_.axes.x.valueFormatter=function(e){return e},this.attrs_.axes.x.ticker=u.GH,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter}var a,s,l=[],c={},f=!1;for(a=1;a0&&m[0]0&&this.setAnnotations(y,!0),this.attributes_.reparseSeries()},X.prototype.cascadeDataDidUpdateEvent_=function(){this.cascadeEvents_("dataDidUpdate",{})},X.prototype.start_=function(){var e=this.file_;"function"==typeof e&&(e=e());const t=r.typeArrayLike(e);if("array"==t)this.rawData_=this.parseArray_(e),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if("object"==t&&"function"==typeof e.getColumnRange)this.parseDataTable_(e),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if("string"==t){if(r.detectLineDelimiter(e))this.loadedEvent_(e);else{var n;n=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");var o=this;n.onreadystatechange=function(){4==n.readyState&&(200!==n.status&&0!==n.status||o.loadedEvent_(n.responseText))},n.open("GET",e,!0),n.send(null)}}else console.error("Unknown data format: "+t)},X.prototype.updateOptions=function(e,t){"undefined"==typeof t&&(t=!1);var n=e.file,o=X.copyUserAttrs_(e),i=this.attributes_.numAxes();"rollPeriod"in o&&(this.rollPeriod_=o.rollPeriod),"dateWindow"in o&&(this.dateWindow_=o.dateWindow);var a=r.isPixelChangingOptionList(this.attr_("labels"),o);r.updateDeep(this.user_attrs_,o),this.attributes_.reparseSeries(),i=n.length?console.warn("Invalid series number in setVisibility: "+o):n[o]=e[o]);else for(o=0;o=n.length?console.warn("Invalid series number in setVisibility: "+o):n[o]=e[o]:e[o]<0||e[o]>=n.length?console.warn("Invalid series number in setVisibility: "+e[o]):n[e[o]]=t;this.predraw_()},X.prototype.size=function(){return{width:this.width_,height:this.height_}},X.prototype.setAnnotations=function(e,t){this.annotations_=e,this.layout_?(this.layout_.setAnnotations(this.annotations_),t||this.predraw_()):console.warn("Tried to setAnnotations before dygraph was ready. Try setting them in a ready() block. See dygraphs.com/tests/annotation.html")},X.prototype.annotations=function(){return this.annotations_},X.prototype.getLabels=function(){var e=this.attr_("labels");return e?e.slice():null},X.prototype.indexFromSetName=function(e){return this.setIndexByName_[e]},X.prototype.getRowForX=function(e){for(var t=0,n=this.numRows()-1;t<=n;){var r=n+t>>1,o=this.getValue(r,0);if(oe)n=r-1;else{if(t==r)return r;n=r}}return null},X.prototype.ready=function(e){this.is_initial_draw_?this.readyFns_.push(e):e.call(this,this)},X.prototype.addAndTrackEvent=function(e,t,n){r.addEvent(e,t,n),this.registeredEvents_.push({elem:e,type:t,fn:n})},X.prototype.removeTrackedEvents_=function(){if(this.registeredEvents_)for(var e=0;e{!function(){"use strict";var e;function t(e,t,n,r,o){var i=void 0!==r?r:1/3,a=o||!1;if(!n)return[t.x,t.y,null,null];var s=(1-i)*t.x+i*e.x,u=(1-i)*t.y+i*e.y,l=(1-i)*t.x+i*n.x,c=(1-i)*t.y+i*n.y;if(s!=l){var f=t.y-c-(t.x-l)*(u-c)/(s-l);u+=f,c+=f}return a||(u>e.y&&u>t.y?(u=Math.max(e.y,t.y),c=2*t.y-u):ut.y&&c>n.y?(c=Math.max(t.y,n.y),u=2*t.y-c):c1&&(i=window.devicePixelRatio,r.style.width=r.style.height=[t.size,"px"].join(""),r.width=r.height=t.size*i,o.scale(i,i)),o.translate(t.size/2,t.size/2),o.rotate((t.rotate/180-.5)*Math.PI);var a=(t.size-t.lineWidth)/2;t.scaleColor&&t.scaleLength&&(a-=t.scaleLength+2),Date.now=Date.now||function(){return+new Date};var s=function(e,t,n){var r=(n=Math.min(Math.max(-1,n||0),1))<=0;o.beginPath(),o.arc(0,0,a,0,2*Math.PI*n,r),o.strokeStyle=e,o.lineWidth=t,o.stroke()},u=function(){var e,n;o.lineWidth=1,o.fillStyle=t.scaleColor,o.save();for(var r=24;r>0;--r)r%6===0?(n=t.scaleLength,e=0):(n=.6*t.scaleLength,e=t.scaleLength-n),o.fillRect(-t.size/2+e,0,n,1),o.rotate(Math.PI/12);o.restore()},l=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)},c=function(){t.scaleColor&&u(),t.trackColor&&s(t.trackColor,t.trackWidth||t.lineWidth,1)};this.getCanvas=function(){return r},this.getCtx=function(){return o},this.clear=function(){o.clearRect(t.size/-2,t.size/-2,t.size,t.size)},this.draw=function(e){var r;t.scaleColor||t.trackColor?o.getImageData&&o.putImageData?n?o.putImageData(n,0,0):(c(),n=o.getImageData(0,0,t.size*i,t.size*i)):(this.clear(),c()):this.clear(),o.lineCap=t.lineCap,r="function"===typeof t.barColor?t.barColor(e):t.barColor,s(r,t.lineWidth,e/100)}.bind(this),this.animate=function(e,n){var r=Date.now();t.onStart(e,n);var o=function(){var i=Math.min(Date.now()-r,t.animate.duration),a=t.easing(this,i,e,n-e,t.animate.duration);this.draw(a),t.onStep(e,n,a),i>=t.animate.duration?t.onStop(e,n):l(o)}.bind(this);l(o)}.bind(this)};return function(t,n){var r={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,trackWidth:void 0,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(e,t,n,r,o){return(t/=o/2)<1?r/2*t*t+n:-r/2*(--t*(t-2)-1)+n},onStart:function(e,t){},onStep:function(e,t,n){},onStop:function(e,t){}};if("undefined"!==typeof e)r.renderer=e;else{if("undefined"===typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");r.renderer=SVGRenderer}var o={},i=0,a=function(){for(var e in this.el=t,this.options=o,r)r.hasOwnProperty(e)&&(o[e]=n&&"undefined"!==typeof n[e]?n[e]:r[e],"function"===typeof o[e]&&(o[e]=o[e].bind(this)));"string"===typeof o.easing&&"undefined"!==typeof jQuery&&jQuery.isFunction(jQuery.easing[o.easing])?o.easing=jQuery.easing[o.easing]:o.easing=r.easing,"number"===typeof o.animate&&(o.animate={duration:o.animate,enabled:!0}),"boolean"!==typeof o.animate||o.animate||(o.animate={duration:1e3,enabled:o.animate}),this.renderer=new o.renderer(t,o),this.renderer.draw(i),t.dataset&&t.dataset.percent?this.update(parseFloat(t.dataset.percent)):t.getAttribute&&t.getAttribute("data-percent")&&this.update(parseFloat(t.getAttribute("data-percent")))}.bind(this);this.update=function(e){return e=parseFloat(e),o.animate.enabled?this.renderer.animate(i,e):this.renderer.draw(e),i=e,this}.bind(this),this.disableAnimation=function(){return o.animate.enabled=!1,this},this.enableAnimation=function(){return o.animate.enabled=!0,this},a()}}()}.apply(t,[]))||(e.exports=n)},30655:(e,t,n)=>{"use strict";var r=n(70453)("%Object.defineProperty%",!0)||!1;if(r)try{r({},"a",{value:1})}catch(o){r=!1}e.exports=r},41237:e=>{"use strict";e.exports=EvalError},69383:e=>{"use strict";e.exports=Error},79290:e=>{"use strict";e.exports=RangeError},79538:e=>{"use strict";e.exports=ReferenceError},58068:e=>{"use strict";e.exports=SyntaxError},69675:e=>{"use strict";e.exports=TypeError},35345:e=>{"use strict";e.exports=URIError},73055:e=>{"use strict";e.exports=function(e,t){for(var n={},r=Object.keys(e),o=Array.isArray(t),i=0;i{"use strict";var t=Object.prototype.toString,n=Math.max,r=function(e,t){for(var n=[],r=0;r{"use strict";var r=n(89353);e.exports=Function.prototype.bind||r},74462:e=>{"use strict";var t=function(){return"string"===typeof function(){}.name},n=Object.getOwnPropertyDescriptor;if(n)try{n([],"length")}catch(o){n=null}t.functionsHaveConfigurableNames=function(){if(!t()||!n)return!1;var e=n((function(){}),"name");return!!e&&!!e.configurable};var r=Function.prototype.bind;t.boundFunctionsHaveNames=function(){return t()&&"function"===typeof r&&""!==function(){}.bind().name},e.exports=t},70453:(e,t,n)=>{"use strict";var r,o=n(69383),i=n(41237),a=n(79290),s=n(79538),u=n(58068),l=n(69675),c=n(35345),f=Function,d=function(e){try{return f('"use strict"; return ('+e+").constructor;")()}catch(t){}},h=Object.getOwnPropertyDescriptor;if(h)try{h({},"")}catch(D){h=null}var p=function(){throw new l},g=h?function(){try{return p}catch(e){try{return h(arguments,"callee").get}catch(t){return p}}}():p,v=n(64039)(),y=n(80024)(),m=Object.getPrototypeOf||(y?function(e){return e.__proto__}:null),b={},_="undefined"!==typeof Uint8Array&&m?m(Uint8Array):r,w={__proto__:null,"%AggregateError%":"undefined"===typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"===typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":v&&m?m([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":b,"%AsyncGenerator%":b,"%AsyncGeneratorFunction%":b,"%AsyncIteratorPrototype%":b,"%Atomics%":"undefined"===typeof Atomics?r:Atomics,"%BigInt%":"undefined"===typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"===typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"===typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"===typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":i,"%Float32Array%":"undefined"===typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"===typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"===typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":f,"%GeneratorFunction%":b,"%Int8Array%":"undefined"===typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"===typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"===typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":v&&m?m(m([][Symbol.iterator]())):r,"%JSON%":"object"===typeof JSON?JSON:r,"%Map%":"undefined"===typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!==typeof Map&&v&&m?m((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"===typeof Promise?r:Promise,"%Proxy%":"undefined"===typeof Proxy?r:Proxy,"%RangeError%":a,"%ReferenceError%":s,"%Reflect%":"undefined"===typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"===typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!==typeof Set&&v&&m?m((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"===typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":v&&m?m(""[Symbol.iterator]()):r,"%Symbol%":v?Symbol:r,"%SyntaxError%":u,"%ThrowTypeError%":g,"%TypedArray%":_,"%TypeError%":l,"%Uint8Array%":"undefined"===typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"===typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"===typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"===typeof Uint32Array?r:Uint32Array,"%URIError%":c,"%WeakMap%":"undefined"===typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"===typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"===typeof WeakSet?r:WeakSet};if(m)try{null.error}catch(D){var x=m(m(D));w["%Error.prototype%"]=x}var S=function e(t){var n;if("%AsyncFunction%"===t)n=d("async function () {}");else if("%GeneratorFunction%"===t)n=d("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=d("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&m&&(n=m(o.prototype))}return w[t]=n,n},A={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},E=n(66743),C=n(9957),R=E.call(Function.call,Array.prototype.concat),O=E.call(Function.apply,Array.prototype.splice),T=E.call(Function.call,String.prototype.replace),k=E.call(Function.call,String.prototype.slice),M=E.call(Function.call,RegExp.prototype.exec),P=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,I=/\\(\\)?/g,N=function(e,t){var n,r=e;if(C(A,r)&&(r="%"+(n=A[r])[0]+"%"),C(w,r)){var o=w[r];if(o===b&&(o=S(r)),"undefined"===typeof o&&!t)throw new l("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new u("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!==typeof e||0===e.length)throw new l("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!==typeof t)throw new l('"allowMissing" argument must be a boolean');if(null===M(/^%?[^%]*%?$/,e))throw new u("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=function(e){var t=k(e,0,1),n=k(e,-1);if("%"===t&&"%"!==n)throw new u("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new u("invalid intrinsic syntax, expected opening `%`");var r=[];return T(e,P,(function(e,t,n,o){r[r.length]=n?T(o,I,"$1"):t||e})),r}(e),r=n.length>0?n[0]:"",o=N("%"+r+"%",t),i=o.name,a=o.value,s=!1,c=o.alias;c&&(r=c[0],O(n,R([0,1],c)));for(var f=1,d=!0;f=n.length){var y=h(a,p);a=(d=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:a[p]}else d=C(a,p),a=a[p];d&&!s&&(w[i]=a)}}return a}},75795:(e,t,n)=>{"use strict";var r=n(70453)("%Object.getOwnPropertyDescriptor%",!0);if(r)try{r([],"length")}catch(o){r=null}e.exports=r},30592:(e,t,n)=>{"use strict";var r=n(30655),o=function(){return!!r};o.hasArrayLengthDefineBug=function(){if(!r)return null;try{return 1!==r([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},80024:e=>{"use strict";var t={__proto__:null,foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof n)}},64039:(e,t,n)=>{"use strict";var r="undefined"!==typeof Symbol&&Symbol,o=n(41333);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&o())))}},41333:e=>{"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},49092:(e,t,n)=>{"use strict";var r=n(41333);e.exports=function(){return r()&&!!Symbol.toStringTag}},9957:(e,t,n)=>{"use strict";var r=Function.prototype.call,o=Object.prototype.hasOwnProperty,i=n(66743);e.exports=i.call(r,o)},57971:(e,t,n)=>{"use strict";n.d(t,{zR:()=>u});var r,o=n(58168);!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(r||(r={}));var i=function(e){return e};var a="beforeunload",s="popstate";function u(e){void 0===e&&(e={});var t=e.window,n=void 0===t?document.defaultView:t,u=n.history;function p(){var e=n.location,t=e.pathname,r=e.search,o=e.hash,a=u.state||{};return[a.idx,i({pathname:t,search:r,hash:o,state:a.usr||null,key:a.key||"default"})]}var g=null;n.addEventListener(s,(function(){if(g)w.call(g),g=null;else{var e=r.Pop,t=p(),n=t[0],o=t[1];if(w.length){if(null!=n){var i=m-n;i&&(g={action:e,location:o,retry:function(){R(-1*i)}},R(i))}}else C(e)}}));var v=r.Pop,y=p(),m=y[0],b=y[1],_=c(),w=c();function x(e){return"string"===typeof e?e:d(e)}function S(e,t){return void 0===t&&(t=null),i((0,o.A)({pathname:b.pathname,hash:"",search:""},"string"===typeof e?h(e):e,{state:t,key:f()}))}function A(e,t){return[{usr:e.state,key:e.key,idx:t},x(e)]}function E(e,t,n){return!w.length||(w.call({action:e,location:t,retry:n}),!1)}function C(e){v=e;var t=p();m=t[0],b=t[1],_.call({action:v,location:b})}function R(e){u.go(e)}null==m&&(m=0,u.replaceState((0,o.A)({},u.state,{idx:m}),""));var O={get action(){return v},get location(){return b},createHref:x,push:function e(t,o){var i=r.Push,a=S(t,o);if(E(i,a,(function(){e(t,o)}))){var s=A(a,m+1),l=s[0],c=s[1];try{u.pushState(l,"",c)}catch(f){n.location.assign(c)}C(i)}},replace:function e(t,n){var o=r.Replace,i=S(t,n);if(E(o,i,(function(){e(t,n)}))){var a=A(i,m),s=a[0],l=a[1];u.replaceState(s,"",l),C(o)}},go:R,back:function(){R(-1)},forward:function(){R(1)},listen:function(e){return _.push(e)},block:function(e){var t=w.push(e);return 1===w.length&&n.addEventListener(a,l),function(){t(),w.length||n.removeEventListener(a,l)}}};return O}function l(e){e.preventDefault(),e.returnValue=""}function c(){var e=[];return{get length(){return e.length},push:function(t){return e.push(t),function(){e=e.filter((function(e){return e!==t}))}},call:function(t){e.forEach((function(e){return e&&e(t)}))}}}function f(){return Math.random().toString(36).substr(2,8)}function d(e){var t=e.pathname,n=void 0===t?"/":t,r=e.search,o=void 0===r?"":r,i=e.hash,a=void 0===i?"":i;return o&&"?"!==o&&(n+="?"===o.charAt(0)?o:"?"+o),a&&"#"!==a&&(n+="#"===a.charAt(0)?a:"#"+a),n}function h(e){var t={};if(e){var n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));var r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}},4146:(e,t,n)=>{"use strict";var r=n(73404),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function u(e){return r.isMemo(e)?a:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=a;var l=Object.defineProperty,c=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,h=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(p){var o=h(n);o&&o!==p&&e(t,o,r)}var a=c(n);f&&(a=a.concat(f(n)));for(var s=u(t),g=u(n),v=0;v{"use strict";var n="function"===typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,u=n?Symbol.for("react.provider"):60109,l=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,f=n?Symbol.for("react.concurrent_mode"):60111,d=n?Symbol.for("react.forward_ref"):60112,h=n?Symbol.for("react.suspense"):60113,p=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,v=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,m=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,_=n?Symbol.for("react.scope"):60119;function w(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case f:case i:case s:case a:case h:return e;default:switch(e=e&&e.$$typeof){case l:case d:case v:case g:case u:return e;default:return t}}case o:return t}}}function x(e){return w(e)===f}t.AsyncMode=c,t.ConcurrentMode=f,t.ContextConsumer=l,t.ContextProvider=u,t.Element=r,t.ForwardRef=d,t.Fragment=i,t.Lazy=v,t.Memo=g,t.Portal=o,t.Profiler=s,t.StrictMode=a,t.Suspense=h,t.isAsyncMode=function(e){return x(e)||w(e)===c},t.isConcurrentMode=x,t.isContextConsumer=function(e){return w(e)===l},t.isContextProvider=function(e){return w(e)===u},t.isElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return w(e)===d},t.isFragment=function(e){return w(e)===i},t.isLazy=function(e){return w(e)===v},t.isMemo=function(e){return w(e)===g},t.isPortal=function(e){return w(e)===o},t.isProfiler=function(e){return w(e)===s},t.isStrictMode=function(e){return w(e)===a},t.isSuspense=function(e){return w(e)===h},t.isValidElementType=function(e){return"string"===typeof e||"function"===typeof e||e===i||e===f||e===s||e===a||e===h||e===p||"object"===typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===g||e.$$typeof===u||e.$$typeof===l||e.$$typeof===d||e.$$typeof===m||e.$$typeof===b||e.$$typeof===_||e.$$typeof===y)},t.typeOf=w},73404:(e,t,n)=>{"use strict";e.exports=n(3072)},47244:(e,t,n)=>{"use strict";var r=n(49092)(),o=n(38075)("Object.prototype.toString"),i=function(e){return!(r&&e&&"object"===typeof e&&Symbol.toStringTag in e)&&"[object Arguments]"===o(e)},a=function(e){return!!i(e)||null!==e&&"object"===typeof e&&"number"===typeof e.length&&e.length>=0&&"[object Array]"!==o(e)&&"[object Function]"===o(e.callee)},s=function(){return i(arguments)}();i.isLegacyArguments=a,e.exports=s?i:a},87206:e=>{function t(e){return!!e.constructor&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(t(e)||function(e){return"function"===typeof e.readFloatLE&&"function"===typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},62120:(e,t,n)=>{"use strict";var r=Date.prototype.getDay,o=Object.prototype.toString,i=n(49092)();e.exports=function(e){return"object"===typeof e&&null!==e&&(i?function(e){try{return r.call(e),!0}catch(t){return!1}}(e):"[object Date]"===o.call(e))}},14035:(e,t,n)=>{"use strict";var r,o,i,a,s=n(38075),u=n(49092)();if(u){r=s("Object.prototype.hasOwnProperty"),o=s("RegExp.prototype.exec"),i={};var l=function(){throw i};a={toString:l,valueOf:l},"symbol"===typeof Symbol.toPrimitive&&(a[Symbol.toPrimitive]=l)}var c=s("Object.prototype.toString"),f=Object.getOwnPropertyDescriptor;e.exports=u?function(e){if(!e||"object"!==typeof e)return!1;var t=f(e,"lastIndex");if(!(t&&r(t,"value")))return!1;try{o(e,a)}catch(n){return n===i}}:function(e){return!(!e||"object"!==typeof e&&"function"!==typeof e)&&"[object RegExp]"===c(e)}},55580:(e,t,n)=>{var r=n(56110)(n(9325),"DataView");e.exports=r},21549:(e,t,n)=>{var r=n(22032),o=n(63862),i=n(66721),a=n(12749),s=n(35749);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(39344),o=n(94033);function i(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}i.prototype=r(o.prototype),i.prototype.constructor=i,e.exports=i},80079:(e,t,n)=>{var r=n(63702),o=n(70080),i=n(24739),a=n(48655),s=n(31175);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(39344),o=n(94033);function i(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}i.prototype=r(o.prototype),i.prototype.constructor=i,e.exports=i},68223:(e,t,n)=>{var r=n(56110)(n(9325),"Map");e.exports=r},53661:(e,t,n)=>{var r=n(63040),o=n(17670),i=n(90289),a=n(4509),s=n(72949);function u(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(56110)(n(9325),"Promise");e.exports=r},76545:(e,t,n)=>{var r=n(56110)(n(9325),"Set");e.exports=r},38859:(e,t,n)=>{var r=n(53661),o=n(31380),i=n(51459);function a(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t{var r=n(80079),o=n(51420),i=n(90938),a=n(63605),s=n(29817),u=n(80945);function l(e){var t=this.__data__=new r(e);this.size=t.size}l.prototype.clear=o,l.prototype.delete=i,l.prototype.get=a,l.prototype.has=s,l.prototype.set=u,e.exports=l},51873:(e,t,n)=>{var r=n(9325).Symbol;e.exports=r},37828:(e,t,n)=>{var r=n(9325).Uint8Array;e.exports=r},28303:(e,t,n)=>{var r=n(56110)(n(9325),"WeakMap");e.exports=r},91033:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},83729:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n{var r=n(96131);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},29905:e=>{e.exports=function(e,t,n){for(var r=-1,o=null==e?0:e.length;++r{var r=n(78096),o=n(72428),i=n(56449),a=n(3656),s=n(30361),u=n(37167),l=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=i(e),c=!n&&o(e),f=!n&&!c&&a(e),d=!n&&!c&&!f&&u(e),h=n||c||f||d,p=h?r(e.length,String):[],g=p.length;for(var v in e)!t&&!l.call(e,v)||h&&("length"==v||f&&("offset"==v||"parent"==v)||d&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||s(v,g))||p.push(v);return p}},34932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{var r=n(43360),o=n(75288);e.exports=function(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},16547:(e,t,n)=>{var r=n(43360),o=n(75288),i=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var a=e[t];i.call(e,t)&&o(a,n)&&(void 0!==n||t in e)||r(e,t,n)}},26025:(e,t,n)=>{var r=n(75288);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},74733:(e,t,n)=>{var r=n(21791),o=n(95950);e.exports=function(e,t){return e&&r(t,o(t),e)}},43838:(e,t,n)=>{var r=n(21791),o=n(37241);e.exports=function(e,t){return e&&r(t,o(t),e)}},43360:(e,t,n)=>{var r=n(93243);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},9999:(e,t,n)=>{var r=n(37217),o=n(83729),i=n(16547),a=n(74733),s=n(43838),u=n(93290),l=n(23007),c=n(92271),f=n(48948),d=n(50002),h=n(83349),p=n(5861),g=n(76189),v=n(77199),y=n(35529),m=n(56449),b=n(3656),_=n(87730),w=n(23805),x=n(38440),S=n(95950),A=n(37241),E="[object Arguments]",C="[object Function]",R="[object Object]",O={};O[E]=O["[object Array]"]=O["[object ArrayBuffer]"]=O["[object DataView]"]=O["[object Boolean]"]=O["[object Date]"]=O["[object Float32Array]"]=O["[object Float64Array]"]=O["[object Int8Array]"]=O["[object Int16Array]"]=O["[object Int32Array]"]=O["[object Map]"]=O["[object Number]"]=O[R]=O["[object RegExp]"]=O["[object Set]"]=O["[object String]"]=O["[object Symbol]"]=O["[object Uint8Array]"]=O["[object Uint8ClampedArray]"]=O["[object Uint16Array]"]=O["[object Uint32Array]"]=!0,O["[object Error]"]=O[C]=O["[object WeakMap]"]=!1,e.exports=function e(t,n,T,k,M,P){var I,N=1&n,D=2&n,L=4&n;if(T&&(I=M?T(t,k,M,P):T(t)),void 0!==I)return I;if(!w(t))return t;var F=m(t);if(F){if(I=g(t),!N)return l(t,I)}else{var j=p(t),U=j==C||"[object GeneratorFunction]"==j;if(b(t))return u(t,N);if(j==R||j==E||U&&!M){if(I=D||U?{}:y(t),!N)return D?f(t,s(I,t)):c(t,a(I,t))}else{if(!O[j])return M?t:{};I=v(t,j,N)}}P||(P=new r);var z=P.get(t);if(z)return z;P.set(t,I),x(t)?t.forEach((function(r){I.add(e(r,n,T,r,t,P))})):_(t)&&t.forEach((function(r,o){I.set(o,e(r,n,T,o,t,P))}));var B=F?void 0:(L?D?h:d:D?A:S)(t);return o(B||t,(function(r,o){B&&(r=t[o=r]),i(I,o,e(r,n,T,o,t,P))})),I}},39344:(e,t,n)=>{var r=n(23805),o=Object.create,i=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=i},83915:(e,t,n)=>{var r=n(38859),o=n(15325),i=n(29905),a=n(34932),s=n(27301),u=n(19219);e.exports=function(e,t,n,l){var c=-1,f=o,d=!0,h=e.length,p=[],g=t.length;if(!h)return p;n&&(t=a(t,s(n))),l?(f=i,d=!1):t.length>=200&&(f=u,d=!1,t=new r(t));e:for(;++c{e.exports=function(e,t,n,r){for(var o=e.length,i=n+(r?1:-1);r?i--:++i{var r=n(14528),o=n(45891);e.exports=function e(t,n,i,a,s){var u=-1,l=t.length;for(i||(i=o),s||(s=[]);++u0&&i(c)?n>1?e(c,n-1,i,a,s):r(s,c):a||(s[s.length]=c)}return s}},86649:(e,t,n)=>{var r=n(83221)();e.exports=r},47422:(e,t,n)=>{var r=n(31769),o=n(77797);e.exports=function(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&n{var r=n(14528),o=n(56449);e.exports=function(e,t,n){var i=t(e);return o(e)?i:r(i,n(e))}},72552:(e,t,n)=>{var r=n(51873),o=n(659),i=n(59350),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?o(e):i(e)}},96131:(e,t,n)=>{var r=n(2523),o=n(85463),i=n(76959);e.exports=function(e,t,n){return t===t?i(e,t,n):r(e,o,n)}},27534:(e,t,n)=>{var r=n(72552),o=n(40346);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},60270:(e,t,n)=>{var r=n(87068),o=n(40346);e.exports=function e(t,n,i,a,s){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!==t&&n!==n:r(t,n,i,a,e,s))}},87068:(e,t,n)=>{var r=n(37217),o=n(25911),i=n(21986),a=n(50689),s=n(5861),u=n(56449),l=n(3656),c=n(37167),f="[object Arguments]",d="[object Array]",h="[object Object]",p=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,g,v,y){var m=u(e),b=u(t),_=m?d:s(e),w=b?d:s(t),x=(_=_==f?h:_)==h,S=(w=w==f?h:w)==h,A=_==w;if(A&&l(e)){if(!l(t))return!1;m=!0,x=!1}if(A&&!x)return y||(y=new r),m||c(e)?o(e,t,n,g,v,y):i(e,t,_,n,g,v,y);if(!(1&n)){var E=x&&p.call(e,"__wrapped__"),C=S&&p.call(t,"__wrapped__");if(E||C){var R=E?e.value():e,O=C?t.value():t;return y||(y=new r),v(R,O,n,g,y)}}return!!A&&(y||(y=new r),a(e,t,n,g,v,y))}},29172:(e,t,n)=>{var r=n(5861),o=n(40346);e.exports=function(e){return o(e)&&"[object Map]"==r(e)}},85463:e=>{e.exports=function(e){return e!==e}},45083:(e,t,n)=>{var r=n(1882),o=n(87296),i=n(23805),a=n(47473),s=/^\[object .+?Constructor\]$/,u=Function.prototype,l=Object.prototype,c=u.toString,f=l.hasOwnProperty,d=RegExp("^"+c.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||o(e))&&(r(e)?d:s).test(a(e))}},16038:(e,t,n)=>{var r=n(5861),o=n(40346);e.exports=function(e){return o(e)&&"[object Set]"==r(e)}},4901:(e,t,n)=>{var r=n(72552),o=n(30294),i=n(40346),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(e){return i(e)&&o(e.length)&&!!a[r(e)]}},88984:(e,t,n)=>{var r=n(55527),o=n(3650),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))i.call(e,n)&&"constructor"!=n&&t.push(n);return t}},72903:(e,t,n)=>{var r=n(23805),o=n(55527),i=n(90181),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return i(e);var t=o(e),n=[];for(var s in e)("constructor"!=s||!t&&a.call(e,s))&&n.push(s);return n}},94033:e=>{e.exports=function(){}},85250:(e,t,n)=>{var r=n(37217),o=n(87805),i=n(86649),a=n(42824),s=n(23805),u=n(37241),l=n(14974);e.exports=function e(t,n,c,f,d){t!==n&&i(n,(function(i,u){if(d||(d=new r),s(i))a(t,n,u,c,e,f,d);else{var h=f?f(l(t,u),i,u+"",t,n,d):void 0;void 0===h&&(h=i),o(t,u,h)}}),u)}},42824:(e,t,n)=>{var r=n(87805),o=n(93290),i=n(71961),a=n(23007),s=n(35529),u=n(72428),l=n(56449),c=n(83693),f=n(3656),d=n(1882),h=n(23805),p=n(11331),g=n(37167),v=n(14974),y=n(69884);e.exports=function(e,t,n,m,b,_,w){var x=v(e,n),S=v(t,n),A=w.get(S);if(A)r(e,n,A);else{var E=_?_(x,S,n+"",e,t,w):void 0,C=void 0===E;if(C){var R=l(S),O=!R&&f(S),T=!R&&!O&&g(S);E=S,R||O||T?l(x)?E=x:c(x)?E=a(x):O?(C=!1,E=o(S,!0)):T?(C=!1,E=i(S,!0)):E=[]:p(S)||u(S)?(E=x,u(x)?E=y(x):h(x)&&!d(x)||(E=s(S))):C=!1}C&&(w.set(S,E),b(E,S,m,_,w),w.delete(S)),r(e,n,E)}}},69302:(e,t,n)=>{var r=n(83488),o=n(56757),i=n(32865);e.exports=function(e,t){return i(o(e,t,r),e+"")}},19570:(e,t,n)=>{var r=n(37334),o=n(93243),i=n(83488),a=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:i;e.exports=a},25160:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{e.exports=function(e,t){for(var n=-1,r=Array(e);++n{var r=n(51873),o=n(34932),i=n(56449),a=n(44394),s=r?r.prototype:void 0,u=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(i(t))return o(t,e)+"";if(a(t))return u?u.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},27301:e=>{e.exports=function(e){return function(t){return e(t)}}},19931:(e,t,n)=>{var r=n(31769),o=n(68090),i=n(68969),a=n(77797);e.exports=function(e,t){return t=r(t,e),null==(e=i(e,t))||delete e[a(o(t))]}},19219:e=>{e.exports=function(e,t){return e.has(t)}},31769:(e,t,n)=>{var r=n(56449),o=n(28586),i=n(61802),a=n(13222);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:i(a(e))}},49653:(e,t,n)=>{var r=n(37828);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},93290:(e,t,n)=>{e=n.nmd(e);var r=n(9325),o=t&&!t.nodeType&&t,i=o&&e&&!e.nodeType&&e,a=i&&i.exports===o?r.Buffer:void 0,s=a?a.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}},76169:(e,t,n)=>{var r=n(49653);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},73201:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},93736:(e,t,n)=>{var r=n(51873),o=r?r.prototype:void 0,i=o?o.valueOf:void 0;e.exports=function(e){return i?Object(i.call(e)):{}}},71961:(e,t,n)=>{var r=n(49653);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},23007:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var r=n(16547),o=n(43360);e.exports=function(e,t,n,i){var a=!n;n||(n={});for(var s=-1,u=t.length;++s{var r=n(21791),o=n(4664);e.exports=function(e,t){return r(e,o(e),t)}},48948:(e,t,n)=>{var r=n(21791),o=n(86375);e.exports=function(e,t){return r(e,o(e),t)}},55481:(e,t,n)=>{var r=n(9325)["__core-js_shared__"];e.exports=r},20999:(e,t,n)=>{var r=n(69302),o=n(36800);e.exports=function(e){return r((function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,s&&o(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),t=Object(t);++r{e.exports=function(e){return function(t,n,r){for(var o=-1,i=Object(t),a=r(t),s=a.length;s--;){var u=a[e?s:++o];if(!1===n(i[u],u,i))break}return t}}},66929:(e,t,n)=>{var r=n(56017),o=n(38816),i=n(37381),a=n(62284),s=n(56449),u=n(85087);e.exports=function(e){return o((function(t){var n=t.length,o=n,l=r.prototype.thru;for(e&&t.reverse();o--;){var c=t[o];if("function"!=typeof c)throw new TypeError("Expected a function");if(l&&!f&&"wrapper"==a(c))var f=new r([],!0)}for(o=f?o:n;++o{var r=n(11331);e.exports=function(e){return r(e)?void 0:e}},93243:(e,t,n)=>{var r=n(56110),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=o},25911:(e,t,n)=>{var r=n(38859),o=n(14248),i=n(19219);e.exports=function(e,t,n,a,s,u){var l=1&n,c=e.length,f=t.length;if(c!=f&&!(l&&f>c))return!1;var d=u.get(e),h=u.get(t);if(d&&h)return d==t&&h==e;var p=-1,g=!0,v=2&n?new r:void 0;for(u.set(e,t),u.set(t,e);++p{var r=n(51873),o=n(37828),i=n(75288),a=n(25911),s=n(20317),u=n(84247),l=r?r.prototype:void 0,c=l?l.valueOf:void 0;e.exports=function(e,t,n,r,l,f,d){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!f(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var h=s;case"[object Set]":var p=1&r;if(h||(h=u),e.size!=t.size&&!p)return!1;var g=d.get(e);if(g)return g==t;r|=2,d.set(e,t);var v=a(h(e),h(t),r,l,f,d);return d.delete(e),v;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},50689:(e,t,n)=>{var r=n(50002),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,i,a,s){var u=1&n,l=r(e),c=l.length;if(c!=r(t).length&&!u)return!1;for(var f=c;f--;){var d=l[f];if(!(u?d in t:o.call(t,d)))return!1}var h=s.get(e),p=s.get(t);if(h&&p)return h==t&&p==e;var g=!0;s.set(e,t),s.set(t,e);for(var v=u;++f{var r=n(35970),o=n(56757),i=n(32865);e.exports=function(e){return i(o(e,void 0,r),e+"")}},34840:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},50002:(e,t,n)=>{var r=n(82199),o=n(4664),i=n(95950);e.exports=function(e){return r(e,i,o)}},83349:(e,t,n)=>{var r=n(82199),o=n(86375),i=n(37241);e.exports=function(e){return r(e,i,o)}},37381:(e,t,n)=>{var r=n(48152),o=n(63950),i=r?function(e){return r.get(e)}:o;e.exports=i},62284:(e,t,n)=>{var r=n(84629),o=Object.prototype.hasOwnProperty;e.exports=function(e){for(var t=e.name+"",n=r[t],i=o.call(r,t)?n.length:0;i--;){var a=n[i],s=a.func;if(null==s||s==e)return a.name}return t}},12651:(e,t,n)=>{var r=n(74218);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},56110:(e,t,n)=>{var r=n(45083),o=n(10392);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},28879:(e,t,n)=>{var r=n(74335)(Object.getPrototypeOf,Object);e.exports=r},659:(e,t,n)=>{var r=n(51873),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(u){}var o=a.call(e);return r&&(t?e[s]=n:delete e[s]),o}},4664:(e,t,n)=>{var r=n(79770),o=n(63345),i=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(e){return null==e?[]:(e=Object(e),r(a(e),(function(t){return i.call(e,t)})))}:o;e.exports=s},86375:(e,t,n)=>{var r=n(14528),o=n(28879),i=n(4664),a=n(63345),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,i(e)),e=o(e);return t}:a;e.exports=s},5861:(e,t,n)=>{var r=n(55580),o=n(68223),i=n(32804),a=n(76545),s=n(28303),u=n(72552),l=n(47473),c="[object Map]",f="[object Promise]",d="[object Set]",h="[object WeakMap]",p="[object DataView]",g=l(r),v=l(o),y=l(i),m=l(a),b=l(s),_=u;(r&&_(new r(new ArrayBuffer(1)))!=p||o&&_(new o)!=c||i&&_(i.resolve())!=f||a&&_(new a)!=d||s&&_(new s)!=h)&&(_=function(e){var t=u(e),n="[object Object]"==t?e.constructor:void 0,r=n?l(n):"";if(r)switch(r){case g:return p;case v:return c;case y:return f;case m:return d;case b:return h}return t}),e.exports=_},10392:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},22032:(e,t,n)=>{var r=n(81042);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},63862:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},66721:(e,t,n)=>{var r=n(81042),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},12749:(e,t,n)=>{var r=n(81042),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},35749:(e,t,n)=>{var r=n(81042);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},76189:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},77199:(e,t,n)=>{var r=n(49653),o=n(76169),i=n(73201),a=n(93736),s=n(71961);e.exports=function(e,t,n){var u=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new u(+e);case"[object DataView]":return o(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return s(e,n);case"[object Map]":case"[object Set]":return new u;case"[object Number]":case"[object String]":return new u(e);case"[object RegExp]":return i(e);case"[object Symbol]":return a(e)}}},35529:(e,t,n)=>{var r=n(39344),o=n(28879),i=n(55527);e.exports=function(e){return"function"!=typeof e.constructor||i(e)?{}:r(o(e))}},45891:(e,t,n)=>{var r=n(51873),o=n(72428),i=n(56449),a=r?r.isConcatSpreadable:void 0;e.exports=function(e){return i(e)||o(e)||!!(a&&e&&e[a])}},30361:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e{var r=n(75288),o=n(64894),i=n(30361),a=n(23805);e.exports=function(e,t,n){if(!a(n))return!1;var s=typeof t;return!!("number"==s?o(n)&&i(t,n.length):"string"==s&&t in n)&&r(n[t],e)}},28586:(e,t,n)=>{var r=n(56449),o=n(44394),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(a.test(e)||!i.test(e)||null!=t&&e in Object(t))}},74218:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},85087:(e,t,n)=>{var r=n(30980),o=n(37381),i=n(62284),a=n(53758);e.exports=function(e){var t=i(e),n=a[t];if("function"!=typeof n||!(t in r.prototype))return!1;if(e===n)return!0;var s=o(n);return!!s&&e===s[0]}},87296:(e,t,n)=>{var r=n(55481),o=function(){var e=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();e.exports=function(e){return!!o&&o in e}},55527:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},63702:e=>{e.exports=function(){this.__data__=[],this.size=0}},70080:(e,t,n)=>{var r=n(26025),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},24739:(e,t,n)=>{var r=n(26025);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},48655:(e,t,n)=>{var r=n(26025);e.exports=function(e){return r(this.__data__,e)>-1}},31175:(e,t,n)=>{var r=n(26025);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},63040:(e,t,n)=>{var r=n(21549),o=n(80079),i=n(68223);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},17670:(e,t,n)=>{var r=n(12651);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},90289:(e,t,n)=>{var r=n(12651);e.exports=function(e){return r(this,e).get(e)}},4509:(e,t,n)=>{var r=n(12651);e.exports=function(e){return r(this,e).has(e)}},72949:(e,t,n)=>{var r=n(12651);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},20317:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},62224:(e,t,n)=>{var r=n(50104);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},48152:(e,t,n)=>{var r=n(28303),o=r&&new r;e.exports=o},81042:(e,t,n)=>{var r=n(56110)(Object,"create");e.exports=r},3650:(e,t,n)=>{var r=n(74335)(Object.keys,Object);e.exports=r},90181:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},86009:(e,t,n)=>{e=n.nmd(e);var r=n(34840),o=t&&!t.nodeType&&t,i=o&&e&&!e.nodeType&&e,a=i&&i.exports===o&&r.process,s=function(){try{var e=i&&i.require&&i.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(t){}}();e.exports=s},59350:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},74335:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},56757:(e,t,n)=>{var r=n(91033),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,a=-1,s=o(i.length-t,0),u=Array(s);++a{var r=n(47422),o=n(25160);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},84629:e=>{e.exports={}},9325:(e,t,n)=>{var r=n(34840),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},14974:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!==typeof e[t])&&"__proto__"!=t)return e[t]}},31380:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},51459:e=>{e.exports=function(e){return this.__data__.has(e)}},84247:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},32865:(e,t,n)=>{var r=n(19570),o=n(51811)(r);e.exports=o},51811:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),i=16-(o-r);if(r=o,i>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},51420:(e,t,n)=>{var r=n(80079);e.exports=function(){this.__data__=new r,this.size=0}},90938:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},63605:e=>{e.exports=function(e){return this.__data__.get(e)}},29817:e=>{e.exports=function(e){return this.__data__.has(e)}},80945:(e,t,n)=>{var r=n(80079),o=n(68223),i=n(53661);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(e,t),this.size=n.size,this}},76959:e=>{e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r{var r=n(62224),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(i,"$1"):n||e)})),t}));e.exports=a},77797:(e,t,n)=>{var r=n(44394);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},47473:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},80257:(e,t,n)=>{var r=n(30980),o=n(56017),i=n(23007);e.exports=function(e){if(e instanceof r)return e.clone();var t=new o(e.__wrapped__,e.__chain__);return t.__actions__=i(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},37334:e=>{e.exports=function(e){return function(){return e}}},66245:(e,t,n)=>{var r=n(83915),o=n(83120),i=n(69302),a=n(83693),s=i((function(e,t){return a(e)?r(e,o(t,1,a,!0)):[]}));e.exports=s},75288:e=>{e.exports=function(e,t){return e===t||e!==e&&t!==t}},35970:(e,t,n)=>{var r=n(83120);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},49870:(e,t,n)=>{var r=n(66929)();e.exports=r},58156:(e,t,n)=>{var r=n(47422);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},83488:e=>{e.exports=function(e){return e}},72428:(e,t,n)=>{var r=n(27534),o=n(40346),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=u},56449:e=>{var t=Array.isArray;e.exports=t},64894:(e,t,n)=>{var r=n(1882),o=n(30294);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},83693:(e,t,n)=>{var r=n(64894),o=n(40346);e.exports=function(e){return o(e)&&r(e)}},3656:(e,t,n)=>{e=n.nmd(e);var r=n(9325),o=n(89935),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,s=a&&a.exports===i?r.Buffer:void 0,u=(s?s.isBuffer:void 0)||o;e.exports=u},2404:(e,t,n)=>{var r=n(60270);e.exports=function(e,t){return r(e,t)}},1882:(e,t,n)=>{var r=n(72552),o=n(23805);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},30294:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},87730:(e,t,n)=>{var r=n(29172),o=n(27301),i=n(86009),a=i&&i.isMap,s=a?o(a):r;e.exports=s},23805:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},40346:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},11331:(e,t,n)=>{var r=n(72552),o=n(28879),i=n(40346),a=Function.prototype,s=Object.prototype,u=a.toString,l=s.hasOwnProperty,c=u.call(Object);e.exports=function(e){if(!i(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=l.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==c}},38440:(e,t,n)=>{var r=n(16038),o=n(27301),i=n(86009),a=i&&i.isSet,s=a?o(a):r;e.exports=s},44394:(e,t,n)=>{var r=n(72552),o=n(40346);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},37167:(e,t,n)=>{var r=n(4901),o=n(27301),i=n(86009),a=i&&i.isTypedArray,s=a?o(a):r;e.exports=s},95950:(e,t,n)=>{var r=n(70695),o=n(88984),i=n(64894);e.exports=function(e){return i(e)?r(e):o(e)}},37241:(e,t,n)=>{var r=n(70695),o=n(72903),i=n(64894);e.exports=function(e){return i(e)?r(e,!0):o(e)}},68090:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},50104:(e,t,n)=>{var r=n(53661);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},55364:(e,t,n)=>{var r=n(85250),o=n(20999)((function(e,t,n){r(e,t,n)}));e.exports=o},63950:e=>{e.exports=function(){}},90179:(e,t,n)=>{var r=n(34932),o=n(9999),i=n(19931),a=n(31769),s=n(21791),u=n(53138),l=n(38816),c=n(83349),f=l((function(e,t){var n={};if(null==e)return n;var l=!1;t=r(t,(function(t){return t=a(t,e),l||(l=t.length>1),t})),s(e,c(e),n),l&&(n=o(n,7,u));for(var f=t.length;f--;)i(n,t[f]);return n}));e.exports=f},63345:e=>{e.exports=function(){return[]}},89935:e=>{e.exports=function(){return!1}},69884:(e,t,n)=>{var r=n(21791),o=n(37241);e.exports=function(e){return r(e,o(e))}},13222:(e,t,n)=>{var r=n(77556);e.exports=function(e){return null==e?"":r(e)}},53758:(e,t,n)=>{var r=n(30980),o=n(56017),i=n(94033),a=n(56449),s=n(40346),u=n(80257),l=Object.prototype.hasOwnProperty;function c(e){if(s(e)&&!a(e)&&!(e instanceof r)){if(e instanceof o)return e;if(l.call(e,"__wrapped__"))return u(e)}return new o(e)}c.prototype=i.prototype,c.prototype.constructor=c,e.exports=c},83503:(e,t,n)=>{!function(){var t=n(3939),r=n(92151).utf8,o=n(87206),i=n(92151).bin,a=function(e,n){e.constructor==String?e=n&&"binary"===n.encoding?i.stringToBytes(e):r.stringToBytes(e):o(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var s=t.bytesToWords(e),u=8*e.length,l=1732584193,c=-271733879,f=-1732584194,d=271733878,h=0;h>>24)|4278255360&(s[h]<<24|s[h]>>>8);s[u>>>5]|=128<>>9<<4)]=u;var p=a._ff,g=a._gg,v=a._hh,y=a._ii;for(h=0;h>>0,c=c+b>>>0,f=f+_>>>0,d=d+w>>>0}return t.endian([l,c,f,d])};a._ff=function(e,t,n,r,o,i,a){var s=e+(t&n|~t&r)+(o>>>0)+a;return(s<>>32-i)+t},a._gg=function(e,t,n,r,o,i,a){var s=e+(t&r|n&~r)+(o>>>0)+a;return(s<>>32-i)+t},a._hh=function(e,t,n,r,o,i,a){var s=e+(t^n^r)+(o>>>0)+a;return(s<>>32-i)+t},a._ii=function(e,t,n,r,o,i,a){var s=e+(n^(t|~r))+(o>>>0)+a;return(s<>>32-i)+t},a._blocksize=16,a._digestsize=16,e.exports=function(e,n){if(void 0===e||null===e)throw new Error("Illegal argument "+e);var r=t.wordsToBytes(a(e,n));return n&&n.asBytes?r:n&&n.asString?i.bytesToString(r):t.bytesToHex(r)}}()},45228:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var i,a,s=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),u=1;u{var r="function"===typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"===typeof o.get?o.get:null,a=r&&Map.prototype.forEach,s="function"===typeof Set&&Set.prototype,u=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,l=s&&u&&"function"===typeof u.get?u.get:null,c=s&&Set.prototype.forEach,f="function"===typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,d="function"===typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,h="function"===typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,p=Boolean.prototype.valueOf,g=Object.prototype.toString,v=Function.prototype.toString,y=String.prototype.match,m=String.prototype.slice,b=String.prototype.replace,_=String.prototype.toUpperCase,w=String.prototype.toLowerCase,x=RegExp.prototype.test,S=Array.prototype.concat,A=Array.prototype.join,E=Array.prototype.slice,C=Math.floor,R="function"===typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,T="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?Symbol.prototype.toString:null,k="function"===typeof Symbol&&"object"===typeof Symbol.iterator,M="function"===typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===k||"symbol")?Symbol.toStringTag:null,P=Object.prototype.propertyIsEnumerable,I=("function"===typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function N(e,t){if(e===1/0||e===-1/0||e!==e||e&&e>-1e3&&e<1e3||x.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"===typeof e){var r=e<0?-C(-e):C(e);if(r!==e){var o=String(r),i=m.call(t,o.length+1);return b.call(o,n,"$&_")+"."+b.call(b.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return b.call(t,n,"$&_")}var D=n(42634),L=D.custom,F=V(L)?L:null;function j(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function U(e){return b.call(String(e),/"/g,""")}function z(e){return"[object Array]"===W(e)&&(!M||!("object"===typeof e&&M in e))}function B(e){return"[object RegExp]"===W(e)&&(!M||!("object"===typeof e&&M in e))}function V(e){if(k)return e&&"object"===typeof e&&e instanceof Symbol;if("symbol"===typeof e)return!0;if(!e||"object"!==typeof e||!T)return!1;try{return T.call(e),!0}catch(t){}return!1}e.exports=function e(t,r,o,s){var u=r||{};if(H(u,"quoteStyle")&&"single"!==u.quoteStyle&&"double"!==u.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(H(u,"maxStringLength")&&("number"===typeof u.maxStringLength?u.maxStringLength<0&&u.maxStringLength!==1/0:null!==u.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var g=!H(u,"customInspect")||u.customInspect;if("boolean"!==typeof g&&"symbol"!==g)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(H(u,"indent")&&null!==u.indent&&"\t"!==u.indent&&!(parseInt(u.indent,10)===u.indent&&u.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(H(u,"numericSeparator")&&"boolean"!==typeof u.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var _=u.numericSeparator;if("undefined"===typeof t)return"undefined";if(null===t)return"null";if("boolean"===typeof t)return t?"true":"false";if("string"===typeof t)return G(t,u);if("number"===typeof t){if(0===t)return 1/0/t>0?"0":"-0";var x=String(t);return _?N(t,x):x}if("bigint"===typeof t){var C=String(t)+"n";return _?N(t,C):C}var O="undefined"===typeof u.depth?5:u.depth;if("undefined"===typeof o&&(o=0),o>=O&&O>0&&"object"===typeof t)return z(t)?"[Array]":"[Object]";var L=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"===typeof e.indent&&e.indent>0))return null;n=A.call(Array(e.indent+1)," ")}return{base:n,prev:A.call(Array(t+1),n)}}(u,o);if("undefined"===typeof s)s=[];else if(q(s,t)>=0)return"[Circular]";function $(t,n,r){if(n&&(s=E.call(s)).push(n),r){var i={depth:u.depth};return H(u,"quoteStyle")&&(i.quoteStyle=u.quoteStyle),e(t,i,o+1,s)}return e(t,u,o+1,s)}if("function"===typeof t&&!B(t)){var Y=function(e){if(e.name)return e.name;var t=y.call(v.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),ee=J(t,$);return"[Function"+(Y?": "+Y:" (anonymous)")+"]"+(ee.length>0?" { "+A.call(ee,", ")+" }":"")}if(V(t)){var te=k?b.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):T.call(t);return"object"!==typeof t||k?te:X(te)}if(function(e){if(!e||"object"!==typeof e)return!1;if("undefined"!==typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"===typeof e.nodeName&&"function"===typeof e.getAttribute}(t)){for(var ne="<"+w.call(String(t.nodeName)),re=t.attributes||[],oe=0;oe"}if(z(t)){if(0===t.length)return"[]";var ie=J(t,$);return L&&!function(e){for(var t=0;t=0)return!1;return!0}(ie)?"["+Q(ie,L)+"]":"[ "+A.call(ie,", ")+" ]"}if(function(e){return"[object Error]"===W(e)&&(!M||!("object"===typeof e&&M in e))}(t)){var ae=J(t,$);return"cause"in Error.prototype||!("cause"in t)||P.call(t,"cause")?0===ae.length?"["+String(t)+"]":"{ ["+String(t)+"] "+A.call(ae,", ")+" }":"{ ["+String(t)+"] "+A.call(S.call("[cause]: "+$(t.cause),ae),", ")+" }"}if("object"===typeof t&&g){if(F&&"function"===typeof t[F]&&D)return D(t,{depth:O-o});if("symbol"!==g&&"function"===typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!==typeof e)return!1;try{i.call(e);try{l.call(e)}catch(ne){return!0}return e instanceof Map}catch(t){}return!1}(t)){var se=[];return a&&a.call(t,(function(e,n){se.push($(n,t,!0)+" => "+$(e,t))})),Z("Map",i.call(t),se,L)}if(function(e){if(!l||!e||"object"!==typeof e)return!1;try{l.call(e);try{i.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var ue=[];return c&&c.call(t,(function(e){ue.push($(e,t))})),Z("Set",l.call(t),ue,L)}if(function(e){if(!f||!e||"object"!==typeof e)return!1;try{f.call(e,f);try{d.call(e,d)}catch(ne){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return K("WeakMap");if(function(e){if(!d||!e||"object"!==typeof e)return!1;try{d.call(e,d);try{f.call(e,f)}catch(ne){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return K("WeakSet");if(function(e){if(!h||!e||"object"!==typeof e)return!1;try{return h.call(e),!0}catch(t){}return!1}(t))return K("WeakRef");if(function(e){return"[object Number]"===W(e)&&(!M||!("object"===typeof e&&M in e))}(t))return X($(Number(t)));if(function(e){if(!e||"object"!==typeof e||!R)return!1;try{return R.call(e),!0}catch(t){}return!1}(t))return X($(R.call(t)));if(function(e){return"[object Boolean]"===W(e)&&(!M||!("object"===typeof e&&M in e))}(t))return X(p.call(t));if(function(e){return"[object String]"===W(e)&&(!M||!("object"===typeof e&&M in e))}(t))return X($(String(t)));if("undefined"!==typeof window&&t===window)return"{ [object Window] }";if(t===n.g)return"{ [object globalThis] }";if(!function(e){return"[object Date]"===W(e)&&(!M||!("object"===typeof e&&M in e))}(t)&&!B(t)){var le=J(t,$),ce=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,fe=t instanceof Object?"":"null prototype",de=!ce&&M&&Object(t)===t&&M in t?m.call(W(t),8,-1):fe?"Object":"",he=(ce||"function"!==typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(de||fe?"["+A.call(S.call([],de||[],fe||[]),": ")+"] ":"");return 0===le.length?he+"{}":L?he+"{"+Q(le,L)+"}":he+"{ "+A.call(le,", ")+" }"}return String(t)};var $=Object.prototype.hasOwnProperty||function(e){return e in this};function H(e,t){return $.call(e,t)}function W(e){return g.call(e)}function q(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return G(m.call(e,0,t.maxStringLength),t)+r}return j(b.call(b.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Y),"single",t)}function Y(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+_.call(t.toString(16))}function X(e){return"Object("+e+")"}function K(e){return e+" { ? }"}function Z(e,t,n,r){return e+" ("+t+") {"+(r?Q(n,r):A.call(n,", "))+"}"}function Q(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+A.call(e,","+n)+"\n"+t.prev}function J(e,t){var n=z(e),r=[];if(n){r.length=e.length;for(var o=0;o{"use strict";var t=function(e){return e!==e};e.exports=function(e,n){return 0===e&&0===n?1/e===1/n:e===n||!(!t(e)||!t(n))}},37653:(e,t,n)=>{"use strict";var r=n(38452),o=n(10487),i=n(89211),a=n(9394),s=n(36576),u=o(a(),Object);r(u,{getPolyfill:a,implementation:i,shim:s}),e.exports=u},9394:(e,t,n)=>{"use strict";var r=n(89211);e.exports=function(){return"function"===typeof Object.is?Object.is:r}},36576:(e,t,n)=>{"use strict";var r=n(9394),o=n(38452);e.exports=function(){var e=r();return o(Object,{is:e},{is:function(){return Object.is!==e}}),e}},28875:(e,t,n)=>{"use strict";var r;if(!Object.keys){var o=Object.prototype.hasOwnProperty,i=Object.prototype.toString,a=n(1093),s=Object.prototype.propertyIsEnumerable,u=!s.call({toString:null},"toString"),l=s.call((function(){}),"prototype"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],f=function(e){var t=e.constructor;return t&&t.prototype===e},d={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"===typeof window)return!1;for(var e in window)try{if(!d["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"===typeof window[e])try{f(window[e])}catch(t){return!0}}catch(t){return!0}return!1}();r=function(e){var t=null!==e&&"object"===typeof e,n="[object Function]"===i.call(e),r=a(e),s=t&&"[object String]"===i.call(e),d=[];if(!t&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var p=l&&n;if(s&&e.length>0&&!o.call(e,0))for(var g=0;g0)for(var v=0;v{"use strict";var r=Array.prototype.slice,o=n(1093),i=Object.keys,a=i?function(e){return i(e)}:n(28875),s=Object.keys;a.shim=function(){if(Object.keys){var e=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);e||(Object.keys=function(e){return o(e)?s(r.call(e)):s(e)})}else Object.keys=a;return Object.keys||a},e.exports=a},1093:e=>{"use strict";var t=Object.prototype.toString;e.exports=function(e){var n=t.call(e),r="[object Arguments]"===n;return r||(r="[object Array]"!==n&&null!==e&&"object"===typeof e&&"number"===typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),r}},13759:(e,t,n)=>{"use strict";n.r(t),n.d(t,{adjustHue:()=>Ke,animation:()=>wt,backgroundImages:()=>xt,backgrounds:()=>St,between:()=>W,border:()=>Et,borderColor:()=>Ct,borderRadius:()=>Rt,borderStyle:()=>Ot,borderWidth:()=>Tt,buttons:()=>Nt,clearFix:()=>q,complement:()=>Ze,cover:()=>G,cssVar:()=>_,darken:()=>Je,desaturate:()=>et,directionalProperty:()=>A,easeIn:()=>z,easeInOut:()=>V,easeOut:()=>H,ellipsis:()=>Y,em:()=>T,fluidRange:()=>Z,fontFace:()=>ie,getContrast:()=>nt,getLuminance:()=>tt,getValueAndUnit:()=>M,grayscale:()=>rt,hiDPI:()=>ue,hideText:()=>ae,hideVisually:()=>se,hsl:()=>Ue,hslToColorString:()=>ot,hsla:()=>ze,important:()=>P,invert:()=>it,lighten:()=>at,linearGradient:()=>ce,margin:()=>Dt,math:()=>m,meetsContrastGuidelines:()=>st,mix:()=>ut,modularScale:()=>N,normalize:()=>fe,opacify:()=>lt,padding:()=>Lt,parseToHsl:()=>Ie,parseToRgb:()=>Pe,position:()=>jt,radialGradient:()=>de,readableColor:()=>dt,rem:()=>D,remToPx:()=>j,retinaImage:()=>he,rgb:()=>Be,rgbToColorString:()=>ht,rgba:()=>Ve,saturate:()=>pt,setHue:()=>gt,setLightness:()=>vt,setSaturation:()=>yt,shade:()=>mt,size:()=>Ut,stripUnit:()=>R,textInputs:()=>Vt,timingFunctions:()=>ge,tint:()=>bt,toColorString:()=>Ge,transitions:()=>$t,transparentize:()=>_t,triangle:()=>me,wordWrap:()=>be});var r=n(58168),o=n(9417),i=n(77387),a=n(53954),s=n(63662);var u=n(52176);function l(e){var t="function"===typeof Map?new Map:void 0;return l=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"===typeof e}}(e))return e;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if((0,u.A)())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var o=new(e.bind.apply(e,r));return n&&(0,s.A)(o,n.prototype),o}(e,arguments,(0,a.A)(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),(0,s.A)(n,e)},l(e)}function c(e,t){return t||(t=e.slice(0)),e.raw=t,e}function f(){var e;return(e=arguments.length-1)<0||arguments.length<=e?void 0:arguments[e]}var d={symbols:{"*":{infix:{symbol:"*",f:function(e,t){return e*t},notation:"infix",precedence:4,rightToLeft:0,argCount:2},symbol:"*",regSymbol:"\\*"},"/":{infix:{symbol:"/",f:function(e,t){return e/t},notation:"infix",precedence:4,rightToLeft:0,argCount:2},symbol:"/",regSymbol:"/"},"+":{infix:{symbol:"+",f:function(e,t){return e+t},notation:"infix",precedence:2,rightToLeft:0,argCount:2},prefix:{symbol:"+",f:f,notation:"prefix",precedence:3,rightToLeft:0,argCount:1},symbol:"+",regSymbol:"\\+"},"-":{infix:{symbol:"-",f:function(e,t){return e-t},notation:"infix",precedence:2,rightToLeft:0,argCount:2},prefix:{symbol:"-",f:function(e){return-e},notation:"prefix",precedence:3,rightToLeft:0,argCount:1},symbol:"-",regSymbol:"-"},",":{infix:{symbol:",",f:function(){return Array.of.apply(Array,arguments)},notation:"infix",precedence:1,rightToLeft:0,argCount:2},symbol:",",regSymbol:","},"(":{prefix:{symbol:"(",f:f,notation:"prefix",precedence:0,rightToLeft:0,argCount:1},symbol:"(",regSymbol:"\\("},")":{postfix:{symbol:")",f:void 0,notation:"postfix",precedence:0,rightToLeft:0,argCount:1},symbol:")",regSymbol:"\\)"},min:{func:{symbol:"min",f:function(){return Math.min.apply(Math,arguments)},notation:"func",precedence:0,rightToLeft:0,argCount:1},symbol:"min",regSymbol:"min\\b"},max:{func:{symbol:"max",f:function(){return Math.max.apply(Math,arguments)},notation:"func",precedence:0,rightToLeft:0,argCount:1},symbol:"max",regSymbol:"max\\b"}}};var h=function(e){function t(t){var n;return n=e.call(this,"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#"+t+" for more information.")||this,(0,o.A)(n)}return(0,i.A)(t,e),t}(l(Error)),p=/((?!\w)a|na|hc|mc|dg|me[r]?|xe|ni(?![a-zA-Z])|mm|cp|tp|xp|q(?!s)|hv|xamv|nimv|wv|sm|s(?!\D|$)|ged|darg?|nrut)/g;function g(e,t){var n,r=e.pop();return t.push(r.f.apply(r,(n=[]).concat.apply(n,t.splice(-r.argCount)))),r.precedence}function v(e,t){var n,o=function(e){var t={};return t.symbols=e?(0,r.A)({},d.symbols,e.symbols):(0,r.A)({},d.symbols),t}(t),i=[o.symbols["("].prefix],a=[],s=new RegExp("\\d+(?:\\.\\d+)?|"+Object.keys(o.symbols).map((function(e){return o.symbols[e]})).sort((function(e,t){return t.symbol.length-e.symbol.length})).map((function(e){return e.regSymbol})).join("|")+"|(\\S)","g");s.lastIndex=0;var u=!1;do{var l=(n=s.exec(e))||[")",void 0],c=l[0],f=l[1],p=o.symbols[c],v=p&&!p.prefix&&!p.func,y=!p||!p.postfix&&!p.infix;if(f||(u?y:v))throw new h(37,n?n.index:e.length,e);if(u){var m=p.postfix||p.infix;do{var b=i[i.length-1];if((m.precedence-b.precedence||b.rightToLeft)>0)break}while(g(i,a));u="postfix"===m.notation,")"!==m.symbol&&(i.push(m),u&&g(i,a))}else if(p){if(i.push(p.prefix||p.func),p.func&&(!(n=s.exec(e))||"("!==n[0]))throw new h(38,n?n.index:e.length,e)}else a.push(+c),u=!0}while(n&&i.length);if(i.length)throw new h(39,n?n.index:e.length,e);if(n)throw new h(40,n?n.index:e.length,e);return a.pop()}function y(e){return e.split("").reverse().join("")}function m(e,t){var n=y(e),r=n.match(p);if(r&&!r.every((function(e){return e===r[0]})))throw new h(41);return""+v(y(n.replace(p,"")),t)+(r?y(r[0]):"")}var b=/--[\S]*/g;function _(e,t){if(!e||!e.match(b))throw new h(73);var n;if("undefined"!==typeof document&&null!==document.documentElement&&(n=getComputedStyle(document.documentElement).getPropertyValue(e)),n)return n.trim();if(t)return t;throw new h(74)}function w(e){return e.charAt(0).toUpperCase()+e.slice(1)}var x=["Top","Right","Bottom","Left"];function S(e,t){if(!e)return t.toLowerCase();var n=e.split("-");if(n.length>1)return n.splice(1,0,t),n.reduce((function(e,t){return""+e+w(t)}));var r=e.replace(/([a-z])([A-Z])/g,"$1"+t+"$2");return e===r?""+e+t:r}function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=0)?n[r]=e[r]+" !important":n[r]=e[r]})),n}var I={minorSecond:1.067,majorSecond:1.125,minorThird:1.2,majorThird:1.25,perfectFourth:1.333,augFourth:1.414,perfectFifth:1.5,minorSixth:1.6,goldenSection:1.618,majorSixth:1.667,minorSeventh:1.778,majorSeventh:1.875,octave:2,majorTenth:2.5,majorEleventh:2.667,majorTwelfth:3,doubleOctave:4};function N(e,t,n){if(void 0===t&&(t="1em"),void 0===n&&(n=1.333),"number"!==typeof e)throw new h(42);if("string"===typeof n&&!I[n])throw new h(43);var r="string"===typeof t?M(t):[t,""],o=r[0],i=r[1],a="string"===typeof n?I[n]:n;if("string"===typeof o)throw new h(44,t);return""+o*Math.pow(a,e)+(i||"")}var D=O("rem"),L=16;function F(e){var t=M(e);if("px"===t[1])return parseFloat(e);if("%"===t[1])return parseFloat(e)/100*L;throw new h(78,t[1])}function j(e,t){var n=M(e);if("rem"!==n[1]&&""!==n[1])throw new h(77,n[1]);var r=t?F(t):function(){if("undefined"!==typeof document&&null!==document.documentElement){var e=getComputedStyle(document.documentElement).fontSize;return e?F(e):L}return L}();return n[0]*r+"px"}var U={back:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",circ:"cubic-bezier(0.600, 0.040, 0.980, 0.335)",cubic:"cubic-bezier(0.550, 0.055, 0.675, 0.190)",expo:"cubic-bezier(0.950, 0.050, 0.795, 0.035)",quad:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",quart:"cubic-bezier(0.895, 0.030, 0.685, 0.220)",quint:"cubic-bezier(0.755, 0.050, 0.855, 0.060)",sine:"cubic-bezier(0.470, 0.000, 0.745, 0.715)"};function z(e){return U[e.toLowerCase().trim()]}var B={back:"cubic-bezier(0.680, -0.550, 0.265, 1.550)",circ:"cubic-bezier(0.785, 0.135, 0.150, 0.860)",cubic:"cubic-bezier(0.645, 0.045, 0.355, 1.000)",expo:"cubic-bezier(1.000, 0.000, 0.000, 1.000)",quad:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",quart:"cubic-bezier(0.770, 0.000, 0.175, 1.000)",quint:"cubic-bezier(0.860, 0.000, 0.070, 1.000)",sine:"cubic-bezier(0.445, 0.050, 0.550, 0.950)"};function V(e){return B[e.toLowerCase().trim()]}var $={back:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",cubic:"cubic-bezier(0.215, 0.610, 0.355, 1.000)",circ:"cubic-bezier(0.075, 0.820, 0.165, 1.000)",expo:"cubic-bezier(0.190, 1.000, 0.220, 1.000)",quad:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",quart:"cubic-bezier(0.165, 0.840, 0.440, 1.000)",quint:"cubic-bezier(0.230, 1.000, 0.320, 1.000)",sine:"cubic-bezier(0.390, 0.575, 0.565, 1.000)"};function H(e){return $[e.toLowerCase().trim()]}function W(e,t,n,r){void 0===n&&(n="320px"),void 0===r&&(r="1200px");var o=M(e),i=o[0],a=o[1],s=M(t),u=s[0],l=s[1],c=M(n),f=c[0],d=c[1],p=M(r),g=p[0],v=p[1];if("number"!==typeof f||"number"!==typeof g||!d||!v||d!==v)throw new h(47);if("number"!==typeof i||"number"!==typeof u||a!==l)throw new h(48);if(a!==d||l!==v)throw new h(76);var y=(i-u)/(f-g);return"calc("+(u-y*g).toFixed(2)+(a||"")+" + "+(100*y).toFixed(2)+"vw)"}function q(e){var t;return void 0===e&&(e="&"),(t={})[e+"::after"]={clear:"both",content:'""',display:"table"},t}function G(e){return void 0===e&&(e=0),{position:"absolute",top:e,right:e,bottom:e,left:e}}function Y(e,t){void 0===t&&(t=1);var n={display:"inline-block",maxWidth:e||"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",wordWrap:"normal"};return t>1?(0,r.A)({},n,{WebkitBoxOrient:"vertical",WebkitLineClamp:t,display:"-webkit-box",whiteSpace:"normal"}):n}function X(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"===typeof e)return K(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return K(e,t)}(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function K(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?n-1:0),o=1;o1?(t=t.slice(0,-1),t+=", "+r[i]):1===a.length&&(t+=""+r[i])}else r[i]&&(t+=r[i]+" ");return t.trim()}function ce(e){var t=e.colorStops,n=e.fallback,r=e.toDirection,o=void 0===r?"":r;if(!t||t.length<2)throw new h(56);return{backgroundColor:n||t[0].replace(/,\s+/g,",").split(" ")[0].replace(/,(?=\S)/g,", "),backgroundImage:le(Q||(Q=c(["linear-gradient(","",")"])),o,t.join(", ").replace(/,(?=\S)/g,", "))}}function fe(){var e;return[(e={html:{lineHeight:"1.15",textSizeAdjust:"100%"},body:{margin:"0"},main:{display:"block"},h1:{fontSize:"2em",margin:"0.67em 0"},hr:{boxSizing:"content-box",height:"0",overflow:"visible"},pre:{fontFamily:"monospace, monospace",fontSize:"1em"},a:{backgroundColor:"transparent"},"abbr[title]":{borderBottom:"none",textDecoration:"underline"}},e["b,\n strong"]={fontWeight:"bolder"},e["code,\n kbd,\n samp"]={fontFamily:"monospace, monospace",fontSize:"1em"},e.small={fontSize:"80%"},e["sub,\n sup"]={fontSize:"75%",lineHeight:"0",position:"relative",verticalAlign:"baseline"},e.sub={bottom:"-0.25em"},e.sup={top:"-0.5em"},e.img={borderStyle:"none"},e["button,\n input,\n optgroup,\n select,\n textarea"]={fontFamily:"inherit",fontSize:"100%",lineHeight:"1.15",margin:"0"},e["button,\n input"]={overflow:"visible"},e["button,\n select"]={textTransform:"none"},e['button,\n html [type="button"],\n [type="reset"],\n [type="submit"]']={WebkitAppearance:"button"},e['button::-moz-focus-inner,\n [type="button"]::-moz-focus-inner,\n [type="reset"]::-moz-focus-inner,\n [type="submit"]::-moz-focus-inner']={borderStyle:"none",padding:"0"},e['button:-moz-focusring,\n [type="button"]:-moz-focusring,\n [type="reset"]:-moz-focusring,\n [type="submit"]:-moz-focusring']={outline:"1px dotted ButtonText"},e.fieldset={padding:"0.35em 0.625em 0.75em"},e.legend={boxSizing:"border-box",color:"inherit",display:"table",maxWidth:"100%",padding:"0",whiteSpace:"normal"},e.progress={verticalAlign:"baseline"},e.textarea={overflow:"auto"},e['[type="checkbox"],\n [type="radio"]']={boxSizing:"border-box",padding:"0"},e['[type="number"]::-webkit-inner-spin-button,\n [type="number"]::-webkit-outer-spin-button']={height:"auto"},e['[type="search"]']={WebkitAppearance:"textfield",outlineOffset:"-2px"},e['[type="search"]::-webkit-search-decoration']={WebkitAppearance:"none"},e["::-webkit-file-upload-button"]={WebkitAppearance:"button",font:"inherit"},e.details={display:"block"},e.summary={display:"list-item"},e.template={display:"none"},e["[hidden]"]={display:"none"},e),{"abbr[title]":{textDecoration:"underline dotted"}}]}function de(e){var t=e.colorStops,n=e.extent,r=void 0===n?"":n,o=e.fallback,i=e.position,a=void 0===i?"":i,s=e.shape,u=void 0===s?"":s;if(!t||t.length<2)throw new h(57);return{backgroundColor:o||t[0].split(" ")[0],backgroundImage:le(J||(J=c(["radial-gradient(","","","",")"])),a,u,r,t.join(", "))}}function he(e,t,n,o,i){var a;if(void 0===n&&(n="png"),void 0===i&&(i="_2x"),!e)throw new h(58);var s=n.replace(/^\./,""),u=o?o+"."+s:""+e+i+"."+s;return(a={backgroundImage:"url("+e+"."+s+")"})[ue()]=(0,r.A)({backgroundImage:"url("+u+")"},t?{backgroundSize:t}:{}),a}var pe={easeInBack:"cubic-bezier(0.600, -0.280, 0.735, 0.045)",easeInCirc:"cubic-bezier(0.600, 0.040, 0.980, 0.335)",easeInCubic:"cubic-bezier(0.550, 0.055, 0.675, 0.190)",easeInExpo:"cubic-bezier(0.950, 0.050, 0.795, 0.035)",easeInQuad:"cubic-bezier(0.550, 0.085, 0.680, 0.530)",easeInQuart:"cubic-bezier(0.895, 0.030, 0.685, 0.220)",easeInQuint:"cubic-bezier(0.755, 0.050, 0.855, 0.060)",easeInSine:"cubic-bezier(0.470, 0.000, 0.745, 0.715)",easeOutBack:"cubic-bezier(0.175, 0.885, 0.320, 1.275)",easeOutCubic:"cubic-bezier(0.215, 0.610, 0.355, 1.000)",easeOutCirc:"cubic-bezier(0.075, 0.820, 0.165, 1.000)",easeOutExpo:"cubic-bezier(0.190, 1.000, 0.220, 1.000)",easeOutQuad:"cubic-bezier(0.250, 0.460, 0.450, 0.940)",easeOutQuart:"cubic-bezier(0.165, 0.840, 0.440, 1.000)",easeOutQuint:"cubic-bezier(0.230, 1.000, 0.320, 1.000)",easeOutSine:"cubic-bezier(0.390, 0.575, 0.565, 1.000)",easeInOutBack:"cubic-bezier(0.680, -0.550, 0.265, 1.550)",easeInOutCirc:"cubic-bezier(0.785, 0.135, 0.150, 0.860)",easeInOutCubic:"cubic-bezier(0.645, 0.045, 0.355, 1.000)",easeInOutExpo:"cubic-bezier(1.000, 0.000, 0.000, 1.000)",easeInOutQuad:"cubic-bezier(0.455, 0.030, 0.515, 0.955)",easeInOutQuart:"cubic-bezier(0.770, 0.000, 0.175, 1.000)",easeInOutQuint:"cubic-bezier(0.860, 0.000, 0.070, 1.000)",easeInOutSine:"cubic-bezier(0.445, 0.050, 0.550, 0.950)"};function ge(e){return pe[e]}var ve=function(e,t,n){var r=""+n[0]+(n[1]||""),o=""+n[0]/2+(n[1]||""),i=""+t[0]+(t[1]||""),a=""+t[0]/2+(t[1]||"");switch(e){case"top":return"0 "+o+" "+i+" "+o;case"topLeft":return r+" "+i+" 0 0";case"left":return a+" "+r+" "+a+" 0";case"bottomLeft":return r+" 0 0 "+i;case"bottom":return i+" "+o+" 0 "+o;case"bottomRight":return"0 0 "+r+" "+i;case"right":return a+" 0 "+a+" "+r;default:return"0 "+r+" "+i+" 0"}},ye=function(e,t){switch(e){case"top":case"bottomRight":return{borderBottomColor:t};case"right":case"bottomLeft":return{borderLeftColor:t};case"bottom":case"topLeft":return{borderTopColor:t};case"left":case"topRight":return{borderRightColor:t};default:throw new h(59)}};function me(e){var t=e.pointingDirection,n=e.height,o=e.width,i=e.foregroundColor,a=e.backgroundColor,s=void 0===a?"transparent":a,u=M(o),l=M(n);if(isNaN(l[0])||isNaN(u[0]))throw new h(60);return(0,r.A)({width:"0",height:"0",borderColor:s},ye(t,i),{borderStyle:"solid",borderWidth:ve(t,l,u)})}function be(e){return void 0===e&&(e="break-word"),{overflowWrap:e,wordWrap:e,wordBreak:"break-word"===e?"break-all":e}}function _e(e){return Math.round(255*e)}function we(e,t,n){return _e(e)+","+_e(t)+","+_e(n)}function xe(e,t,n,r){if(void 0===r&&(r=we),0===t)return r(n,n,n);var o=(e%360+360)%360/60,i=(1-Math.abs(2*n-1))*t,a=i*(1-Math.abs(o%2-1)),s=0,u=0,l=0;o>=0&&o<1?(s=i,u=a):o>=1&&o<2?(s=a,u=i):o>=2&&o<3?(u=i,l=a):o>=3&&o<4?(u=a,l=i):o>=4&&o<5?(s=a,l=i):o>=5&&o<6&&(s=i,l=a);var c=n-i/2;return r(s+c,u+c,l+c)}var Se={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var Ae=/^#[a-fA-F0-9]{6}$/,Ee=/^#[a-fA-F0-9]{8}$/,Ce=/^#[a-fA-F0-9]{3}$/,Re=/^#[a-fA-F0-9]{4}$/,Oe=/^rgb\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*\)$/i,Te=/^rgb(?:a)?\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i,ke=/^hsl\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,Me=/^hsl(?:a)?\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i;function Pe(e){if("string"!==typeof e)throw new h(3);var t=function(e){if("string"!==typeof e)return e;var t=e.toLowerCase();return Se[t]?"#"+Se[t]:e}(e);if(t.match(Ae))return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16)};if(t.match(Ee)){var n=parseFloat((parseInt(""+t[7]+t[8],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[2],16),green:parseInt(""+t[3]+t[4],16),blue:parseInt(""+t[5]+t[6],16),alpha:n}}if(t.match(Ce))return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16)};if(t.match(Re)){var r=parseFloat((parseInt(""+t[4]+t[4],16)/255).toFixed(2));return{red:parseInt(""+t[1]+t[1],16),green:parseInt(""+t[2]+t[2],16),blue:parseInt(""+t[3]+t[3],16),alpha:r}}var o=Oe.exec(t);if(o)return{red:parseInt(""+o[1],10),green:parseInt(""+o[2],10),blue:parseInt(""+o[3],10)};var i=Te.exec(t.substring(0,50));if(i)return{red:parseInt(""+i[1],10),green:parseInt(""+i[2],10),blue:parseInt(""+i[3],10),alpha:parseFloat(""+i[4])>1?parseFloat(""+i[4])/100:parseFloat(""+i[4])};var a=ke.exec(t);if(a){var s="rgb("+xe(parseInt(""+a[1],10),parseInt(""+a[2],10)/100,parseInt(""+a[3],10)/100)+")",u=Oe.exec(s);if(!u)throw new h(4,t,s);return{red:parseInt(""+u[1],10),green:parseInt(""+u[2],10),blue:parseInt(""+u[3],10)}}var l=Me.exec(t.substring(0,50));if(l){var c="rgb("+xe(parseInt(""+l[1],10),parseInt(""+l[2],10)/100,parseInt(""+l[3],10)/100)+")",f=Oe.exec(c);if(!f)throw new h(4,t,c);return{red:parseInt(""+f[1],10),green:parseInt(""+f[2],10),blue:parseInt(""+f[3],10),alpha:parseFloat(""+l[4])>1?parseFloat(""+l[4])/100:parseFloat(""+l[4])}}throw new h(5)}function Ie(e){return function(e){var t,n=e.red/255,r=e.green/255,o=e.blue/255,i=Math.max(n,r,o),a=Math.min(n,r,o),s=(i+a)/2;if(i===a)return void 0!==e.alpha?{hue:0,saturation:0,lightness:s,alpha:e.alpha}:{hue:0,saturation:0,lightness:s};var u=i-a,l=s>.5?u/(2-i-a):u/(i+a);switch(i){case n:t=(r-o)/u+(r=1?je(e,t,n):"rgba("+xe(e,t,n)+","+r+")";if("object"===typeof e&&void 0===t&&void 0===n&&void 0===r)return e.alpha>=1?je(e.hue,e.saturation,e.lightness):"rgba("+xe(e.hue,e.saturation,e.lightness)+","+e.alpha+")";throw new h(2)}function Be(e,t,n){if("number"===typeof e&&"number"===typeof t&&"number"===typeof n)return Ne("#"+De(e)+De(t)+De(n));if("object"===typeof e&&void 0===t&&void 0===n)return Ne("#"+De(e.red)+De(e.green)+De(e.blue));throw new h(6)}function Ve(e,t,n,r){if("string"===typeof e&&"number"===typeof t){var o=Pe(e);return"rgba("+o.red+","+o.green+","+o.blue+","+t+")"}if("number"===typeof e&&"number"===typeof t&&"number"===typeof n&&"number"===typeof r)return r>=1?Be(e,t,n):"rgba("+e+","+t+","+n+","+r+")";if("object"===typeof e&&void 0===t&&void 0===n&&void 0===r)return e.alpha>=1?Be(e.red,e.green,e.blue):"rgba("+e.red+","+e.green+","+e.blue+","+e.alpha+")";throw new h(7)}var $e=function(e){return"number"===typeof e.red&&"number"===typeof e.green&&"number"===typeof e.blue&&("number"!==typeof e.alpha||"undefined"===typeof e.alpha)},He=function(e){return"number"===typeof e.red&&"number"===typeof e.green&&"number"===typeof e.blue&&"number"===typeof e.alpha},We=function(e){return"number"===typeof e.hue&&"number"===typeof e.saturation&&"number"===typeof e.lightness&&("number"!==typeof e.alpha||"undefined"===typeof e.alpha)},qe=function(e){return"number"===typeof e.hue&&"number"===typeof e.saturation&&"number"===typeof e.lightness&&"number"===typeof e.alpha};function Ge(e){if("object"!==typeof e)throw new h(8);if(He(e))return Ve(e);if($e(e))return Be(e);if(qe(e))return ze(e);if(We(e))return Ue(e);throw new h(8)}function Ye(e,t,n){return function(){var r=n.concat(Array.prototype.slice.call(arguments));return r.length>=t?e.apply(this,r):Ye(e,t,r)}}function Xe(e){return Ye(e,e.length,[])}var Ke=Xe((function(e,t){if("transparent"===t)return t;var n=Ie(t);return Ge((0,r.A)({},n,{hue:n.hue+parseFloat(e)}))}));function Ze(e){if("transparent"===e)return e;var t=Ie(e);return Ge((0,r.A)({},t,{hue:(t.hue+180)%360}))}function Qe(e,t,n){return Math.max(e,Math.min(t,n))}var Je=Xe((function(e,t){if("transparent"===t)return t;var n=Ie(t);return Ge((0,r.A)({},n,{lightness:Qe(0,1,n.lightness-parseFloat(e))}))}));var et=Xe((function(e,t){if("transparent"===t)return t;var n=Ie(t);return Ge((0,r.A)({},n,{saturation:Qe(0,1,n.saturation-parseFloat(e))}))}));function tt(e){if("transparent"===e)return 0;var t=Pe(e),n=Object.keys(t).map((function(e){var n=t[e]/255;return n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)})),r=n[0],o=n[1],i=n[2];return parseFloat((.2126*r+.7152*o+.0722*i).toFixed(3))}function nt(e,t){var n=tt(e),r=tt(t);return parseFloat((n>r?(n+.05)/(r+.05):(r+.05)/(n+.05)).toFixed(2))}function rt(e){return"transparent"===e?e:Ge((0,r.A)({},Ie(e),{saturation:0}))}function ot(e){if("object"===typeof e&&"number"===typeof e.hue&&"number"===typeof e.saturation&&"number"===typeof e.lightness)return e.alpha&&"number"===typeof e.alpha?ze({hue:e.hue,saturation:e.saturation,lightness:e.lightness,alpha:e.alpha}):Ue({hue:e.hue,saturation:e.saturation,lightness:e.lightness});throw new h(45)}function it(e){if("transparent"===e)return e;var t=Pe(e);return Ge((0,r.A)({},t,{red:255-t.red,green:255-t.green,blue:255-t.blue}))}var at=Xe((function(e,t){if("transparent"===t)return t;var n=Ie(t);return Ge((0,r.A)({},n,{lightness:Qe(0,1,n.lightness+parseFloat(e))}))}));function st(e,t){var n=nt(e,t);return{AA:n>=4.5,AALarge:n>=3,AAA:n>=7,AAALarge:n>=4.5}}var ut=Xe((function(e,t,n){if("transparent"===t)return n;if("transparent"===n)return t;if(0===e)return n;var o=Pe(t),i=(0,r.A)({},o,{alpha:"number"===typeof o.alpha?o.alpha:1}),a=Pe(n),s=(0,r.A)({},a,{alpha:"number"===typeof a.alpha?a.alpha:1}),u=i.alpha-s.alpha,l=2*parseFloat(e)-1,c=((l*u===-1?l:l+u)/(1+l*u)+1)/2,f=1-c;return Ve({red:Math.floor(i.red*c+s.red*f),green:Math.floor(i.green*c+s.green*f),blue:Math.floor(i.blue*c+s.blue*f),alpha:i.alpha*parseFloat(e)+s.alpha*(1-parseFloat(e))})}));var lt=Xe((function(e,t){if("transparent"===t)return t;var n=Pe(t),o="number"===typeof n.alpha?n.alpha:1;return Ve((0,r.A)({},n,{alpha:Qe(0,1,(100*o+100*parseFloat(e))/100)}))})),ct="#000",ft="#fff";function dt(e,t,n,r){void 0===t&&(t=ct),void 0===n&&(n=ft),void 0===r&&(r=!0);var o=tt(e)>.179,i=o?t:n;return!r||nt(e,i)>=4.5?i:o?ct:ft}function ht(e){if("object"===typeof e&&"number"===typeof e.red&&"number"===typeof e.green&&"number"===typeof e.blue)return"number"===typeof e.alpha?Ve({red:e.red,green:e.green,blue:e.blue,alpha:e.alpha}):Be({red:e.red,green:e.green,blue:e.blue});throw new h(46)}var pt=Xe((function(e,t){if("transparent"===t)return t;var n=Ie(t);return Ge((0,r.A)({},n,{saturation:Qe(0,1,n.saturation+parseFloat(e))}))}));var gt=Xe((function(e,t){return"transparent"===t?t:Ge((0,r.A)({},Ie(t),{hue:parseFloat(e)}))}));var vt=Xe((function(e,t){return"transparent"===t?t:Ge((0,r.A)({},Ie(t),{lightness:parseFloat(e)}))}));var yt=Xe((function(e,t){return"transparent"===t?t:Ge((0,r.A)({},Ie(t),{saturation:parseFloat(e)}))}));var mt=Xe((function(e,t){return"transparent"===t?t:ut(parseFloat(e),"rgb(0, 0, 0)",t)}));var bt=Xe((function(e,t){return"transparent"===t?t:ut(parseFloat(e),"rgb(255, 255, 255)",t)}));var _t=Xe((function(e,t){if("transparent"===t)return t;var n=Pe(t),o="number"===typeof n.alpha?n.alpha:1;return Ve((0,r.A)({},n,{alpha:Qe(0,1,+(100*o-100*parseFloat(e)).toFixed(2)/100)}))}));function wt(){for(var e=arguments.length,t=new Array(e),n=0;n8)throw new h(64);return{animation:t.map((function(e){if(r&&!Array.isArray(e)||!r&&Array.isArray(e))throw new h(65);if(Array.isArray(e)&&e.length>8)throw new h(66);return Array.isArray(e)?e.join(" "):e})).join(", ")}}function xt(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),r=1;r=0?((o={})["border"+w(e)+"Width"]=n[0],o["border"+w(e)+"Style"]=n[1],o["border"+w(e)+"Color"]=n[2],o):(n.unshift(e),{borderWidth:n[0],borderStyle:n[1],borderColor:n[2]})}function Ct(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),o=1;o=0&&e?(0,r.A)({},A.apply(void 0,[""].concat(n)),{position:e}):A.apply(void 0,["",e].concat(n))}function Ut(e,t){return void 0===t&&(t=e),{height:e,width:t}}var zt=[void 0,null,"active","focus","hover"];function Bt(e){return'input[type="color"]'+e+',\n input[type="date"]'+e+',\n input[type="datetime"]'+e+',\n input[type="datetime-local"]'+e+',\n input[type="email"]'+e+',\n input[type="month"]'+e+',\n input[type="number"]'+e+',\n input[type="password"]'+e+',\n input[type="search"]'+e+',\n input[type="tel"]'+e+',\n input[type="text"]'+e+',\n input[type="time"]'+e+',\n input[type="url"]'+e+',\n input[type="week"]'+e+",\n input:not([type])"+e+",\n textarea"+e}function Vt(){for(var e=arguments.length,t=new Array(e),n=0;n{"use strict";var r=n(6925);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},74765:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},55373:(e,t,n)=>{"use strict";var r=n(98636),o=n(62642),i=n(74765);e.exports={formats:i,parse:o,stringify:r}},62642:(e,t,n)=>{"use strict";var r=n(37720),o=Object.prototype.hasOwnProperty,i=Array.isArray,a={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!0,decoder:r.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},s=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},u=function(e,t){return e&&"string"===typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},l=function(e,t,n,r){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(i),l=s?i.slice(0,s.index):i,c=[];if(l){if(!n.plainObjects&&o.call(Object.prototype,l)&&!n.allowPrototypes)return;c.push(l)}for(var f=0;n.depth>0&&null!==(s=a.exec(i))&&f=0;--i){var a,s=e[i];if("[]"===s&&n.parseArrays)a=n.allowEmptyArrays&&""===o?[]:[].concat(o);else{a=n.plainObjects?Object.create(null):{};var l="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=n.decodeDotInKeys?l.replace(/%2E/g,"."):l,f=parseInt(c,10);n.parseArrays||""!==c?!isNaN(f)&&s!==c&&String(f)===c&&f>=0&&n.parseArrays&&f<=n.arrayLimit?(a=[])[f]=o:"__proto__"!==c&&(a[c]=o):a={0:o}}o=a}return o}(c,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return a;if("undefined"!==typeof e.allowEmptyArrays&&"boolean"!==typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if("undefined"!==typeof e.decodeDotInKeys&&"boolean"!==typeof e.decodeDotInKeys)throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.decoder&&"undefined"!==typeof e.decoder&&"function"!==typeof e.decoder)throw new TypeError("Decoder has to be a function.");if("undefined"!==typeof e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t="undefined"===typeof e.charset?a.charset:e.charset,n="undefined"===typeof e.duplicates?a.duplicates:e.duplicates;if("combine"!==n&&"first"!==n&&"last"!==n)throw new TypeError("The duplicates option must be either combine, first, or last");return{allowDots:"undefined"===typeof e.allowDots?!0===e.decodeDotInKeys||a.allowDots:!!e.allowDots,allowEmptyArrays:"boolean"===typeof e.allowEmptyArrays?!!e.allowEmptyArrays:a.allowEmptyArrays,allowPrototypes:"boolean"===typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"===typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"===typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"===typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"===typeof e.comma?e.comma:a.comma,decodeDotInKeys:"boolean"===typeof e.decodeDotInKeys?e.decodeDotInKeys:a.decodeDotInKeys,decoder:"function"===typeof e.decoder?e.decoder:a.decoder,delimiter:"string"===typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"===typeof e.depth||!1===e.depth?+e.depth:a.depth,duplicates:n,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"===typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"===typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"===typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"===typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(t);if(""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var c="string"===typeof e?function(e,t){var n,l={__proto__:null},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,f=t.parameterLimit===1/0?void 0:t.parameterLimit,d=c.split(t.delimiter,f),h=-1,p=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(v=i(v)?[v]:v);var _=o.call(l,g);_&&"combine"===t.duplicates?l[g]=r.combine(l[g],v):_&&"last"!==t.duplicates||(l[g]=v)}return l}(e,n):e,f=n.plainObjects?Object.create(null):{},d=Object.keys(c),h=0;h{"use strict";var r=n(920),o=n(37720),i=n(74765),a=Object.prototype.hasOwnProperty,s={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},u=Array.isArray,l=Array.prototype.push,c=function(e,t){l.apply(e,u(t)?t:[t])},f=Date.prototype.toISOString,d=i.default,h={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:o.encode,encodeValuesOnly:!1,format:d,formatter:i.formatters[d],indices:!1,serializeDate:function(e){return f.call(e)},skipNulls:!1,strictNullHandling:!1},p={},g=function e(t,n,i,a,s,l,f,d,g,v,y,m,b,_,w,x,S,A){for(var E,C=t,R=A,O=0,T=!1;void 0!==(R=R.get(p))&&!T;){var k=R.get(t);if(O+=1,"undefined"!==typeof k){if(k===O)throw new RangeError("Cyclic object value");T=!0}"undefined"===typeof R.get(p)&&(O=0)}if("function"===typeof v?C=v(n,C):C instanceof Date?C=b(C):"comma"===i&&u(C)&&(C=o.maybeMap(C,(function(e){return e instanceof Date?b(e):e}))),null===C){if(l)return g&&!x?g(n,h.encoder,S,"key",_):n;C=""}if("string"===typeof(E=C)||"number"===typeof E||"boolean"===typeof E||"symbol"===typeof E||"bigint"===typeof E||o.isBuffer(C))return g?[w(x?n:g(n,h.encoder,S,"key",_))+"="+w(g(C,h.encoder,S,"value",_))]:[w(n)+"="+w(String(C))];var M,P=[];if("undefined"===typeof C)return P;if("comma"===i&&u(C))x&&g&&(C=o.maybeMap(C,g)),M=[{value:C.length>0?C.join(",")||null:void 0}];else if(u(v))M=v;else{var I=Object.keys(C);M=y?I.sort(y):I}var N=d?n.replace(/\./g,"%2E"):n,D=a&&u(C)&&1===C.length?N+"[]":N;if(s&&u(C)&&0===C.length)return D+"[]";for(var L=0;L0?_+b:""}},37720:(e,t,n)=>{"use strict";var r=n(74765),o=Object.prototype.hasOwnProperty,i=Array.isArray,a=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),s=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(i(n)){for(var r=[],o=0;o=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122||i===r.RFC1738&&(40===c||41===c)?u+=s.charAt(l):c<128?u+=a[c]:c<2048?u+=a[192|c>>6]+a[128|63&c]:c<55296||c>=57344?u+=a[224|c>>12]+a[128|c>>6&63]+a[128|63&c]:(l+=1,c=65536+((1023&c)<<10|1023&s.charCodeAt(l)),u+=a[240|c>>18]+a[128|c>>12&63]+a[128|c>>6&63]+a[128|63&c])}return u},isBuffer:function(e){return!(!e||"object"!==typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(i(e)){for(var n=[],r=0;r{"use strict";const r=n(24280),o=n(30454),i=n(528),a=n(73055),s=Symbol("encodeFragmentIdentifier");function u(e){if("string"!==typeof e||1!==e.length)throw new TypeError("arrayFormatSeparator must be single character string")}function l(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function c(e,t){return t.decode?o(e):e}function f(e){return Array.isArray(e)?e.sort():"object"===typeof e?f(Object.keys(e)).sort(((e,t)=>Number(e)-Number(t))).map((t=>e[t])):e}function d(e){const t=e.indexOf("#");return-1!==t&&(e=e.slice(0,t)),e}function h(e){const t=(e=d(e)).indexOf("?");return-1===t?"":e.slice(t+1)}function p(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&"string"===typeof e&&""!==e.trim()?e=Number(e):!t.parseBooleans||null===e||"true"!==e.toLowerCase()&&"false"!==e.toLowerCase()||(e="true"===e.toLowerCase()),e}function g(e,t){u((t=Object.assign({decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case"index":return(e,n,r)=>{t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return(e,n,r)=>{t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case"colon-list-separator":return(e,n,r)=>{t=/(:list)$/.exec(e),e=e.replace(/:list$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case"comma":case"separator":return(t,n,r)=>{const o="string"===typeof n&&n.includes(e.arrayFormatSeparator),i="string"===typeof n&&!o&&c(n,e).includes(e.arrayFormatSeparator);n=i?c(n,e):n;const a=o||i?n.split(e.arrayFormatSeparator).map((t=>c(t,e))):null===n?n:c(n,e);r[t]=a};case"bracket-separator":return(t,n,r)=>{const o=/(\[\])$/.test(t);if(t=t.replace(/\[\]$/,""),!o)return void(r[t]=n?c(n,e):n);const i=null===n?[]:n.split(e.arrayFormatSeparator).map((t=>c(t,e)));void 0!==r[t]?r[t]=[].concat(r[t],i):r[t]=i};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if("string"!==typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,"")))return r;for(const o of e.split("&")){if(""===o)continue;let[e,a]=i(t.decode?o.replace(/\+/g," "):o,"=");a=void 0===a?null:["comma","separator","bracket-separator"].includes(t.arrayFormat)?a:c(a,t),n(c(e,t),a,r)}for(const o of Object.keys(r)){const e=r[o];if("object"===typeof e&&null!==e)for(const n of Object.keys(e))e[n]=p(e[n],t);else r[o]=p(e,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce(((e,t)=>{const n=r[t];return Boolean(n)&&"object"===typeof n&&!Array.isArray(n)?e[t]=f(n):e[t]=n,e}),Object.create(null))}t.extract=h,t.parse=g,t.stringify=(e,t)=>{if(!e)return"";u((t=Object.assign({encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:","},t)).arrayFormatSeparator);const n=n=>{return t.skipNull&&(null===(r=e[n])||void 0===r)||t.skipEmptyString&&""===e[n];var r},r=function(e){switch(e.arrayFormat){case"index":return t=>(n,r)=>{const o=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[l(t,e),"[",o,"]"].join("")]:[...n,[l(t,e),"[",l(o,e),"]=",l(r,e)].join("")]};case"bracket":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[l(t,e),"[]"].join("")]:[...n,[l(t,e),"[]=",l(r,e)].join("")];case"colon-list-separator":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,[l(t,e),":list="].join("")]:[...n,[l(t,e),":list=",l(r,e)].join("")];case"comma":case"separator":case"bracket-separator":{const t="bracket-separator"===e.arrayFormat?"[]=":"=";return n=>(r,o)=>void 0===o||e.skipNull&&null===o||e.skipEmptyString&&""===o?r:(o=null===o?"":o,0===r.length?[[l(n,e),t,l(o,e)].join("")]:[[r,l(o,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&""===r?n:null===r?[...n,l(t,e)]:[...n,[l(t,e),"=",l(r,e)].join("")]}}(t),o={};for(const a of Object.keys(e))n(a)||(o[a]=e[a]);const i=Object.keys(o);return!1!==t.sort&&i.sort(t.sort),i.map((n=>{const o=e[n];return void 0===o?"":null===o?l(n,t):Array.isArray(o)?0===o.length&&"bracket-separator"===t.arrayFormat?l(n,t)+"[]":o.reduce(r(n),[]).join("&"):l(n,t)+"="+l(o,t)})).filter((e=>e.length>0)).join("&")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=i(e,"#");return Object.assign({url:n.split("?")[0]||"",query:g(h(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0,[s]:!0},n);const r=d(e.url).split("?")[0]||"",o=t.extract(e.url),i=t.parse(o,{sort:!1}),a=Object.assign(i,e.query);let u=t.stringify(a,n);u&&(u=`?${u}`);let c=function(e){let t="";const n=e.indexOf("#");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(c=`#${n[s]?l(e.fragmentIdentifier,n):e.fragmentIdentifier}`),`${r}${u}${c}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0,[s]:!1},r);const{url:o,query:i,fragmentIdentifier:u}=t.parseUrl(e,r);return t.stringifyUrl({url:o,query:a(i,n),fragmentIdentifier:u},r)},t.exclude=(e,n,r)=>{const o=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,o,r)}},22799:(e,t)=>{"use strict";var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),u=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.server_context"),f=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),v=Symbol.for("react.offscreen");function y(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case i:case s:case a:case d:case h:return e;default:switch(e=e&&e.$$typeof){case c:case l:case f:case g:case p:case u:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.ContextConsumer=l,t.ContextProvider=u,t.Element=r,t.ForwardRef=f,t.Fragment=i,t.Lazy=g,t.Memo=p,t.Portal=o,t.Profiler=s,t.StrictMode=a,t.Suspense=d,t.SuspenseList=h,t.isAsyncMode=function(){return!1},t.isConcurrentMode=function(){return!1},t.isContextConsumer=function(e){return y(e)===l},t.isContextProvider=function(e){return y(e)===u},t.isElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return y(e)===f},t.isFragment=function(e){return y(e)===i},t.isLazy=function(e){return y(e)===g},t.isMemo=function(e){return y(e)===p},t.isPortal=function(e){return y(e)===o},t.isProfiler=function(e){return y(e)===s},t.isStrictMode=function(e){return y(e)===a},t.isSuspense=function(e){return y(e)===d},t.isSuspenseList=function(e){return y(e)===h},t.isValidElementType=function(e){return"string"===typeof e||"function"===typeof e||e===i||e===s||e===a||e===d||e===h||e===v||"object"===typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===p||e.$$typeof===u||e.$$typeof===l||e.$$typeof===f||e.$$typeof===n||void 0!==e.getModuleId)},t.typeOf=y},44363:(e,t,n)=>{"use strict";e.exports=n(22799)},30708:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(40961),o=n(96540),i=n(5556),a=n.n(i),s=!("undefined"===typeof window||!window.document||!window.document.createElement),u=function(){function e(e,t){for(var n=0;n{"use strict";var r,o;n.d(t,{N_:()=>y,ok:()=>_,rI:()=>p});var i=n(96540),a=n(40961),s=n(47767),u=n(45588);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}function f(e){return void 0===e&&(e=""),new URLSearchParams("string"===typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map((e=>[n,e])):[[n,r]])}),[]))}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const d=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"];try{window.__reactRouterVersion="6"}catch(w){}new Map;const h=(r||(r=n.t(i,2))).startTransition;(o||(o=n.t(a,2))).flushSync,(r||(r=n.t(i,2))).useId;function p(e){let{basename:t,children:n,future:r,history:o}=e,[a,u]=i.useState({action:o.action,location:o.location}),{v7_startTransition:l}=r||{},c=i.useCallback((e=>{l&&h?h((()=>u(e))):u(e)}),[u,l]);return i.useLayoutEffect((()=>o.listen(c)),[o,c]),i.createElement(s.Ix,{basename:t,children:n,location:a.location,navigationType:a.action,navigator:o,future:r})}const g="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,v=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,y=i.forwardRef((function(e,t){let n,{onClick:r,relative:o,reloadDocument:a,replace:f,state:h,target:p,to:y,preventScrollReset:m,unstable_viewTransition:b}=e,_=c(e,d),{basename:x}=i.useContext(s.jb),S=!1;if("string"===typeof y&&v.test(y)&&(n=y,g))try{let e=new URL(window.location.href),t=y.startsWith("//")?new URL(e.protocol+y):new URL(y),n=(0,u.pb)(t.pathname,x);t.origin===e.origin&&null!=n?y=n+t.search+t.hash:S=!0}catch(w){}let A=(0,s.$P)(y,{relative:o}),E=function(e,t){let{target:n,replace:r,state:o,preventScrollReset:a,relative:l,unstable_viewTransition:c}=void 0===t?{}:t,f=(0,s.Zp)(),d=(0,s.zy)(),h=(0,s.x$)(e,{relative:l});return i.useCallback((t=>{if(function(e,t){return 0===e.button&&(!t||"_self"===t)&&!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)}(t,n)){t.preventDefault();let n=void 0!==r?r:(0,u.AO)(d)===(0,u.AO)(h);f(e,{replace:n,state:o,preventScrollReset:a,relative:l,unstable_viewTransition:c})}}),[d,f,h,r,o,n,e,a,l,c])}(y,{replace:f,state:h,target:p,preventScrollReset:m,relative:o,unstable_viewTransition:b});return i.createElement("a",l({},_,{href:n||A,onClick:S||a?r:function(e){r&&r(e),e.defaultPrevented||E(e)},ref:t,target:p}))}));var m,b;function _(e){let t=i.useRef(f(e)),n=i.useRef(!1),r=(0,s.zy)(),o=i.useMemo((()=>function(e,t){let n=f(e);return t&&t.forEach(((e,r)=>{n.has(r)||t.getAll(r).forEach((e=>{n.append(r,e)}))})),n}(r.search,n.current?null:t.current)),[r.search]),a=(0,s.Zp)(),u=i.useCallback(((e,t)=>{const r=f("function"===typeof e?e(o):e);n.current=!0,a("?"+r,t)}),[a,o]);return[o,u]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(m||(m={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(b||(b={}))},47767:(e,t,n)=>{"use strict";var r;n.d(t,{$P:()=>h,BV:()=>L,C5:()=>I,Ix:()=>D,RQ:()=>v,Zp:()=>m,g:()=>b,jb:()=>l,qh:()=>N,x$:()=>_,zy:()=>g});var o=n(96540),i=n(45588);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t(0,i.B6)(e,t)),[t,e])}function y(e){o.useContext(l).static||o.useLayoutEffect(e)}function m(){let{isDataRoute:e}=o.useContext(f);return e?function(){let{router:e}=T(R.UseNavigateStable),t=M(O.UseNavigateStable),n=o.useRef(!1);return y((()=>{n.current=!0})),o.useCallback((function(r,o){void 0===o&&(o={}),n.current&&("number"===typeof r?e.navigate(r):e.navigate(r,a({fromRouteId:t},o)))}),[e,t])}():function(){p()||(0,i.Oi)(!1);let e=o.useContext(s),{basename:t,future:n,navigator:r}=o.useContext(l),{matches:a}=o.useContext(f),{pathname:u}=g(),c=JSON.stringify((0,i.yD)(a,n.v7_relativeSplatPath)),d=o.useRef(!1);return y((()=>{d.current=!0})),o.useCallback((function(n,o){if(void 0===o&&(o={}),!d.current)return;if("number"===typeof n)return void r.go(n);let a=(0,i.Gh)(n,JSON.parse(c),u,"path"===o.relative);null==e&&"/"!==t&&(a.pathname="/"===a.pathname?t:(0,i.HS)([t,a.pathname])),(o.replace?r.replace:r.push)(a,o.state,o)}),[t,r,c,u,e])}()}function b(){let{matches:e}=o.useContext(f),t=e[e.length-1];return t?t.params:{}}function _(e,t){let{relative:n}=void 0===t?{}:t,{future:r}=o.useContext(l),{matches:a}=o.useContext(f),{pathname:s}=g(),u=JSON.stringify((0,i.yD)(a,r.v7_relativeSplatPath));return o.useMemo((()=>(0,i.Gh)(e,JSON.parse(u),s,"path"===n)),[e,u,s,n])}function w(e,t,n,r){p()||(0,i.Oi)(!1);let{navigator:s}=o.useContext(l),{matches:u}=o.useContext(f),d=u[u.length-1],h=d?d.params:{},v=(d&&d.pathname,d?d.pathnameBase:"/");d&&d.route;let y,m=g();if(t){var b;let e="string"===typeof t?(0,i.Rr)(t):t;"/"===v||(null==(b=e.pathname)?void 0:b.startsWith(v))||(0,i.Oi)(!1),y=e}else y=m;let _=y.pathname||"/",w=_;if("/"!==v){let e=v.replace(/^\//,"").split("/");w="/"+_.replace(/^\//,"").split("/").slice(e.length).join("/")}let x=(0,i.ue)(e,{pathname:w});let S=C(x&&x.map((e=>Object.assign({},e,{params:Object.assign({},h,e.params),pathname:(0,i.HS)([v,s.encodeLocation?s.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?v:(0,i.HS)([v,s.encodeLocation?s.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),u,n,r);return t&&S?o.createElement(c.Provider,{value:{location:a({pathname:"/",search:"",hash:"",state:null,key:"default"},y),navigationType:i.rc.Pop}},S):S}function x(){let e=function(){var e;let t=o.useContext(d),n=k(O.UseRouteError),r=M(O.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[r]}(),t=(0,i.pX)(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:r};return o.createElement(o.Fragment,null,o.createElement("h2",null,"Unexpected Application Error!"),o.createElement("h3",{style:{fontStyle:"italic"}},t),n?o.createElement("pre",{style:a},n):null,null)}const S=o.createElement(x,null);class A extends o.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?o.createElement(f.Provider,{value:this.props.routeContext},o.createElement(d.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function E(e){let{routeContext:t,match:n,children:r}=e,i=o.useContext(s);return i&&i.static&&i.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=n.route.id),o.createElement(f.Provider,{value:t},r)}function C(e,t,n,r){var a;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===r&&(r=null),null==e){var s;if(null==(s=n)||!s.errors)return null;e=n.matches}let u=e,l=null==(a=n)?void 0:a.errors;if(null!=l){let e=u.findIndex((e=>e.route.id&&void 0!==(null==l?void 0:l[e.route.id])));e>=0||(0,i.Oi)(!1),u=u.slice(0,Math.min(u.length,e+1))}let c=!1,f=-1;if(n&&r&&r.v7_partialHydration)for(let o=0;o=0?u.slice(0,f+1):[u[0]];break}}}return u.reduceRight(((e,r,i)=>{let a,s=!1,d=null,h=null;var p;n&&(a=l&&r.route.id?l[r.route.id]:void 0,d=r.route.errorElement||S,c&&(f<0&&0===i?(p="route-fallback",!1||P[p]||(P[p]=!0),s=!0,h=null):f===i&&(s=!0,h=r.route.hydrateFallbackElement||null)));let g=t.concat(u.slice(0,i+1)),v=()=>{let t;return t=a?d:s?h:r.route.Component?o.createElement(r.route.Component,null):r.route.element?r.route.element:e,o.createElement(E,{match:r,routeContext:{outlet:e,matches:g,isDataRoute:null!=n},children:t})};return n&&(r.route.ErrorBoundary||r.route.errorElement||0===i)?o.createElement(A,{location:n.location,revalidation:n.revalidation,component:d,error:a,children:v(),routeContext:{outlet:null,matches:g,isDataRoute:!0}}):v()}),null)}var R=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(R||{}),O=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(O||{});function T(e){let t=o.useContext(s);return t||(0,i.Oi)(!1),t}function k(e){let t=o.useContext(u);return t||(0,i.Oi)(!1),t}function M(e){let t=function(e){let t=o.useContext(f);return t||(0,i.Oi)(!1),t}(),n=t.matches[t.matches.length-1];return n.route.id||(0,i.Oi)(!1),n.route.id}const P={};(r||(r=n.t(o,2))).startTransition;function I(e){let{to:t,replace:n,state:r,relative:a}=e;p()||(0,i.Oi)(!1);let{future:s,static:u}=o.useContext(l),{matches:c}=o.useContext(f),{pathname:d}=g(),h=m(),v=(0,i.Gh)(t,(0,i.yD)(c,s.v7_relativeSplatPath),d,"path"===a),y=JSON.stringify(v);return o.useEffect((()=>h(JSON.parse(y),{replace:n,state:r,relative:a})),[h,y,a,n,r]),null}function N(e){(0,i.Oi)(!1)}function D(e){let{basename:t="/",children:n=null,location:r,navigationType:s=i.rc.Pop,navigator:u,static:f=!1,future:d}=e;p()&&(0,i.Oi)(!1);let h=t.replace(/^\/*/,"/"),g=o.useMemo((()=>({basename:h,navigator:u,static:f,future:a({v7_relativeSplatPath:!1},d)})),[h,d,u,f]);"string"===typeof r&&(r=(0,i.Rr)(r));let{pathname:v="/",search:y="",hash:m="",state:b=null,key:_="default"}=r,w=o.useMemo((()=>{let e=(0,i.pb)(v,h);return null==e?null:{location:{pathname:e,search:y,hash:m,state:b,key:_},navigationType:s}}),[h,v,y,m,b,_,s]);return null==w?null:o.createElement(l.Provider,{value:g},o.createElement(c.Provider,{children:n,value:w}))}function L(e){let{children:t,location:n}=e;return w(F(t),n)}new Promise((()=>{}));o.Component;function F(e,t){void 0===t&&(t=[]);let n=[];return o.Children.forEach(e,((e,r)=>{if(!o.isValidElement(e))return;let a=[...t,r];if(e.type===o.Fragment)return void n.push.apply(n,F(e.props.children,a));e.type!==N&&(0,i.Oi)(!1),e.props.index&&e.props.children&&(0,i.Oi)(!1);let s={id:e.props.id||a.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(s.children=F(e.props.children,a)),n.push(s)})),n}},12689:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(58168),o=n(96540),i=n(17531),a=n(52836),s=n(89379),u=n(45458),l=n(80045),c=n(16093),f=["allowCreateWhileLoading","createOptionPosition","formatCreateLabel","isValidNewOption","getNewOptionData","onCreateOption","options","onChange"],d=function(){var e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0,n=String(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toLowerCase(),r=String(t.getOptionValue(e)).toLowerCase(),o=String(t.getOptionLabel(e)).toLowerCase();return r===n||o===n},h={formatCreateLabel:function(e){return'Create "'.concat(e,'"')},isValidNewOption:function(e,t,n,r){return!(!e||t.some((function(t){return d(e,t,r)}))||n.some((function(t){return d(e,t,r)})))},getNewOptionData:function(e,t){return{label:t,value:e,__isNew__:!0}}};n(40961),n(27003);var p=(0,o.forwardRef)((function(e,t){var n=function(e){var t=e.allowCreateWhileLoading,n=void 0!==t&&t,r=e.createOptionPosition,a=void 0===r?"last":r,d=e.formatCreateLabel,p=void 0===d?h.formatCreateLabel:d,g=e.isValidNewOption,v=void 0===g?h.isValidNewOption:g,y=e.getNewOptionData,m=void 0===y?h.getNewOptionData:y,b=e.onCreateOption,_=e.options,w=void 0===_?[]:_,x=e.onChange,S=(0,l.A)(e,f),A=S.getOptionValue,E=void 0===A?i.g:A,C=S.getOptionLabel,R=void 0===C?i.b:C,O=S.inputValue,T=S.isLoading,k=S.isMulti,M=S.value,P=S.name,I=(0,o.useMemo)((function(){return v(O,(0,c.H)(M),w,{getOptionValue:E,getOptionLabel:R})?m(O,p(O)):void 0}),[p,m,R,E,O,v,w,M]),N=(0,o.useMemo)((function(){return!n&&T||!I?w:"first"===a?[I].concat((0,u.A)(w)):[].concat((0,u.A)(w),[I])}),[n,a,T,I,w]),D=(0,o.useCallback)((function(e,t){if("select-option"!==t.action)return x(e,t);var n=Array.isArray(e)?e:[e];if(n[n.length-1]!==I)x(e,t);else if(b)b(O);else{var r=m(O,O),o={action:"create-option",name:P,option:r};x((0,c.D)(k,[].concat((0,u.A)((0,c.H)(M)),[r]),r),o)}}),[m,O,k,P,I,b,x,M]);return(0,s.A)((0,s.A)({},S),{},{options:N,onChange:D})}((0,a.u)(e));return o.createElement(i.S,(0,r.A)({ref:t},n))}))},17531:(e,t,n)=>{"use strict";n.d(t,{S:()=>ge,b:()=>K,g:()=>Z});var r=n(58168),o=n(89379),i=n(23029),a=n(92901),s=n(85501),u=n(49640),l=n(45458),c=n(96540),f=n(16093),d=n(24553),h=Number.isNaN||function(e){return"number"===typeof e&&e!==e};function p(e,t){if(e.length!==t.length)return!1;for(var n=0;n1?"s":""," ").concat(o.join(","),", selected.");case"select-option":return"option ".concat(r,i?" is disabled. Select another option.":", selected.");default:return""}},onFocus:function(e){var t=e.context,n=e.focused,r=e.options,o=e.label,i=void 0===o?"":o,a=e.selectValue,s=e.isDisabled,u=e.isSelected,l=e.isAppleDevice,c=function(e,t){return e&&e.length?"".concat(e.indexOf(t)+1," of ").concat(e.length):""};if("value"===t&&a)return"value ".concat(i," focused, ").concat(c(a,n),".");if("menu"===t&&l){var f=s?" disabled":"",d="".concat(u?" selected":"").concat(f);return"".concat(i).concat(d,", ").concat(c(r,n),".")}return""},onFilter:function(e){var t=e.inputValue,n=e.resultsMessage;return"".concat(n).concat(t?" for search term "+t:"",".")}},b=function(e){var t=e.ariaSelection,n=e.focusedOption,r=e.focusedValue,i=e.focusableOptions,a=e.isFocused,s=e.selectValue,u=e.selectProps,l=e.id,f=e.isAppleDevice,h=u.ariaLiveMessages,p=u.getOptionLabel,g=u.inputValue,v=u.isMulti,b=u.isOptionDisabled,_=u.isSearchable,w=u.menuIsOpen,x=u.options,S=u.screenReaderStatus,A=u.tabSelectsValue,E=u.isLoading,C=u["aria-label"],R=u["aria-live"],O=(0,c.useMemo)((function(){return(0,o.A)((0,o.A)({},m),h||{})}),[h]),T=(0,c.useMemo)((function(){var e,n="";if(t&&O.onChange){var r=t.option,i=t.options,a=t.removedValue,u=t.removedValues,l=t.value,c=a||r||(e=l,Array.isArray(e)?null:e),f=c?p(c):"",d=i||u||void 0,h=d?d.map(p):[],g=(0,o.A)({isDisabled:c&&b(c,s),label:f,labels:h},t);n=O.onChange(g)}return n}),[t,O,b,s,p]),k=(0,c.useMemo)((function(){var e="",t=n||r,o=!!(n&&s&&s.includes(n));if(t&&O.onFocus){var a={focused:t,label:p(t),isDisabled:b(t,s),isSelected:o,options:i,context:t===n?"menu":"value",selectValue:s,isAppleDevice:f};e=O.onFocus(a)}return e}),[n,r,p,b,O,i,s,f]),M=(0,c.useMemo)((function(){var e="";if(w&&x.length&&!E&&O.onFilter){var t=S({count:i.length});e=O.onFilter({inputValue:g,resultsMessage:t})}return e}),[i,g,w,O,x,S,E]),P="initial-input-focus"===(null===t||void 0===t?void 0:t.action),I=(0,c.useMemo)((function(){var e="";if(O.guidance){var t=r?"value":w?"menu":"input";e=O.guidance({"aria-label":C,context:t,isDisabled:n&&b(n,s),isMulti:v,isSearchable:_,tabSelectsValue:A,isInitialFocus:P})}return e}),[C,n,r,v,b,_,w,O,s,A,P]),N=(0,d.Y)(c.Fragment,null,(0,d.Y)("span",{id:"aria-selection"},T),(0,d.Y)("span",{id:"aria-focused"},k),(0,d.Y)("span",{id:"aria-results"},M),(0,d.Y)("span",{id:"aria-guidance"},I));return(0,d.Y)(c.Fragment,null,(0,d.Y)(y,{id:l},P&&N),(0,d.Y)(y,{"aria-live":R,"aria-atomic":"false","aria-relevant":"additions text",role:"log"},a&&!P&&N))},_=[{base:"A",letters:"A\u24b6\uff21\xc0\xc1\xc2\u1ea6\u1ea4\u1eaa\u1ea8\xc3\u0100\u0102\u1eb0\u1eae\u1eb4\u1eb2\u0226\u01e0\xc4\u01de\u1ea2\xc5\u01fa\u01cd\u0200\u0202\u1ea0\u1eac\u1eb6\u1e00\u0104\u023a\u2c6f"},{base:"AA",letters:"\ua732"},{base:"AE",letters:"\xc6\u01fc\u01e2"},{base:"AO",letters:"\ua734"},{base:"AU",letters:"\ua736"},{base:"AV",letters:"\ua738\ua73a"},{base:"AY",letters:"\ua73c"},{base:"B",letters:"B\u24b7\uff22\u1e02\u1e04\u1e06\u0243\u0182\u0181"},{base:"C",letters:"C\u24b8\uff23\u0106\u0108\u010a\u010c\xc7\u1e08\u0187\u023b\ua73e"},{base:"D",letters:"D\u24b9\uff24\u1e0a\u010e\u1e0c\u1e10\u1e12\u1e0e\u0110\u018b\u018a\u0189\ua779"},{base:"DZ",letters:"\u01f1\u01c4"},{base:"Dz",letters:"\u01f2\u01c5"},{base:"E",letters:"E\u24ba\uff25\xc8\xc9\xca\u1ec0\u1ebe\u1ec4\u1ec2\u1ebc\u0112\u1e14\u1e16\u0114\u0116\xcb\u1eba\u011a\u0204\u0206\u1eb8\u1ec6\u0228\u1e1c\u0118\u1e18\u1e1a\u0190\u018e"},{base:"F",letters:"F\u24bb\uff26\u1e1e\u0191\ua77b"},{base:"G",letters:"G\u24bc\uff27\u01f4\u011c\u1e20\u011e\u0120\u01e6\u0122\u01e4\u0193\ua7a0\ua77d\ua77e"},{base:"H",letters:"H\u24bd\uff28\u0124\u1e22\u1e26\u021e\u1e24\u1e28\u1e2a\u0126\u2c67\u2c75\ua78d"},{base:"I",letters:"I\u24be\uff29\xcc\xcd\xce\u0128\u012a\u012c\u0130\xcf\u1e2e\u1ec8\u01cf\u0208\u020a\u1eca\u012e\u1e2c\u0197"},{base:"J",letters:"J\u24bf\uff2a\u0134\u0248"},{base:"K",letters:"K\u24c0\uff2b\u1e30\u01e8\u1e32\u0136\u1e34\u0198\u2c69\ua740\ua742\ua744\ua7a2"},{base:"L",letters:"L\u24c1\uff2c\u013f\u0139\u013d\u1e36\u1e38\u013b\u1e3c\u1e3a\u0141\u023d\u2c62\u2c60\ua748\ua746\ua780"},{base:"LJ",letters:"\u01c7"},{base:"Lj",letters:"\u01c8"},{base:"M",letters:"M\u24c2\uff2d\u1e3e\u1e40\u1e42\u2c6e\u019c"},{base:"N",letters:"N\u24c3\uff2e\u01f8\u0143\xd1\u1e44\u0147\u1e46\u0145\u1e4a\u1e48\u0220\u019d\ua790\ua7a4"},{base:"NJ",letters:"\u01ca"},{base:"Nj",letters:"\u01cb"},{base:"O",letters:"O\u24c4\uff2f\xd2\xd3\xd4\u1ed2\u1ed0\u1ed6\u1ed4\xd5\u1e4c\u022c\u1e4e\u014c\u1e50\u1e52\u014e\u022e\u0230\xd6\u022a\u1ece\u0150\u01d1\u020c\u020e\u01a0\u1edc\u1eda\u1ee0\u1ede\u1ee2\u1ecc\u1ed8\u01ea\u01ec\xd8\u01fe\u0186\u019f\ua74a\ua74c"},{base:"OI",letters:"\u01a2"},{base:"OO",letters:"\ua74e"},{base:"OU",letters:"\u0222"},{base:"P",letters:"P\u24c5\uff30\u1e54\u1e56\u01a4\u2c63\ua750\ua752\ua754"},{base:"Q",letters:"Q\u24c6\uff31\ua756\ua758\u024a"},{base:"R",letters:"R\u24c7\uff32\u0154\u1e58\u0158\u0210\u0212\u1e5a\u1e5c\u0156\u1e5e\u024c\u2c64\ua75a\ua7a6\ua782"},{base:"S",letters:"S\u24c8\uff33\u1e9e\u015a\u1e64\u015c\u1e60\u0160\u1e66\u1e62\u1e68\u0218\u015e\u2c7e\ua7a8\ua784"},{base:"T",letters:"T\u24c9\uff34\u1e6a\u0164\u1e6c\u021a\u0162\u1e70\u1e6e\u0166\u01ac\u01ae\u023e\ua786"},{base:"TZ",letters:"\ua728"},{base:"U",letters:"U\u24ca\uff35\xd9\xda\xdb\u0168\u1e78\u016a\u1e7a\u016c\xdc\u01db\u01d7\u01d5\u01d9\u1ee6\u016e\u0170\u01d3\u0214\u0216\u01af\u1eea\u1ee8\u1eee\u1eec\u1ef0\u1ee4\u1e72\u0172\u1e76\u1e74\u0244"},{base:"V",letters:"V\u24cb\uff36\u1e7c\u1e7e\u01b2\ua75e\u0245"},{base:"VY",letters:"\ua760"},{base:"W",letters:"W\u24cc\uff37\u1e80\u1e82\u0174\u1e86\u1e84\u1e88\u2c72"},{base:"X",letters:"X\u24cd\uff38\u1e8a\u1e8c"},{base:"Y",letters:"Y\u24ce\uff39\u1ef2\xdd\u0176\u1ef8\u0232\u1e8e\u0178\u1ef6\u1ef4\u01b3\u024e\u1efe"},{base:"Z",letters:"Z\u24cf\uff3a\u0179\u1e90\u017b\u017d\u1e92\u1e94\u01b5\u0224\u2c7f\u2c6b\ua762"},{base:"a",letters:"a\u24d0\uff41\u1e9a\xe0\xe1\xe2\u1ea7\u1ea5\u1eab\u1ea9\xe3\u0101\u0103\u1eb1\u1eaf\u1eb5\u1eb3\u0227\u01e1\xe4\u01df\u1ea3\xe5\u01fb\u01ce\u0201\u0203\u1ea1\u1ead\u1eb7\u1e01\u0105\u2c65\u0250"},{base:"aa",letters:"\ua733"},{base:"ae",letters:"\xe6\u01fd\u01e3"},{base:"ao",letters:"\ua735"},{base:"au",letters:"\ua737"},{base:"av",letters:"\ua739\ua73b"},{base:"ay",letters:"\ua73d"},{base:"b",letters:"b\u24d1\uff42\u1e03\u1e05\u1e07\u0180\u0183\u0253"},{base:"c",letters:"c\u24d2\uff43\u0107\u0109\u010b\u010d\xe7\u1e09\u0188\u023c\ua73f\u2184"},{base:"d",letters:"d\u24d3\uff44\u1e0b\u010f\u1e0d\u1e11\u1e13\u1e0f\u0111\u018c\u0256\u0257\ua77a"},{base:"dz",letters:"\u01f3\u01c6"},{base:"e",letters:"e\u24d4\uff45\xe8\xe9\xea\u1ec1\u1ebf\u1ec5\u1ec3\u1ebd\u0113\u1e15\u1e17\u0115\u0117\xeb\u1ebb\u011b\u0205\u0207\u1eb9\u1ec7\u0229\u1e1d\u0119\u1e19\u1e1b\u0247\u025b\u01dd"},{base:"f",letters:"f\u24d5\uff46\u1e1f\u0192\ua77c"},{base:"g",letters:"g\u24d6\uff47\u01f5\u011d\u1e21\u011f\u0121\u01e7\u0123\u01e5\u0260\ua7a1\u1d79\ua77f"},{base:"h",letters:"h\u24d7\uff48\u0125\u1e23\u1e27\u021f\u1e25\u1e29\u1e2b\u1e96\u0127\u2c68\u2c76\u0265"},{base:"hv",letters:"\u0195"},{base:"i",letters:"i\u24d8\uff49\xec\xed\xee\u0129\u012b\u012d\xef\u1e2f\u1ec9\u01d0\u0209\u020b\u1ecb\u012f\u1e2d\u0268\u0131"},{base:"j",letters:"j\u24d9\uff4a\u0135\u01f0\u0249"},{base:"k",letters:"k\u24da\uff4b\u1e31\u01e9\u1e33\u0137\u1e35\u0199\u2c6a\ua741\ua743\ua745\ua7a3"},{base:"l",letters:"l\u24db\uff4c\u0140\u013a\u013e\u1e37\u1e39\u013c\u1e3d\u1e3b\u017f\u0142\u019a\u026b\u2c61\ua749\ua781\ua747"},{base:"lj",letters:"\u01c9"},{base:"m",letters:"m\u24dc\uff4d\u1e3f\u1e41\u1e43\u0271\u026f"},{base:"n",letters:"n\u24dd\uff4e\u01f9\u0144\xf1\u1e45\u0148\u1e47\u0146\u1e4b\u1e49\u019e\u0272\u0149\ua791\ua7a5"},{base:"nj",letters:"\u01cc"},{base:"o",letters:"o\u24de\uff4f\xf2\xf3\xf4\u1ed3\u1ed1\u1ed7\u1ed5\xf5\u1e4d\u022d\u1e4f\u014d\u1e51\u1e53\u014f\u022f\u0231\xf6\u022b\u1ecf\u0151\u01d2\u020d\u020f\u01a1\u1edd\u1edb\u1ee1\u1edf\u1ee3\u1ecd\u1ed9\u01eb\u01ed\xf8\u01ff\u0254\ua74b\ua74d\u0275"},{base:"oi",letters:"\u01a3"},{base:"ou",letters:"\u0223"},{base:"oo",letters:"\ua74f"},{base:"p",letters:"p\u24df\uff50\u1e55\u1e57\u01a5\u1d7d\ua751\ua753\ua755"},{base:"q",letters:"q\u24e0\uff51\u024b\ua757\ua759"},{base:"r",letters:"r\u24e1\uff52\u0155\u1e59\u0159\u0211\u0213\u1e5b\u1e5d\u0157\u1e5f\u024d\u027d\ua75b\ua7a7\ua783"},{base:"s",letters:"s\u24e2\uff53\xdf\u015b\u1e65\u015d\u1e61\u0161\u1e67\u1e63\u1e69\u0219\u015f\u023f\ua7a9\ua785\u1e9b"},{base:"t",letters:"t\u24e3\uff54\u1e6b\u1e97\u0165\u1e6d\u021b\u0163\u1e71\u1e6f\u0167\u01ad\u0288\u2c66\ua787"},{base:"tz",letters:"\ua729"},{base:"u",letters:"u\u24e4\uff55\xf9\xfa\xfb\u0169\u1e79\u016b\u1e7b\u016d\xfc\u01dc\u01d8\u01d6\u01da\u1ee7\u016f\u0171\u01d4\u0215\u0217\u01b0\u1eeb\u1ee9\u1eef\u1eed\u1ef1\u1ee5\u1e73\u0173\u1e77\u1e75\u0289"},{base:"v",letters:"v\u24e5\uff56\u1e7d\u1e7f\u028b\ua75f\u028c"},{base:"vy",letters:"\ua761"},{base:"w",letters:"w\u24e6\uff57\u1e81\u1e83\u0175\u1e87\u1e85\u1e98\u1e89\u2c73"},{base:"x",letters:"x\u24e7\uff58\u1e8b\u1e8d"},{base:"y",letters:"y\u24e8\uff59\u1ef3\xfd\u0177\u1ef9\u0233\u1e8f\xff\u1ef7\u1e99\u1ef5\u01b4\u024f\u1eff"},{base:"z",letters:"z\u24e9\uff5a\u017a\u1e91\u017c\u017e\u1e93\u1e95\u01b6\u0225\u0240\u2c6c\ua763"}],w=new RegExp("["+_.map((function(e){return e.letters})).join("")+"]","g"),x={},S=0;S<_.length;S++)for(var A=_[S],E=0;E0,g=f-d-c,v=!1;g>t&&a.current&&(r&&r(e),a.current=!1),p&&s.current&&(i&&i(e),s.current=!1),p&&t>g?(n&&!a.current&&n(e),h.scrollTop=f,v=!0,a.current=!0):!p&&-t>c&&(o&&!s.current&&o(e),h.scrollTop=0,v=!0,s.current=!0),v&&P(e)}}),[n,r,o,i]),h=(0,c.useCallback)((function(e){d(e,e.deltaY)}),[d]),p=(0,c.useCallback)((function(e){u.current=e.changedTouches[0].clientY}),[]),g=(0,c.useCallback)((function(e){var t=u.current-e.changedTouches[0].clientY;d(e,t)}),[d]),v=(0,c.useCallback)((function(e){if(e){var t=!!f.s&&{passive:!1};e.addEventListener("wheel",h,t),e.addEventListener("touchstart",p,t),e.addEventListener("touchmove",g,t)}}),[g,p,h]),y=(0,c.useCallback)((function(e){e&&(e.removeEventListener("wheel",h,!1),e.removeEventListener("touchstart",p,!1),e.removeEventListener("touchmove",g,!1))}),[g,p,h]);return(0,c.useEffect)((function(){if(t){var e=l.current;return v(e),function(){y(e)}}}),[t,v,y]),function(e){l.current=e}}({isEnabled:void 0===r||r,onBottomArrive:e.onBottomArrive,onBottomLeave:e.onBottomLeave,onTopArrive:e.onTopArrive,onTopLeave:e.onTopLeave}),i=function(e){var t=e.isEnabled,n=e.accountForScrollbars,r=void 0===n||n,o=(0,c.useRef)({}),i=(0,c.useRef)(null),a=(0,c.useCallback)((function(e){if(U){var t=document.body,n=t&&t.style;if(r&&I.forEach((function(e){var t=n&&n[e];o.current[e]=t})),r&&z<1){var i=parseInt(o.current.paddingRight,10)||0,a=document.body?document.body.clientWidth:0,s=window.innerWidth-a+i||0;Object.keys(N).forEach((function(e){var t=N[e];n&&(n[e]=t)})),n&&(n.paddingRight="".concat(s,"px"))}t&&j()&&(t.addEventListener("touchmove",D,B),e&&(e.addEventListener("touchstart",F,B),e.addEventListener("touchmove",L,B))),z+=1}}),[r]),s=(0,c.useCallback)((function(e){if(U){var t=document.body,n=t&&t.style;z=Math.max(z-1,0),r&&z<1&&I.forEach((function(e){var t=o.current[e];n&&(n[e]=t)})),t&&j()&&(t.removeEventListener("touchmove",D,B),e&&(e.removeEventListener("touchstart",F,B),e.removeEventListener("touchmove",L,B)))}}),[r]);return(0,c.useEffect)((function(){if(t){var e=i.current;return a(e),function(){s(e)}}}),[t,a,s]),function(e){i.current=e}}({isEnabled:n});return(0,d.Y)(c.Fragment,null,n&&(0,d.Y)("div",{onClick:V,css:$}),t((function(e){o(e),i(e)})))}var W={name:"1a0ro4n-requiredInput",styles:"label:requiredInput;opacity:0;pointer-events:none;position:absolute;bottom:0;left:0;right:0;width:100%"},q=function(e){var t=e.name,n=e.onFocus;return(0,d.Y)("input",{required:!0,name:t,tabIndex:-1,"aria-hidden":"true",onFocus:n,css:W,value:"",onChange:function(){}})};function G(e){var t;return"undefined"!==typeof window&&null!=window.navigator&&e.test((null===(t=window.navigator.userAgentData)||void 0===t?void 0:t.platform)||window.navigator.platform)}function Y(){return G(/^Mac/i)}function X(){return G(/^iPhone/i)||G(/^iPad/i)||Y()&&navigator.maxTouchPoints>1}var K=function(e){return e.label},Z=function(e){return e.value},Q={clearIndicator:f.a,container:f.b,control:f.d,dropdownIndicator:f.e,group:f.g,groupHeading:f.f,indicatorsContainer:f.i,indicatorSeparator:f.h,input:f.j,loadingIndicator:f.l,loadingMessage:f.k,menu:f.m,menuList:f.n,menuPortal:f.o,multiValue:f.p,multiValueLabel:f.q,multiValueRemove:f.t,noOptionsMessage:f.u,option:f.v,placeholder:f.w,singleValue:f.x,valueContainer:f.y};var J,ee={borderRadius:4,colors:{primary:"#2684FF",primary75:"#4C9AFF",primary50:"#B2D4FF",primary25:"#DEEBFF",danger:"#DE350B",dangerLight:"#FFBDAD",neutral0:"hsl(0, 0%, 100%)",neutral5:"hsl(0, 0%, 95%)",neutral10:"hsl(0, 0%, 90%)",neutral20:"hsl(0, 0%, 80%)",neutral30:"hsl(0, 0%, 70%)",neutral40:"hsl(0, 0%, 60%)",neutral50:"hsl(0, 0%, 50%)",neutral60:"hsl(0, 0%, 40%)",neutral70:"hsl(0, 0%, 30%)",neutral80:"hsl(0, 0%, 20%)",neutral90:"hsl(0, 0%, 10%)"},spacing:{baseUnit:4,controlHeight:38,menuGutter:8}},te={"aria-live":"polite",backspaceRemovesValue:!0,blurInputOnSelect:(0,f.z)(),captureMenuScroll:!(0,f.z)(),classNames:{},closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){if(e.data.__isNew__)return!0;var n=(0,o.A)({ignoreCase:!0,ignoreAccents:!0,stringify:T,trim:!0,matchFrom:"any"},J),r=n.ignoreCase,i=n.ignoreAccents,a=n.stringify,s=n.trim,u=n.matchFrom,l=s?O(t):t,c=s?O(a(e)):a(e);return r&&(l=l.toLowerCase(),c=c.toLowerCase()),i&&(l=R(l),c=C(c)),"start"===u?c.substr(0,l.length)===l:c.indexOf(l)>-1},formatGroupLabel:function(e){return e.label},getOptionLabel:K,getOptionValue:Z,isDisabled:!1,isLoading:!1,isMulti:!1,isRtl:!1,isSearchable:!0,isOptionDisabled:function(e){return!!e.isDisabled},loadingMessage:function(){return"Loading..."},maxMenuHeight:300,minMenuHeight:140,menuIsOpen:!1,menuPlacement:"bottom",menuPosition:"absolute",menuShouldBlockScroll:!1,menuShouldScrollIntoView:!(0,f.A)(),noOptionsMessage:function(){return"No options"},openMenuOnFocus:!1,openMenuOnClick:!0,options:[],pageSize:5,placeholder:"Select...",screenReaderStatus:function(e){var t=e.count;return"".concat(t," result").concat(1!==t?"s":""," available")},styles:{},tabIndex:0,tabSelectsValue:!0,unstyled:!1};function ne(e,t,n,r){return{type:"option",data:t,isDisabled:ce(e,t,n),isSelected:fe(e,t,n),label:ue(e,t),value:le(e,t),index:r}}function re(e,t){return e.options.map((function(n,r){if("options"in n){var o=n.options.map((function(n,r){return ne(e,n,t,r)})).filter((function(t){return ae(e,t)}));return o.length>0?{type:"group",data:n,options:o,index:r}:void 0}var i=ne(e,n,t,r);return ae(e,i)?i:void 0})).filter(f.K)}function oe(e){return e.reduce((function(e,t){return"group"===t.type?e.push.apply(e,(0,l.A)(t.options.map((function(e){return e.data})))):e.push(t.data),e}),[])}function ie(e,t){return e.reduce((function(e,n){return"group"===n.type?e.push.apply(e,(0,l.A)(n.options.map((function(e){return{data:e.data,id:"".concat(t,"-").concat(n.index,"-").concat(e.index)}})))):e.push({data:n.data,id:"".concat(t,"-").concat(n.index)}),e}),[])}function ae(e,t){var n=e.inputValue,r=void 0===n?"":n,o=t.data,i=t.isSelected,a=t.label,s=t.value;return(!he(e)||!i)&&de(e,{label:a,value:s,data:o},r)}var se=function(e,t){var n;return(null===(n=e.find((function(e){return e.data===t})))||void 0===n?void 0:n.id)||null},ue=function(e,t){return e.getOptionLabel(t)},le=function(e,t){return e.getOptionValue(t)};function ce(e,t,n){return"function"===typeof e.isOptionDisabled&&e.isOptionDisabled(t,n)}function fe(e,t,n){if(n.indexOf(t)>-1)return!0;if("function"===typeof e.isOptionSelected)return e.isOptionSelected(t,n);var r=le(e,t);return n.some((function(t){return le(e,t)===r}))}function de(e,t,n){return!e.filterOption||e.filterOption(t,n)}var he=function(e){var t=e.hideSelectedOptions,n=e.isMulti;return void 0===t?n:t},pe=1,ge=function(e){(0,s.A)(n,e);var t=(0,u.A)(n);function n(e){var r;if((0,i.A)(this,n),(r=t.call(this,e)).state={ariaSelection:null,focusedOption:null,focusedOptionId:null,focusableOptionsWithIds:[],focusedValue:null,inputIsHidden:!1,isFocused:!1,selectValue:[],clearFocusValueOnUpdate:!1,prevWasFocused:!1,inputIsHiddenAfterUpdate:void 0,prevProps:void 0,instancePrefix:""},r.blockOptionHover=!1,r.isComposing=!1,r.commonProps=void 0,r.initialTouchX=0,r.initialTouchY=0,r.openAfterFocus=!1,r.scrollToFocusedOptionOnUpdate=!1,r.userIsDragging=void 0,r.isAppleDevice=Y()||X(),r.controlRef=null,r.getControlRef=function(e){r.controlRef=e},r.focusedOptionRef=null,r.getFocusedOptionRef=function(e){r.focusedOptionRef=e},r.menuListRef=null,r.getMenuListRef=function(e){r.menuListRef=e},r.inputRef=null,r.getInputRef=function(e){r.inputRef=e},r.focus=r.focusInput,r.blur=r.blurInput,r.onChange=function(e,t){var n=r.props,o=n.onChange,i=n.name;t.name=i,r.ariaOnChange(e,t),o(e,t)},r.setValue=function(e,t,n){var o=r.props,i=o.closeMenuOnSelect,a=o.isMulti,s=o.inputValue;r.onInputChange("",{action:"set-value",prevInputValue:s}),i&&(r.setState({inputIsHiddenAfterUpdate:!a}),r.onMenuClose()),r.setState({clearFocusValueOnUpdate:!0}),r.onChange(e,{action:t,option:n})},r.selectOption=function(e){var t=r.props,n=t.blurInputOnSelect,o=t.isMulti,i=t.name,a=r.state.selectValue,s=o&&r.isOptionSelected(e,a),u=r.isOptionDisabled(e,a);if(s){var c=r.getOptionValue(e);r.setValue((0,f.B)(a.filter((function(e){return r.getOptionValue(e)!==c}))),"deselect-option",e)}else{if(u)return void r.ariaOnChange((0,f.C)(e),{action:"select-option",option:e,name:i});o?r.setValue((0,f.B)([].concat((0,l.A)(a),[e])),"select-option",e):r.setValue((0,f.C)(e),"select-option")}n&&r.blurInput()},r.removeValue=function(e){var t=r.props.isMulti,n=r.state.selectValue,o=r.getOptionValue(e),i=n.filter((function(e){return r.getOptionValue(e)!==o})),a=(0,f.D)(t,i,i[0]||null);r.onChange(a,{action:"remove-value",removedValue:e}),r.focusInput()},r.clearValue=function(){var e=r.state.selectValue;r.onChange((0,f.D)(r.props.isMulti,[],null),{action:"clear",removedValues:e})},r.popValue=function(){var e=r.props.isMulti,t=r.state.selectValue,n=t[t.length-1],o=t.slice(0,t.length-1),i=(0,f.D)(e,o,o[0]||null);r.onChange(i,{action:"pop-value",removedValue:n})},r.getFocusedOptionId=function(e){return se(r.state.focusableOptionsWithIds,e)},r.getFocusableOptionsWithIds=function(){return ie(re(r.props,r.state.selectValue),r.getElementId("option"))},r.getValue=function(){return r.state.selectValue},r.cx=function(){for(var e=arguments.length,t=new Array(e),n=0;n5||i>5}},r.onTouchEnd=function(e){r.userIsDragging||(r.controlRef&&!r.controlRef.contains(e.target)&&r.menuListRef&&!r.menuListRef.contains(e.target)&&r.blurInput(),r.initialTouchX=0,r.initialTouchY=0)},r.onControlTouchEnd=function(e){r.userIsDragging||r.onControlMouseDown(e)},r.onClearIndicatorTouchEnd=function(e){r.userIsDragging||r.onClearIndicatorMouseDown(e)},r.onDropdownIndicatorTouchEnd=function(e){r.userIsDragging||r.onDropdownIndicatorMouseDown(e)},r.handleInputChange=function(e){var t=r.props.inputValue,n=e.currentTarget.value;r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange(n,{action:"input-change",prevInputValue:t}),r.props.menuIsOpen||r.onMenuOpen()},r.onInputFocus=function(e){r.props.onFocus&&r.props.onFocus(e),r.setState({inputIsHiddenAfterUpdate:!1,isFocused:!0}),(r.openAfterFocus||r.props.openMenuOnFocus)&&r.openMenu("first"),r.openAfterFocus=!1},r.onInputBlur=function(e){var t=r.props.inputValue;r.menuListRef&&r.menuListRef.contains(document.activeElement)?r.inputRef.focus():(r.props.onBlur&&r.props.onBlur(e),r.onInputChange("",{action:"input-blur",prevInputValue:t}),r.onMenuClose(),r.setState({focusedValue:null,isFocused:!1}))},r.onOptionHover=function(e){if(!r.blockOptionHover&&r.state.focusedOption!==e){var t=r.getFocusableOptions().indexOf(e);r.setState({focusedOption:e,focusedOptionId:t>-1?r.getFocusedOptionId(e):null})}},r.shouldHideSelectedOptions=function(){return he(r.props)},r.onValueInputFocus=function(e){e.preventDefault(),e.stopPropagation(),r.focus()},r.onKeyDown=function(e){var t=r.props,n=t.isMulti,o=t.backspaceRemovesValue,i=t.escapeClearsValue,a=t.inputValue,s=t.isClearable,u=t.isDisabled,l=t.menuIsOpen,c=t.onKeyDown,f=t.tabSelectsValue,d=t.openMenuOnFocus,h=r.state,p=h.focusedOption,g=h.focusedValue,v=h.selectValue;if(!u&&("function"!==typeof c||(c(e),!e.defaultPrevented))){switch(r.blockOptionHover=!0,e.key){case"ArrowLeft":if(!n||a)return;r.focusValue("previous");break;case"ArrowRight":if(!n||a)return;r.focusValue("next");break;case"Delete":case"Backspace":if(a)return;if(g)r.removeValue(g);else{if(!o)return;n?r.popValue():s&&r.clearValue()}break;case"Tab":if(r.isComposing)return;if(e.shiftKey||!l||!f||!p||d&&r.isOptionSelected(p,v))return;r.selectOption(p);break;case"Enter":if(229===e.keyCode)break;if(l){if(!p)return;if(r.isComposing)return;r.selectOption(p);break}return;case"Escape":l?(r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange("",{action:"menu-close",prevInputValue:a}),r.onMenuClose()):s&&i&&r.clearValue();break;case" ":if(a)return;if(!l){r.openMenu("first");break}if(!p)return;r.selectOption(p);break;case"ArrowUp":l?r.focusOption("up"):r.openMenu("last");break;case"ArrowDown":l?r.focusOption("down"):r.openMenu("first");break;case"PageUp":if(!l)return;r.focusOption("pageup");break;case"PageDown":if(!l)return;r.focusOption("pagedown");break;case"Home":if(!l)return;r.focusOption("first");break;case"End":if(!l)return;r.focusOption("last");break;default:return}e.preventDefault()}},r.state.instancePrefix="react-select-"+(r.props.instanceId||++pe),r.state.selectValue=(0,f.H)(e.value),e.menuIsOpen&&r.state.selectValue.length){var a=r.getFocusableOptionsWithIds(),s=r.buildFocusableOptions(),u=s.indexOf(r.state.selectValue[0]);r.state.focusableOptionsWithIds=a,r.state.focusedOption=s[u],r.state.focusedOptionId=se(a,s[u])}return r}return(0,a.A)(n,[{key:"componentDidMount",value:function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput(),this.props.menuIsOpen&&this.state.focusedOption&&this.menuListRef&&this.focusedOptionRef&&(0,f.I)(this.menuListRef,this.focusedOptionRef)}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.isDisabled,r=t.menuIsOpen,o=this.state.isFocused;(o&&!n&&e.isDisabled||o&&r&&!e.menuIsOpen)&&this.focusInput(),o&&n&&!e.isDisabled?this.setState({isFocused:!1},this.onMenuClose):o||n||!e.isDisabled||this.inputRef!==document.activeElement||this.setState({isFocused:!0}),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&((0,f.I)(this.menuListRef,this.focusedOptionRef),this.scrollToFocusedOptionOnUpdate=!1)}},{key:"componentWillUnmount",value:function(){this.stopListeningComposition(),this.stopListeningToTouch(),document.removeEventListener("scroll",this.onScroll,!0)}},{key:"onMenuOpen",value:function(){this.props.onMenuOpen()}},{key:"onMenuClose",value:function(){this.onInputChange("",{action:"menu-close",prevInputValue:this.props.inputValue}),this.props.onMenuClose()}},{key:"onInputChange",value:function(e,t){this.props.onInputChange(e,t)}},{key:"focusInput",value:function(){this.inputRef&&this.inputRef.focus()}},{key:"blurInput",value:function(){this.inputRef&&this.inputRef.blur()}},{key:"openMenu",value:function(e){var t=this,n=this.state,r=n.selectValue,o=n.isFocused,i=this.buildFocusableOptions(),a="first"===e?0:i.length-1;if(!this.props.isMulti){var s=i.indexOf(r[0]);s>-1&&(a=s)}this.scrollToFocusedOptionOnUpdate=!(o&&this.menuListRef),this.setState({inputIsHiddenAfterUpdate:!1,focusedValue:null,focusedOption:i[a],focusedOptionId:this.getFocusedOptionId(i[a])},(function(){return t.onMenuOpen()}))}},{key:"focusValue",value:function(e){var t=this.state,n=t.selectValue,r=t.focusedValue;if(this.props.isMulti){this.setState({focusedOption:null});var o=n.indexOf(r);r||(o=-1);var i=n.length-1,a=-1;if(n.length){switch(e){case"previous":a=0===o?0:-1===o?i:o-1;break;case"next":o>-1&&o0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state.focusedOption,r=this.getFocusableOptions();if(r.length){var o=0,i=r.indexOf(n);n||(i=-1),"up"===e?o=i>0?i-1:r.length-1:"down"===e?o=(i+1)%r.length:"pageup"===e?(o=i-t)<0&&(o=0):"pagedown"===e?(o=i+t)>r.length-1&&(o=r.length-1):"last"===e&&(o=r.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:r[o],focusedValue:null,focusedOptionId:this.getFocusedOptionId(r[o])})}}},{key:"getTheme",value:function(){return this.props.theme?"function"===typeof this.props.theme?this.props.theme(ee):(0,o.A)((0,o.A)({},ee),this.props.theme):ee}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.cx,n=this.getStyles,r=this.getClassNames,o=this.getValue,i=this.selectOption,a=this.setValue,s=this.props,u=s.isMulti,l=s.isRtl,c=s.options;return{clearValue:e,cx:t,getStyles:n,getClassNames:r,getValue:o,hasValue:this.hasValue(),isMulti:u,isRtl:l,options:c,selectOption:i,selectProps:s,setValue:a,theme:this.getTheme()}}},{key:"hasValue",value:function(){return this.state.selectValue.length>0}},{key:"hasOptions",value:function(){return!!this.getFocusableOptions().length}},{key:"isClearable",value:function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t}},{key:"isOptionDisabled",value:function(e,t){return ce(this.props,e,t)}},{key:"isOptionSelected",value:function(e,t){return fe(this.props,e,t)}},{key:"filterOption",value:function(e,t){return de(this.props,e,t)}},{key:"formatOptionLabel",value:function(e,t){if("function"===typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)}},{key:"formatGroupLabel",value:function(e){return this.props.formatGroupLabel(e)}},{key:"startListeningComposition",value:function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))}},{key:"stopListeningComposition",value:function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))}},{key:"startListeningToTouch",value:function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))}},{key:"stopListeningToTouch",value:function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))}},{key:"renderInput",value:function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,i=e.inputId,a=e.inputValue,s=e.tabIndex,u=e.form,l=e.menuIsOpen,d=e.required,h=this.getComponents().Input,p=this.state,g=p.inputIsHidden,v=p.ariaSelection,y=this.commonProps,m=i||this.getElementId("input"),b=(0,o.A)((0,o.A)((0,o.A)({"aria-autocomplete":"list","aria-expanded":l,"aria-haspopup":!0,"aria-errormessage":this.props["aria-errormessage"],"aria-invalid":this.props["aria-invalid"],"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-required":d,role:"combobox","aria-activedescendant":this.isAppleDevice?void 0:this.state.focusedOptionId||""},l&&{"aria-controls":this.getElementId("listbox")}),!n&&{"aria-readonly":!0}),this.hasValue()?"initial-input-focus"===(null===v||void 0===v?void 0:v.action)&&{"aria-describedby":this.getElementId("live-region")}:{"aria-describedby":this.getElementId("placeholder")});return n?c.createElement(h,(0,r.A)({},y,{autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",id:m,innerRef:this.getInputRef,isDisabled:t,isHidden:g,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,spellCheck:"false",tabIndex:s,form:u,type:"text",value:a},b)):c.createElement(M,(0,r.A)({id:m,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:f.J,onFocus:this.onInputFocus,disabled:t,tabIndex:s,inputMode:"none",form:u,value:""},b))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.getComponents(),n=t.MultiValue,o=t.MultiValueContainer,i=t.MultiValueLabel,a=t.MultiValueRemove,s=t.SingleValue,u=t.Placeholder,l=this.commonProps,f=this.props,d=f.controlShouldRenderValue,h=f.isDisabled,p=f.isMulti,g=f.inputValue,v=f.placeholder,y=this.state,m=y.selectValue,b=y.focusedValue,_=y.isFocused;if(!this.hasValue()||!d)return g?null:c.createElement(u,(0,r.A)({},l,{key:"placeholder",isDisabled:h,isFocused:_,innerProps:{id:this.getElementId("placeholder")}}),v);if(p)return m.map((function(t,s){var u=t===b,f="".concat(e.getOptionLabel(t),"-").concat(e.getOptionValue(t));return c.createElement(n,(0,r.A)({},l,{components:{Container:o,Label:i,Remove:a},isFocused:u,isDisabled:h,key:f,index:s,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault()}},data:t}),e.formatOptionLabel(t,"value"))}));if(g)return null;var w=m[0];return c.createElement(s,(0,r.A)({},l,{data:w,isDisabled:h}),this.formatOptionLabel(w,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.getComponents().ClearIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,i=n.isLoading,a=this.state.isFocused;if(!this.isClearable()||!e||o||!this.hasValue()||i)return null;var s={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return c.createElement(e,(0,r.A)({},t,{innerProps:s,isFocused:a}))}},{key:"renderLoadingIndicator",value:function(){var e=this.getComponents().LoadingIndicator,t=this.commonProps,n=this.props,o=n.isDisabled,i=n.isLoading,a=this.state.isFocused;if(!e||!i)return null;return c.createElement(e,(0,r.A)({},t,{innerProps:{"aria-hidden":"true"},isDisabled:o,isFocused:a}))}},{key:"renderIndicatorSeparator",value:function(){var e=this.getComponents(),t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var o=this.commonProps,i=this.props.isDisabled,a=this.state.isFocused;return c.createElement(n,(0,r.A)({},o,{isDisabled:i,isFocused:a}))}},{key:"renderDropdownIndicator",value:function(){var e=this.getComponents().DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,o=this.state.isFocused,i={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return c.createElement(e,(0,r.A)({},t,{innerProps:i,isDisabled:n,isFocused:o}))}},{key:"renderMenu",value:function(){var e=this,t=this.getComponents(),n=t.Group,o=t.GroupHeading,i=t.Menu,a=t.MenuList,s=t.MenuPortal,u=t.LoadingMessage,l=t.NoOptionsMessage,d=t.Option,h=this.commonProps,p=this.state.focusedOption,g=this.props,v=g.captureMenuScroll,y=g.inputValue,m=g.isLoading,b=g.loadingMessage,_=g.minMenuHeight,w=g.maxMenuHeight,x=g.menuIsOpen,S=g.menuPlacement,A=g.menuPosition,E=g.menuPortalTarget,C=g.menuShouldBlockScroll,R=g.menuShouldScrollIntoView,O=g.noOptionsMessage,T=g.onMenuScrollToTop,k=g.onMenuScrollToBottom;if(!x)return null;var M,P=function(t,n){var o=t.type,i=t.data,a=t.isDisabled,s=t.isSelected,u=t.label,l=t.value,f=p===i,g=a?void 0:function(){return e.onOptionHover(i)},v=a?void 0:function(){return e.selectOption(i)},y="".concat(e.getElementId("option"),"-").concat(n),m={id:y,onClick:v,onMouseMove:g,onMouseOver:g,tabIndex:-1,role:"option","aria-selected":e.isAppleDevice?void 0:s};return c.createElement(d,(0,r.A)({},h,{innerProps:m,data:i,isDisabled:a,isSelected:s,key:y,label:u,type:o,value:l,isFocused:f,innerRef:f?e.getFocusedOptionRef:void 0}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())M=this.getCategorizedOptions().map((function(t){if("group"===t.type){var i=t.data,a=t.options,s=t.index,u="".concat(e.getElementId("group"),"-").concat(s),l="".concat(u,"-heading");return c.createElement(n,(0,r.A)({},h,{key:u,data:i,options:a,Heading:o,headingProps:{id:l,data:t.data},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return P(e,"".concat(s,"-").concat(e.index))})))}if("option"===t.type)return P(t,"".concat(t.index))}));else if(m){var I=b({inputValue:y});if(null===I)return null;M=c.createElement(u,h,I)}else{var N=O({inputValue:y});if(null===N)return null;M=c.createElement(l,h,N)}var D={minMenuHeight:_,maxMenuHeight:w,menuPlacement:S,menuPosition:A,menuShouldScrollIntoView:R},L=c.createElement(f.M,(0,r.A)({},h,D),(function(t){var n=t.ref,o=t.placerProps,s=o.placement,u=o.maxHeight;return c.createElement(i,(0,r.A)({},h,D,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:m,placement:s}),c.createElement(H,{captureEnabled:v,onTopArrive:T,onBottomArrive:k,lockEnabled:C},(function(t){return c.createElement(a,(0,r.A)({},h,{innerRef:function(n){e.getMenuListRef(n),t(n)},innerProps:{role:"listbox","aria-multiselectable":h.isMulti,id:e.getElementId("listbox")},isLoading:m,maxHeight:u,focusedOption:p}),M)})))}));return E||"fixed"===A?c.createElement(s,(0,r.A)({},h,{appendTo:E,controlElement:this.controlRef,menuPlacement:S,menuPosition:A}),L):L}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,o=t.isMulti,i=t.name,a=t.required,s=this.state.selectValue;if(a&&!this.hasValue()&&!r)return c.createElement(q,{name:i,onFocus:this.onValueInputFocus});if(i&&!r){if(o){if(n){var u=s.map((function(t){return e.getOptionValue(t)})).join(n);return c.createElement("input",{name:i,type:"hidden",value:u})}var l=s.length>0?s.map((function(t,n){return c.createElement("input",{key:"i-".concat(n),name:i,type:"hidden",value:e.getOptionValue(t)})})):c.createElement("input",{name:i,type:"hidden",value:""});return c.createElement("div",null,l)}var f=s[0]?this.getOptionValue(s[0]):"";return c.createElement("input",{name:i,type:"hidden",value:f})}}},{key:"renderLiveRegion",value:function(){var e=this.commonProps,t=this.state,n=t.ariaSelection,o=t.focusedOption,i=t.focusedValue,a=t.isFocused,s=t.selectValue,u=this.getFocusableOptions();return c.createElement(b,(0,r.A)({},e,{id:this.getElementId("live-region"),ariaSelection:n,focusedOption:o,focusedValue:i,isFocused:a,selectValue:s,focusableOptions:u,isAppleDevice:this.isAppleDevice}))}},{key:"render",value:function(){var e=this.getComponents(),t=e.Control,n=e.IndicatorsContainer,o=e.SelectContainer,i=e.ValueContainer,a=this.props,s=a.className,u=a.id,l=a.isDisabled,f=a.menuIsOpen,d=this.state.isFocused,h=this.commonProps=this.getCommonProps();return c.createElement(o,(0,r.A)({},h,{className:s,innerProps:{id:u,onKeyDown:this.onKeyDown},isDisabled:l,isFocused:d}),this.renderLiveRegion(),c.createElement(t,(0,r.A)({},h,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:l,isFocused:d,menuIsOpen:f}),c.createElement(i,(0,r.A)({},h,{isDisabled:l}),this.renderPlaceholderOrValue(),this.renderInput()),c.createElement(n,(0,r.A)({},h,{isDisabled:l}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=t.prevProps,r=t.clearFocusValueOnUpdate,i=t.inputIsHiddenAfterUpdate,a=t.ariaSelection,s=t.isFocused,u=t.prevWasFocused,l=t.instancePrefix,c=e.options,d=e.value,h=e.menuIsOpen,p=e.inputValue,g=e.isMulti,v=(0,f.H)(d),y={};if(n&&(d!==n.value||c!==n.options||h!==n.menuIsOpen||p!==n.inputValue)){var m=h?function(e,t){return oe(re(e,t))}(e,v):[],b=h?ie(re(e,v),"".concat(l,"-option")):[],_=r?function(e,t){var n=e.focusedValue,r=e.selectValue.indexOf(n);if(r>-1){if(t.indexOf(n)>-1)return n;if(r-1?n:t[0]}(t,m);y={selectValue:v,focusedOption:w,focusedOptionId:se(b,w),focusableOptionsWithIds:b,focusedValue:_,clearFocusValueOnUpdate:!1}}var x=null!=i&&e!==n?{inputIsHidden:i,inputIsHiddenAfterUpdate:void 0}:{},S=a,A=s&&u;return s&&!A&&(S={value:(0,f.D)(g,v,v[0]||null),options:v,action:"initial-input-focus"},A=!u),"initial-input-focus"===(null===a||void 0===a?void 0:a.action)&&(S=null),(0,o.A)((0,o.A)((0,o.A)({},y),x),{},{prevProps:e,ariaSelection:S,prevWasFocused:A})}}]),n}(c.Component);ge.defaultProps=te},16093:(e,t,n)=>{"use strict";n.d(t,{A:()=>J,B:()=>se,C:()=>ae,D:()=>ie,E:()=>$,F:()=>st,G:()=>G,H:()=>H,I:()=>Z,J:()=>B,K:()=>oe,M:()=>ve,a:()=>Le,b:()=>Se,c:()=>at,d:()=>Be,e:()=>De,f:()=>We,g:()=>He,h:()=>Fe,i:()=>Ee,j:()=>Ye,k:()=>we,l:()=>Ue,m:()=>pe,n:()=>me,o:()=>xe,p:()=>Qe,q:()=>Je,r:()=>ue,s:()=>re,t:()=>et,u:()=>_e,v:()=>rt,w:()=>ot,x:()=>it,y:()=>Ae,z:()=>Q});var r=n(89379),o=n(58168),i=n(24553),a=n(80296),s=n(80045),u=n(82284);var l=n(64467),c=n(96540),f=n(40961);const d=Math.min,h=Math.max,p=Math.round,g=Math.floor,v=e=>({x:e,y:e});function y(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function m(e){return w(e)?(e.nodeName||"").toLowerCase():"#document"}function b(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function _(e){var t;return null==(t=(w(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function w(e){return e instanceof Node||e instanceof b(e).Node}function x(e){return e instanceof Element||e instanceof b(e).Element}function S(e){return e instanceof HTMLElement||e instanceof b(e).HTMLElement}function A(e){return"undefined"!==typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof b(e).ShadowRoot)}function E(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=O(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function C(){return!("undefined"===typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function R(e){return["html","body","#document"].includes(m(e))}function O(e){return b(e).getComputedStyle(e)}function T(e){if("html"===m(e))return e;const t=e.assignedSlot||e.parentNode||A(e)&&e.host||_(e);return A(t)?t.host:t}function k(e){const t=T(e);return R(t)?e.ownerDocument?e.ownerDocument.body:e.body:S(t)&&E(t)?t:k(t)}function M(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const o=k(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=b(o);return i?t.concat(a,a.visualViewport||[],E(o)?o:[],a.frameElement&&n?M(a.frameElement):[]):t.concat(o,M(o,[],n))}function P(e){const t=O(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=S(e),i=o?e.offsetWidth:n,a=o?e.offsetHeight:r,s=p(n)!==i||p(r)!==a;return s&&(n=i,r=a),{width:n,height:r,$:s}}function I(e){return x(e)?e:e.contextElement}function N(e){const t=I(e);if(!S(t))return v(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:i}=P(t);let a=(i?p(n.width):n.width)/r,s=(i?p(n.height):n.height)/o;return a&&Number.isFinite(a)||(a=1),s&&Number.isFinite(s)||(s=1),{x:a,y:s}}const D=v(0);function L(e){const t=b(e);return C()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:D}function F(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),i=I(e);let a=v(1);t&&(r?x(r)&&(a=N(r)):a=N(e));const s=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==b(e))&&t}(i,n,r)?L(i):v(0);let u=(o.left+s.x)/a.x,l=(o.top+s.y)/a.y,c=o.width/a.x,f=o.height/a.y;if(i){const e=b(i),t=r&&x(r)?b(r):r;let n=e,o=n.frameElement;for(;o&&r&&t!==n;){const e=N(o),t=o.getBoundingClientRect(),r=O(o),i=t.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,a=t.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;u*=e.x,l*=e.y,c*=e.x,f*=e.y,u+=i,l+=a,n=b(o),o=n.frameElement}}return y({width:c,height:f,x:u,y:l})}function j(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:i=!0,elementResize:a="function"===typeof ResizeObserver,layoutShift:s="function"===typeof IntersectionObserver,animationFrame:u=!1}=r,l=I(e),c=o||i?[...l?M(l):[],...M(t)]:[];c.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),i&&e.addEventListener("resize",n)}));const f=l&&s?function(e,t){let n,r=null;const o=_(e);function i(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function a(s,u){void 0===s&&(s=!1),void 0===u&&(u=1),i();const{left:l,top:c,width:f,height:p}=e.getBoundingClientRect();if(s||t(),!f||!p)return;const v={rootMargin:-g(c)+"px "+-g(o.clientWidth-(l+f))+"px "+-g(o.clientHeight-(c+p))+"px "+-g(l)+"px",threshold:h(0,d(1,u))||1};let y=!0;function m(e){const t=e[0].intersectionRatio;if(t!==u){if(!y)return a();t?a(!1,t):n=setTimeout((()=>{a(!1,1e-7)}),100)}y=!1}try{r=new IntersectionObserver(m,{...v,root:o.ownerDocument})}catch(b){r=new IntersectionObserver(m,v)}r.observe(e)}(!0),i}(l,n):null;let p,v=-1,y=null;a&&(y=new ResizeObserver((e=>{let[r]=e;r&&r.target===l&&y&&(y.unobserve(t),cancelAnimationFrame(v),v=requestAnimationFrame((()=>{var e;null==(e=y)||e.observe(t)}))),n()})),l&&!u&&y.observe(l),y.observe(t));let m=u?F(e):null;return u&&function t(){const r=F(e);!m||r.x===m.x&&r.y===m.y&&r.width===m.width&&r.height===m.height||n();m=r,p=requestAnimationFrame(t)}(),n(),()=>{var e;c.forEach((e=>{o&&e.removeEventListener("scroll",n),i&&e.removeEventListener("resize",n)})),null==f||f(),null==(e=y)||e.disconnect(),y=null,u&&cancelAnimationFrame(p)}}var U=n(27003),z=["className","clearValue","cx","getStyles","getClassNames","getValue","hasValue","isMulti","isRtl","options","selectOption","selectProps","setValue","theme"],B=function(){};function V(e,t){return t?"-"===t[0]?e+t:e+"__"+t:e}function $(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o-1}function Y(e){return G(e)?window.pageYOffset:e.scrollTop}function X(e,t){G(e)?window.scrollTo(0,t):e.scrollTop=t}function K(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:B,o=Y(e),i=t-o,a=0;!function t(){var s,u=i*((s=(s=a+=10)/n-1)*s*s+1)+o;X(e,u),an.bottom?X(e,Math.min(t.offsetTop+t.clientHeight-e.offsetHeight+o,e.scrollHeight)):r.top-o1?t-1:0),r=1;r=p)return{placement:"bottom",maxHeight:t};if(A>=p&&!a)return i&&K(u,E,R),{placement:"bottom",maxHeight:t};if(!a&&A>=r||a&&x>=r)return i&&K(u,E,R),{placement:"bottom",maxHeight:a?x-b:A-b};if("auto"===o||a){var O=t,T=a?w:S;return T>=r&&(O=Math.min(T-b-s,t)),{placement:"top",maxHeight:O}}if("bottom"===o)return i&&X(u,E),{placement:"bottom",maxHeight:t};break;case"top":if(w>=p)return{placement:"top",maxHeight:t};if(S>=p&&!a)return i&&K(u,C,R),{placement:"top",maxHeight:t};if(!a&&S>=r||a&&w>=r){var k=t;return(!a&&S>=r||a&&w>=r)&&(k=a?w-_:S-_),i&&K(u,C,R),{placement:"top",maxHeight:k}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(o,'".'))}return l}var de,he=function(e){return"auto"===e?"bottom":e},pe=function(e,t){var n,o=e.placement,i=e.theme,a=i.borderRadius,s=i.spacing,u=i.colors;return(0,r.A)((n={label:"menu"},(0,l.A)(n,function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(o),"100%"),(0,l.A)(n,"position","absolute"),(0,l.A)(n,"width","100%"),(0,l.A)(n,"zIndex",1),n),t?{}:{backgroundColor:u.neutral0,borderRadius:a,boxShadow:"0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)",marginBottom:s.menuGutter,marginTop:s.menuGutter})},ge=(0,c.createContext)(null),ve=function(e){var t=e.children,n=e.minMenuHeight,o=e.maxMenuHeight,i=e.menuPlacement,s=e.menuPosition,u=e.menuShouldScrollIntoView,l=e.theme,f=((0,c.useContext)(ge)||{}).setPortalPlacement,d=(0,c.useRef)(null),h=(0,c.useState)(o),p=(0,a.A)(h,2),g=p[0],v=p[1],y=(0,c.useState)(null),m=(0,a.A)(y,2),b=m[0],_=m[1],w=l.spacing.controlHeight;return(0,U.A)((function(){var e=d.current;if(e){var t="fixed"===s,r=fe({maxHeight:o,menuEl:e,minHeight:n,placement:i,shouldScroll:u&&!t,isFixedPosition:t,controlHeight:w});v(r.maxHeight),_(r.placement),null===f||void 0===f||f(r.placement)}}),[o,i,s,u,n,f,w]),t({ref:d,placerProps:(0,r.A)((0,r.A)({},e),{},{placement:b||he(i),maxHeight:g})})},ye=function(e){var t=e.children,n=e.innerRef,r=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"menu",{menu:!0}),{ref:n},r),t)},me=function(e,t){var n=e.maxHeight,o=e.theme.spacing.baseUnit;return(0,r.A)({maxHeight:n,overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},t?{}:{paddingBottom:o,paddingTop:o})},be=function(e,t){var n=e.theme,o=n.spacing.baseUnit,i=n.colors;return(0,r.A)({textAlign:"center"},t?{}:{color:i.neutral40,padding:"".concat(2*o,"px ").concat(3*o,"px")})},_e=be,we=be,xe=function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},Se=function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":void 0,pointerEvents:t?"none":void 0,position:"relative"}},Ae=function(e,t){var n=e.theme.spacing,o=e.isMulti,i=e.hasValue,a=e.selectProps.controlShouldRenderValue;return(0,r.A)({alignItems:"center",display:o&&i&&a?"flex":"grid",flex:1,flexWrap:"wrap",WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"},t?{}:{padding:"".concat(n.baseUnit/2,"px ").concat(2*n.baseUnit,"px")})},Ee=function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},Ce=["size"],Re=["innerProps","isRtl","size"];var Oe,Te,ke={name:"8mmkcg",styles:"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0"},Me=function(e){var t=e.size,n=(0,s.A)(e,Ce);return(0,i.Y)("svg",(0,o.A)({height:t,width:t,viewBox:"0 0 20 20","aria-hidden":"true",focusable:"false",css:ke},n))},Pe=function(e){return(0,i.Y)(Me,(0,o.A)({size:20},e),(0,i.Y)("path",{d:"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z"}))},Ie=function(e){return(0,i.Y)(Me,(0,o.A)({size:20},e),(0,i.Y)("path",{d:"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"}))},Ne=function(e,t){var n=e.isFocused,o=e.theme,i=o.spacing.baseUnit,a=o.colors;return(0,r.A)({label:"indicatorContainer",display:"flex",transition:"color 150ms"},t?{}:{color:n?a.neutral60:a.neutral20,padding:2*i,":hover":{color:n?a.neutral80:a.neutral40}})},De=Ne,Le=Ne,Fe=function(e,t){var n=e.isDisabled,o=e.theme,i=o.spacing.baseUnit,a=o.colors;return(0,r.A)({label:"indicatorSeparator",alignSelf:"stretch",width:1},t?{}:{backgroundColor:n?a.neutral10:a.neutral20,marginBottom:2*i,marginTop:2*i})},je=(0,i.i7)(de||(Oe=["\n 0%, 80%, 100% { opacity: 0; }\n 40% { opacity: 1; }\n"],Te||(Te=Oe.slice(0)),de=Object.freeze(Object.defineProperties(Oe,{raw:{value:Object.freeze(Te)}})))),Ue=function(e,t){var n=e.isFocused,o=e.size,i=e.theme,a=i.colors,s=i.spacing.baseUnit;return(0,r.A)({label:"loadingIndicator",display:"flex",transition:"color 150ms",alignSelf:"center",fontSize:o,lineHeight:1,marginRight:o,textAlign:"center",verticalAlign:"middle"},t?{}:{color:n?a.neutral60:a.neutral20,padding:2*s})},ze=function(e){var t=e.delay,n=e.offset;return(0,i.Y)("span",{css:(0,i.AH)({animation:"".concat(je," 1s ease-in-out ").concat(t,"ms infinite;"),backgroundColor:"currentColor",borderRadius:"1em",display:"inline-block",marginLeft:n?"1em":void 0,height:"1em",verticalAlign:"top",width:"1em"},"","")})},Be=function(e,t){var n=e.isDisabled,o=e.isFocused,i=e.theme,a=i.colors,s=i.borderRadius,u=i.spacing;return(0,r.A)({label:"control",alignItems:"center",cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:u.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms"},t?{}:{backgroundColor:n?a.neutral5:a.neutral0,borderColor:n?a.neutral10:o?a.primary:a.neutral20,borderRadius:s,borderStyle:"solid",borderWidth:1,boxShadow:o?"0 0 0 1px ".concat(a.primary):void 0,"&:hover":{borderColor:o?a.primary:a.neutral30}})},Ve=function(e){var t=e.children,n=e.isDisabled,r=e.isFocused,a=e.innerRef,s=e.innerProps,u=e.menuIsOpen;return(0,i.Y)("div",(0,o.A)({ref:a},q(e,"control",{control:!0,"control--is-disabled":n,"control--is-focused":r,"control--menu-is-open":u}),s,{"aria-disabled":n||void 0}),t)},$e=["data"],He=function(e,t){var n=e.theme.spacing;return t?{}:{paddingBottom:2*n.baseUnit,paddingTop:2*n.baseUnit}},We=function(e,t){var n=e.theme,o=n.colors,i=n.spacing;return(0,r.A)({label:"group",cursor:"default",display:"block"},t?{}:{color:o.neutral40,fontSize:"75%",fontWeight:500,marginBottom:"0.25em",paddingLeft:3*i.baseUnit,paddingRight:3*i.baseUnit,textTransform:"uppercase"})},qe=function(e){var t=e.children,n=e.cx,r=e.getStyles,a=e.getClassNames,s=e.Heading,u=e.headingProps,l=e.innerProps,c=e.label,f=e.theme,d=e.selectProps;return(0,i.Y)("div",(0,o.A)({},q(e,"group",{group:!0}),l),(0,i.Y)(s,(0,o.A)({},u,{selectProps:d,theme:f,getStyles:r,getClassNames:a,cx:n}),c),(0,i.Y)("div",null,t))},Ge=["innerRef","isDisabled","isHidden","inputClassName"],Ye=function(e,t){var n=e.isDisabled,o=e.value,i=e.theme,a=i.spacing,s=i.colors;return(0,r.A)((0,r.A)({visibility:n?"hidden":"visible",transform:o?"translateZ(0)":""},Ke),t?{}:{margin:a.baseUnit/2,paddingBottom:a.baseUnit/2,paddingTop:a.baseUnit/2,color:s.neutral80})},Xe={gridArea:"1 / 2",font:"inherit",minWidth:"2px",border:0,margin:0,outline:0,padding:0},Ke={flex:"1 1 auto",display:"inline-grid",gridArea:"1 / 1 / 2 / 3",gridTemplateColumns:"0 min-content","&:after":(0,r.A)({content:'attr(data-value) " "',visibility:"hidden",whiteSpace:"pre"},Xe)},Ze=function(e){return(0,r.A)({label:"input",color:"inherit",background:0,opacity:e?0:1,width:"100%"},Xe)},Qe=function(e,t){var n=e.theme,o=n.spacing,i=n.borderRadius,a=n.colors;return(0,r.A)({label:"multiValue",display:"flex",minWidth:0},t?{}:{backgroundColor:a.neutral10,borderRadius:i/2,margin:o.baseUnit/2})},Je=function(e,t){var n=e.theme,o=n.borderRadius,i=n.colors,a=e.cropWithEllipsis;return(0,r.A)({overflow:"hidden",textOverflow:a||void 0===a?"ellipsis":void 0,whiteSpace:"nowrap"},t?{}:{borderRadius:o/2,color:i.neutral80,fontSize:"85%",padding:3,paddingLeft:6})},et=function(e,t){var n=e.theme,o=n.spacing,i=n.borderRadius,a=n.colors,s=e.isFocused;return(0,r.A)({alignItems:"center",display:"flex"},t?{}:{borderRadius:i/2,backgroundColor:s?a.dangerLight:void 0,paddingLeft:o.baseUnit,paddingRight:o.baseUnit,":hover":{backgroundColor:a.dangerLight,color:a.danger}})},tt=function(e){var t=e.children,n=e.innerProps;return(0,i.Y)("div",n,t)};var nt=function(e){var t=e.children,n=e.components,o=e.data,a=e.innerProps,s=e.isDisabled,u=e.removeProps,l=e.selectProps,c=n.Container,f=n.Label,d=n.Remove;return(0,i.Y)(c,{data:o,innerProps:(0,r.A)((0,r.A)({},q(e,"multiValue",{"multi-value":!0,"multi-value--is-disabled":s})),a),selectProps:l},(0,i.Y)(f,{data:o,innerProps:(0,r.A)({},q(e,"multiValueLabel",{"multi-value__label":!0})),selectProps:l},t),(0,i.Y)(d,{data:o,innerProps:(0,r.A)((0,r.A)({},q(e,"multiValueRemove",{"multi-value__remove":!0})),{},{"aria-label":"Remove ".concat(t||"option")},u),selectProps:l}))},rt=function(e,t){var n=e.isDisabled,o=e.isFocused,i=e.isSelected,a=e.theme,s=a.spacing,u=a.colors;return(0,r.A)({label:"option",cursor:"default",display:"block",fontSize:"inherit",width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)"},t?{}:{backgroundColor:i?u.primary:o?u.primary25:"transparent",color:n?u.neutral20:i?u.neutral0:"inherit",padding:"".concat(2*s.baseUnit,"px ").concat(3*s.baseUnit,"px"),":active":{backgroundColor:n?void 0:i?u.primary:u.primary50}})},ot=function(e,t){var n=e.theme,o=n.spacing,i=n.colors;return(0,r.A)({label:"placeholder",gridArea:"1 / 1 / 2 / 3"},t?{}:{color:i.neutral50,marginLeft:o.baseUnit/2,marginRight:o.baseUnit/2})},it=function(e,t){var n=e.isDisabled,o=e.theme,i=o.spacing,a=o.colors;return(0,r.A)({label:"singleValue",gridArea:"1 / 1 / 2 / 3",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t?{}:{color:n?a.neutral40:a.neutral80,marginLeft:i.baseUnit/2,marginRight:i.baseUnit/2})},at={ClearIndicator:function(e){var t=e.children,n=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"clearIndicator",{indicator:!0,"clear-indicator":!0}),n),t||(0,i.Y)(Pe,null))},Control:Ve,DropdownIndicator:function(e){var t=e.children,n=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"dropdownIndicator",{indicator:!0,"dropdown-indicator":!0}),n),t||(0,i.Y)(Ie,null))},DownChevron:Ie,CrossIcon:Pe,Group:qe,GroupHeading:function(e){var t=W(e);t.data;var n=(0,s.A)(t,$e);return(0,i.Y)("div",(0,o.A)({},q(e,"groupHeading",{"group-heading":!0}),n))},IndicatorsContainer:function(e){var t=e.children,n=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"indicatorsContainer",{indicators:!0}),n),t)},IndicatorSeparator:function(e){var t=e.innerProps;return(0,i.Y)("span",(0,o.A)({},t,q(e,"indicatorSeparator",{"indicator-separator":!0})))},Input:function(e){var t=e.cx,n=e.value,r=W(e),a=r.innerRef,u=r.isDisabled,l=r.isHidden,c=r.inputClassName,f=(0,s.A)(r,Ge);return(0,i.Y)("div",(0,o.A)({},q(e,"input",{"input-container":!0}),{"data-value":n||""}),(0,i.Y)("input",(0,o.A)({className:t({input:!0},c),ref:a,style:Ze(l),disabled:u},f)))},LoadingIndicator:function(e){var t=e.innerProps,n=e.isRtl,a=e.size,u=void 0===a?4:a,l=(0,s.A)(e,Re);return(0,i.Y)("div",(0,o.A)({},q((0,r.A)((0,r.A)({},l),{},{innerProps:t,isRtl:n,size:u}),"loadingIndicator",{indicator:!0,"loading-indicator":!0}),t),(0,i.Y)(ze,{delay:0,offset:n}),(0,i.Y)(ze,{delay:160,offset:!0}),(0,i.Y)(ze,{delay:320,offset:!n}))},Menu:ye,MenuList:function(e){var t=e.children,n=e.innerProps,r=e.innerRef,a=e.isMulti;return(0,i.Y)("div",(0,o.A)({},q(e,"menuList",{"menu-list":!0,"menu-list--is-multi":a}),{ref:r},n),t)},MenuPortal:function(e){var t=e.appendTo,n=e.children,s=e.controlElement,u=e.innerProps,l=e.menuPlacement,d=e.menuPosition,h=(0,c.useRef)(null),p=(0,c.useRef)(null),g=(0,c.useState)(he(l)),v=(0,a.A)(g,2),y=v[0],m=v[1],b=(0,c.useMemo)((function(){return{setPortalPlacement:m}}),[]),_=(0,c.useState)(null),w=(0,a.A)(_,2),x=w[0],S=w[1],A=(0,c.useCallback)((function(){if(s){var e=function(e){var t=e.getBoundingClientRect();return{bottom:t.bottom,height:t.height,left:t.left,right:t.right,top:t.top,width:t.width}}(s),t="fixed"===d?0:window.pageYOffset,n=e[y]+t;n===(null===x||void 0===x?void 0:x.offset)&&e.left===(null===x||void 0===x?void 0:x.rect.left)&&e.width===(null===x||void 0===x?void 0:x.rect.width)||S({offset:n,rect:e})}}),[s,d,y,null===x||void 0===x?void 0:x.offset,null===x||void 0===x?void 0:x.rect.left,null===x||void 0===x?void 0:x.rect.width]);(0,U.A)((function(){A()}),[A]);var E=(0,c.useCallback)((function(){"function"===typeof p.current&&(p.current(),p.current=null),s&&h.current&&(p.current=j(s,h.current,A,{elementResize:"ResizeObserver"in window}))}),[s,A]);(0,U.A)((function(){E()}),[E]);var C=(0,c.useCallback)((function(e){h.current=e,E()}),[E]);if(!t&&"fixed"!==d||!x)return null;var R=(0,i.Y)("div",(0,o.A)({ref:C},q((0,r.A)((0,r.A)({},e),{},{offset:x.offset,position:d,rect:x.rect}),"menuPortal",{"menu-portal":!0}),u),n);return(0,i.Y)(ge.Provider,{value:b},t?(0,f.createPortal)(R,t):R)},LoadingMessage:function(e){var t=e.children,n=void 0===t?"Loading...":t,a=e.innerProps,u=(0,s.A)(e,ce);return(0,i.Y)("div",(0,o.A)({},q((0,r.A)((0,r.A)({},u),{},{children:n,innerProps:a}),"loadingMessage",{"menu-notice":!0,"menu-notice--loading":!0}),a),n)},NoOptionsMessage:function(e){var t=e.children,n=void 0===t?"No options":t,a=e.innerProps,u=(0,s.A)(e,le);return(0,i.Y)("div",(0,o.A)({},q((0,r.A)((0,r.A)({},u),{},{children:n,innerProps:a}),"noOptionsMessage",{"menu-notice":!0,"menu-notice--no-options":!0}),a),n)},MultiValue:nt,MultiValueContainer:tt,MultiValueLabel:tt,MultiValueRemove:function(e){var t=e.children,n=e.innerProps;return(0,i.Y)("div",(0,o.A)({role:"button"},n),t||(0,i.Y)(Pe,{size:14}))},Option:function(e){var t=e.children,n=e.isDisabled,r=e.isFocused,a=e.isSelected,s=e.innerRef,u=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"option",{option:!0,"option--is-disabled":n,"option--is-focused":r,"option--is-selected":a}),{ref:s,"aria-disabled":n},u),t)},Placeholder:function(e){var t=e.children,n=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"placeholder",{placeholder:!0}),n),t)},SelectContainer:function(e){var t=e.children,n=e.innerProps,r=e.isDisabled,a=e.isRtl;return(0,i.Y)("div",(0,o.A)({},q(e,"container",{"--is-disabled":r,"--is-rtl":a}),n),t)},SingleValue:function(e){var t=e.children,n=e.isDisabled,r=e.innerProps;return(0,i.Y)("div",(0,o.A)({},q(e,"singleValue",{"single-value":!0,"single-value--is-disabled":n}),r),t)},ValueContainer:function(e){var t=e.children,n=e.innerProps,r=e.isMulti,a=e.hasValue;return(0,i.Y)("div",(0,o.A)({},q(e,"valueContainer",{"value-container":!0,"value-container--is-multi":r,"value-container--has-value":a}),n),t)}},st=function(e){return(0,r.A)((0,r.A)({},at),e.components)}},46005:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s});var r=n(52836),o=n(58168),i=n(96540),a=n(17531),s=(n(84300),n(40961),n(27003),(0,i.forwardRef)((function(e,t){var n=(0,r.u)(e);return i.createElement(a.S,(0,o.A)({ref:t},n))})))},52836:(e,t,n)=>{"use strict";n.d(t,{u:()=>u});var r=n(89379),o=n(80296),i=n(80045),a=n(96540),s=["defaultInputValue","defaultMenuIsOpen","defaultValue","inputValue","menuIsOpen","onChange","onInputChange","onMenuClose","onMenuOpen","value"];function u(e){var t=e.defaultInputValue,n=void 0===t?"":t,u=e.defaultMenuIsOpen,l=void 0!==u&&u,c=e.defaultValue,f=void 0===c?null:c,d=e.inputValue,h=e.menuIsOpen,p=e.onChange,g=e.onInputChange,v=e.onMenuClose,y=e.onMenuOpen,m=e.value,b=(0,i.A)(e,s),_=(0,a.useState)(void 0!==d?d:n),w=(0,o.A)(_,2),x=w[0],S=w[1],A=(0,a.useState)(void 0!==h?h:l),E=(0,o.A)(A,2),C=E[0],R=E[1],O=(0,a.useState)(void 0!==m?m:f),T=(0,o.A)(O,2),k=T[0],M=T[1],P=(0,a.useCallback)((function(e,t){"function"===typeof p&&p(e,t),M(e)}),[p]),I=(0,a.useCallback)((function(e,t){var n;"function"===typeof g&&(n=g(e,t)),S(void 0!==n?n:e)}),[g]),N=(0,a.useCallback)((function(){"function"===typeof y&&y(),R(!0)}),[y]),D=(0,a.useCallback)((function(){"function"===typeof v&&v(),R(!1)}),[v]),L=void 0!==d?d:x,F=void 0!==h?h:C,j=void 0!==m?m:k;return(0,r.A)((0,r.A)({},b),{},{inputValue:L,menuIsOpen:F,onChange:P,onInputChange:I,onMenuClose:D,onMenuOpen:N,value:j})}},13674:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>v});var r=n(98587),o=n(77387),i=n(96540),a=n(40961);const s=!1,u=i.createContext(null);var l="unmounted",c="exited",f="entering",d="entered",h="exiting",p=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=c,r.appearStatus=f):o=d:o=t.unmountOnExit||t.mountOnEnter?l:c,r.state={status:o},r.nextCallback=null,r}(0,o.A)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===l?{status:c}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==f&&n!==d&&(t=f):n!==f&&n!==d||(t=h)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!==typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===f){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:a.findDOMNode(this);n&&function(e){e.scrollTop}(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===c&&this.setState({status:l})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[a.findDOMNode(this),r],i=o[0],u=o[1],l=this.getTimeouts(),c=r?l.appear:l.enter;!e&&!n||s?this.safeSetState({status:d},(function(){t.props.onEntered(i)})):(this.props.onEnter(i,u),this.safeSetState({status:f},(function(){t.props.onEntering(i,u),t.onTransitionEnd(c,(function(){t.safeSetState({status:d},(function(){t.props.onEntered(i,u)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:a.findDOMNode(this);t&&!s?(this.props.onExit(r),this.safeSetState({status:h},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:c},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:c},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:a.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=o[0],s=o[1];this.props.addEndListener(i,s)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===l)return null;var t=this.props,n=t.children,o=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,r.A)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return i.createElement(u.Provider,{value:null},"function"===typeof n?n(e,o):i.cloneElement(i.Children.only(n),o))},t}(i.Component);function g(){}p.contextType=u,p.propTypes={},p.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:g,onEntering:g,onEntered:g,onExit:g,onExiting:g,onExited:g},p.UNMOUNTED=l,p.EXITED=c,p.ENTERING=f,p.ENTERED=d,p.EXITING=h;const v=p},15287:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),u=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),h=Symbol.iterator;var p={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||p}function m(){}function b(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||p}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},m.prototype=y.prototype;var _=b.prototype=new m;_.constructor=b,g(_,y.prototype),_.isPureReactComponent=!0;var w=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},A={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)x.call(t,o)&&!A.hasOwnProperty(o)&&(i[o]=t[o]);var u=arguments.length-2;if(1===u)i.children=r;else if(1{"use strict";e.exports=n(15287)},47444:(e,t,n)=>{"use strict";n.d(t,{E0:()=>bs,Iz:()=>hs,K0:()=>ps,L4:()=>ys,RH:()=>_s,Zs:()=>ws,bi:()=>cs,eU:()=>fs,gD:()=>ds,lZ:()=>ms,vc:()=>gs,xf:()=>vs});var r=n(96540),o=n(40961);var i=function(e){const t=new Error(e);if(void 0===t.stack)try{throw t}catch(n){}return t};var a=function(e){return!!e&&"function"===typeof e.then};var s=function(e,t){if(null!=e)return e;throw i(null!==t&&void 0!==t?t:"Got unexpected null or undefined")};function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class l{getValue(){throw i("BaseLoadable")}toPromise(){throw i("BaseLoadable")}valueMaybe(){throw i("BaseLoadable")}valueOrThrow(){throw i(`Loadable expected value, but in "${this.state}" state`)}promiseMaybe(){throw i("BaseLoadable")}promiseOrThrow(){throw i(`Loadable expected promise, but in "${this.state}" state`)}errorMaybe(){throw i("BaseLoadable")}errorOrThrow(){throw i(`Loadable expected error, but in "${this.state}" state`)}is(e){return e.state===this.state&&e.contents===this.contents}map(e){throw i("BaseLoadable")}}class c extends l{constructor(e){super(),u(this,"state","hasValue"),u(this,"contents",void 0),this.contents=e}getValue(){return this.contents}toPromise(){return Promise.resolve(this.contents)}valueMaybe(){return this.contents}valueOrThrow(){return this.contents}promiseMaybe(){}errorMaybe(){}map(e){try{const t=e(this.contents);return a(t)?g(t):m(t)?t:h(t)}catch(t){return a(t)?g(t.next((()=>this.map(e)))):p(t)}}}class f extends l{constructor(e){super(),u(this,"state","hasError"),u(this,"contents",void 0),this.contents=e}getValue(){throw this.contents}toPromise(){return Promise.reject(this.contents)}valueMaybe(){}promiseMaybe(){}errorMaybe(){return this.contents}errorOrThrow(){return this.contents}map(e){return this}}class d extends l{constructor(e){super(),u(this,"state","loading"),u(this,"contents",void 0),this.contents=e}getValue(){throw this.contents}toPromise(){return this.contents}valueMaybe(){}promiseMaybe(){return this.contents}promiseOrThrow(){return this.contents}errorMaybe(){}map(e){return g(this.contents.then((t=>{const n=e(t);if(m(n)){const e=n;switch(e.state){case"hasValue":case"loading":return e.contents;case"hasError":throw e.contents}}return n})).catch((t=>{if(a(t))return t.then((()=>this.map(e).contents));throw t})))}}function h(e){return Object.freeze(new c(e))}function p(e){return Object.freeze(new f(e))}function g(e){return Object.freeze(new d(e))}function v(){return Object.freeze(new d(new Promise((()=>{}))))}function y(e){const t=function(e){return e.every((e=>"hasValue"===e.state))?h(e.map((e=>e.contents))):e.some((e=>"hasError"===e.state))?p(s(e.find((e=>"hasError"===e.state)),"Invalid loadable passed to loadableAll").contents):g(Promise.all(e.map((e=>e.contents))))}((Array.isArray(e)?e:Object.getOwnPropertyNames(e).map((t=>e[t]))).map((e=>m(e)?e:a(e)?g(e):h(e))));return Array.isArray(e)?t:t.map((t=>Object.getOwnPropertyNames(e).reduce(((e,n,r)=>({...e,[n]:t[r]})),{})))}function m(e){return e instanceof l}const b={of:e=>a(e)?g(e):m(e)?e:h(e),error:e=>p(e),loading:()=>v(),all:y,isLoadable:m};var _={loadableWithValue:h,loadableWithError:p,loadableWithPromise:g,loadableLoading:v,loadableAll:y,isLoadable:m,RecoilLoadable:b},w=_.loadableWithValue,x=_.loadableWithError,S=_.loadableWithPromise,A=_.loadableLoading,E=_.loadableAll,C=_.isLoadable,R=_.RecoilLoadable,O=Object.freeze({__proto__:null,loadableWithValue:w,loadableWithError:x,loadableWithPromise:S,loadableLoading:A,loadableAll:E,isLoadable:C,RecoilLoadable:R});const T={RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED:!0,RECOIL_GKS_ENABLED:new Set(["recoil_hamt_2020","recoil_sync_external_store","recoil_suppress_rerender_in_callback","recoil_memory_managament_2020"])};!function(){var e;"undefined"!==typeof process&&null!=(null===(e=process)||void 0===e?void 0:e.env)&&(function(e,t){var n,r;const o=null===(n=process.env[e])||void 0===n||null===(r=n.toLowerCase())||void 0===r?void 0:r.trim();if(null==o||""===o)return;if(!["true","false"].includes(o))throw i(`process.env.${e} value must be 'true', 'false', or empty: ${o}`);t("true"===o)}("RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED",(e=>{T.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=e})),function(e,t){var n;const r=null===(n=process.env[e])||void 0===n?void 0:n.trim();null!=r&&""!==r&&t(r.split(/\s*,\s*|\s+/))}("RECOIL_GKS_ENABLED",(e=>{e.forEach((e=>{T.RECOIL_GKS_ENABLED.add(e)}))})))}();var k=T;function M(e){return k.RECOIL_GKS_ENABLED.has(e)}M.setPass=e=>{k.RECOIL_GKS_ENABLED.add(e)},M.setFail=e=>{k.RECOIL_GKS_ENABLED.delete(e)},M.clear=()=>{k.RECOIL_GKS_ENABLED.clear()};var P=M;var I,N,D,L=function(e,t,{error:n}={}){return null};const F=null!==(I=r.createMutableSource)&&void 0!==I?I:r.unstable_createMutableSource,j=null!==(N=r.useMutableSource)&&void 0!==N?N:r.unstable_useMutableSource,U=null!==(D=r.useSyncExternalStore)&&void 0!==D?D:r.unstable_useSyncExternalStore;let z=!1;var B={createMutableSource:F,useMutableSource:j,useSyncExternalStore:U,currentRendererSupportsUseSyncExternalStore:function(){var e;const{ReactCurrentDispatcher:t,ReactCurrentOwner:n}=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,o=null!=(null!==(e=null===t||void 0===t?void 0:t.current)&&void 0!==e?e:n.currentDispatcher).useSyncExternalStore;return!U||o||z||(z=!0,L("A React renderer without React 18+ API support is being used with React 18+.")),o},reactMode:function(){return P("recoil_transition_support")?{mode:"TRANSITION_SUPPORT",early:!0,concurrent:!0}:P("recoil_sync_external_store")&&null!=U?{mode:"SYNC_EXTERNAL_STORE",early:!0,concurrent:!1}:P("recoil_mutable_source")&&null!=j&&"undefined"!==typeof window&&!window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE?P("recoil_suppress_rerender_in_callback")?{mode:"MUTABLE_SOURCE",early:!0,concurrent:!0}:{mode:"MUTABLE_SOURCE",early:!1,concurrent:!1}:P("recoil_suppress_rerender_in_callback")?{mode:"LEGACY",early:!0,concurrent:!1}:{mode:"LEGACY",early:!1,concurrent:!1}},isFastRefreshEnabled:function(){return!1}};class V{constructor(e){u(this,"key",void 0),this.key=e}toJSON(){return{key:this.key}}}class $ extends V{}class H extends V{}var W={AbstractRecoilValue:V,RecoilState:$,RecoilValueReadOnly:H,isRecoilValue:function(e){return e instanceof $||e instanceof H}},q=W.AbstractRecoilValue,G=W.RecoilState,Y=W.RecoilValueReadOnly,X=W.isRecoilValue,K=Object.freeze({__proto__:null,AbstractRecoilValue:q,RecoilState:G,RecoilValueReadOnly:Y,isRecoilValue:X});var Z=function(e,...t){0};var Q=function(e,t){return function*(){let n=0;for(const r of e)yield t(r,n++)}()};const{isFastRefreshEnabled:J}=B;class ee{}const te=new ee,ne=new Map,re=new Map;class oe extends Error{}const ie=new Map;function ae(e){return ie.get(e)}var se={nodes:ne,recoilValues:re,registerNode:function(e){k.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED&&function(e){if(ne.has(e)){const t=`Duplicate atom key "${e}". This is a FATAL ERROR in\n production. But it is safe to ignore this warning if it occurred because of\n hot module replacement.`;console.warn(t)}}(e.key),ne.set(e.key,e);const t=null==e.set?new K.RecoilValueReadOnly(e.key):new K.RecoilState(e.key);return re.set(e.key,t),t},getNode:function(e){const t=ne.get(e);if(null==t)throw new oe(`Missing definition for RecoilValue: "${e}""`);return t},getNodeMaybe:function(e){return ne.get(e)},deleteNodeConfigIfPossible:function(e){var t;if(!P("recoil_memory_managament_2020"))return;const n=ne.get(e);var r;null!==n&&void 0!==n&&null!==(t=n.shouldDeleteConfigOnRelease)&&void 0!==t&&t.call(n)&&(ne.delete(e),null===(r=ae(e))||void 0===r||r(),ie.delete(e))},setConfigDeletionHandler:function(e,t){P("recoil_memory_managament_2020")&&(void 0===t?ie.delete(e):ie.set(e,t))},getConfigDeletionHandler:ae,recoilValuesForKeys:function(e){return Q(e,(e=>s(re.get(e))))},NodeMissingError:oe,DefaultValue:ee,DEFAULT_VALUE:te};var ue={enqueueExecution:function(e,t){t()}};var le,ce,fe=(le=function(e){var t="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n={},r=Math.pow(2,5),o=r-1,i=r/2,a=r/4,s={},u=function(e){return function(){return e}},l=n.hash=function(e){var n="undefined"===typeof e?"undefined":t(e);if("number"===n)return e;"string"!==n&&(e+="");for(var r=0,o=0,i=e.length;o>>e&o},f=function(e){return 1<>1&1431655765))+(n>>2&858993459))+(n>>4)&252645135,127&(n+=n>>8)+(n>>16);var n},h=function(e,t,n,r){var o=r;if(!e){var i=r.length;o=new Array(i);for(var a=0;a1?m(e,this.hash,u):u[0]}var l=r();return l===s?this:(++a.value,w(e,n,this.hash,this,o,y(e,o,i,l)))},E=function(e,t,n,r,o,a,s){var u=this.mask,l=this.children,y=c(n,o),m=f(y),w=d(u,m),S=u&m,A=S?l[w]:g,E=A._modify(e,t,n+5,r,o,a,s);if(A===E)return this;var C=x(e,this),R=u,O=void 0;if(S&&v(E)){if(!(R&=~m))return g;if(l.length<=2&&function(e){return e===g||1===e.type||2===e.type}(l[1^w]))return l[1^w];O=p(C,w,l)}else if(S||v(E))O=h(C,w,E,l);else{if(l.length>=i)return function(e,t,n,r,o){for(var i=[],a=r,s=0,u=0;a;++u)1&a&&(i[u]=o[s++]),a>>>=1;return i[t]=n,_(e,s+1,i)}(e,y,E,u,l);R|=m,O=function(e,t,n,r){var o=r.length;if(e){for(var i=o;i>=t;)r[i--]=r[i];return r[t]=n,r}for(var a=0,s=0,u=new Array(o+1);a{n.set(r,t(e,r))})),n};function be(e,t,n,r){const{nodeDeps:o,nodeToNodeSubscriptions:i}=n,a=o.get(e);if(a&&r&&a!==r.nodeDeps.get(e))return;o.set(e,t);const u=null==a?t:ye(t,a);for(const l of u){i.has(l)||i.set(l,new Set);s(i.get(l)).add(e)}if(a){const n=ye(a,t);for(const t of n){if(!i.has(t))return;const n=s(i.get(t));n.delete(e),0===n.size&&i.delete(t)}}}var _e={cloneGraph:function(e){return{nodeDeps:me(e.nodeDeps,(e=>new Set(e))),nodeToNodeSubscriptions:me(e.nodeToNodeSubscriptions,(e=>new Set(e)))}},graph:function(){return{nodeDeps:new Map,nodeToNodeSubscriptions:new Map}},saveDepsToStore:function(e,t,n,r){var o,i,a,s;const u=n.getState();r!==u.currentTree.version&&r!==(null===(o=u.nextTree)||void 0===o?void 0:o.version)&&r!==(null===(i=u.previousTree)||void 0===i?void 0:i.version)&&L("Tried to save dependencies to a discarded tree");const l=n.getGraph(r);if(be(e,t,l),r===(null===(a=u.previousTree)||void 0===a?void 0:a.version)){be(e,t,n.getGraph(u.currentTree.version),l)}if(r===(null===(s=u.previousTree)||void 0===s?void 0:s.version)||r===u.currentTree.version){var c;const r=null===(c=u.nextTree)||void 0===c?void 0:c.version;if(void 0!==r){be(e,t,n.getGraph(r),l)}}}};let we=0;let xe=0;let Se=0;var Ae={getNextTreeStateVersion:()=>we++,getNextStoreID:()=>xe++,getNextComponentID:()=>Se++};const{persistentMap:Ee}=ve,{graph:Ce}=_e,{getNextTreeStateVersion:Re}=Ae;function Oe(){const e=Re();return{version:e,stateID:e,transactionMetadata:{},dirtyAtoms:new Set,atomValues:Ee(),nonvalidatedAtoms:Ee()}}var Te={makeEmptyTreeState:Oe,makeEmptyStoreState:function(){const e=Oe();return{currentTree:e,nextTree:null,previousTree:null,commitDepth:0,knownAtoms:new Set,knownSelectors:new Set,transactionSubscriptions:new Map,nodeTransactionSubscriptions:new Map,nodeToComponentSubscriptions:new Map,queuedComponentCallbacks_DEPRECATED:[],suspendedComponentResolvers:new Set,graphsByVersion:(new Map).set(e.version,Ce()),retention:{referenceCounts:new Map,nodesRetainedByZone:new Map,retainablesToCheckForRelease:new Set},nodeCleanupFunctions:new Map}},getNextTreeStateVersion:Re};class ke{}var Me={RetentionZone:ke,retentionZone:function(){return new ke}};var Pe={setByAddingToSet:function(e,t){const n=new Set(e);return n.add(t),n},setByDeletingFromSet:function(e,t){const n=new Set(e);return n.delete(t),n},mapBySettingInMap:function(e,t,n){const r=new Map(e);return r.set(t,n),r},mapByUpdatingInMap:function(e,t,n){const r=new Map(e);return r.set(t,n(r.get(t))),r},mapByDeletingFromMap:function(e,t){const n=new Map(e);return n.delete(t),n},mapByDeletingMultipleFromMap:function(e,t){const n=new Map(e);return t.forEach((e=>n.delete(e))),n}};var Ie=function*(e,t){let n=0;for(const r of e)t(r,n++)&&(yield r)};var Ne=function(e,t){return new Proxy(e,{get:(e,n)=>(!(n in e)&&n in t&&(e[n]=t[n]()),e[n]),ownKeys:e=>Object.keys(e)})};const{getNode:De,getNodeMaybe:Le,recoilValuesForKeys:Fe}=se,{RetentionZone:je}=Me,{setByAddingToSet:Ue}=Pe,ze=Object.freeze(new Set);class Be extends Error{}function Ve(e,t,n,r){const o=e.getState();if(o.nodeCleanupFunctions.has(n))return;const i=De(n),a=function(e,t,n){if(!P("recoil_memory_managament_2020"))return()=>{};const{nodesRetainedByZone:r}=e.getState().retention;function o(e){let n=r.get(e);n||r.set(e,n=new Set),n.add(t)}if(n instanceof je)o(n);else if(Array.isArray(n))for(const i of n)o(i);return()=>{if(!P("recoil_memory_managament_2020"))return;const{retention:r}=e.getState();function o(e){const n=r.nodesRetainedByZone.get(e);null===n||void 0===n||n.delete(t),n&&0===n.size&&r.nodesRetainedByZone.delete(e)}if(n instanceof je)o(n);else if(Array.isArray(n))for(const e of n)o(e)}}(e,n,i.retainedBy),s=i.init(e,t,r);o.nodeCleanupFunctions.set(n,(()=>{s(),a()}))}function $e(e,t,n){return De(n).peek(e,t)}function He(e,t,n){const r=new Set,o=Array.from(n),i=e.getGraph(t.version);for(let s=o.pop();s;s=o.pop()){var a;r.add(s);const e=null!==(a=i.nodeToNodeSubscriptions.get(s))&&void 0!==a?a:ze;for(const t of e)r.has(t)||o.push(t)}return r}var We={getNodeLoadable:function(e,t,n){return Ve(e,t,n,"get"),De(n).get(e,t)},peekNodeLoadable:$e,setNodeValue:function(e,t,n,r){const o=De(n);if(null==o.set)throw new Be(`Attempt to set read-only RecoilValue: ${n}`);const i=o.set;return Ve(e,t,n,"set"),i(e,t,r)},initializeNode:function(e,t,n){Ve(e,e.getState().currentTree,t,n)},cleanUpNode:function(e,t){var n;const r=e.getState();null===(n=r.nodeCleanupFunctions.get(t))||void 0===n||n(),r.nodeCleanupFunctions.delete(t)},setUnvalidatedAtomValue_DEPRECATED:function(e,t,n){var r;const o=Le(t);return null===o||void 0===o||null===(r=o.invalidate)||void 0===r||r.call(o,e),{...e,atomValues:e.atomValues.clone().delete(t),nonvalidatedAtoms:e.nonvalidatedAtoms.clone().set(t,n),dirtyAtoms:Ue(e.dirtyAtoms,t)}},peekNodeInfo:function(e,t,n){const r=e.getState(),o=e.getGraph(t.version),i=De(n).nodeType;return Ne({type:i},{loadable:()=>$e(e,t,n),isActive:()=>r.knownAtoms.has(n)||r.knownSelectors.has(n),isSet:()=>"selector"!==i&&t.atomValues.has(n),isModified:()=>t.dirtyAtoms.has(n),deps:()=>{var e;return Fe(null!==(e=o.nodeDeps.get(n))&&void 0!==e?e:[])},subscribers:()=>{var o,i;return{nodes:Fe(Ie(He(e,t,new Set([n])),(e=>e!==n))),components:Q(null!==(o=null===(i=r.nodeToComponentSubscriptions.get(n))||void 0===i?void 0:i.values())&&void 0!==o?o:[],(([e])=>({name:e})))}}})},getDownstreamNodes:He};let qe=null;var Ge={setInvalidateMemoizedSnapshot:function(e){qe=e},invalidateMemoizedSnapshot:function(){var e;null===(e=qe)||void 0===e||e()}};const{getDownstreamNodes:Ye,getNodeLoadable:Xe,setNodeValue:Ke}=We,{getNextComponentID:Ze}=Ae,{getNode:Qe,getNodeMaybe:Je}=se,{DefaultValue:et}=se,{reactMode:tt}=B,{AbstractRecoilValue:nt,RecoilState:rt,RecoilValueReadOnly:ot,isRecoilValue:it}=K,{invalidateMemoizedSnapshot:at}=Ge;function st(e,t,n){if("set"===n.type){const{recoilValue:r,valueOrUpdater:o}=n,a=function(e,t,{key:n},r){if("function"===typeof r){const o=Xe(e,t,n);if("loading"===o.state){const e=`Tried to set atom or selector "${n}" using an updater function while the current state is pending, this is not currently supported.`;throw L(e),i(e)}if("hasError"===o.state)throw o.contents;return r(o.contents)}return r}(e,t,r,o),s=Ke(e,t,r.key,a);for(const[e,n]of s.entries())ut(t,e,n)}else if("setLoadable"===n.type){const{recoilValue:{key:e},loadable:r}=n;ut(t,e,r)}else if("markModified"===n.type){const{recoilValue:{key:e}}=n;t.dirtyAtoms.add(e)}else if("setUnvalidated"===n.type){var r;const{recoilValue:{key:e},unvalidatedValue:o}=n,i=Je(e);null===i||void 0===i||null===(r=i.invalidate)||void 0===r||r.call(i,t),t.atomValues.delete(e),t.nonvalidatedAtoms.set(e,o),t.dirtyAtoms.add(e)}else L(`Unknown action ${n.type}`)}function ut(e,t,n){"hasValue"===n.state&&n.contents instanceof et?e.atomValues.delete(t):e.atomValues.set(t,n),e.dirtyAtoms.add(t),e.nonvalidatedAtoms.delete(t)}function lt(e,t){e.replaceState((n=>{const r=dt(n);for(const o of t)st(e,r,o);return ht(e,r),at(),r}))}function ct(e,t){if(ft.length){const n=ft[ft.length-1];let r=n.get(e);r||n.set(e,r=[]),r.push(t)}else lt(e,[t])}const ft=[];function dt(e){return{...e,atomValues:e.atomValues.clone(),nonvalidatedAtoms:e.nonvalidatedAtoms.clone(),dirtyAtoms:new Set(e.dirtyAtoms)}}function ht(e,t){const n=Ye(e,t,t.dirtyAtoms);for(const i of n){var r,o;null===(r=Je(i))||void 0===r||null===(o=r.invalidate)||void 0===o||o.call(r,t)}}function pt(e,t,n){ct(e,{type:"set",recoilValue:t,valueOrUpdater:n})}var gt={RecoilValueReadOnly:ot,AbstractRecoilValue:nt,RecoilState:rt,getRecoilValueAsLoadable:function(e,{key:t},n=e.getState().currentTree){var r,o;const i=e.getState();n.version!==i.currentTree.version&&n.version!==(null===(r=i.nextTree)||void 0===r?void 0:r.version)&&n.version!==(null===(o=i.previousTree)||void 0===o?void 0:o.version)&&L("Tried to read from a discarded tree");const a=Xe(e,n,t);return"loading"===a.state&&a.contents.catch((()=>{})),a},setRecoilValue:pt,setRecoilValueLoadable:function(e,t,n){if(n instanceof et)return pt(e,t,n);ct(e,{type:"setLoadable",recoilValue:t,loadable:n})},markRecoilValueModified:function(e,t){ct(e,{type:"markModified",recoilValue:t})},setUnvalidatedRecoilValue:function(e,t,n){ct(e,{type:"setUnvalidated",recoilValue:t,unvalidatedValue:n})},subscribeToRecoilValue:function(e,{key:t},n,r=null){const o=Ze(),i=e.getState();i.nodeToComponentSubscriptions.has(t)||i.nodeToComponentSubscriptions.set(t,new Map),s(i.nodeToComponentSubscriptions.get(t)).set(o,[null!==r&&void 0!==r?r:"",n]);const a=tt();if(a.early&&("LEGACY"===a.mode||"MUTABLE_SOURCE"===a.mode)){const r=e.getState().nextTree;r&&r.dirtyAtoms.has(t)&&n(r)}return{release:()=>{const n=e.getState(),r=n.nodeToComponentSubscriptions.get(t);void 0!==r&&r.has(o)?(r.delete(o),0===r.size&&n.nodeToComponentSubscriptions.delete(t)):L(`Subscription missing at release time for atom ${t}. This is a bug in Recoil.`)}}},isRecoilValue:it,applyAtomValueWrites:function(e,t){const n=e.clone();return t.forEach(((e,t)=>{"hasValue"===e.state&&e.contents instanceof et?n.delete(t):n.set(t,e)})),n},batchStart:function(){const e=new Map;return ft.push(e),()=>{for(const[t,n]of e)lt(t,n);ft.pop()!==e&&L("Incorrect order of batch popping")}},writeLoadableToTreeState:ut,invalidateDownstreams:ht,copyTreeState:dt,refreshRecoilValue:function(e,t){var n;const{currentTree:r}=e.getState(),o=Qe(t.key);null===(n=o.clearCache)||void 0===n||n.call(o,e,r)}};var vt=function(e,t,n){const r=e.entries();let o=r.next();for(;!o.done;){const i=o.value;if(t.call(n,i[1],i[0],e))return!0;o=r.next()}return!1};const{cleanUpNode:yt}=We,{deleteNodeConfigIfPossible:mt,getNode:bt}=se,{RetentionZone:_t}=Me,wt=new Set;function xt(e,t){const n=e.getState(),r=n.currentTree;if(n.nextTree)return void L("releaseNodesNowOnCurrentTree should only be called at the end of a batch");const o=new Set;for(const a of t)if(a instanceof _t)for(const e of At(n,a))o.add(e);else o.add(a);const i=function(e,t){const n=e.getState(),r=n.currentTree,o=e.getGraph(r.version),i=new Set,a=new Set;return u(t),i;function u(t){const l=new Set,c=function(e,t,n,r,o){const i=e.getGraph(t.version),a=[],u=new Set;for(;n.size>0;)l(s(n.values().next().value));return a;function l(e){if(r.has(e)||o.has(e))return void n.delete(e);if(u.has(e))return;const t=i.nodeToNodeSubscriptions.get(e);if(t)for(const n of t)l(n);u.add(e),n.delete(e),a.push(e)}}(e,r,t,i,a);for(const e of c){var f;if("recoilRoot"===bt(e).retainedBy){a.add(e);continue}if((null!==(f=n.retention.referenceCounts.get(e))&&void 0!==f?f:0)>0){a.add(e);continue}if(Et(e).some((e=>n.retention.referenceCounts.get(e)))){a.add(e);continue}const t=o.nodeToNodeSubscriptions.get(e);t&&vt(t,(e=>a.has(e)))?a.add(e):(i.add(e),l.add(e))}const d=new Set;for(const e of l)for(const t of null!==(h=o.nodeDeps.get(e))&&void 0!==h?h:wt){var h;i.has(t)||d.add(t)}d.size&&u(d)}}(e,o);for(const a of i)St(e,r,a)}function St(e,t,n){if(!P("recoil_memory_managament_2020"))return;yt(e,n);const r=e.getState();r.knownAtoms.delete(n),r.knownSelectors.delete(n),r.nodeTransactionSubscriptions.delete(n),r.retention.referenceCounts.delete(n);const o=Et(n);for(const u of o){var i;null===(i=r.retention.nodesRetainedByZone.get(u))||void 0===i||i.delete(n)}t.atomValues.delete(n),t.dirtyAtoms.delete(n),t.nonvalidatedAtoms.delete(n);const a=r.graphsByVersion.get(t.version);if(a){const e=a.nodeDeps.get(n);if(void 0!==e){a.nodeDeps.delete(n);for(const t of e){var s;null===(s=a.nodeToNodeSubscriptions.get(t))||void 0===s||s.delete(n)}}a.nodeToNodeSubscriptions.delete(n)}mt(n)}function At(e,t){var n;return null!==(n=e.retention.nodesRetainedByZone.get(t))&&void 0!==n?n:wt}function Et(e){const t=bt(e).retainedBy;return void 0===t||"components"===t||"recoilRoot"===t?[]:t instanceof _t?[t]:t}function Ct(e,t){if(!P("recoil_memory_managament_2020"))return;e.getState().retention.referenceCounts.delete(t),function(e,t){const n=e.getState();n.nextTree?n.retention.retainablesToCheckForRelease.add(t):xt(e,new Set([t]))}(e,t)}var Rt={SUSPENSE_TIMEOUT_MS:12e4,updateRetainCount:function(e,t,n){var r;if(!P("recoil_memory_managament_2020"))return;const o=e.getState().retention.referenceCounts,i=(null!==(r=o.get(t))&&void 0!==r?r:0)+n;0===i?Ct(e,t):o.set(t,i)},updateRetainCountToZero:Ct,releaseScheduledRetainablesNow:function(e){if(!P("recoil_memory_managament_2020"))return;const t=e.getState();xt(e,t.retention.retainablesToCheckForRelease),t.retention.retainablesToCheckForRelease.clear()},retainedByOptionWithDefault:function(e){return void 0===e?"recoilRoot":e}};const{unstable_batchedUpdates:Ot}=o;var Tt={unstable_batchedUpdates:Ot};const{unstable_batchedUpdates:kt}=Tt;var Mt={unstable_batchedUpdates:kt};const{batchStart:Pt}=gt,{unstable_batchedUpdates:It}=Mt;let Nt=It||(e=>e());var Dt={getBatcher:()=>Nt,setBatcher:e=>{Nt=e},batchUpdates:e=>{Nt((()=>{let t=()=>{};try{t=Pt(),e()}finally{t()}}))}};var Lt=function*(e){for(const t of e)for(const e of t)yield e};const Ft="undefined"===typeof Window||"undefined"===typeof window,jt="undefined"!==typeof navigator&&"ReactNative"===navigator.product;var Ut={isSSR:Ft,isReactNative:jt,isWindow:e=>!Ft&&(e===window||e instanceof Window)};var zt={memoizeWithArgsHash:function(e,t){let n;return(...r)=>{n||(n={});const o=t(...r);return Object.hasOwnProperty.call(n,o)||(n[o]=e(...r)),n[o]}},memoizeOneWithArgsHash:function(e,t){let n,r;return(...o)=>{const i=t(...o);return n===i||(n=i,r=e(...o)),r}},memoizeOneWithArgsHashAndInvalidation:function(e,t){let n,r;return[(...o)=>{const i=t(...o);return n===i||(n=i,r=e(...o)),r},()=>{n=null}]}};const{batchUpdates:Bt}=Dt,{initializeNode:Vt,peekNodeInfo:$t}=We,{graph:Ht}=_e,{getNextStoreID:Wt}=Ae,{DEFAULT_VALUE:qt,recoilValues:Gt,recoilValuesForKeys:Yt}=se,{AbstractRecoilValue:Xt,getRecoilValueAsLoadable:Kt,setRecoilValue:Zt,setUnvalidatedRecoilValue:Qt}=gt,{updateRetainCount:Jt}=Rt,{setInvalidateMemoizedSnapshot:en}=Ge,{getNextTreeStateVersion:tn,makeEmptyStoreState:nn}=Te,{isSSR:rn}=Ut,{memoizeOneWithArgsHashAndInvalidation:on}=zt;class an{constructor(e,t){u(this,"_store",void 0),u(this,"_refCount",1),u(this,"getLoadable",(e=>(this.checkRefCount_INTERNAL(),Kt(this._store,e)))),u(this,"getPromise",(e=>(this.checkRefCount_INTERNAL(),this.getLoadable(e).toPromise()))),u(this,"getNodes_UNSTABLE",(e=>{if(this.checkRefCount_INTERNAL(),!0===(null===e||void 0===e?void 0:e.isModified)){if(!1===(null===e||void 0===e?void 0:e.isInitialized))return[];const t=this._store.getState().currentTree;return Yt(t.dirtyAtoms)}const t=this._store.getState().knownAtoms,n=this._store.getState().knownSelectors;return null==(null===e||void 0===e?void 0:e.isInitialized)?Gt.values():!0===e.isInitialized?Yt(Lt([t,n])):Ie(Gt.values(),(({key:e})=>!t.has(e)&&!n.has(e)))})),u(this,"getInfo_UNSTABLE",(({key:e})=>(this.checkRefCount_INTERNAL(),$t(this._store,this._store.getState().currentTree,e)))),u(this,"map",(e=>{this.checkRefCount_INTERNAL();const t=new cn(this,Bt);return e(t),t})),u(this,"asyncMap",(async e=>{this.checkRefCount_INTERNAL();const t=new cn(this,Bt);return t.retain(),await e(t),t.autoRelease_INTERNAL(),t})),this._store={storeID:Wt(),parentStoreID:t,getState:()=>e,replaceState:t=>{e.currentTree=t(e.currentTree)},getGraph:t=>{const n=e.graphsByVersion;if(n.has(t))return s(n.get(t));const r=Ht();return n.set(t,r),r},subscribeToTransactions:()=>({release:()=>{}}),addTransactionMetadata:()=>{throw i("Cannot subscribe to Snapshots")}};for(const n of this._store.getState().knownAtoms)Vt(this._store,n,"get"),Jt(this._store,n,1);this.autoRelease_INTERNAL()}retain(){this._refCount<=0&&L("Attempt to retain() Snapshot that was already released."),this._refCount++;let e=!1;return()=>{e||(e=!0,this._release())}}autoRelease_INTERNAL(){rn||window.setTimeout((()=>this._release()),10)}_release(){if(this._refCount--,0===this._refCount){if(this._store.getState().nodeCleanupFunctions.forEach((e=>e())),this._store.getState().nodeCleanupFunctions.clear(),!P("recoil_memory_managament_2020"))return}else this._refCount}isRetained(){return this._refCount>0}checkRefCount_INTERNAL(){P("recoil_memory_managament_2020")&&this._refCount}getStore_INTERNAL(){return this.checkRefCount_INTERNAL(),this._store}getID(){return this.checkRefCount_INTERNAL(),this._store.getState().currentTree.stateID}getStoreID(){return this.checkRefCount_INTERNAL(),this._store.storeID}}function sn(e,t,n=!1){const r=e.getState(),o=n?tn():t.version;return{currentTree:{version:n?o:t.version,stateID:n?o:t.stateID,transactionMetadata:{...t.transactionMetadata},dirtyAtoms:new Set(t.dirtyAtoms),atomValues:t.atomValues.clone(),nonvalidatedAtoms:t.nonvalidatedAtoms.clone()},commitDepth:0,nextTree:null,previousTree:null,knownAtoms:new Set(r.knownAtoms),knownSelectors:new Set(r.knownSelectors),transactionSubscriptions:new Map,nodeTransactionSubscriptions:new Map,nodeToComponentSubscriptions:new Map,queuedComponentCallbacks_DEPRECATED:[],suspendedComponentResolvers:new Set,graphsByVersion:(new Map).set(o,e.getGraph(t.version)),retention:{referenceCounts:new Map,nodesRetainedByZone:new Map,retainablesToCheckForRelease:new Set},nodeCleanupFunctions:new Map(Q(r.nodeCleanupFunctions.entries(),(([e])=>[e,()=>{}])))}}const[un,ln]=on(((e,t)=>{var n;const r=e.getState(),o="latest"===t?null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree:s(r.previousTree);return new an(sn(e,o),e.storeID)}),((e,t)=>{var n,r;return String(t)+String(e.storeID)+String(null===(n=e.getState().nextTree)||void 0===n?void 0:n.version)+String(e.getState().currentTree.version)+String(null===(r=e.getState().previousTree)||void 0===r?void 0:r.version)}));en(ln);class cn extends an{constructor(e,t){super(sn(e.getStore_INTERNAL(),e.getStore_INTERNAL().getState().currentTree,!0),e.getStoreID()),u(this,"_batch",void 0),u(this,"set",((e,t)=>{this.checkRefCount_INTERNAL();const n=this.getStore_INTERNAL();this._batch((()=>{Jt(n,e.key,1),Zt(this.getStore_INTERNAL(),e,t)}))})),u(this,"reset",(e=>{this.checkRefCount_INTERNAL();const t=this.getStore_INTERNAL();this._batch((()=>{Jt(t,e.key,1),Zt(this.getStore_INTERNAL(),e,qt)}))})),u(this,"setUnvalidatedAtomValues_DEPRECATED",(e=>{this.checkRefCount_INTERNAL();const t=this.getStore_INTERNAL();Bt((()=>{for(const[n,r]of e.entries())Jt(t,n,1),Qt(t,new Xt(n),r)}))})),this._batch=t}}var fn={Snapshot:an,MutableSnapshot:cn,freshSnapshot:function(e){const t=new an(nn());return null!=e?t.map(e):t},cloneSnapshot:function(e,t="latest"){const n=un(e,t);return n.isRetained()?n:(ln(),un(e,t))}},dn=fn.Snapshot,hn=fn.MutableSnapshot,pn=fn.freshSnapshot,gn=fn.cloneSnapshot,vn=Object.freeze({__proto__:null,Snapshot:dn,MutableSnapshot:hn,freshSnapshot:pn,cloneSnapshot:gn});var yn=function(...e){const t=new Set;for(const n of e)for(const e of n)t.add(e);return t};const{useRef:mn}=r;var bn=function(e){const t=mn(e);return t.current===e&&"function"===typeof e&&(t.current=e()),t};const{getNextTreeStateVersion:_n,makeEmptyStoreState:wn}=Te,{cleanUpNode:xn,getDownstreamNodes:Sn,initializeNode:An,setNodeValue:En,setUnvalidatedAtomValue_DEPRECATED:Cn}=We,{graph:Rn}=_e,{cloneGraph:On}=_e,{getNextStoreID:Tn}=Ae,{createMutableSource:kn,reactMode:Mn}=B,{applyAtomValueWrites:Pn}=gt,{releaseScheduledRetainablesNow:In}=Rt,{freshSnapshot:Nn}=vn,{useCallback:Dn,useContext:Ln,useEffect:Fn,useMemo:jn,useRef:Un,useState:zn}=r;function Bn(){throw i("This component must be used inside a component.")}const Vn=Object.freeze({storeID:Tn(),getState:Bn,replaceState:Bn,getGraph:Bn,subscribeToTransactions:Bn,addTransactionMetadata:Bn});let $n=!1;function Hn(e){if($n)throw i("An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions.");const t=e.getState();if(null===t.nextTree){P("recoil_memory_managament_2020")&&P("recoil_release_on_cascading_update_killswitch_2021")&&t.commitDepth>0&&In(e);const n=t.currentTree.version,r=_n();t.nextTree={...t.currentTree,version:r,stateID:r,dirtyAtoms:new Set,transactionMetadata:{}},t.graphsByVersion.set(r,On(s(t.graphsByVersion.get(n))))}}const Wn=r.createContext({current:Vn}),qn=()=>Ln(Wn),Gn=r.createContext(null);function Yn(e,t,n){const r=Sn(e,n,n.dirtyAtoms);for(const o of r){const e=t.nodeToComponentSubscriptions.get(o);if(e)for(const[t,[r,o]]of e)o(n)}}function Xn(e){const t=e.getState(),n=t.currentTree,r=n.dirtyAtoms;if(r.size){for(const[n,o]of t.nodeTransactionSubscriptions)if(r.has(n))for(const[t,r]of o)r(e);for(const[n,r]of t.transactionSubscriptions)r(e);(!Mn().early||t.suspendedComponentResolvers.size>0)&&(Yn(e,t,n),t.suspendedComponentResolvers.forEach((e=>e())),t.suspendedComponentResolvers.clear())}t.queuedComponentCallbacks_DEPRECATED.forEach((e=>e(n))),t.queuedComponentCallbacks_DEPRECATED.splice(0,t.queuedComponentCallbacks_DEPRECATED.length)}function Kn({setNotifyBatcherOfChange:e}){const t=qn(),[,n]=zn([]);return e((()=>n({}))),Fn((()=>(e((()=>n({}))),()=>{e((()=>{}))})),[e]),Fn((()=>{ue.enqueueExecution("Batcher",(()=>{!function(e){const t=e.getState();t.commitDepth++;try{const{nextTree:n}=t;if(null==n)return;t.previousTree=t.currentTree,t.currentTree=n,t.nextTree=null,Xn(e),null!=t.previousTree?t.graphsByVersion.delete(t.previousTree.version):L("Ended batch with no previous state, which is unexpected","recoil"),t.previousTree=null,P("recoil_memory_managament_2020")&&null==n&&In(e)}finally{t.commitDepth--}}(t.current)}))})),null}let Zn=0;function Qn({initializeState_DEPRECATED:e,initializeState:t,store_INTERNAL:n,children:o}){let i;const a=e=>{const t=i.current.graphsByVersion;if(t.has(e))return s(t.get(e));const n=Rn();return t.set(e,n),n},u=(e,t)=>{if(null==t){const{transactionSubscriptions:t}=h.current.getState(),n=Zn++;return t.set(n,e),{release:()=>{t.delete(n)}}}{const{nodeTransactionSubscriptions:n}=h.current.getState();n.has(t)||n.set(t,new Map);const r=Zn++;return s(n.get(t)).set(r,e),{release:()=>{const e=n.get(t);e&&(e.delete(r),0===e.size&&n.delete(t))}}}},l=e=>{Hn(h.current);for(const t of Object.keys(e))s(h.current.getState().nextTree).transactionMetadata[t]=e[t]},c=e=>{Hn(h.current);const t=s(i.current.nextTree);let n;try{$n=!0,n=e(t)}finally{$n=!1}n!==t&&(i.current.nextTree=n,Mn().early&&Yn(h.current,i.current,n),s(f.current)())},f=Un(null),d=Dn((e=>{f.current=e}),[f]),h=bn((()=>null!==n&&void 0!==n?n:{storeID:Tn(),getState:()=>i.current,replaceState:c,getGraph:a,subscribeToTransactions:u,addTransactionMetadata:l}));null!=n&&(h.current=n),i=bn((()=>null!=e?function(e,t){const n=wn();return t({set:(t,r)=>{const o=n.currentTree,i=En(e,o,t.key,r),a=new Set(i.keys()),s=o.nonvalidatedAtoms.clone();for(const e of a)s.delete(e);n.currentTree={...o,dirtyAtoms:yn(o.dirtyAtoms,a),atomValues:Pn(o.atomValues,i),nonvalidatedAtoms:s}},setUnvalidatedAtomValues:e=>{e.forEach(((e,t)=>{n.currentTree=Cn(n.currentTree,t,e)}))}}),n}(h.current,e):null!=t?function(e){const t=Nn(e),n=t.getStore_INTERNAL().getState();return t.retain(),n.nodeCleanupFunctions.forEach((e=>e())),n.nodeCleanupFunctions.clear(),n}(t):wn()));const p=jn((()=>null===kn||void 0===kn?void 0:kn(i,(()=>i.current.currentTree.version))),[i]);return Fn((()=>{const e=h.current;for(const t of new Set(e.getState().knownAtoms))An(e,t,"get");return()=>{for(const t of e.getState().knownAtoms)xn(e,t)}}),[h]),r.createElement(Wn.Provider,{value:h},r.createElement(Gn.Provider,{value:p},r.createElement(Kn,{setNotifyBatcherOfChange:d}),o))}var Jn={RecoilRoot:function(e){const{override:t,...n}=e,o=qn();return!1===t&&o.current!==Vn?e.children:r.createElement(Qn,n)},useStoreRef:qn,useRecoilMutableSource:function(){const e=Ln(Gn);return null==e&&Z("Attempted to use a Recoil hook outside of a . must be an ancestor of any component that uses Recoil hooks."),e},useRecoilStoreID:function(){return qn().current.storeID},notifyComponents_FOR_TESTING:Yn,sendEndOfBatchNotifications_FOR_TESTING:Xn};var er=function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0,r=e.length;n{t.current=e})),t.current};const{useStoreRef:or}=Jn,{SUSPENSE_TIMEOUT_MS:ir}=Rt,{updateRetainCount:ar}=Rt,{RetentionZone:sr}=Me,{useEffect:ur,useRef:lr}=r,{isSSR:cr}=Ut;var fr=function(e){if(P("recoil_memory_managament_2020"))return function(e){const t=Array.isArray(e)?e:[e],n=t.map((e=>e instanceof sr?e:e.key)),r=or();ur((()=>{if(!P("recoil_memory_managament_2020"))return;const e=r.current;if(o.current&&!cr)window.clearTimeout(o.current),o.current=null;else for(const t of n)ar(e,t,1);return()=>{for(const t of n)ar(e,t,-1)}}),[r,...n]);const o=lr(),i=rr(n);if(!cr&&(void 0===i||!er(i,n))){const e=r.current;for(const t of n)ar(e,t,1);if(i)for(const t of i)ar(e,t,-1);o.current&&window.clearTimeout(o.current),o.current=window.setTimeout((()=>{o.current=null;for(const t of n)ar(e,t,-1)}),ir)}}(e)};var dr=function(){return""};const{batchUpdates:hr}=Dt,{DEFAULT_VALUE:pr}=se,{currentRendererSupportsUseSyncExternalStore:gr,reactMode:vr,useMutableSource:yr,useSyncExternalStore:mr}=B,{useRecoilMutableSource:br,useStoreRef:_r}=Jn,{isRecoilValue:wr}=K,{AbstractRecoilValue:xr,getRecoilValueAsLoadable:Sr,setRecoilValue:Ar,setUnvalidatedRecoilValue:Er,subscribeToRecoilValue:Cr}=gt,{useCallback:Rr,useEffect:Or,useMemo:Tr,useRef:kr,useState:Mr}=r,{setByAddingToSet:Pr}=Pe,{isSSR:Ir}=Ut;function Nr(e,t,n){if("hasValue"===e.state)return e.contents;if("loading"===e.state){throw new Promise((t=>{const r=n.current.getState().suspendedComponentResolvers;r.add(t),Ir&&a(e.contents)&&e.contents.finally((()=>{r.delete(t)}))}))}throw"hasError"===e.state?e.contents:i(`Invalid value of loadable atom "${t.key}"`)}function Dr(e){const t=_r(),n=dr(),r=Rr((()=>{var n;const r=t.current,o=r.getState(),i=vr().early&&null!==(n=o.nextTree)&&void 0!==n?n:o.currentTree;return{loadable:Sr(r,e,i),key:e.key}}),[t,e]),o=Rr((e=>{let t;return()=>{var n,r;const o=e();return null!==(n=t)&&void 0!==n&&n.loadable.is(o.loadable)&&(null===(r=t)||void 0===r?void 0:r.key)===o.key?t:(t=o,o)}}),[]),i=Tr((()=>o(r)),[r,o]),a=Rr((r=>{const o=t.current;return Cr(o,e,r,n).release}),[t,e,n]);return mr(a,i,i).loadable}function Lr(e){const t=_r(),n=Rr((()=>{var n;const r=t.current,o=r.getState(),i=vr().early&&null!==(n=o.nextTree)&&void 0!==n?n:o.currentTree;return Sr(r,e,i)}),[t,e]),r=Rr((()=>n()),[n]),o=dr(),a=Rr(((r,i)=>{const a=t.current;return Cr(a,e,(()=>{if(!P("recoil_suppress_rerender_in_callback"))return i();const e=n();l.current.is(e)||i(),l.current=e}),o).release}),[t,e,o,n]),s=br();if(null==s)throw i("Recoil hooks must be used in components contained within a component.");const u=yr(s,r,a),l=kr(u);return Or((()=>{l.current=u})),u}function Fr(e){const t=_r(),n=dr(),r=Rr((()=>{var n;const r=t.current,o=r.getState(),i=vr().early&&null!==(n=o.nextTree)&&void 0!==n?n:o.currentTree;return Sr(r,e,i)}),[t,e]),o=Rr((()=>({loadable:r(),key:e.key})),[r,e.key]),i=Rr((e=>{const t=o();return e.loadable.is(t.loadable)&&e.key===t.key?e:t}),[o]);Or((()=>{const r=Cr(t.current,e,(e=>{s(i)}),n);return s(i),r.release}),[n,e,t,i]);const[a,s]=Mr(o);return a.key!==e.key?o().loadable:a.loadable}function jr(e){const t=_r(),[,n]=Mr([]),r=dr(),o=Rr((()=>{var n;const r=t.current,o=r.getState(),i=vr().early&&null!==(n=o.nextTree)&&void 0!==n?n:o.currentTree;return Sr(r,e,i)}),[t,e]),i=o(),a=kr(i);return Or((()=>{a.current=i})),Or((()=>{const i=t.current,s=i.getState(),u=Cr(i,e,(e=>{var t;if(!P("recoil_suppress_rerender_in_callback"))return n([]);const r=o();null!==(t=a.current)&&void 0!==t&&t.is(r)||n(r),a.current=r}),r);if(s.nextTree)i.getState().queuedComponentCallbacks_DEPRECATED.push((()=>{a.current=null,n([])}));else{var l;if(!P("recoil_suppress_rerender_in_callback"))return n([]);const e=o();null!==(l=a.current)&&void 0!==l&&l.is(e)||n(e),a.current=e}return u.release}),[r,o,e,t]),i}function Ur(e){return P("recoil_memory_managament_2020")&&fr(e),{TRANSITION_SUPPORT:Fr,SYNC_EXTERNAL_STORE:gr()?Dr:Fr,MUTABLE_SOURCE:Lr,LEGACY:jr}[vr().mode](e)}function zr(e){const t=_r();return Nr(Ur(e),e,t)}function Br(e){const t=_r();return Rr((n=>{Ar(t.current,e,n)}),[t,e])}function Vr(e){return P("recoil_memory_managament_2020")&&fr(e),Fr(e)}function $r(e){const t=_r();return Nr(Vr(e),e,t)}var Hr={recoilComponentGetRecoilValueCount_FOR_TESTING:{current:0},useRecoilInterface:function(){const e=dr(),t=_r(),[,n]=Mr([]),r=kr(new Set);r.current=new Set;const o=kr(new Set),i=kr(new Map),a=Rr((e=>{const t=i.current.get(e);t&&(t.release(),i.current.delete(e))}),[i]),s=Rr(((e,t)=>{i.current.has(t)&&n([])}),[]);return Or((()=>{const n=t.current;ye(r.current,o.current).forEach((t=>{if(i.current.has(t))return void Z(`Double subscription to RecoilValue "${t}"`);const r=Cr(n,new xr(t),(e=>s(e,t)),e);i.current.set(t,r);n.getState().nextTree?n.getState().queuedComponentCallbacks_DEPRECATED.push((()=>{s(n.getState(),t)})):s(n.getState(),t)})),ye(o.current,r.current).forEach((e=>{a(e)})),o.current=r.current})),Or((()=>{const n=i.current;return ye(r.current,new Set(n.keys())).forEach((r=>{const o=Cr(t.current,new xr(r),(e=>s(e,r)),e);n.set(r,o)})),()=>n.forEach(((e,t)=>a(t)))}),[e,t,a,s]),Tr((()=>{function e(e){return n=>{Ar(t.current,e,n)}}function n(e){var n;r.current.has(e.key)||(r.current=Pr(r.current,e.key));const o=t.current.getState();return Sr(t.current,e,vr().early&&null!==(n=o.nextTree)&&void 0!==n?n:o.currentTree)}function o(e){return Nr(n(e),e,t)}return{getRecoilValue:o,getRecoilValueLoadable:n,getRecoilState:function(t){return[o(t),e(t)]},getRecoilStateLoadable:function(t){return[n(t),e(t)]},getSetRecoilState:e,getResetRecoilState:function(e){return()=>Ar(t.current,e,pr)}}}),[r,t])},useRecoilState:function(e){return[zr(e),Br(e)]},useRecoilStateLoadable:function(e){return[Ur(e),Br(e)]},useRecoilValue:zr,useRecoilValueLoadable:Ur,useResetRecoilState:function(e){const t=_r();return Rr((()=>{Ar(t.current,e,pr)}),[t,e])},useSetRecoilState:Br,useSetUnvalidatedAtomValues:function(){const e=_r();return(t,n={})=>{hr((()=>{e.current.addTransactionMetadata(n),t.forEach(((t,n)=>Er(e.current,new xr(n),t)))}))}},useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:Vr,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:$r,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:function(e){return[$r(e),Br(e)]}};var Wr=function(e,t){const n=new Map;for(const[r,o]of e)t(o,r)&&n.set(r,o);return n};var qr=function(e,t){const n=new Set;for(const r of e)t(r)&&n.add(r);return n};var Gr=function(...e){const t=new Map;for(let n=0;nt.current.subscribeToTransactions(e).release),[e,t])}function lo(e){const t=e.atomValues.toMap(),n=me(Wr(t,((e,t)=>{const n=Kr(t).persistence_UNSTABLE;return null!=n&&"none"!==n.type&&"hasValue"===e.state})),(e=>e.contents));return Gr(e.nonvalidatedAtoms.toMap(),n)}function co(e,t){var n;const r=e.getState(),o=null!==(n=r.nextTree)&&void 0!==n?n:r.currentTree,i=t.getStore_INTERNAL().getState().currentTree;Yr((()=>{const n=new Set;for(const e of[o.atomValues.keys(),i.atomValues.keys()])for(const t of e){var r,a;(null===(r=o.atomValues.get(t))||void 0===r?void 0:r.contents)!==(null===(a=i.atomValues.get(t))||void 0===a?void 0:a.contents)&&Kr(t).shouldRestoreFromSnapshots&&n.add(t)}n.forEach((t=>{eo(e,new Jr(t),i.atomValues.has(t)?s(i.atomValues.get(t)):Xr)})),e.replaceState((e=>({...e,stateID:t.getID()})))}))}var fo={useRecoilSnapshot:function(){const e=Qr(),[t,n]=ao((()=>no(e.current))),r=rr(t),o=io(),i=io();if(uo(ro((e=>n(no(e))),[])),oo((()=>{const e=t.retain();var n;o.current&&!so&&(window.clearTimeout(o.current),o.current=null,null===(n=i.current)||void 0===n||n.call(i),i.current=null);return()=>{window.setTimeout(e,10)}}),[t]),r!==t&&!so){var a;if(o.current)window.clearTimeout(o.current),o.current=null,null===(a=i.current)||void 0===a||a.call(i),i.current=null;i.current=t.retain(),o.current=window.setTimeout((()=>{var e;o.current=null,null===(e=i.current)||void 0===e||e.call(i),i.current=null}),to)}return t},gotoSnapshot:co,useGotoRecoilSnapshot:function(){const e=Qr();return ro((t=>co(e.current,t)),[e])},useRecoilTransactionObserver:function(e){uo(ro((t=>{const n=no(t,"latest"),r=no(t,"previous");e({snapshot:n,previousSnapshot:r})}),[e]))},useTransactionObservation_DEPRECATED:function(e){uo(ro((t=>{let n=t.getState().previousTree;const r=t.getState().currentTree;n||(L("Transaction subscribers notified without a previous tree being present -- this is a bug in Recoil"),n=t.getState().currentTree);const o=lo(r),i=lo(n),a=me(Zr,(e=>{var t,n,r,o;return{persistence_UNSTABLE:{type:null!==(t=null===(n=e.persistence_UNSTABLE)||void 0===n?void 0:n.type)&&void 0!==t?t:"none",backButton:null!==(r=null===(o=e.persistence_UNSTABLE)||void 0===o?void 0:o.backButton)&&void 0!==r&&r}}})),s=qr(r.dirtyAtoms,(e=>o.has(e)||i.has(e)));e({atomValues:o,previousAtomValues:i,atomInfo:a,modifiedAtoms:s,transactionMetadata:{...r.transactionMetadata}})}),[e]))},useTransactionSubscription_DEPRECATED:uo};const{peekNodeInfo:ho}=We,{useStoreRef:po}=Jn;var go=function(){const e=po();return({key:t})=>ho(e.current,e.current.getState().currentTree,t)};const{reactMode:vo}=B,{RecoilRoot:yo,useStoreRef:mo}=Jn,{useMemo:bo}=r;var _o=function(){"MUTABLE_SOURCE"===vo().mode&&console.warn("Warning: There are known issues using useRecoilBridgeAcrossReactRoots() in recoil_mutable_source rendering mode. Please consider upgrading to recoil_sync_external_store mode.");const e=mo().current;return bo((()=>function({children:t}){return r.createElement(yo,{store_INTERNAL:e},t)}),[e])};const{loadableWithValue:wo}=O,{initializeNode:xo}=We,{DEFAULT_VALUE:So,getNode:Ao}=se,{copyTreeState:Eo,getRecoilValueAsLoadable:Co,invalidateDownstreams:Ro,writeLoadableToTreeState:Oo}=gt;function To(e){return"atom"===Ao(e.key).nodeType}class ko{constructor(e,t){u(this,"_store",void 0),u(this,"_treeState",void 0),u(this,"_changes",void 0),u(this,"get",(e=>{if(this._changes.has(e.key))return this._changes.get(e.key);if(!To(e))throw i("Reading selectors within atomicUpdate is not supported");const t=Co(this._store,e,this._treeState);if("hasValue"===t.state)return t.contents;throw"hasError"===t.state?t.contents:i(`Expected Recoil atom ${e.key} to have a value, but it is in a loading state.`)})),u(this,"set",((e,t)=>{if(!To(e))throw i("Setting selectors within atomicUpdate is not supported");if("function"===typeof t){const n=this.get(e);this._changes.set(e.key,t(n))}else xo(this._store,e.key,"set"),this._changes.set(e.key,t)})),u(this,"reset",(e=>{this.set(e,So)})),this._store=e,this._treeState=t,this._changes=new Map}newTreeState_INTERNAL(){if(0===this._changes.size)return this._treeState;const e=Eo(this._treeState);for(const[t,n]of this._changes)Oo(e,t,wo(n));return Ro(this._store,e),e}}var Mo=function(e){return t=>{e.replaceState((n=>{const r=new ko(e,n);return t(r),r.newTreeState_INTERNAL()}))}},Po=Mo,Io=Object.freeze({__proto__:null,atomicUpdater:Po});var No=function(e,t){if(!e)throw new Error(t)};const{atomicUpdater:Do}=Io,{batchUpdates:Lo}=Dt,{DEFAULT_VALUE:Fo}=se,{useStoreRef:jo}=Jn,{refreshRecoilValue:Uo,setRecoilValue:zo}=gt,{cloneSnapshot:Bo}=vn,{gotoSnapshot:Vo}=fo,{useCallback:$o}=r;class Ho{}const Wo=new Ho;function qo(e,t,n,r){let o,s=Wo;var u;(Lo((()=>{const a="useRecoilCallback() expects a function that returns a function: it accepts a function of the type (RecoilInterface) => (Args) => ReturnType and returns a callback function (Args) => ReturnType, where RecoilInterface is an object {snapshot, set, ...} and Args and ReturnType are the argument and return types of the callback you want to create. Please see the docs at recoiljs.org for details.";if("function"!==typeof t)throw i(a);const u=Ne({...null!==r&&void 0!==r?r:{},set:(t,n)=>zo(e,t,n),reset:t=>zo(e,t,Fo),refresh:t=>Uo(e,t),gotoSnapshot:t=>Vo(e,t),transact_UNSTABLE:t=>Do(e)(t)},{snapshot:()=>{const t=Bo(e);return o=t.retain(),t}}),l=t(u);if("function"!==typeof l)throw i(a);s=l(...n)})),s instanceof Ho&&No(!1),a(s))?s=s.finally((()=>{var e;null===(e=o)||void 0===e||e()})):null===(u=o)||void 0===u||u();return s}var Go={recoilCallback:qo,useRecoilCallback:function(e,t){const n=jo();return $o(((...t)=>qo(n.current,e,t)),null!=t?[...t,n]:void 0)}};const{useStoreRef:Yo}=Jn,{refreshRecoilValue:Xo}=gt,{useCallback:Ko}=r;var Zo=function(e){const t=Yo();return Ko((()=>{const n=t.current;Xo(n,e)}),[e,t])};const{atomicUpdater:Qo}=Io,{useStoreRef:Jo}=Jn,{useMemo:ei}=r;var ti=function(e,t){const n=Jo();return ei((()=>(...t)=>{Qo(n.current)((n=>{e(n)(...t)}))}),null!=t?[...t,n]:void 0)};var ni=class{constructor(e){u(this,"value",void 0),this.value=e}},ri=Object.freeze({__proto__:null,WrappedValue:ni});const{isFastRefreshEnabled:oi}=B;class ii extends Error{}var ai=class{constructor(e){var t,n,r;u(this,"_name",void 0),u(this,"_numLeafs",void 0),u(this,"_root",void 0),u(this,"_onHit",void 0),u(this,"_onSet",void 0),u(this,"_mapNodeValue",void 0),this._name=null===e||void 0===e?void 0:e.name,this._numLeafs=0,this._root=null,this._onHit=null!==(t=null===e||void 0===e?void 0:e.onHit)&&void 0!==t?t:()=>{},this._onSet=null!==(n=null===e||void 0===e?void 0:e.onSet)&&void 0!==n?n:()=>{},this._mapNodeValue=null!==(r=null===e||void 0===e?void 0:e.mapNodeValue)&&void 0!==r?r:e=>e}size(){return this._numLeafs}root(){return this._root}get(e,t){var n;return null===(n=this.getLeafNode(e,t))||void 0===n?void 0:n.value}getLeafNode(e,t){if(null==this._root)return;let n=this._root;for(;n;){if(null===t||void 0===t||t.onNodeVisit(n),"leaf"===n.type)return this._onHit(n),n;const r=this._mapNodeValue(e(n.nodeKey));n=n.branches.get(r)}}set(e,t,n){const r=()=>{var r,o,i,a;let s,u;for(const[t,p]of e){var l,c,f;const e=this._root;if("leaf"===(null===e||void 0===e?void 0:e.type))throw this.invalidCacheError();const r=s;if(s=r?r.branches.get(u):e,s=null!==(l=s)&&void 0!==l?l:{type:"branch",nodeKey:t,parent:r,branches:new Map,branchKey:u},"branch"!==s.type||s.nodeKey!==t)throw this.invalidCacheError();null===r||void 0===r||r.branches.set(u,s),null===n||void 0===n||null===(c=n.onNodeVisit)||void 0===c||c.call(n,s),u=this._mapNodeValue(p),this._root=null!==(f=this._root)&&void 0!==f?f:s}const d=s?null===(r=s)||void 0===r?void 0:r.branches.get(u):this._root;if(null!=d&&("leaf"!==d.type||d.branchKey!==u))throw this.invalidCacheError();const h={type:"leaf",value:t,parent:s,branchKey:u};null===(o=s)||void 0===o||o.branches.set(u,h),this._root=null!==(i=this._root)&&void 0!==i?i:h,this._numLeafs++,this._onSet(h),null===n||void 0===n||null===(a=n.onNodeVisit)||void 0===a||a.call(n,h)};try{r()}catch(o){if(!(o instanceof ii))throw o;this.clear(),r()}}delete(e){const t=this.root();if(!t)return!1;if(e===t)return this._root=null,this._numLeafs=0,!0;let n=e.parent,r=e.branchKey;for(;n;){var o;if(n.branches.delete(r),n===t)return 0===n.branches.size?(this._root=null,this._numLeafs=0):this._numLeafs--,!0;if(n.branches.size>0)break;r=null===(o=n)||void 0===o?void 0:o.branchKey,n=n.parent}for(;n!==t;n=n.parent)if(null==n)return!1;return this._numLeafs--,!0}clear(){this._numLeafs=0,this._root=null}invalidCacheError(){const e=oi()?"Possible Fast Refresh module reload detected. This may also be caused by an selector returning inconsistent values. Resetting cache.":"Invalid cache values. This happens when selectors do not return consistent values for the same input dependency values. That may also be caused when using Fast Refresh to change a selector implementation. Resetting cache.";throw L(e+(null!=this._name?` - ${this._name}`:"")),new ii}},si=Object.freeze({__proto__:null,TreeCache:ai});var ui=class{constructor(e){var t;u(this,"_maxSize",void 0),u(this,"_size",void 0),u(this,"_head",void 0),u(this,"_tail",void 0),u(this,"_map",void 0),u(this,"_keyMapper",void 0),this._maxSize=e.maxSize,this._size=0,this._head=null,this._tail=null,this._map=new Map,this._keyMapper=null!==(t=e.mapKey)&&void 0!==t?t:e=>e}head(){return this._head}tail(){return this._tail}size(){return this._size}maxSize(){return this._maxSize}has(e){return this._map.has(this._keyMapper(e))}get(e){const t=this._keyMapper(e),n=this._map.get(t);if(n)return this.set(e,n.value),n.value}set(e,t){const n=this._keyMapper(e);this._map.get(n)&&this.delete(e);const r=this.head(),o={key:e,right:r,left:null,value:t};r?r.left=o:this._tail=o,this._map.set(n,o),this._head=o,this._size++,this._maybeDeleteLRU()}_maybeDeleteLRU(){this.size()>this.maxSize()&&this.deleteLru()}deleteLru(){const e=this.tail();e&&this.delete(e.key)}delete(e){const t=this._keyMapper(e);if(!this._size||!this._map.has(t))return;const n=s(this._map.get(t)),r=n.right,o=n.left;r&&(r.left=n.left),o&&(o.right=n.right),n===this.head()&&(this._head=r),n===this.tail()&&(this._tail=o),this._map.delete(t),this._size--}clear(){this._size=0,this._head=null,this._tail=null,this._map=new Map}},li=Object.freeze({__proto__:null,LRUCache:ui});const{LRUCache:ci}=li,{TreeCache:fi}=si;var di=function({name:e,maxSize:t,mapNodeValue:n=(e=>e)}){const r=new ci({maxSize:t}),o=new fi({name:e,mapNodeValue:n,onHit:e=>{r.set(e,!0)},onSet:e=>{const n=r.tail();r.set(e,!0),n&&o.size()>t&&o.delete(n.key)}});return o};function hi(e,t,n){if("string"===typeof e&&!e.includes('"')&&!e.includes("\\"))return`"${e}"`;switch(typeof e){case"undefined":return"";case"boolean":return e?"true":"false";case"number":case"symbol":return String(e);case"string":return JSON.stringify(e);case"function":if(!0!==(null===t||void 0===t?void 0:t.allowFunctions))throw i("Attempt to serialize function in a Recoil cache key");return`__FUNCTION(${e.name})__`}if(null===e)return"null";var r;if("object"!==typeof e)return null!==(r=JSON.stringify(e))&&void 0!==r?r:"";if(a(e))return"__PROMISE__";if(Array.isArray(e))return`[${e.map(((e,n)=>hi(e,t,n.toString())))}]`;if("function"===typeof e.toJSON)return hi(e.toJSON(n),t,n);if(e instanceof Map){const r={};for(const[n,o]of e)r["string"===typeof n?n:hi(n,t)]=o;return hi(r,t,n)}return e instanceof Set?hi(Array.from(e).sort(((e,n)=>hi(e,t).localeCompare(hi(n,t)))),t,n):void 0!==Symbol&&null!=e[Symbol.iterator]&&"function"===typeof e[Symbol.iterator]?hi(Array.from(e),t,n):`{${Object.keys(e).filter((t=>void 0!==e[t])).sort().map((n=>`${hi(n,t)}:${hi(e[n],t,n)}`)).join(",")}}`}var pi=function(e,t={allowFunctions:!1}){return hi(e,t)};const{TreeCache:gi}=si,vi={equality:"reference",eviction:"keep-all",maxSize:1/0};var yi=function({equality:e=vi.equality,eviction:t=vi.eviction,maxSize:n=vi.maxSize}=vi,r){const o=function(e){switch(e){case"reference":return e=>e;case"value":return e=>pi(e)}throw i(`Unrecognized equality policy ${e}`)}(e);return function(e,t,n,r){switch(e){case"keep-all":return new gi({name:r,mapNodeValue:n});case"lru":return di({name:r,maxSize:s(t),mapNodeValue:n});case"most-recent":return di({name:r,maxSize:1,mapNodeValue:n})}throw i(`Unrecognized eviction policy ${e}`)}(t,n,o,r)};const{isReactNative:mi,isWindow:bi}=Ut;var _i={startPerfBlock:function(e){return()=>null}};const{isLoadable:wi,loadableWithError:xi,loadableWithPromise:Si,loadableWithValue:Ai}=O,{WrappedValue:Ei}=ri,{getNodeLoadable:Ci,peekNodeLoadable:Ri,setNodeValue:Oi}=We,{saveDepsToStore:Ti}=_e,{DEFAULT_VALUE:ki,getConfigDeletionHandler:Mi,getNode:Pi,registerNode:Ii}=se,{isRecoilValue:Ni}=K,{markRecoilValueModified:Di}=gt,{retainedByOptionWithDefault:Li}=Rt,{recoilCallback:Fi}=Go,{startPerfBlock:ji}=_i;class Ui{}const zi=new Ui,Bi=[],Vi=new Map,$i=(()=>{let e=0;return()=>e++})();function Hi(e){let t=null;const{key:n,get:r,cachePolicy_UNSTABLE:o}=e,u=null!=e.set?e.set:void 0;const l=new Set,c=yi(null!==o&&void 0!==o?o:{equality:"reference",eviction:"keep-all"},n),f=Li(e.retainedBy_UNSTABLE),d=new Map;let h=0;function p(){return!P("recoil_memory_managament_2020")||h>0}function g(e){return e.getState().knownSelectors.add(n),h++,()=>{h--}}function v(){return void 0!==Mi(n)&&!p()}function y(e,t,n,r,o){k(t,r,o),m(e,n)}function m(e,t){T(e,t)&&O(e),b(t,!0)}function b(e,n){const r=Vi.get(e);if(null!=r){for(const e of r)Di(e,s(t));n&&Vi.delete(e)}}function _(e,t){let n=Vi.get(t);null==n&&Vi.set(t,n=new Set),n.add(e)}function w(e,t,n,r,o,i){return t.then((r=>{if(!p())throw O(e),zi;null!=i.loadingDepKey&&i.loadingDepPromise===t?n.atomValues.set(i.loadingDepKey,Ai(r)):e.getState().knownSelectors.forEach((e=>{n.atomValues.delete(e)}));const a=A(e,n);if(a&&"loading"!==a.state){if((T(e,o)||null==R(e))&&m(e,o),"hasValue"===a.state)return a.contents;throw a.contents}if(!T(e,o)){const t=C(e,n);if(null!=t)return t.loadingLoadable.contents}const[s,u]=S(e,n,o);if("loading"!==s.state&&y(e,n,o,s,u),"hasError"===s.state)throw s.contents;return s.contents})).catch((t=>{if(t instanceof Ui)throw zi;if(!p())throw O(e),zi;const i=xi(t);throw y(e,n,o,i,r),t}))}function x(e,t,r,o){var i,a,s,u,c,f,d;(T(e,o)||t.version===(null===(i=e.getState())||void 0===i||null===(a=i.currentTree)||void 0===a?void 0:a.version)||t.version===(null===(s=e.getState())||void 0===s||null===(u=s.nextTree)||void 0===u?void 0:u.version))&&Ti(n,r,e,null!==(c=null===(f=e.getState())||void 0===f||null===(d=f.nextTree)||void 0===d?void 0:d.version)&&void 0!==c?c:e.getState().currentTree.version);for(const n of r)l.add(n)}function S(e,o,u){const l=ji(n);let c=!0,f=!0;const d=()=>{l(),f=!1};let h,g,v=!1;const m={loadingDepKey:null,loadingDepPromise:null},_=new Map;function S({key:t}){const n=Ci(e,o,t);switch(_.set(t,n),c||(x(e,o,new Set(_.keys()),u),function(e,t){T(e,t)&&(s(R(e)).stateVersions.clear(),b(t,!1))}(e,u)),n.state){case"hasValue":return n.contents;case"hasError":throw n.contents;case"loading":throw m.loadingDepKey=t,m.loadingDepPromise=n.contents,n.contents}throw i("Invalid Loadable state")}const A=n=>(...r)=>{if(f)throw i("Callbacks from getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can work with Recoil state without a subscription.");return null==t&&No(!1),Fi(e,n,r,{node:t})};try{h=r({get:S,getCallback:A}),h=Ni(h)?S(h):h,wi(h)&&("hasError"===h.state&&(v=!0),h=h.contents),a(h)?h=function(e,t,n,r,o,i){return t.then((t=>{if(!p())throw O(e),zi;const i=Ai(t);return y(e,n,o,i,r),t})).catch((t=>{if(!p())throw O(e),zi;if(a(t))return w(e,t,n,r,o,i);const s=xi(t);throw y(e,n,o,s,r),t}))}(e,h,o,_,u,m).finally(d):d(),h=h instanceof Ei?h.value:h}catch(E){h=E,a(h)?h=w(e,h,o,_,u,m).finally(d):(v=!0,d())}return g=v?xi(h):a(h)?Si(h):Ai(h),c=!1,function(e,t,n){if(T(e,t)){const t=R(e);null!=t&&(t.depValuesDiscoveredSoFarDuringAsyncWork=n)}}(e,u,_),x(e,o,new Set(_.keys()),u),[g,_]}function A(e,t){let r=t.atomValues.get(n);if(null!=r)return r;const o=new Set;try{r=c.get((n=>("string"!==typeof n&&No(!1),Ci(e,t,n).contents)),{onNodeVisit:e=>{"branch"===e.type&&e.nodeKey!==n&&o.add(e.nodeKey)}})}catch(s){throw i(`Problem with cache lookup for selector "${n}": ${s.message}`)}var a;r&&(t.atomValues.set(n,r),x(e,t,o,null===(a=R(e))||void 0===a?void 0:a.executionID));return r}function E(e,t){const n=A(e,t);if(null!=n)return O(e),n;const r=C(e,t);var o;if(null!=r)return"loading"===(null===(o=r.loadingLoadable)||void 0===o?void 0:o.state)&&_(e,r.executionID),r.loadingLoadable;const i=$i(),[a,s]=S(e,t,i);return"loading"===a.state?(!function(e,t,n,r,o){d.set(e,{depValuesDiscoveredSoFarDuringAsyncWork:r,executionID:t,loadingLoadable:n,stateVersions:new Map([[o.version,!0]])})}(e,i,a,s,t),_(e,i)):(O(e),k(t,a,s)),a}function C(e,t){const n=Lt([d.has(e)?[s(d.get(e))]:[],Q(Ie(d,(([t])=>t!==e)),(([,e])=>e))]);function r(n){for(const[r,o]of n)if(!Ci(e,t,r).is(o))return!0;return!1}for(const o of n){if(o.stateVersions.get(t.version)||!r(o.depValuesDiscoveredSoFarDuringAsyncWork))return o.stateVersions.set(t.version,!0),o;o.stateVersions.set(t.version,!1)}}function R(e){return d.get(e)}function O(e){d.delete(e)}function T(e,t){var n;return t===(null===(n=R(e))||void 0===n?void 0:n.executionID)}function k(e,t,r){e.atomValues.set(n,t);try{c.set(function(e){return Array.from(e.entries()).map((([e,t])=>[e,t.contents]))}(r),t)}catch(o){throw i(`Problem with setting cache for selector "${n}": ${o.message}`)}}function M(e,t){const r=t.atomValues.get(n);return null!=r?r:c.get((n=>{var r;return"string"!==typeof n&&No(!1),null===(r=Ri(e,t,n))||void 0===r?void 0:r.contents}))}function I(e,t){return function(e){if(Bi.includes(n)){const e=`Recoil selector has circular dependencies: ${Bi.slice(Bi.indexOf(n)).join(" \u2192 ")}`;return xi(i(e))}Bi.push(n);try{return e()}finally{Bi.pop()}}((()=>E(e,t)))}function N(e){e.atomValues.delete(n)}function D(e,n){null==t&&No(!1);for(const t of l){var r;const o=Pi(t);null===(r=o.clearCache)||void 0===r||r.call(o,e,n)}l.clear(),N(n),c.clear(),Di(e,t)}if(null!=u){return t=Ii({key:n,nodeType:"selector",peek:M,get:I,set:(e,t,r)=>{let o=!1;const s=new Map;function l({key:r}){if(o)throw i("Recoil: Async selector sets are not currently supported.");const a=Ci(e,t,r);if("hasValue"===a.state)return a.contents;if("loading"===a.state){const e=`Getting value of asynchronous atom or selector "${r}" in a pending state while setting selector "${n}" is not yet supported.`;throw L(e),i(e)}throw a.contents}function c(n,r){if(o){const e="Recoil: Async selector sets are not currently supported.";throw L(e),i(e)}const a="function"===typeof r?r(l(n)):r;Oi(e,t,n.key,a).forEach(((e,t)=>s.set(t,e)))}const f=u({set:c,get:l,reset:function(e){c(e,ki)}},r);if(void 0!==f)throw a(f)?i("Recoil: Async selector sets are not currently supported."):i("Recoil: selector set should be a void function.");return o=!0,s},init:g,invalidate:N,clearCache:D,shouldDeleteConfigOnRelease:v,dangerouslyAllowMutability:e.dangerouslyAllowMutability,shouldRestoreFromSnapshots:!1,retainedBy:f})}return t=Ii({key:n,nodeType:"selector",peek:M,get:I,init:g,invalidate:N,clearCache:D,shouldDeleteConfigOnRelease:v,dangerouslyAllowMutability:e.dangerouslyAllowMutability,shouldRestoreFromSnapshots:!1,retainedBy:f})}Hi.value=e=>new Ei(e);var Wi=Hi;const{isLoadable:qi,loadableWithError:Gi,loadableWithPromise:Yi,loadableWithValue:Xi}=O,{WrappedValue:Ki}=ri,{peekNodeInfo:Zi}=We,{DEFAULT_VALUE:Qi,DefaultValue:Ji,getConfigDeletionHandler:ea,registerNode:ta,setConfigDeletionHandler:na}=se,{isRecoilValue:ra}=K,{getRecoilValueAsLoadable:oa,markRecoilValueModified:ia,setRecoilValue:aa,setRecoilValueLoadable:sa}=gt,{retainedByOptionWithDefault:ua}=Rt,la=e=>e instanceof Ki?e.value:e;function ca(e){const{key:t,persistence_UNSTABLE:n}=e,r=ua(e.retainedBy_UNSTABLE);let o=0;function u(e){return Yi(e.then((e=>(c=Xi(e),e))).catch((e=>{throw c=Gi(e),e})))}let l,c=a(e.default)?u(e.default):qi(e.default)?"loading"===e.default.state?u(e.default.contents):e.default:Xi(la(e.default));d(c.contents);const f=new Map;function d(e){return e}function h(e,n){var r,o;return null!==(r=null!==(o=n.atomValues.get(t))&&void 0!==o?o:l)&&void 0!==r?r:c}const p=ta({key:t,nodeType:"atom",peek:h,get:function(e,r){if(r.atomValues.has(t))return s(r.atomValues.get(t));if(r.nonvalidatedAtoms.has(t)){if(null!=l)return l;if(null==n)return Z(`Tried to restore a persisted value for atom ${t} but it has no persistence settings.`),c;const e=r.nonvalidatedAtoms.get(t),o=n.validator(e,Qi),i=o instanceof Ji?c:Xi(o);return l=i,l}return c},set:function(e,n,r){if(n.atomValues.has(t)){const e=s(n.atomValues.get(t));if("hasValue"===e.state&&r===e.contents)return new Map}else if(!n.nonvalidatedAtoms.has(t)&&r instanceof Ji)return new Map;return l=void 0,(new Map).set(t,Xi(r))},init:function(n,r,s){var u;if(o++,n.getState().knownAtoms.add(t),"loading"===c.state){const y=()=>{var e;(null!==(e=n.getState().nextTree)&&void 0!==e?e:n.getState().currentTree).atomValues.has(t)||ia(n,p)};c.contents.finally(y)}const l=null!==(u=e.effects)&&void 0!==u?u:e.effects_UNSTABLE;if(null!=l){let m=Qi,b=!0,_=!1,w=null;function x(e){if(b&&e.key===t){const e=m;return e instanceof Ji?h(n,r):a(e)?Yi(e.then((e=>e instanceof Ji?c.toPromise():e))):Xi(e)}return oa(n,e)}function S(e){return x(e).toPromise()}function A(e){var r;const o=Zi(n,null!==(r=n.getState().nextTree)&&void 0!==r?r:n.getState().currentTree,e.key);return!b||e.key!==t||m instanceof Ji?o:{...o,isSet:!0,loadable:x(e)}}const E=e=>t=>{if(b){const n=x(p),r="hasValue"===n.state?n.contents:Qi;m="function"===typeof t?t(r):t,a(m)&&(m=m.then((t=>(w={effect:e,value:t},t))))}else{if(a(t))throw i("Setting atoms to async values is not implemented.");"function"!==typeof t&&(w={effect:e,value:la(t)}),aa(n,p,"function"===typeof t?n=>{const r=la(t(n));return w={effect:e,value:r},r}:la(t))}},C=e=>()=>E(e)(Qi),R=e=>r=>{var o;const{release:i}=n.subscribeToTransactions((n=>{var o;let{currentTree:i,previousTree:a}=n.getState();a||(L("Transaction subscribers notified without a next tree being present -- this is a bug in Recoil"),a=i);const s=null!==(o=i.atomValues.get(t))&&void 0!==o?o:c;if("hasValue"===s.state){var u,l,f,d;const n=s.contents,o=null!==(u=a.atomValues.get(t))&&void 0!==u?u:c,h="hasValue"===o.state?o.contents:Qi;(null===(l=w)||void 0===l?void 0:l.effect)!==e||(null===(f=w)||void 0===f?void 0:f.value)!==n?r(n,h,!i.atomValues.has(t)):(null===(d=w)||void 0===d?void 0:d.effect)===e&&(w=null)}}),t);f.set(n,[...null!==(o=f.get(n))&&void 0!==o?o:[],i])};for(const O of l)try{const T=O({node:p,storeID:n.storeID,parentStoreID_UNSTABLE:n.parentStoreID,trigger:s,setSelf:E(O),resetSelf:C(O),onSet:R(O),getPromise:S,getLoadable:x,getInfo_UNSTABLE:A});var d;if(null!=T)f.set(n,[...null!==(d=f.get(n))&&void 0!==d?d:[],T])}catch(v){m=v,_=!0}if(b=!1,!(m instanceof Ji)){var g;const k=_?Gi(m):a(m)?Yi(function(e,n){const r=n.then((n=>{var o,i;return(null===(i=(null!==(o=e.getState().nextTree)&&void 0!==o?o:e.getState().currentTree).atomValues.get(t))||void 0===i?void 0:i.contents)===r&&aa(e,p,n),n})).catch((n=>{var o,i;throw(null===(i=(null!==(o=e.getState().nextTree)&&void 0!==o?o:e.getState().currentTree).atomValues.get(t))||void 0===i?void 0:i.contents)===r&&sa(e,p,Gi(n)),n}));return r}(n,m)):Xi(la(m));k.contents,r.atomValues.set(t,k),null===(g=n.getState().nextTree)||void 0===g||g.atomValues.set(t,k)}}return()=>{var e;o--,null===(e=f.get(n))||void 0===e||e.forEach((e=>e())),f.delete(n)}},invalidate:function(){l=void 0},shouldDeleteConfigOnRelease:function(){return void 0!==ea(t)&&o<=0},dangerouslyAllowMutability:e.dangerouslyAllowMutability,persistence_UNSTABLE:e.persistence_UNSTABLE?{type:e.persistence_UNSTABLE.type,backButton:e.persistence_UNSTABLE.backButton}:void 0,shouldRestoreFromSnapshots:!0,retainedBy:r});return p}function fa(e){const{...t}=e,n="default"in e?e.default:new Promise((()=>{}));return ra(n)?function(e){const t=fa({...e,default:Qi,persistence_UNSTABLE:void 0===e.persistence_UNSTABLE?void 0:{...e.persistence_UNSTABLE,validator:t=>t instanceof Ji?t:s(e.persistence_UNSTABLE).validator(t,Qi)},effects:e.effects,effects_UNSTABLE:e.effects_UNSTABLE}),n=Wi({key:`${e.key}__withFallback`,get:({get:n})=>{const r=n(t);return r instanceof Ji?e.default:r},set:({set:e},n)=>e(t,n),cachePolicy_UNSTABLE:{eviction:"most-recent"},dangerouslyAllowMutability:e.dangerouslyAllowMutability});return na(n.key,ea(e.key)),n}({...t,default:n}):ca({...t,default:n})}fa.value=e=>new Ki(e);var da=fa;var ha=class{constructor(e){var t;u(this,"_map",void 0),u(this,"_keyMapper",void 0),this._map=new Map,this._keyMapper=null!==(t=null===e||void 0===e?void 0:e.mapKey)&&void 0!==t?t:e=>e}size(){return this._map.size}has(e){return this._map.has(this._keyMapper(e))}get(e){return this._map.get(this._keyMapper(e))}set(e,t){this._map.set(this._keyMapper(e),t)}delete(e){this._map.delete(this._keyMapper(e))}clear(){this._map.clear()}},pa=Object.freeze({__proto__:null,MapCache:ha});const{LRUCache:ga}=li,{MapCache:va}=pa,ya={equality:"reference",eviction:"none",maxSize:1/0};var ma=function({equality:e=ya.equality,eviction:t=ya.eviction,maxSize:n=ya.maxSize}=ya){const r=function(e){switch(e){case"reference":return e=>e;case"value":return e=>pi(e)}throw i(`Unrecognized equality policy ${e}`)}(e);return function(e,t,n){switch(e){case"keep-all":return new va({mapKey:n});case"lru":return new ga({mapKey:n,maxSize:s(t)});case"most-recent":return new ga({mapKey:n,maxSize:1})}throw i(`Unrecognized eviction policy ${e}`)}(t,n,r)};const{setConfigDeletionHandler:ba}=se;var _a=function(e){var t,n;const r=ma({equality:null!==(t=null===(n=e.cachePolicyForParams_UNSTABLE)||void 0===n?void 0:n.equality)&&void 0!==t?t:"value",eviction:"keep-all"});return t=>{var n,o;const i=r.get(t);if(null!=i)return i;const{cachePolicyForParams_UNSTABLE:a,...s}=e,u="default"in e?e.default:new Promise((()=>{})),l=da({...s,key:`${e.key}__${null!==(n=pi(t))&&void 0!==n?n:"void"}`,default:"function"===typeof u?u(t):u,retainedBy_UNSTABLE:"function"===typeof e.retainedBy_UNSTABLE?e.retainedBy_UNSTABLE(t):e.retainedBy_UNSTABLE,effects:"function"===typeof e.effects?e.effects(t):"function"===typeof e.effects_UNSTABLE?e.effects_UNSTABLE(t):null!==(o=e.effects)&&void 0!==o?o:e.effects_UNSTABLE});return r.set(t,l),ba(l.key,(()=>{r.delete(t)})),l}};const{setConfigDeletionHandler:wa}=se;let xa=0;var Sa=function(e){var t,n;const r=ma({equality:null!==(t=null===(n=e.cachePolicyForParams_UNSTABLE)||void 0===n?void 0:n.equality)&&void 0!==t?t:"value",eviction:"keep-all"});return t=>{var n;let o;try{o=r.get(t)}catch(f){throw i(`Problem with cache lookup for selector ${e.key}: ${f.message}`)}if(null!=o)return o;const a=`${e.key}__selectorFamily/${null!==(n=pi(t,{allowFunctions:!0}))&&void 0!==n?n:"void"}/${xa++}`,s=n=>e.get(t)(n),u=e.cachePolicy_UNSTABLE,l="function"===typeof e.retainedBy_UNSTABLE?e.retainedBy_UNSTABLE(t):e.retainedBy_UNSTABLE;let c;if(null!=e.set){const n=e.set;c=Wi({key:a,get:s,set:(e,r)=>n(t)(e,r),cachePolicy_UNSTABLE:u,dangerouslyAllowMutability:e.dangerouslyAllowMutability,retainedBy_UNSTABLE:l})}else c=Wi({key:a,get:s,cachePolicy_UNSTABLE:u,dangerouslyAllowMutability:e.dangerouslyAllowMutability,retainedBy_UNSTABLE:l});return r.set(t,c),wa(c.key,(()=>{r.delete(t)})),c}};const Aa=Sa({key:"__constant",get:e=>()=>e,cachePolicyForParams_UNSTABLE:{equality:"reference"}});var Ea=function(e){return Aa(e)};const Ca=Sa({key:"__error",get:e=>()=>{throw i(e)},cachePolicyForParams_UNSTABLE:{equality:"reference"}});var Ra=function(e){return Ca(e)};var Oa=function(e){return e};const{loadableWithError:Ta,loadableWithPromise:ka,loadableWithValue:Ma}=O;function Pa(e,t){const n=Array(t.length).fill(void 0),r=Array(t.length).fill(void 0);for(const[i,a]of t.entries())try{n[i]=e(a)}catch(o){r[i]=o}return[n,r]}function Ia(e){return null!=e&&!a(e)}function Na(e){return Array.isArray(e)?e:Object.getOwnPropertyNames(e).map((t=>e[t]))}function Da(e,t){return Array.isArray(e)?t:Object.getOwnPropertyNames(e).reduce(((e,n,r)=>({...e,[n]:t[r]})),{})}function La(e,t,n){return Da(e,n.map(((e,n)=>null==e?Ma(t[n]):a(e)?ka(e):Ta(e))))}var Fa={waitForNone:Sa({key:"__waitForNone",get:e=>({get:t})=>{const n=Na(e),[r,o]=Pa(t,n);return La(e,r,o)},dangerouslyAllowMutability:!0}),waitForAny:Sa({key:"__waitForAny",get:e=>({get:t})=>{const n=Na(e),[r,o]=Pa(t,n);return o.some((e=>!a(e)))?La(e,r,o):new Promise((t=>{for(const[n,i]of o.entries())a(i)&&i.then((i=>{r[n]=i,o[n]=void 0,t(La(e,r,o))})).catch((i=>{o[n]=i,t(La(e,r,o))}))}))},dangerouslyAllowMutability:!0}),waitForAll:Sa({key:"__waitForAll",get:e=>({get:t})=>{const n=Na(e),[r,o]=Pa(t,n);if(o.every((e=>null==e)))return Da(e,r);const i=o.find(Ia);if(null!=i)throw i;return Promise.all(o).then((t=>{return Da(e,(n=r,t.map(((e,t)=>void 0===e?n[t]:e))));var n}))},dangerouslyAllowMutability:!0}),waitForAllSettled:Sa({key:"__waitForAllSettled",get:e=>({get:t})=>{const n=Na(e),[r,o]=Pa(t,n);return o.every((e=>!a(e)))?La(e,r,o):Promise.all(o.map(((e,t)=>a(e)?e.then((e=>{r[t]=e,o[t]=void 0})).catch((e=>{r[t]=void 0,o[t]=e})):null))).then((()=>La(e,r,o)))},dangerouslyAllowMutability:!0}),noWait:Sa({key:"__noWait",get:e=>({get:t})=>{try{return Wi.value(Ma(t(e)))}catch(n){return Wi.value(a(n)?ka(n):Ta(n))}},dangerouslyAllowMutability:!0})};const{RecoilLoadable:ja}=O,{DefaultValue:Ua}=se,{RecoilRoot:za,useRecoilStoreID:Ba}=Jn,{isRecoilValue:Va}=K,{retentionZone:$a}=Me,{freshSnapshot:Ha}=vn,{useRecoilState:Wa,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:qa,useRecoilStateLoadable:Ga,useRecoilValue:Ya,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:Xa,useRecoilValueLoadable:Ka,useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:Za,useResetRecoilState:Qa,useSetRecoilState:Ja}=Hr,{useGotoRecoilSnapshot:es,useRecoilSnapshot:ts,useRecoilTransactionObserver:ns}=fo,{useRecoilCallback:rs}=Go,{noWait:os,waitForAll:is,waitForAllSettled:as,waitForAny:ss,waitForNone:us}=Fa;var ls={DefaultValue:Ua,isRecoilValue:Va,RecoilLoadable:ja,RecoilEnv:k,RecoilRoot:za,useRecoilStoreID:Ba,useRecoilBridgeAcrossReactRoots_UNSTABLE:_o,atom:da,selector:Wi,atomFamily:_a,selectorFamily:Sa,constSelector:Ea,errorSelector:Ra,readOnlySelector:Oa,noWait:os,waitForNone:us,waitForAny:ss,waitForAll:is,waitForAllSettled:as,useRecoilValue:Ya,useRecoilValueLoadable:Ka,useRecoilState:Wa,useRecoilStateLoadable:Ga,useSetRecoilState:Ja,useResetRecoilState:Qa,useGetRecoilValueInfo_UNSTABLE:go,useRecoilRefresher_UNSTABLE:Zo,useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE:Za,useRecoilValue_TRANSITION_SUPPORT_UNSTABLE:Xa,useRecoilState_TRANSITION_SUPPORT_UNSTABLE:qa,useRecoilCallback:rs,useRecoilTransaction_UNSTABLE:ti,useGotoRecoilSnapshot:es,useRecoilSnapshot:ts,useRecoilTransactionObserver_UNSTABLE:ns,snapshot_UNSTABLE:Ha,useRetain:fr,retentionZone:$a},cs=ls.RecoilRoot,fs=ls.atom,ds=ls.selector,hs=ls.atomFamily,ps=ls.selectorFamily,gs=ls.useRecoilValue,vs=ls.useRecoilValueLoadable,ys=ls.useRecoilState,ms=ls.useSetRecoilState,bs=ls.useResetRecoilState,_s=ls.useRecoilRefresher_UNSTABLE,ws=ls.useRecoilCallback},77675:(e,t,n)=>{"use strict";var r=n(43206),o=n(69675),i=Object;e.exports=r((function(){if(null==this||this!==i(this))throw new o("RegExp.prototype.flags getter called on non-object");var e="";return this.hasIndices&&(e+="d"),this.global&&(e+="g"),this.ignoreCase&&(e+="i"),this.multiline&&(e+="m"),this.dotAll&&(e+="s"),this.unicode&&(e+="u"),this.unicodeSets&&(e+="v"),this.sticky&&(e+="y"),e}),"get flags",!0)},71589:(e,t,n)=>{"use strict";var r=n(38452),o=n(10487),i=n(77675),a=n(15330),s=n(43984),u=o(a());r(u,{getPolyfill:a,implementation:i,shim:s}),e.exports=u},15330:(e,t,n)=>{"use strict";var r=n(77675),o=n(38452).supportsDescriptors,i=Object.getOwnPropertyDescriptor;e.exports=function(){if(o&&"gim"===/a/gim.flags){var e=i(RegExp.prototype,"flags");if(e&&"function"===typeof e.get&&"boolean"===typeof RegExp.prototype.dotAll&&"boolean"===typeof RegExp.prototype.hasIndices){var t="",n={};if(Object.defineProperty(n,"hasIndices",{get:function(){t+="d"}}),Object.defineProperty(n,"sticky",{get:function(){t+="y"}}),"dy"===t)return e.get}}return r}},43984:(e,t,n)=>{"use strict";var r=n(38452).supportsDescriptors,o=n(15330),i=Object.getOwnPropertyDescriptor,a=Object.defineProperty,s=TypeError,u=Object.getPrototypeOf,l=/a/;e.exports=function(){if(!r||!u)throw new s("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var e=o(),t=u(l),n=i(t,"flags");return n&&n.get===e||a(t,"flags",{configurable:!0,enumerable:!1,get:e}),e}},7463:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0>>1,o=e[r];if(!(0>>1;ri(u,n))li(c,u)?(e[r]=c,e[l]=n,r=l):(e[r]=u,e[s]=n,r=s);else{if(!(li(c,n)))break e;e[r]=c,e[l]=n,r=l}}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"===typeof performance&&"function"===typeof performance.now){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,u=s.now();t.unstable_now=function(){return s.now()-u}}var l=[],c=[],f=1,d=null,h=3,p=!1,g=!1,v=!1,y="function"===typeof setTimeout?setTimeout:null,m="function"===typeof clearTimeout?clearTimeout:null,b="undefined"!==typeof setImmediate?setImmediate:null;function _(e){for(var t=r(c);null!==t;){if(null===t.callback)o(c);else{if(!(t.startTime<=e))break;o(c),t.sortIndex=t.expirationTime,n(l,t)}t=r(c)}}function w(e){if(v=!1,_(e),!g)if(null!==r(l))g=!0,I(x);else{var t=r(c);null!==t&&N(w,t.startTime-e)}}function x(e,n){g=!1,v&&(v=!1,m(C),C=-1),p=!0;var i=h;try{for(_(n),d=r(l);null!==d&&(!(d.expirationTime>n)||e&&!T());){var a=d.callback;if("function"===typeof a){d.callback=null,h=d.priorityLevel;var s=a(d.expirationTime<=n);n=t.unstable_now(),"function"===typeof s?d.callback=s:d===r(l)&&o(l),_(n)}else o(l);d=r(l)}if(null!==d)var u=!0;else{var f=r(c);null!==f&&N(w,f.startTime-n),u=!1}return u}finally{d=null,h=i,p=!1}}"undefined"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,A=!1,E=null,C=-1,R=5,O=-1;function T(){return!(t.unstable_now()-Oe||125a?(e.sortIndex=i,n(c,e),null===r(l)&&e===r(c)&&(v?(m(C),C=-1):v=!0,N(w,i-a))):(e.sortIndex=s,n(l,e),g||p||(g=!0,I(x))),e},t.unstable_shouldYield=T,t.unstable_wrapCallback=function(e){var t=h;return function(){var n=h;h=t;try{return e.apply(this,arguments)}finally{h=n}}}},69982:(e,t,n)=>{"use strict";e.exports=n(7463)},96897:(e,t,n)=>{"use strict";var r=n(70453),o=n(30041),i=n(30592)(),a=n(75795),s=n(69675),u=r("%Math.floor%");e.exports=function(e,t){if("function"!==typeof e)throw new s("`fn` is not a function");if("number"!==typeof t||t<0||t>4294967295||u(t)!==t)throw new s("`length` must be a positive 32-bit integer");var n=arguments.length>2&&!!arguments[2],r=!0,l=!0;if("length"in e&&a){var c=a(e,"length");c&&!c.configurable&&(r=!1),c&&!c.writable&&(l=!1)}return(r||l||!n)&&(i?o(e,"length",t,!0,!0):o(e,"length",t)),e}},43206:(e,t,n)=>{"use strict";var r=n(30041),o=n(30592)(),i=n(74462).functionsHaveConfigurableNames(),a=n(69675);e.exports=function(e,t){if("function"!==typeof e)throw new a("`fn` is not a function");return arguments.length>2&&!!arguments[2]&&!i||(o?r(e,"name",t,!0,!0):r(e,"name",t)),e}},2833:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!==typeof e||!e||"object"!==typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),u=0;u{"use strict";var r=n(70453),o=n(38075),i=n(58859),a=n(69675),s=r("%WeakMap%",!0),u=r("%Map%",!0),l=o("WeakMap.prototype.get",!0),c=o("WeakMap.prototype.set",!0),f=o("WeakMap.prototype.has",!0),d=o("Map.prototype.get",!0),h=o("Map.prototype.set",!0),p=o("Map.prototype.has",!0),g=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new a("Side channel does not contain "+i(e))},get:function(r){if(s&&r&&("object"===typeof r||"function"===typeof r)){if(e)return l(e,r)}else if(u){if(t)return d(t,r)}else if(n)return function(e,t){var n=g(e,t);return n&&n.value}(n,r)},has:function(r){if(s&&r&&("object"===typeof r||"function"===typeof r)){if(e)return f(e,r)}else if(u){if(t)return p(t,r)}else if(n)return function(e,t){return!!g(e,t)}(n,r);return!1},set:function(r,o){s&&r&&("object"===typeof r||"function"===typeof r)?(e||(e=new s),c(e,r,o)):u?(t||(t=new u),h(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=g(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},528:e=>{"use strict";e.exports=(e,t)=>{if("string"!==typeof e||"string"!==typeof t)throw new TypeError("Expected the arguments to be of type `string`");if(""===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},24280:e=>{"use strict";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`))},8711:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ServerStyleSheet:()=>Be,StyleSheetConsumer:()=>ie,StyleSheetContext:()=>oe,StyleSheetManager:()=>fe,ThemeConsumer:()=>Ie,ThemeContext:()=>Pe,ThemeProvider:()=>Ne,__PRIVATE__:()=>He,createGlobalStyle:()=>Ue,css:()=>we,default:()=>We,isStyledComponent:()=>w,keyframes:()=>ze,useTheme:()=>$e,version:()=>S,withTheme:()=>Ve});var r=n(44363),o=n(96540),i=n(2833),a=n.n(i);const s=function(e){function t(e,r,u,l,d){for(var h,p,g,v,_,x=0,S=0,A=0,E=0,C=0,P=0,N=g=h=0,L=0,F=0,j=0,U=0,z=u.length,B=z-1,V="",$="",H="",W="";Lh)&&(U=(V=V.replace(" ",":")).length),0r&&(r=(t=t.trim()).charCodeAt(0)),r){case 38:return t.replace(v,"$1"+e.trim());case 58:return e.trim()+t.replace(v,"$1"+e.trim());default:if(0<1*n&&0u.charCodeAt(8))break;case 115:a=a.replace(u,"-webkit-"+u)+";"+a;break;case 207:case 102:a=a.replace(u,"-webkit-"+(102r.charCodeAt(0)&&(r=r.trim()),r=[r],01?t-1:0),r=1;r0?" Args: "+n.join(", "):""))}var O=function(){function e(e){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=e}var t=e.prototype;return t.indexOfGroup=function(e){for(var t=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,r=n.length,o=r;e>=o;)(o<<=1)<0&&R(16,""+e);this.groupSizes=new Uint32Array(o),this.groupSizes.set(n),this.length=o;for(var i=r;i=this.length||0===this.groupSizes[e])return t;for(var n=this.groupSizes[e],r=this.indexOfGroup(e),o=r+n,i=r;i=M&&(M=t+1),T.set(e,t),k.set(t,e)},D="style["+x+'][data-styled-version="5.3.11"]',L=new RegExp("^"+x+'\\.g(\\d+)\\[id="([\\w\\d-]+)"\\].*?"([^"]*)'),F=function(e,t,n){for(var r,o=n.split(","),i=0,a=o.length;i=0;n--){var r=t[n];if(r&&1===r.nodeType&&r.hasAttribute(x))return r}}(n),i=void 0!==o?o.nextSibling:null;r.setAttribute(x,"active"),r.setAttribute("data-styled-version","5.3.11");var a=U();return a&&r.setAttribute("nonce",a),n.insertBefore(r,i),r},B=function(){function e(e){var t=this.element=z(e);t.appendChild(document.createTextNode("")),this.sheet=function(e){if(e.sheet)return e.sheet;for(var t=document.styleSheets,n=0,r=t.length;n=0){var n=document.createTextNode(t),r=this.nodes[e];return this.element.insertBefore(n,r||null),this.length++,!0}return!1},t.deleteRule=function(e){this.element.removeChild(this.nodes[e]),this.length--},t.getRule=function(e){return e0&&(l+=e+",")})),r+=""+s+u+'{content:"'+l+'"}/*!sc*/\n'}}}return r}(this)},e}(),G=/(a)(d)/gi,Y=function(e){return String.fromCharCode(e+(e>25?39:97))};function X(e){var t,n="";for(t=Math.abs(e);t>52;t=t/52|0)n=Y(t%52)+n;return(Y(t%52)+n).replace(G,"$1-$2")}var K=function(e,t){for(var n=t.length;n;)e=33*e^t.charCodeAt(--n);return e},Z=function(e){return K(5381,e)};function Q(e){for(var t=0;t>>0);if(!t.hasNameForId(r,a)){var s=n(i,"."+a,void 0,r);t.insertRules(r,a,s)}o.push(a),this.staticRulesId=a}else{for(var u=this.rules.length,l=K(this.baseHash,n.hash),c="",f=0;f>>0);if(!t.hasNameForId(r,g)){var v=n(c,"."+g,void 0,r);t.insertRules(r,g,v)}o.push(g)}}return o.join(" ")},e}(),te=/^\s*\/\/.*$/gm,ne=[":","[",".","#"];function re(e){var t,n,r,o,i=void 0===e?m:e,a=i.options,u=void 0===a?m:a,l=i.plugins,c=void 0===l?y:l,f=new s(u),d=[],h=function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return function(n,r,o,i,a,s,u,l,c,f){switch(n){case 1:if(0===c&&64===r.charCodeAt(0))return e(r+";"),"";break;case 2:if(0===l)return r+"/*|*/";break;case 3:switch(l){case 102:case 112:return e(o[0]+r),"";default:return r+(0===f?"/*|*/":"")}case-2:r.split("/*|*/}").forEach(t)}}}((function(e){d.push(e)})),p=function(e,r,i){return 0===r&&-1!==ne.indexOf(i[n.length])||i.match(o)?e:"."+t};function g(e,i,a,s){void 0===s&&(s="&");var u=e.replace(te,""),l=i&&a?a+" "+i+" { "+u+" }":u;return t=s,n=i,r=new RegExp("\\"+n+"\\b","g"),o=new RegExp("(\\"+n+"\\b){2,}"),f(a||!i?"":i,l)}return f.use([].concat(c,[function(e,t,o){2===e&&o.length&&o[0].lastIndexOf(n)>0&&(o[0]=o[0].replace(r,p))},h,function(e){if(-2===e){var t=d;return d=[],t}}])),g.hash=c.length?c.reduce((function(e,t){return t.name||R(15),K(e,t.name)}),5381).toString():"",g}var oe=o.createContext(),ie=oe.Consumer,ae=o.createContext(),se=(ae.Consumer,new q),ue=re();function le(){return(0,o.useContext)(oe)||se}function ce(){return(0,o.useContext)(ae)||ue}function fe(e){var t=(0,o.useState)(e.stylisPlugins),n=t[0],r=t[1],i=le(),s=(0,o.useMemo)((function(){var t=i;return e.sheet?t=e.sheet:e.target&&(t=t.reconstructWithOptions({target:e.target},!1)),e.disableCSSOMInjection&&(t=t.reconstructWithOptions({useCSSOMInjection:!1})),t}),[e.disableCSSOMInjection,e.sheet,e.target]),u=(0,o.useMemo)((function(){return re({options:{prefix:!e.disableVendorPrefixes},plugins:n})}),[e.disableVendorPrefixes,n]);return(0,o.useEffect)((function(){a()(n,e.stylisPlugins)||r(e.stylisPlugins)}),[e.stylisPlugins]),o.createElement(oe.Provider,{value:s},o.createElement(ae.Provider,{value:u},e.children))}var de=function(){function e(e,t){var n=this;this.inject=function(e,t){void 0===t&&(t=ue);var r=n.name+t.hash;e.hasNameForId(n.id,r)||e.insertRules(n.id,r,t(n.rules,r,"@keyframes"))},this.toString=function(){return R(12,String(n.name))},this.name=e,this.id="sc-keyframes-"+e,this.rules=t}return e.prototype.getName=function(e){return void 0===e&&(e=ue),this.name+e.hash},e}(),he=/([A-Z])/,pe=/([A-Z])/g,ge=/^ms-/,ve=function(e){return"-"+e.toLowerCase()};function ye(e){return he.test(e)?e.replace(pe,ve).replace(ge,"-ms-"):e}var me=function(e){return null==e||!1===e||""===e};function be(e,t,n,r){if(Array.isArray(e)){for(var o,i=[],a=0,s=e.length;a1?t-1:0),r=1;r?@[\\\]^`{|}~-]+/g,Ae=/(^-|-$)/g;function Ee(e){return e.replace(Se,"-").replace(Ae,"")}var Ce=function(e){return X(Z(e)>>>0)};function Re(e){return"string"==typeof e&&!0}var Oe=function(e){return"function"==typeof e||"object"==typeof e&&null!==e&&!Array.isArray(e)},Te=function(e){return"__proto__"!==e&&"constructor"!==e&&"prototype"!==e};function ke(e,t,n){var r=e[n];Oe(t)&&Oe(r)?Me(r,t):e[n]=t}function Me(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=0||(o[n]=e[n]);return o}(t,["componentId"]),i=r&&r+"-"+(Re(e)?e:Ee(_(e)));return Le(e,p({},o,{attrs:v,componentId:i}),n)},Object.defineProperty(S,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=r?Me({},e.defaultProps,t):t}}),Object.defineProperty(S,"toString",{value:function(){return"."+S.styledComponentId}}),i&&h()(S,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,shouldForwardProp:!0,styledComponentId:!0,target:!0,withComponent:!0}),S}var Fe=function(e){return function e(t,n,o){if(void 0===o&&(o=m),!(0,r.isValidElementType)(n))return R(1,String(n));var i=function(){return t(n,o,we.apply(void 0,arguments))};return i.withConfig=function(r){return e(t,n,p({},o,{},r))},i.attrs=function(r){return e(t,n,p({},o,{attrs:Array.prototype.concat(o.attrs,r).filter(Boolean)}))},i}(Le,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","textPath","tspan"].forEach((function(e){Fe[e]=Fe(e)}));var je=function(){function e(e,t){this.rules=e,this.componentId=t,this.isStatic=Q(e),q.registerId(this.componentId+1)}var t=e.prototype;return t.createStyles=function(e,t,n,r){var o=r(be(this.rules,t,n,r).join(""),""),i=this.componentId+e;n.insertRules(i,i,o)},t.removeStyles=function(e,t){t.clearRules(this.componentId+e)},t.renderStyles=function(e,t,n,r){e>2&&q.registerId(this.componentId+e),this.removeStyles(e,n),this.createStyles(e,t,n,r)},e}();function Ue(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r"+t+""},this.getStyleTags=function(){return e.sealed?R(2):e._emitSheetCSS()},this.getStyleElement=function(){var t;if(e.sealed)return R(2);var n=((t={})[x]="",t["data-styled-version"]="5.3.11",t.dangerouslySetInnerHTML={__html:e.instance.toString()},t),r=U();return r&&(n.nonce=r),[o.createElement("style",p({},n,{key:"sc-0-0"}))]},this.seal=function(){e.sealed=!0},this.instance=new q({isServer:!0}),this.sealed=!1}var t=e.prototype;return t.collectStyles=function(e){return this.sealed?R(2):o.createElement(fe,{sheet:this.instance},e)},t.interleaveWithNodeStream=function(e){return R(3)},e}(),Ve=function(e){var t=o.forwardRef((function(t,n){var r=(0,o.useContext)(Pe),i=e.defaultProps,a=xe(t,r,i);return o.createElement(e,p({},t,{theme:a,ref:n}))}));return h()(t,e),t.displayName="WithTheme("+_(e)+")",t},$e=function(){return(0,o.useContext)(Pe)},He={StyleSheet:q,masterSheet:se};const We=Fe},50677:(e,t,n)=>{"use strict";n.r(t),n.d(t,{alignContent:()=>me,alignItems:()=>ye,alignSelf:()=>Oe,background:()=>P,backgroundImage:()=>Ke,backgroundPosition:()=>Qe,backgroundRepeat:()=>Je,backgroundSize:()=>Ze,border:()=>T,borderBottom:()=>Ge,borderColor:()=>He,borderLeft:()=>Ye,borderRadius:()=>Xe,borderRight:()=>qe,borderStyle:()=>$e,borderTop:()=>We,borderWidth:()=>Ve,borders:()=>k,bottom:()=>rt,boxShadow:()=>W,buttonStyle:()=>Y,color:()=>b,colorStyle:()=>K,compose:()=>g,createParser:()=>c,createStyleFunction:()=>h,display:()=>ie,flex:()=>Se,flexBasis:()=>Ce,flexDirection:()=>xe,flexGrow:()=>Ae,flexShrink:()=>Ee,flexWrap:()=>we,flexbox:()=>S,fontFamily:()=>fe,fontSize:()=>ce,fontStyle:()=>ge,fontWeight:()=>de,get:()=>l,grid:()=>C,gridArea:()=>Be,gridAutoColumns:()=>Le,gridAutoFlow:()=>De,gridAutoRows:()=>Fe,gridColumn:()=>Ie,gridColumnGap:()=>Me,gridGap:()=>ke,gridRow:()=>Ne,gridRowGap:()=>Pe,gridTemplateAreas:()=>ze,gridTemplateColumns:()=>je,gridTemplateRows:()=>Ue,height:()=>Q,justifyContent:()=>_e,justifyItems:()=>be,justifySelf:()=>Re,layout:()=>v,left:()=>ot,letterSpacing:()=>ve,lineHeight:()=>he,margin:()=>B,maxHeight:()=>ne,maxWidth:()=>te,minHeight:()=>ee,minWidth:()=>J,opacity:()=>le,order:()=>Te,overflow:()=>ae,overflowX:()=>se,overflowY:()=>ue,padding:()=>V,position:()=>D,right:()=>nt,shadow:()=>H,size:()=>re,space:()=>$,style:()=>it,system:()=>p,textAlign:()=>pe,textShadow:()=>W,textStyle:()=>X,top:()=>tt,typography:()=>w,variant:()=>G,verticalAlign:()=>oe,width:()=>Z,zIndex:()=>et});var r=n(45228),o=n.n(r),i=function(e,t){var n=o()({},e,t);for(var r in e){var i;e[r]&&"object"===typeof t[r]&&o()(n,((i={})[r]=o()(e[r],t[r]),i))}return n},a={breakpoints:[40,52,64].map((function(e){return e+"em"}))},s=function(e){return"@media screen and (min-width: "+e+")"},u=function(e,t){return l(t,e,e)},l=function(e,t,n,r,o){for(t=t&&t.split?t.split("."):[t],r=0;r1&&u.forEach((function(n){var o;r[n]=e(((o={})[n]=t[n],o))})),r},f=function(e,t,n,r,i){var a={};return r.slice(0,e.length).forEach((function(r,s){var u,l=e[s],c=t(r,n,i);l?o()(a,((u={})[l]=o()({},a[l],c),u)):o()(a,c)})),a},d=function(e,t,n,r,i){var a={};for(var u in r){var l=e[u],c=t(r[u],n,i);if(l){var f,d=s(l);o()(a,((f={})[d]=o()({},a[d],c),f))}else o()(a,c)}return a},h=function(e){var t=e.properties,n=e.property,r=e.scale,o=e.transform,i=void 0===o?u:o,a=e.defaultScale;t=t||[n];var s=function(e,n,r){var o={},a=i(e,n,r);if(null!==a)return t.forEach((function(e){o[e]=a})),o};return s.scale=r,s.defaults=a,s},p=function(e){void 0===e&&(e={});var t={};return Object.keys(e).forEach((function(n){var r=e[n];t[n]=!0!==r?"function"!==typeof r?h(r):r:h({property:n,scale:n})})),c(t)},g=function(){for(var e={},t=arguments.length,n=new Array(t),r=0;r1?e:100*e+"%")}},height:{property:"height",scale:"sizes"},minWidth:{property:"minWidth",scale:"sizes"},minHeight:{property:"minHeight",scale:"sizes"},maxWidth:{property:"maxWidth",scale:"sizes"},maxHeight:{property:"maxHeight",scale:"sizes"},size:{properties:["width","height"],scale:"sizes"},overflow:!0,overflowX:!0,overflowY:!0,display:!0,verticalAlign:!0});const y=v;var m={color:{property:"color",scale:"colors"},backgroundColor:{property:"backgroundColor",scale:"colors"},opacity:!0};m.bg=m.backgroundColor;var b=p(m);const _=b;var w=p({fontFamily:{property:"fontFamily",scale:"fonts"},fontSize:{property:"fontSize",scale:"fontSizes",defaultScale:[12,14,16,20,24,32,48,64,72]},fontWeight:{property:"fontWeight",scale:"fontWeights"},lineHeight:{property:"lineHeight",scale:"lineHeights"},letterSpacing:{property:"letterSpacing",scale:"letterSpacings"},textAlign:!0,fontStyle:!0});const x=w;var S=p({alignItems:!0,alignContent:!0,justifyItems:!0,justifyContent:!0,flexWrap:!0,flexDirection:!0,flex:!0,flexGrow:!0,flexShrink:!0,flexBasis:!0,justifySelf:!0,alignSelf:!0,order:!0});const A=S;var E={space:[0,4,8,16,32,64,128,256,512]},C=p({gridGap:{property:"gridGap",scale:"space",defaultScale:E.space},gridColumnGap:{property:"gridColumnGap",scale:"space",defaultScale:E.space},gridRowGap:{property:"gridRowGap",scale:"space",defaultScale:E.space},gridColumn:!0,gridRow:!0,gridAutoFlow:!0,gridAutoColumns:!0,gridAutoRows:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridArea:!0});const R=C;var O={border:{property:"border",scale:"borders"},borderWidth:{property:"borderWidth",scale:"borderWidths"},borderStyle:{property:"borderStyle",scale:"borderStyles"},borderColor:{property:"borderColor",scale:"colors"},borderRadius:{property:"borderRadius",scale:"radii"},borderTop:{property:"borderTop",scale:"borders"},borderTopLeftRadius:{property:"borderTopLeftRadius",scale:"radii"},borderTopRightRadius:{property:"borderTopRightRadius",scale:"radii"},borderRight:{property:"borderRight",scale:"borders"},borderBottom:{property:"borderBottom",scale:"borders"},borderBottomLeftRadius:{property:"borderBottomLeftRadius",scale:"radii"},borderBottomRightRadius:{property:"borderBottomRightRadius",scale:"radii"},borderLeft:{property:"borderLeft",scale:"borders"},borderX:{properties:["borderLeft","borderRight"],scale:"borders"},borderY:{properties:["borderTop","borderBottom"],scale:"borders"},borderTopWidth:{property:"borderTopWidth",scale:"borderWidths"},borderTopColor:{property:"borderTopColor",scale:"colors"},borderTopStyle:{property:"borderTopStyle",scale:"borderStyles"}};O.borderTopLeftRadius={property:"borderTopLeftRadius",scale:"radii"},O.borderTopRightRadius={property:"borderTopRightRadius",scale:"radii"},O.borderBottomWidth={property:"borderBottomWidth",scale:"borderWidths"},O.borderBottomColor={property:"borderBottomColor",scale:"colors"},O.borderBottomStyle={property:"borderBottomStyle",scale:"borderStyles"},O.borderBottomLeftRadius={property:"borderBottomLeftRadius",scale:"radii"},O.borderBottomRightRadius={property:"borderBottomRightRadius",scale:"radii"},O.borderLeftWidth={property:"borderLeftWidth",scale:"borderWidths"},O.borderLeftColor={property:"borderLeftColor",scale:"colors"},O.borderLeftStyle={property:"borderLeftStyle",scale:"borderStyles"},O.borderRightWidth={property:"borderRightWidth",scale:"borderWidths"},O.borderRightColor={property:"borderRightColor",scale:"colors"},O.borderRightStyle={property:"borderRightStyle",scale:"borderStyles"};var T=p(O);const k=T;var M={background:!0,backgroundImage:!0,backgroundSize:!0,backgroundPosition:!0,backgroundRepeat:!0};M.bgImage=M.backgroundImage,M.bgSize=M.backgroundSize,M.bgPosition=M.backgroundPosition,M.bgRepeat=M.backgroundRepeat;var P=p(M);const I=P;var N={space:[0,4,8,16,32,64,128,256,512]},D=p({position:!0,zIndex:{property:"zIndex",scale:"zIndices"},top:{property:"top",scale:"space",defaultScale:N.space},right:{property:"right",scale:"space",defaultScale:N.space},bottom:{property:"bottom",scale:"space",defaultScale:N.space},left:{property:"left",scale:"space",defaultScale:N.space}});const L=D;var F={space:[0,4,8,16,32,64,128,256,512]},j=function(e){return"number"===typeof e&&!isNaN(e)},U=function(e,t){if(!j(e))return l(t,e,e);var n=e<0,r=Math.abs(e),o=l(t,r,r);return j(o)?o*(n?-1:1):n?"-"+o:o},z={};z.margin={margin:{property:"margin",scale:"space",transform:U,defaultScale:F.space},marginTop:{property:"marginTop",scale:"space",transform:U,defaultScale:F.space},marginRight:{property:"marginRight",scale:"space",transform:U,defaultScale:F.space},marginBottom:{property:"marginBottom",scale:"space",transform:U,defaultScale:F.space},marginLeft:{property:"marginLeft",scale:"space",transform:U,defaultScale:F.space},marginX:{properties:["marginLeft","marginRight"],scale:"space",transform:U,defaultScale:F.space},marginY:{properties:["marginTop","marginBottom"],scale:"space",transform:U,defaultScale:F.space}},z.margin.m=z.margin.margin,z.margin.mt=z.margin.marginTop,z.margin.mr=z.margin.marginRight,z.margin.mb=z.margin.marginBottom,z.margin.ml=z.margin.marginLeft,z.margin.mx=z.margin.marginX,z.margin.my=z.margin.marginY,z.padding={padding:{property:"padding",scale:"space",defaultScale:F.space},paddingTop:{property:"paddingTop",scale:"space",defaultScale:F.space},paddingRight:{property:"paddingRight",scale:"space",defaultScale:F.space},paddingBottom:{property:"paddingBottom",scale:"space",defaultScale:F.space},paddingLeft:{property:"paddingLeft",scale:"space",defaultScale:F.space},paddingX:{properties:["paddingLeft","paddingRight"],scale:"space",defaultScale:F.space},paddingY:{properties:["paddingTop","paddingBottom"],scale:"space",defaultScale:F.space}},z.padding.p=z.padding.padding,z.padding.pt=z.padding.paddingTop,z.padding.pr=z.padding.paddingRight,z.padding.pb=z.padding.paddingBottom,z.padding.pl=z.padding.paddingLeft,z.padding.px=z.padding.paddingX,z.padding.py=z.padding.paddingY;var B=p(z.margin),V=p(z.padding),$=g(B,V);var H=p({boxShadow:{property:"boxShadow",scale:"shadows"},textShadow:{property:"textShadow",scale:"shadows"}});const W=H;var q=n(50402),G=function(e){var t,n,r=e.scale,o=e.prop,i=void 0===o?"variant":o,a=e.variants,s=void 0===a?{}:a,u=e.key;n=Object.keys(s).length?function(e,t,n){return(0,q.default)(l(t,e,null))(n.theme)}:function(e,t){return l(t,e,null)},n.scale=r||u,n.defaults=s;var f=((t={})[i]=n,t);return c(f)};var Y=G({key:"buttons"}),X=G({key:"textStyles",prop:"textStyle"}),K=G({key:"colorStyles",prop:"colors"}),Z=y.width,Q=y.height,J=y.minWidth,ee=y.minHeight,te=y.maxWidth,ne=y.maxHeight,re=y.size,oe=y.verticalAlign,ie=y.display,ae=y.overflow,se=y.overflowX,ue=y.overflowY,le=_.opacity,ce=x.fontSize,fe=x.fontFamily,de=x.fontWeight,he=x.lineHeight,pe=x.textAlign,ge=x.fontStyle,ve=x.letterSpacing,ye=A.alignItems,me=A.alignContent,be=A.justifyItems,_e=A.justifyContent,we=A.flexWrap,xe=A.flexDirection,Se=A.flex,Ae=A.flexGrow,Ee=A.flexShrink,Ce=A.flexBasis,Re=A.justifySelf,Oe=A.alignSelf,Te=A.order,ke=R.gridGap,Me=R.gridColumnGap,Pe=R.gridRowGap,Ie=R.gridColumn,Ne=R.gridRow,De=R.gridAutoFlow,Le=R.gridAutoColumns,Fe=R.gridAutoRows,je=R.gridTemplateColumns,Ue=R.gridTemplateRows,ze=R.gridTemplateAreas,Be=R.gridArea,Ve=k.borderWidth,$e=k.borderStyle,He=k.borderColor,We=k.borderTop,qe=k.borderRight,Ge=k.borderBottom,Ye=k.borderLeft,Xe=k.borderRadius,Ke=I.backgroundImage,Ze=I.backgroundSize,Qe=I.backgroundPosition,Je=I.backgroundRepeat,et=L.zIndex,tt=L.top,nt=L.right,rt=L.bottom,ot=L.left,it=function(e){var t=e.prop,n=e.cssProperty,r=e.alias,o=e.key,i=e.transformValue,a=e.scale,s=e.properties,u={};return u[t]=h({properties:s,property:n||t,scale:o,defaultScale:a,transform:i}),r&&(u[r]=u[t]),c(u)}},12897:function(e,t,n){e.exports=function(){"use strict";var e=function(e){var t=e.id,n=e.viewBox,r=e.content;this.id=t,this.viewBox=n,this.content=r};e.prototype.stringify=function(){return this.content},e.prototype.toString=function(){return this.stringify()},e.prototype.destroy=function(){var e=this;["id","viewBox","content"].forEach((function(t){return delete e[t]}))};var t=function(e){var t=!!document.importNode,n=(new DOMParser).parseFromString(e,"image/svg+xml").documentElement;return t?document.importNode(n,!0):n};function r(e,t){return e(t={exports:{}},t.exports),t.exports}"undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:"undefined"!==typeof self&&self;var o=r((function(e,t){!function(t,n){e.exports=n()}(0,(function(){function e(e){return e&&"object"===typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)}function t(e){return Array.isArray(e)?[]:{}}function n(n,r){return r&&!0===r.clone&&e(n)?i(t(n),n,r):n}function r(t,r,o){var a=t.slice();return r.forEach((function(r,s){"undefined"===typeof a[s]?a[s]=n(r,o):e(r)?a[s]=i(t[s],r,o):-1===t.indexOf(r)&&a.push(n(r,o))})),a}function o(t,r,o){var a={};return e(t)&&Object.keys(t).forEach((function(e){a[e]=n(t[e],o)})),Object.keys(r).forEach((function(s){e(r[s])&&t[s]?a[s]=i(t[s],r[s],o):a[s]=n(r[s],o)})),a}function i(e,t,i){var a=Array.isArray(t),s=(i||{arrayMerge:r}).arrayMerge||r;return a?Array.isArray(e)?s(e,t,i):n(t,i):o(e,t,i)}return i.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return i(e,n,t)}))},i}))})),i=r((function(e,t){var n={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}};t.default=n,e.exports=t.default})),a=function(e){return Object.keys(e).map((function(t){return t+'="'+e[t].toString().replace(/"/g,""")+'"'})).join(" ")},s=i.svg,u=i.xlink,l={};l[s.name]=s.uri,l[u.name]=u.uri;var c=function(e,t){void 0===e&&(e="");var n=o(l,t||{});return""+e+""},f=function(e){function n(){e.apply(this,arguments)}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var r={isMounted:{}};return r.isMounted.get=function(){return!!this.node},n.createFromExistingNode=function(e){return new n({id:e.getAttribute("id"),viewBox:e.getAttribute("viewBox"),content:e.outerHTML})},n.prototype.destroy=function(){this.isMounted&&this.unmount(),e.prototype.destroy.call(this)},n.prototype.mount=function(e){if(this.isMounted)return this.node;var t="string"===typeof e?document.querySelector(e):e,n=this.render();return this.node=n,t.appendChild(n),n},n.prototype.render=function(){var e=this.stringify();return t(c(e)).childNodes[0]},n.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(n.prototype,r),n}(e);return f}()},55042:function(e,t,n){e.exports=function(){"use strict";function e(e,t){return e(t={exports:{}},t.exports),t.exports}"undefined"!==typeof window?window:"undefined"!==typeof n.g?n.g:"undefined"!==typeof self&&self;var t=e((function(e,t){!function(t,n){e.exports=n()}(0,(function(){function e(e){return e&&"object"===typeof e&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)}function t(e){return Array.isArray(e)?[]:{}}function n(n,r){return r&&!0===r.clone&&e(n)?i(t(n),n,r):n}function r(t,r,o){var a=t.slice();return r.forEach((function(r,s){"undefined"===typeof a[s]?a[s]=n(r,o):e(r)?a[s]=i(t[s],r,o):-1===t.indexOf(r)&&a.push(n(r,o))})),a}function o(t,r,o){var a={};return e(t)&&Object.keys(t).forEach((function(e){a[e]=n(t[e],o)})),Object.keys(r).forEach((function(s){e(r[s])&&t[s]?a[s]=i(t[s],r[s],o):a[s]=n(r[s],o)})),a}function i(e,t,i){var a=Array.isArray(t),s=(i||{arrayMerge:r}).arrayMerge||r;return a?Array.isArray(e)?s(e,t,i):n(t,i):o(e,t,i)}return i.all=function(e,t){if(!Array.isArray(e)||e.length<2)throw new Error("first argument should be an array with at least two elements");return e.reduce((function(e,n){return i(e,n,t)}))},i}))}));function r(e){return e=e||Object.create(null),{on:function(t,n){(e[t]||(e[t]=[])).push(n)},off:function(t,n){e[t]&&e[t].splice(e[t].indexOf(n)>>>0,1)},emit:function(t,n){(e[t]||[]).map((function(e){e(n)})),(e["*"]||[]).map((function(e){e(t,n)}))}}}var o=e((function(e,t){var n={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}};t.default=n,e.exports=t.default})),i=function(e){return Object.keys(e).map((function(t){return t+'="'+e[t].toString().replace(/"/g,""")+'"'})).join(" ")},a=o.svg,s=o.xlink,u={};u[a.name]=a.uri,u[s.name]=s.uri;var l,c=function(e,n){void 0===e&&(e="");var r=t(u,n||{});return""+e+""},f=o.svg,d=o.xlink,h={attrs:(l={style:["position: absolute","width: 0","height: 0"].join("; "),"aria-hidden":"true"},l[f.name]=f.uri,l[d.name]=d.uri,l)},p=function(e){this.config=t(h,e||{}),this.symbols=[]};p.prototype.add=function(e){var t=this.symbols,n=this.find(e.id);return n?(t[t.indexOf(n)]=e,!1):(t.push(e),!0)},p.prototype.remove=function(e){var t=this.symbols,n=this.find(e);return!!n&&(t.splice(t.indexOf(n),1),n.destroy(),!0)},p.prototype.find=function(e){return this.symbols.filter((function(t){return t.id===e}))[0]||null},p.prototype.has=function(e){return null!==this.find(e)},p.prototype.stringify=function(){var e=this.config.attrs,t=this.symbols.map((function(e){return e.stringify()})).join("");return c(t,e)},p.prototype.toString=function(){return this.stringify()},p.prototype.destroy=function(){this.symbols.forEach((function(e){return e.destroy()}))};var g=function(e){var t=e.id,n=e.viewBox,r=e.content;this.id=t,this.viewBox=n,this.content=r};g.prototype.stringify=function(){return this.content},g.prototype.toString=function(){return this.stringify()},g.prototype.destroy=function(){var e=this;["id","viewBox","content"].forEach((function(t){return delete e[t]}))};var v=function(e){var t=!!document.importNode,n=(new DOMParser).parseFromString(e,"image/svg+xml").documentElement;return t?document.importNode(n,!0):n},y=function(e){function t(){e.apply(this,arguments)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},t.createFromExistingNode=function(e){return new t({id:e.getAttribute("id"),viewBox:e.getAttribute("viewBox"),content:e.outerHTML})},t.prototype.destroy=function(){this.isMounted&&this.unmount(),e.prototype.destroy.call(this)},t.prototype.mount=function(e){if(this.isMounted)return this.node;var t="string"===typeof e?document.querySelector(e):e,n=this.render();return this.node=n,t.appendChild(n),n},t.prototype.render=function(){var e=this.stringify();return v(c(e)).childNodes[0]},t.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(t.prototype,n),t}(g),m={autoConfigure:!0,mountTo:"body",syncUrlsWithBaseTag:!1,listenLocationChangeEvent:!0,locationChangeEvent:"locationChange",locationChangeAngularEmitter:!1,usagesToUpdate:"use[*|href]",moveGradientsOutsideSymbol:!1},b=function(e){return Array.prototype.slice.call(e,0)},_={isChrome:function(){return/chrome/i.test(navigator.userAgent)},isFirefox:function(){return/firefox/i.test(navigator.userAgent)},isIE:function(){return/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent)},isEdge:function(){return/edge/i.test(navigator.userAgent)}},w=function(e,t){var n=document.createEvent("CustomEvent");n.initCustomEvent(e,!1,!1,t),window.dispatchEvent(n)},x=function(e){var t=[];return b(e.querySelectorAll("style")).forEach((function(e){e.textContent+="",t.push(e)})),t},S=function(e){return(e||window.location.href).split("#")[0]},A=function(e){angular.module("ng").run(["$rootScope",function(t){t.$on("$locationChangeSuccess",(function(t,n,r){w(e,{oldUrl:r,newUrl:n})}))}])},E="linearGradient, radialGradient, pattern, mask, clipPath",C=function(e,t){return void 0===t&&(t=E),b(e.querySelectorAll("symbol")).forEach((function(e){b(e.querySelectorAll(t)).forEach((function(t){e.parentNode.insertBefore(t,e)}))})),e};function R(e,t){return b(e).reduce((function(e,n){if(!n.attributes)return e;var r=b(n.attributes),o=t?r.filter(t):r;return e.concat(o)}),[])}var O=o.xlink.uri,T="xlink:href",k=/[{}|\\\^\[\]`"<>]/g;function M(e){return e.replace(k,(function(e){return"%"+e[0].charCodeAt(0).toString(16).toUpperCase()}))}function P(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function I(e,t,n){return b(e).forEach((function(e){var r=e.getAttribute(T);if(r&&0===r.indexOf(t)){var o=r.replace(t,n);e.setAttributeNS(O,T,o)}})),e}var N,D=["clipPath","colorProfile","src","cursor","fill","filter","marker","markerStart","markerMid","markerEnd","mask","stroke","style"],L=D.map((function(e){return"["+e+"]"})).join(","),F=function(e,t,n,r){var o=M(n),i=M(r);R(e.querySelectorAll(L),(function(e){var t=e.localName,n=e.value;return-1!==D.indexOf(t)&&-1!==n.indexOf("url("+o)})).forEach((function(e){return e.value=e.value.replace(new RegExp(P(o),"g"),i)})),I(t,o,i)},j={MOUNT:"mount",SYMBOL_MOUNT:"symbol_mount"},U=function(e){function n(n){var o=this;void 0===n&&(n={}),e.call(this,t(m,n));var i=r();this._emitter=i,this.node=null;var a=this.config;if(a.autoConfigure&&this._autoConfigure(n),a.syncUrlsWithBaseTag){var s=document.getElementsByTagName("base")[0].getAttribute("href");i.on(j.MOUNT,(function(){return o.updateUrls("#",s)}))}var u=this._handleLocationChange.bind(this);this._handleLocationChange=u,a.listenLocationChangeEvent&&window.addEventListener(a.locationChangeEvent,u),a.locationChangeAngularEmitter&&A(a.locationChangeEvent),i.on(j.MOUNT,(function(e){a.moveGradientsOutsideSymbol&&C(e)})),i.on(j.SYMBOL_MOUNT,(function(e){a.moveGradientsOutsideSymbol&&C(e.parentNode),(_.isIE()||_.isEdge())&&x(e)}))}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var o={isMounted:{}};return o.isMounted.get=function(){return!!this.node},n.prototype._autoConfigure=function(e){var t=this.config;"undefined"===typeof e.syncUrlsWithBaseTag&&(t.syncUrlsWithBaseTag="undefined"!==typeof document.getElementsByTagName("base")[0]),"undefined"===typeof e.locationChangeAngularEmitter&&(t.locationChangeAngularEmitter="undefined"!==typeof window.angular),"undefined"===typeof e.moveGradientsOutsideSymbol&&(t.moveGradientsOutsideSymbol=_.isFirefox())},n.prototype._handleLocationChange=function(e){var t=e.detail,n=t.oldUrl,r=t.newUrl;this.updateUrls(n,r)},n.prototype.add=function(t){var n=this,r=e.prototype.add.call(this,t);return this.isMounted&&r&&(t.mount(n.node),this._emitter.emit(j.SYMBOL_MOUNT,t.node)),r},n.prototype.attach=function(e){var t=this,n=this;if(n.isMounted)return n.node;var r="string"===typeof e?document.querySelector(e):e;return n.node=r,this.symbols.forEach((function(e){e.mount(n.node),t._emitter.emit(j.SYMBOL_MOUNT,e.node)})),b(r.querySelectorAll("symbol")).forEach((function(e){var t=y.createFromExistingNode(e);t.node=e,n.add(t)})),this._emitter.emit(j.MOUNT,r),r},n.prototype.destroy=function(){var e=this,t=e.config,n=e.symbols,r=e._emitter;n.forEach((function(e){return e.destroy()})),r.off("*"),window.removeEventListener(t.locationChangeEvent,this._handleLocationChange),this.isMounted&&this.unmount()},n.prototype.mount=function(e,t){void 0===e&&(e=this.config.mountTo),void 0===t&&(t=!1);var n=this;if(n.isMounted)return n.node;var r="string"===typeof e?document.querySelector(e):e,o=n.render();return this.node=o,t&&r.childNodes[0]?r.insertBefore(o,r.childNodes[0]):r.appendChild(o),this._emitter.emit(j.MOUNT,o),o},n.prototype.render=function(){return v(this.stringify())},n.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},n.prototype.updateUrls=function(e,t){if(!this.isMounted)return!1;var n=document.querySelectorAll(this.config.usagesToUpdate);return F(this.node,n,S(e)+"#",S(t)+"#"),!0},Object.defineProperties(n.prototype,o),n}(p),z=e((function(e){var t;t=function(){var e,t=[],n=document,r=n.documentElement.doScroll,o="DOMContentLoaded",i=(r?/^loaded|^c/:/^loaded|^i|^c/).test(n.readyState);return i||n.addEventListener(o,e=function(){for(n.removeEventListener(o,e),i=1;e=t.shift();)e()}),function(e){i?setTimeout(e,0):t.push(e)}},e.exports=t()})),B="__SVG_SPRITE_NODE__",V="__SVG_SPRITE__";window[V]?N=window[V]:(N=new U({attrs:{id:B,"aria-hidden":"true"}}),window[V]=N);var $=function(){var e=document.getElementById(B);e?N.attach(e):N.mount(document.body,!0)};return document.body?$():z($),N}()},27003:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=n(96540).useLayoutEffect},22831:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=d(n(13518)),o=d(n(14948)),i=d(n(45073)),a=d(n(77186)),s=d(n(14808)),u=d(n(7775)),l=d(n(37037)),c=d(n(49910)),f=d(n(96792));function d(e){return e&&e.__esModule?e:{default:e}}},22311:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,i,a){return r((s=r(r(t,e),r(o,a)))<<(u=i)|s>>>32-u,n);var s,u}function i(e,t,n,r,i,a,s){return o(t&n|~t&r,e,t,i,a,s)}function a(e,t,n,r,i,a,s){return o(t&r|n&~r,e,t,i,a,s)}function s(e,t,n,r,i,a,s){return o(t^n^r,e,t,i,a,s)}function u(e,t,n,r,i,a,s){return o(n^(t|~r),e,t,i,a,s)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var l=function(e){if("string"===typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n>5]>>>o%32&255,i=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(i)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[n/8])<{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!==typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},14808:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default="00000000-0000-0000-0000-000000000000"},96792:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(37037))&&r.__esModule?r:{default:r};var i=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n};t.default=i},27656:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},2858:(e,t)=>{"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},9042:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"===typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n>>0;f=c,c=l,l=r(a,30)>>>0,a=i,i=u}o[0]=o[0]+i>>>0,o[1]=o[1]+a>>>0,o[2]=o[2]+l>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+f>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]};t.default=o},49910:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=a;var r,o=(r=n(37037))&&r.__esModule?r:{default:r};const i=[];for(let u=0;u<256;++u)i.push((u+256).toString(16).slice(1));function a(e,t=0){return i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]}var s=function(e,t=0){const n=a(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n};t.default=s},13518:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(2858))&&r.__esModule?r:{default:r},i=n(49910);let a,s,u=0,l=0;var c=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let f=(e=e||{}).node||a,d=void 0!==e.clockseq?e.clockseq:s;if(null==f||null==d){const t=e.random||(e.rng||o.default)();null==f&&(f=a=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==d&&(d=s=16383&(t[6]<<8|t[7]))}let h=void 0!==e.msecs?e.msecs:Date.now(),p=void 0!==e.nsecs?e.nsecs:l+1;const g=h-u+(p-l)/1e4;if(g<0&&void 0===e.clockseq&&(d=d+1&16383),(g<0||h>u)&&void 0===e.nsecs&&(p=0),p>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=h,l=p,s=d,h+=122192928e5;const v=(1e4*(268435455&h)+p)%4294967296;c[r++]=v>>>24&255,c[r++]=v>>>16&255,c[r++]=v>>>8&255,c[r++]=255&v;const y=h/4294967296*1e4&268435455;c[r++]=y>>>8&255,c[r++]=255&y,c[r++]=y>>>24&15|16,c[r++]=y>>>16&255,c[r++]=d>>>8|128,c[r++]=255&d;for(let o=0;o<6;++o)c[r+o]=f[o];return t||(0,i.unsafeStringify)(c)};t.default=c},14948:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(59025)),o=i(n(22311));function i(e){return e&&e.__esModule?e:{default:e}}var a=(0,r.default)("v3",48,o.default);t.default=a},59025:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,a,s){var u;if("string"===typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(46140)),o=a(n(2858)),i=n(49910);function a(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const a=(e=e||{}).random||(e.rng||o.default)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=a[e];return t}return(0,i.unsafeStringify)(a)};t.default=s},77186:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(59025)),o=i(n(9042));function i(e){return e&&e.__esModule?e:{default:e}}var a=(0,r.default)("v5",80,o.default);t.default=a},37037:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(27656))&&r.__esModule?r:{default:r};var i=function(e){return"string"===typeof e&&o.default.test(e)};t.default=i},7775:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(37037))&&r.__esModule?r:{default:r};var i=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)};t.default=i},62805:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r="00000000-0000-0000-0000-000000000000"},33829:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});const r={randomUUID:"undefined"!==typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let o;const i=new Uint8Array(16);function a(){if(!o&&(o="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!o))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return o(i)}const s=[];for(let c=0;c<256;++c)s.push((c+256).toString(16).slice(1));function u(e,t=0){return s[e[t+0]]+s[e[t+1]]+s[e[t+2]]+s[e[t+3]]+"-"+s[e[t+4]]+s[e[t+5]]+"-"+s[e[t+6]]+s[e[t+7]]+"-"+s[e[t+8]]+s[e[t+9]]+"-"+s[e[t+10]]+s[e[t+11]]+s[e[t+12]]+s[e[t+13]]+s[e[t+14]]+s[e[t+15]]}const l=function(e,t,n){if(r.randomUUID&&!t&&!e)return r.randomUUID();const o=(e=e||{}).random||(e.rng||a)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=o[e];return t}return u(o)}},79306:(e,t,n)=>{"use strict";var r=n(94901),o=n(16823),i=TypeError;e.exports=function(e){if(r(e))return e;throw new i(o(e)+" is not a function")}},35548:(e,t,n)=>{"use strict";var r=n(33517),o=n(16823),i=TypeError;e.exports=function(e){if(r(e))return e;throw new i(o(e)+" is not a constructor")}},13813:(e,t,n)=>{"use strict";var r=n(72248).has;e.exports=function(e){return r(e),e}},73506:(e,t,n)=>{"use strict";var r=n(13925),o=String,i=TypeError;e.exports=function(e){if(r(e))return e;throw new i("Can't set "+o(e)+" as a prototype")}},97080:(e,t,n)=>{"use strict";var r=n(94402).has;e.exports=function(e){return r(e),e}},6469:(e,t,n)=>{"use strict";var r=n(78227),o=n(2360),i=n(24913).f,a=r("unscopables"),s=Array.prototype;void 0===s[a]&&i(s,a,{configurable:!0,value:o(null)}),e.exports=function(e){s[a][e]=!0}},57829:(e,t,n)=>{"use strict";var r=n(68183).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},90679:(e,t,n)=>{"use strict";var r=n(1625),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw new o("Incorrect invocation")}},28551:(e,t,n)=>{"use strict";var r=n(20034),o=String,i=TypeError;e.exports=function(e){if(r(e))return e;throw new i(o(e)+" is not an object")}},19617:(e,t,n)=>{"use strict";var r=n(25397),o=n(35610),i=n(26198),a=function(e){return function(t,n,a){var s=r(t),u=i(s);if(0===u)return!e&&-1;var l,c=o(a,u);if(e&&n!==n){for(;u>c;)if((l=s[c++])!==l)return!0}else for(;u>c;c++)if((e||c in s)&&s[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},67680:(e,t,n)=>{"use strict";var r=n(79504);e.exports=r([].slice)},74488:(e,t,n)=>{"use strict";var r=n(67680),o=Math.floor,i=function(e,t){var n=e.length;if(n<8)for(var a,s,u=1;u0;)e[s]=e[--s];s!==u++&&(e[s]=a)}else for(var l=o(n/2),c=i(r(e,0,l),t),f=i(r(e,l),t),d=c.length,h=f.length,p=0,g=0;p{"use strict";var r=n(69565),o=n(97751),i=n(55966);e.exports=function(e,t,n,a){try{var s=i(e,"return");if(s)return o("Promise").resolve(r(s,e)).then((function(){t(n)}),(function(e){a(e)}))}catch(u){return a(u)}t(n)}},92059:(e,t,n)=>{"use strict";var r=n(69565),o=n(1103),i=n(28551),a=n(2360),s=n(66699),u=n(56279),l=n(78227),c=n(91181),f=n(97751),d=n(55966),h=n(53982),p=n(62529),g=n(9539),v=f("Promise"),y=l("toStringTag"),m="AsyncIteratorHelper",b="WrapForValidAsyncIterator",_=c.set,w=function(e){var t=!e,n=c.getterFor(e?b:m),s=function(e){var r=o((function(){return n(e)})),i=r.error,a=r.value;return i||t&&a.done?{exit:!0,value:i?v.reject(a):v.resolve(p(void 0,!0))}:{exit:!1,value:a}};return u(a(h),{next:function(){var e=s(this),t=e.value;if(e.exit)return t;var n=o((function(){return i(t.nextHandler(v))})),r=n.error,a=n.value;return r&&(t.done=!0),r?v.reject(a):v.resolve(a)},return:function(){var t=s(this),n=t.value;if(t.exit)return n;n.done=!0;var a,u,l=n.iterator,c=o((function(){if(n.inner)try{g(n.inner.iterator,"normal")}catch(e){return g(l,"throw",e)}return d(l,"return")}));return a=u=c.value,c.error?v.reject(u):void 0===a?v.resolve(p(void 0,!0)):(u=(c=o((function(){return r(a,l)}))).value,c.error?v.reject(u):e?v.resolve(u):v.resolve(u).then((function(e){return i(e),p(void 0,!0)})))}})},x=w(!0),S=w(!1);s(S,y,"Async Iterator Helper"),e.exports=function(e,t){var n=function(n,r){r?(r.iterator=n.iterator,r.next=n.next):r=n,r.type=t?b:m,r.nextHandler=e,r.counter=0,r.done=!1,_(this,r)};return n.prototype=t?x:S,n}},36639:(e,t,n)=>{"use strict";var r=n(69565),o=n(79306),i=n(28551),a=n(20034),s=n(96837),u=n(97751),l=n(1767),c=n(20772),f=function(e){var t=0===e,n=1===e,f=2===e,d=3===e;return function(e,h,p){i(e);var g=void 0!==h;!g&&t||o(h);var v=l(e),y=u("Promise"),m=v.iterator,b=v.next,_=0;return new y((function(e,o){var u=function(e){c(m,o,e,o)},l=function(){try{if(g)try{s(_)}catch(v){u(v)}y.resolve(i(r(b,m))).then((function(r){try{if(i(r).done)t?(p.length=_,e(p)):e(!d&&(f||void 0));else{var s=r.value;try{if(g){var v=h(s,_),b=function(r){if(n)l();else if(f)r?l():c(m,e,!1,o);else if(t)try{p[_++]=r,l()}catch(i){u(i)}else r?c(m,e,d||s,o):l()};a(v)?y.resolve(v).then(b,u):b(v)}else p[_++]=s,l()}catch(w){u(w)}}}catch(x){o(x)}}),o)}catch(w){o(w)}};l()}))}};e.exports={toArray:f(0),forEach:f(1),every:f(2),some:f(3),find:f(4)}},41750:(e,t,n)=>{"use strict";var r=n(69565),o=n(79306),i=n(28551),a=n(20034),s=n(1767),u=n(92059),l=n(62529),c=n(20772),f=u((function(e){var t=this,n=t.iterator,o=t.mapper;return new e((function(s,u){var f=function(e){t.done=!0,u(e)},d=function(e){c(n,f,e,f)};e.resolve(i(r(t.next,n))).then((function(n){try{if(i(n).done)t.done=!0,s(l(void 0,!0));else{var r=n.value;try{var u=o(r,t.counter++),c=function(e){s(l(e,!1))};a(u)?e.resolve(u).then(c,d):c(u)}catch(h){d(h)}}}catch(p){f(p)}}),f)}))}));e.exports=function(e){return i(this),o(e),new f(s(this),{mapper:e})}},53982:(e,t,n)=>{"use strict";var r,o,i=n(24475),a=n(77629),s=n(94901),u=n(2360),l=n(42787),c=n(36840),f=n(78227),d=n(96395),h="USE_FUNCTION_CONSTRUCTOR",p=f("asyncIterator"),g=i.AsyncIterator,v=a.AsyncIteratorPrototype;if(v)r=v;else if(s(g))r=g.prototype;else if(a[h]||i[h])try{o=l(l(l(Function("return async function*(){}()")()))),l(o)===Object.prototype&&(r=o)}catch(y){}r?d&&(r=u(r)):r={},s(r[p])||c(r,p,(function(){return this})),e.exports=r},96319:(e,t,n)=>{"use strict";var r=n(28551),o=n(9539);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(a){o(e,"throw",a)}}},44576:(e,t,n)=>{"use strict";var r=n(79504),o=r({}.toString),i=r("".slice);e.exports=function(e){return i(o(e),8,-1)}},36955:(e,t,n)=>{"use strict";var r=n(92140),o=n(94901),i=n(44576),a=n(78227)("toStringTag"),s=Object,u="Arguments"===i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=s(e),a))?n:u?i(t):"Object"===(r=i(t))&&o(t.callee)?"Arguments":r}},77740:(e,t,n)=>{"use strict";var r=n(39297),o=n(35031),i=n(77347),a=n(24913);e.exports=function(e,t,n){for(var s=o(t),u=a.f,l=i.f,c=0;c{"use strict";var r=n(79039);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},62529:e=>{"use strict";e.exports=function(e,t){return{value:e,done:t}}},66699:(e,t,n)=>{"use strict";var r=n(43724),o=n(24913),i=n(6980);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},6980:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:(e,t,n)=>{"use strict";var r=n(43724),o=n(24913),i=n(6980);e.exports=function(e,t,n){r?o.f(e,t,i(0,n)):e[t]=n}},62106:(e,t,n)=>{"use strict";var r=n(50283),o=n(24913);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),o.f(e,t,n)}},36840:(e,t,n)=>{"use strict";var r=n(94901),o=n(24913),i=n(50283),a=n(39433);e.exports=function(e,t,n,s){s||(s={});var u=s.enumerable,l=void 0!==s.name?s.name:t;if(r(n)&&i(n,l,s),s.global)u?e[t]=n:a(t,n);else{try{s.unsafe?e[t]&&(u=!0):delete e[t]}catch(c){}u?e[t]=n:o.f(e,t,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}},56279:(e,t,n)=>{"use strict";var r=n(36840);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},39433:(e,t,n)=>{"use strict";var r=n(24475),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},43724:(e,t,n)=>{"use strict";var r=n(79039);e.exports=!r((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4055:(e,t,n)=>{"use strict";var r=n(24475),o=n(20034),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},96837:e=>{"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},67400:e=>{"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},79296:(e,t,n)=>{"use strict";var r=n(4055)("span").classList,o=r&&r.constructor&&r.constructor.prototype;e.exports=o===Object.prototype?void 0:o},79392:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},77388:(e,t,n)=>{"use strict";var r,o,i=n(24475),a=n(79392),s=i.process,u=i.Deno,l=s&&s.versions||u&&u.version,c=l&&l.v8;c&&(o=(r=c.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},88727:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},46518:(e,t,n)=>{"use strict";var r=n(24475),o=n(77347).f,i=n(66699),a=n(36840),s=n(39433),u=n(77740),l=n(92796);e.exports=function(e,t){var n,c,f,d,h,p=e.target,g=e.global,v=e.stat;if(n=g?r:v?r[p]||s(p,{}):r[p]&&r[p].prototype)for(c in t){if(d=t[c],f=e.dontCallGetSet?(h=o(n,c))&&h.value:n[c],!l(g?c:p+(v?".":"#")+c,e.forced)&&void 0!==f){if(typeof d==typeof f)continue;u(d,f)}(e.sham||f&&f.sham)&&i(d,"sham",!0),a(n,c,d,e)}}},79039:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},89228:(e,t,n)=>{"use strict";n(27495);var r=n(69565),o=n(36840),i=n(57323),a=n(79039),s=n(78227),u=n(66699),l=s("species"),c=RegExp.prototype;e.exports=function(e,t,n,f){var d=s(e),h=!a((function(){var t={};return t[d]=function(){return 7},7!==""[e](t)})),p=h&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags="",n[d]=/./[d]),n.exec=function(){return t=!0,null},n[d](""),!t}));if(!h||!p||n){var g=/./[d],v=t(d,""[e],(function(e,t,n,o,a){var s=t.exec;return s===i||s===c.exec?h&&!a?{done:!0,value:r(g,t,n,o)}:{done:!0,value:r(e,n,t,o)}:{done:!1}}));o(String.prototype,e,v[0]),o(c,d,v[1])}f&&u(c[d],"sham",!0)}},18745:(e,t,n)=>{"use strict";var r=n(40616),o=Function.prototype,i=o.apply,a=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(i):function(){return a.apply(i,arguments)})},76080:(e,t,n)=>{"use strict";var r=n(27476),o=n(79306),i=n(40616),a=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:i?a(e,t):function(){return e.apply(t,arguments)}}},40616:(e,t,n)=>{"use strict";var r=n(79039);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},69565:(e,t,n)=>{"use strict";var r=n(40616),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},10350:(e,t,n)=>{"use strict";var r=n(43724),o=n(39297),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=o(i,"name"),u=s&&"something"===function(){}.name,l=s&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:s,PROPER:u,CONFIGURABLE:l}},46706:(e,t,n)=>{"use strict";var r=n(79504),o=n(79306);e.exports=function(e,t,n){try{return r(o(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(i){}}},27476:(e,t,n)=>{"use strict";var r=n(44576),o=n(79504);e.exports=function(e){if("Function"===r(e))return o(e)}},79504:(e,t,n)=>{"use strict";var r=n(40616),o=Function.prototype,i=o.call,a=r&&o.bind.bind(i,i);e.exports=r?a:function(e){return function(){return i.apply(e,arguments)}}},97751:(e,t,n)=>{"use strict";var r=n(24475),o=n(94901);e.exports=function(e,t){return arguments.length<2?(n=r[e],o(n)?n:void 0):r[e]&&r[e][t];var n}},1767:e=>{"use strict";e.exports=function(e){return{iterator:e,next:e.next,done:!1}}},50851:(e,t,n)=>{"use strict";var r=n(36955),o=n(55966),i=n(64117),a=n(26269),s=n(78227)("iterator");e.exports=function(e){if(!i(e))return o(e,s)||o(e,"@@iterator")||a[r(e)]}},70081:(e,t,n)=>{"use strict";var r=n(69565),o=n(79306),i=n(28551),a=n(16823),s=n(50851),u=TypeError;e.exports=function(e,t){var n=arguments.length<2?s(e):t;if(o(n))return i(r(n,e));throw new u(a(e)+" is not iterable")}},55966:(e,t,n)=>{"use strict";var r=n(79306),o=n(64117);e.exports=function(e,t){var n=e[t];return o(n)?void 0:r(n)}},83789:(e,t,n)=>{"use strict";var r=n(79306),o=n(28551),i=n(69565),a=n(91291),s=n(1767),u="Invalid size",l=RangeError,c=TypeError,f=Math.max,d=function(e,t){this.set=e,this.size=f(t,0),this.has=r(e.has),this.keys=r(e.keys)};d.prototype={getIterator:function(){return s(o(i(this.keys,this.set)))},includes:function(e){return i(this.has,this.set,e)}},e.exports=function(e){o(e);var t=+e.size;if(t!==t)throw new c(u);var n=a(t);if(n<0)throw new l(u);return new d(e,n)}},2478:(e,t,n)=>{"use strict";var r=n(79504),o=n(48981),i=Math.floor,a=r("".charAt),s=r("".replace),u=r("".slice),l=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,c=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,f,d){var h=n+e.length,p=r.length,g=c;return void 0!==f&&(f=o(f),g=l),s(d,g,(function(o,s){var l;switch(a(s,0)){case"$":return"$";case"&":return e;case"`":return u(t,0,n);case"'":return u(t,h);case"<":l=f[u(s,1,-1)];break;default:var c=+s;if(0===c)return o;if(c>p){var d=i(c/10);return 0===d?o:d<=p?void 0===r[d-1]?a(s,1):r[d-1]+a(s,1):o}l=r[c-1]}return void 0===l?"":l}))}},24475:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:(e,t,n)=>{"use strict";var r=n(79504),o=n(48981),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(o(e),t)}},30421:e=>{"use strict";e.exports={}},20397:(e,t,n)=>{"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:(e,t,n)=>{"use strict";var r=n(43724),o=n(79039),i=n(4055);e.exports=!r&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},47055:(e,t,n)=>{"use strict";var r=n(79504),o=n(79039),i=n(44576),a=Object,s=r("".split);e.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(e){return"String"===i(e)?s(e,""):a(e)}:a},33706:(e,t,n)=>{"use strict";var r=n(79504),o=n(94901),i=n(77629),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},91181:(e,t,n)=>{"use strict";var r,o,i,a=n(58622),s=n(24475),u=n(20034),l=n(66699),c=n(39297),f=n(77629),d=n(66119),h=n(30421),p="Object already initialized",g=s.TypeError,v=s.WeakMap;if(a||f.state){var y=f.state||(f.state=new v);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw new g(p);return t.facade=e,y.set(e,t),t},o=function(e){return y.get(e)||{}},i=function(e){return y.has(e)}}else{var m=d("state");h[m]=!0,r=function(e,t){if(c(e,m))throw new g(p);return t.facade=e,l(e,m,t),t},o=function(e){return c(e,m)?e[m]:{}},i=function(e){return c(e,m)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!u(t)||(n=o(t)).type!==e)throw new g("Incompatible receiver, "+e+" required");return n}}}},44209:(e,t,n)=>{"use strict";var r=n(78227),o=n(26269),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},94901:e=>{"use strict";var t="object"==typeof document&&document.all;e.exports="undefined"==typeof t&&void 0!==t?function(e){return"function"==typeof e||e===t}:function(e){return"function"==typeof e}},33517:(e,t,n)=>{"use strict";var r=n(79504),o=n(79039),i=n(94901),a=n(36955),s=n(97751),u=n(33706),l=function(){},c=s("Reflect","construct"),f=/^\s*(?:class|function)\b/,d=r(f.exec),h=!f.test(l),p=function(e){if(!i(e))return!1;try{return c(l,[],e),!0}catch(t){return!1}},g=function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return h||!!d(f,u(e))}catch(t){return!0}};g.sham=!0,e.exports=!c||o((function(){var e;return p(p.call)||!p(Object)||!p((function(){e=!0}))||e}))?g:p},92796:(e,t,n)=>{"use strict";var r=n(79039),o=n(94901),i=/#|\.prototype\./,a=function(e,t){var n=u[s(e)];return n===c||n!==l&&(o(t)?r(t):!!t)},s=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},u=a.data={},l=a.NATIVE="N",c=a.POLYFILL="P";e.exports=a},31563:(e,t,n)=>{"use strict";var r=n(36955),o=n(39297),i=n(64117),a=n(78227),s=n(26269),u=a("iterator"),l=Object;e.exports=function(e){if(i(e))return!1;var t=l(e);return void 0!==t[u]||"@@iterator"in t||o(s,r(t))}},64117:e=>{"use strict";e.exports=function(e){return null===e||void 0===e}},20034:(e,t,n)=>{"use strict";var r=n(94901);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},13925:(e,t,n)=>{"use strict";var r=n(20034);e.exports=function(e){return r(e)||null===e}},96395:e=>{"use strict";e.exports=!1},10757:(e,t,n)=>{"use strict";var r=n(97751),o=n(94901),i=n(1625),a=n(7040),s=Object;e.exports=a?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return o(t)&&i(t.prototype,s(e))}},40507:(e,t,n)=>{"use strict";var r=n(69565);e.exports=function(e,t,n){for(var o,i,a=n?e:e.iterator,s=e.next;!(o=r(s,a)).done;)if(void 0!==(i=t(o.value)))return i}},72652:(e,t,n)=>{"use strict";var r=n(76080),o=n(69565),i=n(28551),a=n(16823),s=n(44209),u=n(26198),l=n(1625),c=n(70081),f=n(50851),d=n(9539),h=TypeError,p=function(e,t){this.stopped=e,this.result=t},g=p.prototype;e.exports=function(e,t,n){var v,y,m,b,_,w,x,S=n&&n.that,A=!(!n||!n.AS_ENTRIES),E=!(!n||!n.IS_RECORD),C=!(!n||!n.IS_ITERATOR),R=!(!n||!n.INTERRUPTED),O=r(t,S),T=function(e){return v&&d(v,"normal",e),new p(!0,e)},k=function(e){return A?(i(e),R?O(e[0],e[1],T):O(e[0],e[1])):R?O(e,T):O(e)};if(E)v=e.iterator;else if(C)v=e;else{if(!(y=f(e)))throw new h(a(e)+" is not iterable");if(s(y)){for(m=0,b=u(e);b>m;m++)if((_=k(e[m]))&&l(g,_))return _;return new p(!1)}v=c(e,y)}for(w=E?e.next:v.next;!(x=o(w,v)).done;){try{_=k(x.value)}catch(M){d(v,"throw",M)}if("object"==typeof _&&_&&l(g,_))return _}return new p(!1)}},9539:(e,t,n)=>{"use strict";var r=n(69565),o=n(28551),i=n(55966);e.exports=function(e,t,n){var a,s;o(e);try{if(!(a=i(e,"return"))){if("throw"===t)throw n;return n}a=r(a,e)}catch(u){s=!0,a=u}if("throw"===t)throw n;if(s)throw a;return o(a),n}},33994:(e,t,n)=>{"use strict";var r=n(57657).IteratorPrototype,o=n(2360),i=n(6980),a=n(10687),s=n(26269),u=function(){return this};e.exports=function(e,t,n,l){var c=t+" Iterator";return e.prototype=o(r,{next:i(+!l,n)}),a(e,c,!1,!0),s[c]=u,e}},19462:(e,t,n)=>{"use strict";var r=n(69565),o=n(2360),i=n(66699),a=n(56279),s=n(78227),u=n(91181),l=n(55966),c=n(57657).IteratorPrototype,f=n(62529),d=n(9539),h=s("toStringTag"),p="IteratorHelper",g="WrapForValidIterator",v=u.set,y=function(e){var t=u.getterFor(e?g:p);return a(o(c),{next:function(){var n=t(this);if(e)return n.nextHandler();try{var r=n.done?void 0:n.nextHandler();return f(r,n.done)}catch(o){throw n.done=!0,o}},return:function(){var n=t(this),o=n.iterator;if(n.done=!0,e){var i=l(o,"return");return i?r(i,o):f(void 0,!0)}if(n.inner)try{d(n.inner.iterator,"normal")}catch(a){return d(o,"throw",a)}return d(o,"normal"),f(void 0,!0)}})},m=y(!0),b=y(!1);i(b,h,"Iterator Helper"),e.exports=function(e,t){var n=function(n,r){r?(r.iterator=n.iterator,r.next=n.next):r=n,r.type=t?g:p,r.nextHandler=e,r.counter=0,r.done=!1,v(this,r)};return n.prototype=t?m:b,n}},51088:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(96395),a=n(10350),s=n(94901),u=n(33994),l=n(42787),c=n(52967),f=n(10687),d=n(66699),h=n(36840),p=n(78227),g=n(26269),v=n(57657),y=a.PROPER,m=a.CONFIGURABLE,b=v.IteratorPrototype,_=v.BUGGY_SAFARI_ITERATORS,w=p("iterator"),x="keys",S="values",A="entries",E=function(){return this};e.exports=function(e,t,n,a,p,v,C){u(n,t,a);var R,O,T,k=function(e){if(e===p&&D)return D;if(!_&&e&&e in I)return I[e];switch(e){case x:case S:case A:return function(){return new n(this,e)}}return function(){return new n(this)}},M=t+" Iterator",P=!1,I=e.prototype,N=I[w]||I["@@iterator"]||p&&I[p],D=!_&&N||k(p),L="Array"===t&&I.entries||N;if(L&&(R=l(L.call(new e)))!==Object.prototype&&R.next&&(i||l(R)===b||(c?c(R,b):s(R[w])||h(R,w,E)),f(R,M,!0,!0),i&&(g[M]=E)),y&&p===S&&N&&N.name!==S&&(!i&&m?d(I,"name",S):(P=!0,D=function(){return o(N,this)})),p)if(O={values:k(S),keys:v?D:k(x),entries:k(A)},C)for(T in O)(_||P||!(T in I))&&h(I,T,O[T]);else r({target:t,proto:!0,forced:_||P},O);return i&&!C||I[w]===D||h(I,w,D,{name:p}),g[t]=D,O}},20713:(e,t,n)=>{"use strict";var r=n(69565),o=n(79306),i=n(28551),a=n(1767),s=n(19462),u=n(96319),l=s((function(){var e=this.iterator,t=i(r(this.next,e));if(!(this.done=!!t.done))return u(e,this.mapper,[t.value,this.counter++],!0)}));e.exports=function(e){return i(this),o(e),new l(a(this),{mapper:e})}},57657:(e,t,n)=>{"use strict";var r,o,i,a=n(79039),s=n(94901),u=n(20034),l=n(2360),c=n(42787),f=n(36840),d=n(78227),h=n(96395),p=d("iterator"),g=!1;[].keys&&("next"in(i=[].keys())?(o=c(c(i)))!==Object.prototype&&(r=o):g=!0),!u(r)||a((function(){var e={};return r[p].call(e)!==e}))?r={}:h&&(r=l(r)),s(r[p])||f(r,p,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:g}},26269:e=>{"use strict";e.exports={}},26198:(e,t,n)=>{"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:(e,t,n)=>{"use strict";var r=n(79504),o=n(79039),i=n(94901),a=n(39297),s=n(43724),u=n(10350).CONFIGURABLE,l=n(33706),c=n(91181),f=c.enforce,d=c.get,h=String,p=Object.defineProperty,g=r("".slice),v=r("".replace),y=r([].join),m=s&&!o((function(){return 8!==p((function(){}),"length",{value:8}).length})),b=String(String).split("String"),_=e.exports=function(e,t,n){"Symbol("===g(h(t),0,7)&&(t="["+v(h(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||u&&e.name!==t)&&(s?p(e,"name",{value:t,configurable:!0}):e.name=t),m&&n&&a(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?s&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(o){}var r=f(e);return a(r,"source")||(r.source=y(b,"string"==typeof t?t:"")),e};Function.prototype.toString=_((function(){return i(this)&&d(this).source||l(this)}),"toString")},72248:(e,t,n)=>{"use strict";var r=n(79504),o=Map.prototype;e.exports={Map:Map,set:r(o.set),get:r(o.get),has:r(o.has),remove:r(o.delete),proto:o}},26223:(e,t,n)=>{"use strict";var r=n(79504),o=n(40507),i=n(72248),a=i.Map,s=i.proto,u=r(s.forEach),l=r(s.entries),c=l(new a).next;e.exports=function(e,t,n){return n?o({iterator:l(e),next:c},(function(e){return t(e[1],e[0])})):u(e,t)}},80741:e=>{"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},36043:(e,t,n)=>{"use strict";var r=n(79306),o=TypeError,i=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw new o("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new i(e)}},2360:(e,t,n)=>{"use strict";var r,o=n(28551),i=n(96801),a=n(88727),s=n(30421),u=n(20397),l=n(4055),c=n(66119),f="prototype",d="script",h=c("IE_PROTO"),p=function(){},g=function(e){return"<"+d+">"+e+""},v=function(e){e.write(g("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(t){}y="undefined"!=typeof document?document.domain&&r?v(r):function(){var e,t=l("iframe"),n="java"+d+":";return t.style.display="none",u.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(g("document.F=Object")),e.close(),e.F}():v(r);for(var e=a.length;e--;)delete y[f][a[e]];return y()};s[h]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p[f]=o(e),n=new p,p[f]=null,n[h]=e):n=y(),void 0===t?n:i.f(n,t)}},96801:(e,t,n)=>{"use strict";var r=n(43724),o=n(48686),i=n(24913),a=n(28551),s=n(25397),u=n(71072);t.f=r&&!o?Object.defineProperties:function(e,t){a(e);for(var n,r=s(t),o=u(t),l=o.length,c=0;l>c;)i.f(e,n=o[c++],r[n]);return e}},24913:(e,t,n)=>{"use strict";var r=n(43724),o=n(35917),i=n(48686),a=n(28551),s=n(56969),u=TypeError,l=Object.defineProperty,c=Object.getOwnPropertyDescriptor,f="enumerable",d="configurable",h="writable";t.f=r?i?function(e,t,n){if(a(e),t=s(t),a(n),"function"===typeof e&&"prototype"===t&&"value"in n&&h in n&&!n[h]){var r=c(e,t);r&&r[h]&&(e[t]=n.value,n={configurable:d in n?n[d]:r[d],enumerable:f in n?n[f]:r[f],writable:!1})}return l(e,t,n)}:l:function(e,t,n){if(a(e),t=s(t),a(n),o)try{return l(e,t,n)}catch(r){}if("get"in n||"set"in n)throw new u("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:(e,t,n)=>{"use strict";var r=n(43724),o=n(69565),i=n(48773),a=n(6980),s=n(25397),u=n(56969),l=n(39297),c=n(35917),f=Object.getOwnPropertyDescriptor;t.f=r?f:function(e,t){if(e=s(e),t=u(t),c)try{return f(e,t)}catch(n){}if(l(e,t))return a(!o(i.f,e,t),e[t])}},38480:(e,t,n)=>{"use strict";var r=n(61828),o=n(88727).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},33717:(e,t)=>{"use strict";t.f=Object.getOwnPropertySymbols},42787:(e,t,n)=>{"use strict";var r=n(39297),o=n(94901),i=n(48981),a=n(66119),s=n(12211),u=a("IE_PROTO"),l=Object,c=l.prototype;e.exports=s?l.getPrototypeOf:function(e){var t=i(e);if(r(t,u))return t[u];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof l?c:null}},1625:(e,t,n)=>{"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:(e,t,n)=>{"use strict";var r=n(79504),o=n(39297),i=n(25397),a=n(19617).indexOf,s=n(30421),u=r([].push);e.exports=function(e,t){var n,r=i(e),l=0,c=[];for(n in r)!o(s,n)&&o(r,n)&&u(c,n);for(;t.length>l;)o(r,n=t[l++])&&(~a(c,n)||u(c,n));return c}},71072:(e,t,n)=>{"use strict";var r=n(61828),o=n(88727);e.exports=Object.keys||function(e){return r(e,o)}},48773:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},52967:(e,t,n)=>{"use strict";var r=n(46706),o=n(20034),i=n(67750),a=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(s){}return function(n,r){return i(n),a(r),o(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},84270:(e,t,n)=>{"use strict";var r=n(69565),o=n(94901),i=n(20034),a=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&o(n=e.toString)&&!i(s=r(n,e)))return s;if(o(n=e.valueOf)&&!i(s=r(n,e)))return s;if("string"!==t&&o(n=e.toString)&&!i(s=r(n,e)))return s;throw new a("Can't convert object to primitive value")}},35031:(e,t,n)=>{"use strict";var r=n(97751),o=n(79504),i=n(38480),a=n(33717),s=n(28551),u=o([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=i.f(s(e)),n=a.f;return n?u(t,n(e)):t}},1103:e=>{"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},80550:(e,t,n)=>{"use strict";var r=n(24475);e.exports=r.Promise},93438:(e,t,n)=>{"use strict";var r=n(28551),o=n(20034),i=n(36043);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},56682:(e,t,n)=>{"use strict";var r=n(69565),o=n(28551),i=n(94901),a=n(44576),s=n(57323),u=TypeError;e.exports=function(e,t){var n=e.exec;if(i(n)){var l=r(n,e,t);return null!==l&&o(l),l}if("RegExp"===a(e))return r(s,e,t);throw new u("RegExp#exec called on incompatible receiver")}},57323:(e,t,n)=>{"use strict";var r=n(69565),o=n(79504),i=n(655),a=n(67979),s=n(58429),u=n(25745),l=n(2360),c=n(91181).get,f=n(83635),d=n(18814),h=u("native-string-replace",String.prototype.replace),p=RegExp.prototype.exec,g=p,v=o("".charAt),y=o("".indexOf),m=o("".replace),b=o("".slice),_=function(){var e=/a/,t=/b*/g;return r(p,e,"a"),r(p,t,"a"),0!==e.lastIndex||0!==t.lastIndex}(),w=s.BROKEN_CARET,x=void 0!==/()??/.exec("")[1];(_||x||w||f||d)&&(g=function(e){var t,n,o,s,u,f,d,S=this,A=c(S),E=i(e),C=A.raw;if(C)return C.lastIndex=S.lastIndex,t=r(g,C,E),S.lastIndex=C.lastIndex,t;var R=A.groups,O=w&&S.sticky,T=r(a,S),k=S.source,M=0,P=E;if(O&&(T=m(T,"y",""),-1===y(T,"g")&&(T+="g"),P=b(E,S.lastIndex),S.lastIndex>0&&(!S.multiline||S.multiline&&"\n"!==v(E,S.lastIndex-1))&&(k="(?: "+k+")",P=" "+P,M++),n=new RegExp("^(?:"+k+")",T)),x&&(n=new RegExp("^"+k+"$(?!\\s)",T)),_&&(o=S.lastIndex),s=r(p,O?n:S,P),O?s?(s.input=b(s.input,M),s[0]=b(s[0],M),s.index=S.lastIndex,S.lastIndex+=s[0].length):S.lastIndex=0:_&&s&&(S.lastIndex=S.global?s.index+s[0].length:o),x&&s&&s.length>1&&r(h,s[0],n,(function(){for(u=1;u{"use strict";var r=n(28551);e.exports=function(){var e=r(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},58429:(e,t,n)=>{"use strict";var r=n(79039),o=n(24475).RegExp,i=r((function(){var e=o("a","y");return e.lastIndex=2,null!==e.exec("abcd")})),a=i||r((function(){return!o("a","y").sticky})),s=i||r((function(){var e=o("^r","gy");return e.lastIndex=2,null!==e.exec("str")}));e.exports={BROKEN_CARET:s,MISSED_STICKY:a,UNSUPPORTED_Y:i}},83635:(e,t,n)=>{"use strict";var r=n(79039),o=n(24475).RegExp;e.exports=r((function(){var e=o(".","s");return!(e.dotAll&&e.test("\n")&&"s"===e.flags)}))},18814:(e,t,n)=>{"use strict";var r=n(79039),o=n(24475).RegExp;e.exports=r((function(){var e=o("(?b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")}))},67750:(e,t,n)=>{"use strict";var r=n(64117),o=TypeError;e.exports=function(e){if(r(e))throw new o("Can't call method on "+e);return e}},93389:(e,t,n)=>{"use strict";var r=n(24475),o=n(43724),i=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!o)return r[e];var t=i(r,e);return t&&t.value}},33317:e=>{"use strict";e.exports=function(e,t){return e===t||e!==e&&t!==t}},89286:(e,t,n)=>{"use strict";var r=n(94402),o=n(38469),i=r.Set,a=r.add;e.exports=function(e){var t=new i;return o(e,(function(e){a(t,e)})),t}},83440:(e,t,n)=>{"use strict";var r=n(97080),o=n(94402),i=n(89286),a=n(25170),s=n(83789),u=n(38469),l=n(40507),c=o.has,f=o.remove;e.exports=function(e){var t=r(this),n=s(e),o=i(t);return a(t)<=n.size?u(t,(function(e){n.includes(e)&&f(o,e)})):l(n.getIterator(),(function(e){c(t,e)&&f(o,e)})),o}},94402:(e,t,n)=>{"use strict";var r=n(79504),o=Set.prototype;e.exports={Set:Set,add:r(o.add),has:r(o.has),remove:r(o.delete),proto:o}},68750:(e,t,n)=>{"use strict";var r=n(97080),o=n(94402),i=n(25170),a=n(83789),s=n(38469),u=n(40507),l=o.Set,c=o.add,f=o.has;e.exports=function(e){var t=r(this),n=a(e),o=new l;return i(t)>n.size?u(n.getIterator(),(function(e){f(t,e)&&c(o,e)})):s(t,(function(e){n.includes(e)&&c(o,e)})),o}},64449:(e,t,n)=>{"use strict";var r=n(97080),o=n(94402).has,i=n(25170),a=n(83789),s=n(38469),u=n(40507),l=n(9539);e.exports=function(e){var t=r(this),n=a(e);if(i(t)<=n.size)return!1!==s(t,(function(e){if(n.includes(e))return!1}),!0);var c=n.getIterator();return!1!==u(c,(function(e){if(o(t,e))return l(c,"normal",!1)}))}},53838:(e,t,n)=>{"use strict";var r=n(97080),o=n(25170),i=n(38469),a=n(83789);e.exports=function(e){var t=r(this),n=a(e);return!(o(t)>n.size)&&!1!==i(t,(function(e){if(!n.includes(e))return!1}),!0)}},28527:(e,t,n)=>{"use strict";var r=n(97080),o=n(94402).has,i=n(25170),a=n(83789),s=n(40507),u=n(9539);e.exports=function(e){var t=r(this),n=a(e);if(i(t){"use strict";var r=n(79504),o=n(40507),i=n(94402),a=i.Set,s=i.proto,u=r(s.forEach),l=r(s.keys),c=l(new a).next;e.exports=function(e,t,n){return n?o({iterator:l(e),next:c},t):u(e,t)}},25170:(e,t,n)=>{"use strict";var r=n(46706),o=n(94402);e.exports=r(o.proto,"size","get")||function(e){return e.size}},83650:(e,t,n)=>{"use strict";var r=n(97080),o=n(94402),i=n(89286),a=n(83789),s=n(40507),u=o.add,l=o.has,c=o.remove;e.exports=function(e){var t=r(this),n=a(e).getIterator(),o=i(t);return s(n,(function(e){l(t,e)?c(o,e):u(o,e)})),o}},10687:(e,t,n)=>{"use strict";var r=n(24913).f,o=n(39297),i=n(78227)("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!o(e,i)&&r(e,i,{configurable:!0,value:t})}},44204:(e,t,n)=>{"use strict";var r=n(97080),o=n(94402).add,i=n(89286),a=n(83789),s=n(40507);e.exports=function(e){var t=r(this),n=a(e).getIterator(),u=i(t);return s(n,(function(e){o(u,e)})),u}},66119:(e,t,n)=>{"use strict";var r=n(25745),o=n(33392),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},77629:(e,t,n)=>{"use strict";var r=n(96395),o=n(24475),i=n(39433),a="__core-js_shared__",s=e.exports=o[a]||i(a,{});(s.versions||(s.versions=[])).push({version:"3.37.0",mode:r?"pure":"global",copyright:"\xa9 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.37.0/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:(e,t,n)=>{"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},2293:(e,t,n)=>{"use strict";var r=n(28551),o=n(35548),i=n(64117),a=n(78227)("species");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||i(n=r(s)[a])?t:o(n)}},68183:(e,t,n)=>{"use strict";var r=n(79504),o=n(91291),i=n(655),a=n(67750),s=r("".charAt),u=r("".charCodeAt),l=r("".slice),c=function(e){return function(t,n){var r,c,f=i(a(t)),d=o(n),h=f.length;return d<0||d>=h?e?"":void 0:(r=u(f,d))<55296||r>56319||d+1===h||(c=u(f,d+1))<56320||c>57343?e?s(f,d):r:e?l(f,d,d+2):c-56320+(r-55296<<10)+65536}};e.exports={codeAt:c(!1),charAt:c(!0)}},4495:(e,t,n)=>{"use strict";var r=n(77388),o=n(79039),i=n(24475).String;e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol("symbol detection");return!i(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},35610:(e,t,n)=>{"use strict";var r=n(91291),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},25397:(e,t,n)=>{"use strict";var r=n(47055),o=n(67750);e.exports=function(e){return r(o(e))}},91291:(e,t,n)=>{"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!==t||0===t?0:r(t)}},18014:(e,t,n)=>{"use strict";var r=n(91291),o=Math.min;e.exports=function(e){var t=r(e);return t>0?o(t,9007199254740991):0}},48981:(e,t,n)=>{"use strict";var r=n(67750),o=Object;e.exports=function(e){return o(r(e))}},72777:(e,t,n)=>{"use strict";var r=n(69565),o=n(20034),i=n(10757),a=n(55966),s=n(84270),u=n(78227),l=TypeError,c=u("toPrimitive");e.exports=function(e,t){if(!o(e)||i(e))return e;var n,u=a(e,c);if(u){if(void 0===t&&(t="default"),n=r(u,e,t),!o(n)||i(n))return n;throw new l("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},56969:(e,t,n)=>{"use strict";var r=n(72777),o=n(10757);e.exports=function(e){var t=r(e,"string");return o(t)?t:t+""}},47650:(e,t,n)=>{"use strict";var r=n(97751),o=n(94901),i=n(31563),a=n(20034),s=r("Set");e.exports=function(e){return function(e){return a(e)&&"number"==typeof e.size&&o(e.has)&&o(e.keys)}(e)?e:i(e)?new s(e):e}},92140:(e,t,n)=>{"use strict";var r={};r[n(78227)("toStringTag")]="z",e.exports="[object z]"===String(r)},655:(e,t,n)=>{"use strict";var r=n(36955),o=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return o(e)}},16823:e=>{"use strict";var t=String;e.exports=function(e){try{return t(e)}catch(n){return"Object"}}},33392:(e,t,n)=>{"use strict";var r=n(79504),o=0,i=Math.random(),a=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++o+i,36)}},67416:(e,t,n)=>{"use strict";var r=n(79039),o=n(78227),i=n(43724),a=n(96395),s=o("iterator");e.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n=new URLSearchParams("a=1&a=2&b=3"),r="";return e.pathname="c%20d",t.forEach((function(e,n){t.delete("b"),r+=n+e})),n.delete("a",2),n.delete("b",void 0),a&&(!e.toJSON||!n.has("a",1)||n.has("a",2)||!n.has("a",void 0)||n.has("b"))||!t.size&&(a||!i)||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[s]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://\u0442\u0435\u0441\u0442").host||"#%D0%B1"!==new URL("http://a#\u0431").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},7040:(e,t,n)=>{"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:(e,t,n)=>{"use strict";var r=n(43724),o=n(79039);e.exports=r&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},22812:e=>{"use strict";var t=TypeError;e.exports=function(e,n){if(e{"use strict";var r=n(24475),o=n(94901),i=r.WeakMap;e.exports=o(i)&&/native code/.test(String(i))},78227:(e,t,n)=>{"use strict";var r=n(24475),o=n(25745),i=n(39297),a=n(33392),s=n(4495),u=n(7040),l=r.Symbol,c=o("wks"),f=u?l.for||l:l&&l.withoutSetter||a;e.exports=function(e){return i(c,e)||(c[e]=s&&i(l,e)?l[e]:f("Symbol."+e)),c[e]}},23792:(e,t,n)=>{"use strict";var r=n(25397),o=n(6469),i=n(26269),a=n(91181),s=n(24913).f,u=n(51088),l=n(62529),c=n(96395),f=n(43724),d="Array Iterator",h=a.set,p=a.getterFor(d);e.exports=u(Array,"Array",(function(e,t){h(this,{type:d,target:r(e),index:0,kind:t})}),(function(){var e=p(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=void 0,l(void 0,!0);switch(e.kind){case"keys":return l(n,!1);case"values":return l(t[n],!1)}return l([n,t[n]],!1)}),"values");var g=i.Arguments=i.Array;if(o("keys"),o("values"),o("entries"),!c&&f&&"values"!==g.name)try{s(g,"name",{value:"values"})}catch(v){}},9391:(e,t,n)=>{"use strict";var r=n(46518),o=n(96395),i=n(80550),a=n(79039),s=n(97751),u=n(94901),l=n(2293),c=n(93438),f=n(36840),d=i&&i.prototype;if(r({target:"Promise",proto:!0,real:!0,forced:!!i&&a((function(){d.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=l(this,s("Promise")),n=u(e);return this.then(n?function(n){return c(t,e()).then((function(){return n}))}:e,n?function(n){return c(t,e()).then((function(){throw n}))}:e)}}),!o&&u(i)){var h=s("Promise").prototype.finally;d.finally!==h&&f(d,"finally",h,{unsafe:!0})}},27495:(e,t,n)=>{"use strict";var r=n(46518),o=n(57323);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},69479:(e,t,n)=>{"use strict";var r=n(24475),o=n(43724),i=n(62106),a=n(67979),s=n(79039),u=r.RegExp,l=u.prototype;o&&s((function(){var e=!0;try{u(".","d")}catch(s){e=!1}var t={},n="",r=e?"dgimsy":"gimsy",o=function(e,r){Object.defineProperty(t,e,{get:function(){return n+=r,!0}})},i={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var a in e&&(i.hasIndices="d"),i)o(a,i[a]);return Object.getOwnPropertyDescriptor(l,"flags").get.call(t)!==r||n!==r}))&&i(l,"flags",{configurable:!0,get:a})},25440:(e,t,n)=>{"use strict";var r=n(18745),o=n(69565),i=n(79504),a=n(89228),s=n(79039),u=n(28551),l=n(94901),c=n(64117),f=n(91291),d=n(18014),h=n(655),p=n(67750),g=n(57829),v=n(55966),y=n(2478),m=n(56682),b=n(78227)("replace"),_=Math.max,w=Math.min,x=i([].concat),S=i([].push),A=i("".indexOf),E=i("".slice),C="$0"==="a".replace(/./,"$0"),R=!!/./[b]&&""===/./[b]("a","$0");a("replace",(function(e,t,n){var i=R?"$":"$0";return[function(e,n){var r=p(this),i=c(e)?void 0:v(e,b);return i?o(i,e,r,n):o(t,h(r),e,n)},function(e,o){var a=u(this),s=h(e);if("string"==typeof o&&-1===A(o,i)&&-1===A(o,"$<")){var c=n(t,a,s,o);if(c.done)return c.value}var p=l(o);p||(o=h(o));var v,b=a.global;b&&(v=a.unicode,a.lastIndex=0);for(var C,R=[];null!==(C=m(a,s))&&(S(R,C),b);){""===h(C[0])&&(a.lastIndex=g(s,d(a.lastIndex),v))}for(var O,T="",k=0,M=0;M=k&&(T+=E(s,k,N)+P,k=N+I.length)}return T+E(s,k)}]}),!!s((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}))||!C||R)},74648:(e,t,n)=>{"use strict";var r=n(46518),o=n(36639).every;r({target:"AsyncIterator",proto:!0,real:!0},{every:function(e){return o(this,e)}})},17333:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(79306),a=n(28551),s=n(20034),u=n(1767),l=n(92059),c=n(62529),f=n(20772),d=n(96395),h=l((function(e){var t=this,n=t.iterator,r=t.predicate;return new e((function(i,u){var l=function(e){t.done=!0,u(e)},d=function(e){f(n,l,e,l)},h=function(){try{e.resolve(a(o(t.next,n))).then((function(n){try{if(a(n).done)t.done=!0,i(c(void 0,!0));else{var o=n.value;try{var u=r(o,t.counter++),f=function(e){e?i(c(o,!1)):h()};s(u)?e.resolve(u).then(f,d):f(u)}catch(p){d(p)}}}catch(g){l(g)}}),l)}catch(u){l(u)}};h()}))}));r({target:"AsyncIterator",proto:!0,real:!0,forced:d},{filter:function(e){return a(this),i(e),new h(u(this),{predicate:e})}})},3064:(e,t,n)=>{"use strict";var r=n(46518),o=n(36639).find;r({target:"AsyncIterator",proto:!0,real:!0},{find:function(e){return o(this,e)}})},9920:(e,t,n)=>{"use strict";var r=n(46518),o=n(36639).forEach;r({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(e){return o(this,e)}})},41393:(e,t,n)=>{"use strict";var r=n(46518),o=n(41750);r({target:"AsyncIterator",proto:!0,real:!0,forced:n(96395)},{map:o})},14905:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(79306),a=n(28551),s=n(20034),u=n(97751),l=n(1767),c=n(20772),f=u("Promise"),d=TypeError;r({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(e){a(this),i(e);var t=l(this),n=t.iterator,r=t.next,u=arguments.length<2,h=u?void 0:arguments[1],p=0;return new f((function(t,i){var l=function(e){c(n,i,e,i)},g=function(){try{f.resolve(a(o(r,n))).then((function(n){try{if(a(n).done)u?i(new d("Reduce of empty iterator with no initial value")):t(h);else{var r=n.value;if(u)u=!1,h=r,g();else try{var o=e(h,r,p),c=function(e){h=e,g()};s(o)?f.resolve(o).then(c,l):c(o)}catch(v){l(v)}}p++}catch(y){i(y)}}),i)}catch(c){i(c)}};g()}))}})},8159:(e,t,n)=>{"use strict";var r=n(46518),o=n(36639).some;r({target:"AsyncIterator",proto:!0,real:!0},{some:function(e){return o(this,e)}})},98992:(e,t,n)=>{"use strict";var r=n(46518),o=n(24475),i=n(90679),a=n(28551),s=n(94901),u=n(42787),l=n(62106),c=n(97040),f=n(79039),d=n(39297),h=n(78227),p=n(57657).IteratorPrototype,g=n(43724),v=n(96395),y="constructor",m="Iterator",b=h("toStringTag"),_=TypeError,w=o[m],x=v||!s(w)||w.prototype!==p||!f((function(){w({})})),S=function(){if(i(this,p),u(this)===p)throw new _("Abstract class Iterator not directly constructable")},A=function(e,t){g?l(p,e,{configurable:!0,get:function(){return t},set:function(t){if(a(this),this===p)throw new _("You can't redefine this property");d(this,e)?this[e]=t:c(this,e,t)}}):p[e]=t};d(p,b)||A(b,m),!x&&d(p,y)&&p[y]!==Object||A(y,S),S.prototype=p,r({global:!0,constructor:!0,forced:x},{Iterator:S})},23215:(e,t,n)=>{"use strict";var r=n(46518),o=n(72652),i=n(79306),a=n(28551),s=n(1767);r({target:"Iterator",proto:!0,real:!0},{every:function(e){a(this),i(e);var t=s(this),n=0;return!o(t,(function(t,r){if(!e(t,n++))return r()}),{IS_RECORD:!0,INTERRUPTED:!0}).stopped}})},54520:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(79306),a=n(28551),s=n(1767),u=n(19462),l=n(96319),c=n(96395),f=u((function(){for(var e,t,n=this.iterator,r=this.predicate,i=this.next;;){if(e=a(o(i,n)),this.done=!!e.done)return;if(t=e.value,l(n,r,[t,this.counter++],!0))return t}}));r({target:"Iterator",proto:!0,real:!0,forced:c},{filter:function(e){return a(this),i(e),new f(s(this),{predicate:e})}})},72577:(e,t,n)=>{"use strict";var r=n(46518),o=n(72652),i=n(79306),a=n(28551),s=n(1767);r({target:"Iterator",proto:!0,real:!0},{find:function(e){a(this),i(e);var t=s(this),n=0;return o(t,(function(t,r){if(e(t,n++))return r(t)}),{IS_RECORD:!0,INTERRUPTED:!0}).result}})},3949:(e,t,n)=>{"use strict";var r=n(46518),o=n(72652),i=n(79306),a=n(28551),s=n(1767);r({target:"Iterator",proto:!0,real:!0},{forEach:function(e){a(this),i(e);var t=s(this),n=0;o(t,(function(t){e(t,n++)}),{IS_RECORD:!0})}})},81454:(e,t,n)=>{"use strict";var r=n(46518),o=n(20713);r({target:"Iterator",proto:!0,real:!0,forced:n(96395)},{map:o})},8872:(e,t,n)=>{"use strict";var r=n(46518),o=n(72652),i=n(79306),a=n(28551),s=n(1767),u=TypeError;r({target:"Iterator",proto:!0,real:!0},{reduce:function(e){a(this),i(e);var t=s(this),n=arguments.length<2,r=n?void 0:arguments[1],l=0;if(o(t,(function(t){n?(n=!1,r=t):r=e(r,t,l),l++}),{IS_RECORD:!0}),n)throw new u("Reduce of empty iterator with no initial value");return r}})},37550:(e,t,n)=>{"use strict";var r=n(46518),o=n(72652),i=n(79306),a=n(28551),s=n(1767);r({target:"Iterator",proto:!0,real:!0},{some:function(e){a(this),i(e);var t=s(this),n=0;return o(t,(function(t,r){if(e(t,n++))return r()}),{IS_RECORD:!0,INTERRUPTED:!0}).stopped}})},71517:(e,t,n)=>{"use strict";var r=n(46518),o=n(13813),i=n(72248).remove;r({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var e,t=o(this),n=!0,r=0,a=arguments.length;r{"use strict";var r=n(46518),o=n(13813),i=n(72248),a=i.get,s=i.has,u=i.set;r({target:"Map",proto:!0,real:!0,forced:!0},{emplace:function(e,t){var n,r,i=o(this);return s(i,e)?(n=a(i,e),"update"in t&&(n=t.update(n,e,i),u(i,e,n)),n):(r=t.insert(e,i),u(i,e,r),r)}})},93777:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(26223);r({target:"Map",proto:!0,real:!0,forced:!0},{every:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0);return!1!==a(t,(function(e,r){if(!n(e,r,t))return!1}),!0)}})},14190:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(72248),s=n(26223),u=a.Map,l=a.set;r({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=new u;return s(t,(function(e,o){n(e,o,t)&&l(r,o,e)})),r}})},86097:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(26223);r({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=a(t,(function(e,r){if(n(e,r,t))return{key:r}}),!0);return r&&r.key}})},12359:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(26223);r({target:"Map",proto:!0,real:!0,forced:!0},{find:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=a(t,(function(e,r){if(n(e,r,t))return{value:e}}),!0);return r&&r.value}})},17273:(e,t,n)=>{"use strict";var r=n(46518),o=n(33317),i=n(13813),a=n(26223);r({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(e){return!0===a(i(this),(function(t){if(o(t,e))return!0}),!0)}})},27415:(e,t,n)=>{"use strict";var r=n(46518),o=n(13813),i=n(26223);r({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(e){var t=i(o(this),(function(t,n){if(t===e)return{key:n}}),!0);return t&&t.key}})},19929:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(72248),s=n(26223),u=a.Map,l=a.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=new u;return s(t,(function(e,o){l(r,n(e,o,t),e)})),r}})},37583:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(72248),s=n(26223),u=a.Map,l=a.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=new u;return s(t,(function(e,o){l(r,o,n(e,o,t))})),r}})},55122:(e,t,n)=>{"use strict";var r=n(46518),o=n(13813),i=n(72652),a=n(72248).set;r({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(e){for(var t=o(this),n=arguments.length,r=0;r{"use strict";var r=n(46518),o=n(79306),i=n(13813),a=n(26223),s=TypeError;r({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(e){var t=i(this),n=arguments.length<2,r=n?void 0:arguments[1];if(o(e),a(t,(function(o,i){n?(n=!1,r=o):r=e(r,o,i,t)})),n)throw new s("Reduce of empty map with no initial value");return r}})},57268:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(13813),a=n(26223);r({target:"Map",proto:!0,real:!0,forced:!0},{some:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0);return!0===a(t,(function(e,r){if(n(e,r,t))return!0}),!0)}})},79733:(e,t,n)=>{"use strict";var r=n(46518),o=n(79306),i=n(13813),a=n(72248),s=TypeError,u=a.get,l=a.has,c=a.set;r({target:"Map",proto:!0,real:!0,forced:!0},{update:function(e,t){var n=i(this),r=arguments.length;o(t);var a=l(n,e);if(!a&&r<3)throw new s("Updating absent value");var f=a?u(n,e):o(r>2?arguments[2]:void 0)(e,n);return c(n,e,t(f,e,n)),n}})},25509:(e,t,n)=>{"use strict";var r=n(46518),o=n(97080),i=n(94402).add;r({target:"Set",proto:!0,real:!0,forced:!0},{addAll:function(){for(var e=o(this),t=0,n=arguments.length;t{"use strict";var r=n(46518),o=n(97080),i=n(94402).remove;r({target:"Set",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var e,t=o(this),n=!0,r=0,a=arguments.length;r{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(83440);r({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(e){return o(a,this,i(e))}})},41927:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(97080),a=n(38469);r({target:"Set",proto:!0,real:!0,forced:!0},{every:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0);return!1!==a(t,(function(e){if(!n(e,e,t))return!1}),!0)}})},11632:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(97080),a=n(94402),s=n(38469),u=a.Set,l=a.add;r({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=new u;return s(t,(function(e){n(e,e,t)&&l(r,e)})),r}})},64377:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(97080),a=n(38469);r({target:"Set",proto:!0,real:!0,forced:!0},{find:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=a(t,(function(e){if(n(e,e,t))return{value:e}}),!0);return r&&r.value}})},66771:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(68750);r({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(e){return o(a,this,i(e))}})},12516:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(64449);r({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(e){return o(a,this,i(e))}})},68931:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(53838);r({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(e){return o(a,this,i(e))}})},52514:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(28527);r({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(e){return o(a,this,i(e))}})},35694:(e,t,n)=>{"use strict";var r=n(46518),o=n(79504),i=n(97080),a=n(38469),s=n(655),u=o([].join),l=o([].push);r({target:"Set",proto:!0,real:!0,forced:!0},{join:function(e){var t=i(this),n=void 0===e?",":s(e),r=[];return a(t,(function(e){l(r,e)})),u(r,n)}})},52774:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(97080),a=n(94402),s=n(38469),u=a.Set,l=a.add;r({target:"Set",proto:!0,real:!0,forced:!0},{map:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0),r=new u;return s(t,(function(e){l(r,n(e,e,t))})),r}})},49536:(e,t,n)=>{"use strict";var r=n(46518),o=n(79306),i=n(97080),a=n(38469),s=TypeError;r({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(e){var t=i(this),n=arguments.length<2,r=n?void 0:arguments[1];if(o(e),a(t,(function(o){n?(n=!1,r=o):r=e(r,o,o,t)})),n)throw new s("Reduce of empty set with no initial value");return r}})},21926:(e,t,n)=>{"use strict";var r=n(46518),o=n(76080),i=n(97080),a=n(38469);r({target:"Set",proto:!0,real:!0,forced:!0},{some:function(e){var t=i(this),n=o(e,arguments.length>1?arguments[1]:void 0);return!0===a(t,(function(e){if(n(e,e,t))return!0}),!0)}})},94483:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(83650);r({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(e){return o(a,this,i(e))}})},16215:(e,t,n)=>{"use strict";var r=n(46518),o=n(69565),i=n(47650),a=n(44204);r({target:"Set",proto:!0,real:!0,forced:!0},{union:function(e){return o(a,this,i(e))}})},62953:(e,t,n)=>{"use strict";var r=n(24475),o=n(67400),i=n(79296),a=n(23792),s=n(66699),u=n(10687),l=n(78227)("iterator"),c=a.values,f=function(e,t){if(e){if(e[l]!==c)try{s(e,l,c)}catch(r){e[l]=c}if(u(e,t,!0),o[t])for(var n in a)if(e[n]!==a[n])try{s(e,n,a[n])}catch(r){e[n]=a[n]}}};for(var d in o)f(r[d]&&r[d].prototype,d);f(i,"DOMTokenList")},98406:(e,t,n)=>{"use strict";n(23792);var r=n(46518),o=n(24475),i=n(93389),a=n(69565),s=n(79504),u=n(43724),l=n(67416),c=n(36840),f=n(62106),d=n(56279),h=n(10687),p=n(33994),g=n(91181),v=n(90679),y=n(94901),m=n(39297),b=n(76080),_=n(36955),w=n(28551),x=n(20034),S=n(655),A=n(2360),E=n(6980),C=n(70081),R=n(50851),O=n(62529),T=n(22812),k=n(78227),M=n(74488),P=k("iterator"),I="URLSearchParams",N=I+"Iterator",D=g.set,L=g.getterFor(I),F=g.getterFor(N),j=i("fetch"),U=i("Request"),z=i("Headers"),B=U&&U.prototype,V=z&&z.prototype,$=o.RegExp,H=o.TypeError,W=o.decodeURIComponent,q=o.encodeURIComponent,G=s("".charAt),Y=s([].join),X=s([].push),K=s("".replace),Z=s([].shift),Q=s([].splice),J=s("".split),ee=s("".slice),te=/\+/g,ne=Array(4),re=function(e){return ne[e-1]||(ne[e-1]=$("((?:%[\\da-f]{2}){"+e+"})","gi"))},oe=function(e){try{return W(e)}catch(t){return e}},ie=function(e){var t=K(e,te," "),n=4;try{return W(t)}catch(r){for(;n;)t=K(t,re(n--),oe);return t}},ae=/[!'()~]|%20/g,se={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ue=function(e){return se[e]},le=function(e){return K(q(e),ae,ue)},ce=p((function(e,t){D(this,{type:N,target:L(e).entries,index:0,kind:t})}),I,(function(){var e=F(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=void 0,O(void 0,!0);var r=t[n];switch(e.kind){case"keys":return O(r.key,!1);case"values":return O(r.value,!1)}return O([r.key,r.value],!1)}),!0),fe=function(e){this.entries=[],this.url=null,void 0!==e&&(x(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===G(e,0)?ee(e,1):e:S(e)))};fe.prototype={type:I,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,o,i,s,u,l=this.entries,c=R(e);if(c)for(n=(t=C(e,c)).next;!(r=a(n,t)).done;){if(i=(o=C(w(r.value))).next,(s=a(i,o)).done||(u=a(i,o)).done||!a(i,o).done)throw new H("Expected sequence with length 2");X(l,{key:S(s.value),value:S(u.value)})}else for(var f in e)m(e,f)&&X(l,{key:f,value:S(e[f])})},parseQuery:function(e){if(e)for(var t,n,r=this.entries,o=J(e,"&"),i=0;i0?arguments[0]:void 0));u||(this.size=e.entries.length)},he=de.prototype;if(d(he,{append:function(e,t){var n=L(this);T(arguments.length,2),X(n.entries,{key:S(e),value:S(t)}),u||this.length++,n.updateURL()},delete:function(e){for(var t=L(this),n=T(arguments.length,1),r=t.entries,o=S(e),i=n<2?void 0:arguments[1],a=void 0===i?i:S(i),s=0;st.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=L(this).entries,r=b(e,arguments.length>1?arguments[1]:void 0),o=0;o1?ve(arguments[1]):{})}}),y(U)){var ye=function(e){return v(this,B),new U(e,arguments.length>1?ve(arguments[1]):{})};B.constructor=ye,ye.prototype=B,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ye})}}e.exports={URLSearchParams:de,getState:L}},48408:(e,t,n)=>{"use strict";n(98406)},81431:(e,t)=>{"use strict";function n(e,t,n){var r,o=n||{},i=o.noTrailing,a=void 0!==i&&i,s=o.noLeading,u=void 0!==s&&s,l=o.debounceMode,c=void 0===l?void 0:l,f=!1,d=0;function h(){r&&clearTimeout(r)}function p(){for(var n=arguments.length,o=new Array(n),i=0;ie?u?(d=Date.now(),a||(r=setTimeout(c?g:p,e))):p():!0!==a&&(r=setTimeout(c?g:p,void 0===c?e-l:e)))}return p.cancel=function(e){var t=(e||{}).upcomingOnly,n=void 0!==t&&t;h(),f=!n},p}Object.defineProperty(t,"__esModule",{value:!0}),t.debounce=function(e,t,r){var o=(r||{}).atBegin;return n(e,t,{debounceMode:!1!==(void 0!==o&&o)})},t.throttle=n},43145:(e,t,n)=>{"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nr})},9417:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{A:()=>r})},23029:(e,t,n)=>{"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,{A:()=>r})},92901:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(20816);function o(e,t){for(var n=0;n{"use strict";n.d(t,{A:()=>s});var r=n(53954),o=n(52176),i=n(82284),a=n(9417);function s(e){var t=(0,o.A)();return function(){var n,o=(0,r.A)(e);if(t){var s=(0,r.A)(this).constructor;n=Reflect.construct(o,arguments,s)}else n=o.apply(this,arguments);return function(e,t){if(t&&("object"===(0,i.A)(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return(0,a.A)(e)}(this,n)}}},64467:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(20816);function o(e,t,n){return(t=(0,r.A)(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},58168:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;tr})},53954:(e,t,n)=>{"use strict";function r(e){return r=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},r(e)}n.d(t,{A:()=>r})},85501:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(63662);function o(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,r.A)(e,t)}},77387:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(63662);function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,r.A)(e,t)}},52176:(e,t,n)=>{"use strict";function r(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(r=function(){return!!e})()}n.d(t,{A:()=>r})},89379:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(64467);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t{"use strict";n.d(t,{A:()=>o});var r=n(98587);function o(e,t){if(null==e)return{};var n,o,i=(0,r.A)(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}},98587:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}n.d(t,{A:()=>r})},63662:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}n.d(t,{A:()=>r})},80296:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(27800);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,a,s=[],u=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);u=!0);}catch(e){l=!0,o=e}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(e,t)||(0,r.A)(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},45458:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(43145);var o=n(27800);function i(e){return function(e){if(Array.isArray(e))return(0,r.A)(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||(0,o.A)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},20816:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(82284);function o(e){var t=function(e,t){if("object"!=(0,r.A)(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=(0,r.A)(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==(0,r.A)(t)?t:t+""}},82284:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}n.d(t,{A:()=>r})},27800:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(43145);function o(e,t){if(e){if("string"===typeof e)return(0,r.A)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?(0,r.A)(e,t):void 0}}},64849:(e,t,n)=>{"use strict";n.d(t,{UU:()=>N});const r=e=>Array.isArray(e)?e:[e],o=(e={},t)=>({...e,filters:[...e.filters||[],...r(t)]});var i=n(20894);const a=e=>i.p.at("document.tags",r(e));var s=Object.defineProperty,u=(e,t,n)=>(((e,t,n)=>{t in e?s(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n})(e,"symbol"!==typeof t?t+"":t,n),n);class l extends Error{constructor(e="An invalid API response was returned",t,n){super(e),u(this,"url"),u(this,"response"),this.url=t,this.response=n}}const c=(e,t)=>{const n=e.find((e=>t(e)));if(!n)throw new l("Ref could not be found.",void 0,void 0);return n},f=e=>c(e,(e=>e.isMasterRef)),d=(e,t)=>c(e,(e=>e.id===t)),h=(e,t)=>c(e,(e=>e.label===t)),p=e=>e.replace(/%3B/g,";"),g=e=>i.p.any("document.tags",r(e)),v=e=>i.p.at("document.type",e);class y extends l{}class m extends l{}class b extends l{}class _ extends y{}class w extends y{}class x extends y{}class S extends m{}const A="Document",E="Media",C="Web",R=(e,...t)=>{if(!e)return null;const n="link_type"in e?e:(e=>{var t;return{link_type:A,id:e.id,uid:e.uid||void 0,type:e.type,tags:e.tags,lang:e.lang,url:null==e.url?void 0:e.url,slug:null==(t=e.slugs)?void 0:t[0],...e.data&&Object.keys(e.data).length>0?{data:e.data}:{}}})(e),[r]=t;let o;switch(o="function"===typeof r||null==r?{linkResolver:r}:{...r},n.link_type){case E:case C:return"url"in n?n.url:null;case A:if("id"in n&&o.linkResolver){const e=o.linkResolver(n);if(null!=e)return e}return"url"in n&&n.url?n.url:null;default:return null}},O={accessToken:"access_token"},T=e=>"string"===typeof e?e:"desc"===e.direction?`${e.field} desc`:e.field;var k=Object.defineProperty,M=(e,t,n)=>(((e,t,n)=>{t in e?k(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n})(e,"symbol"!==typeof t?t+"":t,n),n);var P,I;(I=P||(P={})).Master="Master",I.ReleaseID="ReleaseID",I.ReleaseLabel="ReleaseLabel",I.Manual="Manual";const N=(e,t)=>new D(e,t);class D{constructor(e,t={}){if(M(this,"endpoint"),M(this,"accessToken"),M(this,"routes"),M(this,"brokenRoute"),M(this,"fetchFn"),M(this,"fetchOptions"),M(this,"defaultParams"),M(this,"refState",{mode:P.Master,autoPreviewsEnabled:!0}),M(this,"cachedRepository"),M(this,"cachedRepositoryExpiration",0),M(this,"fetchJobs",{}),(e=>{try{return new URL(e),!0}catch{return!1}})(e)?this.endpoint=e:this.endpoint=(e=>{if(/^[a-zA-Z0-9][-a-zA-Z0-9]{2,}[a-zA-Z0-9]$/.test(e))return`https://${e}.cdn.prismic.io/api/v2`;throw new l(`An invalid Prismic repository name was given: ${e}`,void 0,void 0)})(e),this.accessToken=t.accessToken,this.routes=t.routes,this.brokenRoute=t.brokenRoute,this.fetchOptions=t.fetchOptions,this.defaultParams=t.defaultParams,t.ref&&this.queryContentFromRef(t.ref),"function"===typeof t.fetch)this.fetchFn=t.fetch;else{if("function"!==typeof globalThis.fetch)throw new l("A valid fetch implementation was not provided. In environments where fetch is not available (including Node.js), a fetch implementation must be provided via a polyfill or the `fetch` option.",void 0,void 0);this.fetchFn=globalThis.fetch}this.fetchFn===globalThis.fetch&&(this.fetchFn=this.fetchFn.bind(globalThis)),this.graphQLFetch=this.graphQLFetch.bind(this)}enableAutoPreviews(){this.refState.autoPreviewsEnabled=!0}enableAutoPreviewsFromReq(e){this.refState.httpRequest=e,this.refState.autoPreviewsEnabled=!0}disableAutoPreviews(){this.refState.autoPreviewsEnabled=!1}async get(e){const t=await this.buildQueryURL(e);return await this.fetch(t,e)}async getFirst(e){var t;const n={...e};e&&e.page||(null==e?void 0:e.pageSize)||(n.pageSize=(null==(t=this.defaultParams)?void 0:t.pageSize)??1);const r=await this.buildQueryURL(n),o=(await this.fetch(r,e)).results[0];if(o)return o;throw new m("No documents were returned",r,void 0)}async dangerouslyGetAll(e={}){var t;const{limit:n=1/0,...r}=e,o={...r,pageSize:Math.min(n,r.pageSize||(null==(t=this.defaultParams)?void 0:t.pageSize)||100)},i=[];let a;for(;(!a||a.next_page)&&i.lengthsetTimeout(e,500)))}return i.slice(0,n)}async getByID(e,t){return await this.getFirst(o(t,i.p.at("document.id",e)))}async getByIDs(e,t){return await this.get(o(t,i.p.in("document.id",e)))}async getAllByIDs(e,t){return await this.dangerouslyGetAll(o(t,i.p.in("document.id",e)))}async getByUID(e,t,n){return await this.getFirst(o(n,[v(e),i.p.at(`my.${e}.uid`,t)]))}async getByUIDs(e,t,n){return await this.get(o(n,[v(e),i.p.in(`my.${e}.uid`,t)]))}async getAllByUIDs(e,t,n){return await this.dangerouslyGetAll(o(n,[v(e),i.p.in(`my.${e}.uid`,t)]))}async getSingle(e,t){return await this.getFirst(o(t,v(e)))}async getByType(e,t){return await this.get(o(t,v(e)))}async getAllByType(e,t){return await this.dangerouslyGetAll(o(t,v(e)))}async getByTag(e,t){return await this.get(o(t,g(e)))}async getAllByTag(e,t){return await this.dangerouslyGetAll(o(t,g(e)))}async getByEveryTag(e,t){return await this.get(o(t,a(e)))}async getAllByEveryTag(e,t){return await this.dangerouslyGetAll(o(t,a(e)))}async getBySomeTags(e,t){return await this.get(o(t,g(e)))}async getAllBySomeTags(e,t){return await this.dangerouslyGetAll(o(t,g(e)))}async getRepository(e){const t=new URL(this.endpoint);return this.accessToken&&t.searchParams.set("access_token",this.accessToken),await this.fetch(t.toString(),e)}async getRefs(e){return(await this.getRepository(e)).refs}async getRefByID(e,t){const n=await this.getRefs(t);return d(n,e)}async getRefByLabel(e,t){const n=await this.getRefs(t);return h(n,e)}async getMasterRef(e){const t=await this.getRefs(e);return f(t)}async getReleases(e){return(await this.getRefs(e)).filter((e=>!e.isMasterRef))}async getReleaseByID(e,t){const n=await this.getReleases(t);return d(n,e)}async getReleaseByLabel(e,t){const n=await this.getReleases(t);return h(n,e)}async getTags(e){try{const t=await this.getCachedRepositoryForm("tags",e),n=new URL(t.action);return this.accessToken&&n.searchParams.set("access_token",this.accessToken),await this.fetch(n.toString(),e)}catch{return(await this.getRepository(e)).tags}}async buildQueryURL({signal:e,fetchOptions:t,...n}={}){const o=n.ref||await this.getResolvedRefString({signal:e,fetchOptions:t}),i=n.integrationFieldsRef||(await this.getCachedRepository({signal:e,fetchOptions:t})).integrationFieldsRef||void 0;return((e,t)=>{const{filters:n,predicates:o,...i}=t,a=new URL("documents/search",`${e}/`);if(n)for(const s of r(n))a.searchParams.append("q",`[${s}]`);if(o)for(const s of r(o))a.searchParams.append("q",`[${s}]`);for(const s in i){const e=O[s]||s;let t=i[s];if("orderings"===e){const n=i[e];null!=n&&(t=`[${r(n).map((e=>T(e))).join(",")}]`)}else"routes"===e&&"object"===typeof i[e]&&(t=JSON.stringify(r(i[e])));null!=t&&a.searchParams.set(e,r(t).join(","))}return a.toString()})(this.endpoint,{...this.defaultParams,...n,ref:o,integrationFieldsRef:i,routes:n.routes||this.routes,brokenRoute:n.brokenRoute||this.brokenRoute,accessToken:n.accessToken||this.accessToken})}async resolvePreviewURL(e){var t,n;let r=e.documentID,o=e.previewToken;if("undefined"!==typeof globalThis.location){const e=new URLSearchParams(globalThis.location.search);r=r||e.get("documentId"),o=o||e.get("token")}else if(this.refState.httpRequest)if("query"in this.refState.httpRequest)r=r||(null==(t=this.refState.httpRequest.query)?void 0:t.documentId),o=o||(null==(n=this.refState.httpRequest.query)?void 0:n.token);else if("url"in this.refState.httpRequest&&this.refState.httpRequest.url){const e=new URL(this.refState.httpRequest.url,"missing-host://").searchParams;r=r||e.get("documentId"),o=o||e.get("token")}if(null!=r&&null!=o){const t=await this.getByID(r,{ref:o,lang:"*",signal:e.signal,fetchOptions:e.fetchOptions}),n=R(t,{linkResolver:e.linkResolver});if("string"===typeof n)return n}return e.defaultURL}queryLatestContent(){this.refState.mode=P.Master}queryContentFromReleaseByID(e){this.refState={...this.refState,mode:P.ReleaseID,releaseID:e}}queryContentFromReleaseByLabel(e){this.refState={...this.refState,mode:P.ReleaseLabel,releaseLabel:e}}queryContentFromRef(e){this.refState={...this.refState,mode:P.Manual,ref:e}}async graphQLFetch(e,t){const n=await this.getCachedRepository(),r=await this.getResolvedRefString(),o={"Prismic-ref":r,Authorization:this.accessToken?`Token ${this.accessToken}`:"",...t?t.headers:{}};n.integrationFieldsRef&&(o["Prismic-integration-field-ref"]=n.integrationFieldsRef);const i={};for(const u in o)o[u]&&(i[u.toLowerCase()]=o[u]);const a=new URL(e);a.searchParams.set("ref",r);const s=a.searchParams.get("query");return s&&a.searchParams.set("query",(e=>e.replace(/(\n| )*( |{|})(\n| )*/gm,((e,t,n)=>n)))(s)),await this.fetchFn(a.toString(),{...t,headers:i})}async getCachedRepository(e){return(!this.cachedRepository||Date.now()>=this.cachedRepositoryExpiration)&&(this.cachedRepositoryExpiration=Date.now()+5e3,this.cachedRepository=await this.getRepository(e)),this.cachedRepository}async getCachedRepositoryForm(e,t){const n=(await this.getCachedRepository(t)).forms[e];if(!n)throw new l(`Form with name "${e}" could not be found`,void 0,void 0);return n}async getResolvedRefString(e){var t,n;if(this.refState.autoPreviewsEnabled){let e,r;if((null==(t=this.refState.httpRequest)?void 0:t.headers)?"get"in this.refState.httpRequest.headers&&"function"===typeof this.refState.httpRequest.headers.get?r=this.refState.httpRequest.headers.get("cookie"):"cookie"in this.refState.httpRequest.headers&&(r=this.refState.httpRequest.headers.cookie):(null==(n=globalThis.document)?void 0:n.cookie)&&(r=globalThis.document.cookie),r&&(e=(e=>{const t=e.split("; ");let n;for(const r of t){const e=r.split("=");if("io.prismic.preview"===p(e[0]).replace(/%3D/g,"=")){n=p(e.slice(1).join("="));break}}return n})(r)),e)return e}const r=await this.getCachedRepository(e),o=this.refState.mode;if(o===P.ReleaseID)return d(r.refs,this.refState.releaseID).ref;if(o===P.ReleaseLabel)return h(r.refs,this.refState.releaseLabel).ref;if(o===P.Manual){const e=await(i=this.refState.ref,"function"===typeof i?i:()=>i)();if("string"===typeof e)return e}var i;return f(r.refs).ref}async fetch(e,t={}){var n,r,o,i;const a={...this.fetchOptions,...t.fetchOptions,headers:{...null==(n=this.fetchOptions)?void 0:n.headers,...null==(r=t.fetchOptions)?void 0:r.headers},signal:(null==(o=t.fetchOptions)?void 0:o.signal)||t.signal||(null==(i=this.fetchOptions)?void 0:i.signal)};let s;this.fetchJobs[e]&&this.fetchJobs[e].has(a.signal)?s=this.fetchJobs[e].get(a.signal):(this.fetchJobs[e]=this.fetchJobs[e]||new Map,s=this.fetchFn(e,a).then((async e=>{let t;try{t=await e.json()}catch{}return{status:e.status,headers:e.headers,json:t}})).finally((()=>{this.fetchJobs[e].delete(a.signal),0===this.fetchJobs[e].size&&delete this.fetchJobs[e]})),this.fetchJobs[e].set(a.signal,s));const u=await s;if(404!==u.status&&null==u.json)throw new l(void 0,e,u.json);switch(u.status){case 200:return u.json;case 400:throw new b(u.json.message,e,u.json);case 401:case 403:throw new y(u.json.error||u.json.message,e,u.json);case 404:if(void 0===u.json)throw new S(`Prismic repository not found. Check that "${this.endpoint}" is pointing to the correct repository.`,e,void 0);if("api_notfound_error"===u.json.type)throw new x(u.json.message,e,u.json);if("api_security_error"===u.json.type&&/preview token.*expired/i.test(u.json.message))throw new _(u.json.message,e,u.json);throw new m(u.json.message,e,u.json);case 410:throw new w(u.json.message,e,u.json);case 429:{const n=Number(u.headers.get("retry-after")),r=Number.isNaN(n)?1e3:n;return await new Promise(((n,o)=>{setTimeout((async()=>{try{n(await this.fetch(e,t))}catch(r){o(r)}}),r)}))}}throw new l(void 0,e,u.json)}}},20894:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});const r=e=>Array.isArray(e)?`[${e.map(r).join(", ")}]`:"string"===typeof e?`"${e}"`:e instanceof Date?`${e.getTime()}`:`${e}`,o=e=>(t,...n)=>{const o=n.map(r).join(", "),i=t&&n.length?", ":"";return`[${e}(${t}${i}${o})]`},i=e=>{const t=o(e);return e=>t(e)},a={at:o("at"),not:o("not"),any:o("any"),in:o("in"),fulltext:o("fulltext"),has:i("has"),missing:i("missing"),similar:(e=>{const t=o(e);return(...e)=>t("",...e)})("similar"),geopointNear:o("geopoint.near"),numberLessThan:o("number.lt"),numberGreaterThan:o("number.gt"),numberInRange:o("number.inRange"),dateAfter:o("date.after"),dateBefore:o("date.before"),dateBetween:o("date.between"),dateDayOfMonth:o("date.day-of-month"),dateDayOfMonthAfter:o("date.day-of-month-after"),dateDayOfMonthBefore:o("date.day-of-month-before"),dateDayOfWeek:o("date.day-of-week"),dateDayOfWeekAfter:o("date.day-of-week-after"),dateDayOfWeekBefore:o("date.day-of-week-before"),dateMonth:o("date.month"),dateMonthAfter:o("date.month-after"),dateMonthBefore:o("date.month-before"),dateYear:o("date.year"),dateHour:o("date.hour"),dateHourAfter:o("date.hour-after"),dateHourBefore:o("date.hour-before")}},1530:(e,t,n)=>{"use strict";n.d(t,{Kv:()=>i,N4:()=>a});var r=n(96540),o=n(33888);function i(e,t){return e?function(e){return"function"===typeof e&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}(n=e)||"function"===typeof n||function(e){return"object"===typeof e&&"symbol"===typeof e.$$typeof&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}(n)?r.createElement(e,t):e:null;var n}function a(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=r.useState((()=>({current:(0,o.ZR)(t)}))),[i,a]=r.useState((()=>n.current.initialState));return n.current.setOptions((t=>({...t,...e,state:{...i,...e.state},onStateChange:t=>{a(t),null==e.onStateChange||e.onStateChange(t)}}))),n.current}},33888:(e,t,n)=>{"use strict";function r(e,t){return"function"===typeof e?e(t):e}function o(e,t){return n=>{t.setState((t=>({...t,[e]:r(n,t[e])})))}}function i(e){return e instanceof Function}function a(e,t){const n=[],r=e=>{e.forEach((e=>{n.push(e);const o=t(e);null!=o&&o.length&&r(o)}))};return r(e),n}function s(e,t,n){let r,o=[];return i=>{let a;n.key&&n.debug&&(a=Date.now());const s=e(i);if(!(s.length!==o.length||s.some(((e,t)=>o[t]!==e))))return r;let u;if(o=s,n.key&&n.debug&&(u=Date.now()),r=t(...s),null==n||null==n.onChange||n.onChange(r),n.key&&n.debug&&null!=n&&n.debug()){const e=Math.round(100*(Date.now()-a))/100,t=Math.round(100*(Date.now()-u))/100,r=t/16,o=(e,t)=>{for(e=String(e);e.length{var n;return null!=(n=null==e?void 0:e.debugAll)?n:e[t]},key:!1,onChange:r}}n.d(t,{D0:()=>K,HT:()=>X,ZR:()=>Y,cU:()=>ee,h5:()=>ne,hM:()=>J,kW:()=>te});const l="debugHeaders";function c(e,t,n){var r;let o={id:null!=(r=n.id)?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const e=[],t=n=>{n.subHeaders&&n.subHeaders.length&&n.subHeaders.map(t),e.push(n)};return t(o),e},getContext:()=>({table:e,header:o,column:t})};return e._features.forEach((t=>{null==t.createHeader||t.createHeader(o,e)})),o}const f={createTable:e=>{e.getHeaderGroups=s((()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right]),((t,n,r,o)=>{var i,a;const s=null!=(i=null==r?void 0:r.map((e=>n.find((t=>t.id===e)))).filter(Boolean))?i:[],u=null!=(a=null==o?void 0:o.map((e=>n.find((t=>t.id===e)))).filter(Boolean))?a:[];return d(t,[...s,...n.filter((e=>!(null!=r&&r.includes(e.id))&&!(null!=o&&o.includes(e.id)))),...u],e)}),u(e.options,l)),e.getCenterHeaderGroups=s((()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right]),((t,n,r,o)=>d(t,n=n.filter((e=>!(null!=r&&r.includes(e.id))&&!(null!=o&&o.includes(e.id)))),e,"center")),u(e.options,l)),e.getLeftHeaderGroups=s((()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left]),((t,n,r)=>{var o;return d(t,null!=(o=null==r?void 0:r.map((e=>n.find((t=>t.id===e)))).filter(Boolean))?o:[],e,"left")}),u(e.options,l)),e.getRightHeaderGroups=s((()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right]),((t,n,r)=>{var o;return d(t,null!=(o=null==r?void 0:r.map((e=>n.find((t=>t.id===e)))).filter(Boolean))?o:[],e,"right")}),u(e.options,l)),e.getFooterGroups=s((()=>[e.getHeaderGroups()]),(e=>[...e].reverse()),u(e.options,l)),e.getLeftFooterGroups=s((()=>[e.getLeftHeaderGroups()]),(e=>[...e].reverse()),u(e.options,l)),e.getCenterFooterGroups=s((()=>[e.getCenterHeaderGroups()]),(e=>[...e].reverse()),u(e.options,l)),e.getRightFooterGroups=s((()=>[e.getRightHeaderGroups()]),(e=>[...e].reverse()),u(e.options,l)),e.getFlatHeaders=s((()=>[e.getHeaderGroups()]),(e=>e.map((e=>e.headers)).flat()),u(e.options,l)),e.getLeftFlatHeaders=s((()=>[e.getLeftHeaderGroups()]),(e=>e.map((e=>e.headers)).flat()),u(e.options,l)),e.getCenterFlatHeaders=s((()=>[e.getCenterHeaderGroups()]),(e=>e.map((e=>e.headers)).flat()),u(e.options,l)),e.getRightFlatHeaders=s((()=>[e.getRightHeaderGroups()]),(e=>e.map((e=>e.headers)).flat()),u(e.options,l)),e.getCenterLeafHeaders=s((()=>[e.getCenterFlatHeaders()]),(e=>e.filter((e=>{var t;return!(null!=(t=e.subHeaders)&&t.length)}))),u(e.options,l)),e.getLeftLeafHeaders=s((()=>[e.getLeftFlatHeaders()]),(e=>e.filter((e=>{var t;return!(null!=(t=e.subHeaders)&&t.length)}))),u(e.options,l)),e.getRightLeafHeaders=s((()=>[e.getRightFlatHeaders()]),(e=>e.filter((e=>{var t;return!(null!=(t=e.subHeaders)&&t.length)}))),u(e.options,l)),e.getLeafHeaders=s((()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()]),((e,t,n)=>{var r,o,i,a,s,u;return[...null!=(r=null==(o=e[0])?void 0:o.headers)?r:[],...null!=(i=null==(a=t[0])?void 0:a.headers)?i:[],...null!=(s=null==(u=n[0])?void 0:u.headers)?s:[]].map((e=>e.getLeafHeaders())).flat()}),u(e.options,l))}};function d(e,t,n,r){var o,i;let a=0;const s=function(e,t){void 0===t&&(t=1),a=Math.max(a,t),e.filter((e=>e.getIsVisible())).forEach((e=>{var n;null!=(n=e.columns)&&n.length&&s(e.columns,t+1)}),0)};s(e);let u=[];const l=(e,t)=>{const o={depth:t,id:[r,`${t}`].filter(Boolean).join("_"),headers:[]},i=[];e.forEach((e=>{const a=[...i].reverse()[0];let s,u=!1;if(e.column.depth===o.depth&&e.column.parent?s=e.column.parent:(s=e.column,u=!0),a&&(null==a?void 0:a.column)===s)a.subHeaders.push(e);else{const o=c(n,s,{id:[r,t,s.id,null==e?void 0:e.id].filter(Boolean).join("_"),isPlaceholder:u,placeholderId:u?`${i.filter((e=>e.column===s)).length}`:void 0,depth:t,index:i.length});o.subHeaders.push(e),i.push(o)}o.headers.push(e),e.headerGroup=o})),u.push(o),t>0&&l(i,t-1)},f=t.map(((e,t)=>c(n,e,{depth:a,index:t})));l(f,a-1),u.reverse();const d=e=>e.filter((e=>e.column.getIsVisible())).map((e=>{let t=0,n=0,r=[0];e.subHeaders&&e.subHeaders.length?(r=[],d(e.subHeaders).forEach((e=>{let{colSpan:n,rowSpan:o}=e;t+=n,r.push(o)}))):t=1;return n+=Math.min(...r),e.colSpan=t,e.rowSpan=n,{colSpan:t,rowSpan:n}}));return d(null!=(o=null==(i=u[0])?void 0:i.headers)?o:[]),u}const h=(e,t,n,r,o,i,l)=>{let c={id:t,index:r,original:n,depth:o,parentId:l,_valuesCache:{},_uniqueValuesCache:{},getValue:t=>{if(c._valuesCache.hasOwnProperty(t))return c._valuesCache[t];const n=e.getColumn(t);return null!=n&&n.accessorFn?(c._valuesCache[t]=n.accessorFn(c.original,r),c._valuesCache[t]):void 0},getUniqueValues:t=>{if(c._uniqueValuesCache.hasOwnProperty(t))return c._uniqueValuesCache[t];const n=e.getColumn(t);return null!=n&&n.accessorFn?n.columnDef.getUniqueValues?(c._uniqueValuesCache[t]=n.columnDef.getUniqueValues(c.original,r),c._uniqueValuesCache[t]):(c._uniqueValuesCache[t]=[c.getValue(t)],c._uniqueValuesCache[t]):void 0},renderValue:t=>{var n;return null!=(n=c.getValue(t))?n:e.options.renderFallbackValue},subRows:null!=i?i:[],getLeafRows:()=>a(c.subRows,(e=>e.subRows)),getParentRow:()=>c.parentId?e.getRow(c.parentId,!0):void 0,getParentRows:()=>{let e=[],t=c;for(;;){const n=t.getParentRow();if(!n)break;e.push(n),t=n}return e.reverse()},getAllCells:s((()=>[e.getAllLeafColumns()]),(t=>t.map((t=>function(e,t,n,r){const o={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:()=>{var t;return null!=(t=o.getValue())?t:e.options.renderFallbackValue},getContext:s((()=>[e,n,t,o]),((e,t,n,r)=>({table:e,column:t,row:n,cell:r,getValue:r.getValue,renderValue:r.renderValue})),u(e.options,"debugCells"))};return e._features.forEach((r=>{null==r.createCell||r.createCell(o,n,t,e)}),{}),o}(e,c,t,t.id)))),u(e.options,"debugRows")),_getAllCellsByColumnId:s((()=>[c.getAllCells()]),(e=>e.reduce(((e,t)=>(e[t.column.id]=t,e)),{})),u(e.options,"debugRows"))};for(let a=0;a{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},g=(e,t,n)=>{var r;const o=n.toLowerCase();return Boolean(null==(r=e.getValue(t))||null==(r=r.toString())||null==(r=r.toLowerCase())?void 0:r.includes(o))};g.autoRemove=e=>E(e);const v=(e,t,n)=>{var r;return Boolean(null==(r=e.getValue(t))||null==(r=r.toString())?void 0:r.includes(n))};v.autoRemove=e=>E(e);const y=(e,t,n)=>{var r;return(null==(r=e.getValue(t))||null==(r=r.toString())?void 0:r.toLowerCase())===(null==n?void 0:n.toLowerCase())};y.autoRemove=e=>E(e);const m=(e,t,n)=>{var r;return null==(r=e.getValue(t))?void 0:r.includes(n)};m.autoRemove=e=>E(e)||!(null!=e&&e.length);const b=(e,t,n)=>!n.some((n=>{var r;return!(null!=(r=e.getValue(t))&&r.includes(n))}));b.autoRemove=e=>E(e)||!(null!=e&&e.length);const _=(e,t,n)=>n.some((n=>{var r;return null==(r=e.getValue(t))?void 0:r.includes(n)}));_.autoRemove=e=>E(e)||!(null!=e&&e.length);const w=(e,t,n)=>e.getValue(t)===n;w.autoRemove=e=>E(e);const x=(e,t,n)=>e.getValue(t)==n;x.autoRemove=e=>E(e);const S=(e,t,n)=>{let[r,o]=n;const i=e.getValue(t);return i>=r&&i<=o};S.resolveFilterValue=e=>{let[t,n]=e,r="number"!==typeof t?parseFloat(t):t,o="number"!==typeof n?parseFloat(n):n,i=null===t||Number.isNaN(r)?-1/0:r,a=null===n||Number.isNaN(o)?1/0:o;if(i>a){const e=i;i=a,a=e}return[i,a]},S.autoRemove=e=>E(e)||E(e[0])&&E(e[1]);const A={includesString:g,includesStringSensitive:v,equalsString:y,arrIncludes:m,arrIncludesAll:b,arrIncludesSome:_,equals:w,weakEquals:x,inNumberRange:S};function E(e){return void 0===e||null===e||""===e}const C={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:o("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=null==n?void 0:n.getValue(e.id);return"string"===typeof r?A.includesString:"number"===typeof r?A.inNumberRange:"boolean"===typeof r||null!==r&&"object"===typeof r?A.equals:Array.isArray(r)?A.arrIncludes:A.weakEquals},e.getFilterFn=()=>{var n,r;return i(e.columnDef.filterFn)?e.columnDef.filterFn:"auto"===e.columnDef.filterFn?e.getAutoFilterFn():null!=(n=null==(r=t.options.filterFns)?void 0:r[e.columnDef.filterFn])?n:A[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,o;return(null==(n=e.columnDef.enableColumnFilter)||n)&&(null==(r=t.options.enableColumnFilters)||r)&&(null==(o=t.options.enableFilters)||o)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return null==(n=t.getState().columnFilters)||null==(n=n.find((t=>t.id===e.id)))?void 0:n.value},e.getFilterIndex=()=>{var n,r;return null!=(n=null==(r=t.getState().columnFilters)?void 0:r.findIndex((t=>t.id===e.id)))?n:-1},e.setFilterValue=n=>{t.setColumnFilters((t=>{const o=e.getFilterFn(),i=null==t?void 0:t.find((t=>t.id===e.id)),a=r(n,i?i.value:void 0);var s;if(R(o,a,e))return null!=(s=null==t?void 0:t.filter((t=>t.id!==e.id)))?s:[];const u={id:e.id,value:a};var l;return i?null!=(l=null==t?void 0:t.map((t=>t.id===e.id?u:t)))?l:[]:null!=t&&t.length?[...t,u]:[u]}))}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns();null==e.options.onColumnFiltersChange||e.options.onColumnFiltersChange((e=>{var o;return null==(o=r(t,e))?void 0:o.filter((e=>{const t=n.find((t=>t.id===e.id));if(t){if(R(t.getFilterFn(),e.value,t))return!1}return!0}))}))},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:null!=(n=null==(r=e.initialState)?void 0:r.columnFilters)?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function R(e,t,n){return!(!e||!e.autoRemove)&&e.autoRemove(t,n)||"undefined"===typeof t||"string"===typeof t&&!t}const O={sum:(e,t,n)=>n.reduce(((t,n)=>{const r=n.getValue(e);return t+("number"===typeof r?r:0)}),0),min:(e,t,n)=>{let r;return n.forEach((t=>{const n=t.getValue(e);null!=n&&(r>n||void 0===r&&n>=n)&&(r=n)})),r},max:(e,t,n)=>{let r;return n.forEach((t=>{const n=t.getValue(e);null!=n&&(r=n)&&(r=n)})),r},extent:(e,t,n)=>{let r,o;return n.forEach((t=>{const n=t.getValue(e);null!=n&&(void 0===r?n>=n&&(r=o=n):(r>n&&(r=n),o{let n=0,r=0;if(t.forEach((t=>{let o=t.getValue(e);null!=o&&(o=+o)>=o&&(++n,r+=o)})),n)return r/n},median:(e,t)=>{if(!t.length)return;const n=t.map((t=>t.getValue(e)));if(r=n,!Array.isArray(r)||!r.every((e=>"number"===typeof e)))return;var r;if(1===n.length)return n[0];const o=Math.floor(n.length/2),i=n.sort(((e,t)=>e-t));return n.length%2!==0?i[o]:(i[o-1]+i[o])/2},unique:(e,t)=>Array.from(new Set(t.map((t=>t.getValue(e)))).values()),uniqueCount:(e,t)=>new Set(t.map((t=>t.getValue(e)))).size,count:(e,t)=>t.length},T={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return null!=(t=null==(n=e.getValue())||null==n.toString?void 0:n.toString())?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:o("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping((t=>null!=t&&t.includes(e.id)?t.filter((t=>t!==e.id)):[...null!=t?t:[],e.id]))},e.getCanGroup=()=>{var n,r;return(null==(n=e.columnDef.enableGrouping)||n)&&(null==(r=t.options.enableGrouping)||r)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return null==(n=t.getState().grouping)?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return null==(n=t.getState().grouping)?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const t=e.getCanGroup();return()=>{t&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=null==n?void 0:n.getValue(e.id);return"number"===typeof r?O.sum:"[object Date]"===Object.prototype.toString.call(r)?O.extent:void 0},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return i(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:"auto"===e.columnDef.aggregationFn?e.getAutoAggregationFn():null!=(n=null==(r=t.options.aggregationFns)?void 0:r[e.columnDef.aggregationFn])?n:O[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>null==e.options.onGroupingChange?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:null!=(n=null==(r=e.initialState)?void 0:r.grouping)?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return null!=r&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var t;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!(null==(t=n.subRows)||!t.length)}}};const k={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:o("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=s((e=>[L(t,e)]),(t=>t.findIndex((t=>t.id===e.id))),u(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return(null==(r=L(t,n)[0])?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const o=L(t,n);return(null==(r=o[o.length-1])?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>null==e.options.onColumnOrderChange?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:null!=(n=e.initialState.columnOrder)?n:[])},e._getOrderColumnsFn=s((()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode]),((e,t,n)=>r=>{let o=[];if(null!=e&&e.length){const t=[...e],n=[...r];for(;n.length&&t.length;){const e=t.shift(),r=n.findIndex((t=>t.id===e));r>-1&&o.push(n.splice(r,1)[0])}o=[...o,...n]}else o=r;return function(e,t,n){if(null==t||!t.length||!n)return e;const r=e.filter((e=>!t.includes(e.id)));return"remove"===n?r:[...t.map((t=>e.find((e=>e.id===t)))).filter(Boolean),...r]}(o,t,n)}),u(e.options,"debugTable"))}},M={getInitialState:e=>({columnPinning:{left:[],right:[]},...e}),getDefaultOptions:e=>({onColumnPinningChange:o("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map((e=>e.id)).filter(Boolean);t.setColumnPinning((e=>{var t,o,i,a,s,u;return"right"===n?{left:(null!=(i=null==e?void 0:e.left)?i:[]).filter((e=>!(null!=r&&r.includes(e)))),right:[...(null!=(a=null==e?void 0:e.right)?a:[]).filter((e=>!(null!=r&&r.includes(e)))),...r]}:"left"===n?{left:[...(null!=(s=null==e?void 0:e.left)?s:[]).filter((e=>!(null!=r&&r.includes(e)))),...r],right:(null!=(u=null==e?void 0:e.right)?u:[]).filter((e=>!(null!=r&&r.includes(e))))}:{left:(null!=(t=null==e?void 0:e.left)?t:[]).filter((e=>!(null!=r&&r.includes(e)))),right:(null!=(o=null==e?void 0:e.right)?o:[]).filter((e=>!(null!=r&&r.includes(e))))}}))},e.getCanPin=()=>e.getLeafColumns().some((e=>{var n,r,o;return(null==(n=e.columnDef.enablePinning)||n)&&(null==(r=null!=(o=t.options.enableColumnPinning)?o:t.options.enablePinning)||r)})),e.getIsPinned=()=>{const n=e.getLeafColumns().map((e=>e.id)),{left:r,right:o}=t.getState().columnPinning,i=n.some((e=>null==r?void 0:r.includes(e))),a=n.some((e=>null==o?void 0:o.includes(e)));return i?"left":!!a&&"right"},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();return o?null!=(n=null==(r=t.getState().columnPinning)||null==(r=r[o])?void 0:r.indexOf(e.id))?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=s((()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right]),((e,t,n)=>{const r=[...null!=t?t:[],...null!=n?n:[]];return e.filter((e=>!r.includes(e.column.id)))}),u(t.options,"debugRows")),e.getLeftVisibleCells=s((()=>[e._getAllVisibleCells(),t.getState().columnPinning.left]),((e,t)=>(null!=t?t:[]).map((t=>e.find((e=>e.column.id===t)))).filter(Boolean).map((e=>({...e,position:"left"})))),u(t.options,"debugRows")),e.getRightVisibleCells=s((()=>[e._getAllVisibleCells(),t.getState().columnPinning.right]),((e,t)=>(null!=t?t:[]).map((t=>e.find((e=>e.column.id===t)))).filter(Boolean).map((e=>({...e,position:"right"})))),u(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>null==e.options.onColumnPinningChange?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?{left:[],right:[]}:null!=(n=null==(r=e.initialState)?void 0:r.columnPinning)?n:{left:[],right:[]})},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;var o,i;return t?Boolean(null==(n=r[t])?void 0:n.length):Boolean((null==(o=r.left)?void 0:o.length)||(null==(i=r.right)?void 0:i.length))},e.getLeftLeafColumns=s((()=>[e.getAllLeafColumns(),e.getState().columnPinning.left]),((e,t)=>(null!=t?t:[]).map((t=>e.find((e=>e.id===t)))).filter(Boolean)),u(e.options,"debugColumns")),e.getRightLeafColumns=s((()=>[e.getAllLeafColumns(),e.getState().columnPinning.right]),((e,t)=>(null!=t?t:[]).map((t=>e.find((e=>e.id===t)))).filter(Boolean)),u(e.options,"debugColumns")),e.getCenterLeafColumns=s((()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right]),((e,t,n)=>{const r=[...null!=t?t:[],...null!=n?n:[]];return e.filter((e=>!r.includes(e.id)))}),u(e.options,"debugColumns"))}},P={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},I={getDefaultColumnDef:()=>P,getInitialState:e=>({columnSizing:{},columnSizingInfo:{startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]},...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:o("columnSizing",e),onColumnSizingInfoChange:o("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,o;const i=t.getState().columnSizing[e.id];return Math.min(Math.max(null!=(n=e.columnDef.minSize)?n:P.minSize,null!=(r=null!=i?i:e.columnDef.size)?r:P.size),null!=(o=e.columnDef.maxSize)?o:P.maxSize)},e.getStart=s((e=>[e,L(t,e),t.getState().columnSizing]),((t,n)=>n.slice(0,e.getIndex(t)).reduce(((e,t)=>e+t.getSize()),0)),u(t.options,"debugColumns")),e.getAfter=s((e=>[e,L(t,e),t.getState().columnSizing]),((t,n)=>n.slice(e.getIndex(t)+1).reduce(((e,t)=>e+t.getSize()),0)),u(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing((t=>{let{[e.id]:n,...r}=t;return r}))},e.getCanResize=()=>{var n,r;return(null==(n=e.columnDef.enableResizing)||n)&&(null==(r=t.options.enableColumnResizing)||r)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let t=0;const n=e=>{var r;e.subHeaders.length?e.subHeaders.forEach(n):t+=null!=(r=e.column.getSize())?r:0};return n(e),t},e.getStart=()=>{if(e.index>0){const t=e.headerGroup.headers[e.index-1];return t.getStart()+t.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),o=null==r?void 0:r.getCanResize();return i=>{if(!r||!o)return;if(null==i.persist||i.persist(),D(i)&&i.touches&&i.touches.length>1)return;const a=e.getSize(),s=e?e.getLeafHeaders().map((e=>[e.column.id,e.column.getSize()])):[[r.id,r.getSize()]],u=D(i)?Math.round(i.touches[0].clientX):i.clientX,l={},c=(e,n)=>{"number"===typeof n&&(t.setColumnSizingInfo((e=>{var r,o;const i="rtl"===t.options.columnResizeDirection?-1:1,a=(n-(null!=(r=null==e?void 0:e.startOffset)?r:0))*i,s=Math.max(a/(null!=(o=null==e?void 0:e.startSize)?o:0),-.999999);return e.columnSizingStart.forEach((e=>{let[t,n]=e;l[t]=Math.round(100*Math.max(n+n*s,0))/100})),{...e,deltaOffset:a,deltaPercentage:s}})),"onChange"!==t.options.columnResizeMode&&"end"!==e||t.setColumnSizing((e=>({...e,...l}))))},f=e=>c("move",e),d=e=>{c("end",e),t.setColumnSizingInfo((e=>({...e,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]})))},h=n||"undefined"!==typeof document?document:null,p={moveHandler:e=>f(e.clientX),upHandler:e=>{null==h||h.removeEventListener("mousemove",p.moveHandler),null==h||h.removeEventListener("mouseup",p.upHandler),d(e.clientX)}},g={moveHandler:e=>(e.cancelable&&(e.preventDefault(),e.stopPropagation()),f(e.touches[0].clientX),!1),upHandler:e=>{var t;null==h||h.removeEventListener("touchmove",g.moveHandler),null==h||h.removeEventListener("touchend",g.upHandler),e.cancelable&&(e.preventDefault(),e.stopPropagation()),d(null==(t=e.touches[0])?void 0:t.clientX)}},v=!!function(){if("boolean"===typeof N)return N;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch(t){e=!1}return N=e,N}()&&{passive:!1};D(i)?(null==h||h.addEventListener("touchmove",g.moveHandler,v),null==h||h.addEventListener("touchend",g.upHandler,v)):(null==h||h.addEventListener("mousemove",p.moveHandler,v),null==h||h.addEventListener("mouseup",p.upHandler,v)),t.setColumnSizingInfo((e=>({...e,startOffset:u,startSize:a,deltaOffset:0,deltaPercentage:0,columnSizingStart:s,isResizingColumn:r.id})))}}},createTable:e=>{e.setColumnSizing=t=>null==e.options.onColumnSizingChange?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>null==e.options.onColumnSizingInfoChange?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:null!=(n=e.initialState.columnSizing)?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?{startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}:null!=(n=e.initialState.columnSizingInfo)?n:{startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]})},e.getTotalSize=()=>{var t,n;return null!=(t=null==(n=e.getHeaderGroups()[0])?void 0:n.headers.reduce(((e,t)=>e+t.getSize()),0))?t:0},e.getLeftTotalSize=()=>{var t,n;return null!=(t=null==(n=e.getLeftHeaderGroups()[0])?void 0:n.headers.reduce(((e,t)=>e+t.getSize()),0))?t:0},e.getCenterTotalSize=()=>{var t,n;return null!=(t=null==(n=e.getCenterHeaderGroups()[0])?void 0:n.headers.reduce(((e,t)=>e+t.getSize()),0))?t:0},e.getRightTotalSize=()=>{var t,n;return null!=(t=null==(n=e.getRightHeaderGroups()[0])?void 0:n.headers.reduce(((e,t)=>e+t.getSize()),0))?t:0}}};let N=null;function D(e){return"touchstart"===e.type}function L(e,t){return t?"center"===t?e.getCenterVisibleLeafColumns():"left"===t?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const F={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:o("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>null==e.options.onRowSelectionChange?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:null!=(n=e.initialState.rowSelection)?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection((n=>{t="undefined"!==typeof t?t:!e.getIsAllRowsSelected();const r={...n},o=e.getPreGroupedRowModel().flatRows;return t?o.forEach((e=>{e.getCanSelect()&&(r[e.id]=!0)})):o.forEach((e=>{delete r[e.id]})),r}))},e.toggleAllPageRowsSelected=t=>e.setRowSelection((n=>{const r="undefined"!==typeof t?t:!e.getIsAllPageRowsSelected(),o={...n};return e.getRowModel().rows.forEach((t=>{j(o,t.id,r,!0,e)})),o})),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=s((()=>[e.getState().rowSelection,e.getCoreRowModel()]),((t,n)=>Object.keys(t).length?U(e,n):{rows:[],flatRows:[],rowsById:{}}),u(e.options,"debugTable")),e.getFilteredSelectedRowModel=s((()=>[e.getState().rowSelection,e.getFilteredRowModel()]),((t,n)=>Object.keys(t).length?U(e,n):{rows:[],flatRows:[],rowsById:{}}),u(e.options,"debugTable")),e.getGroupedSelectedRowModel=s((()=>[e.getState().rowSelection,e.getSortedRowModel()]),((t,n)=>Object.keys(t).length?U(e,n):{rows:[],flatRows:[],rowsById:{}}),u(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=Boolean(t.length&&Object.keys(n).length);return r&&t.some((e=>e.getCanSelect()&&!n[e.id]))&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter((e=>e.getCanSelect())),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some((e=>!n[e.id]))&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys(null!=(t=e.getState().rowSelection)?t:{}).length;return n>0&&n{const t=e.getPaginationRowModel().flatRows;return!e.getIsAllPageRowsSelected()&&t.filter((e=>e.getCanSelect())).some((e=>e.getIsSelected()||e.getIsSomeSelected()))},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const o=e.getIsSelected();t.setRowSelection((i=>{var a;if(n="undefined"!==typeof n?n:!o,e.getCanSelect()&&o===n)return i;const s={...i};return j(s,e.id,n,null==(a=null==r?void 0:r.selectChildren)||a,t),s}))},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return z(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return"some"===B(e,n)},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return"all"===B(e,n)},e.getCanSelect=()=>{var n;return"function"===typeof t.options.enableRowSelection?t.options.enableRowSelection(e):null==(n=t.options.enableRowSelection)||n},e.getCanSelectSubRows=()=>{var n;return"function"===typeof t.options.enableSubRowSelection?t.options.enableSubRowSelection(e):null==(n=t.options.enableSubRowSelection)||n},e.getCanMultiSelect=()=>{var n;return"function"===typeof t.options.enableMultiRowSelection?t.options.enableMultiRowSelection(e):null==(n=t.options.enableMultiRowSelection)||n},e.getToggleSelectedHandler=()=>{const t=e.getCanSelect();return n=>{var r;t&&e.toggleSelected(null==(r=n.target)?void 0:r.checked)}}}},j=(e,t,n,r,o)=>{var i;const a=o.getRow(t,!0);n?(a.getCanMultiSelect()||Object.keys(e).forEach((t=>delete e[t])),a.getCanSelect()&&(e[t]=!0)):delete e[t],r&&null!=(i=a.subRows)&&i.length&&a.getCanSelectSubRows()&&a.subRows.forEach((t=>j(e,t.id,n,r,o)))};function U(e,t){const n=e.getState().rowSelection,r=[],o={},i=function(e,t){return e.map((e=>{var t;const a=z(e,n);if(a&&(r.push(e),o[e.id]=e),null!=(t=e.subRows)&&t.length&&(e={...e,subRows:i(e.subRows)}),a)return e})).filter(Boolean)};return{rows:i(t.rows),flatRows:r,rowsById:o}}function z(e,t){var n;return null!=(n=t[e.id])&&n}function B(e,t,n){var r;if(null==(r=e.subRows)||!r.length)return!1;let o=!0,i=!1;return e.subRows.forEach((e=>{if((!i||o)&&(e.getCanSelect()&&(z(e,t)?i=!0:o=!1),e.subRows&&e.subRows.length)){const n=B(e,t);"all"===n?i=!0:"some"===n?(i=!0,o=!1):o=!1}})),o?"all":!!i&&"some"}const V=/([0-9]+)/gm;function $(e,t){return e===t?0:e>t?1:-1}function H(e){return"number"===typeof e?isNaN(e)||e===1/0||e===-1/0?"":String(e):"string"===typeof e?e:""}function W(e,t){const n=e.split(V).filter(Boolean),r=t.split(V).filter(Boolean);for(;n.length&&r.length;){const e=n.shift(),t=r.shift(),o=parseInt(e,10),i=parseInt(t,10),a=[o,i].sort();if(isNaN(a[0])){if(e>t)return 1;if(t>e)return-1}else{if(isNaN(a[1]))return isNaN(o)?-1:1;if(o>i)return 1;if(i>o)return-1}}return n.length-r.length}const q={alphanumeric:(e,t,n)=>W(H(e.getValue(n)).toLowerCase(),H(t.getValue(n)).toLowerCase()),alphanumericCaseSensitive:(e,t,n)=>W(H(e.getValue(n)),H(t.getValue(n))),text:(e,t,n)=>$(H(e.getValue(n)).toLowerCase(),H(t.getValue(n)).toLowerCase()),textCaseSensitive:(e,t,n)=>$(H(e.getValue(n)),H(t.getValue(n))),datetime:(e,t,n)=>{const r=e.getValue(n),o=t.getValue(n);return r>o?1:r$(e.getValue(n),t.getValue(n))},G=[f,{getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:o("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility((t=>({...t,[e.id]:null!=n?n:!e.getIsVisible()})))},e.getIsVisible=()=>{var n,r;const o=e.columns;return null==(n=o.length?o.some((e=>e.getIsVisible())):null==(r=t.getState().columnVisibility)?void 0:r[e.id])||n},e.getCanHide=()=>{var n,r;return(null==(n=e.columnDef.enableHiding)||n)&&(null==(r=t.options.enableHiding)||r)},e.getToggleVisibilityHandler=()=>t=>{null==e.toggleVisibility||e.toggleVisibility(t.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=s((()=>[e.getAllCells(),t.getState().columnVisibility]),(e=>e.filter((e=>e.column.getIsVisible()))),u(t.options,"debugRows")),e.getVisibleCells=s((()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()]),((e,t,n)=>[...e,...t,...n]),u(t.options,"debugRows"))},createTable:e=>{const t=(t,n)=>s((()=>[n(),n().filter((e=>e.getIsVisible())).map((e=>e.id)).join("_")]),(e=>e.filter((e=>null==e.getIsVisible?void 0:e.getIsVisible()))),u(e.options,"debugColumns"));e.getVisibleFlatColumns=t(0,(()=>e.getAllFlatColumns())),e.getVisibleLeafColumns=t(0,(()=>e.getAllLeafColumns())),e.getLeftVisibleLeafColumns=t(0,(()=>e.getLeftLeafColumns())),e.getRightVisibleLeafColumns=t(0,(()=>e.getRightLeafColumns())),e.getCenterVisibleLeafColumns=t(0,(()=>e.getCenterLeafColumns())),e.setColumnVisibility=t=>null==e.options.onColumnVisibilityChange?void 0:e.options.onColumnVisibilityChange(t),e.resetColumnVisibility=t=>{var n;e.setColumnVisibility(t?{}:null!=(n=e.initialState.columnVisibility)?n:{})},e.toggleAllColumnsVisible=t=>{var n;t=null!=(n=t)?n:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce(((e,n)=>({...e,[n.id]:t||!(null!=n.getCanHide&&n.getCanHide())})),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some((e=>!(null!=e.getIsVisible&&e.getIsVisible()))),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some((e=>null==e.getIsVisible?void 0:e.getIsVisible())),e.getToggleAllColumnsVisibilityHandler=()=>t=>{var n;e.toggleAllColumnsVisible(null==(n=t.target)?void 0:n.checked)}}},k,M,p,C,{createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},{getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:o("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=null==(n=e.getCoreRowModel().flatRows[0])||null==(n=n._getAllCellsByColumnId()[t.id])?void 0:n.getValue();return"string"===typeof r||"number"===typeof r}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,o,i;return(null==(n=e.columnDef.enableGlobalFilter)||n)&&(null==(r=t.options.enableGlobalFilter)||r)&&(null==(o=t.options.enableFilters)||o)&&(null==(i=null==t.options.getColumnCanGlobalFilter?void 0:t.options.getColumnCanGlobalFilter(e))||i)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>A.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return i(r)?r:"auto"===r?e.getGlobalAutoFilterFn():null!=(t=null==(n=e.options.filterFns)?void 0:n[r])?t:A[r]},e.setGlobalFilter=t=>{null==e.options.onGlobalFilterChange||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:o("sorting",e),isMultiSortEvent:e=>e.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const t of n){const n=null==t?void 0:t.getValue(e.id);if("[object Date]"===Object.prototype.toString.call(n))return q.datetime;if("string"===typeof n&&(r=!0,n.split(V).length>1))return q.alphanumeric}return r?q.text:q.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return"string"===typeof(null==n?void 0:n.getValue(e.id))?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return i(e.columnDef.sortingFn)?e.columnDef.sortingFn:"auto"===e.columnDef.sortingFn?e.getAutoSortingFn():null!=(n=null==(r=t.options.sortingFns)?void 0:r[e.columnDef.sortingFn])?n:q[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const o=e.getNextSortingOrder(),i="undefined"!==typeof n&&null!==n;t.setSorting((a=>{const s=null==a?void 0:a.find((t=>t.id===e.id)),u=null==a?void 0:a.findIndex((t=>t.id===e.id));let l,c=[],f=i?n:"desc"===o;var d;(l=null!=a&&a.length&&e.getCanMultiSort()&&r?s?"toggle":"add":null!=a&&a.length&&u!==a.length-1?"replace":s?"toggle":"replace","toggle"===l&&(i||o||(l="remove")),"add"===l)?(c=[...a,{id:e.id,desc:f}],c.splice(0,c.length-(null!=(d=t.options.maxMultiSortColCount)?d:Number.MAX_SAFE_INTEGER))):c="toggle"===l?a.map((t=>t.id===e.id?{...t,desc:f}:t)):"remove"===l?a.filter((t=>t.id!==e.id)):[{id:e.id,desc:f}];return c}))},e.getFirstSortDir=()=>{var n,r;return(null!=(n=null!=(r=e.columnDef.sortDescFirst)?r:t.options.sortDescFirst)?n:"desc"===e.getAutoSortDir())?"desc":"asc"},e.getNextSortingOrder=n=>{var r,o;const i=e.getFirstSortDir(),a=e.getIsSorted();return a?!!(a===i||null!=(r=t.options.enableSortingRemoval)&&!r||n&&null!=(o=t.options.enableMultiRemove)&&!o)&&("desc"===a?"asc":"desc"):i},e.getCanSort=()=>{var n,r;return(null==(n=e.columnDef.enableSorting)||n)&&(null==(r=t.options.enableSorting)||r)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return null!=(n=null!=(r=e.columnDef.enableMultiSort)?r:t.options.enableMultiSort)?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=null==(n=t.getState().sorting)?void 0:n.find((t=>t.id===e.id));return!!r&&(r.desc?"desc":"asc")},e.getSortIndex=()=>{var n,r;return null!=(n=null==(r=t.getState().sorting)?void 0:r.findIndex((t=>t.id===e.id)))?n:-1},e.clearSorting=()=>{t.setSorting((t=>null!=t&&t.length?t.filter((t=>t.id!==e.id)):[]))},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(null==r.persist||r.persist(),null==e.toggleSorting||e.toggleSorting(void 0,!!e.getCanMultiSort()&&(null==t.options.isMultiSortEvent?void 0:t.options.isMultiSortEvent(r))))}}},createTable:e=>{e.setSorting=t=>null==e.options.onSortingChange?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:null!=(n=null==(r=e.initialState)?void 0:r.sorting)?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},T,{getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:o("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,o;if(t){if(null!=(r=null!=(o=e.options.autoResetAll)?o:e.options.autoResetExpanded)?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue((()=>{e.resetExpanded(),n=!1}))}}else e._queue((()=>{t=!0}))},e.setExpanded=t=>null==e.options.onExpandedChange?void 0:e.options.onExpandedChange(t),e.toggleAllRowsExpanded=t=>{(null!=t?t:!e.getIsAllRowsExpanded())?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=t=>{var n,r;e.setExpanded(t?{}:null!=(n=null==(r=e.initialState)?void 0:r.expanded)?n:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some((e=>e.getCanExpand())),e.getToggleAllRowsExpandedHandler=()=>t=>{null==t.persist||t.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const t=e.getState().expanded;return!0===t||Object.values(t).some(Boolean)},e.getIsAllRowsExpanded=()=>{const t=e.getState().expanded;return"boolean"===typeof t?!0===t:!!Object.keys(t).length&&!e.getRowModel().flatRows.some((e=>!e.getIsExpanded()))},e.getExpandedDepth=()=>{let t=0;return(!0===e.getState().expanded?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach((e=>{const n=e.split(".");t=Math.max(t,n.length)})),t},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded((r=>{var o;const i=!0===r||!(null==r||!r[e.id]);let a={};if(!0===r?Object.keys(t.getRowModel().rowsById).forEach((e=>{a[e]=!0})):a=r,n=null!=(o=n)?o:!i,!i&&n)return{...a,[e.id]:!0};if(i&&!n){const{[e.id]:t,...n}=a;return n}return r}))},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!(null!=(n=null==t.options.getIsRowExpanded?void 0:t.options.getIsRowExpanded(e))?n:!0===r||(null==r?void 0:r[e.id]))},e.getCanExpand=()=>{var n,r,o;return null!=(n=null==t.options.getRowCanExpand?void 0:t.options.getRowCanExpand(e))?n:(null==(r=t.options.enableExpanding)||r)&&!(null==(o=e.subRows)||!o.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const t=e.getCanExpand();return()=>{t&&e.toggleExpanded()}}}},{getInitialState:e=>({...e,pagination:{pageIndex:0,pageSize:10,...null==e?void 0:e.pagination}}),getDefaultOptions:e=>({onPaginationChange:o("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,o;if(t){if(null!=(r=null!=(o=e.options.autoResetAll)?o:e.options.autoResetPageIndex)?r:!e.options.manualPagination){if(n)return;n=!0,e._queue((()=>{e.resetPageIndex(),n=!1}))}}else e._queue((()=>{t=!0}))},e.setPagination=t=>null==e.options.onPaginationChange?void 0:e.options.onPaginationChange((e=>r(t,e))),e.resetPagination=t=>{var n;e.setPagination(t?{pageIndex:0,pageSize:10}:null!=(n=e.initialState.pagination)?n:{pageIndex:0,pageSize:10})},e.setPageIndex=t=>{e.setPagination((n=>{let o=r(t,n.pageIndex);const i="undefined"===typeof e.options.pageCount||-1===e.options.pageCount?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return o=Math.max(0,Math.min(o,i)),{...n,pageIndex:o}}))},e.resetPageIndex=t=>{var n,r;e.setPageIndex(t?0:null!=(n=null==(r=e.initialState)||null==(r=r.pagination)?void 0:r.pageIndex)?n:0)},e.resetPageSize=t=>{var n,r;e.setPageSize(t?10:null!=(n=null==(r=e.initialState)||null==(r=r.pagination)?void 0:r.pageSize)?n:10)},e.setPageSize=t=>{e.setPagination((e=>{const n=Math.max(1,r(t,e.pageSize)),o=e.pageSize*e.pageIndex,i=Math.floor(o/n);return{...e,pageIndex:i,pageSize:n}}))},e.setPageCount=t=>e.setPagination((n=>{var o;let i=r(t,null!=(o=e.options.pageCount)?o:-1);return"number"===typeof i&&(i=Math.max(-1,i)),{...n,pageCount:i}})),e.getPageOptions=s((()=>[e.getPageCount()]),(e=>{let t=[];return e&&e>0&&(t=[...new Array(e)].fill(null).map(((e,t)=>t))),t}),u(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:t}=e.getState().pagination,n=e.getPageCount();return-1===n||0!==n&&te.setPageIndex((e=>e-1)),e.nextPage=()=>e.setPageIndex((e=>e+1)),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var t;return null!=(t=e.options.pageCount)?t:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var t;return null!=(t=e.options.rowCount)?t:e.getPrePaginationRowModel().rows.length}}},{getInitialState:e=>({rowPinning:{top:[],bottom:[]},...e}),getDefaultOptions:e=>({onRowPinningChange:o("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,o)=>{const i=r?e.getLeafRows().map((e=>{let{id:t}=e;return t})):[],a=o?e.getParentRows().map((e=>{let{id:t}=e;return t})):[],s=new Set([...a,e.id,...i]);t.setRowPinning((e=>{var t,r,o,i,a,u;return"bottom"===n?{top:(null!=(o=null==e?void 0:e.top)?o:[]).filter((e=>!(null!=s&&s.has(e)))),bottom:[...(null!=(i=null==e?void 0:e.bottom)?i:[]).filter((e=>!(null!=s&&s.has(e)))),...Array.from(s)]}:"top"===n?{top:[...(null!=(a=null==e?void 0:e.top)?a:[]).filter((e=>!(null!=s&&s.has(e)))),...Array.from(s)],bottom:(null!=(u=null==e?void 0:e.bottom)?u:[]).filter((e=>!(null!=s&&s.has(e))))}:{top:(null!=(t=null==e?void 0:e.top)?t:[]).filter((e=>!(null!=s&&s.has(e)))),bottom:(null!=(r=null==e?void 0:e.bottom)?r:[]).filter((e=>!(null!=s&&s.has(e))))}}))},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:o}=t.options;return"function"===typeof r?r(e):null==(n=null!=r?r:o)||n},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:o}=t.getState().rowPinning,i=n.some((e=>null==r?void 0:r.includes(e))),a=n.some((e=>null==o?void 0:o.includes(e)));return i?"top":!!a&&"bottom"},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();if(!o)return-1;const i=null==(n=t._getPinnedRows(o))?void 0:n.map((e=>{let{id:t}=e;return t}));return null!=(r=null==i?void 0:i.indexOf(e.id))?r:-1}},createTable:e=>{e.setRowPinning=t=>null==e.options.onRowPinningChange?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?{top:[],bottom:[]}:null!=(n=null==(r=e.initialState)?void 0:r.rowPinning)?n:{top:[],bottom:[]})},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;var o,i;return t?Boolean(null==(n=r[t])?void 0:n.length):Boolean((null==(o=r.top)?void 0:o.length)||(null==(i=r.bottom)?void 0:i.length))},e._getPinnedRows=s((t=>[e.getRowModel().rows,e.getState().rowPinning[t],t]),((t,n,r)=>{var o;return(null==(o=e.options.keepPinnedRows)||o?(null!=n?n:[]).map((t=>{const n=e.getRow(t,!0);return n.getIsAllParentsExpanded()?n:null})):(null!=n?n:[]).map((e=>t.find((t=>t.id===e))))).filter(Boolean).map((e=>({...e,position:r})))}),u(e.options,"debugRows")),e.getTopRows=()=>e._getPinnedRows("top"),e.getBottomRows=()=>e._getPinnedRows("bottom"),e.getCenterRows=s((()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom]),((e,t,n)=>{const r=new Set([...null!=t?t:[],...null!=n?n:[]]);return e.filter((e=>!r.has(e.id)))}),u(e.options,"debugRows"))}},F,I];function Y(e){var t,n;const o=[...G,...null!=(t=e._features)?t:[]];let i={_features:o};const a=i._features.reduce(((e,t)=>Object.assign(e,null==t.getDefaultOptions?void 0:t.getDefaultOptions(i))),{});let l={...null!=(n=e.initialState)?n:{}};i._features.forEach((e=>{var t;l=null!=(t=null==e.getInitialState?void 0:e.getInitialState(l))?t:l}));const c=[];let f=!1;const d={_features:o,options:{...a,...e},initialState:l,_queue:e=>{c.push(e),f||(f=!0,Promise.resolve().then((()=>{for(;c.length;)c.shift()();f=!1})).catch((e=>setTimeout((()=>{throw e})))))},reset:()=>{i.setState(i.initialState)},setOptions:e=>{const t=r(e,i.options);i.options=(e=>i.options.mergeOptions?i.options.mergeOptions(a,e):{...a,...e})(t)},getState:()=>i.options.state,setState:e=>{null==i.options.onStateChange||i.options.onStateChange(e)},_getRowId:(e,t,n)=>{var r;return null!=(r=null==i.options.getRowId?void 0:i.options.getRowId(e,t,n))?r:`${n?[n.id,t].join("."):t}`},getCoreRowModel:()=>(i._getCoreRowModel||(i._getCoreRowModel=i.options.getCoreRowModel(i)),i._getCoreRowModel()),getRowModel:()=>i.getPaginationRowModel(),getRow:(e,t)=>{let n=(t?i.getPrePaginationRowModel():i.getRowModel()).rowsById[e];if(!n&&(n=i.getCoreRowModel().rowsById[e],!n))throw new Error;return n},_getDefaultColumnDef:s((()=>[i.options.defaultColumn]),(e=>{var t;return e=null!=(t=e)?t:{},{header:e=>{const t=e.header.column.columnDef;return t.accessorKey?t.accessorKey:t.accessorFn?t.id:null},cell:e=>{var t,n;return null!=(t=null==(n=e.renderValue())||null==n.toString?void 0:n.toString())?t:null},...i._features.reduce(((e,t)=>Object.assign(e,null==t.getDefaultColumnDef?void 0:t.getDefaultColumnDef())),{}),...e}}),u(e,"debugColumns")),_getColumnDefs:()=>i.options.columns,getAllColumns:s((()=>[i._getColumnDefs()]),(e=>{const t=function(e,n,r){return void 0===r&&(r=0),e.map((e=>{const o=function(e,t,n,r){var o,i;const a={...e._getDefaultColumnDef(),...t},l=a.accessorKey;let c,f=null!=(o=null!=(i=a.id)?i:l?l.replace(".","_"):void 0)?o:"string"===typeof a.header?a.header:void 0;if(a.accessorFn?c=a.accessorFn:l&&(c=l.includes(".")?e=>{let t=e;for(const r of l.split(".")){var n;t=null==(n=t)?void 0:n[r]}return t}:e=>e[a.accessorKey]),!f)throw new Error;let d={id:`${String(f)}`,accessorFn:c,parent:r,depth:n,columnDef:a,columns:[],getFlatColumns:s((()=>[!0]),(()=>{var e;return[d,...null==(e=d.columns)?void 0:e.flatMap((e=>e.getFlatColumns()))]}),u(e.options,"debugColumns")),getLeafColumns:s((()=>[e._getOrderColumnsFn()]),(e=>{var t;if(null!=(t=d.columns)&&t.length){let t=d.columns.flatMap((e=>e.getLeafColumns()));return e(t)}return[d]}),u(e.options,"debugColumns"))};for(const s of e._features)null==s.createColumn||s.createColumn(d,e);return d}(i,e,r,n),a=e;return o.columns=a.columns?t(a.columns,o,r+1):[],o}))};return t(e)}),u(e,"debugColumns")),getAllFlatColumns:s((()=>[i.getAllColumns()]),(e=>e.flatMap((e=>e.getFlatColumns()))),u(e,"debugColumns")),_getAllFlatColumnsById:s((()=>[i.getAllFlatColumns()]),(e=>e.reduce(((e,t)=>(e[t.id]=t,e)),{})),u(e,"debugColumns")),getAllLeafColumns:s((()=>[i.getAllColumns(),i._getOrderColumnsFn()]),((e,t)=>t(e.flatMap((e=>e.getLeafColumns())))),u(e,"debugColumns")),getColumn:e=>i._getAllFlatColumnsById()[e]};Object.assign(i,d);for(let r=0;rs((()=>[e.options.data]),(t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(t,o,i){void 0===o&&(o=0);const a=[];for(let u=0;ue._autoResetPageIndex())))}function K(){return e=>s((()=>[e.getState().expanded,e.getPreExpandedRowModel(),e.options.paginateExpandedRows]),((e,t,n)=>!t.rows.length||!0!==e&&!Object.keys(null!=e?e:{}).length?t:n?Z(t):t),u(e.options,"debugTable"))}function Z(e){const t=[],n=e=>{var r;t.push(e),null!=(r=e.subRows)&&r.length&&e.getIsExpanded()&&e.subRows.forEach(n)};return e.rows.forEach(n),{rows:t,flatRows:e.flatRows,rowsById:e.rowsById}}function Q(e,t,n){return n.options.filterFromLeafRows?function(e,t,n){var r;const o=[],i={},a=null!=(r=n.options.maxLeafRowFilterDepth)?r:100,s=function(e,r){void 0===r&&(r=0);const u=[];for(let c=0;cs((()=>[e.getPreFilteredRowModel(),e.getState().columnFilters,e.getState().globalFilter]),((t,n,r)=>{if(!t.rows.length||(null==n||!n.length)&&!r){for(let e=0;e{var n;const r=e.getColumn(t.id);if(!r)return;const i=r.getFilterFn();i&&o.push({id:t.id,filterFn:i,resolvedValue:null!=(n=null==i.resolveFilterValue?void 0:i.resolveFilterValue(t.value))?n:t.value})}));const a=n.map((e=>e.id)),s=e.getGlobalFilterFn(),u=e.getAllLeafColumns().filter((e=>e.getCanGlobalFilter()));let l,c;r&&s&&u.length&&(a.push("__global__"),u.forEach((e=>{var t;i.push({id:e.id,filterFn:s,resolvedValue:null!=(t=null==s.resolveFilterValue?void 0:s.resolveFilterValue(r))?t:r})})));for(let e=0;e{n.columnFiltersMeta[t]=e}))}if(i.length){for(let e=0;e{n.columnFiltersMeta[t]=e}))){n.columnFilters.__global__=!0;break}}!0!==n.columnFilters.__global__&&(n.columnFilters.__global__=!1)}}return Q(t.rows,(e=>{for(let t=0;te._autoResetPageIndex())))}function ee(){return e=>s((()=>[e.getState().grouping,e.getPreGroupedRowModel()]),((t,n)=>{if(!n.rows.length||!t.length)return n;const r=t.filter((t=>e.getColumn(t))),o=[],i={},s=function(t,n,u){if(void 0===n&&(n=0),n>=r.length)return t.map((e=>(e.depth=n,o.push(e),i[e.id]=e,e.subRows&&(e.subRows=s(e.subRows,n+1,e.id)),e)));const l=r[n],c=function(e,t){const n=new Map;return e.reduce(((e,n)=>{const r=`${n.getGroupingValue(t)}`,o=e.get(r);return o?o.push(n):e.set(r,[n]),e}),n)}(t,l),f=Array.from(c.entries()).map(((t,c)=>{let[f,d]=t,p=`${l}:${f}`;p=u?`${u}>${p}`:p;const g=s(d,n+1,p),v=n?a(d,(e=>e.subRows)):d,y=h(e,p,v[0].original,c,n,void 0,u);return Object.assign(y,{groupingColumnId:l,groupingValue:f,subRows:g,leafRows:v,getValue:t=>{if(r.includes(t)){if(y._valuesCache.hasOwnProperty(t))return y._valuesCache[t];var n;if(d[0])y._valuesCache[t]=null!=(n=d[0].getValue(t))?n:void 0;return y._valuesCache[t]}if(y._groupingValuesCache.hasOwnProperty(t))return y._groupingValuesCache[t];const o=e.getColumn(t),i=null==o?void 0:o.getAggregationFn();return i?(y._groupingValuesCache[t]=i(t,v,d),y._groupingValuesCache[t]):void 0}}),g.forEach((e=>{o.push(e),i[e.id]=e})),y}));return f},u=s(n.rows,0);return u.forEach((e=>{o.push(e),i[e.id]=e})),{rows:u,flatRows:o,rowsById:i}}),u(e.options,"debugTable",0,(()=>{e._queue((()=>{e._autoResetExpanded(),e._autoResetPageIndex()}))})))}function te(e){return e=>s((()=>[e.getState().pagination,e.getPrePaginationRowModel(),e.options.paginateExpandedRows?void 0:e.getState().expanded]),((t,n)=>{if(!n.rows.length)return n;const{pageSize:r,pageIndex:o}=t;let{rows:i,flatRows:a,rowsById:s}=n;const u=r*o,l=u+r;let c;i=i.slice(u,l),c=e.options.paginateExpandedRows?{rows:i,flatRows:a,rowsById:s}:Z({rows:i,flatRows:a,rowsById:s}),c.flatRows=[];const f=e=>{c.flatRows.push(e),e.subRows.length&&e.subRows.forEach(f)};return c.rows.forEach(f),c}),u(e.options,"debugTable"))}function ne(){return e=>s((()=>[e.getState().sorting,e.getPreSortedRowModel()]),((t,n)=>{if(!n.rows.length||null==t||!t.length)return n;const r=e.getState().sorting,o=[],i=r.filter((t=>{var n;return null==(n=e.getColumn(t.id))?void 0:n.getCanSort()})),a={};i.forEach((t=>{const n=e.getColumn(t.id);n&&(a[t.id]={sortUndefined:n.columnDef.sortUndefined,invertSorting:n.columnDef.invertSorting,sortingFn:n.getSortingFn()})}));const s=e=>{const t=e.map((e=>({...e})));return t.sort(((e,t)=>{for(let r=0;r{var t;o.push(e),null!=(t=e.subRows)&&t.length&&(e.subRows=s(e.subRows))})),t};return{rows:s(n.rows),flatRows:o,rowsById:n.rowsById}}),u(e.options,"debugTable",0,(()=>e._autoResetPageIndex())))}},46266:(e,t,n)=>{"use strict";n.d(t,{A:()=>Ge});var r={};function o(e,t){return function(){return e.apply(t,arguments)}}n.r(r),n.d(r,{hasBrowserEnv:()=>re,hasStandardBrowserEnv:()=>oe,hasStandardBrowserWebWorkerEnv:()=>ae});const{toString:i}=Object.prototype,{getPrototypeOf:a}=Object,s=(u=Object.create(null),e=>{const t=i.call(e);return u[t]||(u[t]=t.slice(8,-1).toLowerCase())});var u;const l=e=>(e=e.toLowerCase(),t=>s(t)===e),c=e=>t=>typeof t===e,{isArray:f}=Array,d=c("undefined");const h=l("ArrayBuffer");const p=c("string"),g=c("function"),v=c("number"),y=e=>null!==e&&"object"===typeof e,m=e=>{if("object"!==s(e))return!1;const t=a(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},b=l("Date"),_=l("File"),w=l("Blob"),x=l("FileList"),S=l("URLSearchParams");function A(e,t,{allOwnKeys:n=!1}={}){if(null===e||"undefined"===typeof e)return;let r,o;if("object"!==typeof e&&(e=[e]),f(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const C="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:"undefined"!==typeof window?window:global,R=e=>!d(e)&&e!==C;const O=(T="undefined"!==typeof Uint8Array&&a(Uint8Array),e=>T&&e instanceof T);var T;const k=l("HTMLFormElement"),M=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),P=l("RegExp"),I=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};A(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)},N="abcdefghijklmnopqrstuvwxyz",D="0123456789",L={DIGIT:D,ALPHA:N,ALPHA_DIGIT:N+N.toUpperCase()+D};const F=l("AsyncFunction"),j={isArray:f,isArrayBuffer:h,isBuffer:function(e){return null!==e&&!d(e)&&null!==e.constructor&&!d(e.constructor)&&g(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"===typeof FormData&&e instanceof FormData||g(e.append)&&("formdata"===(t=s(e))||"object"===t&&g(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&h(e.buffer),t},isString:p,isNumber:v,isBoolean:e=>!0===e||!1===e,isObject:y,isPlainObject:m,isUndefined:d,isDate:b,isFile:_,isBlob:w,isRegExp:P,isFunction:g,isStream:e=>y(e)&&g(e.pipe),isURLSearchParams:S,isTypedArray:O,isFileList:x,forEach:A,merge:function e(){const{caseless:t}=R(this)&&this||{},n={},r=(r,o)=>{const i=t&&E(n,o)||o;m(n[i])&&m(r)?n[i]=e(n[i],r):m(r)?n[i]=e({},r):f(r)?n[i]=r.slice():n[i]=r};for(let o=0,i=arguments.length;o(A(t,((t,r)=>{n&&g(t)?e[r]=o(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,s;const u={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)s=o[i],r&&!r(s,e,t)||u[s]||(t[s]=e[s],u[s]=!0);e=!1!==n&&a(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:l,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(f(e))return e;let t=e.length;if(!v(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:k,hasOwnProperty:M,hasOwnProp:M,reduceDescriptors:I,freezeMethods:e=>{I(e,((t,n)=>{if(g(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];g(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return f(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:E,global:C,isContextDefined:R,ALPHABET:L,generateString:(e=16,t=L.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&g(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(y(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=f(e)?[]:{};return A(e,((e,t)=>{const i=n(e,r+1);!d(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:F,isThenable:e=>e&&(y(e)||g(e))&&g(e.then)&&g(e.catch)};function U(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}j.inherits(U,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:j.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const z=U.prototype,B={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{B[e]={value:e}})),Object.defineProperties(U,B),Object.defineProperty(z,"isAxiosError",{value:!0}),U.from=(e,t,n,r,o,i)=>{const a=Object.create(z);return j.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),U.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};const V=U;function $(e){return j.isPlainObject(e)||j.isArray(e)}function H(e){return j.endsWith(e,"[]")?e.slice(0,-2):e}function W(e,t,n){return e?e.concat(t).map((function(e,t){return e=H(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const q=j.toFlatObject(j,{},null,(function(e){return/^is[A-Z]/.test(e)}));const G=function(e,t,n){if(!j.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=j.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!j.isUndefined(t[e])}))).metaTokens,o=n.visitor||l,i=n.dots,a=n.indexes,s=(n.Blob||"undefined"!==typeof Blob&&Blob)&&j.isSpecCompliantForm(t);if(!j.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(j.isDate(e))return e.toISOString();if(!s&&j.isBlob(e))throw new V("Blob is not supported. Use a Buffer instead.");return j.isArrayBuffer(e)||j.isTypedArray(e)?s&&"function"===typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let s=e;if(e&&!o&&"object"===typeof e)if(j.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(j.isArray(e)&&function(e){return j.isArray(e)&&!e.some($)}(e)||(j.isFileList(e)||j.endsWith(n,"[]"))&&(s=j.toArray(e)))return n=H(n),s.forEach((function(e,r){!j.isUndefined(e)&&null!==e&&t.append(!0===a?W([n],r,i):null===a?n:n+"[]",u(e))})),!1;return!!$(e)||(t.append(W(o,n,i),u(e)),!1)}const c=[],f=Object.assign(q,{defaultVisitor:l,convertValue:u,isVisitable:$});if(!j.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!j.isUndefined(n)){if(-1!==c.indexOf(n))throw Error("Circular reference detected in "+r.join("."));c.push(n),j.forEach(n,(function(n,i){!0===(!(j.isUndefined(n)||null===n)&&o.call(t,n,j.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),c.pop()}}(e),t};function Y(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function X(e,t){this._pairs=[],e&&G(e,this,t)}const K=X.prototype;K.append=function(e,t){this._pairs.push([e,t])},K.toString=function(e){const t=e?function(t){return e.call(this,t,Y)}:Y;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Z=X;function Q(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function J(e,t,n){if(!t)return e;const r=n&&n.encode||Q,o=n&&n.serialize;let i;if(i=o?o(t,n):j.isURLSearchParams(t)?t.toString():new Z(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}const ee=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){j.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},te={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ne={isBrowser:!0,classes:{URLSearchParams:"undefined"!==typeof URLSearchParams?URLSearchParams:Z,FormData:"undefined"!==typeof FormData?FormData:null,Blob:"undefined"!==typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},re="undefined"!==typeof window&&"undefined"!==typeof document,oe=(ie="undefined"!==typeof navigator&&navigator.product,re&&["ReactNative","NativeScript","NS"].indexOf(ie)<0);var ie;const ae="undefined"!==typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"===typeof self.importScripts,se={...r,...ne};const ue=function(e){function t(e,n,r,o){let i=e[o++];if("__proto__"===i)return!0;const a=Number.isFinite(+i),s=o>=e.length;if(i=!i&&j.isArray(r)?r.length:i,s)return j.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a;r[i]&&j.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&j.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r{t(function(e){return j.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null};const le={transitional:te,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=j.isObject(e);o&&j.isHTMLForm(e)&&(e=new FormData(e));if(j.isFormData(e))return r?JSON.stringify(ue(e)):e;if(j.isArrayBuffer(e)||j.isBuffer(e)||j.isStream(e)||j.isFile(e)||j.isBlob(e))return e;if(j.isArrayBufferView(e))return e.buffer;if(j.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return G(e,new se.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return se.isNode&&j.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=j.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return G(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(j.isString(e))try{return(t||JSON.parse)(e),j.trim(e)}catch(r){if("SyntaxError"!==r.name)throw r}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||le.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&j.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(o){if(n){if("SyntaxError"===o.name)throw V.from(o,V.ERR_BAD_RESPONSE,this,null,this.response);throw o}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:se.classes.FormData,Blob:se.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};j.forEach(["delete","get","head","post","put","patch"],(e=>{le.headers[e]={}}));const ce=le,fe=j.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),de=Symbol("internals");function he(e){return e&&String(e).trim().toLowerCase()}function pe(e){return!1===e||null==e?e:j.isArray(e)?e.map(pe):String(e)}function ge(e,t,n,r,o){return j.isFunction(r)?r.call(this,t,n):(o&&(t=n),j.isString(t)?j.isString(r)?-1!==t.indexOf(r):j.isRegExp(r)?r.test(t):void 0:void 0)}class ve{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=he(t);if(!o)throw new Error("header name must be a non-empty string");const i=j.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=pe(e))}const i=(e,t)=>j.forEach(e,((e,n)=>o(e,n,t)));return j.isPlainObject(e)||e instanceof this.constructor?i(e,t):j.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&fe[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t):null!=e&&o(t,e,n),this}get(e,t){if(e=he(e)){const n=j.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(j.isFunction(t))return t.call(this,e,n);if(j.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=he(e)){const n=j.findKey(this,e);return!(!n||void 0===this[n]||t&&!ge(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=he(e)){const o=j.findKey(n,e);!o||t&&!ge(0,n[o],o,t)||(delete n[o],r=!0)}}return j.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!ge(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return j.forEach(this,((r,o)=>{const i=j.findKey(n,o);if(i)return t[i]=pe(r),void delete t[o];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();a!==o&&delete t[o],t[a]=pe(r),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return j.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&j.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[de]=this[de]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=he(e);t[r]||(!function(e,t){const n=j.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return j.isArray(e)?e.forEach(r):r(e),this}}ve.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),j.reduceDescriptors(ve.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),j.freezeMethods(ve);const ye=ve;function me(e,t){const n=this||ce,r=t||n,o=ye.from(r.headers);let i=r.data;return j.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function be(e){return!(!e||!e.__CANCEL__)}function _e(e,t,n){V.call(this,null==e?"canceled":e,V.ERR_CANCELED,t,n),this.name="CanceledError"}j.inherits(_e,V,{__CANCEL__:!0});const we=_e;const xe=se.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const a=[e+"="+encodeURIComponent(t)];j.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),j.isString(r)&&a.push("path="+r),j.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Se(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ae=se.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=j.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};const Ee=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,a=0;return t=void 0!==t?t:1e3,function(s){const u=Date.now(),l=r[a];o||(o=u),n[i]=s,r[i]=u;let c=a,f=0;for(;c!==i;)f+=n[c++],c%=e;if(i=(i+1)%e,i===a&&(a=(a+1)%e),u-o{const i=o.loaded,a=o.lengthComputable?o.total:void 0,s=i-n,u=r(s);n=i;const l={loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&i<=a?(a-i)/u:void 0,event:o};l[t?"download":"upload"]=!0,e(l)}}const Re={http:null,xhr:"undefined"!==typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let r=e.data;const o=ye.from(e.headers).normalize();let i,a,{responseType:s,withXSRFToken:u}=e;function l(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}if(j.isFormData(r))if(se.hasStandardBrowserEnv||se.hasStandardBrowserWebWorkerEnv)o.setContentType(!1);else if(!1!==(a=o.getContentType())){const[e,...t]=a?a.split(";").map((e=>e.trim())).filter(Boolean):[];o.setContentType([e||"multipart/form-data",...t].join("; "))}let c=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(t+":"+n))}const f=Se(e.baseURL,e.url);function d(){if(!c)return;const r=ye.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders());!function(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new V("Request failed with status code "+n.status,[V.ERR_BAD_REQUEST,V.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),l()}),(function(e){n(e),l()}),{data:s&&"text"!==s&&"json"!==s?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:r,config:e,request:c}),c=null}if(c.open(e.method.toUpperCase(),J(f,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=d:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(d)},c.onabort=function(){c&&(n(new V("Request aborted",V.ECONNABORTED,e,c)),c=null)},c.onerror=function(){n(new V("Network Error",V.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const r=e.transitional||te;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new V(t,r.clarifyTimeoutError?V.ETIMEDOUT:V.ECONNABORTED,e,c)),c=null},se.hasStandardBrowserEnv&&(u&&j.isFunction(u)&&(u=u(e)),u||!1!==u&&Ae(f))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&xe.read(e.xsrfCookieName);t&&o.set(e.xsrfHeaderName,t)}void 0===r&&o.setContentType(null),"setRequestHeader"in c&&j.forEach(o.toJSON(),(function(e,t){c.setRequestHeader(t,e)})),j.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),s&&"json"!==s&&(c.responseType=e.responseType),"function"===typeof e.onDownloadProgress&&c.addEventListener("progress",Ce(e.onDownloadProgress,!0)),"function"===typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",Ce(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{c&&(n(!t||t.type?new we(null,e,c):t),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const h=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(f);h&&-1===se.protocols.indexOf(h)?n(new V("Unsupported protocol "+h+":",V.ERR_BAD_REQUEST,e)):c.send(r||null)}))}};j.forEach(Re,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(n){}Object.defineProperty(e,"adapterName",{value:t})}}));const Oe=e=>`- ${e}`,Te=e=>j.isFunction(e)||null===e||!1===e,ke=e=>{e=j.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));let n=t?e.length>1?"since :\n"+e.map(Oe).join("\n"):" "+Oe(e[0]):"as no adapter specified";throw new V("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return r};function Me(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new we(null,e)}function Pe(e){Me(e),e.headers=ye.from(e.headers),e.data=me.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return ke(e.adapter||ce.adapter)(e).then((function(t){return Me(e),t.data=me.call(e,e.transformResponse,t),t.headers=ye.from(t.headers),t}),(function(t){return be(t)||(Me(e),t&&t.response&&(t.response.data=me.call(e,e.transformResponse,t.response),t.response.headers=ye.from(t.response.headers))),Promise.reject(t)}))}const Ie=e=>e instanceof ye?{...e}:e;function Ne(e,t){t=t||{};const n={};function r(e,t,n){return j.isPlainObject(e)&&j.isPlainObject(t)?j.merge.call({caseless:n},e,t):j.isPlainObject(t)?j.merge({},t):j.isArray(t)?t.slice():t}function o(e,t,n){return j.isUndefined(t)?j.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!j.isUndefined(t))return r(void 0,t)}function a(e,t){return j.isUndefined(t)?j.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const u={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:(e,t)=>o(Ie(e),Ie(t),!0)};return j.forEach(Object.keys(Object.assign({},e,t)),(function(r){const i=u[r]||o,a=i(e[r],t[r],r);j.isUndefined(a)&&i!==s||(n[r]=a)})),n}const De="1.6.8",Le={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Le[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Fe={};Le.transitional=function(e,t,n){function r(e,t){return"[Axios v1.6.8] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,i)=>{if(!1===e)throw new V(r(o," has been removed"+(t?" in "+t:"")),V.ERR_DEPRECATED);return t&&!Fe[o]&&(Fe[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}};const je={assertOptions:function(e,t,n){if("object"!==typeof e)throw new V("options must be an object",V.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],a=t[i];if(a){const t=e[i],n=void 0===t||a(t,i,e);if(!0!==n)throw new V("option "+i+" must be "+n,V.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new V("Unknown option "+i,V.ERR_BAD_OPTION)}},validators:Le},Ue=je.validators;class ze{constructor(e){this.defaults=e,this.interceptors={request:new ee,response:new ee}}async request(e,t){try{return await this._request(e,t)}catch(n){if(n instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+="\n"+t):n.stack=t}throw n}}_request(e,t){"string"===typeof e?(t=t||{}).url=e:t=e||{},t=Ne(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&je.assertOptions(n,{silentJSONParsing:Ue.transitional(Ue.boolean),forcedJSONParsing:Ue.transitional(Ue.boolean),clarifyTimeoutError:Ue.transitional(Ue.boolean)},!1),null!=r&&(j.isFunction(r)?t.paramsSerializer={serialize:r}:je.assertOptions(r,{encode:Ue.function,serialize:Ue.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&j.merge(o.common,o[t.method]);o&&j.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=ye.concat(i,o);const a=[];let s=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const u=[];let l;this.interceptors.response.forEach((function(e){u.push(e.fulfilled,e.rejected)}));let c,f=0;if(!s){const e=[Pe.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,u),c=e.length,l=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new we(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Ve((function(t){e=t})),cancel:e}}}const $e=Ve;const He={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(He).forEach((([e,t])=>{He[t]=e}));const We=He;const qe=function e(t){const n=new Be(t),r=o(Be.prototype.request,n);return j.extend(r,Be.prototype,n,{allOwnKeys:!0}),j.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Ne(t,n))},r}(ce);qe.Axios=Be,qe.CanceledError=we,qe.CancelToken=$e,qe.isCancel=be,qe.VERSION=De,qe.toFormData=G,qe.AxiosError=V,qe.Cancel=qe.CanceledError,qe.all=function(e){return Promise.all(e)},qe.spread=function(e){return function(t){return e.apply(null,t)}},qe.isAxiosError=function(e){return j.isObject(e)&&!0===e.isAxiosError},qe.mergeConfig=Ne,qe.AxiosHeaders=ye,qe.formToJSON=e=>ue(j.isHTMLForm(e)?new FormData(e):e),qe.getAdapter=ke,qe.HttpStatusCode=We,qe.default=qe;const Ge=qe},12902:(e,t,n)=>{"use strict";function r(e,t){return null==e||null==t?NaN:et?1:e>=t?0:NaN}n.d(t,{A:()=>r})},52016:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>c,Jj:()=>s,WD:()=>l,ah:()=>u});var r=n(12902),o=n(86037),i=n(83131);const a=(0,o.A)(r.A),s=a.right,u=a.left,l=(0,o.A)(i.A).center,c=s},86037:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(12902),o=n(41180);function i(e){let t,n,i;function s(e,r,o=0,i=e.length){if(o>>1;n(e[t],r)<0?o=t+1:i=t}while(o(0,r.A)(e(t),n),i=(t,n)=>e(t)-n):(t=e===r.A||e===o.A?e:a,n=e,i=e),{left:s,center:function(e,t,n=0,r=e.length){const o=s(e,t,n,r-1);return o>n&&i(e[o-1],t)>-i(e[o],t)?o-1:o},right:function(e,r,o=0,i=e.length){if(o>>1;n(e[t],r)<=0?o=t+1:i=t}while(o{"use strict";function r(e,t){return null==e||null==t?NaN:te?1:t>=e?0:NaN}n.d(t,{A:()=>r})},36205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(12902);function o(e,t=r.A){let n,o=!1;if(1===t.length){let i;for(const a of e){const e=t(a);(o?(0,r.A)(e,i)>0:0===(0,r.A)(e,e))&&(n=a,i=e,o=!0)}}else for(const r of e)(o?t(r,n)>0:0===t(r,r))&&(n=r,o=!0);return n}},30846:(e,t,n)=>{"use strict";function r(e,t){let n;if(void 0===t)for(const r of e)null!=r&&(n=r)&&(n=r);else{let r=-1;for(let o of e)null!=(o=t(o,++r,e))&&(n=o)&&(n=o)}return n}n.d(t,{A:()=>r})},4504:(e,t,n)=>{"use strict";function r(e,t){let n,r=-1,o=-1;if(void 0===t)for(const i of e)++o,null!=i&&(n=i)&&(n=i,r=o);else for(let i of e)null!=(i=t(i,++o,e))&&(n=i)&&(n=i,r=o);return r}n.d(t,{A:()=>r})},49216:(e,t,n)=>{"use strict";function r(e,t){let n;if(void 0===t)for(const r of e)null!=r&&(n>r||void 0===n&&r>=r)&&(n=r);else{let r=-1;for(let o of e)null!=(o=t(o,++r,e))&&(n>o||void 0===n&&o>=o)&&(n=o)}return n}n.d(t,{A:()=>r})},98026:(e,t,n)=>{"use strict";function r(e,t){let n,r=-1,o=-1;if(void 0===t)for(const i of e)++o,null!=i&&(n>i||void 0===n&&i>=i)&&(n=i,r=o);else for(let i of e)null!=(i=t(i,++o,e))&&(n>i||void 0===n&&i>=i)&&(n=i,r=o);return r}n.d(t,{A:()=>r})},83131:(e,t,n)=>{"use strict";function r(e){return null===e?NaN:+e}function*o(e,t){if(void 0===t)for(let n of e)null!=n&&(n=+n)>=n&&(yield n);else{let n=-1;for(let r of e)null!=(r=t(r,++n,e))&&(r=+r)>=r&&(yield r)}}n.d(t,{A:()=>r,n:()=>o})},78314:(e,t,n)=>{"use strict";function r(e,t){return Array.from(t,(t=>e[t]))}n.d(t,{A:()=>r})},84855:(e,t,n)=>{"use strict";n.d(t,{AX:()=>h,Ay:()=>f,Z4:()=>d});var r=n(30846),o=n(4504),i=n(49216),a=n(98026),s=n(15671),u=n(83131),l=n(68886),c=n(36205);function f(e,t,n){if((o=(e=Float64Array.from((0,u.n)(e,n))).length)&&!isNaN(t=+t)){if(t<=0||o<2)return(0,i.A)(e);if(t>=1)return(0,r.A)(e);var o,a=(o-1)*t,l=Math.floor(a),c=(0,r.A)((0,s.A)(e,l).subarray(0,l+1));return c+((0,i.A)(e.subarray(l+1))-c)*(a-l)}}function d(e,t,n=u.A){if((r=e.length)&&!isNaN(t=+t)){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,o=(r-1)*t,i=Math.floor(o),a=+n(e[i],i,e);return a+(+n(e[i+1],i+1,e)-a)*(o-i)}}function h(e,t,n=u.A){if(!isNaN(t=+t)){if(r=Float64Array.from(e,((t,r)=>(0,u.A)(n(e[r],r,e)))),t<=0)return(0,a.A)(r);if(t>=1)return(0,o.A)(r);var r,i=Uint32Array.from(e,((e,t)=>t)),f=r.length-1,d=Math.floor(f*t);return(0,s.A)(i,d,0,f,((e,t)=>(0,l.o2)(r[e],r[t]))),(d=(0,c.A)(i.subarray(0,d+1),(e=>r[e])))>=0?d:-1}}},15671:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(68886);function o(e,t,n=0,a=1/0,s){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),a=Math.floor(Math.min(e.length-1,a)),!(n<=t&&t<=a))return e;for(s=void 0===s?r.o2:(0,r.JC)(s);a>n;){if(a-n>600){const r=a-n+1,i=t-n+1,u=Math.log(r),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(r-l)/r)*(i-r/2<0?-1:1);o(e,t,Math.max(n,Math.floor(t-i*l/r+c)),Math.min(a,Math.floor(t+(r-i)*l/r+c)),s)}const r=e[t];let u=n,l=a;for(i(e,n,t),s(e[a],r)>0&&i(e,n,a);u0;)--l}0===s(e[n],r)?i(e,n,l):(++l,i(e,l,a)),l<=t&&(n=l+1),t<=l&&(a=l-1)}return e}function i(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}},6561:(e,t,n)=>{"use strict";function r(e,t,n){e=+e,t=+t,n=(o=arguments.length)<2?(t=e,e=0,1):o<3?1:+n;for(var r=-1,o=0|Math.max(0,Math.ceil((t-e)/n)),i=new Array(o);++rr})},68886:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>i,JC:()=>a,o2:()=>s});var r=n(12902),o=n(78314);function i(e,...t){if("function"!==typeof e[Symbol.iterator])throw new TypeError("values is not iterable");e=Array.from(e);let[n]=t;if(n&&2!==n.length||t.length>1){const r=Uint32Array.from(e,((e,t)=>t));return t.length>1?(t=t.map((t=>e.map(t))),r.sort(((e,n)=>{for(const r of t){const t=s(r[e],r[n]);if(t)return t}}))):(n=e.map(n),r.sort(((e,t)=>s(n[e],n[t])))),(0,o.A)(e,r)}return e.sort(a(n))}function a(e=r.A){if(e===r.A)return s;if("function"!==typeof e)throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||0===r?r:(0===e(n,n))-(0===e(t,t))}}function s(e,t){return(null==e||!(e>=e))-(null==t||!(t>=t))||(et?1:0)}},6946:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,lq:()=>u,sG:()=>l});const r=Math.sqrt(50),o=Math.sqrt(10),i=Math.sqrt(2);function a(e,t,n){const s=(t-e)/Math.max(0,n),u=Math.floor(Math.log10(s)),l=s/Math.pow(10,u),c=l>=r?10:l>=o?5:l>=i?2:1;let f,d,h;return u<0?(h=Math.pow(10,-u)/c,f=Math.round(e*h),d=Math.round(t*h),f/ht&&--d,h=-h):(h=Math.pow(10,u)*c,f=Math.round(e/h),d=Math.round(t/h),f*ht&&--d),d0))return[];if((e=+e)===(t=+t))return[e];const r=t=o))return[];const u=i-o+1,l=new Array(u);if(r)if(s<0)for(let a=0;a{"use strict";n.d(t,{Ay:()=>_,Gw:()=>E,KI:()=>I,Q1:()=>o,Qh:()=>A,Uw:()=>a,b:()=>S,ef:()=>i});var r=n(40871);function o(){}var i=.7,a=1/i,s="\\s*([+-]?\\d+)\\s*",u="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",l="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",c=/^#([0-9a-f]{3,8})$/,f=new RegExp(`^rgb\\(${s},${s},${s}\\)$`),d=new RegExp(`^rgb\\(${l},${l},${l}\\)$`),h=new RegExp(`^rgba\\(${s},${s},${s},${u}\\)$`),p=new RegExp(`^rgba\\(${l},${l},${l},${u}\\)$`),g=new RegExp(`^hsl\\(${u},${l},${l}\\)$`),v=new RegExp(`^hsla\\(${u},${l},${l},${u}\\)$`),y={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function m(){return this.rgb().formatHex()}function b(){return this.rgb().formatRgb()}function _(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=c.exec(e))?(n=t[1].length,t=parseInt(t[1],16),6===n?w(t):3===n?new E(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===n?x(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===n?x(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=f.exec(e))?new E(t[1],t[2],t[3],1):(t=d.exec(e))?new E(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=h.exec(e))?x(t[1],t[2],t[3],t[4]):(t=p.exec(e))?x(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=g.exec(e))?M(t[1],t[2]/100,t[3]/100,1):(t=v.exec(e))?M(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?w(y[e]):"transparent"===e?new E(NaN,NaN,NaN,0):null}function w(e){return new E(e>>16&255,e>>8&255,255&e,1)}function x(e,t,n,r){return r<=0&&(e=t=n=NaN),new E(e,t,n,r)}function S(e){return e instanceof o||(e=_(e)),e?new E((e=e.rgb()).r,e.g,e.b,e.opacity):new E}function A(e,t,n,r){return 1===arguments.length?S(e):new E(e,t,n,null==r?1:r)}function E(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function C(){return`#${k(this.r)}${k(this.g)}${k(this.b)}`}function R(){const e=O(this.opacity);return`${1===e?"rgb(":"rgba("}${T(this.r)}, ${T(this.g)}, ${T(this.b)}${1===e?")":`, ${e})`}`}function O(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function T(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function k(e){return((e=T(e))<16?"0":"")+e.toString(16)}function M(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new N(e,t,n,r)}function P(e){if(e instanceof N)return new N(e.h,e.s,e.l,e.opacity);if(e instanceof o||(e=_(e)),!e)return new N;if(e instanceof N)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),s=NaN,u=a-i,l=(a+i)/2;return u?(s=t===a?(n-r)/u+6*(n0&&l<1?0:s,new N(s,u,l,e.opacity)}function I(e,t,n,r){return 1===arguments.length?P(e):new N(e,t,n,null==r?1:r)}function N(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function D(e){return(e=(e||0)%360)<0?e+360:e}function L(e){return Math.max(0,Math.min(1,e||0))}function F(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}(0,r.A)(o,_,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:m,formatHex:m,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return P(this).formatHsl()},formatRgb:b,toString:b}),(0,r.A)(E,A,(0,r.X)(o,{brighter(e){return e=null==e?a:Math.pow(a,e),new E(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=null==e?i:Math.pow(i,e),new E(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new E(T(this.r),T(this.g),T(this.b),O(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:C,formatHex:C,formatHex8:function(){return`#${k(this.r)}${k(this.g)}${k(this.b)}${k(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:R,toString:R})),(0,r.A)(N,I,(0,r.X)(o,{brighter(e){return e=null==e?a:Math.pow(a,e),new N(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=null==e?i:Math.pow(i,e),new N(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,o=2*n-r;return new E(F(e>=240?e-240:e+120,o,r),F(e,o,r),F(e<120?e+240:e-120,o,r),this.opacity)},clamp(){return new N(D(this.h),L(this.s),L(this.l),O(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=O(this.opacity);return`${1===e?"hsl(":"hsla("}${D(this.h)}, ${100*L(this.s)}%, ${100*L(this.l)}%${1===e?")":`, ${e})`}`}}))},40871:(e,t,n)=>{"use strict";function r(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function o(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}n.d(t,{A:()=>r,X:()=>o})},48701:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,GP:()=>o,s:()=>i});var r,o,i,a=n(56390);function s(e){return r=(0,a.A)(e),o=r.format,i=r.formatPrefix,r}s({thousands:",",grouping:[3],currency:["$",""]})},47235:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(95204);function o(e){return(e=(0,r.f)(Math.abs(e)))?e[1]:NaN}},95204:(e,t,n)=>{"use strict";function r(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function o(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}n.d(t,{A:()=>r,f:()=>o})},1631:(e,t,n)=>{"use strict";n.d(t,{A:()=>o,S:()=>i});var r=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function o(e){if(!(t=r.exec(e)))throw new Error("invalid format: "+e);var t;return new i({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function i(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}o.prototype=i.prototype,i.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type}},56390:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var r=n(47235);var o=n(1631);var i,a=n(95204);function s(e,t){var n=(0,a.f)(e,t);if(!n)return e+"";var r=n[0],o=n[1];return o<0?"0."+new Array(-o).join("0")+r:r.length>o+1?r.slice(0,o+1)+"."+r.slice(o+1):r+new Array(o-r.length+2).join("0")}const u={"%":(e,t)=>(100*e).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:a.A,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>s(100*e,t),r:s,s:function(e,t){var n=(0,a.f)(e,t);if(!n)return e+"";var r=n[0],o=n[1],s=o-(i=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,u=r.length;return s===u?r:s>u?r+new Array(s-u+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+(0,a.f)(e,Math.max(0,t+s-1))[0]},X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function l(e){return e}var c=Array.prototype.map,f=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function d(e){var t,n,a=void 0===e.grouping||void 0===e.thousands?l:(t=c.call(e.grouping,Number),n=e.thousands+"",function(e,r){for(var o=e.length,i=[],a=0,s=t[0],u=0;o>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),i.push(e.substring(o-=s,o+s)),!((u+=s+1)>r));)s=t[a=(a+1)%t.length];return i.reverse().join(n)}),s=void 0===e.currency?"":e.currency[0]+"",d=void 0===e.currency?"":e.currency[1]+"",h=void 0===e.decimal?".":e.decimal+"",p=void 0===e.numerals?l:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(c.call(e.numerals,String)),g=void 0===e.percent?"%":e.percent+"",v=void 0===e.minus?"\u2212":e.minus+"",y=void 0===e.nan?"NaN":e.nan+"";function m(e){var t=(e=(0,o.A)(e)).fill,n=e.align,r=e.sign,l=e.symbol,c=e.zero,m=e.width,b=e.comma,_=e.precision,w=e.trim,x=e.type;"n"===x?(b=!0,x="g"):u[x]||(void 0===_&&(_=12),w=!0,x="g"),(c||"0"===t&&"="===n)&&(c=!0,t="0",n="=");var S="$"===l?s:"#"===l&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",A="$"===l?d:/[%p]/.test(x)?g:"",E=u[x],C=/[defgprs%]/.test(x);function R(e){var o,s,u,l=S,d=A;if("c"===x)d=E(e)+d,e="";else{var g=(e=+e)<0||1/e<0;if(e=isNaN(e)?y:E(Math.abs(e),_),w&&(e=function(e){e:for(var t,n=e.length,r=1,o=-1;r0&&(o=0)}return o>0?e.slice(0,o)+e.slice(t+1):e}(e)),g&&0===+e&&"+"!==r&&(g=!1),l=(g?"("===r?r:v:"-"===r||"("===r?"":r)+l,d=("s"===x?f[8+i/3]:"")+d+(g&&"("===r?")":""),C)for(o=-1,s=e.length;++o(u=e.charCodeAt(o))||u>57){d=(46===u?h+e.slice(o+1):e.slice(o))+d,e=e.slice(0,o);break}}b&&!c&&(e=a(e,1/0));var R=l.length+e.length+d.length,O=R>1)+l+e+d+O.slice(R);break;default:e=O+l+e+d}return p(e)}return _=void 0===_?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,_)):Math.max(0,Math.min(20,_)),R.toString=function(){return e+""},R}return{format:m,formatPrefix:function(e,t){var n=m(((e=(0,o.A)(e)).type="f",e)),i=3*Math.max(-8,Math.min(8,Math.floor((0,r.A)(t)/3))),a=Math.pow(10,-i),s=f[8+i/3];return function(e){return n(a*e)+s}}}}},1734:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(47235);function o(e){return Math.max(0,-(0,r.A)(Math.abs(e)))}},67590:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(47235);function o(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor((0,r.A)(t)/3)))-(0,r.A)(Math.abs(e)))}},99460:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(47235);function o(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,(0,r.A)(t)-(0,r.A)(e))+1}},68079:(e,t,n)=>{"use strict";n.d(t,{$:()=>a,A:()=>i});var r=n(58503),o=n(10128);function i(e,t){return((0,o.p)(t)?o.A:a)(e,t)}function a(e,t){var n,o=t?t.length:0,i=e?Math.min(o,e.length):0,a=new Array(i),s=new Array(o);for(n=0;n{"use strict";function r(e,t,n,r,o){var i=e*e,a=i*e;return((1-3*e+3*i-a)*t+(4-6*i+3*a)*n+(1+3*e+3*i-3*a)*r+a*o)/6}function o(e){var t=e.length-1;return function(n){var o=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),i=e[o],a=e[o+1],s=o>0?e[o-1]:2*i-a,u=oo,H:()=>r})},19804:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(86160);function o(e){var t=e.length;return function(n){var o=Math.floor(((n%=1)<0?++n:n)*t),i=e[(o+t-1)%t],a=e[o%t],s=e[(o+1)%t],u=e[(o+2)%t];return(0,r.H)((n-o/t)*t,i,a,s,u)}}},84709:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,lG:()=>i,uN:()=>a});var r=n(3116);function o(e,t){return function(n){return e+n*t}}function i(e,t){var n=t-e;return n?o(e,n>180||n<-180?n-360*Math.round(n/360):n):(0,r.A)(isNaN(e)?t:e)}function a(e){return 1===(e=+e)?s:function(t,n){return n-t?function(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):(0,r.A)(isNaN(t)?n:t)}}function s(e,t){var n=t-e;return n?o(e,n):(0,r.A)(isNaN(e)?t:e)}},3116:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=e=>()=>e},58172:(e,t,n)=>{"use strict";function r(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}n.d(t,{A:()=>r})},8981:(e,t,n)=>{"use strict";function r(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}n.d(t,{A:()=>r})},10128:(e,t,n)=>{"use strict";function r(e,t){t||(t=[]);var n,r=e?Math.min(t.length,e.length):0,o=t.slice();return function(i){for(n=0;nr,p:()=>o})},34287:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(58503);function o(e,t){var n,o={},i={};for(n in null!==e&&"object"===typeof e||(e={}),null!==t&&"object"===typeof t||(t={}),t)n in e?o[n]=(0,r.A)(e[n],t[n]):i[n]=t[n];return function(e){for(n in o)i[n]=o[n](e);return i}}},23104:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(58503);function o(e,t){void 0===t&&(t=e,e=r.A);for(var n=0,o=t.length-1,i=t[0],a=new Array(o<0?0:o);n{"use strict";n.d(t,{Ay:()=>s,Ik:()=>l,uL:()=>c});var r=n(46957),o=n(86160),i=n(19804),a=n(84709);const s=function e(t){var n=(0,a.uN)(t);function o(e,t){var o=n((e=(0,r.Qh)(e)).r,(t=(0,r.Qh)(t)).r),i=n(e.g,t.g),s=n(e.b,t.b),u=(0,a.Ay)(e.opacity,t.opacity);return function(t){return e.r=o(t),e.g=i(t),e.b=s(t),e.opacity=u(t),e+""}}return o.gamma=e,o}(1);function u(e){return function(t){var n,o,i=t.length,a=new Array(i),s=new Array(i),u=new Array(i);for(n=0;n{"use strict";function r(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}n.d(t,{A:()=>r})},67737:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(8981),o=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,i=new RegExp(o.source,"g");function a(e,t){var n,a,s,u=o.lastIndex=i.lastIndex=0,l=-1,c=[],f=[];for(e+="",t+="";(n=o.exec(e))&&(a=i.exec(t));)(s=a.index)>u&&(s=t.slice(u,s),c[l]?c[l]+=s:c[++l]=s),(n=n[0])===(a=a[0])?c[l]?c[l]+=a:c[++l]=a:(c[++l]=null,f.push({i:l,x:(0,r.A)(n,a)})),u=i.lastIndex;return u{"use strict";n.d(t,{A:()=>d});var r=n(46957),o=n(21197),i=n(68079),a=n(58172),s=n(8981),u=n(34287),l=n(67737),c=n(3116),f=n(10128);function d(e,t){var n,d=typeof t;return null==t||"boolean"===d?(0,c.A)(t):("number"===d?s.A:"string"===d?(n=(0,r.Ay)(t))?(t=n,o.Ay):l.A:t instanceof r.Ay?o.Ay:t instanceof Date?a.A:(0,f.p)(t)?f.A:Array.isArray(t)?i.$:"function"!==typeof t.valueOf&&"function"!==typeof t.toString||isNaN(t)?u.A:s.A)(e,t)}},16199:(e,t,n)=>{"use strict";n.r(t),n.d(t,{scaleBand:()=>l,scaleDiverging:()=>Me,scaleDivergingLog:()=>Pe,scaleDivergingPow:()=>Ne,scaleDivergingSqrt:()=>De,scaleDivergingSymlog:()=>Ie,scaleIdentity:()=>N,scaleImplicit:()=>s,scaleLinear:()=>I,scaleLog:()=>$,scaleOrdinal:()=>u,scalePoint:()=>f,scalePow:()=>Q,scaleQuantile:()=>oe,scaleQuantize:()=>ie,scaleRadial:()=>te,scaleSequential:()=>Se,scaleSequentialLog:()=>Ae,scaleSequentialPow:()=>Ce,scaleSequentialQuantile:()=>Oe,scaleSequentialSqrt:()=>Re,scaleSequentialSymlog:()=>Ee,scaleSqrt:()=>J,scaleSymlog:()=>G,scaleThreshold:()=>ae,scaleTime:()=>be,scaleUtc:()=>_e,tickFormat:()=>M});var r=n(6561);function o(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e)}return this}function i(e,t){switch(arguments.length){case 0:break;case 1:"function"===typeof e?this.interpolator(e):this.range(e);break;default:this.domain(e),"function"===typeof t?this.interpolator(t):this.range(t)}return this}var a=n(24119);const s=Symbol("implicit");function u(){var e=new a.B,t=[],n=[],r=s;function i(o){let i=e.get(o);if(void 0===i){if(r!==s)return r;e.set(o,i=t.push(o)-1)}return n[i%n.length]}return i.domain=function(n){if(!arguments.length)return t.slice();t=[],e=new a.B;for(const r of n)e.has(r)||e.set(r,t.push(r)-1);return i},i.range=function(e){return arguments.length?(n=Array.from(e),i):n.slice()},i.unknown=function(e){return arguments.length?(r=e,i):r},i.copy=function(){return u(t,n).unknown(r)},o.apply(i,arguments),i}function l(){var e,t,n=u().unknown(void 0),i=n.domain,a=n.range,s=0,c=1,f=!1,d=0,h=0,p=.5;function g(){var n=i().length,o=ct&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}(a[0],a[e-1])),r=e>2?x:w,o=i=null,f}function f(t){return null==t||isNaN(t=+t)?n:(o||(o=r(a.map(e),s,u)))(e(l(t)))}return f.invert=function(n){return l(t((i||(i=r(s,a.map(e),g.A)))(n)))},f.domain=function(e){return arguments.length?(a=Array.from(e,y),c()):a.slice()},f.range=function(e){return arguments.length?(s=Array.from(e),c()):s.slice()},f.rangeRound=function(e){return s=Array.from(e),u=v.A,c()},f.clamp=function(e){return arguments.length?(l=!!e||b,c()):l!==b},f.interpolate=function(e){return arguments.length?(u=e,c()):u},f.unknown=function(e){return arguments.length?(n=e,f):n},function(n,r){return e=n,t=r,c()}}function E(){return A()(b,b)}var C=n(1631),R=n(67590),O=n(48701),T=n(99460),k=n(1734);function M(e,t,n,r){var o,i=(0,d.sG)(e,t,n);switch((r=(0,C.A)(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(e),Math.abs(t));return null!=r.precision||isNaN(o=(0,R.A)(i,a))||(r.precision=o),(0,O.s)(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(o=(0,T.A)(i,Math.max(Math.abs(e),Math.abs(t))))||(r.precision=o-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(o=(0,k.A)(i))||(r.precision=o-2*("%"===r.type))}return(0,O.GP)(r)}function P(e){var t=e.domain;return e.ticks=function(e){var n=t();return(0,d.Ay)(n[0],n[n.length-1],null==e?10:e)},e.tickFormat=function(e,n){var r=t();return M(r[0],r[r.length-1],null==e?10:e,n)},e.nice=function(n){null==n&&(n=10);var r,o,i=t(),a=0,s=i.length-1,u=i[a],l=i[s],c=10;for(l0;){if((o=(0,d.lq)(u,l,n))===r)return i[a]=u,i[s]=l,t(i);if(o>0)u=Math.floor(u/o)*o,l=Math.ceil(l/o)*o;else{if(!(o<0))break;u=Math.ceil(u*o)/o,l=Math.floor(l*o)/o}r=o}return e},e}function I(){var e=E();return e.copy=function(){return S(e,I())},o.apply(e,arguments),P(e)}function N(e){var t;function n(e){return null==e||isNaN(e=+e)?t:e}return n.invert=n,n.domain=n.range=function(t){return arguments.length?(e=Array.from(t,y),n):e.slice()},n.unknown=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return N(e).unknown(t)},e=arguments.length?Array.from(e,y):[0,1],P(n)}function D(e,t){var n,r=0,o=(e=e.slice()).length-1,i=e[r],a=e[o];return a-e(-t,n)}function V(e){const t=e(L,F),n=t.domain;let r,o,i=10;function a(){return r=function(e){return e===Math.E?Math.log:10===e&&Math.log10||2===e&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}(i),o=function(e){return 10===e?z:e===Math.E?Math.exp:t=>Math.pow(e,t)}(i),n()[0]<0?(r=B(r),o=B(o),e(j,U)):e(L,F),t}return t.base=function(e){return arguments.length?(i=+e,a()):i},t.domain=function(e){return arguments.length?(n(e),a()):n()},t.ticks=e=>{const t=n();let a=t[0],s=t[t.length-1];const u=s0){for(;f<=h;++f)for(l=1;ls)break;g.push(c)}}else for(;f<=h;++f)for(l=i-1;l>=1;--l)if(c=f>0?l/o(-f):l*o(f),!(cs)break;g.push(c)}2*g.length{if(null==e&&(e=10),null==n&&(n=10===i?"s":","),"function"!==typeof n&&(i%1||null!=(n=(0,C.A)(n)).precision||(n.trim=!0),n=(0,O.GP)(n)),e===1/0)return n;const a=Math.max(1,i*e/t.ticks().length);return e=>{let t=e/o(Math.round(r(e)));return t*in(D(n(),{floor:e=>o(Math.floor(r(e))),ceil:e=>o(Math.ceil(r(e)))})),t}function $(){const e=V(A()).domain([1,10]);return e.copy=()=>S(e,$()).base(e.base()),o.apply(e,arguments),e}function H(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function W(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function q(e){var t=1,n=e(H(t),W(t));return n.constant=function(n){return arguments.length?e(H(t=+n),W(t)):t},P(n)}function G(){var e=q(A());return e.copy=function(){return S(e,G()).constant(e.constant())},o.apply(e,arguments)}function Y(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function X(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function K(e){return e<0?-e*e:e*e}function Z(e){var t=e(b,b),n=1;return t.exponent=function(t){return arguments.length?1===(n=+t)?e(b,b):.5===n?e(X,K):e(Y(n),Y(1/n)):n},P(t)}function Q(){var e=Z(A());return e.copy=function(){return S(e,Q()).exponent(e.exponent())},o.apply(e,arguments),e}function J(){return Q.apply(null,arguments).exponent(.5)}function ee(e){return Math.sign(e)*e*e}function te(){var e,t=E(),n=[0,1],r=!1;function i(n){var o=function(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}(t(n));return isNaN(o)?e:r?Math.round(o):o}return i.invert=function(e){return t.invert(ee(e))},i.domain=function(e){return arguments.length?(t.domain(e),i):t.domain()},i.range=function(e){return arguments.length?(t.range((n=Array.from(e,y)).map(ee)),i):n.slice()},i.rangeRound=function(e){return i.range(e).round(!0)},i.round=function(e){return arguments.length?(r=!!e,i):r},i.clamp=function(e){return arguments.length?(t.clamp(e),i):t.clamp()},i.unknown=function(t){return arguments.length?(e=t,i):e},i.copy=function(){return te(t.domain(),n).round(r).clamp(t.clamp()).unknown(e)},o.apply(i,arguments),P(i)}var ne=n(84855),re=n(12902);function oe(){var e,t=[],n=[],r=[];function i(){var e=0,o=Math.max(1,n.length);for(r=new Array(o-1);++e0?r[o-1]:t[0],o=r?[i[r-1],n]:[i[o-1],i[o]]},s.unknown=function(t){return arguments.length?(e=t,s):s},s.thresholds=function(){return i.slice()},s.copy=function(){return ie().domain([t,n]).range(a).unknown(e)},o.apply(P(s),arguments)}function ae(){var e,t=[.5],n=[0,1],r=1;function i(o){return null!=o&&o<=o?n[(0,h.Ay)(t,o,0,r)]:e}return i.domain=function(e){return arguments.length?(t=Array.from(e),r=Math.min(t.length,n.length-1),i):t.slice()},i.range=function(e){return arguments.length?(n=Array.from(e),r=Math.min(t.length,n.length-1),i):n.slice()},i.invertExtent=function(e){var r=n.indexOf(e);return[t[r-1],t[r]]},i.unknown=function(t){return arguments.length?(e=t,i):e},i.copy=function(){return ae().domain(t).range(n).unknown(e)},o.apply(i,arguments)}var se=n(526),ue=n(24355),le=n(75878),ce=n(78926),fe=n(55334),de=n(54612),he=n(13298),pe=n(55030),ge=n(53705);function ve(e){return new Date(e)}function ye(e){return e instanceof Date?+e:+new Date(+e)}function me(e,t,n,r,o,i,a,s,u,l){var c=E(),f=c.invert,d=c.domain,h=l(".%L"),p=l(":%S"),g=l("%I:%M"),v=l("%I %p"),y=l("%a %d"),m=l("%b %d"),b=l("%B"),_=l("%Y");function w(e){return(u(e)t(r/(e.length-1))))},n.quantiles=function(t){return Array.from({length:t+1},((n,r)=>(0,ne.Ay)(e,r/t)))},n.copy=function(){return Oe(t).domain(e)},i.apply(n,arguments)}var Te=n(23104);function ke(){var e,t,n,r,o,i,a,s=0,u=.5,l=1,c=1,f=b,d=!1;function h(e){return isNaN(e=+e)?a:(e=.5+((e=+i(e))-t)*(c*e{"use strict";n.d(t,{Ay:()=>l,DC:()=>o,GY:()=>s,T6:()=>i,aL:()=>a});var r,o,i,a,s,u=n(64398);function l(e){return r=(0,u.A)(e),o=r.format,i=r.parse,a=r.utcFormat,s=r.utcParse,r}l({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]})},64398:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});var r=n(78926),o=n(55334),i=n(24355);function a(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function s(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function u(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function l(e){var t=e.dateTime,n=e.date,i=e.time,l=e.periods,f=e.days,d=e.shortDays,h=e.months,p=e.shortMonths,g=v(l),X=y(l),ge=v(f),Re=y(f),Oe=v(d),Te=y(d),ke=v(h),Me=y(h),Pe=v(p),Ie=y(p),Ne={a:function(e){return d[e.getDay()]},A:function(e){return f[e.getDay()]},b:function(e){return p[e.getMonth()]},B:function(e){return h[e.getMonth()]},c:null,d:j,e:j,f:$,g:ee,G:ne,H:U,I:z,j:B,L:V,m:H,M:W,p:function(e){return l[+(e.getHours()>=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:Ee,s:Ce,S:q,u:G,U:Y,V:K,w:Z,W:Q,x:null,X:null,y:J,Y:te,Z:re,"%":Ae},De={a:function(e){return d[e.getUTCDay()]},A:function(e){return f[e.getUTCDay()]},b:function(e){return p[e.getUTCMonth()]},B:function(e){return h[e.getUTCMonth()]},c:null,d:oe,e:oe,f:le,g:_e,G:xe,H:ie,I:ae,j:se,L:ue,m:ce,M:fe,p:function(e){return l[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:Ee,s:Ce,S:de,u:he,U:pe,V:ve,w:ye,W:me,x:null,X:null,y:be,Y:we,Z:Se,"%":Ae},Le={a:function(e,t,n){var r=Oe.exec(t.slice(n));return r?(e.w=Te.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(e,t,n){var r=ge.exec(t.slice(n));return r?(e.w=Re.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(e,t,n){var r=Pe.exec(t.slice(n));return r?(e.m=Ie.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(e,t,n){var r=ke.exec(t.slice(n));return r?(e.m=Me.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(e,n,r){return Ue(e,t,n,r)},d:O,e:O,f:N,g:A,G:S,H:k,I:k,j:T,L:I,m:R,M:M,p:function(e,t,n){var r=g.exec(t.slice(n));return r?(e.p=X.get(r[0].toLowerCase()),n+r[0].length):-1},q:C,Q:L,s:F,S:P,u:b,U:_,V:w,w:m,W:x,x:function(e,t,r){return Ue(e,n,t,r)},X:function(e,t,n){return Ue(e,i,t,n)},y:A,Y:S,Z:E,"%":D};function Fe(e,t){return function(n){var r,o,i,a=[],s=-1,u=0,l=e.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in c||(c.w=1),"Z"in c?(l=(i=s(u(c.y,0,1))).getUTCDay(),i=l>4||0===l?r.rt.ceil(i):(0,r.rt)(i),i=o.dA.offset(i,7*(c.V-1)),c.y=i.getUTCFullYear(),c.m=i.getUTCMonth(),c.d=i.getUTCDate()+(c.w+6)%7):(l=(i=a(u(c.y,0,1))).getDay(),i=l>4||0===l?r.AB.ceil(i):(0,r.AB)(i),i=o.UA.offset(i,7*(c.V-1)),c.y=i.getFullYear(),c.m=i.getMonth(),c.d=i.getDate()+(c.w+6)%7)}else("W"in c||"U"in c)&&("w"in c||(c.w="u"in c?c.u%7:"W"in c?1:0),l="Z"in c?s(u(c.y,0,1)).getUTCDay():a(u(c.y,0,1)).getDay(),c.m=0,c.d="W"in c?(c.w+6)%7+7*c.W-(l+5)%7:c.w+7*c.U-(l+6)%7);return"Z"in c?(c.H+=c.Z/100|0,c.M+=c.Z%100,s(c)):a(c)}}function Ue(e,t,n,r){for(var o,i,a=0,s=t.length,u=n.length;a=u)return-1;if(37===(o=t.charCodeAt(a++))){if(o=t.charAt(a++),!(i=Le[o in c?t.charAt(a++):o])||(r=i(e,n,r))<0)return-1}else if(o!=n.charCodeAt(r++))return-1}return r}return Ne.x=Fe(n,Ne),Ne.X=Fe(i,Ne),Ne.c=Fe(t,Ne),De.x=Fe(n,De),De.X=Fe(i,De),De.c=Fe(t,De),{format:function(e){var t=Fe(e+="",Ne);return t.toString=function(){return e},t},parse:function(e){var t=je(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=Fe(e+="",De);return t.toString=function(){return e},t},utcParse:function(e){var t=je(e+="",!0);return t.toString=function(){return e},t}}}var c={"-":"",_:" ",0:"0"},f=/^\s*\d+/,d=/^%/,h=/[\\^$*+?|[\]().{}]/g;function p(e,t,n){var r=e<0?"-":"",o=(r?-e:e)+"",i=o.length;return r+(i[e.toLowerCase(),t])))}function m(e,t,n){var r=f.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function b(e,t,n){var r=f.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function _(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function w(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function x(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function S(e,t,n){var r=f.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function A(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function E(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function C(e,t,n){var r=f.exec(t.slice(n,n+1));return r?(e.q=3*r[0]-3,n+r[0].length):-1}function R(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function O(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function T(e,t,n){var r=f.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function k(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function M(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function P(e,t,n){var r=f.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function I(e,t,n){var r=f.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function N(e,t,n){var r=f.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function D(e,t,n){var r=d.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function L(e,t,n){var r=f.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function F(e,t,n){var r=f.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function j(e,t){return p(e.getDate(),t,2)}function U(e,t){return p(e.getHours(),t,2)}function z(e,t){return p(e.getHours()%12||12,t,2)}function B(e,t){return p(1+o.UA.count((0,i.he)(e),e),t,3)}function V(e,t){return p(e.getMilliseconds(),t,3)}function $(e,t){return V(e,t)+"000"}function H(e,t){return p(e.getMonth()+1,t,2)}function W(e,t){return p(e.getMinutes(),t,2)}function q(e,t){return p(e.getSeconds(),t,2)}function G(e){var t=e.getDay();return 0===t?7:t}function Y(e,t){return p(r.YP.count((0,i.he)(e)-1,e),t,2)}function X(e){var t=e.getDay();return t>=4||0===t?(0,r.Mo)(e):r.Mo.ceil(e)}function K(e,t){return e=X(e),p(r.Mo.count((0,i.he)(e),e)+(4===(0,i.he)(e).getDay()),t,2)}function Z(e){return e.getDay()}function Q(e,t){return p(r.AB.count((0,i.he)(e)-1,e),t,2)}function J(e,t){return p(e.getFullYear()%100,t,2)}function ee(e,t){return p((e=X(e)).getFullYear()%100,t,2)}function te(e,t){return p(e.getFullYear()%1e4,t,4)}function ne(e,t){var n=e.getDay();return p((e=n>=4||0===n?(0,r.Mo)(e):r.Mo.ceil(e)).getFullYear()%1e4,t,4)}function re(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+p(t/60|0,"0",2)+p(t%60,"0",2)}function oe(e,t){return p(e.getUTCDate(),t,2)}function ie(e,t){return p(e.getUTCHours(),t,2)}function ae(e,t){return p(e.getUTCHours()%12||12,t,2)}function se(e,t){return p(1+o.dA.count((0,i.Mb)(e),e),t,3)}function ue(e,t){return p(e.getUTCMilliseconds(),t,3)}function le(e,t){return ue(e,t)+"000"}function ce(e,t){return p(e.getUTCMonth()+1,t,2)}function fe(e,t){return p(e.getUTCMinutes(),t,2)}function de(e,t){return p(e.getUTCSeconds(),t,2)}function he(e){var t=e.getUTCDay();return 0===t?7:t}function pe(e,t){return p(r.Hl.count((0,i.Mb)(e)-1,e),t,2)}function ge(e){var t=e.getUTCDay();return t>=4||0===t?(0,r.pT)(e):r.pT.ceil(e)}function ve(e,t){return e=ge(e),p(r.pT.count((0,i.Mb)(e),e)+(4===(0,i.Mb)(e).getUTCDay()),t,2)}function ye(e){return e.getUTCDay()}function me(e,t){return p(r.rt.count((0,i.Mb)(e)-1,e),t,2)}function be(e,t){return p(e.getUTCFullYear()%100,t,2)}function _e(e,t){return p((e=ge(e)).getUTCFullYear()%100,t,2)}function we(e,t){return p(e.getUTCFullYear()%1e4,t,4)}function xe(e,t){var n=e.getUTCDay();return p((e=n>=4||0===n?(0,r.pT)(e):r.pT.ceil(e)).getUTCFullYear()%1e4,t,4)}function Se(){return"+0000"}function Ae(){return"%"}function Ee(e){return+e}function Ce(e){return Math.floor(+e/1e3)}},55334:(e,t,n)=>{"use strict";n.d(t,{NT:()=>a,TW:()=>l,UA:()=>i,dA:()=>s,ou:()=>u,yE:()=>c});var r=n(37591),o=n(81134);const i=(0,r.f)((e=>e.setHours(0,0,0,0)),((e,t)=>e.setDate(e.getDate()+t)),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o.rR)/o.Nm),(e=>e.getDate()-1)),a=i.range,s=(0,r.f)((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/o.Nm),(e=>e.getUTCDate()-1)),u=s.range,l=(0,r.f)((e=>{e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+t)}),((e,t)=>(t-e)/o.Nm),(e=>Math.floor(e/o.Nm))),c=l.range},81134:(e,t,n)=>{"use strict";n.d(t,{Fq:()=>s,JJ:()=>i,MP:()=>l,Nm:()=>a,Pv:()=>u,Tt:()=>r,rR:()=>o});const r=1e3,o=60*r,i=60*o,a=24*i,s=7*a,u=30*a,l=365*a},54612:(e,t,n)=>{"use strict";n.d(t,{Ag:()=>i,L6:()=>a,iA:()=>u,pz:()=>s});var r=n(37591),o=n(81134);const i=(0,r.f)((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*o.Tt-e.getMinutes()*o.rR)}),((e,t)=>{e.setTime(+e+t*o.JJ)}),((e,t)=>(t-e)/o.JJ),(e=>e.getHours())),a=i.range,s=(0,r.f)((e=>{e.setUTCMinutes(0,0,0)}),((e,t)=>{e.setTime(+e+t*o.JJ)}),((e,t)=>(t-e)/o.JJ),(e=>e.getUTCHours())),u=s.range},37591:(e,t,n)=>{"use strict";n.d(t,{f:()=>i});const r=new Date,o=new Date;function i(e,t,n,a){function s(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return s.floor=t=>(e(t=new Date(+t)),t),s.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),s.round=e=>{const t=s(e),n=s.ceil(e);return e-t(t(e=new Date(+e),null==n?1:Math.floor(n)),e),s.range=(n,r,o)=>{const i=[];if(n=s.ceil(n),o=null==o?1:Math.floor(o),!(n0))return i;let a;do{i.push(a=new Date(+n)),t(n,o),e(n)}while(ai((t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)}),((e,r)=>{if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););})),n&&(s.count=(t,i)=>(r.setTime(+t),o.setTime(+i),e(r),e(o),Math.floor(n(r,o))),s.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?s.filter(a?t=>a(t)%e===0:t=>s.count(0,t)%e===0):s:null)),s}},32613:(e,t,n)=>{"use strict";n.d(t,{R:()=>i,y:()=>o});var r=n(37591);const o=(0,r.f)((()=>{}),((e,t)=>{e.setTime(+e+t)}),((e,t)=>t-e));o.every=e=>(e=Math.floor(e),isFinite(e)&&e>0?e>1?(0,r.f)((t=>{t.setTime(Math.floor(t/e)*e)}),((t,n)=>{t.setTime(+t+n*e)}),((t,n)=>(n-t)/e)):o:null);const i=o.range},13298:(e,t,n)=>{"use strict";n.d(t,{Y4:()=>u,rn:()=>a,vD:()=>s,wX:()=>i});var r=n(37591),o=n(81134);const i=(0,r.f)((e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*o.Tt)}),((e,t)=>{e.setTime(+e+t*o.rR)}),((e,t)=>(t-e)/o.rR),(e=>e.getMinutes())),a=i.range,s=(0,r.f)((e=>{e.setUTCSeconds(0,0)}),((e,t)=>{e.setTime(+e+t*o.rR)}),((e,t)=>(t-e)/o.rR),(e=>e.getUTCMinutes())),u=s.range},75878:(e,t,n)=>{"use strict";n.d(t,{Bz:()=>i,R6:()=>a,Ui:()=>o,oi:()=>s});var r=n(37591);const o=(0,r.f)((e=>{e.setDate(1),e.setHours(0,0,0,0)}),((e,t)=>{e.setMonth(e.getMonth()+t)}),((e,t)=>t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())),(e=>e.getMonth())),i=o.range,a=(0,r.f)((e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)}),((e,t)=>t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())),(e=>e.getUTCMonth())),s=a.range},55030:(e,t,n)=>{"use strict";n.d(t,{R:()=>i,Y:()=>a});var r=n(37591),o=n(81134);const i=(0,r.f)((e=>{e.setTime(e-e.getMilliseconds())}),((e,t)=>{e.setTime(+e+t*o.Tt)}),((e,t)=>(t-e)/o.Tt),(e=>e.getUTCSeconds())),a=i.range},526:(e,t,n)=>{"use strict";n.d(t,{$Z:()=>g,Cf:()=>y,lk:()=>v,yE:()=>m});var r=n(86037),o=n(6946),i=n(81134),a=n(32613),s=n(55030),u=n(13298),l=n(54612),c=n(55334),f=n(78926),d=n(75878),h=n(24355);function p(e,t,n,u,l,c){const f=[[s.R,1,i.Tt],[s.R,5,5*i.Tt],[s.R,15,15*i.Tt],[s.R,30,30*i.Tt],[c,1,i.rR],[c,5,5*i.rR],[c,15,15*i.rR],[c,30,30*i.rR],[l,1,i.JJ],[l,3,3*i.JJ],[l,6,6*i.JJ],[l,12,12*i.JJ],[u,1,i.Nm],[u,2,2*i.Nm],[n,1,i.Fq],[t,1,i.Pv],[t,3,3*i.Pv],[e,1,i.MP]];function d(t,n,s){const u=Math.abs(n-t)/s,l=(0,r.A)((([,,e])=>e)).right(f,u);if(l===f.length)return e.every((0,o.sG)(t/i.MP,n/i.MP,s));if(0===l)return a.y.every(Math.max((0,o.sG)(t,n,s),1));const[c,d]=f[u/f[l-1][2]{"use strict";n.d(t,{AB:()=>s,Dr:()=>v,G6:()=>M,Gu:()=>l,HU:()=>y,Hl:()=>w,Mo:()=>c,OK:()=>g,ON:()=>T,PG:()=>u,SQ:()=>m,TU:()=>f,Xo:()=>N,YP:()=>a,Zn:()=>I,_M:()=>b,a1:()=>C,aZ:()=>O,c8:()=>R,h8:()=>p,jN:()=>k,pT:()=>E,rG:()=>d,rt:()=>x,sr:()=>S,vD:()=>h,wr:()=>P,z2:()=>A});var r=n(37591),o=n(81134);function i(e){return(0,r.f)((t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),((e,t)=>{e.setDate(e.getDate()+7*t)}),((e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o.rR)/o.Fq))}const a=i(0),s=i(1),u=i(2),l=i(3),c=i(4),f=i(5),d=i(6),h=a.range,p=s.range,g=u.range,v=l.range,y=c.range,m=f.range,b=d.range;function _(e){return(0,r.f)((t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCDate(e.getUTCDate()+7*t)}),((e,t)=>(t-e)/o.Fq))}const w=_(0),x=_(1),S=_(2),A=_(3),E=_(4),C=_(5),R=_(6),O=w.range,T=x.range,k=S.range,M=A.range,P=E.range,I=C.range,N=R.range},24355:(e,t,n)=>{"use strict";n.d(t,{Mb:()=>a,Yo:()=>i,he:()=>o,jH:()=>s});var r=n(37591);const o=(0,r.f)((e=>{e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,t)=>{e.setFullYear(e.getFullYear()+t)}),((e,t)=>t.getFullYear()-e.getFullYear()),(e=>e.getFullYear()));o.every=e=>isFinite(e=Math.floor(e))&&e>0?(0,r.f)((t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,n)=>{t.setFullYear(t.getFullYear()+n*e)})):null;const i=o.range,a=(0,r.f)((e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)}),((e,t)=>t.getUTCFullYear()-e.getUTCFullYear()),(e=>e.getUTCFullYear()));a.every=e=>isFinite(e=Math.floor(e))&&e>0?(0,r.f)((t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)})):null;const s=a.range},19018:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Adder:()=>S,Delaunay:()=>Ia,FormatSpecifier:()=>Xu.S,InternMap:()=>C.B,InternSet:()=>C.v,Node:()=>cp,Path:()=>Wo,Voronoi:()=>Ra,ZoomTransform:()=>B_,active:()=>Xr,arc:()=>hm,area:()=>wm,areaRadial:()=>km,ascending:()=>o.A,autoType:()=>hs,axisBottom:()=>Ze,axisLeft:()=>Qe,axisRight:()=>Ke,axisTop:()=>Xe,bin:()=>G,bisect:()=>r.Ay,bisectCenter:()=>r.WD,bisectLeft:()=>r.ah,bisectRight:()=>r.Jj,bisector:()=>i.A,blob:()=>nu,blur:()=>a,blur2:()=>s,blurImage:()=>u,brush:()=>Eo,brushSelection:()=>xo,brushX:()=>So,brushY:()=>Ao,buffer:()=>ou,chord:()=>Lo,chordDirected:()=>jo,chordTranspose:()=>Fo,cluster:()=>rp,color:()=>_r.Ay,contourDensity:()=>ta,contours:()=>Gi,count:()=>h,create:()=>By,creator:()=>on,cross:()=>y,csv:()=>lu,csvFormat:()=>es,csvFormatBody:()=>ts,csvFormatRow:()=>rs,csvFormatRows:()=>ns,csvFormatValue:()=>os,csvParse:()=>Qa,csvParseRows:()=>Ja,cubehelix:()=>Fi,cumsum:()=>m,curveBasis:()=>_b,curveBasisClosed:()=>xb,curveBasisOpen:()=>Ab,curveBumpX:()=>Nm,curveBumpY:()=>Dm,curveBundle:()=>Cb,curveCardinal:()=>Tb,curveCardinalClosed:()=>Mb,curveCardinalOpen:()=>Ib,curveCatmullRom:()=>Lb,curveCatmullRomClosed:()=>jb,curveCatmullRomOpen:()=>zb,curveLinear:()=>ym,curveLinearClosed:()=>Vb,curveMonotoneX:()=>Kb,curveMonotoneY:()=>Zb,curveNatural:()=>e_,curveStep:()=>n_,curveStepAfter:()=>o_,curveStepBefore:()=>r_,descending:()=>b.A,deviation:()=>w,difference:()=>Te,disjoint:()=>ke,dispatch:()=>ot,drag:()=>za,dragDisable:()=>An,dragEnable:()=>En,dsv:()=>uu,dsvFormat:()=>Ka,easeBack:()=>Ks,easeBackIn:()=>Ys,easeBackInOut:()=>Ks,easeBackOut:()=>Xs,easeBounce:()=>Ws,easeBounceIn:()=>Hs,easeBounceInOut:()=>qs,easeBounceOut:()=>Ws,easeCircle:()=>Is,easeCircleIn:()=>Ms,easeCircleInOut:()=>Is,easeCircleOut:()=>Ps,easeCubic:()=>Wr,easeCubicIn:()=>$r,easeCubicInOut:()=>Wr,easeCubicOut:()=>Hr,easeElastic:()=>Js,easeElasticIn:()=>Qs,easeElasticInOut:()=>eu,easeElasticOut:()=>Js,easeExp:()=>ks,easeExpIn:()=>Os,easeExpInOut:()=>ks,easeExpOut:()=>Ts,easeLinear:()=>gs,easePoly:()=>ws,easePolyIn:()=>bs,easePolyInOut:()=>ws,easePolyOut:()=>_s,easeQuad:()=>ms,easeQuadIn:()=>vs,easeQuadInOut:()=>ms,easeQuadOut:()=>ys,easeSin:()=>Cs,easeSinIn:()=>As,easeSinInOut:()=>Cs,easeSinOut:()=>Es,every:()=>Se,extent:()=>x,fcumsum:()=>E,filter:()=>Ee,flatGroup:()=>M,flatRollup:()=>P,forceCenter:()=>mu,forceCollide:()=>Mu,forceLink:()=>Nu,forceManyBody:()=>$u,forceRadial:()=>Hu,forceSimulation:()=>Vu,forceX:()=>Wu,forceY:()=>qu,format:()=>Gu.GP,formatDefaultLocale:()=>Gu.Ay,formatLocale:()=>Yu.A,formatPrefix:()=>Gu.s,formatSpecifier:()=>Xu.A,fsum:()=>A,geoAlbers:()=>mh,geoAlbersUsa:()=>bh,geoArea:()=>Jl,geoAzimuthalEqualArea:()=>Sh,geoAzimuthalEqualAreaRaw:()=>xh,geoAzimuthalEquidistant:()=>Eh,geoAzimuthalEquidistantRaw:()=>Ah,geoBounds:()=>Nc,geoCentroid:()=>qc,geoCircle:()=>rf,geoClipAntimeridian:()=>gf,geoClipCircle:()=>vf,geoClipExtent:()=>Af,geoClipRectangle:()=>Sf,geoConicConformal:()=>Mh,geoConicConformalRaw:()=>kh,geoConicEqualArea:()=>yh,geoConicEqualAreaRaw:()=>vh,geoConicEquidistant:()=>Dh,geoConicEquidistantRaw:()=>Nh,geoContains:()=>Bf,geoDistance:()=>Pf,geoEqualEarth:()=>Vh,geoEqualEarthRaw:()=>Bh,geoEquirectangular:()=>Ih,geoEquirectangularRaw:()=>Ph,geoGnomonic:()=>Hh,geoGnomonicRaw:()=>$h,geoGraticule:()=>Hf,geoGraticule10:()=>Wf,geoIdentity:()=>Wh,geoInterpolate:()=>qf,geoLength:()=>Tf,geoMercator:()=>Rh,geoMercatorRaw:()=>Ch,geoNaturalEarth1:()=>Gh,geoNaturalEarth1Raw:()=>qh,geoOrthographic:()=>Xh,geoOrthographicRaw:()=>Yh,geoPath:()=>Jd,geoProjection:()=>hh,geoProjectionMutator:()=>ph,geoRotation:()=>ef,geoStereographic:()=>Zh,geoStereographicRaw:()=>Kh,geoStream:()=>Tl,geoTransform:()=>eh,geoTransverseMercator:()=>Jh,geoTransverseMercatorRaw:()=>Qh,gray:()=>yi,greatest:()=>pe.A,greatestIndex:()=>ge,group:()=>O,groupSort:()=>z,groups:()=>T,hcl:()=>Ci,hierarchy:()=>ip,histogram:()=>G,hsl:()=>_r.KI,html:()=>vu,image:()=>fu,index:()=>D,indexes:()=>L,interpolate:()=>Cn.A,interpolateArray:()=>fg.A,interpolateBasis:()=>dg.A,interpolateBasisClosed:()=>hg.A,interpolateBlues:()=>py,interpolateBrBG:()=>Cv,interpolateBuGn:()=>Hv,interpolateBuPu:()=>qv,interpolateCividis:()=>Ey,interpolateCool:()=>Oy,interpolateCubehelix:()=>Mg,interpolateCubehelixDefault:()=>Cy,interpolateCubehelixLong:()=>Pg,interpolateDate:()=>pg.A,interpolateDiscrete:()=>gg,interpolateGnBu:()=>Yv,interpolateGreens:()=>vy,interpolateGreys:()=>my,interpolateHcl:()=>Og,interpolateHclLong:()=>Tg,interpolateHsl:()=>Ag,interpolateHslLong:()=>Eg,interpolateHue:()=>yg,interpolateInferno:()=>Uy,interpolateLab:()=>Cg,interpolateMagma:()=>jy,interpolateNumber:()=>cr.A,interpolateNumberArray:()=>mg.A,interpolateObject:()=>bg.A,interpolateOrRd:()=>Kv,interpolateOranges:()=>Ay,interpolatePRGn:()=>Ov,interpolatePiYG:()=>kv,interpolatePlasma:()=>zy,interpolatePuBu:()=>ey,interpolatePuBuGn:()=>Qv,interpolatePuOr:()=>Pv,interpolatePuRd:()=>ny,interpolatePurples:()=>_y,interpolateRainbow:()=>ky,interpolateRdBu:()=>Nv,interpolateRdGy:()=>Lv,interpolateRdPu:()=>oy,interpolateRdYlBu:()=>jv,interpolateRdYlGn:()=>zv,interpolateReds:()=>xy,interpolateRgb:()=>wr.Ay,interpolateRgbBasis:()=>wr.Ik,interpolateRgbBasisClosed:()=>wr.uL,interpolateRound:()=>_g.A,interpolateSinebow:()=>Ny,interpolateSpectral:()=>Vv,interpolateString:()=>xr.A,interpolateTransformCss:()=>gr,interpolateTransformSvg:()=>vr,interpolateTurbo:()=>Dy,interpolateViridis:()=>Fy,interpolateWarm:()=>Ry,interpolateYlGn:()=>uy,interpolateYlGnBu:()=>ay,interpolateYlOrBr:()=>cy,interpolateYlOrRd:()=>dy,interpolateZoom:()=>xg,interrupt:()=>ur,intersection:()=>Me,interval:()=>j_,isoFormat:()=>D_,isoParse:()=>F_,json:()=>hu,lab:()=>mi,lch:()=>Ei,least:()=>de,leastIndex:()=>he,line:()=>_m,lineRadial:()=>Tm,link:()=>Um,linkHorizontal:()=>zm,linkRadial:()=>Vm,linkVertical:()=>Bm,local:()=>$y,map:()=>Ce,matcher:()=>ct,max:()=>Z.A,maxIndex:()=>Q.A,mean:()=>J,median:()=>ee,medianIndex:()=>te,merge:()=>ne,min:()=>re.A,minIndex:()=>oe.A,mode:()=>ie,namespace:()=>Et,namespaces:()=>At,nice:()=>W,now:()=>zn,pack:()=>Dp,packEnclose:()=>bp,packSiblings:()=>Ip,pairs:()=>ae,partition:()=>Bp,path:()=>qo,pathRound:()=>Go,permute:()=>ue.A,pie:()=>Am,piecewise:()=>Ig.A,pointRadial:()=>Mm,pointer:()=>On,pointers:()=>Wy,polygonArea:()=>Dg,polygonCentroid:()=>Lg,polygonContains:()=>Bg,polygonHull:()=>zg,polygonLength:()=>Vg,precisionFixed:()=>Ku.A,precisionPrefix:()=>Zu.A,precisionRound:()=>Qu.A,quadtree:()=>Su,quantile:()=>Y.Ay,quantileIndex:()=>Y.AX,quantileSorted:()=>Y.Z4,quantize:()=>Ng,quickselect:()=>le.A,radialArea:()=>km,radialLine:()=>Tm,randomBates:()=>Xg,randomBernoulli:()=>Qg,randomBeta:()=>tv,randomBinomial:()=>nv,randomCauchy:()=>ov,randomExponential:()=>Kg,randomGamma:()=>ev,randomGeometric:()=>Jg,randomInt:()=>Wg,randomIrwinHall:()=>Yg,randomLcg:()=>cv,randomLogNormal:()=>Gg,randomLogistic:()=>iv,randomNormal:()=>qg,randomPareto:()=>Zg,randomPoisson:()=>av,randomUniform:()=>Hg,randomWeibull:()=>rv,range:()=>ce.A,rank:()=>fe,reduce:()=>Re,reverse:()=>Oe,rgb:()=>_r.Qh,ribbon:()=>oi,ribbonArrow:()=>ii,rollup:()=>I,rollups:()=>N,scaleBand:()=>fv.scaleBand,scaleDiverging:()=>fv.scaleDiverging,scaleDivergingLog:()=>fv.scaleDivergingLog,scaleDivergingPow:()=>fv.scaleDivergingPow,scaleDivergingSqrt:()=>fv.scaleDivergingSqrt,scaleDivergingSymlog:()=>fv.scaleDivergingSymlog,scaleIdentity:()=>fv.scaleIdentity,scaleImplicit:()=>fv.scaleImplicit,scaleLinear:()=>fv.scaleLinear,scaleLog:()=>fv.scaleLog,scaleOrdinal:()=>fv.scaleOrdinal,scalePoint:()=>fv.scalePoint,scalePow:()=>fv.scalePow,scaleQuantile:()=>fv.scaleQuantile,scaleQuantize:()=>fv.scaleQuantize,scaleRadial:()=>fv.scaleRadial,scaleSequential:()=>fv.scaleSequential,scaleSequentialLog:()=>fv.scaleSequentialLog,scaleSequentialPow:()=>fv.scaleSequentialPow,scaleSequentialQuantile:()=>fv.scaleSequentialQuantile,scaleSequentialSqrt:()=>fv.scaleSequentialSqrt,scaleSequentialSymlog:()=>fv.scaleSequentialSymlog,scaleSqrt:()=>fv.scaleSqrt,scaleSymlog:()=>fv.scaleSymlog,scaleThreshold:()=>fv.scaleThreshold,scaleTime:()=>fv.scaleTime,scaleUtc:()=>fv.scaleUtc,scan:()=>ve,schemeAccent:()=>pv,schemeBlues:()=>hy,schemeBrBG:()=>Ev,schemeBuGn:()=>$v,schemeBuPu:()=>Wv,schemeCategory10:()=>hv,schemeDark2:()=>gv,schemeGnBu:()=>Gv,schemeGreens:()=>gy,schemeGreys:()=>yy,schemeObservable10:()=>vv,schemeOrRd:()=>Xv,schemeOranges:()=>Sy,schemePRGn:()=>Rv,schemePaired:()=>yv,schemePastel1:()=>mv,schemePastel2:()=>bv,schemePiYG:()=>Tv,schemePuBu:()=>Jv,schemePuBuGn:()=>Zv,schemePuOr:()=>Mv,schemePuRd:()=>ty,schemePurples:()=>by,schemeRdBu:()=>Iv,schemeRdGy:()=>Dv,schemeRdPu:()=>ry,schemeRdYlBu:()=>Fv,schemeRdYlGn:()=>Uv,schemeReds:()=>wy,schemeSet1:()=>_v,schemeSet2:()=>wv,schemeSet3:()=>xv,schemeSpectral:()=>Bv,schemeTableau10:()=>Sv,schemeYlGn:()=>sy,schemeYlGnBu:()=>iy,schemeYlOrBr:()=>ly,schemeYlOrRd:()=>fy,select:()=>bn,selectAll:()=>qy,selection:()=>mn,selector:()=>at,selectorAll:()=>lt,shuffle:()=>ye,shuffler:()=>me,some:()=>Ae,sort:()=>U.Ay,stack:()=>l_,stackOffsetDiverging:()=>f_,stackOffsetExpand:()=>c_,stackOffsetNone:()=>i_,stackOffsetSilhouette:()=>d_,stackOffsetWiggle:()=>h_,stackOrderAppearance:()=>p_,stackOrderAscending:()=>v_,stackOrderDescending:()=>m_,stackOrderInsideOut:()=>b_,stackOrderNone:()=>a_,stackOrderReverse:()=>__,stratify:()=>Gp,style:()=>Lt,subset:()=>De,sum:()=>be,superset:()=>Ie,svg:()=>yu,symbol:()=>vb,symbolAsterisk:()=>Hm,symbolCircle:()=>Wm,symbolCross:()=>qm,symbolDiamond:()=>Xm,symbolDiamond2:()=>Km,symbolPlus:()=>Zm,symbolSquare:()=>Qm,symbolSquare2:()=>Jm,symbolStar:()=>rb,symbolTimes:()=>hb,symbolTriangle:()=>ib,symbolTriangle2:()=>sb,symbolWye:()=>db,symbolX:()=>hb,symbols:()=>pb,symbolsFill:()=>pb,symbolsStroke:()=>gb,text:()=>au,thresholdFreedmanDiaconis:()=>X,thresholdScott:()=>K,thresholdSturges:()=>q,tickFormat:()=>fv.tickFormat,tickIncrement:()=>H.lq,tickStep:()=>H.sG,ticks:()=>H.Ay,timeDay:()=>C_.UA,timeDays:()=>C_.NT,timeFormat:()=>M_.DC,timeFormatDefaultLocale:()=>M_.Ay,timeFormatLocale:()=>P_.A,timeFriday:()=>R_.TU,timeFridays:()=>R_.SQ,timeHour:()=>E_.Ag,timeHours:()=>E_.L6,timeInterval:()=>w_.f,timeMillisecond:()=>x_.y,timeMilliseconds:()=>x_.R,timeMinute:()=>A_.wX,timeMinutes:()=>A_.rn,timeMonday:()=>R_.AB,timeMondays:()=>R_.h8,timeMonth:()=>O_.Ui,timeMonths:()=>O_.Bz,timeParse:()=>M_.T6,timeSaturday:()=>R_.rG,timeSaturdays:()=>R_._M,timeSecond:()=>S_.R,timeSeconds:()=>S_.Y,timeSunday:()=>R_.YP,timeSundays:()=>R_.vD,timeThursday:()=>R_.Mo,timeThursdays:()=>R_.HU,timeTickInterval:()=>k_.yE,timeTicks:()=>k_.Cf,timeTuesday:()=>R_.PG,timeTuesdays:()=>R_.OK,timeWednesday:()=>R_.Gu,timeWednesdays:()=>R_.Dr,timeWeek:()=>R_.YP,timeWeeks:()=>R_.vD,timeYear:()=>T_.he,timeYears:()=>T_.Yo,timeout:()=>Yn,timer:()=>$n,timerFlush:()=>Hn,transition:()=>zr,transpose:()=>_e,tree:()=>ng,treemap:()=>sg,treemapBinary:()=>ug,treemapDice:()=>zp,treemapResquarify:()=>cg,treemapSlice:()=>rg,treemapSliceDice:()=>lg,treemapSquarify:()=>ag,tsv:()=>cu,tsvFormat:()=>us,tsvFormatBody:()=>ls,tsvFormatRow:()=>fs,tsvFormatRows:()=>cs,tsvFormatValue:()=>ds,tsvParse:()=>as,tsvParseRows:()=>ss,union:()=>Le,unixDay:()=>C_.TW,unixDays:()=>C_.yE,utcDay:()=>C_.dA,utcDays:()=>C_.ou,utcFormat:()=>M_.aL,utcFriday:()=>R_.a1,utcFridays:()=>R_.Zn,utcHour:()=>E_.pz,utcHours:()=>E_.iA,utcMillisecond:()=>x_.y,utcMilliseconds:()=>x_.R,utcMinute:()=>A_.vD,utcMinutes:()=>A_.Y4,utcMonday:()=>R_.rt,utcMondays:()=>R_.ON,utcMonth:()=>O_.R6,utcMonths:()=>O_.oi,utcParse:()=>M_.GY,utcSaturday:()=>R_.c8,utcSaturdays:()=>R_.Xo,utcSecond:()=>S_.R,utcSeconds:()=>S_.Y,utcSunday:()=>R_.Hl,utcSundays:()=>R_.aZ,utcThursday:()=>R_.pT,utcThursdays:()=>R_.wr,utcTickInterval:()=>k_.lk,utcTicks:()=>k_.$Z,utcTuesday:()=>R_.sr,utcTuesdays:()=>R_.jN,utcWednesday:()=>R_.z2,utcWednesdays:()=>R_.G6,utcWeek:()=>R_.Hl,utcWeeks:()=>R_.aZ,utcYear:()=>T_.Mb,utcYears:()=>T_.jH,variance:()=>_,window:()=>Pt,xml:()=>gu,zip:()=>xe,zoom:()=>Q_,zoomIdentity:()=>V_,zoomTransform:()=>$_});var r=n(52016),o=n(12902),i=n(86037);function a(e,t){if(!((t=+t)>=0))throw new RangeError("invalid r");let n=e.length;if(!((n=Math.floor(n))>=0))throw new RangeError("invalid length");if(!n||!t)return e;const r=d(t),o=e.slice();return r(e,o,0,n,1),r(o,e,0,n,1),r(e,o,0,n,1),e}const s=l(d),u=l((function(e){const t=d(e);return(e,n,r,o,i)=>{t(e,n,(r<<=2)+0,(o<<=2)+0,i<<=2),t(e,n,r+1,o+1,i),t(e,n,r+2,o+2,i),t(e,n,r+3,o+3,i)}}));function l(e){return function(t,n,r=n){if(!((n=+n)>=0))throw new RangeError("invalid rx");if(!((r=+r)>=0))throw new RangeError("invalid ry");let{data:o,width:i,height:a}=t;if(!((i=Math.floor(i))>=0))throw new RangeError("invalid width");if(!((a=Math.floor(void 0!==a?a:o.length/i))>=0))throw new RangeError("invalid height");if(!i||!a||!n&&!r)return t;const s=n&&e(n),u=r&&e(r),l=o.slice();return s&&u?(c(s,l,o,i,a),c(s,o,l,i,a),c(s,l,o,i,a),f(u,o,l,i,a),f(u,l,o,i,a),f(u,o,l,i,a)):s?(c(s,o,l,i,a),c(s,l,o,i,a),c(s,o,l,i,a)):u&&(f(u,o,l,i,a),f(u,l,o,i,a),f(u,o,l,i,a)),t}}function c(e,t,n,r,o){for(let i=0,a=r*o;i{if(!((i-=a)>=o))return;let s=e*r[o];const u=a*e;for(let e=o,t=o+u;e{if(!((a-=s)>=i))return;let u=t*o[i];const l=s*t,c=l+s;for(let t=i,n=i+l;t=r&&++n;else{let r=-1;for(let o of e)null!=(o=t(o,++r,e))&&(o=+o)>=o&&++n}return n}function p(e){return 0|e.length}function g(e){return!(e>0)}function v(e){return"object"!==typeof e||"length"in e?e:Array.from(e)}function y(...e){const t="function"===typeof e[e.length-1]&&function(e){return t=>e(...t)}(e.pop()),n=(e=e.map(v)).map(p),r=e.length-1,o=new Array(r+1).fill(0),i=[];if(r<0||n.some(g))return i;for(;;){i.push(o.map(((t,n)=>e[n][t])));let a=r;for(;++o[a]===n[a];){if(0===a)return t?i.map(t):i;o[a--]=0}}}function m(e,t){var n=0,r=0;return Float64Array.from(e,void 0===t?e=>n+=+e||0:o=>n+=+t(o,r++,e)||0)}var b=n(41180);function _(e,t){let n,r=0,o=0,i=0;if(void 0===t)for(let a of e)null!=a&&(a=+a)>=a&&(n=a-o,o+=n/++r,i+=n*(a-o));else{let a=-1;for(let s of e)null!=(s=t(s,++a,e))&&(s=+s)>=s&&(n=s-o,o+=n/++r,i+=n*(s-o))}if(r>1)return i/(r-1)}function w(e,t){const n=_(e,t);return n?Math.sqrt(n):n}function x(e,t){let n,r;if(void 0===t)for(const o of e)null!=o&&(void 0===n?o>=o&&(n=r=o):(n>o&&(n=o),r=i&&(n=r=i):(n>i&&(n=i),r0){for(i=e[--o];o>0&&(t=i,n=e[--o],i=t+n,r=n-(i-t),!r););o>0&&(r<0&&e[o-1]<0||r>0&&e[o-1]>0)&&(n=2*r,t=i+n,n==t-i&&(i=t))}return i}}function A(e,t){const n=new S;if(void 0===t)for(let r of e)(r=+r)&&n.add(r);else{let r=-1;for(let o of e)(o=+t(o,++r,e))&&n.add(o)}return+n}function E(e,t){const n=new S;let r=-1;return Float64Array.from(e,void 0===t?e=>n.add(+e||0):o=>n.add(+t(o,++r,e)||0))}var C=n(24119);function R(e){return e}function O(e,...t){return j(e,R,R,t)}function T(e,...t){return j(e,Array.from,R,t)}function k(e,t){for(let n=1,r=t.length;ne.pop().map((([t,n])=>[...e,t,n]))));return e}function M(e,...t){return k(T(e,...t),t)}function P(e,t,...n){return k(N(e,t,...n),n)}function I(e,t,...n){return j(e,R,t,n)}function N(e,t,...n){return j(e,Array.from,t,n)}function D(e,...t){return j(e,R,F,t)}function L(e,...t){return j(e,Array.from,F,t)}function F(e){if(1!==e.length)throw new Error("duplicate key");return e[0]}function j(e,t,n,r){return function e(o,i){if(i>=r.length)return n(o);const a=new C.B,s=r[i++];let u=-1;for(const t of o){const e=s(t,++u,o),n=a.get(e);n?n.push(t):a.set(e,[t])}for(const[t,n]of a)a.set(t,e(n,i));return t(a)}(e,0)}var U=n(68886);function z(e,t,n){return(2!==t.length?(0,U.Ay)(I(e,t,n),(([e,t],[n,r])=>(0,o.A)(t,r)||(0,o.A)(e,n))):(0,U.Ay)(O(e,n),(([e,n],[r,i])=>t(n,i)||(0,o.A)(e,r)))).map((([e])=>e))}var B=Array.prototype,V=B.slice;B.map;function $(e){return()=>e}var H=n(6946);function W(e,t,n){let r;for(;;){const o=(0,H.lq)(e,t,n);if(o===r||0===o||!isFinite(o))return[e,t];o>0?(e=Math.floor(e/o)*o,t=Math.ceil(t/o)*o):o<0&&(e=Math.ceil(e*o)/o,t=Math.floor(t*o)/o),r=o}}function q(e){return Math.max(1,Math.ceil(Math.log(h(e))/Math.LN2)+1)}function G(){var e=R,t=x,n=q;function o(o){Array.isArray(o)||(o=Array.from(o));var i,a,s,u=o.length,l=new Array(u);for(i=0;i=d)if(e>=d&&t===x){const e=(0,H.lq)(f,d,n);isFinite(e)&&(e>0?d=(Math.floor(d/e)+1)*e:e<0&&(d=(Math.ceil(d*-e)+1)/-e))}else h.pop()}for(var p=h.length,g=0,v=p;h[g]<=f;)++g;for(;h[v-1]>d;)--v;(g||v0?h[i-1]:f,y.x1=i0)for(i=0;i=o&&(++n,r+=o);else{let o=-1;for(let i of e)null!=(i=t(i,++o,e))&&(i=+i)>=i&&(++n,r+=i)}if(n)return r/n}function ee(e,t){return(0,Y.Ay)(e,.5,t)}function te(e,t){return(0,Y.AX)(e,.5,t)}function ne(e){return Array.from(function*(e){for(const t of e)yield*t}(e))}var re=n(49216),oe=n(98026);function ie(e,t){const n=new C.B;if(void 0===t)for(let i of e)null!=i&&i>=i&&n.set(i,(n.get(i)||0)+1);else{let r=-1;for(let o of e)null!=(o=t(o,++r,e))&&o>=o&&n.set(o,(n.get(o)||0)+1)}let r,o=0;for(const[i,a]of n)a>o&&(o=a,r=i);return r}function ae(e,t=se){const n=[];let r,o=!1;for(const i of e)o&&n.push(t(r,i)),r=i,o=!0;return n}function se(e,t){return[e,t]}var ue=n(78314),le=n(15671),ce=n(6561);function fe(e,t=o.A){if("function"!==typeof e[Symbol.iterator])throw new TypeError("values is not iterable");let n=Array.from(e);const r=new Float64Array(n.length);2!==t.length&&(n=n.map(t),t=o.A);const i=(e,r)=>t(n[e],n[r]);let a,s;return(e=Uint32Array.from(n,((e,t)=>t))).sort(t===o.A?(e,t)=>(0,U.o2)(n[e],n[t]):(0,U.JC)(i)),e.forEach(((e,t)=>{const n=i(e,void 0===a?e:a);n>=0?((void 0===a||n>0)&&(a=e,s=t),r[e]=s):r[e]=NaN})),r}function de(e,t=o.A){let n,r=!1;if(1===t.length){let i;for(const a of e){const e=t(a);(r?(0,o.A)(e,i)<0:0===(0,o.A)(e,e))&&(n=a,i=e,r=!0)}}else for(const o of e)(r?t(o,n)<0:0===t(o,o))&&(n=o,r=!0);return n}function he(e,t=o.A){if(1===t.length)return(0,oe.A)(e,t);let n,r=-1,i=-1;for(const o of e)++i,(r<0?0===t(o,o):t(o,n)<0)&&(n=o,r=i);return r}var pe=n(36205);function ge(e,t=o.A){if(1===t.length)return(0,Q.A)(e,t);let n,r=-1,i=-1;for(const o of e)++i,(r<0?0===t(o,o):t(o,n)>0)&&(n=o,r=i);return r}function ve(e,t){const n=he(e,t);return n<0?void 0:n}const ye=me(Math.random);function me(e){return function(t,n=0,r=t.length){let o=r-(n=+n);for(;o;){const r=e()*o--|0,i=t[o+n];t[o+n]=t[r+n],t[r+n]=i}return t}}function be(e,t){let n=0;if(void 0===t)for(let r of e)(r=+r)&&(n+=r);else{let r=-1;for(let o of e)(o=+t(o,++r,e))&&(n+=o)}return n}function _e(e){if(!(o=e.length))return[];for(var t=-1,n=(0,re.A)(e,we),r=new Array(n);++tt(n,r,e)))}function Re(e,t,n){if("function"!==typeof t)throw new TypeError("reducer is not a function");const r=e[Symbol.iterator]();let o,i,a=-1;if(arguments.length<3){if(({done:o,value:n}=r.next()),o)return;++a}for(;({done:o,value:i}=r.next()),!o;)n=t(n,i,++a,e);return n}function Oe(e){if("function"!==typeof e[Symbol.iterator])throw new TypeError("values is not iterable");return Array.from(e).reverse()}function Te(e,...t){e=new C.v(e);for(const n of t)for(const t of n)e.delete(t);return e}function ke(e,t){const n=t[Symbol.iterator](),r=new C.v;for(const o of e){if(r.has(o))return!1;let e,t;for(;({value:e,done:t}=n.next())&&!t;){if(Object.is(o,e))return!1;r.add(e)}}return!0}function Me(e,...t){e=new C.v(e),t=t.map(Pe);e:for(const n of e)for(const r of t)if(!r.has(n)){e.delete(n);continue e}return e}function Pe(e){return e instanceof C.v?e:new C.v(e)}function Ie(e,t){const n=e[Symbol.iterator](),r=new Set;for(const o of t){const e=Ne(o);if(r.has(e))continue;let t,i;for(;({value:t,done:i}=n.next());){if(i)return!1;const n=Ne(t);if(r.add(n),Object.is(e,n))break}}return!0}function Ne(e){return null!==e&&"object"===typeof e?e.valueOf():e}function De(e,t){return Ie(t,e)}function Le(...e){const t=new C.v;for(const n of e)for(const e of n)t.add(e);return t}function Fe(e){return e}var je=1,Ue=2,ze=3,Be=4,Ve=1e-6;function $e(e){return"translate("+e+",0)"}function He(e){return"translate(0,"+e+")"}function We(e){return t=>+e(t)}function qe(e,t){return t=Math.max(0,e.bandwidth()-2*t)/2,e.round()&&(t=Math.round(t)),n=>+e(n)+t}function Ge(){return!this.__axis}function Ye(e,t){var n=[],r=null,o=null,i=6,a=6,s=3,u="undefined"!==typeof window&&window.devicePixelRatio>1?0:.5,l=e===je||e===Be?-1:1,c=e===Be||e===Ue?"x":"y",f=e===je||e===ze?$e:He;function d(d){var h=null==r?t.ticks?t.ticks.apply(t,n):t.domain():r,p=null==o?t.tickFormat?t.tickFormat.apply(t,n):Fe:o,g=Math.max(i,0)+s,v=t.range(),y=+v[0]+u,m=+v[v.length-1]+u,b=(t.bandwidth?qe:We)(t.copy(),u),_=d.selection?d.selection():d,w=_.selectAll(".domain").data([null]),x=_.selectAll(".tick").data(h,t).order(),S=x.exit(),A=x.enter().append("g").attr("class","tick"),E=x.select("line"),C=x.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),x=x.merge(A),E=E.merge(A.append("line").attr("stroke","currentColor").attr(c+"2",l*i)),C=C.merge(A.append("text").attr("fill","currentColor").attr(c,l*g).attr("dy",e===je?"0em":e===ze?"0.71em":"0.32em")),d!==_&&(w=w.transition(d),x=x.transition(d),E=E.transition(d),C=C.transition(d),S=S.transition(d).attr("opacity",Ve).attr("transform",(function(e){return isFinite(e=b(e))?f(e+u):this.getAttribute("transform")})),A.attr("opacity",Ve).attr("transform",(function(e){var t=this.parentNode.__axis;return f((t&&isFinite(t=t(e))?t:b(e))+u)}))),S.remove(),w.attr("d",e===Be||e===Ue?a?"M"+l*a+","+y+"H"+u+"V"+m+"H"+l*a:"M"+u+","+y+"V"+m:a?"M"+y+","+l*a+"V"+u+"H"+m+"V"+l*a:"M"+y+","+u+"H"+m),x.attr("opacity",1).attr("transform",(function(e){return f(b(e)+u)})),E.attr(c+"2",l*i),C.attr(c,l*g).text(p),_.filter(Ge).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===Ue?"start":e===Be?"end":"middle"),_.each((function(){this.__axis=b}))}return d.scale=function(e){return arguments.length?(t=e,d):t},d.ticks=function(){return n=Array.from(arguments),d},d.tickArguments=function(e){return arguments.length?(n=null==e?[]:Array.from(e),d):n.slice()},d.tickValues=function(e){return arguments.length?(r=null==e?null:Array.from(e),d):r&&r.slice()},d.tickFormat=function(e){return arguments.length?(o=e,d):o},d.tickSize=function(e){return arguments.length?(i=a=+e,d):i},d.tickSizeInner=function(e){return arguments.length?(i=+e,d):i},d.tickSizeOuter=function(e){return arguments.length?(a=+e,d):a},d.tickPadding=function(e){return arguments.length?(s=+e,d):s},d.offset=function(e){return arguments.length?(u=+e,d):u},d}function Xe(e){return Ye(je,e)}function Ke(e){return Ye(Ue,e)}function Ze(e){return Ye(ze,e)}function Qe(e){return Ye(Be,e)}var Je={value:()=>{}};function et(){for(var e,t=0,n=arguments.length,r={};t=0&&(t=e.slice(n+1),e=e.slice(0,n)),e&&!r.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:t}}))),a=-1,s=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!==typeof t)throw new Error("invalid callback: "+t);for(;++a0)for(var n,r,o=new Array(n),i=0;it?1:e>=t?0:NaN}yt.prototype={constructor:yt,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};var St="http://www.w3.org/1999/xhtml";const At={svg:"http://www.w3.org/2000/svg",xhtml:St,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Et(e){var t=e+="",n=t.indexOf(":");return n>=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),At.hasOwnProperty(t)?{space:At[t],local:e}:e}function Ct(e){return function(){this.removeAttribute(e)}}function Rt(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Ot(e,t){return function(){this.setAttribute(e,t)}}function Tt(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function kt(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttribute(e):this.setAttribute(e,n)}}function Mt(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function Pt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function It(e){return function(){this.style.removeProperty(e)}}function Nt(e,t,n){return function(){this.style.setProperty(e,t,n)}}function Dt(e,t,n){return function(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function Lt(e,t){return e.style.getPropertyValue(t)||Pt(e).getComputedStyle(e,null).getPropertyValue(t)}function Ft(e){return function(){delete this[e]}}function jt(e,t){return function(){this[e]=t}}function Ut(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}function zt(e){return e.trim().split(/^|\s+/)}function Bt(e){return e.classList||new Vt(e)}function Vt(e){this._node=e,this._names=zt(e.getAttribute("class")||"")}function $t(e,t){for(var n=Bt(e),r=-1,o=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};var gn=[null];function vn(e,t){this._groups=e,this._parents=t}function yn(){return new vn([[document.documentElement]],gn)}vn.prototype=yn.prototype={constructor:vn,select:function(e){"function"!==typeof e&&(e=at(e));for(var t=this._groups,n=t.length,r=new Array(n),o=0;o=_&&(_=b+1);!(m=v[_])&&++_=0;)(r=o[i])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(e){function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=xt);for(var n=this._groups,r=n.length,o=new Array(r),i=0;i1?this.each((null==t?It:"function"===typeof t?Dt:Nt)(e,t,null==n?"":n)):Lt(this.node(),e)},property:function(e,t){return arguments.length>1?this.each((null==t?Ft:"function"===typeof t?Ut:jt)(e,t)):this.node()[e]},classed:function(e,t){var n=zt(e+"");if(arguments.length<2){for(var r=Bt(this.node()),o=-1,i=n.length;++o=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}}))}(e+""),a=i.length;if(!(arguments.length<2)){for(s=t?fn:cn,r=0;r=0&&t._call.call(void 0,e),t=t._next;--Mn}function Wn(){Ln=(Dn=jn.now())+Fn,Mn=Pn=0;try{Hn()}finally{Mn=0,function(){var e,t,n=Tn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:Tn=t);kn=e,Gn(r)}(),Ln=0}}function qn(){var e=jn.now(),t=e-Dn;t>Nn&&(Fn-=t,Dn=e)}function Gn(e){Mn||(Pn&&(Pn=clearTimeout(Pn)),e-Ln>24?(e<1/0&&(Pn=setTimeout(Wn,e-jn.now()-Fn)),In&&(In=clearInterval(In))):(In||(Dn=jn.now(),In=setInterval(qn,Nn)),Mn=1,Un(Wn)))}function Yn(e,t,n){var r=new Vn;return t=null==t?0:+t,r.restart((n=>{r.stop(),e(n+t)}),t,n),r}Vn.prototype=$n.prototype={constructor:Vn,restart:function(e,t,n){if("function"!==typeof e)throw new TypeError("callback is not a function");n=(null==n?zn():+n)+(null==t?0:+t),this._next||kn===this||(kn?kn._next=this:Tn=this,kn=this),this._call=e,this._time=n,Gn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Gn())}};var Xn=ot("start","end","cancel","interrupt"),Kn=[],Zn=0,Qn=1,Jn=2,er=3,tr=4,nr=5,rr=6;function or(e,t,n,r,o,i){var a=e.__transition;if(a){if(n in a)return}else e.__transition={};!function(e,t,n){var r,o=e.__transition;function i(e){n.state=Qn,n.timer.restart(a,n.delay,n.time),n.delay<=e&&a(e-n.delay)}function a(i){var l,c,f,d;if(n.state!==Qn)return u();for(l in o)if((d=o[l]).name===n.name){if(d.state===er)return Yn(a);d.state===tr?(d.state=rr,d.timer.stop(),d.on.call("interrupt",e,e.__data__,d.index,d.group),delete o[l]):+lZn)throw new Error("too late; already scheduled");return n}function ar(e,t){var n=sr(e,t);if(n.state>er)throw new Error("too late; already running");return n}function sr(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function ur(e,t){var n,r,o,i=e.__transition,a=!0;if(i){for(o in t=null==t?null:t+"",i)(n=i[o]).name===t?(r=n.state>Jn&&n.state180?t+=360:t-e>180&&(e+=360),i.push({i:n.push(o(n)+"rotate(",null,r)-2,x:(0,cr.A)(e,t)})):t&&n.push(o(n)+"rotate("+t+r)}(i.rotate,a.rotate,s,u),function(e,t,n,i){e!==t?i.push({i:n.push(o(n)+"skewX(",null,r)-2,x:(0,cr.A)(e,t)}):t&&n.push(o(n)+"skewX("+t+r)}(i.skewX,a.skewX,s,u),function(e,t,n,r,i,a){if(e!==n||t!==r){var s=i.push(o(i)+"scale(",null,",",null,")");a.push({i:s-4,x:(0,cr.A)(e,n)},{i:s-2,x:(0,cr.A)(t,r)})}else 1===n&&1===r||i.push(o(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,a.scaleX,a.scaleY,s,u),i=a=null,function(e){for(var t,n=-1,r=u.length;++n=0&&(e=e.slice(0,t)),!e||"start"===e}))}(t)?ir:ar;return function(){var a=i(this,e),s=a.on;s!==r&&(o=(r=s).copy()).on(t,n),a.on=o}}(n,e,t))},attr:function(e,t){var n=Et(e),r="transform"===n?vr:Sr;return this.attrTween(e,"function"===typeof t?(n.local?Tr:Or)(n,r,br(this,"attr."+e,t)):null==t?(n.local?Er:Ar)(n):(n.local?Rr:Cr)(n,r,t))},attrTween:function(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==t)return this.tween(n,null);if("function"!==typeof t)throw new Error;var r=Et(e);return this.tween(n,(r.local?kr:Mr)(r,t))},style:function(e,t,n){var r="transform"===(e+="")?gr:Sr;return null==t?this.styleTween(e,function(e,t){var n,r,o;return function(){var i=Lt(this,e),a=(this.style.removeProperty(e),Lt(this,e));return i===a?null:i===n&&a===r?o:o=t(n=i,r=a)}}(e,r)).on("end.style."+e,Fr(e)):"function"===typeof t?this.styleTween(e,function(e,t,n){var r,o,i;return function(){var a=Lt(this,e),s=n(this),u=s+"";return null==s&&(this.style.removeProperty(e),u=s=Lt(this,e)),a===u?null:a===r&&u===o?i:(o=u,i=t(r=a,s))}}(e,r,br(this,"style."+e,t))).each(function(e,t){var n,r,o,i,a="style."+t,s="end."+a;return function(){var u=ar(this,e),l=u.on,c=null==u.value[a]?i||(i=Fr(t)):void 0;l===n&&o===c||(r=(n=l).copy()).on(s,o=c),u.on=r}}(this._id,e)):this.styleTween(e,function(e,t,n){var r,o,i=n+"";return function(){var a=Lt(this,e);return a===i?null:a===r?o:o=t(r=a,n)}}(e,r,t),n).on("end.style."+e,null)},styleTween:function(e,t,n){var r="style."+(e+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==t)return this.tween(r,null);if("function"!==typeof t)throw new Error;return this.tween(r,function(e,t,n){var r,o;function i(){var i=t.apply(this,arguments);return i!==o&&(r=(o=i)&&function(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}(e,i,n)),r}return i._value=t,i}(e,t,null==n?"":n))},text:function(e){return this.tween("text","function"===typeof e?function(e){return function(){var t=e(this);this.textContent=null==t?"":t}}(br(this,"text",e)):function(e){return function(){this.textContent=e}}(null==e?"":e+""))},textTween:function(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(null==e)return this.tween(t,null);if("function"!==typeof e)throw new Error;return this.tween(t,function(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&function(e){return function(t){this.textContent=e.call(this,t)}}(r)),t}return r._value=e,r}(e))},remove:function(){return this.on("end.remove",function(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}(this._id))},tween:function(e,t){var n=this._id;if(e+="",arguments.length<2){for(var r,o=sr(this.node(),n).tween,i=0,a=o.length;iQn&&n.name===t)return new Ur([[e]],Yr,t,+r);return null}const Kr=e=>()=>e;function Zr(e,{sourceEvent:t,target:n,selection:r,mode:o,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},selection:{value:r,enumerable:!0,configurable:!0},mode:{value:o,enumerable:!0,configurable:!0},_:{value:i}})}function Qr(e){e.preventDefault(),e.stopImmediatePropagation()}var Jr={name:"drag"},eo={name:"space"},to={name:"handle"},no={name:"center"};const{abs:ro,max:oo,min:io}=Math;function ao(e){return[+e[0],+e[1]]}function so(e){return[ao(e[0]),ao(e[1])]}var uo={name:"x",handles:["w","e"].map(yo),input:function(e,t){return null==e?null:[[+e[0],t[0][1]],[+e[1],t[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}},lo={name:"y",handles:["n","s"].map(yo),input:function(e,t){return null==e?null:[[t[0][0],+e[0]],[t[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}},co={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(yo),input:function(e){return null==e?null:so(e)},output:function(e){return e}},fo={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ho={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},po={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},go={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},vo={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function yo(e){return{type:e}}function mo(e){return!e.ctrlKey&&!e.button}function bo(){var e=this.ownerSVGElement||this;return e.hasAttribute("viewBox")?[[(e=e.viewBox.baseVal).x,e.y],[e.x+e.width,e.y+e.height]]:[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function _o(){return navigator.maxTouchPoints||"ontouchstart"in this}function wo(e){for(;!e.__brush;)if(!(e=e.parentNode))return;return e.__brush}function xo(e){var t=e.__brush;return t?t.dim.output(t.selection):null}function So(){return Co(uo)}function Ao(){return Co(lo)}function Eo(){return Co(co)}function Co(e){var t,n=bo,r=mo,o=_o,i=!0,a=ot("start","brush","end"),s=6;function u(t){var n=t.property("__brush",g).selectAll(".overlay").data([yo("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",fo.overlay).merge(n).each((function(){var e=wo(this).extent;bn(this).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1])})),t.selectAll(".selection").data([yo("selection")]).enter().append("rect").attr("class","selection").attr("cursor",fo.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=t.selectAll(".handle").data(e.handles,(function(e){return e.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(e){return"handle handle--"+e.type})).attr("cursor",(function(e){return fo[e.type]})),t.each(l).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",d).filter(o).on("touchstart.brush",d).on("touchmove.brush",h).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function l(){var e=bn(this),t=wo(this).selection;t?(e.selectAll(".selection").style("display",null).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1]),e.selectAll(".handle").style("display",null).attr("x",(function(e){return"e"===e.type[e.type.length-1]?t[1][0]-s/2:t[0][0]-s/2})).attr("y",(function(e){return"s"===e.type[0]?t[1][1]-s/2:t[0][1]-s/2})).attr("width",(function(e){return"n"===e.type||"s"===e.type?t[1][0]-t[0][0]+s:s})).attr("height",(function(e){return"e"===e.type||"w"===e.type?t[1][1]-t[0][1]+s:s}))):e.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function c(e,t,n){var r=e.__brush.emitter;return!r||n&&r.clean?new f(e,t,n):r}function f(e,t,n){this.that=e,this.args=t,this.state=e.__brush,this.active=0,this.clean=n}function d(n){if((!t||n.touches)&&r.apply(this,arguments)){var o,a,s,u,f,d,h,p,g,v,y,m=this,b=n.target.__data__.type,_="selection"===(i&&n.metaKey?b="overlay":b)?Jr:i&&n.altKey?no:to,w=e===lo?null:go[b],x=e===uo?null:vo[b],S=wo(m),A=S.extent,E=S.selection,C=A[0][0],R=A[0][1],O=A[1][0],T=A[1][1],k=0,M=0,P=w&&x&&i&&n.shiftKey,I=Array.from(n.touches||[n],(e=>{const t=e.identifier;return(e=On(e,m)).point0=e.slice(),e.identifier=t,e}));ur(m);var N=c(m,arguments,!0).beforestart();if("overlay"===b){E&&(g=!0);const t=[I[0],I[1]||I[0]];S.selection=E=[[o=e===lo?C:io(t[0][0],t[1][0]),s=e===uo?R:io(t[0][1],t[1][1])],[f=e===lo?O:oo(t[0][0],t[1][0]),h=e===uo?T:oo(t[0][1],t[1][1])]],I.length>1&&U(n)}else o=E[0][0],s=E[0][1],f=E[1][0],h=E[1][1];a=o,u=s,d=f,p=h;var D=bn(m).attr("pointer-events","none"),L=D.selectAll(".overlay").attr("cursor",fo[b]);if(n.touches)N.moved=j,N.ended=z;else{var F=bn(n.view).on("mousemove.brush",j,!0).on("mouseup.brush",z,!0);i&&F.on("keydown.brush",(function(e){switch(e.keyCode){case 16:P=w&&x;break;case 18:_===to&&(w&&(f=d-k*w,o=a+k*w),x&&(h=p-M*x,s=u+M*x),_=no,U(e));break;case 32:_!==to&&_!==no||(w<0?f=d-k:w>0&&(o=a-k),x<0?h=p-M:x>0&&(s=u-M),_=eo,L.attr("cursor",fo.selection),U(e));break;default:return}Qr(e)}),!0).on("keyup.brush",(function(e){switch(e.keyCode){case 16:P&&(v=y=P=!1,U(e));break;case 18:_===no&&(w<0?f=d:w>0&&(o=a),x<0?h=p:x>0&&(s=u),_=to,U(e));break;case 32:_===eo&&(e.altKey?(w&&(f=d-k*w,o=a+k*w),x&&(h=p-M*x,s=u+M*x),_=no):(w<0?f=d:w>0&&(o=a),x<0?h=p:x>0&&(s=u),_=to),L.attr("cursor",fo[b]),U(e));break;default:return}Qr(e)}),!0),An(n.view)}l.call(m),N.start(n,_.name)}function j(e){for(const t of e.changedTouches||[e])for(const e of I)e.identifier===t.identifier&&(e.cur=On(t,m));if(P&&!v&&!y&&1===I.length){const e=I[0];ro(e.cur[0]-e[0])>ro(e.cur[1]-e[1])?y=!0:v=!0}for(const t of I)t.cur&&(t[0]=t.cur[0],t[1]=t.cur[1]);g=!0,Qr(e),U(e)}function U(e){const t=I[0],n=t.point0;var r;switch(k=t[0]-n[0],M=t[1]-n[1],_){case eo:case Jr:w&&(k=oo(C-o,io(O-f,k)),a=o+k,d=f+k),x&&(M=oo(R-s,io(T-h,M)),u=s+M,p=h+M);break;case to:I[1]?(w&&(a=oo(C,io(O,I[0][0])),d=oo(C,io(O,I[1][0])),w=1),x&&(u=oo(R,io(T,I[0][1])),p=oo(R,io(T,I[1][1])),x=1)):(w<0?(k=oo(C-o,io(O-o,k)),a=o+k,d=f):w>0&&(k=oo(C-f,io(O-f,k)),a=o,d=f+k),x<0?(M=oo(R-s,io(T-s,M)),u=s+M,p=h):x>0&&(M=oo(R-h,io(T-h,M)),u=s,p=h+M));break;case no:w&&(a=oo(C,io(O,o-k*w)),d=oo(C,io(O,f+k*w))),x&&(u=oo(R,io(T,s-M*x)),p=oo(R,io(T,h+M*x)))}de+n))}function Lo(){return Uo(!1,!1)}function Fo(){return Uo(!1,!0)}function jo(){return Uo(!0,!1)}function Uo(e,t){var n=0,r=null,o=null,i=null;function a(a){var s,u=a.length,l=new Array(u),c=Do(0,u),f=new Array(u*u),d=new Array(u),h=0;a=Float64Array.from({length:u*u},t?(e,t)=>a[t%u][t/u|0]:(e,t)=>a[t/u|0][t%u]);for(let t=0;tr(l[e],l[t])));for(const n of c){const r=t;if(e){const e=Do(1+~u,u).filter((e=>e<0?a[~e*u+n]:a[n*u+e]));o&&e.sort(((e,t)=>o(e<0?-a[~e*u+n]:a[n*u+e],t<0?-a[~t*u+n]:a[n*u+t])));for(const r of e)if(r<0){(f[~r*u+n]||(f[~r*u+n]={source:null,target:null})).target={index:n,startAngle:t,endAngle:t+=a[~r*u+n]*h,value:a[~r*u+n]}}else{(f[n*u+r]||(f[n*u+r]={source:null,target:null})).source={index:n,startAngle:t,endAngle:t+=a[n*u+r]*h,value:a[n*u+r]}}d[n]={index:n,startAngle:r,endAngle:t,value:l[n]}}else{const e=Do(0,u).filter((e=>a[n*u+e]||a[e*u+n]));o&&e.sort(((e,t)=>o(a[n*u+e],a[n*u+t])));for(const r of e){let e;if(n=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Ho;const n=10**t;return function(e){this._+=e[0];for(let t=1,r=e.length;tVo)if(Math.abs(c*s-u*l)>Vo&&o){let d=n-i,h=r-a,p=s*s+u*u,g=d*d+h*h,v=Math.sqrt(p),y=Math.sqrt(f),m=o*Math.tan((zo-Math.acos((p+f-g)/(2*v*y)))/2),b=m/y,_=m/v;Math.abs(b-1)>Vo&&this._append`L${e+b*l},${t+b*c}`,this._append`A${o},${o},0,0,${+(c*d>l*h)},${this._x1=e+_*s},${this._y1=t+_*u}`}else this._append`L${this._x1=e},${this._y1=t}`;else;}arc(e,t,n,r,o,i){if(e=+e,t=+t,i=!!i,(n=+n)<0)throw new Error(`negative radius: ${n}`);let a=n*Math.cos(r),s=n*Math.sin(r),u=e+a,l=t+s,c=1^i,f=i?r-o:o-r;null===this._x1?this._append`M${u},${l}`:(Math.abs(this._x1-u)>Vo||Math.abs(this._y1-l)>Vo)&&this._append`L${u},${l}`,n&&(f<0&&(f=f%Bo+Bo),f>$o?this._append`A${n},${n},0,1,${c},${e-a},${t-s}A${n},${n},0,1,${c},${this._x1=u},${this._y1=l}`:f>Vo&&this._append`A${n},${n},0,${+(f>=zo)},${c},${this._x1=e+n*Math.cos(o)},${this._y1=t+n*Math.sin(o)}`)}rect(e,t,n,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function qo(){return new Wo}function Go(e=3){return new Wo(+e)}qo.prototype=Wo.prototype;var Yo=Array.prototype.slice;function Xo(e){return function(){return e}}function Ko(e){return e.source}function Zo(e){return e.target}function Qo(e){return e.radius}function Jo(e){return e.startAngle}function ei(e){return e.endAngle}function ti(){return 0}function ni(){return 10}function ri(e){var t=Ko,n=Zo,r=Qo,o=Qo,i=Jo,a=ei,s=ti,u=null;function l(){var l,c=t.apply(this,arguments),f=n.apply(this,arguments),d=s.apply(this,arguments)/2,h=Yo.call(arguments),p=+r.apply(this,(h[0]=c,h)),g=i.apply(this,h)-Mo,v=a.apply(this,h)-Mo,y=+o.apply(this,(h[0]=f,h)),m=i.apply(this,h)-Mo,b=a.apply(this,h)-Mo;if(u||(u=l=qo()),d>No&&(Ro(v-g)>2*d+No?v>g?(g+=d,v-=d):(g-=d,v+=d):g=v=(g+v)/2,Ro(b-m)>2*d+No?b>m?(m+=d,b-=d):(m-=d,b+=d):m=b=(m+b)/2),u.moveTo(p*Oo(g),p*To(g)),u.arc(0,0,p,g,v),g!==m||v!==b)if(e){var _=y-+e.apply(this,arguments),w=(m+b)/2;u.quadraticCurveTo(0,0,_*Oo(m),_*To(m)),u.lineTo(y*Oo(w),y*To(w)),u.lineTo(_*Oo(b),_*To(b))}else u.quadraticCurveTo(0,0,y*Oo(m),y*To(m)),u.arc(0,0,y,m,b);if(u.quadraticCurveTo(0,0,p*Oo(g),p*To(g)),u.closePath(),l)return u=null,l+""||null}return e&&(l.headRadius=function(t){return arguments.length?(e="function"===typeof t?t:Xo(+t),l):e}),l.radius=function(e){return arguments.length?(r=o="function"===typeof e?e:Xo(+e),l):r},l.sourceRadius=function(e){return arguments.length?(r="function"===typeof e?e:Xo(+e),l):r},l.targetRadius=function(e){return arguments.length?(o="function"===typeof e?e:Xo(+e),l):o},l.startAngle=function(e){return arguments.length?(i="function"===typeof e?e:Xo(+e),l):i},l.endAngle=function(e){return arguments.length?(a="function"===typeof e?e:Xo(+e),l):a},l.padAngle=function(e){return arguments.length?(s="function"===typeof e?e:Xo(+e),l):s},l.source=function(e){return arguments.length?(t=e,l):t},l.target=function(e){return arguments.length?(n=e,l):n},l.context=function(e){return arguments.length?(u=null==e?null:e,l):u},l}function oi(){return ri()}function ii(){return ri(ni)}var ai=n(40871);const si=Math.PI/180,ui=180/Math.PI,li=.96422,ci=1,fi=.82521,di=4/29,hi=6/29,pi=3*hi*hi,gi=hi*hi*hi;function vi(e){if(e instanceof bi)return new bi(e.l,e.a,e.b,e.opacity);if(e instanceof Ri)return Oi(e);e instanceof _r.Gw||(e=(0,_r.b)(e));var t,n,r=Si(e.r),o=Si(e.g),i=Si(e.b),a=_i((.2225045*r+.7168786*o+.0606169*i)/ci);return r===o&&o===i?t=n=a:(t=_i((.4360747*r+.3850649*o+.1430804*i)/li),n=_i((.0139322*r+.0971045*o+.7141733*i)/fi)),new bi(116*a-16,500*(t-a),200*(a-n),e.opacity)}function yi(e,t){return new bi(e,0,0,null==t?1:t)}function mi(e,t,n,r){return 1===arguments.length?vi(e):new bi(e,t,n,null==r?1:r)}function bi(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function _i(e){return e>gi?Math.pow(e,1/3):e/pi+di}function wi(e){return e>hi?e*e*e:pi*(e-di)}function xi(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Si(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Ai(e){if(e instanceof Ri)return new Ri(e.h,e.c,e.l,e.opacity);if(e instanceof bi||(e=vi(e)),0===e.a&&0===e.b)return new Ri(NaN,0()=>e;function Vi(e,t){for(var n,r=-1,o=t.length;++rr!==h>r&&n<(d-l)*(r-c)/(h-c)+l&&(o=-o)}return o}function Hi(e,t,n){var r,o,i,a;return function(e,t,n){return(t[0]-e[0])*(n[1]-e[1])===(n[0]-e[0])*(t[1]-e[1])}(e,t,n)&&(o=e[r=+(e[0]===t[0])],i=n[r],a=t[r],o<=i&&i<=a||a<=i&&i<=o)}function Wi(){}var qi=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function Gi(){var e=1,t=1,n=q,r=s;function o(e){var t=n(e);if(Array.isArray(t))t=t.slice().sort(zi);else{const n=x(e,Yi);for(t=(0,H.Ay)(...W(n[0],n[1],t),t);t[t.length-1]>=n[1];)t.pop();for(;t[1]i(e,t)))}function i(n,o){const i=null==o?NaN:+o;if(isNaN(i))throw new Error(`invalid value: ${o}`);var s=[],u=[];return function(n,r,o){var i,s,u,l,c,f,d=new Array,h=new Array;i=s=-1,l=Xi(n[0],r),qi[l<<1].forEach(p);for(;++i=r,qi[c<<2].forEach(p);for(;++i0?s.push([e]):u.push(e)})),u.forEach((function(e){for(var t,n=0,r=s.length;n0&&i0&&a=0&&i>=0))throw new Error("invalid size");return e=r,t=i,o},o.thresholds=function(e){return arguments.length?(n="function"===typeof e?e:Array.isArray(e)?Bi(Ui.call(e)):Bi(e),o):n},o.smooth=function(e){return arguments.length?(r=e?s:Wi,o):r===s},o}function Yi(e){return isFinite(e)?e:NaN}function Xi(e,t){return null!=e&&+e>=t}function Ki(e){return null==e||isNaN(e=+e)?-1/0:e}function Zi(e,t,n,r){const o=r-t,i=n-t,a=isFinite(o)||isFinite(i)?o/i:Math.sign(o)/Math.sign(i);return isNaN(a)?e:e+a-.5}function Qi(e){return e[0]}function Ji(e){return e[1]}function ea(){return 1}function ta(){var e=Qi,t=Ji,n=ea,r=960,o=500,i=20,a=2,u=3*i,l=r+2*u>>a,c=o+2*u>>a,f=Bi(20);function d(r){var o=new Float32Array(l*c),f=Math.pow(2,-a),d=-1;for(const i of r){var h=(e(i,++d,r)+u)*f,p=(t(i,d,r)+u)*f,g=+n(i,d,r);if(g&&h>=0&&h=0&&pe*r)))(t).map(((e,t)=>(e.value=+n[t],p(e))))}function p(e){return e.coordinates.forEach(g),e}function g(e){e.forEach(v)}function v(e){e.forEach(y)}function y(e){e[0]=e[0]*Math.pow(2,a)-u,e[1]=e[1]*Math.pow(2,a)-u}function m(){return l=r+2*(u=3*i)>>a,c=o+2*u>>a,h}return h.contours=function(e){var t=d(e),n=Gi().size([l,c]),r=Math.pow(2,2*a),o=e=>{e=+e;var o=p(n.contour(t,e*r));return o.value=e,o};return Object.defineProperty(o,"max",{get:()=>(0,Z.A)(t)/r}),o},h.x=function(t){return arguments.length?(e="function"===typeof t?t:Bi(+t),h):e},h.y=function(e){return arguments.length?(t="function"===typeof e?e:Bi(+e),h):t},h.weight=function(e){return arguments.length?(n="function"===typeof e?e:Bi(+e),h):n},h.size=function(e){if(!arguments.length)return[r,o];var t=+e[0],n=+e[1];if(!(t>=0&&n>=0))throw new Error("invalid size");return r=t,o=n,m()},h.cellSize=function(e){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return a=Math.floor(Math.log(e)/Math.LN2),m()},h.thresholds=function(e){return arguments.length?(f="function"===typeof e?e:Array.isArray(e)?Bi(Ui.call(e)):Bi(e),h):f},h.bandwidth=function(e){if(!arguments.length)return Math.sqrt(i*(i+1));if(!((e=+e)>=0))throw new Error("invalid bandwidth");return i=(Math.sqrt(4*e*e+1)-1)/2,m()},h}const na=134217729,ra=33306690738754706e-32;function oa(e,t,n,r,o){let i,a,s,u,l=t[0],c=r[0],f=0,d=0;c>l===c>-l?(i=l,l=t[++f]):(i=c,c=r[++d]);let h=0;if(fl===c>-l?(a=l+i,s=i-(a-l),l=t[++f]):(a=c+i,s=i-(a-c),c=r[++d]),i=a,0!==s&&(o[h++]=s);fl===c>-l?(a=i+l,u=a-i,s=i-(a-u)+(l-u),l=t[++f]):(a=i+c,u=a-i,s=i-(a-u)+(c-u),c=r[++d]),i=a,0!==s&&(o[h++]=s);for(;f=33306690738754716e-32*l?u:-function(e,t,n,r,o,i,a){let s,u,l,c,f,d,h,p,g,v,y,m,b,_,w,x,S,A;const E=e-o,C=n-o,R=t-i,O=r-i;_=E*O,d=na*E,h=d-(d-E),p=E-h,d=na*O,g=d-(d-O),v=O-g,w=p*v-(_-h*g-p*g-h*v),x=R*C,d=na*R,h=d-(d-R),p=R-h,d=na*C,g=d-(d-C),v=C-g,S=p*v-(x-h*g-p*g-h*v),y=w-S,f=w-y,ua[0]=w-(y+f)+(f-S),m=_+y,f=m-_,b=_-(m-f)+(y-f),y=b-x,f=b-y,ua[1]=b-(y+f)+(f-x),A=m+y,f=A-m,ua[2]=m-(A-f)+(y-f),ua[3]=A;let T=function(e,t){let n=t[0];for(let r=1;r=k||-T>=k)return T;if(f=e-E,s=e-(E+f)+(f-o),f=n-C,l=n-(C+f)+(f-o),f=t-R,u=t-(R+f)+(f-i),f=r-O,c=r-(O+f)+(f-i),0===s&&0===u&&0===l&&0===c)return T;if(k=sa*a+ra*Math.abs(T),T+=E*c+O*s-(R*l+C*u),T>=k||-T>=k)return T;_=s*O,d=na*s,h=d-(d-s),p=s-h,d=na*O,g=d-(d-O),v=O-g,w=p*v-(_-h*g-p*g-h*v),x=u*C,d=na*u,h=d-(d-u),p=u-h,d=na*C,g=d-(d-C),v=C-g,S=p*v-(x-h*g-p*g-h*v),y=w-S,f=w-y,da[0]=w-(y+f)+(f-S),m=_+y,f=m-_,b=_-(m-f)+(y-f),y=b-x,f=b-y,da[1]=b-(y+f)+(f-x),A=m+y,f=A-m,da[2]=m-(A-f)+(y-f),da[3]=A;const M=oa(4,ua,4,da,la);_=E*c,d=na*E,h=d-(d-E),p=E-h,d=na*c,g=d-(d-c),v=c-g,w=p*v-(_-h*g-p*g-h*v),x=R*l,d=na*R,h=d-(d-R),p=R-h,d=na*l,g=d-(d-l),v=l-g,S=p*v-(x-h*g-p*g-h*v),y=w-S,f=w-y,da[0]=w-(y+f)+(f-S),m=_+y,f=m-_,b=_-(m-f)+(y-f),y=b-x,f=b-y,da[1]=b-(y+f)+(f-x),A=m+y,f=A-m,da[2]=m-(A-f)+(y-f),da[3]=A;const P=oa(M,la,4,da,ca);_=s*c,d=na*s,h=d-(d-s),p=s-h,d=na*c,g=d-(d-c),v=c-g,w=p*v-(_-h*g-p*g-h*v),x=u*l,d=na*u,h=d-(d-u),p=u-h,d=na*l,g=d-(d-l),v=l-g,S=p*v-(x-h*g-p*g-h*v),y=w-S,f=w-y,da[0]=w-(y+f)+(f-S),m=_+y,f=m-_,b=_-(m-f)+(y-f),y=b-x,f=b-y,da[1]=b-(y+f)+(f-x),A=m+y,f=A-m,da[2]=m-(A-f)+(y-f),da[3]=A;const I=oa(P,ca,4,da,fa);return fa[I-1]}(e,t,n,r,o,i,l)}ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(8),ia(8),ia(8),ia(4),ia(8),ia(8),ia(8),ia(12);ia(192),ia(192);ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(8),ia(8),ia(8),ia(8),ia(8),ia(8),ia(8),ia(8),ia(8),ia(4),ia(4),ia(4),ia(8),ia(16),ia(16),ia(16),ia(32),ia(32),ia(48),ia(64);ia(1152),ia(1152);ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(4),ia(24),ia(24),ia(24),ia(24),ia(24),ia(24),ia(24),ia(24),ia(24),ia(24),ia(1152),ia(1152),ia(1152),ia(1152),ia(1152),ia(2304),ia(2304),ia(3456),ia(5760),ia(8),ia(8),ia(8),ia(16),ia(24),ia(48),ia(48),ia(96),ia(192),ia(384),ia(384),ia(384),ia(768);ia(96),ia(96),ia(96),ia(1152);const pa=Math.pow(2,-52),ga=new Uint32Array(512);class va{static from(e,t=xa,n=Sa){const r=e.length,o=new Float64Array(2*r);for(let i=0;i>1;if(t>0&&"number"!==typeof e[0])throw new Error("Expected coords to contain numbers.");this.coords=e;const n=Math.max(2*t-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(t)),this._hullPrev=new Uint32Array(t),this._hullNext=new Uint32Array(t),this._hullTri=new Uint32Array(t),this._hullHash=new Int32Array(this._hashSize),this._ids=new Uint32Array(t),this._dists=new Float64Array(t),this.update()}update(){const{coords:e,_hullPrev:t,_hullNext:n,_hullTri:r,_hullHash:o}=this,i=e.length>>1;let a=1/0,s=1/0,u=-1/0,l=-1/0;for(let A=0;Au&&(u=t),n>l&&(l=n),this._ids[A]=A}const c=(a+u)/2,f=(s+l)/2;let d,h,p;for(let A=0,E=1/0;A0&&(h=A,E=t)}let y=e[2*h],m=e[2*h+1],b=1/0;for(let A=0;Ar&&(t[n++]=o,r=i)}return this.hull=t.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(ha(g,v,y,m,_,w)<0){const e=h,t=y,n=m;h=p,y=_,m=w,p=e,_=t,w=n}const x=function(e,t,n,r,o,i){const a=n-e,s=r-t,u=o-e,l=i-t,c=a*a+s*s,f=u*u+l*l,d=.5/(a*l-s*u),h=e+(l*c-s*f)*d,p=t+(a*f-u*c)*d;return{x:h,y:p}}(g,v,y,m,_,w);this._cx=x.x,this._cy=x.y;for(let A=0;A0&&Math.abs(a-A)<=pa&&Math.abs(s-E)<=pa)continue;if(A=a,E=s,i===d||i===h||i===p)continue;let u=0;for(let e=0,t=this._hashKey(a,s);e=0;)if(c=l,c===u){c=-1;break}if(-1===c)continue;let f=this._addTriangle(c,i,n[c],-1,-1,r[c]);r[i]=this._legalize(f+2),r[c]=f,S++;let g=n[c];for(;l=n[g],ha(a,s,e[2*g],e[2*g+1],e[2*l],e[2*l+1])<0;)f=this._addTriangle(g,i,l,r[i],-1,r[g]),r[i]=this._legalize(f+2),n[g]=g,S--,g=l;if(c===u)for(;l=t[c],ha(a,s,e[2*l],e[2*l+1],e[2*c],e[2*c+1])<0;)f=this._addTriangle(l,i,c,-1,r[c],r[l]),this._legalize(f+2),r[l]=f,n[c]=c,S--,c=l;this._hullStart=t[i]=c,n[c]=t[g]=i,n[i]=g,o[this._hashKey(a,s)]=i,o[this._hashKey(e[2*c],e[2*c+1])]=c}this.hull=new Uint32Array(S);for(let A=0,E=this._hullStart;A0?3-n:1+n)/4}(e-this._cx,t-this._cy)*this._hashSize)%this._hashSize}_legalize(e){const{_triangles:t,_halfedges:n,coords:r}=this;let o=0,i=0;for(;;){const a=n[e],s=e-e%3;if(i=s+(e+2)%3,-1===a){if(0===o)break;e=ga[--o];continue}const u=a-a%3,l=s+(e+1)%3,c=u+(a+2)%3,f=t[i],d=t[e],h=t[l],p=t[c];if(ma(r[2*f],r[2*f+1],r[2*d],r[2*d+1],r[2*h],r[2*h+1],r[2*p],r[2*p+1])){t[e]=p,t[a]=f;const r=n[c];if(-1===r){let t=this._hullStart;do{if(this._hullTri[t]===c){this._hullTri[t]=e;break}t=this._hullPrev[t]}while(t!==this._hullStart)}this._link(e,r),this._link(a,n[i]),this._link(i,c);const s=u+(a+1)%3;o=n&&t[e[a]]>i;)e[a+1]=e[a--];e[a+1]=r}else{let o=n+1,i=r;wa(e,n+r>>1,o),t[e[n]]>t[e[r]]&&wa(e,n,r),t[e[o]]>t[e[r]]&&wa(e,o,r),t[e[n]]>t[e[o]]&&wa(e,n,o);const a=e[o],s=t[a];for(;;){do{o++}while(t[e[o]]s);if(i=i-n?(_a(e,t,o,r),_a(e,t,n,i-1)):(_a(e,t,n,i-1),_a(e,t,o,r))}}function wa(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function xa(e){return e[0]}function Sa(e){return e[1]}const Aa=1e-6;class Ea{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(e,t){this._+=`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(e,t){this._+=`L${this._x1=+e},${this._y1=+t}`}arc(e,t,n){const r=(e=+e)+(n=+n),o=t=+t;if(n<0)throw new Error("negative radius");null===this._x1?this._+=`M${r},${o}`:(Math.abs(this._x1-r)>Aa||Math.abs(this._y1-o)>Aa)&&(this._+="L"+r+","+o),n&&(this._+=`A${n},${n},0,1,1,${e-n},${t}A${n},${n},0,1,1,${this._x1=r},${this._y1=o}`)}rect(e,t,n,r){this._+=`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}h${+n}v${+r}h${-n}Z`}value(){return this._||null}}class Ca{constructor(){this._=[]}moveTo(e,t){this._.push([e,t])}closePath(){this._.push(this._[0].slice())}lineTo(e,t){this._.push([e,t])}value(){return this._.length?this._:null}}class Ra{constructor(e,[t,n,r,o]=[0,0,960,500]){if(!((r=+r)>=(t=+t))||!((o=+o)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=e,this._circumcenters=new Float64Array(2*e.points.length),this.vectors=new Float64Array(2*e.points.length),this.xmax=r,this.xmin=t,this.ymax=o,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:e,hull:t,triangles:n},vectors:r}=this;let o,i;const a=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let p,g,v=0,y=0,m=n.length;v1;)o-=2;for(let i=2;i0){if(t>=this.ymax)return null;(o=(this.ymax-t)/r)0){if(e>=this.xmax)return null;(o=(this.xmax-e)/n)this.xmax?2:0)|(tthis.ymax?8:0)}_simplify(e){if(e&&e.length>4){for(let t=0;t2&&function(e){const{triangles:t,coords:n}=e;for(let r=0;r1e-10)return!1}return!0}(e)){this.collinear=Int32Array.from({length:t.length/2},((e,t)=>t)).sort(((e,n)=>t[2*e]-t[2*n]||t[2*e+1]-t[2*n+1]));const e=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[t[2*e],t[2*e+1],t[2*n],t[2*n+1]],o=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let i=0,a=t.length/2;i0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],i[r[0]]=1,2===r.length&&(i[r[1]]=0,this.triangles[1]=r[1],this.triangles[2]=r[1]))}voronoi(e){return new Ra(this,e)}*neighbors(e){const{inedges:t,hull:n,_hullIndex:r,halfedges:o,triangles:i,collinear:a}=this;if(a){const t=a.indexOf(e);return t>0&&(yield a[t-1]),void(t=0&&o!==n&&o!==r;)n=o;return o}_step(e,t,n){const{inedges:r,hull:o,_hullIndex:i,halfedges:a,triangles:s,points:u}=this;if(-1===r[e]||!u.length)return(e+1)%(u.length>>1);let l=e,c=Ta(t-u[2*e],2)+Ta(n-u[2*e+1],2);const f=r[e];let d=f;do{let r=s[d];const f=Ta(t-u[2*r],2)+Ta(n-u[2*r+1],2);if(f()=>e;function Da(e,{sourceEvent:t,subject:n,target:r,identifier:o,active:i,x:a,y:s,dx:u,dy:l,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:i,enumerable:!0,configurable:!0},x:{value:a,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:u,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:c}})}function La(e){return!e.ctrlKey&&!e.button}function Fa(){return this.parentNode}function ja(e,t){return null==t?{x:e.x,y:e.y}:t}function Ua(){return navigator.maxTouchPoints||"ontouchstart"in this}function za(){var e,t,n,r,o=La,i=Fa,a=ja,s=Ua,u={},l=ot("start","drag","end"),c=0,f=0;function d(e){e.on("mousedown.drag",h).filter(s).on("touchstart.drag",v).on("touchmove.drag",y,_n).on("touchend.drag touchcancel.drag",m).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(a,s){if(!r&&o.call(this,a,s)){var u=b(this,i.call(this,a,s),a,s,"mouse");u&&(bn(a.view).on("mousemove.drag",p,wn).on("mouseup.drag",g,wn),An(a.view),xn(a),n=!1,e=a.clientX,t=a.clientY,u("start",a))}}function p(r){if(Sn(r),!n){var o=r.clientX-e,i=r.clientY-t;n=o*o+i*i>f}u.mouse("drag",r)}function g(e){bn(e.view).on("mousemove.drag mouseup.drag",null),En(e.view,n),Sn(e),u.mouse("end",e)}function v(e,t){if(o.call(this,e,t)){var n,r,a=e.changedTouches,s=i.call(this,e,t),u=a.length;for(n=0;n9999?"+"+Ya(e,6):Ya(e,4)}(e.getUTCFullYear())+"-"+Ya(e.getUTCMonth()+1,2)+"-"+Ya(e.getUTCDate(),2)+(o?"T"+Ya(t,2)+":"+Ya(n,2)+":"+Ya(r,2)+"."+Ya(o,3)+"Z":r?"T"+Ya(t,2)+":"+Ya(n,2)+":"+Ya(r,2)+"Z":n||t?"T"+Ya(t,2)+":"+Ya(n,2)+"Z":"")}function Ka(e){var t=new RegExp('["'+e+"\n\r]"),n=e.charCodeAt(0);function r(e,t){var r,o=[],i=e.length,a=0,s=0,u=i<=0,l=!1;function c(){if(u)return Va;if(l)return l=!1,Ba;var t,r,o=a;if(e.charCodeAt(o)===$a){for(;a++=i?u=!0:(r=e.charCodeAt(a++))===Ha?l=!0:r===Wa&&(l=!0,e.charCodeAt(a)===Ha&&++a),e.slice(o+1,t-1).replace(/""/g,'"')}for(;a+e;function vs(e){return e*e}function ys(e){return e*(2-e)}function ms(e){return((e*=2)<=1?e*e:--e*(2-e)+1)/2}var bs=function e(t){function n(e){return Math.pow(e,t)}return t=+t,n.exponent=e,n}(3),_s=function e(t){function n(e){return 1-Math.pow(1-e,t)}return t=+t,n.exponent=e,n}(3),ws=function e(t){function n(e){return((e*=2)<=1?Math.pow(e,t):2-Math.pow(2-e,t))/2}return t=+t,n.exponent=e,n}(3),xs=Math.PI,Ss=xs/2;function As(e){return 1===+e?1:1-Math.cos(e*Ss)}function Es(e){return Math.sin(e*Ss)}function Cs(e){return(1-Math.cos(xs*e))/2}function Rs(e){return 1.0009775171065494*(Math.pow(2,-10*e)-.0009765625)}function Os(e){return Rs(1-+e)}function Ts(e){return 1-Rs(e)}function ks(e){return((e*=2)<=1?Rs(1-e):2-Rs(e-1))/2}function Ms(e){return 1-Math.sqrt(1-e*e)}function Ps(e){return Math.sqrt(1- --e*e)}function Is(e){return((e*=2)<=1?1-Math.sqrt(1-e*e):Math.sqrt(1-(e-=2)*e)+1)/2}var Ns=4/11,Ds=6/11,Ls=8/11,Fs=3/4,js=9/11,Us=10/11,zs=15/16,Bs=21/22,Vs=63/64,$s=1/Ns/Ns;function Hs(e){return 1-Ws(1-e)}function Ws(e){return(e=+e)au(t,n).then((t=>(new DOMParser).parseFromString(t,e)))}const gu=pu("application/xml");var vu=pu("text/html"),yu=pu("image/svg+xml");function mu(e,t){var n,r=1;function o(){var o,i,a=n.length,s=0,u=0;for(o=0;o=(i=(g+y)/2))?g=i:y=i,(c=n>=(a=(v+m)/2))?v=a:m=a,o=h,!(h=h[f=c<<1|l]))return o[f]=p,e;if(s=+e._x.call(null,h.data),u=+e._y.call(null,h.data),t===s&&n===u)return p.next=h,o?o[f]=p:e._root=p,e;do{o=o?o[f]=new Array(4):e._root=new Array(4),(l=t>=(i=(g+y)/2))?g=i:y=i,(c=n>=(a=(v+m)/2))?v=a:m=a}while((f=c<<1|l)===(d=(u>=a)<<1|s>=i));return o[d]=h,o[f]=p,e}function _u(e,t,n,r,o){this.node=e,this.x0=t,this.y0=n,this.x1=r,this.y1=o}function wu(e){return e[0]}function xu(e){return e[1]}function Su(e,t,n){var r=new Au(null==t?wu:t,null==n?xu:n,NaN,NaN,NaN,NaN);return null==e?r:r.addAll(e)}function Au(e,t,n,r,o,i){this._x=e,this._y=t,this._x0=n,this._y0=r,this._x1=o,this._y1=i,this._root=void 0}function Eu(e){for(var t={data:e.data},n=t;e=e.next;)n=n.next={data:e.data};return t}var Cu=Su.prototype=Au.prototype;function Ru(e){return function(){return e}}function Ou(e){return 1e-6*(e()-.5)}function Tu(e){return e.x+e.vx}function ku(e){return e.y+e.vy}function Mu(e){var t,n,r,o=1,i=1;function a(){for(var e,a,u,l,c,f,d,h=t.length,p=0;pl+p||ic+p||au.index){var g=l-s.x-s.vx,v=c-s.y-s.vy,y=g*g+v*v;ye.r&&(e.r=e[t].r)}function u(){if(t){var r,o,i=t.length;for(n=new Array(i),r=0;r[s(e,t,r),e])));for(a=0,o=new Array(l);ac&&(c=r),of&&(f=o));if(u>c||l>f)return this;for(this.cover(u,l).cover(c,f),n=0;ne||e>=o||r>t||t>=i;)switch(s=(td||(i=u.y0)>h||(a=u.x1)=y)<<1|e>=v)&&(u=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=u)}else{var m=e-+this._x.call(null,g.data),b=t-+this._y.call(null,g.data),_=m*m+b*b;if(_=(s=(p+v)/2))?p=s:v=s,(c=a>=(u=(g+y)/2))?g=u:y=u,t=h,!(h=h[f=c<<1|l]))return this;if(!h.length)break;(t[f+1&3]||t[f+2&3]||t[f+3&3])&&(n=t,d=f)}for(;h.data!==e;)if(r=h,!(h=h.next))return this;return(o=h.next)&&delete h.next,r?(o?r.next=o:delete r.next,this):t?(o?t[f]=o:delete t[f],(h=t[0]||t[1]||t[2]||t[3])&&h===(t[3]||t[2]||t[1]||t[0])&&!h.length&&(n?n[d]=h:this._root=h),this):(this._root=o,this)},Cu.removeAll=function(e){for(var t=0,n=e.length;t(e=(Du*e+Lu)%Fu)/Fu}();function f(){d(),l.call("tick",t),n1?(null==n?s.delete(e):s.set(e,p(n)),t):s.get(e)},find:function(t,n,r){var o,i,a,s,u,l=0,c=e.length;for(null==r?r=1/0:r*=r,l=0;l1?(l.on(e,n),t):l.on(e)}}}function $u(){var e,t,n,r,o,i=Ru(-30),a=1,s=1/0,u=.81;function l(n){var o,i=e.length,a=Su(e,ju,Uu).visitAfter(f);for(r=n,o=0;o=s)){(e.data!==t||e.next)&&(0===f&&(p+=(f=Ou(n))*f),0===d&&(p+=(d=Ou(n))*d),p0?1:e<0?-1:0},ml=Math.sqrt,bl=Math.tan;function _l(e){return e>1?0:e<-1?tl:Math.acos(e)}function wl(e){return e>1?nl:e<-1?-nl:Math.asin(e)}function xl(e){return(e=vl(e/2))*e}function Sl(){}function Al(e,t){e&&Cl.hasOwnProperty(e.type)&&Cl[e.type](e,t)}var El={Feature:function(e,t){Al(e.geometry,t)},FeatureCollection:function(e,t){for(var n=e.features,r=-1,o=n.length;++r=0?1:-1,o=r*n,i=cl(t=(t*=al)/2+rl),a=vl(t),s=Nl*a,u=Il*i+s*cl(o),l=s*r*vl(o);ql.add(ll(l,u)),Pl=e,Il=i,Nl=a}function Jl(e){return Gl=new S,Tl(e,Yl),2*Gl}function ec(e){return[ll(e[1],e[0]),wl(e[2])]}function tc(e){var t=e[0],n=e[1],r=cl(n);return[r*cl(t),r*vl(t),vl(n)]}function nc(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function rc(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function oc(e,t){e[0]+=t[0],e[1]+=t[1],e[2]+=t[2]}function ic(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function ac(e){var t=ml(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);e[0]/=t,e[1]/=t,e[2]/=t}var sc,uc,lc,cc,fc,dc,hc,pc,gc,vc,yc,mc,bc,_c,wc,xc,Sc={point:Ac,lineStart:Cc,lineEnd:Rc,polygonStart:function(){Sc.point=Oc,Sc.lineStart=Tc,Sc.lineEnd=kc,$l=new S,Yl.polygonStart()},polygonEnd:function(){Yl.polygonEnd(),Sc.point=Ac,Sc.lineStart=Cc,Sc.lineEnd=Rc,ql<0?(Dl=-(Fl=180),Ll=-(jl=90)):$l>Ju?jl=90:$l<-Ju&&(Ll=-90),Wl[0]=Dl,Wl[1]=Fl},sphere:function(){Dl=-(Fl=180),Ll=-(jl=90)}};function Ac(e,t){Hl.push(Wl=[Dl=e,Fl=e]),tjl&&(jl=t)}function Ec(e,t){var n=tc([e*al,t*al]);if(Vl){var r=rc(Vl,n),o=rc([r[1],-r[0],0],r);ac(o),o=ec(o);var i,a=e-Ul,s=a>0?1:-1,u=o[0]*il*s,l=sl(a)>180;l^(s*Uljl&&(jl=i):l^(s*Ul<(u=(u+360)%360-180)&&ujl&&(jl=t)),l?eMc(Dl,Fl)&&(Fl=e):Mc(e,Fl)>Mc(Dl,Fl)&&(Dl=e):Fl>=Dl?(eFl&&(Fl=e)):e>Ul?Mc(Dl,e)>Mc(Dl,Fl)&&(Fl=e):Mc(e,Fl)>Mc(Dl,Fl)&&(Dl=e)}else Hl.push(Wl=[Dl=e,Fl=e]);tjl&&(jl=t),Vl=n,Ul=e}function Cc(){Sc.point=Ec}function Rc(){Wl[0]=Dl,Wl[1]=Fl,Sc.point=Ac,Vl=null}function Oc(e,t){if(Vl){var n=e-Ul;$l.add(sl(n)>180?n+(n>0?360:-360):n)}else zl=e,Bl=t;Yl.point(e,t),Ec(e,t)}function Tc(){Yl.lineStart()}function kc(){Oc(zl,Bl),Yl.lineEnd(),sl($l)>Ju&&(Dl=-(Fl=180)),Wl[0]=Dl,Wl[1]=Fl,Vl=null}function Mc(e,t){return(t-=e)<0?t+360:t}function Pc(e,t){return e[0]-t[0]}function Ic(e,t){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:tMc(r[0],r[1])&&(r[1]=o[1]),Mc(o[0],r[1])>Mc(r[0],r[1])&&(r[0]=o[0])):i.push(r=o);for(a=-1/0,t=0,r=i[n=i.length-1];t<=n;r=o,++t)o=i[t],(s=Mc(r[1],o[0]))>a&&(a=s,Dl=o[0],Fl=r[1])}return Hl=Wl=null,Dl===1/0||Ll===1/0?[[NaN,NaN],[NaN,NaN]]:[[Dl,Ll],[Fl,jl]]}var Dc={sphere:Sl,point:Lc,lineStart:jc,lineEnd:Bc,polygonStart:function(){Dc.lineStart=Vc,Dc.lineEnd=$c},polygonEnd:function(){Dc.lineStart=jc,Dc.lineEnd=Bc}};function Lc(e,t){e*=al;var n=cl(t*=al);Fc(n*cl(e),n*vl(e),vl(t))}function Fc(e,t,n){++sc,lc+=(e-lc)/sc,cc+=(t-cc)/sc,fc+=(n-fc)/sc}function jc(){Dc.point=Uc}function Uc(e,t){e*=al;var n=cl(t*=al);_c=n*cl(e),wc=n*vl(e),xc=vl(t),Dc.point=zc,Fc(_c,wc,xc)}function zc(e,t){e*=al;var n=cl(t*=al),r=n*cl(e),o=n*vl(e),i=vl(t),a=ll(ml((a=wc*i-xc*o)*a+(a=xc*r-_c*i)*a+(a=_c*o-wc*r)*a),_c*r+wc*o+xc*i);uc+=a,dc+=a*(_c+(_c=r)),hc+=a*(wc+(wc=o)),pc+=a*(xc+(xc=i)),Fc(_c,wc,xc)}function Bc(){Dc.point=Lc}function Vc(){Dc.point=Hc}function $c(){Wc(mc,bc),Dc.point=Lc}function Hc(e,t){mc=e,bc=t,e*=al,t*=al,Dc.point=Wc;var n=cl(t);_c=n*cl(e),wc=n*vl(e),xc=vl(t),Fc(_c,wc,xc)}function Wc(e,t){e*=al;var n=cl(t*=al),r=n*cl(e),o=n*vl(e),i=vl(t),a=wc*i-xc*o,s=xc*r-_c*i,u=_c*o-wc*r,l=hl(a,s,u),c=wl(l),f=l&&-c/l;gc.add(f*a),vc.add(f*s),yc.add(f*u),uc+=c,dc+=c*(_c+(_c=r)),hc+=c*(wc+(wc=o)),pc+=c*(xc+(xc=i)),Fc(_c,wc,xc)}function qc(e){sc=uc=lc=cc=fc=dc=hc=pc=0,gc=new S,vc=new S,yc=new S,Tl(e,Dc);var t=+gc,n=+vc,r=+yc,o=hl(t,n,r);return otl&&(e-=Math.round(e/ol)*ol),[e,t]}function Kc(e,t,n){return(e%=ol)?t||n?Yc(Qc(e),Jc(t,n)):Qc(e):t||n?Jc(t,n):Xc}function Zc(e){return function(t,n){return sl(t+=e)>tl&&(t-=Math.round(t/ol)*ol),[t,n]}}function Qc(e){var t=Zc(e);return t.invert=Zc(-e),t}function Jc(e,t){var n=cl(e),r=vl(e),o=cl(t),i=vl(t);function a(e,t){var a=cl(t),s=cl(e)*a,u=vl(e)*a,l=vl(t),c=l*n+s*r;return[ll(u*o-c*i,s*n-l*r),wl(c*o+u*i)]}return a.invert=function(e,t){var a=cl(t),s=cl(e)*a,u=vl(e)*a,l=vl(t),c=l*o-u*i;return[ll(u*o+l*i,s*n+c*r),wl(c*n-s*r)]},a}function ef(e){function t(t){return(t=e(t[0]*al,t[1]*al))[0]*=il,t[1]*=il,t}return e=Kc(e[0]*al,e[1]*al,e.length>2?e[2]*al:0),t.invert=function(t){return(t=e.invert(t[0]*al,t[1]*al))[0]*=il,t[1]*=il,t},t}function tf(e,t,n,r,o,i){if(n){var a=cl(t),s=vl(t),u=r*n;null==o?(o=t+r*ol,i=t-u/2):(o=nf(a,o),i=nf(a,i),(r>0?oi)&&(o+=r*ol));for(var l,c=o;r>0?c>i:c1&&t.push(t.pop().concat(t.shift()))},result:function(){var n=t;return t=[],e=null,n}}}function af(e,t){return sl(e[0]-t[0])=0;--i)o.point((c=l[i])[0],c[1]);else r(d.x,d.p.x,-1,o);d=d.p}l=(d=d.o).z,h=!h}while(!d.v);o.lineEnd()}}}function lf(e){if(t=e.length){for(var t,n,r=0,o=e[0];++r=0?1:-1,R=C*E,O=R>tl,T=v*x;if(u.add(ll(T*C*vl(R),y*A+T*cl(R))),a+=O?E+C*ol:E,O^p>=n^_>=n){var k=rc(tc(h),tc(b));ac(k);var M=rc(i,k);ac(M);var P=(O^E>=0?-1:1)*wl(M[2]);(r>P||r===P&&(k[0]||k[1]))&&(s+=O^E>=0?1:-1)}}return(a<-Ju||a0){for(f||(o.polygonStart(),f=!0),o.lineStart(),e=0;e1&&2&u&&d.push(d.pop().concat(d.shift())),a.push(d.filter(hf))}return d}}function hf(e){return e.length>1}function pf(e,t){return((e=e.x)[0]<0?e[1]-nl-Ju:nl-e[1])-((t=t.x)[0]<0?t[1]-nl-Ju:nl-t[1])}Xc.invert=Xc;const gf=df((function(){return!0}),(function(e){var t,n=NaN,r=NaN,o=NaN;return{lineStart:function(){e.lineStart(),t=1},point:function(i,a){var s=i>0?tl:-tl,u=sl(i-n);sl(u-tl)0?nl:-nl),e.point(o,r),e.lineEnd(),e.lineStart(),e.point(s,r),e.point(i,r),t=0):o!==s&&u>=tl&&(sl(n-o)Ju?ul((vl(t)*(i=cl(r))*vl(n)-vl(r)*(o=cl(t))*vl(e))/(o*i*a)):(t+r)/2}(n,r,i,a),e.point(o,r),e.lineEnd(),e.lineStart(),e.point(s,r),t=0),e.point(n=i,r=a),o=s},lineEnd:function(){e.lineEnd(),n=r=NaN},clean:function(){return 2-t}}}),(function(e,t,n,r){var o;if(null==e)o=n*nl,r.point(-tl,o),r.point(0,o),r.point(tl,o),r.point(tl,0),r.point(tl,-o),r.point(0,-o),r.point(-tl,-o),r.point(-tl,0),r.point(-tl,o);else if(sl(e[0]-t[0])>Ju){var i=e[0]0,o=sl(t)>Ju;function i(e,n){return cl(e)*cl(n)>t}function a(e,n,r){var o=[1,0,0],i=rc(tc(e),tc(n)),a=nc(i,i),s=i[0],u=a-s*s;if(!u)return!r&&e;var l=t*a/u,c=-t*s/u,f=rc(o,i),d=ic(o,l);oc(d,ic(i,c));var h=f,p=nc(d,h),g=nc(h,h),v=p*p-g*(nc(d,d)-1);if(!(v<0)){var y=ml(v),m=ic(h,(-p-y)/g);if(oc(m,d),m=ec(m),!r)return m;var b,_=e[0],w=n[0],x=e[1],S=n[1];w<_&&(b=_,_=w,w=b);var A=w-_,E=sl(A-tl)0^m[1]<(sl(m[0]-_)tl^(_<=m[0]&&m[0]<=w)){var C=ic(h,(-p+y)/g);return oc(C,d),[m,ec(C)]}}}function s(t,n){var o=r?e:tl-e,i=0;return t<-o?i|=1:t>o&&(i|=2),n<-o?i|=4:n>o&&(i|=8),i}return df(i,(function(e){var t,n,u,l,c;return{lineStart:function(){l=u=!1,c=1},point:function(f,d){var h,p=[f,d],g=i(f,d),v=r?g?0:s(f,d):g?s(f+(f<0?tl:-tl),d):0;if(!t&&(l=u=g)&&e.lineStart(),g!==u&&(!(h=a(t,p))||af(t,h)||af(p,h))&&(p[2]=1),g!==u)c=0,g?(e.lineStart(),h=a(p,t),e.point(h[0],h[1])):(h=a(t,p),e.point(h[0],h[1],2),e.lineEnd()),t=h;else if(o&&t&&r^g){var y;v&n||!(y=a(p,t,!0))||(c=0,r?(e.lineStart(),e.point(y[0][0],y[0][1]),e.point(y[1][0],y[1][1]),e.lineEnd()):(e.point(y[1][0],y[1][1]),e.lineEnd(),e.lineStart(),e.point(y[0][0],y[0][1],3)))}!g||t&&af(t,p)||e.point(p[0],p[1]),t=p,u=g,n=v},lineEnd:function(){u&&e.lineEnd(),t=null},clean:function(){return c|(l&&u)<<1}}}),(function(t,r,o,i){tf(i,e,n,o,t,r)}),r?[0,-e]:[-tl,e-tl])}var yf,mf,bf,_f,wf=1e9,xf=-wf;function Sf(e,t,n,r){function o(o,i){return e<=o&&o<=n&&t<=i&&i<=r}function i(o,i,s,l){var c=0,f=0;if(null==o||(c=a(o,s))!==(f=a(i,s))||u(o,i)<0^s>0)do{l.point(0===c||3===c?e:n,c>1?r:t)}while((c=(c+s+4)%4)!==f);else l.point(i[0],i[1])}function a(r,o){return sl(r[0]-e)0?0:3:sl(r[0]-n)0?2:1:sl(r[1]-t)0?1:0:o>0?3:2}function s(e,t){return u(e.x,t.x)}function u(e,t){var n=a(e,1),r=a(t,1);return n!==r?n-r:0===n?t[1]-e[1]:1===n?e[0]-t[0]:2===n?e[1]-t[1]:t[0]-e[0]}return function(a){var u,l,c,f,d,h,p,g,v,y,m,b=a,_=of(),w={point:x,lineStart:function(){w.point=S,l&&l.push(c=[]);y=!0,v=!1,p=g=NaN},lineEnd:function(){u&&(S(f,d),h&&v&&_.rejoin(),u.push(_.result()));w.point=x,v&&b.lineEnd()},polygonStart:function(){b=_,u=[],l=[],m=!0},polygonEnd:function(){var t=function(){for(var t=0,n=0,o=l.length;nr&&(d-i)*(r-a)>(h-a)*(e-i)&&++t:h<=r&&(d-i)*(r-a)<(h-a)*(e-i)&&--t;return t}(),n=m&&t,o=(u=ne(u)).length;(n||o)&&(a.polygonStart(),n&&(a.lineStart(),i(null,null,1,a),a.lineEnd()),o&&uf(u,s,t,i,a),a.polygonEnd());b=a,u=l=c=null}};function x(e,t){o(e,t)&&b.point(e,t)}function S(i,a){var s=o(i,a);if(l&&c.push([i,a]),y)f=i,d=a,h=s,y=!1,s&&(b.lineStart(),b.point(i,a));else if(s&&v)b.point(i,a);else{var u=[p=Math.max(xf,Math.min(wf,p)),g=Math.max(xf,Math.min(wf,g))],_=[i=Math.max(xf,Math.min(wf,i)),a=Math.max(xf,Math.min(wf,a))];!function(e,t,n,r,o,i){var a,s=e[0],u=e[1],l=0,c=1,f=t[0]-s,d=t[1]-u;if(a=n-s,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=o-s,f||!(a<0)){if(a/=f,f<0){if(a>c)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>c)return;a>l&&(l=a)}else if(d>0){if(a0&&(e[0]=s+l*f,e[1]=u+l*d),c<1&&(t[0]=s+c*f,t[1]=u+c*d),!0}}}}}(u,_,e,t,n,r)?s&&(b.lineStart(),b.point(i,a),m=!1):(v||(b.lineStart(),b.point(u[0],u[1])),b.point(_[0],_[1]),s||b.lineEnd(),m=!1)}p=i,g=a,v=s}return w}}function Af(){var e,t,n,r=0,o=0,i=960,a=500;return n={stream:function(n){return e&&t===n?e:e=Sf(r,o,i,a)(t=n)},extent:function(s){return arguments.length?(r=+s[0][0],o=+s[0][1],i=+s[1][0],a=+s[1][1],e=t=null,n):[[r,o],[i,a]]}}}var Ef={sphere:Sl,point:Sl,lineStart:function(){Ef.point=Rf,Ef.lineEnd=Cf},lineEnd:Sl,polygonStart:Sl,polygonEnd:Sl};function Cf(){Ef.point=Ef.lineEnd=Sl}function Rf(e,t){mf=e*=al,bf=vl(t*=al),_f=cl(t),Ef.point=Of}function Of(e,t){e*=al;var n=vl(t*=al),r=cl(t),o=sl(e-mf),i=cl(o),a=r*vl(o),s=_f*n-bf*r*i,u=bf*n+_f*r*i;yf.add(ll(ml(a*a+s*s),u)),mf=e,bf=n,_f=r}function Tf(e){return yf=new S,Tl(e,Ef),+yf}var kf=[null,null],Mf={type:"LineString",coordinates:kf};function Pf(e,t){return kf[0]=e,kf[1]=t,Tf(Mf)}var If={Feature:function(e,t){return Df(e.geometry,t)},FeatureCollection:function(e,t){for(var n=e.features,r=-1,o=n.length;++r0&&(o=Pf(e[i],e[i-1]))>0&&n<=o&&r<=o&&(n+r-o)*(1-Math.pow((n-r)/o,2))Ju})).map(u)).concat((0,ce.A)(fl(i/h)*h,o,h).filter((function(e){return sl(e%g)>Ju})).map(l))}return y.lines=function(){return m().map((function(e){return{type:"LineString",coordinates:e}}))},y.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(f(a).slice(1),c(n).reverse().slice(1),f(s).reverse().slice(1))]}},y.extent=function(e){return arguments.length?y.extentMajor(e).extentMinor(e):y.extentMinor()},y.extentMajor=function(e){return arguments.length?(r=+e[0][0],n=+e[1][0],s=+e[0][1],a=+e[1][1],r>n&&(e=r,r=n,n=e),s>a&&(e=s,s=a,a=e),y.precision(v)):[[r,s],[n,a]]},y.extentMinor=function(n){return arguments.length?(t=+n[0][0],e=+n[1][0],i=+n[0][1],o=+n[1][1],t>e&&(n=t,t=e,e=n),i>o&&(n=i,i=o,o=n),y.precision(v)):[[t,i],[e,o]]},y.step=function(e){return arguments.length?y.stepMajor(e).stepMinor(e):y.stepMinor()},y.stepMajor=function(e){return arguments.length?(p=+e[0],g=+e[1],y):[p,g]},y.stepMinor=function(e){return arguments.length?(d=+e[0],h=+e[1],y):[d,h]},y.precision=function(d){return arguments.length?(v=+d,u=Vf(i,o,90),l=$f(t,e,v),c=Vf(s,a,90),f=$f(r,n,v),y):v},y.extentMajor([[-180,-90+Ju],[180,90-Ju]]).extentMinor([[-180,-80-Ju],[180,80+Ju]])}function Wf(){return Hf()()}function qf(e,t){var n=e[0]*al,r=e[1]*al,o=t[0]*al,i=t[1]*al,a=cl(r),s=vl(r),u=cl(i),l=vl(i),c=a*cl(n),f=a*vl(n),d=u*cl(o),h=u*vl(o),p=2*wl(ml(xl(i-r)+a*u*xl(o-n))),g=vl(p),v=p?function(e){var t=vl(e*=p)/g,n=vl(p-e)/g,r=n*c+t*d,o=n*f+t*h,i=n*s+t*l;return[ll(o,r)*il,ll(i,ml(r*r+o*o))*il]}:function(){return[n*il,r*il]};return v.distance=p,v}const Gf=e=>e;var Yf,Xf,Kf,Zf,Qf=new S,Jf=new S,ed={point:Sl,lineStart:Sl,lineEnd:Sl,polygonStart:function(){ed.lineStart=td,ed.lineEnd=od},polygonEnd:function(){ed.lineStart=ed.lineEnd=ed.point=Sl,Qf.add(sl(Jf)),Jf=new S},result:function(){var e=Qf/2;return Qf=new S,e}};function td(){ed.point=nd}function nd(e,t){ed.point=rd,Yf=Kf=e,Xf=Zf=t}function rd(e,t){Jf.add(Zf*e-Kf*t),Kf=e,Zf=t}function od(){rd(Yf,Xf)}const id=ed;var ad=1/0,sd=ad,ud=-ad,ld=ud,cd={point:function(e,t){eud&&(ud=e);tld&&(ld=t)},lineStart:Sl,lineEnd:Sl,polygonStart:Sl,polygonEnd:Sl,result:function(){var e=[[ad,sd],[ud,ld]];return ud=ld=-(sd=ad=1/0),e}};const fd=cd;var dd,hd,pd,gd,vd=0,yd=0,md=0,bd=0,_d=0,wd=0,xd=0,Sd=0,Ad=0,Ed={point:Cd,lineStart:Rd,lineEnd:kd,polygonStart:function(){Ed.lineStart=Md,Ed.lineEnd=Pd},polygonEnd:function(){Ed.point=Cd,Ed.lineStart=Rd,Ed.lineEnd=kd},result:function(){var e=Ad?[xd/Ad,Sd/Ad]:wd?[bd/wd,_d/wd]:md?[vd/md,yd/md]:[NaN,NaN];return vd=yd=md=bd=_d=wd=xd=Sd=Ad=0,e}};function Cd(e,t){vd+=e,yd+=t,++md}function Rd(){Ed.point=Od}function Od(e,t){Ed.point=Td,Cd(pd=e,gd=t)}function Td(e,t){var n=e-pd,r=t-gd,o=ml(n*n+r*r);bd+=o*(pd+e)/2,_d+=o*(gd+t)/2,wd+=o,Cd(pd=e,gd=t)}function kd(){Ed.point=Cd}function Md(){Ed.point=Id}function Pd(){Nd(dd,hd)}function Id(e,t){Ed.point=Nd,Cd(dd=pd=e,hd=gd=t)}function Nd(e,t){var n=e-pd,r=t-gd,o=ml(n*n+r*r);bd+=o*(pd+e)/2,_d+=o*(gd+t)/2,wd+=o,xd+=(o=gd*e-pd*t)*(pd+e),Sd+=o*(gd+t),Ad+=3*o,Cd(pd=e,gd=t)}const Dd=Ed;function Ld(e){this._context=e}Ld.prototype={_radius:4.5,pointRadius:function(e){return this._radius=e,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(e,t){switch(this._point){case 0:this._context.moveTo(e,t),this._point=1;break;case 1:this._context.lineTo(e,t);break;default:this._context.moveTo(e+this._radius,t),this._context.arc(e,t,this._radius,0,ol)}},result:Sl};var Fd,jd,Ud,zd,Bd,Vd=new S,$d={point:Sl,lineStart:function(){$d.point=Hd},lineEnd:function(){Fd&&Wd(jd,Ud),$d.point=Sl},polygonStart:function(){Fd=!0},polygonEnd:function(){Fd=null},result:function(){var e=+Vd;return Vd=new S,e}};function Hd(e,t){$d.point=Wd,jd=zd=e,Ud=Bd=t}function Wd(e,t){zd-=e,Bd-=t,Vd.add(ml(zd*zd+Bd*Bd)),zd=e,Bd=t}const qd=$d;let Gd,Yd,Xd,Kd;class Zd{constructor(e){this._append=null==e?Qd:function(e){const t=Math.floor(e);if(!(t>=0))throw new RangeError(`invalid digits: ${e}`);if(t>15)return Qd;if(t!==Gd){const e=10**t;Gd=t,Yd=function(t){let n=1;this._+=t[0];for(const r=t.length;n=0))throw new RangeError(`invalid digits: ${e}`);o=t}return null===t&&(r=new Zd(o)),a},a.projection(e).digits(o).context(t)}function eh(e){return{stream:th(e)}}function th(e){return function(t){var n=new nh;for(var r in e)n[r]=e[r];return n.stream=t,n}}function nh(){}function rh(e,t,n){var r=e.clipExtent&&e.clipExtent();return e.scale(150).translate([0,0]),null!=r&&e.clipExtent(null),Tl(n,e.stream(fd)),t(fd.result()),null!=r&&e.clipExtent(r),e}function oh(e,t,n){return rh(e,(function(n){var r=t[1][0]-t[0][0],o=t[1][1]-t[0][1],i=Math.min(r/(n[1][0]-n[0][0]),o/(n[1][1]-n[0][1])),a=+t[0][0]+(r-i*(n[1][0]+n[0][0]))/2,s=+t[0][1]+(o-i*(n[1][1]+n[0][1]))/2;e.scale(150*i).translate([a,s])}),n)}function ih(e,t,n){return oh(e,[[0,0],t],n)}function ah(e,t,n){return rh(e,(function(n){var r=+t,o=r/(n[1][0]-n[0][0]),i=(r-o*(n[1][0]+n[0][0]))/2,a=-o*n[0][1];e.scale(150*o).translate([i,a])}),n)}function sh(e,t,n){return rh(e,(function(n){var r=+t,o=r/(n[1][1]-n[0][1]),i=-o*n[0][0],a=(r-o*(n[1][1]+n[0][1]))/2;e.scale(150*o).translate([i,a])}),n)}nh.prototype={constructor:nh,point:function(e,t){this.stream.point(e,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var uh=16,lh=cl(30*al);function ch(e,t){return+t?function(e,t){function n(r,o,i,a,s,u,l,c,f,d,h,p,g,v){var y=l-r,m=c-o,b=y*y+m*m;if(b>4*t&&g--){var _=a+d,w=s+h,x=u+p,S=ml(_*_+w*w+x*x),A=wl(x/=S),E=sl(sl(x)-1)t||sl((y*T+m*k)/b-.5)>.3||a*d+s*h+u*p2?e[2]%360*al:0,T()):[v*il,y*il,m*il]},R.angle=function(e){return arguments.length?(b=e%360*al,T()):b*il},R.reflectX=function(e){return arguments.length?(_=e?-1:1,T()):_<0},R.reflectY=function(e){return arguments.length?(w=e?-1:1,T()):w<0},R.precision=function(e){return arguments.length?(a=ch(s,C=e*e),k()):ml(C)},R.fitExtent=function(e,t){return oh(R,e,t)},R.fitSize=function(e,t){return ih(R,e,t)},R.fitWidth=function(e,t){return ah(R,e,t)},R.fitHeight=function(e,t){return sh(R,e,t)},function(){return t=e.apply(this,arguments),R.invert=t.invert&&O,T()}}function gh(e){var t=0,n=tl/3,r=ph(e),o=r(t,n);return o.parallels=function(e){return arguments.length?r(t=e[0]*al,n=e[1]*al):[t*il,n*il]},o}function vh(e,t){var n=vl(e),r=(n+vl(t))/2;if(sl(r)=.12&&o<.234&&r>=-.425&&r<-.214?s:o>=.166&&o<.234&&r>=-.214&&r<-.115?u:a).invert(e)},c.stream=function(n){return e&&t===n?e:e=function(e){var t=e.length;return{point:function(n,r){for(var o=-1;++o0?t<-nl+Ju&&(t=-nl+Ju):t>nl-Ju&&(t=nl-Ju);var n=o/gl(Th(t),r);return[n*vl(r*e),o-n*cl(r*e)]}return i.invert=function(e,t){var n=o-t,i=yl(r)*ml(e*e+n*n),a=ll(e,sl(n))*yl(n);return n*r<0&&(a-=tl*yl(e)*yl(n)),[a/r,2*ul(gl(o/i,1/r))-nl]},i}function Mh(){return gh(kh).scale(109.5).parallels([30,30])}function Ph(e,t){return[e,t]}function Ih(){return hh(Ph).scale(152.63)}function Nh(e,t){var n=cl(e),r=e===t?vl(e):(n-cl(t))/(t-e),o=n/r+e;if(sl(r)2?e[2]+90:90]):[(e=n())[0],e[1],e[2]-90]},n([0,0,90]).scale(159.155)}function ep(e,t){return e.parent===t.parent?1:2}function tp(e,t){return e+t.x}function np(e,t){return Math.max(e,t.y)}function rp(){var e=ep,t=1,n=1,r=!1;function o(o){var i,a=0;o.eachAfter((function(t){var n=t.children;n?(t.x=function(e){return e.reduce(tp,0)/e.length}(n),t.y=function(e){return 1+e.reduce(np,0)}(n)):(t.x=i?a+=e(t,i):0,t.y=0,i=t)}));var s=function(e){for(var t;t=e.children;)e=t[0];return e}(o),u=function(e){for(var t;t=e.children;)e=t[t.length-1];return e}(o),l=s.x-e(s,u)/2,c=u.x+e(u,s)/2;return o.eachAfter(r?function(e){e.x=(e.x-o.x)*t,e.y=(o.y-e.y)*n}:function(e){e.x=(e.x-l)/(c-l)*t,e.y=(1-(o.y?e.y/o.y:1))*n})}return o.separation=function(t){return arguments.length?(e=t,o):e},o.size=function(e){return arguments.length?(r=!1,t=+e[0],n=+e[1],o):r?null:[t,n]},o.nodeSize=function(e){return arguments.length?(r=!0,t=+e[0],n=+e[1],o):r?[t,n]:null},o}function op(e){var t=0,n=e.children,r=n&&n.length;if(r)for(;--r>=0;)t+=n[r].value;else t=1;e.value=t}function ip(e,t){e instanceof Map?(e=[void 0,e],void 0===t&&(t=sp)):void 0===t&&(t=ap);for(var n,r,o,i,a,s=new cp(e),u=[s];n=u.pop();)if((o=t(n.data))&&(a=(o=Array.from(o)).length))for(n.children=o,i=a-1;i>=0;--i)u.push(r=o[i]=new cp(o[i])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(lp)}function ap(e){return e.children}function sp(e){return Array.isArray(e)?e[1]:null}function up(e){void 0!==e.data.value&&(e.value=e.data.value),e.data=e.data.data}function lp(e){var t=0;do{e.height=t}while((e=e.parent)&&e.height<++t)}function cp(e){this.data=e,this.depth=this.height=0,this.parent=null}function fp(e){return null==e?null:dp(e)}function dp(e){if("function"!==typeof e)throw new Error;return e}function hp(){return 0}function pp(e){return function(){return e}}Bh.invert=function(e,t){for(var n,r=t,o=r*r,i=o*o*o,a=0;a<12&&(i=(o=(r-=n=(r*(Lh+Fh*o+i*(jh+Uh*o))-t)/(Lh+3*Fh*o+i*(7*jh+9*Uh*o)))*r)*o*o,!(sl(n)Ju&&--o>0);return[e/(.8707+(i=r*r)*(i*(i*i*i*(.003971-.001529*i)-.013791)-.131979)),r]},Yh.invert=wh(wl),Kh.invert=wh((function(e){return 2*ul(e)})),Qh.invert=function(e,t){return[-t,2*ul(dl(e))-nl]},cp.prototype=ip.prototype={constructor:cp,count:function(){return this.eachAfter(op)},each:function(e,t){let n=-1;for(const r of this)e.call(t,r,++n,this);return this},eachAfter:function(e,t){for(var n,r,o,i=this,a=[i],s=[],u=-1;i=a.pop();)if(s.push(i),n=i.children)for(r=0,o=n.length;r=0;--r)i.push(n[r]);return this},find:function(e,t){let n=-1;for(const r of this)if(e.call(t,r,++n,this))return r},sum:function(e){return this.eachAfter((function(t){for(var n=+e(t.data)||0,r=t.children,o=r&&r.length;--o>=0;)n+=r[o].value;t.value=n}))},sort:function(e){return this.eachBefore((function(t){t.children&&t.children.sort(e)}))},path:function(e){for(var t=this,n=function(e,t){if(e===t)return e;var n=e.ancestors(),r=t.ancestors(),o=null;e=n.pop(),t=r.pop();for(;e===t;)o=e,e=n.pop(),t=r.pop();return o}(t,e),r=[t];t!==n;)t=t.parent,r.push(t);for(var o=r.length;e!==n;)r.splice(o,0,e),e=e.parent;return r},ancestors:function(){for(var e=this,t=[e];e=e.parent;)t.push(e);return t},descendants:function(){return Array.from(this)},leaves:function(){var e=[];return this.eachBefore((function(t){t.children||e.push(t)})),e},links:function(){var e=this,t=[];return e.each((function(n){n!==e&&t.push({source:n.parent,target:n})})),t},copy:function(){return ip(this).eachBefore(up)},[Symbol.iterator]:function*(){var e,t,n,r,o=this,i=[o];do{for(e=i.reverse(),i=[];o=e.pop();)if(yield o,t=o.children)for(n=0,r=t.length;n(e=(gp*e+vp)%yp)/yp}function bp(e){return _p(e,mp())}function _p(e,t){for(var n,r,o=0,i=(e=function(e,t){let n,r,o=e.length;for(;o;)r=t()*o--|0,n=e[o],e[o]=e[r],e[r]=n;return e}(Array.from(e),t)).length,a=[];o0&&n*n>r*r+o*o}function Ap(e,t){for(var n=0;n1e-6?(R+Math.sqrt(R*R-4*C*O))/(2*C):O/R);return{x:r+x+S*T,y:o+A+E*T,r:T}}function Op(e,t,n){var r,o,i,a,s=e.x-t.x,u=e.y-t.y,l=s*s+u*u;l?(o=t.r+n.r,o*=o,a=e.r+n.r,o>(a*=a)?(r=(l+a-o)/(2*l),i=Math.sqrt(Math.max(0,a/l-r*r)),n.x=e.x-r*s-i*u,n.y=e.y-r*u+i*s):(r=(l+o-a)/(2*l),i=Math.sqrt(Math.max(0,o/l-r*r)),n.x=t.x+r*s-i*u,n.y=t.y+r*u+i*s)):(n.x=t.x+n.r,n.y=t.y)}function Tp(e,t){var n=e.r+t.r-1e-6,r=t.x-e.x,o=t.y-e.y;return n>0&&n*n>r*r+o*o}function kp(e){var t=e._,n=e.next._,r=t.r+n.r,o=(t.x*n.r+n.x*t.r)/r,i=(t.y*n.r+n.y*t.r)/r;return o*o+i*i}function Mp(e){this._=e,this.next=null,this.previous=null}function Pp(e,t){if(!(i=(e=function(e){return"object"===typeof e&&"length"in e?e:Array.from(e)}(e)).length))return 0;var n,r,o,i,a,s,u,l,c,f,d;if((n=e[0]).x=0,n.y=0,!(i>1))return n.r;if(r=e[1],n.x=-r.r,r.x=n.r,r.y=0,!(i>2))return n.r+r.r;Op(r,n,o=e[2]),n=new Mp(n),r=new Mp(r),o=new Mp(o),n.next=o.previous=r,r.next=n.previous=o,o.next=r.previous=n;e:for(u=3;ufunction(e){e=`${e}`;let t=e.length;Xp(e,t-1)&&!Xp(e,t-2)&&(e=e.slice(0,-1));return"/"===e[0]?e:`/${e}`}(e(t,n,r)))),n=t.map(Yp),o=new Set(t).add("");for(const e of n)o.has(e)||(o.add(e),t.push(e),n.push(Yp(e)),d.push(Hp));h=(e,n)=>t[n],p=(e,t)=>n[t]}for(a=0,o=d.length;a=0&&(l=d[e]).data===Hp;--e)l.data=null}if(s.parent=Vp,s.eachBefore((function(e){e.depth=e.parent.depth+1,--o})).eachBefore(lp),s.parent=null,o>0)throw new Error("cycle");return s}return r.id=function(e){return arguments.length?(t=fp(e),r):t},r.parentId=function(e){return arguments.length?(n=fp(e),r):n},r.path=function(t){return arguments.length?(e=fp(t),r):e},r}function Yp(e){let t=e.length;if(t<2)return"";for(;--t>1&&!Xp(e,t););return e.slice(0,t)}function Xp(e,t){if("/"===e[t]){let n=0;for(;t>0&&"\\"===e[--t];)++n;if(0===(1&n))return!0}return!1}function Kp(e,t){return e.parent===t.parent?1:2}function Zp(e){var t=e.children;return t?t[0]:e.t}function Qp(e){var t=e.children;return t?t[t.length-1]:e.t}function Jp(e,t,n){var r=n/(t.i-e.i);t.c-=r,t.s+=n,e.c+=r,t.z+=n,t.m+=n}function eg(e,t,n){return e.a.parent===t.parent?e.a:n}function tg(e,t){this._=e,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=t}function ng(){var e=Kp,t=1,n=1,r=null;function o(o){var u=function(e){for(var t,n,r,o,i,a=new tg(e,0),s=[a];t=s.pop();)if(r=t._.children)for(t.children=new Array(i=r.length),o=i-1;o>=0;--o)s.push(n=t.children[o]=new tg(r[o],o)),n.parent=t;return(a.parent=new tg(null,0)).children=[a],a}(o);if(u.eachAfter(i),u.parent.m=-u.z,u.eachBefore(a),r)o.eachBefore(s);else{var l=o,c=o,f=o;o.eachBefore((function(e){e.xc.x&&(c=e),e.depth>f.depth&&(f=e)}));var d=l===c?1:e(l,c)/2,h=d-l.x,p=t/(c.x+d+h),g=n/(f.depth||1);o.eachBefore((function(e){e.x=(e.x+h)*p,e.y=e.depth*g}))}return o}function i(t){var n=t.children,r=t.parent.children,o=t.i?r[t.i-1]:null;if(n){!function(e){for(var t,n=0,r=0,o=e.children,i=o.length;--i>=0;)(t=o[i]).z+=n,t.m+=n,n+=t.s+(r+=t.c)}(t);var i=(n[0].z+n[n.length-1].z)/2;o?(t.z=o.z+e(t._,o._),t.m=t.z-i):t.z=i}else o&&(t.z=o.z+e(t._,o._));t.parent.A=function(t,n,r){if(n){for(var o,i=t,a=t,s=n,u=i.parent.children[0],l=i.m,c=a.m,f=s.m,d=u.m;s=Qp(s),i=Zp(i),s&&i;)u=Zp(u),(a=Qp(a)).a=t,(o=s.z+f-i.z-l+e(s._,i._))>0&&(Jp(eg(s,t,r),t,o),l+=o,c+=o),f+=s.m,l+=i.m,d+=u.m,c+=a.m;s&&!Qp(a)&&(a.t=s,a.m+=f-c),i&&!Zp(u)&&(u.t=i,u.m+=l-d,r=t)}return r}(t,o,t.parent.A||r[0])}function a(e){e._.x=e.z+e.parent.m,e.m+=e.parent.m}function s(e){e.x*=t,e.y=e.depth*n}return o.separation=function(t){return arguments.length?(e=t,o):e},o.size=function(e){return arguments.length?(r=!1,t=+e[0],n=+e[1],o):r?null:[t,n]},o.nodeSize=function(e){return arguments.length?(r=!0,t=+e[0],n=+e[1],o):r?[t,n]:null},o}function rg(e,t,n,r,o){for(var i,a=e.children,s=-1,u=a.length,l=e.value&&(o-n)/e.value;++sd&&(d=s),v=c*c*g,(h=Math.max(d/v,v/f))>p){c-=s;break}p=h}y.push(a={value:c,dice:u1?t:1)},n}(og);function sg(){var e=ag,t=!1,n=1,r=1,o=[0],i=hp,a=hp,s=hp,u=hp,l=hp;function c(e){return e.x0=e.y0=0,e.x1=n,e.y1=r,e.eachBefore(f),o=[0],t&&e.eachBefore(Up),e}function f(t){var n=o[t.depth],r=t.x0+n,c=t.y0+n,f=t.x1-n,d=t.y1-n;f=n-1){var c=s[t];return c.x0=o,c.y0=i,c.x1=a,void(c.y1=u)}var f=l[t],d=r/2+f,h=t+1,p=n-1;for(;h>>1;l[g]u-i){var m=r?(o*y+a*v)/r:a;e(t,h,v,o,i,m,u),e(h,n,y,m,i,a,u)}else{var b=r?(i*y+u*v)/r:u;e(t,h,v,o,i,a,b),e(h,n,y,o,b,a,u)}}(0,u,e.value,t,n,r,o)}function lg(e,t,n,r,o){(1&e.depth?rg:zp)(e,t,n,r,o)}const cg=function e(t){function n(e,n,r,o,i){if((a=e._squarify)&&a.ratio===t)for(var a,s,u,l,c,f=-1,d=a.length,h=e.value;++f1?t:1)},n}(og);var fg=n(68079),dg=n(86160),hg=n(19804),pg=n(58172);function gg(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}var vg=n(84709);function yg(e,t){var n=(0,vg.lG)(+e,+t);return function(e){var t=n(e);return t-360*Math.floor(t/360)}}var mg=n(10128),bg=n(34287),_g=n(49770);function wg(e){return((e=Math.exp(e))+1/e)/2}const xg=function e(t,n,r){function o(e,o){var i,a,s=e[0],u=e[1],l=e[2],c=o[0],f=o[1],d=o[2],h=c-s,p=f-u,g=h*h+p*p;if(g<1e-12)a=Math.log(d/l)/t,i=function(e){return[s+e*h,u+e*p,l*Math.exp(t*e*a)]};else{var v=Math.sqrt(g),y=(d*d-l*l+r*g)/(2*l*n*v),m=(d*d-l*l-r*g)/(2*d*n*v),b=Math.log(Math.sqrt(y*y+1)-y),_=Math.log(Math.sqrt(m*m+1)-m);a=(_-b)/t,i=function(e){var r=e*a,o=wg(b),i=l/(n*v)*(o*function(e){return((e=Math.exp(2*e))-1)/(e+1)}(t*r+b)-function(e){return((e=Math.exp(e))-1/e)/2}(b));return[s+i*h,u+i*p,l*o/wg(t*r+b)]}}return i.duration=1e3*a*t/Math.SQRT2,i}return o.rho=function(t){var n=Math.max(.001,+t),r=n*n;return e(n,r,r*r)},o}(Math.SQRT2,2,4);function Sg(e){return function(t,n){var r=e((t=(0,_r.KI)(t)).h,(n=(0,_r.KI)(n)).h),o=(0,vg.Ay)(t.s,n.s),i=(0,vg.Ay)(t.l,n.l),a=(0,vg.Ay)(t.opacity,n.opacity);return function(e){return t.h=r(e),t.s=o(e),t.l=i(e),t.opacity=a(e),t+""}}}const Ag=Sg(vg.lG);var Eg=Sg(vg.Ay);function Cg(e,t){var n=(0,vg.Ay)((e=mi(e)).l,(t=mi(t)).l),r=(0,vg.Ay)(e.a,t.a),o=(0,vg.Ay)(e.b,t.b),i=(0,vg.Ay)(e.opacity,t.opacity);return function(t){return e.l=n(t),e.a=r(t),e.b=o(t),e.opacity=i(t),e+""}}function Rg(e){return function(t,n){var r=e((t=Ci(t)).h,(n=Ci(n)).h),o=(0,vg.Ay)(t.c,n.c),i=(0,vg.Ay)(t.l,n.l),a=(0,vg.Ay)(t.opacity,n.opacity);return function(e){return t.h=r(e),t.c=o(e),t.l=i(e),t.opacity=a(e),t+""}}}const Og=Rg(vg.lG);var Tg=Rg(vg.Ay);function kg(e){return function t(n){function r(t,r){var o=e((t=Fi(t)).h,(r=Fi(r)).h),i=(0,vg.Ay)(t.s,r.s),a=(0,vg.Ay)(t.l,r.l),s=(0,vg.Ay)(t.opacity,r.opacity);return function(e){return t.h=o(e),t.s=i(e),t.l=a(Math.pow(e,n)),t.opacity=s(e),t+""}}return n=+n,r.gamma=t,r}(1)}const Mg=kg(vg.lG);var Pg=kg(vg.Ay),Ig=n(23104);function Ng(e,t){for(var n=new Array(t),r=0;r1&&Fg(e[n[o-2]],e[n[o-1]],e[r])<=0;)--o;n[o++]=r}return n.slice(0,o)}function zg(e){if((n=e.length)<3)return null;var t,n,r=new Array(n),o=new Array(n);for(t=0;t=0;--t)l.push(e[r[i[t]][2]]);for(t=+s;ts!==l>s&&a<(u-n)*(s-r)/(l-r)+n&&(c=!c),u=n,l=r;return c}function Vg(e){for(var t,n,r=-1,o=e.length,i=e[o-1],a=i[0],s=i[1],u=0;++r1);return e+n*i*Math.sqrt(-2*Math.log(o)/o)}}return n.source=e,n}($g),Gg=function e(t){var n=qg.source(t);function r(){var e=n.apply(this,arguments);return function(){return Math.exp(e())}}return r.source=e,r}($g),Yg=function e(t){function n(e){return(e=+e)<=0?()=>0:function(){for(var n=0,r=e;r>1;--r)n+=t();return n+r*t()}}return n.source=e,n}($g),Xg=function e(t){var n=Yg.source(t);function r(e){if(0===(e=+e))return t;var r=n(e);return function(){return r()/e}}return r.source=e,r}($g),Kg=function e(t){function n(e){return function(){return-Math.log1p(-t())/e}}return n.source=e,n}($g),Zg=function e(t){function n(e){if((e=+e)<0)throw new RangeError("invalid alpha");return e=1/-e,function(){return Math.pow(1-t(),e)}}return n.source=e,n}($g),Qg=function e(t){function n(e){if((e=+e)<0||e>1)throw new RangeError("invalid p");return function(){return Math.floor(t()+e)}}return n.source=e,n}($g),Jg=function e(t){function n(e){if((e=+e)<0||e>1)throw new RangeError("invalid p");return 0===e?()=>1/0:1===e?()=>1:(e=Math.log1p(-e),function(){return 1+Math.floor(Math.log1p(-t())/e)})}return n.source=e,n}($g),ev=function e(t){var n=qg.source(t)();function r(e,r){if((e=+e)<0)throw new RangeError("invalid k");if(0===e)return()=>0;if(r=null==r?1:+r,1===e)return()=>-Math.log1p(-t())*r;var o=(e<1?e+1:e)-1/3,i=1/(3*Math.sqrt(o)),a=e<1?()=>Math.pow(t(),1/e):()=>1;return function(){do{do{var e=n(),s=1+i*e}while(s<=0);s*=s*s;var u=1-t()}while(u>=1-.0331*e*e*e*e&&Math.log(u)>=.5*e*e+o*(1-s+Math.log(s)));return o*s*a()*r}}return r.source=e,r}($g),tv=function e(t){var n=ev.source(t);function r(e,t){var r=n(e),o=n(t);return function(){var e=r();return 0===e?0:e/(e+o())}}return r.source=e,r}($g),nv=function e(t){var n=Jg.source(t),r=tv.source(t);function o(e,t){return e=+e,(t=+t)>=1?()=>e:t<=0?()=>0:function(){for(var o=0,i=e,a=t;i*a>16&&i*(1-a)>16;){var s=Math.floor((i+1)*a),u=r(s,i-s+1)();u<=a?(o+=s,i-=s,a=(a-u)/(1-u)):(i=s-1,a/=u)}for(var l=a<.5,c=n(l?a:1-a),f=c(),d=0;f<=i;++d)f+=c();return o+(l?d:i-d)}}return o.source=e,o}($g),rv=function e(t){function n(e,n,r){var o;return 0===(e=+e)?o=e=>-Math.log(e):(e=1/e,o=t=>Math.pow(t,e)),n=null==n?0:+n,r=null==r?1:+r,function(){return n+r*o(-Math.log1p(-t()))}}return n.source=e,n}($g),ov=function e(t){function n(e,n){return e=null==e?0:+e,n=null==n?1:+n,function(){return e+n*Math.tan(Math.PI*t())}}return n.source=e,n}($g),iv=function e(t){function n(e,n){return e=null==e?0:+e,n=null==n?1:+n,function(){var r=t();return e+n*Math.log(r/(1-r))}}return n.source=e,n}($g),av=function e(t){var n=ev.source(t),r=nv.source(t);function o(e){return function(){for(var o=0,i=e;i>16;){var a=Math.floor(.875*i),s=n(a)();if(s>i)return o+r(a-1,i/s)();o+=a,i-=s}for(var u=-Math.log1p(-t()),l=0;u<=i;++l)u-=Math.log1p(-t());return o+l}}return o.source=e,o}($g),sv=1664525,uv=1013904223,lv=1/4294967296;function cv(e=Math.random()){let t=0|(0<=e&&e<1?e/lv:Math.abs(e));return()=>(t=sv*t+uv|0,lv*(t>>>0))}var fv=n(16199);function dv(e){for(var t=e.length/6|0,n=new Array(t),r=0;r(0,wr.Ik)(e[e.length-1]);var Ev=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(dv);const Cv=Av(Ev);var Rv=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(dv);const Ov=Av(Rv);var Tv=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(dv);const kv=Av(Tv);var Mv=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(dv);const Pv=Av(Mv);var Iv=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(dv);const Nv=Av(Iv);var Dv=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(dv);const Lv=Av(Dv);var Fv=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(dv);const jv=Av(Fv);var Uv=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(dv);const zv=Av(Uv);var Bv=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(dv);const Vv=Av(Bv);var $v=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(dv);const Hv=Av($v);var Wv=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(dv);const qv=Av(Wv);var Gv=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(dv);const Yv=Av(Gv);var Xv=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(dv);const Kv=Av(Xv);var Zv=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(dv);const Qv=Av(Zv);var Jv=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(dv);const ey=Av(Jv);var ty=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(dv);const ny=Av(ty);var ry=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(dv);const oy=Av(ry);var iy=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(dv);const ay=Av(iy);var sy=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(dv);const uy=Av(sy);var ly=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(dv);const cy=Av(ly);var fy=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(dv);const dy=Av(fy);var hy=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(dv);const py=Av(hy);var gy=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(dv);const vy=Av(gy);var yy=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(dv);const my=Av(yy);var by=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(dv);const _y=Av(by);var wy=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(dv);const xy=Av(wy);var Sy=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(dv);const Ay=Av(Sy);function Ey(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-e*(35.34-e*(2381.73-e*(6402.7-e*(7024.72-2710.57*e)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+e*(170.73+e*(52.82-e*(131.46-e*(176.58-67.37*e)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+e*(442.36-e*(2482.43-e*(6167.24-e*(6614.94-2475.67*e)))))))+")"}const Cy=Pg(Fi(300,.5,0),Fi(-240,.5,1));var Ry=Pg(Fi(-100,.75,.35),Fi(80,1.5,.8)),Oy=Pg(Fi(260,.75,.35),Fi(80,1.5,.8)),Ty=Fi();function ky(e){(e<0||e>1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return Ty.h=360*e-100,Ty.s=1.5-1.5*t,Ty.l=.8-.9*t,Ty+""}var My=(0,_r.Qh)(),Py=Math.PI/3,Iy=2*Math.PI/3;function Ny(e){var t;return e=(.5-e)*Math.PI,My.r=255*(t=Math.sin(e))*t,My.g=255*(t=Math.sin(e+Py))*t,My.b=255*(t=Math.sin(e+Iy))*t,My+""}function Dy(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+e*(1172.33-e*(10793.56-e*(33300.12-e*(38394.49-14825.05*e)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+e*(557.33+e*(1225.33-e*(3574.96-e*(1073.77+707.56*e)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+e*(3211.1-e*(15327.97-e*(27814-e*(22569.18-6838.66*e)))))))+")"}function Ly(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}const Fy=Ly(dv("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));var jy=Ly(dv("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Uy=Ly(dv("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),zy=Ly(dv("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function By(e){return bn(on(e).call(document.documentElement))}var Vy=0;function $y(){return new Hy}function Hy(){this._="@"+(++Vy).toString(36)}function Wy(e,t){return e.target&&(e=Rn(e),void 0===t&&(t=e.currentTarget),e=e.touches||[e]),Array.from(e,(e=>On(e,t)))}function qy(e){return"string"===typeof e?new vn([document.querySelectorAll(e)],[document.documentElement]):new vn([st(e)],gn)}function Gy(e){return function(){return e}}Hy.prototype=$y.prototype={constructor:Hy,get:function(e){for(var t=this._;!(t in e);)if(!(e=e.parentNode))return;return e[t]},set:function(e,t){return e[this._]=t},remove:function(e){return this._ in e&&delete e[this._]},toString:function(){return this._}};const Yy=Math.abs,Xy=Math.atan2,Ky=Math.cos,Zy=Math.max,Qy=Math.min,Jy=Math.sin,em=Math.sqrt,tm=1e-12,nm=Math.PI,rm=nm/2,om=2*nm;function im(e){return e>=1?rm:e<=-1?-rm:Math.asin(e)}function am(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(null==n)t=null;else{const e=Math.floor(n);if(!(e>=0))throw new RangeError(`invalid digits: ${n}`);t=e}return e},()=>new Wo(t)}function sm(e){return e.innerRadius}function um(e){return e.outerRadius}function lm(e){return e.startAngle}function cm(e){return e.endAngle}function fm(e){return e&&e.padAngle}function dm(e,t,n,r,o,i,a){var s=e-n,u=t-r,l=(a?i:-i)/em(s*s+u*u),c=l*u,f=-l*s,d=e+c,h=t+f,p=n+c,g=r+f,v=(d+p)/2,y=(h+g)/2,m=p-d,b=g-h,_=m*m+b*b,w=o-i,x=d*g-p*h,S=(b<0?-1:1)*em(Zy(0,w*w*_-x*x)),A=(x*b-m*S)/_,E=(-x*m-b*S)/_,C=(x*b+m*S)/_,R=(-x*m+b*S)/_,O=A-v,T=E-y,k=C-v,M=R-y;return O*O+T*T>k*k+M*M&&(A=C,E=R),{cx:A,cy:E,x01:-c,y01:-f,x11:A*(o/w-1),y11:E*(o/w-1)}}function hm(){var e=sm,t=um,n=Gy(0),r=null,o=lm,i=cm,a=fm,s=null,u=am(l);function l(){var l,c,f=+e.apply(this,arguments),d=+t.apply(this,arguments),h=o.apply(this,arguments)-rm,p=i.apply(this,arguments)-rm,g=Yy(p-h),v=p>h;if(s||(s=l=u()),dtm)if(g>om-tm)s.moveTo(d*Ky(h),d*Jy(h)),s.arc(0,0,d,h,p,!v),f>tm&&(s.moveTo(f*Ky(p),f*Jy(p)),s.arc(0,0,f,p,h,v));else{var y,m,b=h,_=p,w=h,x=p,S=g,A=g,E=a.apply(this,arguments)/2,C=E>tm&&(r?+r.apply(this,arguments):em(f*f+d*d)),R=Qy(Yy(d-f)/2,+n.apply(this,arguments)),O=R,T=R;if(C>tm){var k=im(C/f*Jy(E)),M=im(C/d*Jy(E));(S-=2*k)>tm?(w+=k*=v?1:-1,x-=k):(S=0,w=x=(h+p)/2),(A-=2*M)>tm?(b+=M*=v?1:-1,_-=M):(A=0,b=_=(h+p)/2)}var P=d*Ky(b),I=d*Jy(b),N=f*Ky(x),D=f*Jy(x);if(R>tm){var L,F=d*Ky(_),j=d*Jy(_),U=f*Ky(w),z=f*Jy(w);if(g1?0:e<-1?nm:Math.acos(e)}((B*$+V*H)/(em(B*B+V*V)*em($*$+H*H)))/2),q=em(L[0]*L[0]+L[1]*L[1]);O=Qy(R,(f-q)/(W-1)),T=Qy(R,(d-q)/(W+1))}else O=T=0}A>tm?T>tm?(y=dm(U,z,P,I,d,T,v),m=dm(F,j,N,D,d,T,v),s.moveTo(y.cx+y.x01,y.cy+y.y01),Ttm&&S>tm?O>tm?(y=dm(N,D,F,j,f,-O,v),m=dm(P,I,U,z,f,-O,v),s.lineTo(y.cx+y.x01,y.cy+y.y01),O=f;--d)s.point(y[d],m[d]);s.lineEnd(),s.areaEnd()}v&&(y[c]=+e(h,c,l),m[c]=+t(h,c,l),s.point(r?+r(h,c,l):y[c],n?+n(h,c,l):m[c]))}if(p)return s=null,p+""||null}function c(){return _m().defined(o).curve(a).context(i)}return e="function"===typeof e?e:void 0===e?mm:Gy(+e),t="function"===typeof t?t:Gy(void 0===t?0:+t),n="function"===typeof n?n:void 0===n?bm:Gy(+n),l.x=function(t){return arguments.length?(e="function"===typeof t?t:Gy(+t),r=null,l):e},l.x0=function(t){return arguments.length?(e="function"===typeof t?t:Gy(+t),l):e},l.x1=function(e){return arguments.length?(r=null==e?null:"function"===typeof e?e:Gy(+e),l):r},l.y=function(e){return arguments.length?(t="function"===typeof e?e:Gy(+e),n=null,l):t},l.y0=function(e){return arguments.length?(t="function"===typeof e?e:Gy(+e),l):t},l.y1=function(e){return arguments.length?(n=null==e?null:"function"===typeof e?e:Gy(+e),l):n},l.lineX0=l.lineY0=function(){return c().x(e).y(t)},l.lineY1=function(){return c().x(e).y(n)},l.lineX1=function(){return c().x(r).y(t)},l.defined=function(e){return arguments.length?(o="function"===typeof e?e:Gy(!!e),l):o},l.curve=function(e){return arguments.length?(a=e,null!=i&&(s=a(i)),l):a},l.context=function(e){return arguments.length?(null==e?i=s=null:s=a(i=e),l):i},l}function xm(e,t){return te?1:t>=e?0:NaN}function Sm(e){return e}function Am(){var e=Sm,t=xm,n=null,r=Gy(0),o=Gy(om),i=Gy(0);function a(a){var s,u,l,c,f,d=(a=gm(a)).length,h=0,p=new Array(d),g=new Array(d),v=+r.apply(this,arguments),y=Math.min(om,Math.max(-om,o.apply(this,arguments)-v)),m=Math.min(Math.abs(y)/d,i.apply(this,arguments)),b=m*(y<0?-1:1);for(s=0;s0&&(h+=f);for(null!=t?p.sort((function(e,n){return t(g[e],g[n])})):null!=n&&p.sort((function(e,t){return n(a[e],a[t])})),s=0,l=h?(y-d*b)/h:0;s0?f*l:0)+b,g[u]={data:a[u],index:s,value:f,startAngle:v,endAngle:c,padAngle:m};return g}return a.value=function(t){return arguments.length?(e="function"===typeof t?t:Gy(+t),a):e},a.sortValues=function(e){return arguments.length?(t=e,n=null,a):t},a.sort=function(e){return arguments.length?(n=e,t=null,a):n},a.startAngle=function(e){return arguments.length?(r="function"===typeof e?e:Gy(+e),a):r},a.endAngle=function(e){return arguments.length?(o="function"===typeof e?e:Gy(+e),a):o},a.padAngle=function(e){return arguments.length?(i="function"===typeof e?e:Gy(+e),a):i},a}vm.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}};var Em=Rm(ym);function Cm(e){this._curve=e}function Rm(e){function t(t){return new Cm(e(t))}return t._curve=e,t}function Om(e){var t=e.curve;return e.angle=e.x,delete e.x,e.radius=e.y,delete e.y,e.curve=function(e){return arguments.length?t(Rm(e)):t()._curve},e}function Tm(){return Om(_m().curve(Em))}function km(){var e=wm().curve(Em),t=e.curve,n=e.lineX0,r=e.lineX1,o=e.lineY0,i=e.lineY1;return e.angle=e.x,delete e.x,e.startAngle=e.x0,delete e.x0,e.endAngle=e.x1,delete e.x1,e.radius=e.y,delete e.y,e.innerRadius=e.y0,delete e.y0,e.outerRadius=e.y1,delete e.y1,e.lineStartAngle=function(){return Om(n())},delete e.lineX0,e.lineEndAngle=function(){return Om(r())},delete e.lineX1,e.lineInnerRadius=function(){return Om(o())},delete e.lineY0,e.lineOuterRadius=function(){return Om(i())},delete e.lineY1,e.curve=function(e){return arguments.length?t(Rm(e)):t()._curve},e}function Mm(e,t){return[(t=+t)*Math.cos(e-=Math.PI/2),t*Math.sin(e)]}Cm.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(e,t){this._curve.point(t*Math.sin(e),t*-Math.cos(e))}};class Pm{constructor(e,t){this._context=e,this._x=t}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,t,e,t):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+t)/2,e,this._y0,e,t)}this._x0=e,this._y0=t}}class Im{constructor(e){this._context=e}lineStart(){this._point=0}lineEnd(){}point(e,t){if(e=+e,t=+t,0===this._point)this._point=1;else{const n=Mm(this._x0,this._y0),r=Mm(this._x0,this._y0=(this._y0+t)/2),o=Mm(e,this._y0),i=Mm(e,t);this._context.moveTo(...n),this._context.bezierCurveTo(...r,...o,...i)}this._x0=e,this._y0=t}}function Nm(e){return new Pm(e,!0)}function Dm(e){return new Pm(e,!1)}function Lm(e){return new Im(e)}function Fm(e){return e.source}function jm(e){return e.target}function Um(e){let t=Fm,n=jm,r=mm,o=bm,i=null,a=null,s=am(u);function u(){let u;const l=pm.call(arguments),c=t.apply(this,l),f=n.apply(this,l);if(null==i&&(a=e(u=s())),a.lineStart(),l[0]=c,a.point(+r.apply(this,l),+o.apply(this,l)),l[0]=f,a.point(+r.apply(this,l),+o.apply(this,l)),a.lineEnd(),u)return a=null,u+""||null}return u.source=function(e){return arguments.length?(t=e,u):t},u.target=function(e){return arguments.length?(n=e,u):n},u.x=function(e){return arguments.length?(r="function"===typeof e?e:Gy(+e),u):r},u.y=function(e){return arguments.length?(o="function"===typeof e?e:Gy(+e),u):o},u.context=function(t){return arguments.length?(null==t?i=a=null:a=e(i=t),u):i},u}function zm(){return Um(Nm)}function Bm(){return Um(Dm)}function Vm(){const e=Um(Lm);return e.angle=e.x,delete e.x,e.radius=e.y,delete e.y,e}const $m=em(3),Hm={draw(e,t){const n=.59436*em(t+Qy(t/28,.75)),r=n/2,o=r*$m;e.moveTo(0,n),e.lineTo(0,-n),e.moveTo(-o,-r),e.lineTo(o,r),e.moveTo(-o,r),e.lineTo(o,-r)}},Wm={draw(e,t){const n=em(t/nm);e.moveTo(n,0),e.arc(0,0,n,0,om)}},qm={draw(e,t){const n=em(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Gm=em(1/3),Ym=2*Gm,Xm={draw(e,t){const n=em(t/Ym),r=n*Gm;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},Km={draw(e,t){const n=.62625*em(t);e.moveTo(0,-n),e.lineTo(n,0),e.lineTo(0,n),e.lineTo(-n,0),e.closePath()}},Zm={draw(e,t){const n=.87559*em(t-Qy(t/7,2));e.moveTo(-n,0),e.lineTo(n,0),e.moveTo(0,n),e.lineTo(0,-n)}},Qm={draw(e,t){const n=em(t),r=-n/2;e.rect(r,r,n,n)}},Jm={draw(e,t){const n=.4431*em(t);e.moveTo(n,n),e.lineTo(n,-n),e.lineTo(-n,-n),e.lineTo(-n,n),e.closePath()}},eb=Jy(nm/10)/Jy(7*nm/10),tb=Jy(om/10)*eb,nb=-Ky(om/10)*eb,rb={draw(e,t){const n=em(.8908130915292852*t),r=tb*n,o=nb*n;e.moveTo(0,-n),e.lineTo(r,o);for(let i=1;i<5;++i){const t=om*i/5,a=Ky(t),s=Jy(t);e.lineTo(s*n,-a*n),e.lineTo(a*r-s*o,s*r+a*o)}e.closePath()}},ob=em(3),ib={draw(e,t){const n=-em(t/(3*ob));e.moveTo(0,2*n),e.lineTo(-ob*n,-n),e.lineTo(ob*n,-n),e.closePath()}},ab=em(3),sb={draw(e,t){const n=.6824*em(t),r=n/2,o=n*ab/2;e.moveTo(0,-n),e.lineTo(o,r),e.lineTo(-o,r),e.closePath()}},ub=-.5,lb=em(3)/2,cb=1/em(12),fb=3*(cb/2+1),db={draw(e,t){const n=em(t/fb),r=n/2,o=n*cb,i=r,a=n*cb+n,s=-i,u=a;e.moveTo(r,o),e.lineTo(i,a),e.lineTo(s,u),e.lineTo(ub*r-lb*o,lb*r+ub*o),e.lineTo(ub*i-lb*a,lb*i+ub*a),e.lineTo(ub*s-lb*u,lb*s+ub*u),e.lineTo(ub*r+lb*o,ub*o-lb*r),e.lineTo(ub*i+lb*a,ub*a-lb*i),e.lineTo(ub*s+lb*u,ub*u-lb*s),e.closePath()}},hb={draw(e,t){const n=.6189*em(t-Qy(t/6,1.7));e.moveTo(-n,-n),e.lineTo(n,n),e.moveTo(-n,n),e.lineTo(n,-n)}},pb=[Wm,qm,Xm,Qm,rb,ib,db],gb=[Wm,Zm,hb,sb,Hm,Jm,Km];function vb(e,t){let n=null,r=am(o);function o(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return e="function"===typeof e?e:Gy(e||Wm),t="function"===typeof t?t:Gy(void 0===t?64:+t),o.type=function(t){return arguments.length?(e="function"===typeof t?t:Gy(t),o):e},o.size=function(e){return arguments.length?(t="function"===typeof e?e:Gy(+e),o):t},o.context=function(e){return arguments.length?(n=null==e?null:e,o):n},o}function yb(){}function mb(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function bb(e){this._context=e}function _b(e){return new bb(e)}function wb(e){this._context=e}function xb(e){return new wb(e)}function Sb(e){this._context=e}function Ab(e){return new Sb(e)}function Eb(e,t){this._basis=new bb(e),this._beta=t}bb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:mb(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:mb(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},wb.prototype={areaStart:yb,areaEnd:yb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:mb(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},Sb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:mb(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},Eb.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,o=e[0],i=t[0],a=e[n]-o,s=t[n]-i,u=-1;++u<=n;)r=u/n,this._basis.point(this._beta*e[u]+(1-this._beta)*(o+r*a),this._beta*t[u]+(1-this._beta)*(i+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(e,t){this._x.push(+e),this._y.push(+t)}};const Cb=function e(t){function n(e){return 1===t?new bb(e):new Eb(e,t)}return n.beta=function(t){return e(+t)},n}(.85);function Rb(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function Ob(e,t){this._context=e,this._k=(1-t)/6}Ob.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Rb(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:Rb(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const Tb=function e(t){function n(e){return new Ob(e,t)}return n.tension=function(t){return e(+t)},n}(0);function kb(e,t){this._context=e,this._k=(1-t)/6}kb.prototype={areaStart:yb,areaEnd:yb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:Rb(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const Mb=function e(t){function n(e){return new kb(e,t)}return n.tension=function(t){return e(+t)},n}(0);function Pb(e,t){this._context=e,this._k=(1-t)/6}Pb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Rb(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const Ib=function e(t){function n(e){return new Pb(e,t)}return n.tension=function(t){return e(+t)},n}(0);function Nb(e,t,n){var r=e._x1,o=e._y1,i=e._x2,a=e._y2;if(e._l01_a>tm){var s=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,u=3*e._l01_a*(e._l01_a+e._l12_a);r=(r*s-e._x0*e._l12_2a+e._x2*e._l01_2a)/u,o=(o*s-e._y0*e._l12_2a+e._y2*e._l01_2a)/u}if(e._l23_a>tm){var l=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,c=3*e._l23_a*(e._l23_a+e._l12_a);i=(i*l+e._x1*e._l23_2a-t*e._l12_2a)/c,a=(a*l+e._y1*e._l23_2a-n*e._l12_2a)/c}e._context.bezierCurveTo(r,o,i,a,e._x2,e._y2)}function Db(e,t){this._context=e,this._alpha=t}Db.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:Nb(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const Lb=function e(t){function n(e){return t?new Db(e,t):new Ob(e,0)}return n.alpha=function(t){return e(+t)},n}(.5);function Fb(e,t){this._context=e,this._alpha=t}Fb.prototype={areaStart:yb,areaEnd:yb,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:Nb(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const jb=function e(t){function n(e){return t?new Fb(e,t):new kb(e,0)}return n.alpha=function(t){return e(+t)},n}(.5);function Ub(e,t){this._context=e,this._alpha=t}Ub.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Nb(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}};const zb=function e(t){function n(e){return t?new Ub(e,t):new Pb(e,0)}return n.alpha=function(t){return e(+t)},n}(.5);function Bb(e){this._context=e}function Vb(e){return new Bb(e)}function $b(e){return e<0?-1:1}function Hb(e,t,n){var r=e._x1-e._x0,o=t-e._x1,i=(e._y1-e._y0)/(r||o<0&&-0),a=(n-e._y1)/(o||r<0&&-0),s=(i*o+a*r)/(r+o);return($b(i)+$b(a))*Math.min(Math.abs(i),Math.abs(a),.5*Math.abs(s))||0}function Wb(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function qb(e,t,n){var r=e._x0,o=e._y0,i=e._x1,a=e._y1,s=(i-r)/3;e._context.bezierCurveTo(r+s,o+s*t,i-s,a-s*n,i,a)}function Gb(e){this._context=e}function Yb(e){this._context=new Xb(e)}function Xb(e){this._context=e}function Kb(e){return new Gb(e)}function Zb(e){return new Yb(e)}function Qb(e){this._context=e}function Jb(e){var t,n,r=e.length-1,o=new Array(r),i=new Array(r),a=new Array(r);for(o[0]=0,i[0]=2,a[0]=e[0]+2*e[1],t=1;t=0;--t)o[t]=(a[t]-o[t+1])/i[t];for(i[r-1]=(e[r]+o[r-1])/2,t=0;t1)for(var n,r,o,i=1,a=e[t[0]],s=a.length;i=0;)n[t]=t;return n}function s_(e,t){return e[t]}function u_(e){const t=[];return t.key=e,t}function l_(){var e=Gy([]),t=a_,n=i_,r=s_;function o(o){var i,a,s=Array.from(e.apply(this,arguments),u_),u=s.length,l=-1;for(const e of o)for(i=0,++l;i0){for(var n,r,o,i=0,a=e[0].length;i0)for(var n,r,o,i,a,s,u=0,l=e[t[0]].length;u0?(r[0]=i,r[1]=i+=o):o<0?(r[1]=a,r[0]=a+=o):(r[0]=0,r[1]=o)}function d_(e,t){if((n=e.length)>0){for(var n,r=0,o=e[t[0]],i=o.length;r0&&(r=(n=e[t[0]]).length)>0){for(var n,r,o,i=0,a=1;ai&&(i=t,r=n);return r}function v_(e){var t=e.map(y_);return a_(e).sort((function(e,n){return t[e]-t[n]}))}function y_(e){for(var t,n=0,r=-1,o=e.length;++r=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}};var w_=n(37591),x_=n(32613),S_=n(55030),A_=n(13298),E_=n(54612),C_=n(55334),R_=n(78926),O_=n(75878),T_=n(24355),k_=n(526),M_=n(53705),P_=n(64398),I_="%Y-%m-%dT%H:%M:%S.%LZ";var N_=Date.prototype.toISOString?function(e){return e.toISOString()}:(0,M_.aL)(I_);const D_=N_;var L_=+new Date("2000-01-01T00:00:00.000Z")?function(e){var t=new Date(e);return isNaN(t)?null:t}:(0,M_.GY)(I_);const F_=L_;function j_(e,t,n){var r=new Vn,o=t;return null==t?(r.restart(e,t,n),r):(r._restart=r.restart,r.restart=function(e,t,n){t=+t,n=null==n?zn():+n,r._restart((function i(a){a+=o,r._restart(i,o+=t,n),e(a)}),t,n)},r.restart(e,t,n),r)}const U_=e=>()=>e;function z_(e,{sourceEvent:t,target:n,transform:r,dispatch:o}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:o}})}function B_(e,t,n){this.k=e,this.x=t,this.y=n}B_.prototype={constructor:B_,scale:function(e){return 1===e?this:new B_(this.k*e,this.x,this.y)},translate:function(e,t){return 0===e&0===t?this:new B_(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var V_=new B_(1,0,0);function $_(e){for(;!e.__zoom;)if(!(e=e.parentNode))return V_;return e.__zoom}function H_(e){e.stopImmediatePropagation()}function W_(e){e.preventDefault(),e.stopImmediatePropagation()}function q_(e){return(!e.ctrlKey||"wheel"===e.type)&&!e.button}function G_(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e).hasAttribute("viewBox")?[[(e=e.viewBox.baseVal).x,e.y],[e.x+e.width,e.y+e.height]]:[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]:[[0,0],[e.clientWidth,e.clientHeight]]}function Y_(){return this.__zoom||V_}function X_(e){return-e.deltaY*(1===e.deltaMode?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function K_(){return navigator.maxTouchPoints||"ontouchstart"in this}function Z_(e,t,n){var r=e.invertX(t[0][0])-n[0][0],o=e.invertX(t[1][0])-n[1][0],i=e.invertY(t[0][1])-n[0][1],a=e.invertY(t[1][1])-n[1][1];return e.translate(o>r?(r+o)/2:Math.min(0,r)||Math.max(0,o),a>i?(i+a)/2:Math.min(0,i)||Math.max(0,a))}function Q_(){var e,t,n,r=q_,o=G_,i=Z_,a=X_,s=K_,u=[0,1/0],l=[[-1/0,-1/0],[1/0,1/0]],c=250,f=xg,d=ot("start","zoom","end"),h=500,p=150,g=0,v=10;function y(e){e.property("__zoom",Y_).on("wheel.zoom",A,{passive:!1}).on("mousedown.zoom",E).on("dblclick.zoom",C).filter(s).on("touchstart.zoom",R).on("touchmove.zoom",O).on("touchend.zoom touchcancel.zoom",T).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function m(e,t){return(t=Math.max(u[0],Math.min(u[1],t)))===e.k?e:new B_(t,e.x,e.y)}function b(e,t,n){var r=t[0]-n[0]*e.k,o=t[1]-n[1]*e.k;return r===e.x&&o===e.y?e:new B_(e.k,r,o)}function _(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function w(e,t,n,r){e.on("start.zoom",(function(){x(this,arguments).event(r).start()})).on("interrupt.zoom end.zoom",(function(){x(this,arguments).event(r).end()})).tween("zoom",(function(){var e=this,i=arguments,a=x(e,i).event(r),s=o.apply(e,i),u=null==n?_(s):"function"===typeof n?n.apply(e,i):n,l=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),c=e.__zoom,d="function"===typeof t?t.apply(e,i):t,h=f(c.invert(u).concat(l/c.k),d.invert(u).concat(l/d.k));return function(e){if(1===e)e=d;else{var t=h(e),n=l/t[2];e=new B_(n,u[0]-t[0]*n,u[1]-t[1]*n)}a.zoom(null,e)}}))}function x(e,t,n){return!n&&e.__zooming||new S(e,t)}function S(e,t){this.that=e,this.args=t,this.active=0,this.sourceEvent=null,this.extent=o.apply(e,t),this.taps=0}function A(e,...t){if(r.apply(this,arguments)){var n=x(this,t).event(e),o=this.__zoom,s=Math.max(u[0],Math.min(u[1],o.k*Math.pow(2,a.apply(this,arguments)))),c=On(e);if(n.wheel)n.mouse[0][0]===c[0]&&n.mouse[0][1]===c[1]||(n.mouse[1]=o.invert(n.mouse[0]=c)),clearTimeout(n.wheel);else{if(o.k===s)return;n.mouse=[c,o.invert(c)],ur(this),n.start()}W_(e),n.wheel=setTimeout((function(){n.wheel=null,n.end()}),p),n.zoom("mouse",i(b(m(o,s),n.mouse[0],n.mouse[1]),n.extent,l))}}function E(e,...t){if(!n&&r.apply(this,arguments)){var o=e.currentTarget,a=x(this,t,!0).event(e),s=bn(e.view).on("mousemove.zoom",(function(e){if(W_(e),!a.moved){var t=e.clientX-c,n=e.clientY-f;a.moved=t*t+n*n>g}a.event(e).zoom("mouse",i(b(a.that.__zoom,a.mouse[0]=On(e,o),a.mouse[1]),a.extent,l))}),!0).on("mouseup.zoom",(function(e){s.on("mousemove.zoom mouseup.zoom",null),En(e.view,a.moved),W_(e),a.event(e).end()}),!0),u=On(e,o),c=e.clientX,f=e.clientY;An(e.view),H_(e),a.mouse=[u,this.__zoom.invert(u)],ur(this),a.start()}}function C(e,...t){if(r.apply(this,arguments)){var n=this.__zoom,a=On(e.changedTouches?e.changedTouches[0]:e,this),s=n.invert(a),u=n.k*(e.shiftKey?.5:2),f=i(b(m(n,u),a,s),o.apply(this,t),l);W_(e),c>0?bn(this).transition().duration(c).call(w,f,a,e):bn(this).call(y.transform,f,a,e)}}function R(n,...o){if(r.apply(this,arguments)){var i,a,s,u,l=n.touches,c=l.length,f=x(this,o,n.changedTouches.length===c).event(n);for(H_(n),a=0;a{"use strict";n.d(t,{q:()=>o});let r={};function o(){return r}},36847:(e,t,n)=>{"use strict";n.d(t,{m:()=>i});const r=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},o=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},i={p:o,P:(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],i=n[1],a=n[2];if(!a)return r(e,t);let s;switch(i){case"P":s=t.dateTime({width:"short"});break;case"PP":s=t.dateTime({width:"medium"});break;case"PPP":s=t.dateTime({width:"long"});break;default:s=t.dateTime({width:"full"})}return s.replace("{{date}}",r(i,t)).replace("{{time}}",o(a,t))}}},40215:(e,t,n)=>{"use strict";n.d(t,{G:()=>o});var r=n(2642);function o(e){const t=(0,r.a)(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}},76992:(e,t,n)=>{"use strict";n.d(t,{Ss:()=>u,ef:()=>a,xM:()=>s});const r=/^D+$/,o=/^Y+$/,i=["D","DD","YY","YYYY"];function a(e){return r.test(e)}function s(e){return o.test(e)}function u(e,t,n){const r=function(e,t,n){const r="Y"===e[0]?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}(e,t,n);if(console.warn(r),i.includes(e))throw new RangeError(r)}},2940:(e,t,n)=>{"use strict";n.d(t,{Cg:()=>i,F6:()=>c,Ks:()=>u,Nw:()=>l,_m:()=>s,my:()=>r,s0:()=>a,w4:()=>o});Math.pow(10,8);const r=6048e5,o=864e5,i=6e4,a=36e5,s=1e3,u=525600,l=43200,c=1440},35840:(e,t,n)=>{"use strict";function r(e,t){return e instanceof Date?new e.constructor(t):new Date(t)}n.d(t,{w:()=>r})},20514:(e,t,n)=>{"use strict";n.d(t,{m:()=>a});var r=n(2940),o=n(51730),i=n(40215);function a(e,t){const n=(0,o.o)(e),a=(0,o.o)(t),s=+n-(0,i.G)(n),u=+a-(0,i.G)(a);return Math.round((s-u)/r.w4)}},87991:(e,t,n)=>{"use strict";n.d(t,{GP:()=>I});var r=n(96519),o=n(82695),i=n(20514),a=n(39204),s=n(2642);function u(e){const t=(0,s.a)(e);return(0,i.m)(t,(0,a.D)(t))+1}var l=n(76974),c=n(65961),f=n(50016),d=n(29220);function h(e,t){return(e<0?"-":"")+Math.abs(e).toString().padStart(t,"0")}const p={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return h("yy"===t?r%100:r,t.length)},M(e,t){const n=e.getMonth();return"M"===t?String(n+1):h(n+1,2)},d:(e,t)=>h(e.getDate(),t.length),a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>h(e.getHours()%12||12,t.length),H:(e,t)=>h(e.getHours(),t.length),m:(e,t)=>h(e.getMinutes(),t.length),s:(e,t)=>h(e.getSeconds(),t.length),S(e,t){const n=t.length,r=e.getMilliseconds();return h(Math.trunc(r*Math.pow(10,n-3)),t.length)}},g="midnight",v="noon",y="morning",m="afternoon",b="evening",_="night",w={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){const t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:"year"})}return p.y(e,t)},Y:function(e,t,n,r){const o=(0,d.h)(e,r),i=o>0?o:1-o;if("YY"===t){return h(i%100,2)}return"Yo"===t?n.ordinalNumber(i,{unit:"year"}):h(i,t.length)},R:function(e,t){return h((0,c.p)(e),t.length)},u:function(e,t){return h(e.getFullYear(),t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return h(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return h(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return p.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return h(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const o=(0,f.N)(e,r);return"wo"===t?n.ordinalNumber(o,{unit:"week"}):h(o,t.length)},I:function(e,t,n){const r=(0,l.s)(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):h(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):p.d(e,t)},D:function(e,t,n){const r=u(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):h(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return h(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const o=e.getDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return h(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),o=0===r?7:r;switch(t){case"i":return String(o);case"ii":return h(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let o;switch(o=12===r?v:0===r?g:r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let o;switch(o=r>=17?b:r>=12?m:r>=4?y:_,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return p.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):p.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):h(r,t.length)},k:function(e,t,n){let r=e.getHours();return 0===r&&(r=24),"ko"===t?n.ordinalNumber(r,{unit:"hour"}):h(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):p.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):p.s(e,t)},S:function(e,t){return p.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return S(r);case"XXXX":case"XX":return A(r);default:return A(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return S(r);case"xxxx":case"xx":return A(r);default:return A(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+x(r,":");default:return"GMT"+A(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+x(r,":");default:return"GMT"+A(r,":")}},t:function(e,t,n){return h(Math.trunc(e.getTime()/1e3),t.length)},T:function(e,t,n){return h(e.getTime(),t.length)}};function x(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),i=r%60;return 0===i?n+String(o):n+String(o)+t+h(i,2)}function S(e,t){if(e%60===0){return(e>0?"-":"+")+h(Math.abs(e)/60,2)}return A(e,t)}function A(e,t=""){const n=e>0?"-":"+",r=Math.abs(e);return n+h(Math.trunc(r/60),2)+t+h(r%60,2)}var E=n(36847),C=n(76992),R=n(16074);const O=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,T=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,k=/^'([^]*?)'?$/,M=/''/g,P=/[a-zA-Z]/;function I(e,t,n){const i=(0,o.q)(),a=n?.locale??i.locale??r.c,u=n?.firstWeekContainsDate??n?.locale?.options?.firstWeekContainsDate??i.firstWeekContainsDate??i.locale?.options?.firstWeekContainsDate??1,l=n?.weekStartsOn??n?.locale?.options?.weekStartsOn??i.weekStartsOn??i.locale?.options?.weekStartsOn??0,c=(0,s.a)(e);if(!(0,R.f)(c))throw new RangeError("Invalid time value");let f=t.match(T).map((e=>{const t=e[0];if("p"===t||"P"===t){return(0,E.m[t])(e,a.formatLong)}return e})).join("").match(O).map((e=>{if("''"===e)return{isToken:!1,value:"'"};const t=e[0];if("'"===t)return{isToken:!1,value:N(e)};if(w[t])return{isToken:!0,value:e};if(t.match(P))throw new RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}}));a.localize.preprocessor&&(f=a.localize.preprocessor(c,f));const d={firstWeekContainsDate:u,weekStartsOn:l,locale:a};return f.map((r=>{if(!r.isToken)return r.value;const o=r.value;(!n?.useAdditionalWeekYearTokens&&(0,C.xM)(o)||!n?.useAdditionalDayOfYearTokens&&(0,C.ef)(o))&&(0,C.Ss)(o,t,String(e));return(0,w[o[0]])(c,o,a.localize,d)})).join("")}function N(e){const t=e.match(k);return t?t[1].replace(M,"'"):e}},76974:(e,t,n)=>{"use strict";n.d(t,{s:()=>l});var r=n(2940),o=n(83787),i=n(65961),a=n(35840);function s(e){const t=(0,i.p)(e),n=(0,a.w)(e,0);return n.setFullYear(t,0,4),n.setHours(0,0,0,0),(0,o.b)(n)}var u=n(2642);function l(e){const t=(0,u.a)(e),n=+(0,o.b)(t)-+s(t);return Math.round(n/r.my)+1}},65961:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(35840),o=n(83787),i=n(2642);function a(e){const t=(0,i.a)(e),n=t.getFullYear(),a=(0,r.w)(e,0);a.setFullYear(n+1,0,4),a.setHours(0,0,0,0);const s=(0,o.b)(a),u=(0,r.w)(e,0);u.setFullYear(n,0,4),u.setHours(0,0,0,0);const l=(0,o.b)(u);return t.getTime()>=s.getTime()?n+1:t.getTime()>=l.getTime()?n:n-1}},50016:(e,t,n)=>{"use strict";n.d(t,{N:()=>c});var r=n(2940),o=n(92528),i=n(35840),a=n(29220),s=n(82695);function u(e,t){const n=(0,s.q)(),r=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,u=(0,a.h)(e,t),l=(0,i.w)(e,0);l.setFullYear(u,0,r),l.setHours(0,0,0,0);return(0,o.k)(l,t)}var l=n(2642);function c(e,t){const n=(0,l.a)(e),i=+(0,o.k)(n,t)-+u(n,t);return Math.round(i/r.my)+1}},29220:(e,t,n)=>{"use strict";n.d(t,{h:()=>s});var r=n(35840),o=n(92528),i=n(2642),a=n(82695);function s(e,t){const n=(0,i.a)(e),s=n.getFullYear(),u=(0,a.q)(),l=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??u.firstWeekContainsDate??u.locale?.options?.firstWeekContainsDate??1,c=(0,r.w)(e,0);c.setFullYear(s+1,0,l),c.setHours(0,0,0,0);const f=(0,o.k)(c,t),d=(0,r.w)(e,0);d.setFullYear(s,0,l),d.setHours(0,0,0,0);const h=(0,o.k)(d,t);return n.getTime()>=f.getTime()?s+1:n.getTime()>=h.getTime()?s:s-1}},16074:(e,t,n)=>{"use strict";function r(e){return e instanceof Date||"object"===typeof e&&"[object Date]"===Object.prototype.toString.call(e)}n.d(t,{f:()=>i});var o=n(2642);function i(e){if(!r(e)&&"number"!==typeof e)return!1;const t=(0,o.a)(e);return!isNaN(Number(t))}},96519:(e,t,n)=>{"use strict";n.d(t,{c:()=>c});const r={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function o(e){return(t={})=>{const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const i={date:o({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:o({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:o({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},a={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function s(e){return(t,n)=>{let r;if("formatting"===(n?.context?String(n.context):"standalone")&&e.formattingValues){const t=e.defaultFormattingWidth||e.defaultWidth,o=n?.width?String(n.width):t;r=e.formattingValues[o]||e.formattingValues[t]}else{const t=e.defaultWidth,o=n?.width?String(n.width):e.defaultWidth;r=e.values[o]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}function u(e){return(t,n={})=>{const r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],i=t.match(o);if(!i)return null;const a=i[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],u=Array.isArray(s)?function(e,t){for(let n=0;ne.test(a))):function(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n;return}(s,(e=>e.test(a)));let l;l=e.valueCallback?e.valueCallback(u):u,l=n.valueCallback?n.valueCallback(l):l;return{value:l,rest:t.slice(a.length)}}}var l;const c={code:"en-US",formatDistance:(e,t,n)=>{let o;const i=r[e];return o="string"===typeof i?i:1===t?i.one:i.other.replace("{{count}}",t.toString()),n?.addSuffix?n.comparison&&n.comparison>0?"in "+o:o+" ago":o},formatLong:i,formatRelative:(e,t,n,r)=>a[e],localize:{ordinalNumber:(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:s({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:s({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:s({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:s({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:s({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(l={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)},(e,t={})=>{const n=e.match(l.matchPattern);if(!n)return null;const r=n[0],o=e.match(l.parsePattern);if(!o)return null;let i=l.valueCallback?l.valueCallback(o[0]):o[0];return i=t.valueCallback?t.valueCallback(i):i,{value:i,rest:e.slice(r.length)}}),era:u({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:u({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:u({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:u({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:u({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}}},51730:(e,t,n)=>{"use strict";n.d(t,{o:()=>o});var r=n(2642);function o(e){const t=(0,r.a)(e);return t.setHours(0,0,0,0),t}},83787:(e,t,n)=>{"use strict";n.d(t,{b:()=>o});var r=n(92528);function o(e){return(0,r.k)(e,{weekStartsOn:1})}},92528:(e,t,n)=>{"use strict";n.d(t,{k:()=>i});var r=n(2642),o=n(82695);function i(e,t){const n=(0,o.q)(),i=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,a=(0,r.a)(e),s=a.getDay(),u=(s{"use strict";n.d(t,{D:()=>i});var r=n(2642),o=n(35840);function i(e){const t=(0,r.a)(e),n=(0,o.w)(e,0);return n.setFullYear(t.getFullYear(),0,1),n.setHours(0,0,0,0),n}},2642:(e,t,n)=>{"use strict";function r(e){const t=Object.prototype.toString.call(e);return e instanceof Date||"object"===typeof e&&"[object Date]"===t?new e.constructor(+e):"number"===typeof e||"[object Number]"===t||"string"===typeof e||"[object String]"===t?new Date(e):new Date(NaN)}n.d(t,{a:()=>r})},77783:(e,t,n)=>{"use strict";function r(e){return new Promise(((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)}))}function o(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const o=r(n);return(e,n)=>o.then((r=>n(r.transaction(t,e).objectStore(t))))}let i;function a(){return i||(i=o("keyval-store","keyval")),i}function s(e,t=a()){return t("readonly",(t=>r(t.get(e))))}function u(e,t,n=a()){return n("readwrite",(n=>(n.put(t,e),r(n.transaction))))}function l(e,t=a()){return t("readwrite",(t=>(t.delete(e),r(t.transaction))))}function c(e=a()){return e("readwrite",(e=>(e.clear(),r(e.transaction))))}n.d(t,{IU:()=>c,Jt:()=>s,hZ:()=>u,y$:()=>o,yH:()=>l})},24119:(e,t,n)=>{"use strict";n.d(t,{B:()=>r,v:()=>o});class r extends Map{constructor(e,t=u){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const[n,r]of e)this.set(n,r)}get(e){return super.get(i(this,e))}has(e){return super.has(i(this,e))}set(e,t){return super.set(a(this,e),t)}delete(e){return super.delete(s(this,e))}}class o extends Set{constructor(e,t=u){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=e)for(const n of e)this.add(n)}has(e){return super.has(i(this,e))}add(e){return super.add(a(this,e))}delete(e){return super.delete(s(this,e))}}function i({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function a({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function s({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function u(e){return null!==e&&"object"===typeof e?e.valueOf():e}},99571:(e,t,n)=>{"use strict";n.d(t,{N9:()=>A,oR:()=>N});var r=n(96540),o=n(20053);const i=e=>"number"==typeof e&&!isNaN(e),a=e=>"string"==typeof e,s=e=>"function"==typeof e,u=e=>a(e)||s(e)?e:null,l=e=>(0,r.isValidElement)(e)||a(e)||s(e)||i(e);function c(e){let{enter:t,exit:n,appendPosition:o=!1,collapse:i=!0,collapseDuration:a=300}=e;return function(e){let{children:s,position:u,preventExitTransition:l,done:c,nodeRef:f,isIn:d}=e;const h=o?`${t}--${u}`:t,p=o?`${n}--${u}`:n,g=(0,r.useRef)(0);return(0,r.useLayoutEffect)((()=>{const e=f.current,t=h.split(" "),n=r=>{r.target===f.current&&(e.dispatchEvent(new Event("d")),e.removeEventListener("animationend",n),e.removeEventListener("animationcancel",n),0===g.current&&"animationcancel"!==r.type&&e.classList.remove(...t))};e.classList.add(...t),e.addEventListener("animationend",n),e.addEventListener("animationcancel",n)}),[]),(0,r.useEffect)((()=>{const e=f.current,t=()=>{e.removeEventListener("animationend",t),i?function(e,t,n){void 0===n&&(n=300);const{scrollHeight:r,style:o}=e;requestAnimationFrame((()=>{o.minHeight="initial",o.height=r+"px",o.transition=`all ${n}ms`,requestAnimationFrame((()=>{o.height="0",o.padding="0",o.margin="0",setTimeout(t,n)}))}))}(e,c,a):c()};d||(l?t():(g.current=1,e.className+=` ${p}`,e.addEventListener("animationend",t)))}),[d]),r.createElement(r.Fragment,null,s)}}function f(e,t){return null!=e?{content:e.content,containerId:e.props.containerId,id:e.props.toastId,theme:e.props.theme,type:e.props.type,data:e.props.data||{},isLoading:e.props.isLoading,icon:e.props.icon,status:t}:{}}const d={list:new Map,emitQueue:new Map,on(e,t){return this.list.has(e)||this.list.set(e,[]),this.list.get(e).push(t),this},off(e,t){if(t){const n=this.list.get(e).filter((e=>e!==t));return this.list.set(e,n),this}return this.list.delete(e),this},cancelEmit(e){const t=this.emitQueue.get(e);return t&&(t.forEach(clearTimeout),this.emitQueue.delete(e)),this},emit(e){this.list.has(e)&&this.list.get(e).forEach((t=>{const n=setTimeout((()=>{t(...[].slice.call(arguments,1))}),0);this.emitQueue.has(e)||this.emitQueue.set(e,[]),this.emitQueue.get(e).push(n)}))}},h=e=>{let{theme:t,type:n,...o}=e;return r.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:"colored"===t?"currentColor":`var(--toastify-icon-color-${n})`,...o})},p={info:function(e){return r.createElement(h,{...e},r.createElement("path",{d:"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z"}))},warning:function(e){return r.createElement(h,{...e},r.createElement("path",{d:"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z"}))},success:function(e){return r.createElement(h,{...e},r.createElement("path",{d:"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z"}))},error:function(e){return r.createElement(h,{...e},r.createElement("path",{d:"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z"}))},spinner:function(){return r.createElement("div",{className:"Toastify__spinner"})}};function g(e){const[,t]=(0,r.useReducer)((e=>e+1),0),[n,o]=(0,r.useState)([]),c=(0,r.useRef)(null),h=(0,r.useRef)(new Map).current,g=e=>-1!==n.indexOf(e),v=(0,r.useRef)({toastKey:1,displayedToast:0,count:0,queue:[],props:e,containerId:null,isToastActive:g,getToast:e=>h.get(e)}).current;function y(e){let{containerId:t}=e;const{limit:n}=v.props;!n||t&&v.containerId!==t||(v.count-=v.queue.length,v.queue=[])}function m(e){o((t=>null==e?[]:t.filter((t=>t!==e))))}function b(){const{toastContent:e,toastProps:t,staleId:n}=v.queue.shift();w(e,t,n)}function _(e,n){let{delay:o,staleId:g,...y}=n;if(!l(e)||function(e){return!c.current||v.props.enableMultiContainer&&e.containerId!==v.props.containerId||h.has(e.toastId)&&null==e.updateId}(y))return;const{toastId:_,updateId:x,data:S}=y,{props:A}=v,E=()=>m(_),C=null==x;C&&v.count++;const R={...A,style:A.toastStyle,key:v.toastKey++,...Object.fromEntries(Object.entries(y).filter((e=>{let[t,n]=e;return null!=n}))),toastId:_,updateId:x,data:S,closeToast:E,isIn:!1,className:u(y.className||A.toastClassName),bodyClassName:u(y.bodyClassName||A.bodyClassName),progressClassName:u(y.progressClassName||A.progressClassName),autoClose:!y.isLoading&&(O=y.autoClose,T=A.autoClose,!1===O||i(O)&&O>0?O:T),deleteToast(){const e=f(h.get(_),"removed");h.delete(_),d.emit(4,e);const n=v.queue.length;if(v.count=null==_?v.count-v.displayedToast:v.count-1,v.count<0&&(v.count=0),n>0){const e=null==_?v.props.limit:1;if(1===n||1===e)v.displayedToast++,b();else{const t=e>n?n:e;v.displayedToast=t;for(let e=0;ee in p)(n)&&(l=p[n](c))),l}(R),s(y.onOpen)&&(R.onOpen=y.onOpen),s(y.onClose)&&(R.onClose=y.onClose),R.closeButton=A.closeButton,!1===y.closeButton||l(y.closeButton)?R.closeButton=y.closeButton:!0===y.closeButton&&(R.closeButton=!l(A.closeButton)||A.closeButton);let k=e;(0,r.isValidElement)(e)&&!a(e.type)?k=(0,r.cloneElement)(e,{closeToast:E,toastProps:R,data:S}):s(e)&&(k=e({closeToast:E,toastProps:R,data:S})),A.limit&&A.limit>0&&v.count>A.limit&&C?v.queue.push({toastContent:k,toastProps:R,staleId:g}):i(o)?setTimeout((()=>{w(k,R,g)}),o):w(k,R,g)}function w(e,t,n){const{toastId:r}=t;n&&h.delete(n);const i={content:e,props:t};h.set(r,i),o((e=>[...e,r].filter((e=>e!==n)))),d.emit(4,f(i,null==i.props.updateId?"added":"updated"))}return(0,r.useEffect)((()=>(v.containerId=e.containerId,d.cancelEmit(3).on(0,_).on(1,(e=>c.current&&m(e))).on(5,y).emit(2,v),()=>{h.clear(),d.emit(3,v)})),[]),(0,r.useEffect)((()=>{v.props=e,v.isToastActive=g,v.displayedToast=n.length})),{getToastToRender:function(t){const n=new Map,r=Array.from(h.values());return e.newestOnTop&&r.reverse(),r.forEach((e=>{const{position:t}=e.props;n.has(t)||n.set(t,[]),n.get(t).push(e)})),Array.from(n,(e=>t(e[0],e[1])))},containerRef:c,isToastActive:g}}function v(e){return e.targetTouches&&e.targetTouches.length>=1?e.targetTouches[0].clientX:e.clientX}function y(e){return e.targetTouches&&e.targetTouches.length>=1?e.targetTouches[0].clientY:e.clientY}function m(e){const[t,n]=(0,r.useState)(!1),[o,i]=(0,r.useState)(!1),a=(0,r.useRef)(null),u=(0,r.useRef)({start:0,x:0,y:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,boundingRect:null,didMove:!1}).current,l=(0,r.useRef)(e),{autoClose:c,pauseOnHover:f,closeToast:d,onClick:h,closeOnClick:p}=e;function g(t){if(e.draggable){"touchstart"===t.nativeEvent.type&&t.nativeEvent.preventDefault(),u.didMove=!1,document.addEventListener("mousemove",w),document.addEventListener("mouseup",x),document.addEventListener("touchmove",w),document.addEventListener("touchend",x);const n=a.current;u.canCloseOnClick=!0,u.canDrag=!0,u.boundingRect=n.getBoundingClientRect(),n.style.transition="",u.x=v(t.nativeEvent),u.y=y(t.nativeEvent),"x"===e.draggableDirection?(u.start=u.x,u.removalDistance=n.offsetWidth*(e.draggablePercent/100)):(u.start=u.y,u.removalDistance=n.offsetHeight*(80===e.draggablePercent?1.5*e.draggablePercent:e.draggablePercent/100))}}function m(t){if(u.boundingRect){const{top:n,bottom:r,left:o,right:i}=u.boundingRect;"touchend"!==t.nativeEvent.type&&e.pauseOnHover&&u.x>=o&&u.x<=i&&u.y>=n&&u.y<=r?_():b()}}function b(){n(!0)}function _(){n(!1)}function w(n){const r=a.current;u.canDrag&&r&&(u.didMove=!0,t&&_(),u.x=v(n),u.y=y(n),u.delta="x"===e.draggableDirection?u.x-u.start:u.y-u.start,u.start!==u.x&&(u.canCloseOnClick=!1),r.style.transform=`translate${e.draggableDirection}(${u.delta}px)`,r.style.opacity=""+(1-Math.abs(u.delta/u.removalDistance)))}function x(){document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",x),document.removeEventListener("touchmove",w),document.removeEventListener("touchend",x);const t=a.current;if(u.canDrag&&u.didMove&&t){if(u.canDrag=!1,Math.abs(u.delta)>u.removalDistance)return i(!0),void e.closeToast();t.style.transition="transform 0.2s, opacity 0.2s",t.style.transform=`translate${e.draggableDirection}(0)`,t.style.opacity="1"}}(0,r.useEffect)((()=>{l.current=e})),(0,r.useEffect)((()=>(a.current&&a.current.addEventListener("d",b,{once:!0}),s(e.onOpen)&&e.onOpen((0,r.isValidElement)(e.children)&&e.children.props),()=>{const e=l.current;s(e.onClose)&&e.onClose((0,r.isValidElement)(e.children)&&e.children.props)})),[]),(0,r.useEffect)((()=>(e.pauseOnFocusLoss&&(document.hasFocus()||_(),window.addEventListener("focus",b),window.addEventListener("blur",_)),()=>{e.pauseOnFocusLoss&&(window.removeEventListener("focus",b),window.removeEventListener("blur",_))})),[e.pauseOnFocusLoss]);const S={onMouseDown:g,onTouchStart:g,onMouseUp:m,onTouchEnd:m};return c&&f&&(S.onMouseEnter=_,S.onMouseLeave=b),p&&(S.onClick=e=>{h&&h(e),u.canCloseOnClick&&d()}),{playToast:b,pauseToast:_,isRunning:t,preventExitTransition:o,toastRef:a,eventHandlers:S}}function b(e){let{closeToast:t,theme:n,ariaLabel:o="close"}=e;return r.createElement("button",{className:`Toastify__close-button Toastify__close-button--${n}`,type:"button",onClick:e=>{e.stopPropagation(),t(e)},"aria-label":o},r.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},r.createElement("path",{fillRule:"evenodd",d:"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z"})))}function _(e){let{delay:t,isRunning:n,closeToast:i,type:a="default",hide:u,className:l,style:c,controlledProgress:f,progress:d,rtl:h,isIn:p,theme:g}=e;const v=u||f&&0===d,y={...c,animationDuration:`${t}ms`,animationPlayState:n?"running":"paused",opacity:v?0:1};f&&(y.transform=`scaleX(${d})`);const m=(0,o.default)("Toastify__progress-bar",f?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${g}`,`Toastify__progress-bar--${a}`,{"Toastify__progress-bar--rtl":h}),b=s(l)?l({rtl:h,type:a,defaultClassName:m}):(0,o.default)(m,l);return r.createElement("div",{role:"progressbar","aria-hidden":v?"true":"false","aria-label":"notification timer",className:b,style:y,[f&&d>=1?"onTransitionEnd":"onAnimationEnd"]:f&&d<1?null:()=>{p&&i()}})}const w=e=>{const{isRunning:t,preventExitTransition:n,toastRef:i,eventHandlers:a}=m(e),{closeButton:u,children:l,autoClose:c,onClick:f,type:d,hideProgressBar:h,closeToast:p,transition:g,position:v,className:y,style:w,bodyClassName:x,bodyStyle:S,progressClassName:A,progressStyle:E,updateId:C,role:R,progress:O,rtl:T,toastId:k,deleteToast:M,isIn:P,isLoading:I,iconOut:N,closeOnClick:D,theme:L}=e,F=(0,o.default)("Toastify__toast",`Toastify__toast-theme--${L}`,`Toastify__toast--${d}`,{"Toastify__toast--rtl":T},{"Toastify__toast--close-on-click":D}),j=s(y)?y({rtl:T,position:v,type:d,defaultClassName:F}):(0,o.default)(F,y),U=!!O||!c,z={closeToast:p,type:d,theme:L};let B=null;return!1===u||(B=s(u)?u(z):(0,r.isValidElement)(u)?(0,r.cloneElement)(u,z):b(z)),r.createElement(g,{isIn:P,done:M,position:v,preventExitTransition:n,nodeRef:i},r.createElement("div",{id:k,onClick:f,className:j,...a,style:w,ref:i},r.createElement("div",{...P&&{role:R},className:s(x)?x({type:d}):(0,o.default)("Toastify__toast-body",x),style:S},null!=N&&r.createElement("div",{className:(0,o.default)("Toastify__toast-icon",{"Toastify--animate-icon Toastify__zoom-enter":!I})},N),r.createElement("div",null,l)),B,r.createElement(_,{...C&&!U?{key:`pb-${C}`}:{},rtl:T,theme:L,delay:c,isRunning:t,isIn:P,closeToast:p,hide:h,type:d,style:E,className:A,controlledProgress:U,progress:O||0})))},x=function(e,t){return void 0===t&&(t=!1),{enter:`Toastify--animate Toastify__${e}-enter`,exit:`Toastify--animate Toastify__${e}-exit`,appendPosition:t}},S=c(x("bounce",!0)),A=(c(x("slide",!0)),c(x("zoom")),c(x("flip")),(0,r.forwardRef)(((e,t)=>{const{getToastToRender:n,containerRef:i,isToastActive:a}=g(e),{className:l,style:c,rtl:f,containerId:d}=e;function h(e){const t=(0,o.default)("Toastify__toast-container",`Toastify__toast-container--${e}`,{"Toastify__toast-container--rtl":f});return s(l)?l({position:e,rtl:f,defaultClassName:t}):(0,o.default)(t,u(l))}return(0,r.useEffect)((()=>{t&&(t.current=i.current)}),[]),r.createElement("div",{ref:i,className:"Toastify",id:d},n(((e,t)=>{const n=t.length?{...c}:{...c,pointerEvents:"none"};return r.createElement("div",{className:h(e),style:n,key:`container-${e}`},t.map(((e,n)=>{let{content:o,props:i}=e;return r.createElement(w,{...i,isIn:a(i.toastId),style:{...i.style,"--nth":n+1,"--len":t.length},key:`toast-${i.key}`},o)})))})))})));A.displayName="ToastContainer",A.defaultProps={position:"top-right",transition:S,autoClose:5e3,closeButton:b,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,draggable:!0,draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light"};let E,C=new Map,R=[],O=1;function T(){return""+O++}function k(e){return e&&(a(e.toastId)||i(e.toastId))?e.toastId:T()}function M(e,t){return C.size>0?d.emit(0,e,t):R.push({content:e,options:t}),t.toastId}function P(e,t){return{...t,type:t&&t.type||e,toastId:k(t)}}function I(e){return(t,n)=>M(t,P(e,n))}function N(e,t){return M(e,P("default",t))}N.loading=(e,t)=>M(e,P("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...t})),N.promise=function(e,t,n){let r,{pending:o,error:i,success:u}=t;o&&(r=a(o)?N.loading(o,n):N.loading(o.render,{...n,...o}));const l={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},c=(e,t,o)=>{if(null==t)return void N.dismiss(r);const i={type:e,...l,...n,data:o},s=a(t)?{render:t}:t;return r?N.update(r,{...i,...s}):N(s.render,{...i,...s}),o},f=s(e)?e():e;return f.then((e=>c("success",u,e))).catch((e=>c("error",i,e))),f},N.success=I("success"),N.info=I("info"),N.error=I("error"),N.warning=I("warning"),N.warn=N.warning,N.dark=(e,t)=>M(e,P("default",{theme:"dark",...t})),N.dismiss=e=>{C.size>0?d.emit(1,e):R=R.filter((t=>null!=e&&t.options.toastId!==e))},N.clearWaitingQueue=function(e){return void 0===e&&(e={}),d.emit(5,e)},N.isActive=e=>{let t=!1;return C.forEach((n=>{n.isToastActive&&n.isToastActive(e)&&(t=!0)})),t},N.update=function(e,t){void 0===t&&(t={}),setTimeout((()=>{const n=function(e,t){let{containerId:n}=t;const r=C.get(n||E);return r&&r.getToast(e)}(e,t);if(n){const{props:r,content:o}=n,i={delay:100,...r,...t,toastId:t.toastId||e,updateId:T()};i.toastId!==e&&(i.staleId=e);const a=i.render||o;delete i.render,M(a,i)}}),0)},N.done=e=>{N.update(e,{progress:1})},N.onChange=e=>(d.on(4,e),()=>{d.off(4,e)}),N.POSITION={TOP_LEFT:"top-left",TOP_RIGHT:"top-right",TOP_CENTER:"top-center",BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",BOTTOM_CENTER:"bottom-center"},N.TYPE={INFO:"info",SUCCESS:"success",WARNING:"warning",ERROR:"error",DEFAULT:"default"},d.on(2,(e=>{E=e.containerId||e,C.set(E,e),R.forEach((e=>{d.emit(0,e.content,e.options)})),R=[]})).on(3,(e=>{C.delete(e.containerId||e),0===C.size&&d.off(0).off(1).off(5)}))},73700:(e,t,n)=>{"use strict";function r(e,t,n){var r,o=n||{},i=o.noTrailing,a=void 0!==i&&i,s=o.noLeading,u=void 0!==s&&s,l=o.debounceMode,c=void 0===l?void 0:l,f=!1,d=0;function h(){r&&clearTimeout(r)}function p(){for(var n=arguments.length,o=new Array(n),i=0;ie?u?(d=Date.now(),a||(r=setTimeout(c?g:p,e))):p():!0!==a&&(r=setTimeout(c?g:p,void 0===c?e-l:e)))}return p.cancel=function(e){var t=(e||{}).upcomingOnly,n=void 0!==t&&t;h(),f=!n},p}function o(e,t,n){var o=(n||{}).atBegin;return r(e,t,{debounceMode:!1!==(void 0!==o&&o)})}n.d(t,{n:()=>r,s:()=>o})},86856:(e,t,n)=>{"use strict";n.d(t,{i7:()=>d,q6:()=>f});var r=n(96540),o=n(69982),i=n(40961);const a=Symbol(),s=Symbol(),u="undefined"===typeof window||/ServerSideRendering/.test(window.navigator&&window.navigator.userAgent)?r.useEffect:r.useLayoutEffect,l=o.unstable_runWithPriority?e=>{try{(0,o.unstable_runWithPriority)(o.unstable_NormalPriority,e)}catch(t){if("Not implemented."!==t.message)throw t;e()}}:e=>e(),c=e=>({value:t,children:n})=>{const o=(0,r.useRef)(t),s=(0,r.useRef)(0),[c,f]=(0,r.useState)(null);c&&(c(t),f(null));const d=(0,r.useRef)();if(!d.current){const e=new Set,t=(t,n)=>{(0,i.unstable_batchedUpdates)((()=>{s.current+=1;const r={n:s.current};null!=n&&n.suspense&&(r.n*=-1,r.p=new Promise((e=>{f((()=>t=>{r.v=t,delete r.p,e(t)}))}))),e.forEach((e=>e(r))),t()}))};d.current={[a]:{v:o,n:s,l:e,u:t}}}return u((()=>{o.current=t,s.current+=1,l((()=>{d.current[a].l.forEach((e=>{e({n:s.current,v:t})}))}))}),[t]),(0,r.createElement)(e,{value:d.current},n)};function f(e){const t=(0,r.createContext)({[a]:{v:{current:e},n:{current:-1},l:new Set,u:e=>e()}});return t[s]=t.Provider,t.Provider=c(t.Provider),delete t.Consumer,t}function d(e,t){const n=(0,r.useContext)(e)[a];const{v:{current:o},n:{current:i},l:s}=n,l=t(o),[c,f]=(0,r.useReducer)(((e,n)=>{if(!n)return[o,l];if("p"in n)throw n.p;if(n.n===i)return Object.is(e[1],l)?e:[o,l];try{if("v"in n){if(Object.is(e[0],n.v))return e;const r=t(n.v);return Object.is(e[1],r)?e:[n.v,r]}}catch(r){}return[...e]}),[o,l]);return Object.is(c[1],l)||f(),u((()=>(s.add(f),()=>{s.delete(f)})),[s]),c[1]}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8637.0958494526e838a60d2b.js.LICENSE.txt b/src/web/gui/v2/8637.0958494526e838a60d2b.js.LICENSE.txt deleted file mode 100644 index 47c30ce3e..000000000 --- a/src/web/gui/v2/8637.0958494526e838a60d2b.js.LICENSE.txt +++ /dev/null @@ -1,140 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -/*! - * Determine if an object is a Buffer - * - * @author Feross Aboukhadijeh - * @license MIT - */ - -/** - * react-table - * - * Copyright (c) TanStack - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */ - -/** - * @license - * Copyright 2006 Dan Vanderkam (danvdk@gmail.com) - * MIT-licenced: https://opensource.org/licenses/MIT - */ - -/** - * @license - * Copyright 2011 Dan Vanderkam (danvdk@gmail.com) - * MIT-licenced: https://opensource.org/licenses/MIT - */ - -/** - * @license - * Copyright 2011 Paul Felix (paul.eric.felix@gmail.com) - * MIT-licenced: https://opensource.org/licenses/MIT - */ - -/** - * @license - * Copyright 2012 Dan Vanderkam (danvdk@gmail.com) - * MIT-licenced: https://opensource.org/licenses/MIT - */ - -/** - * @license - * Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com) - * MIT-licenced: https://opensource.org/licenses/MIT - */ - -/** - * @license - * Part of dygraphs, see top-level LICENSE.txt file - * MIT-licenced: https://opensource.org/licenses/MIT - */ - -/** - * @license React - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * @license React - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/** - * @remix-run/router v1.16.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */ - -/** - * React Router DOM v6.23.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */ - -/** - * React Router v6.23.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */ - -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/**! - * easy-pie-chart - * Lightweight plugin to render simple, animated and retina optimized pie charts - * - * @license - * @author Robert Fleischmann (http://robert-fleischmann.de) - * @version 2.1.7 - **/ diff --git a/src/web/gui/v2/8784.a04e9c07186e1f057f56.chunk.js b/src/web/gui/v2/8784.a04e9c07186e1f057f56.chunk.js deleted file mode 100644 index 0387190d9..000000000 --- a/src/web/gui/v2/8784.a04e9c07186e1f057f56.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="640fdce4-5575-47c0-9c3d-be51dcbe7364",e._sentryDebugIdIdentifier="sentry-dbid-640fdce4-5575-47c0-9c3d-be51dcbe7364")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8784],{92155:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(58168),o=n(96540),r=n(50876);const l=e=>(0,o.forwardRef)(((t,n)=>{let{callback:l,feature:s,isStart:i,isSuccess:d,isFailure:c,eventReason:u,payload:m={},...p}=t;const{sendLog:g,isReady:h}=(0,r.A)(),b=(0,o.useCallback)((()=>{const e=p[l],t={feature:s,isStart:i,isSuccess:d,isFailure:c,eventReason:u,...m,...p["data-ga"]?{dataGa:p["data-ga"]}:{},...p.dataGa?{dataGa:p.dataGa}:{},...p["data-track"]?{dataTrack:p["data-track"]}:{},...p.label?{label:p.label}:{}};"function"==typeof e&&e(),g(t,!0)}),[l,g,h,m,p]),f=(0,o.useMemo)((()=>({...p,[l]:b})),[p,l,b]);return o.createElement(e,(0,a.A)({ref:n},f))}));var s=n(67276);const i=e=>(0,o.forwardRef)(((t,n)=>{let{payload:r={},...i}=t;const d=l(e);return o.createElement(d,(0,a.A)({},i,{ref:n,callback:"onClick",payload:{...r,action:s.o1.buttonClicked}}))}))},96083:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(58168),o=n(68415),r=n(96540),l=n(20982),s=n(83199);const i=(0,r.forwardRef)(((e,t)=>{let{onClick:n,src:i,title:d="User avatar",width:c=8,height:u=8,...m}=e;return r.createElement(s.Flex,(0,a.A)({cursor:"pointer",round:"50%","data-testid":"userAvatar",title:d,alt:d,onClick:e=>n&&n(e),width:c,height:u},m,{ref:t,alignItems:"center",justifyContent:"center",background:"spaceIdle",color:"textLite",overflow:"hidden"}),i?r.createElement(s.Flex,{as:"img",src:i,alt:d,width:c,height:u}):r.createElement(l.g,{icon:o.yV,size:"lg",alt:d}))}))},18682:(e,t,n)=>{n.d(t,{C:()=>l});var a=n(33436),o=n(78217),r=n(13871);const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return()=>{(0,a.A)(e);const n=(0,r.UI)({header:"Copied",text:"Command copied to your clipboard! Please run it on your node's terminal.",icon:"gear",...t,success:!0});o.A.success(n,{context:"copy"})}}},87292:(e,t,n)=>{n.d(t,{Ay:()=>u,R0:()=>c});var a=n(96540),o=n(8711),r=n(83199),l=n(18682);const s=(0,o.default)(r.Box).attrs((e=>({color:"textDescription",background:"modalTabsBackground",border:{side:"all",color:"borderSecondary"},padding:[4,10,4,4],position:"relative",width:"100%",...e}))).withConfig({displayName:"command__StyledTerminalCommand",componentId:"sc-wnwmk3-0"})(["color:",";border-radius:2px;overflow-wrap:anywhere;white-space:pre-wrap;font-family:monospace;letter-spacing:0.09px;line-height:18px;font-size:14px;word-break:break-word;"],(0,r.getColor)("textDescription")),i=(0,o.default)(r.Icon).withConfig({displayName:"command__StyledIcon",componentId:"sc-wnwmk3-1"})(["display:flex;align-self:flex-end;cursor:pointer;"]),d=(0,o.default)(r.Box).attrs({color:"textDescription",border:{side:"all",color:"borderSecondary"},background:"modalTabsBackground",padding:[0,1]}).withConfig({displayName:"command__CodeText",componentId:"sc-wnwmk3-2"})(["display:inline-block;color:",";border-radius:2px;font-family:monospace;letter-spacing:0.09px;line-height:16px;font-size:12px;font-weight:bold;word-break:break-word;"],(0,r.getColor)("textDescription")),c=e=>{let{children:t,...n}=e;return a.createElement(d,n,t)},u=e=>{let{children:t,confirmationText:n="Command copied to your clipboard.",commandText:o=t,...d}=e;return a.createElement(s,d,t,a.createElement(r.Box,{position:"absolute",bottom:"8px",right:"8px"},a.createElement(i,{name:"copy",size:"small",color:"primary",onClick:(0,l.C)(o||t,{text:n})})))}},36091:(e,t,n)=>{n.d(t,{A:()=>c});var a=n(58168),o=n(96540),r=n(13083),l=n(83199);const s=()=>o.createElement(l.Text,null,"Something went wrong during document parsing"),i=e=>t=>{let{transformConfiguration:n={},validationConfig:l={},validate:i,errorComponent:d,children:c,...u}=t;const{tree:m,errors:p}=(e=>{let{markdocContent:t,validate:n,validationConfig:a,transformConfiguration:l}=e;return(0,o.useMemo)((()=>{const e=r.Ay.parse("string"===typeof t?t:"");let o=[];return n&&(o=r.Ay.validate(e,a)),{tree:o.length?null:r.Ay.transform(e,l),errors:o}}),[t,n,a,l])})({markdocContent:c,validate:i,validationConfig:l,transformConfiguration:n}),g=d&&"function"==typeof d?d:s;return p.length?o.createElement(g,{errors:p}):o.createElement(e,(0,a.A)({tree:m},u))},d=(0,o.memo)(i((e=>{let{tree:t,renderConfiguration:n}=e;return r.Ay.renderers.react(t,o,n)}))),c=(i((e=>{let{tree:t}=e;return r.Ay.renderers.html(t)})),d)},40267:(e,t,n)=>{n.d(t,{A:()=>r});var a=n(96540),o=n(83199);const r=e=>{let{flavour:t,icon:n,children:r}=e;return a.createElement(o.Pill,{icon:n,textProps:{textTransform:"capitalize"},flavour:t},r)}},32089:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(58168),o=n(96540),r=n(83199);const l=e=>{let{vertical:t,color:n="borderSecondary",...l}=e;return o.createElement(r.Box,(0,a.A)({as:"hr",height:t?"100%":"1px"},t?{}:{width:"100%"},{sx:{borderWidth:t?"0px 0px 0px 1px":"1px 0px 0px 0px",borderColor:n,borderStyle:"solid"}},l))}},38784:(e,t,n)=>{n.r(t),n.d(t,{AssistantAlerts:()=>K,AssistantChat:()=>fe});n(62953);var a=n(96540),o=n(69765),r=n(51913),l=n(58168),s=n(83199),i=n(73700),d=(n(3064),n(14905),n(98992),n(72577),n(8872),n(36091)),c=n(47762);const u=e=>{let{label:t,value:n}=e;return a.createElement(s.Flex,{gap:2},a.createElement(s.Text,{strong:!0},t,":"),a.createElement(s.Text,null,n))},m=e=>{let{name:t,nodeId:n,chartId:l,alertOptions:i}=e;const d=(0,o.ID)(),[,m]=(0,r.bg)(),p=(0,c.xY)(n,"name");return a.createElement(s.Flex,{column:!0},i.length>1&&a.createElement(s.Box,{margin:[0,0,2,0]},a.createElement(s.Select,{"data-testid":"".concat(t,"-assistant-modal-alerts-select"),onChange:e=>{let{value:t}=e;return m({roomId:d,alert:{name:t}})},styles:{size:"tiny"},menuPlacement:"auto",options:i,value:{value:t,label:t}})),1==i.length&&a.createElement(u,{label:"Alert",value:t}),p&&a.createElement(u,{label:"Node",value:p}),l&&a.createElement(u,{label:"Chart id",value:l}))};var p=n(32089),g=n(8711),h=n(4659),b=n(87292),f=n(68831);const x=g.default.ol.withConfig({displayName:"markdocSchema__OrderedList",componentId:"sc-1maymd4-0"})(["list-style:roman;padding-left:14px;"]),E=g.default.ul.withConfig({displayName:"markdocSchema__UnorderedList",componentId:"sc-1maymd4-1"})(['list-style-image:url("','/img/list-style-image.svg");padding-left:14px;'],f.A.assetsBaseURL),v={heading:{render:e=>{let{level:t=1,...n}=e,o=s.H1;switch(t){case 2:o=s.H2;break;case 3:o=s.H3;break;case 4:o=s.H4;break;case 5:o=s.H5;break;case 6:o=s.H6}return a.createElement(o,(0,l.A)({margin:[2,0]},n))},attributes:{id:{type:String},level:{type:Number}}},paragraph:{render:e=>{let{children:t,...n}=e;return a.createElement(s.Flex,(0,l.A)({padding:[2,0]},n),a.createElement(s.Text,null,t))}},link:{render:e=>{let{children:t,href:n,...o}=e;return a.createElement(h.A,(0,l.A)({href:n,rel:"noopener noreferrer",target:"_blank"},o),t)},attributes:{href:{type:String}}},code:{render:e=>{let{content:t,...n}=e;return a.createElement(b.R0,n,t)},attributes:{content:{type:String}}},fence:{render:e=>{let{content:t,...n}=e;return a.createElement(b.Ay,n,t)},attributes:{content:{type:String}}},list:{render:e=>{let{ordered:t,children:n,...o}=e;const r=t?x:E;return a.createElement(r,o,n)},attributes:{ordered:{type:Boolean}}}},y=e=>{let{selectedAlert:t}=e;const[n]=(0,r.Ws)(),{name:o,nodeId:l,chartId:i}=t,{loaded:c,value:u,hasError:g}=(0,r.vQ)({alert:o,node:l,chart:i}),h=(e=>e.reduce(((e,t)=>{const n={value:t.name,label:t.name};return e.find((e=>{let{label:t}=e;return t==n.label}))||e.push(n),e}),[]))(n);return c?g?a.createElement(s.Text,null,"Something went wrong"):null!==u&&void 0!==u&&u.result?a.createElement(s.Flex,{column:!0,gap:3},a.createElement(m,{name:o,nodeId:l,chartId:i,alertOptions:h}),a.createElement(p.A,null),a.createElement(d.A,{transformConfiguration:{nodes:v}},u.result)):a.createElement(s.Text,null,"No data"):a.createElement(s.Text,null,"Loading...")};var w=n(40267),C=n(29217);const k=(0,g.default)(s.Flex).withConfig({displayName:"styled__ElevatedContent",componentId:"sc-16kc0pw-0"})(["box-shadow:0 18px 28px rgba(0,0,0,0.5);"]),A=(0,g.default)(s.Icon).withConfig({displayName:"styled__IconAbsolute",componentId:"sc-16kc0pw-1"})(["position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);"]),I=e=>{let{alert:t,...n}=e;return a.createElement(C.A,{content:"Show assistant"},a.createElement(k,(0,l.A)({position:"absolute",top:"0",right:"0",cursor:"pointer"},n),a.createElement(w.A,{flavour:(null===t||void 0===t?void 0:t.status)||"neutral"},null===t||void 0===t?void 0:t.name)))};var _=n(55794),M=n.n(_),S=n(87659);const B=g.default.ul.withConfig({displayName:"helpTooltipContent__List",componentId:"sc-uh9315-0"})(["width:350px;padding-left:16px;list-style:disc outside none;"]),F=function(){let{disableDrag:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.createElement(B,null,e?null:a.createElement("li",null,"You can drag around the assistant window and navigate to other tabs within the same room, and the assistant window won't go away."),a.createElement("li",null,"Use the buttons at the right to expand, or minimize the assistant window."),a.createElement("li",null,"Hold down the ",a.createElement(s.TextSmall,{strong:!0},"Shift")," button in order to select any text inside the assistant window."))};var N=n(63950),T=n.n(N);const z=e=>{let{onModalClose:t=T()}=e;return a.createElement(C.A,{content:"Close assistant"},a.createElement(k,{position:"absolute",bottom:"37px",right:"-10px",background:"mainBackground",sx:{borderRadius:"100%"},border:{side:"all",color:"primary",size:"1px",type:"solid"},width:"28px",height:"28px",onClick:t,cursor:"pointer"},a.createElement(A,{name:"x",color:"text",size:"sm"})))},R=e=>{let{onClick:t=T()}=e;return a.createElement(k,{position:"absolute",top:"0",right:"0",onClick:t,cursor:"pointer"},a.createElement(s.Pill,{flavour:"neutral"},"Show assistant"))},q=e=>{let{MaximizeComponent:t=R,isMinimized:n,maximize:o=T(),onModalClose:r=T()}=e;const[l,i]=(0,a.useState)(!1);return a.createElement(s.Flex,{position:"relative",width:"56px",height:n?"95px":"56px",onMouseEnter:()=>i(n),onMouseLeave:()=>i(!1)},a.createElement(k,{position:"absolute",bottom:"0",background:"primary",sx:{borderRadius:"100%"},width:"56px",height:"56px",cursor:"move"},a.createElement(A,{name:"netdataAssistant",size:"large"})),l&&a.createElement(a.Fragment,null,a.createElement(t,{onClick:()=>{n&&o()}}),a.createElement(z,{onModalClose:r})))};var D=n(47731);const H=e=>{let{expanded:t,isMobile:n}=e;return n?{base:"95vw"}:t?{base:"80vw"}:{base:150,max:150,min:70}},L=e=>{let{expanded:t,isMobile:n}=e;return n?{base:"80vh",max:"80vh",min:"10vh"}:t?{base:"80vh",min:"80vh"}:{base:150,max:150,min:150}},U=(0,g.default)(s.ModalContent).attrs((e=>{let{expanded:t,isMobile:n,getWidth:a,getHeight:o,...r}=e;return{width:a({expanded:t,isMobile:n}),height:o({expanded:t,isMobile:n}),padding:[0,0,4,0],...r}})).withConfig({displayName:"assistantModalBase__ModalContent",componentId:"sc-15vyjlc-0"})([""]),P=(0,g.default)(s.ModalBody).withConfig({displayName:"assistantModalBase__StyledModalBody",componentId:"sc-15vyjlc-1"})(["flex-direction:",";"],(e=>{let{columnReverse:t}=e;return t?"column-reverse":"column"})),W=function(){let{title:e,body:t,modalContentProps:n={},modalBodyProps:o={},onClose:r,MaximizeComponent:i,disableDrag:d,getWidth:c=H,getHeight:u=L}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[m,p]=(0,S.A)(),[g,h]=(0,a.useState)(!1),[b,f,,x]=(0,S.A)(),E=(0,D.J)();return a.createElement(s.Modal,{zIndex:80,backdrop:!1},a.createElement(M(),{disabled:d||g||E},a.createElement(s.Flex,{column:!0,alignItems:"end",gap:3},!b&&a.createElement(U,(0,l.A)({expanded:m,cursor:g?"text":"move",tabIndex:0,onKeyDown:e=>{let{key:t}=e;"Shift"==t&&h(!0)},onKeyUp:()=>h(!1),isMobile:E,getWidth:c,getHeight:u},n),a.createElement(s.ModalHeader,{justifyContent:"between"},a.createElement(s.Flex,{gap:2,alignItems:"center"},a.createElement(s.Icon,{name:"netdataAssistant",color:"text"}),e||a.createElement(s.H4,null,"Netdata Assistant"),a.createElement(C.A,{plain:!0,isBasic:!0,align:"top",content:a.createElement(F,{disableDrag:d})},a.createElement(s.Flex,null,a.createElement(s.Icon,{name:"question",color:"textLite",width:"16px",height:"16px"})))),a.createElement(s.Flex,{alignItems:"baseline"},E?null:a.createElement(a.Fragment,null,a.createElement(s.ModalButton,{iconName:"minimize_s",onClick:f,tooltip:"Minimize window",testId:"assistant-modal-minimize-button"}),a.createElement(s.ModalButton,{iconName:m?"reduceSize":"fullScreen",onClick:p,tooltip:m?"Reduce window size":"Expand window",testId:"assistant-modal-expand-collapse-button"})),a.createElement(s.ModalCloseButton,{onClose:r,position:"unset",tooltip:"Close window",testId:"assistant-modal-close-button"}))),a.createElement(P,(0,l.A)({overflow:{vertical:"auto"},cursor:g?"text":"default"},o),t)),a.createElement(q,{MaximizeComponent:i,isMinimized:b,maximize:x,onModalClose:r}))))},G=e=>{let{alertNameInHeader:t,selectedAlert:n}=e;return t?a.createElement(w.A,{flavour:(null===n||void 0===n?void 0:n.status)||"neutral"},null===n||void 0===n?void 0:n.name):a.createElement(s.H4,null,"Netdata Assistant")},j=(Q=W,e=>{const[t,n]=(0,a.useState)(!1),[o,s]=(0,r.bg)(),d=(null===o||void 0===o?void 0:o.alert)||{},c=(0,i.s)(300,(e=>{let{target:t}=e;return n(t.scrollTop>150&&!(null===d||void 0===d||!d.name))})),u=(0,a.useCallback)((()=>s(null)),[s]);return a.createElement(Q,(0,l.A)({title:a.createElement(G,{alertNameInHeader:t,selectedAlert:d}),body:a.createElement(y,{selectedAlert:d}),onClose:u,modalBodyProps:{onScroll:c},MaximizeComponent:e=>a.createElement(I,(0,l.A)({alert:d},e))},e))});var Q;const Y=j,K=()=>{const e=(0,o.ID)(),[t,n]=(0,r.bg)(),{roomId:l,alert:s}=t||{};return(0,a.useEffect)((()=>{l!=e&&n(null)}),[l,e]),s&&l==e?a.createElement(Y,null):null};var V=n(22292),O=n(96083);const Z=()=>a.createElement(s.Flex,{width:12},a.createElement(s.Icon,{name:"netdataAssistant",width:"48px",height:"48px",color:"primary"})),J=e=>{let{flavour:t="assistant",children:n,...o}=e;const r="assistant"==t,i=(0,V.uW)("avatarURL"),d={...r?{background:"modalBackground"}:{},border:{side:"top",color:"primary"}};return a.createElement(s.Flex,(0,l.A)({gap:2,padding:[4]},d,o),r?a.createElement(Z,null):a.createElement(O.A,{src:i||"",width:12,height:12}),a.createElement(s.Flex,{flex:{grow:1,shrink:1}},n))};var X=n(50876);const $=e=>{let{text:t}=e;const{sendButtonClickedLog:n}=(0,X.A)(),o=(0,r.ZV)(),l=(0,a.useCallback)((()=>{o(t),n({feature:"NetdataAssistantQuestion",question:t,kickstartQuestion:!0})}),[o,n]);return a.createElement(s.Flex,{alignItems:"center",justifyContent:"between",padding:[2],background:"inputBg",round:!0,cursor:"pointer",onClick:l},a.createElement(s.TextBig,null,t),a.createElement(s.Icon,{name:"chevron_right_s",color:"text",height:"12px",cursor:"pointer"}))},ee=()=>a.createElement(s.Flex,{column:!0,gap:4},a.createElement(s.TextBig,null,"Hello! Welcome to Netdata Assistant! Here are some options to help you kickstart our conversation:"),a.createElement(s.Flex,{column:!0,gap:2},a.createElement($,{text:"What is a node?"}),a.createElement($,{text:"What is a Netdata parent?"})),a.createElement(s.TextBig,null,"Just select the option you're interested in, or feel free to ask anything else!")),te=()=>a.createElement(J,{border:"none"},a.createElement(ee,null));n(41393),n(81454);const ne=(0,n(92155).A)(s.Button),ae=e=>{let{question:t,answer:n,feedback:o,setFeedback:r,flavour:l}=e;return a.createElement(ne,{feature:"AssistantAnswerFeedback",payload:{question:t,answer:n,feedback:l},flavour:o===l?"hollow":"borderless",icon:"thumbsUp"==l?"thumb_up":"thumb_down",onClick:()=>r(l),"data-testid":"assistant-chat-".concat(l),small:!0})},oe=function(){var e,t;let{id:n,questionId:o,additionalInfo:r,messages:i=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[d,c]=(0,a.useState)(),u=null===(e=i.find((e=>e.id==o)))||void 0===e?void 0:e.value,m=null===(t=i.find((e=>e.id==n)))||void 0===t?void 0:t.value,p=(0,a.useMemo)((()=>({feedback:d,setFeedback:c,question:u,answer:m})),[d,c]);return a.createElement(s.Flex,{alignItems:"center",justifyContent:"between"},a.createElement(s.Flex,null,a.createElement(ae,(0,l.A)({},p,{flavour:"thumbsUp"})),a.createElement(ae,(0,l.A)({},p,{flavour:"thumbsDown"}))),r?a.createElement(h.A,{Component:s.Text,href:r,target:"_blank",rel:"noopener noreferrer"},"Read more..."):null)};var re=n(63314);const le=()=>a.createElement(re.DL,{feature:"NetdataAssistantAnswer"},a.createElement(s.TextBig,null,"Something went wrong. Please try again.")),se=()=>{const{messages:e}=(0,r.Gp)();return e.map((t=>{let{id:n,questionId:o,type:r,pending:l,value:i,additionalInfo:c,error:u}=t;return a.createElement(J,{key:n,flavour:"answer"==r?"assistant":"user"},"answer"==r?l?"...":u?a.createElement(le,null):a.createElement(s.Flex,{column:!0,gap:1},a.createElement(d.A,{transformConfiguration:{nodes:v}},i),a.createElement(oe,{id:n,questionId:o,additionalInfo:c,messages:e})):i)}))},ie=(0,g.default)(s.Icon).withConfig({displayName:"input__StyledIcon",componentId:"sc-m4unkx-0"})(["opacity:",";"],(e=>{let{disabled:t}=e;return t?".5":"1"})),de=e=>a.createElement(C.A,{plain:!0,content:"Send your message"},a.createElement(s.Box,null,a.createElement(ie,(0,l.A)({name:"chevron_right_s",color:"text",size:"small",cursor:"pointer"},e)))),ce=(0,g.default)(s.Box).withConfig({displayName:"input__InputContainer",componentId:"sc-m4unkx-1"})(["box-shadow:0 0 8px rgba(0,0,0,0.5);"]),ue=()=>{const{sendButtonClickedLog:e}=(0,X.A)(),[t,n]=(0,a.useState)(""),{pending:o}=(0,r.Gp)(),l=(0,r.ZV)(),i=(0,a.useCallback)((()=>{!o&&t&&(l(t),n(""),e({feature:"NetdataAssistantQuestion",question:t}))}),[o,t,l,n,e]);return a.createElement(ce,{width:"100%",position:"fixed",bottom:"68px",padding:[4],background:"modalBackground"},a.createElement(s.TextInput,{value:t,placeholder:"Message assistant...",iconRight:o?null:a.createElement(de,{onClick:i,disabled:o||!t}),onChange:e=>{let{target:{value:t}}=e;return n(t)},onKeyDown:e=>{let{key:t}=e;"Enter"==t&&i()},autoFocus:"autofocus",disabled:o}))},me=()=>a.createElement(s.Flex,{column:!0},a.createElement(s.Flex,{column:!0,padding:[0,0,17,0]},a.createElement(te,null),a.createElement(se,null)),a.createElement(ue,null)),pe=e=>{let{expanded:t,isMobile:n}=e;return n?{base:"95vw"}:t?{base:"60vw"}:{base:125,max:150,min:60}},ge=e=>{let{expanded:t,isMobile:n}=e;return n?{base:"80vh",max:"80vh",min:"10vh"}:t?{base:"80vh",min:"80vh"}:{base:80,max:150,min:80}},he=(e=>t=>a.createElement(re.Ay,{feature:"NetdataAssistant"},a.createElement(e,(0,l.A)({body:a.createElement(me,null),modalContentProps:{padding:[0]},modalBodyProps:{height:"100%",padding:[0],columnReverse:!0},getWidth:pe,getHeight:ge},t))))(W),be=he,fe=()=>{const[e,,t]=(0,r.MY)(),{clear:n}=(0,r.Gp)(),o=(0,a.useCallback)((()=>{t(),n()}),[t,n]);return e?a.createElement(be,{onClose:o}):null}},51913:(e,t,n)=>{n.d(t,{ZV:()=>v,bg:()=>h,vQ:()=>g,Ws:()=>b,Gp:()=>E,MY:()=>x});n(17333),n(3064),n(41393),n(98992),n(54520),n(72577),n(81454),n(62953);var a=n(96540),o=n(47444),r=n(26655),l=n(49286);var s=n(3914),i=n(69765);const d=(0,o.eU)({key:"assistantAlert",default:null}),c=(0,o.eU)({key:"assistantAlertsAtom",default:[]}),u=(0,o.eU)({key:"assistantChatAtom",default:{open:!1,messages:[]}});var m=n(33829);const p=(0,o.K0)({key:"assistantAlertSelector",get:e=>{let{space:t,room:n,alert:a,node:o,chart:l}=e;return()=>(e=>{let{space:t,room:n,alert:a,node:o,chart:l}=e;return r.A.post("/api/v1/troubleshoot",{space:t,room:n,alarm:a,node:o,chart:l})})({space:t,room:n,alert:a,node:o||"dummy-node-id",chart:l||"dummy-chart-id"})},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),g=e=>{var t;let{alert:n,node:a,chart:r}=e;const l=(0,s.vt)(),d=(0,i.ID)(),c=(0,o.xf)(p({space:l,room:d,alert:n,node:a,chart:r}));return{loaded:"loading"!==c.state,value:null===(t=c.contents)||void 0===t?void 0:t.data,hasError:"hasError"===c.state}},h=()=>(0,o.L4)(d),b=()=>(0,o.L4)(c),f=()=>(0,o.L4)(u),x=()=>{const[e,t]=f(),n=(0,a.useCallback)((()=>t((e=>({...e,open:!0})))),[t]),o=(0,a.useCallback)((()=>t((e=>({...e,open:!1})))),[t]);return[null===e||void 0===e?void 0:e.open,n,o]},E=()=>{const[e,t]=f(),n=(0,a.useCallback)((e=>t((t=>({...t,messages:[...t.messages,e]})))),[t]),o=(0,a.useCallback)((()=>{t((e=>({...e,messages:[]})))}),[t]),r=(0,a.useMemo)((()=>e.open&&!!e.messages.find((e=>{let{pending:t}=e;return!!t}))),[e]);return{messages:null===e||void 0===e?void 0:e.messages,pending:r,addMessage:n,clear:o}},v=()=>{const e=(()=>{const{addMessage:e}=E();return(0,a.useCallback)((t=>{const n=(0,m.A)();return e({id:n,type:"question",value:t}),n}),[e])})(),t=(()=>{const{addMessage:e}=E();return(0,a.useCallback)((t=>{let{questionId:n,pending:a,answer:o}=t;return e({id:(0,m.A)(),questionId:n,type:"answer",value:o,pending:a})}),[e])})(),n=(()=>{const[,e]=f();return(0,a.useCallback)((t=>{let{questionId:n,value:a,additionalInfo:o,error:r}=t;e((e=>({...e,messages:e.messages.map((e=>e.questionId==n?{...e,pending:!1,value:a,additionalInfo:o,error:r}:e))})))}),[])})();return(0,a.useCallback)((a=>{const o=e(a);var s;t({questionId:o,pending:!0}),(s=a,r.A.post("/api/v1/chat",{messages:[{role:"user",content:s}]},{transform:e=>(0,l.bn)(e)})).then((function(){let{data:e={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{session:{messages:t},additionalInfo:a}=e,r=(t||[]).filter((e=>{let{role:t}=e;return"assistant"==t})),l=r.length?r[r.length-1]:null;null!==l&&void 0!==l&&l.content?n({questionId:o,value:l.content,additionalInfo:a}):n({questionId:o,error:"Something went wrong"})})).catch((e=>{n({questionId:o,error:e.message||"Something went wrong"})}))}),[e,n])}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8842.406028f523a00acb97bd.chunk.js b/src/web/gui/v2/8842.406028f523a00acb97bd.chunk.js deleted file mode 100644 index 9b8e3549f..000000000 --- a/src/web/gui/v2/8842.406028f523a00acb97bd.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="6df49833-3fc2-4c7b-8bc8-5da3e2bc850d",e._sentryDebugIdIdentifier="sentry-dbid-6df49833-3fc2-4c7b-8bc8-5da3e2bc850d")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8842],{8842:(e,t,n)=>{n.r(t),n.d(t,{default:()=>W});var a=n(96540),l=n(83199),o=(n(3064),n(98992),n(72577),n(26655));var r=n(3914),i=n(18061),c=n(47444);const s={items:[],error:"",id:null,loading:!0,loaded:!1,oidcID:null},d=(0,c.Iz)({key:"spaceOIDCKey",default:0}),u=(0,c.Iz)({key:"spaceOIDC",default:e=>(e=>({...s,id:e}))(e)}),m=(0,c.Iz)({key:"spaceOIDCConfiguration",default:null});n(62953);const g=(0,c.K0)({key:"spaceOIDCState",get:e=>{let{id:t,key:n}=e;return e=>{let{get:a}=e;const l=a(u(t));return n?l[n]:l}},set:e=>{let{id:t,key:n}=e;return(e,a)=>{let{set:l}=e;l(u(t),(e=>n?{...e,[n]:a}:{...e,...a}))}}}),f=e=>((e,t)=>(0,c.vc)(g({id:e,key:t})))((0,r.vt)(),e),p=e=>(0,c.L4)(m(e)),E=e=>{const t=(0,r.vt)(),[n,l]=p(t),i=(0,a.useCallback)((function(){return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return o.A.post("/api/v3/spaces/".concat(e,"/oidc"),{...t})}(t,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}),[t]),c=(0,a.useCallback)((function(){return function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return o.A.patch("/api/v3/spaces/".concat(t,"/oidc/").concat(e),n)}(e,t,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}),[e,t]),s=(0,a.useCallback)((()=>((e,t)=>o.A.delete("/api/v3/spaces/".concat(t,"/oidc/").concat(e)))(e,t).then((()=>(l(null),Promise.resolve())))),[e,t,l]);return{config:n,isEdit:!!e,save:e?c:i,remove:s}},b=()=>{const e=(0,r.vt)(),t=((e,t)=>(0,c.lZ)(g({id:e,key:t})))(e),n=(()=>{const e=(0,r.vt)();return(0,c.vc)(d(e))})();(0,i.A)((()=>({enabled:!!e,fetch:()=>(e=>o.A.get("/api/v3/spaces/".concat(e,"/oidc")))(e),onFail:e=>{var n;return t({...s,error:(null===e||void 0===e||null===(n=e.response)||void 0===n?void 0:n.data)||e})},onSettle:()=>t({loading:!1,loaded:!0}),onSuccess:e=>{const{oidcID:n}=e.find((e=>{let{oidcID:t}=e;return!!t}))||{};t({...s,items:e,...n?{oidcID:n}:{}})}})),[n,e])};var h=n(58168),v=(n(17333),n(41393),n(54520),n(81454),n(4659)),C=n(87659);n(9391),n(74648),n(23215);const y=e=>{const t=(0,r.vt)(),[,n]=p(t);(0,i.A)((()=>({enabled:!!t,fetch:()=>((e,t)=>e?o.A.get("/api/v3/spaces/".concat(t,"/oidc/").concat(e)):Promise.resolve({data:null}))(e,t),onSuccess:e=>{n(e)}})),[t])},k={okta:{name:"okta",color:"bright"},"auth-server":{name:"openid",color:"bright"}},D=e=>{let{title:t,onConfirm:n,onDecline:o,isConfirmLoading:r}=e;return a.createElement(l.ConfirmationDialog,{confirmLabel:"Yes, delete",handleConfirm:n,handleDecline:o,message:a.createElement(a.Fragment,null,"You are about to delete ",a.createElement("strong",null,t)," configuration.",a.createElement("br",null),"Are you sure you want to continue?"),title:"Delete configuration",isConfirmLoading:r})};var A=n(46741),x=n(47130),w=n(92155),I=n(50876);const F=(0,x.A)((0,w.A)(l.Button)),S=e=>{let{title:t,isLoading:n,isEditable:o,validFields:r,onSave:i,onConfirmDelete:c}=e;const[s,,d,u]=(0,C.A)(),m=(0,A.JT)("oidc:Manage"),{sendLog:g}=(0,I.A)(),f=(0,a.useCallback)((()=>{c(),u(),g({feature:"OidcModalConfirmDeleteButton",title:t})}),[c,u]),p=(0,a.useMemo)((()=>({feature:"OidcModalSaveButton",label:"Save",onClick:i,disabled:!r||!m||n,tooltip:m?r?"Save the configuration":"Please provide values to the required fields":"You don't have permission to manage single sign-on configurations."})),[i,r,m,n]),E=(0,a.useMemo)((()=>({feature:"OidcModalDeleteButton",label:"Delete",flavour:"hollow",danger:!0,onClick:d,disabled:!m||n,tooltip:m?"Delete the configuration":"You don't have permission to manage single sign-on configurations."})),[d,n,m]);return a.createElement(a.Fragment,null,a.createElement(l.ModalFooter,{gap:2},o?a.createElement(F,E):null,a.createElement(F,p)),s?a.createElement(D,{title:t,onConfirm:f,onDecline:u,isConfirmLoading:n}):null)},L={string:e=>{let{propKey:t,title:n,setFormData:o,...r}=e;const i=(0,a.useCallback)((e=>{let{target:n}=e;o((e=>({...e,[t]:n.value})))}),[t,o]);return a.createElement(l.TextInput,(0,h.A)({label:n,onChange:i},r))},default:()=>null},M=e=>{let{propKey:t,type:n,setFormData:l,...o}=e;const r=L[n]||L.default,i=(0,a.useCallback)((e=>{let{target:n}=e;l((e=>({...e,[t]:n.value})))}),[l]);return a.createElement(r,(0,h.A)({onChange:i},o))},T=e=>{let{properties:t={},errors:n={},formData:o,required:r,setFormData:i}=e;return a.createElement(l.Flex,{column:!0,gap:2},Object.entries(t).map((e=>{let[t,l]=e;return a.createElement(M,(0,h.A)({key:t,propKey:t,isRequired:r.includes(t)},l,{value:o[t]||"",setFormData:i,error:n[t]}))})))};var _=n(28738),B=n(71835);n(14905),n(8872),n(3296),n(27208),n(48408);const O={string:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{format:n}=t;return"uri"!=n||(e=>{try{const{host:t}=new URL(e);return/^(?!-)[a-zA-Z0-9-]{1,63}(?null};var K=n(63314);const q=e=>{let{id:t,oidcID:n,title:o,slug:i,description:s,properties:u={},required:m=[],isEditable:g,docsUrl:f,onClose:p}=e;y(n);const{config:b,isEdit:h,save:D,remove:A}=E(n),[x,w]=(0,a.useState)({}),[I,,F,L]=(0,C.A)(),M=(()=>{const e=(0,r.vt)(),t=(0,c.lZ)(d(e));return(0,a.useCallback)((()=>t((e=>e+1))),[t])})(),[q,N]=(0,B.A)(),[U,Y]=(0,a.useState)({}),j=m.every((e=>!!x[e]));(0,a.useEffect)((()=>{w(b||{})}),[b]),(0,a.useEffect)((()=>{Y(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.entries(e).reduce(((e,n)=>{let[a,l]=n;const o=t[a]||{},r=(O[o.type]||O.default)(l,o);return r&&(e[a]=r),e}),{})}(x,u))}),[x,u,Y]);const z=(0,a.useCallback)((()=>{F(),D({...h?{}:{integrationID:t},...x}).then((()=>{q({header:"Success",text:"Successfully configured ".concat(o)}),p(),M()})).catch(N).finally((()=>{L()}))}),[D,x,h,q,N,p,M,F,L]),P=(0,a.useCallback)((()=>{F(),A().then((()=>{q({header:"Success",text:"Successfully deleted ".concat(o," configuration")}),p(),M()})).catch(N).finally((()=>{L()}))}),[A,q,N,p,M,F,L]);return a.createElement(K.Ay,{feature:"OidcModal",title:o},a.createElement(l.Modal,{backdropProps:{backdropBlur:!0},onEsc:p},a.createElement(l.ModalContent,{width:{min:100,base:140}},a.createElement(l.ModalHeader,{border:{side:"bottom",color:"disabled"},column:!0,gap:.5,padding:[6,4,3]},a.createElement(l.Flex,{alignItems:"center"},a.createElement(l.Flex,{gap:1,alignItems:"center"},a.createElement(l.Icon,k[i]||{}),a.createElement(l.H3,null,o)),p&&a.createElement(l.ModalCloseButton,{onClose:p,tooltip:"Close modal"})),a.createElement(l.TextSmall,{as:l.Box},s,f?a.createElement(a.Fragment,null,"\xa0",a.createElement(v.A,{Component:l.TextSmall,href:f,target:"_blank",whiteSpace:"nowrap"},"Learn how to configure it.")):null)),a.createElement(l.ModalBody,{height:{min:60,base:60},overflow:{vertical:"auto"}},I?a.createElement(_.A,{height:60,title:"Loading..."}):a.createElement(T,{formData:x,required:m,setFormData:w,properties:u,errors:U})),a.createElement(S,{title:o,isLoading:I,isEditable:g,validFields:j||!!Object.keys(U).length,onSave:z,onConfirmDelete:P}))))};var N=n(29217),U=n(63450);const Y=e=>{let{title:t,isEditable:n,isDisabled:l,onClick:o}=e;const{tooltipContent:r,buttonLabel:i}=(0,a.useMemo)((()=>l?{}:{tooltipContent:n?"Edit ".concat(t," configuration"):"Configure ".concat(t),buttonLabel:n?"Edit":"Configure"}),[n,l,t]);return l?null:a.createElement(N.A,{align:"bottom",content:r,plain:!0},a.createElement(U.ro,{label:i,icon:"gear",small:!0,onClick:o}))},j=e=>{let{id:t,slug:n,title:o,description:r,"data-testid":i="card",configuredItemExists:c,oidcID:s,schema:d={},...u}=e;const m=k[n],[g,,f,p]=(0,C.A)(),E=c&&!s,b=c&&!!s,{annotations:y={},properties:D={},required:A=[]}=d,{docsUrl:x}=y;return a.createElement(a.Fragment,null,a.createElement(l.Flex,(0,h.A)({background:"elementBackground",column:!0,"data-testid":i,justifyContent:"between",flex:!1,height:37,padding:[3,2,2,3],margin:[0,0,4,0],position:"relative",overflow:"hidden",round:.5,width:75},u),a.createElement(U.MU,(0,h.A)({"data-testid":"".concat(i,"-blurredIcon")},m)),a.createElement(l.Flex,{column:!0,"data-testid":"".concat(i,"-details"),gap:3,margin:[0,0,3,0]},a.createElement(l.Flex,{"data-testid":"".concat(i,"-header"),justifyContent:"between"},a.createElement(l.Flex,{alignItems:"center","data-testid":"".concat(i,"-titleContainer"),gap:1},a.createElement(l.Icon,(0,h.A)({"data-testid":"".concat(i,"-icon")},m)),a.createElement(l.Text,{"data-testid":"".concat(i,"-title")},o)),a.createElement(Y,{title:o,isEditable:b,isDisabled:E,onClick:f})),a.createElement(l.TextSmall,{color:"textDescription","data-testid":"".concat(i,"-description")},r," ",x&&a.createElement(v.A,{Component:U.W6,"data-testid":"".concat(i,"-docsLink"),href:x,target:"_blank",whiteSpace:"nowrap"},"Learn more.")))),g&&a.createElement(q,{id:t,oidcID:s,slug:n,title:o,description:r,docsUrl:x,properties:D,required:A,onClose:p,isEditable:b}))};var z=n(98496),P=n(12602);const R={ErrForbidden:{title:"No permissions",Content:()=>a.createElement(a.Fragment,null,a.createElement(l.Text,null,"You don't have permissions to view the authentication methods."),a.createElement(l.Text,null,"Please contact the Space administrators if this is unexpected."))},ErrNotAvailable:{title:"No available integrations",Content:()=>a.createElement(a.Fragment,null,a.createElement(l.Text,null,"No available single sign-on integrations found."),a.createElement(l.Text,null,"To enable this feature, please"," ",a.createElement(P.A,null,a.createElement(l.Text,{color:"primary"},"upgrade to the Business plan")),"."))},default:{title:"Error",Content:()=>a.createElement(a.Fragment,null,a.createElement(l.Text,null,"Something went wrong, please check again later."),a.createElement(l.Text,null,"If the problem persists feel free to contact us with a"," ",a.createElement(v.A,{href:"https://github.com/netdata/netdata-cloud/issues/new/choose",target:"_blank",rel:"noopener noreferrer"},"ticket")))}},Z=function(){let{error:e={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{errorMsgKey:t}=e,{title:n,Content:o}=R[t]||R.default;return a.createElement(K.DL,{feature:"DyncfgMainTabs",errorMsgKey:t},a.createElement(z.A,{title:n},a.createElement(l.Flex,{column:!0,gap:1},a.createElement(o,null))))},H=()=>{const{loading:e,loaded:t,items:n=[],oidcID:o,error:r}=f(),i=n.filter((e=>{let{available:t}=e;return!!t}));return e?a.createElement(_.A,{title:"Loading items"}):t?r?a.createElement(Z,{error:r}):i.length?a.createElement(l.Flex,{flexWrap:!0,padding:[0,4],gap:4},i.map((e=>a.createElement(j,(0,h.A)({key:e.id,configuredItemExists:!!o},e))))):a.createElement(Z,{error:{errorMsgKey:"ErrNotAvailable"}}):a.createElement(Z,{error:"Something went wroong"})},W=()=>(b(),a.createElement(l.Flex,{column:!0,gap:8,height:"100%"},a.createElement(l.Flex,{column:!0,gap:2,padding:[0,0,0,4]},a.createElement(l.H3,null,"Authentication"),a.createElement(l.TextBig,null,"See the available single sign-on integrations and configure the one that your company supports.")),a.createElement(H,null)))}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8910.019974f8675d8834dd07.chunk.js b/src/web/gui/v2/8910.019974f8675d8834dd07.chunk.js deleted file mode 100644 index 4994dbcd9..000000000 --- a/src/web/gui/v2/8910.019974f8675d8834dd07.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="de8a317e-0a71-4867-90ec-4ad8fd101ec6",e._sentryDebugIdIdentifier="sentry-dbid-de8a317e-0a71-4867-90ec-4ad8fd101ec6")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8910],{8910:(e,t,n)=>{n.r(t),n.d(t,{default:()=>lo});var l=n(58168),o=(n(62953),n(96540)),r=n(83199),a=n(46741),i=n(11128),s=n(47762),c=n(47193);n(14905),n(98992),n(8872);const d=function(){let{selectedNode:e,nodes:t=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,o.useMemo)((()=>t.reduce(((e,t)=>{var n;let{id:l,ni:o,name:r,isLive:a,isPreferred:i,capabilities:s}=t;return a&&i&&null!==(n=s.dyncfg)&&void 0!==n&&n.enabled?[...e,{label:r,value:l,isParent:0==o}]:e}),[])),[t]),l=(0,o.useMemo)((()=>(e=>e?null!==e&&void 0!==e&&e.id&&null!==e&&void 0!==e&&e.name?{label:e.name,value:e.id,isParent:0==e.ni}:e:null)(e)||(n.length?n[0]:"")),[n]),[r,a]=(0,o.useState)();return(0,o.useEffect)((()=>{l&&a(l)}),[l,a]),{options:n,node:r,setNode:a}};n(41393),n(81454);var u=n(63950),m=n.n(u);const p=function(){let{node:e,setNode:t=m(),options:n=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o.createElement(r.Box,{width:"250px"},o.createElement(r.Flex,{column:!0,gap:1},o.createElement(r.TextBig,null,"Node"),o.createElement(r.Select,{placeholder:"Select a node",options:n,value:e,onChange:t})))};n(74648),n(17333),n(23215),n(54520);var g=n(27467);const h=(0,o.createContext)({}),f=()=>{const e=(0,o.useContext)(h),[,t]=(0,g.N9)(),{searchItem:n,setSearchItem:l}=e||{},{term:r,props:a}=n||{},i=!!Object.keys(n.props||{}).length,s=(0,o.useCallback)((e=>{t({dyncfgSearchTerm:void 0}),l((t=>({...t,term:e})))}),[l,t]),c=(0,o.useCallback)(((e,t)=>{l((n=>({...n,props:{...n.props||{},[e]:t}})))}),[l]),d=(0,o.useCallback)((e=>{l((t=>{var n;const l={...t};return null!==(n=l.props)&&void 0!==n&&n[e]&&delete l.props[e],l}))}),[l]),u=(0,o.useCallback)((e=>{try{return new RegExp(r).test(e)}catch(t){return m()}}),[r]),p=(0,o.useCallback)((e=>!a||!Object.entries(a).filter((e=>{let[,t]=e;return void 0!==t})).length||Object.entries(a).every((t=>{let[n,l]=t;return e[n]==l}))),[a]);if(!e)throw new Error("Attempt to use 'useSearch' outside of 'SearchContext.Provider'");return{searchItem:n,hasProps:i,searchForTerm:s,searchByProp:c,testString:u,testProps:p,removeSearchProp:d}},b=e=>{let{children:t}=e;const[{dyncfgSearchTerm:n}]=(0,g.N9)(),[l,r]=(0,o.useState)({term:n});return o.createElement(h.Provider,{value:{searchItem:l,setSearchItem:r}},t)},E=()=>{const{searchItem:e,searchForTerm:t}=f(),{term:n}=e||{};return o.createElement(r.Box,{width:"250px"},o.createElement(r.Flex,{column:!0,gap:1},o.createElement(r.TextBig,null,"Search"),o.createElement(r.SearchInput,{value:n,placeholder:"Search",onChange:t,size:"large",height:"33px",padding:[2,3]})))};var v=n(29217),y=n(32089),C=n(8711);const x=(0,C.default)(r.Flex).withConfig({displayName:"styled__StyledSection",componentId:"sc-dutbst-0"})(["&:hover{background-color:",";}"],(0,r.getColor)("secondaryHighlight")),w=(0,C.default)(r.Button).withConfig({displayName:"styled__StyledButton",componentId:"sc-dutbst-1"})(["&:before{content:",";width:18px;height:18px;display:",";align-items:center;justify-content:center;font-size:11px;font-weight:bold;position:absolute;top:-6px;left:-10px;border-radius:50%;background-color:",";color:",";z-index:10;}"],(e=>{let{warningItems:t}=e;return'"'.concat(t,'"')}),(e=>{let{warningItems:t}=e;return t?"flex":"none"}),(0,r.getColor)("error"),(0,r.getColor)("bright"));var k=n(94390),S=n(49286);const I=e=>{let{title:t="",props:n={},config:l={}}=e;const{searchItem:a,searchByProp:i,removeSearchProp:s}=f(),{props:c}=a||{},d=(0,o.useCallback)(((e,t)=>{const{searchCondition:n}=l[e]||{},o=Object.entries(n||{});if(o.length){const[e,n]=o[0];t?s(e):i(e,n)}}),[i,s]);return o.createElement(r.Flex,{column:!0,gap:1},o.createElement(r.TextBig,{strong:!0},t),o.createElement(r.Flex,{column:!0},Object.entries(l).map((e=>{var t;let[a,{label:i,searchCondition:s}]=e;const u=(0,S.bn)(n||{})[a]||0,[m,p]=Object.entries(s)[0],g=!!c&&c[m]==p,h=k.zy.includes(a)&&u>0?{color:"error"}:{};return o.createElement(v.A,{key:a,content:null===(t=l[a])||void 0===t?void 0:t.tooltip,align:"bottom",isBasic:!0,base:{background:"main",padding:[2]}},o.createElement(x,{width:"100%",alignItems:"center",justifyContent:"between",gap:2,background:g?"menuItemSelected":"none",padding:[1,2],round:!0,cursor:"pointer",onClick:()=>d(a,g)},o.createElement(r.TextBig,h,i),o.createElement(r.TextBig,h,u)))}))))},A=e=>{let{attention:t,source_type:n,status:l}=e;return o.createElement(r.Flex,{column:!0,padding:[3],gap:2},o.createElement(I,{title:"Attention",props:t,config:k.lp}),o.createElement(y.A,{color:"border"}),o.createElement(I,{title:"Source type",props:n,config:k.V8}),o.createElement(y.A,{color:"border"}),o.createElement(I,{title:"Status",props:l,config:k.T_}))},T=(0,o.memo)(A),F=Object.keys(k.T_),B=Object.keys(k.V8),D=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=t.reduce(((e,t)=>({...e,[t]:0})),{});return function(){let l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n;for(let n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};var n,l;(t.attention||(t.attention={}),e.restart_required)&&(t.attention.restart_required=((null===(n=t.attention)||void 0===n?void 0:n.restart_required)||0)+1);e.plugin_rejected&&(t.attention.plugin_rejected=((null===(l=t.attention)||void 0===l?void 0:l.plugin_rejected)||0)+1)},P=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Object.entries(e);if(n.length)for(let l=0;l{let{tree:t}=e;const{attention:n,source_type:l,status:r}=(0,o.useMemo)((()=>Object.keys(t)?P(t):{}),[t]);return{warningItems:((null===n||void 0===n?void 0:n.restart_required)||0)+((null===n||void 0===n?void 0:n.plugin_rejected)||0)+((null===r||void 0===r?void 0:r.failed)||0)+((null===r||void 0===r?void 0:r.incomplete)||0),menuItems:{attention:n,source_type:l,status:r}}};var L=n(87659);const M=e=>{let{tree:t={}}=e;const n=(0,o.useRef)(),[l,a,,i]=(0,L.A)(!1),{hasProps:s}=f(),{warningItems:c,menuItems:d}=_({tree:t});return o.createElement(o.Fragment,null,o.createElement(v.A,{align:"bottom",content:"Show filters"},o.createElement(r.Flex,{ref:n},o.createElement(w,{flavour:s?"default":"hollow",icon:"filterList",onClick:a,warningItems:c}))),l&&n.current?o.createElement(r.Drop,{width:60,target:n.current,align:{top:"bottom",right:"right"},animation:!0,background:"modalTabsBackground",margin:[2,0,0],round:1,close:i,onClickOutside:i,onEsc:i},o.createElement(T,d)):null)};var O=n(8239);const R=()=>{const e=(0,O.Hj)();return o.createElement(v.A,{align:"bottom",content:"Reload"},o.createElement(r.Flex,null,o.createElement(r.Button,{flavour:"hollow",icon:"refresh",onClick:e})))};var j=n(39225);n(8159),n(37550);const z=(0,o.createContext)({}),H=()=>(0,o.useContext)(z),U=z,W=(0,o.createContext)(),V={name:""},K=()=>{const e=(0,o.useContext)(W),{id:t,open:n,isNewItem:l,formData:r,setFormData:a,submitType:i,setSubmitType:s,isLoading:c,startLoading:d,stopLoading:u,fullPage:m,setFullPage:p,entityProps:g,isDirty:h,setIsDirty:f,error:b}=e||{},E=(0,o.useCallback)((e=>a((t=>({...t,name:e})))),[a]);if(!e)throw new Error("Attempt to use 'useConfigItemContext' outside of 'ConfigItemContext.Provider'");return{id:t,open:n,isNewItem:l,formData:r,setFormData:a,submitType:i,setSubmitType:s,setName:E,isLoading:c,startLoading:d,stopLoading:u,fullPage:m,setFullPage:p,entityProps:g,isDirty:h,setIsDirty:f,error:b}},q=e=>{let{children:t,...n}=e;const[l,r]=(0,o.useState)(V),[a,i]=(0,o.useState)("submit");return o.createElement(W.Provider,{value:{...n,formData:l,setFormData:r,submitType:a,setSubmitType:i}},t)};var Y=n(81198);n(9391);const $=()=>{const[e,t]=(0,o.useState)([]),n=(0,o.useCallback)((e=>t(e)),[t]);return{errors:e,onError:n,resetErrors:(0,o.useCallback)((()=>t([])),[t])}};var G=n(71835);const J=function(){let{defaultName:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t,formData:n,isNewItem:l}=K();return(0,o.useMemo)((()=>(l?null===n||void 0===n?void 0:n.name:(0,Y.J3)(t))||e),[l,null===n||void 0===n?void 0:n.name,t,e])};var Q=n(80158);const Z=()=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Something went wrong",{data:n={}}=(null===e||void 0===e?void 0:e.response)||{};try{n=JSON.parse(n)}catch(a){}const{message:l,errorMessage:o,error_message:r}=n;return(0,Q.Zr)(l||o||r||t)},X=()=>{const[e,t,,n]=(0,G.A)(),l=Z(),r=(0,o.useCallback)((function(){let{successMessage:t="Successfully saved"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return l=>{let{data:{message:o}}=l;(o?n:e)({header:o?"Warning":"Success",text:o||t})}}),[e,n]),a=(0,o.useCallback)((function(){let{header:e="Error",text:n="Something went wrong"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o=>{const r=l(o,n);t({header:e,text:r})}}),[t]);return[r,a]};var ee=n(50876);const te=function(){let{id:e,node:t,onError:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const l=(0,O.y8)({id:e,node:t}),r=J(),{setValue:a,setError:i}=(0,O.MQ)(),[,s]=X(),c=s(),d="function"==typeof n?n:c,u=Z(),m=(0,o.useRef)();return(e,t)=>{m.current&&(clearTimeout(m.current),m.current=null);const n=null===t?t:t||r;m.current=setTimeout((()=>{l({name:n,payload:e}).then((e=>{a(e.data||"")})).catch((e=>{i(u(e)),d(e)}))}),500)}},ne=e=>{let{id:t,node:n,data:l,userConfigIsOpen:r,submitMethod:a,onSchemaFetch:i,setIsDirty:s,setError:c}=e;const{isNewItem:d,formData:u,setFormData:p,isLoading:g,startLoading:h,stopLoading:f,entityProps:b={}}=K(),{cmds:E=[]}=b,v=E.includes("userconfig"),{sendLog:y}=(0,ee.A)(),[C,x]=(0,G.A)(),{loaded:w,value:k,hasError:S,error:I,refresh:A}=(0,O.t8)({id:t,node:n}),{loaded:T,value:F,hasError:B,refresh:D}=l,N=w&&T,P=I||B,_=(0,O.Hj)(),L=(0,O.O_)({node:n,id:t}),M=te({id:t,node:n,onError:m()}),{errors:R,onError:j,resetErrors:z}=$();(0,o.useEffect)((()=>{w&&k&&!S&&i(k)}),[w,k]),(0,o.useEffect)((()=>{c(P)}),[P]);const H=(0,o.useCallback)(((e,t)=>{const{name:n,...l}=e.formData,o={name:F.name,...l};p(o),s(!t),v&&r&&M(o)}),[p,s,v,r,M]),U=(0,o.useCallback)((e=>{H({formData:e})}),[H]),W=(0,o.useCallback)((e=>{z();const n={...e.formData,...d&&null!==u&&void 0!==u&&u.name?{name:u.name}:{}};h(),a(n).then((()=>{s(!1),d?_():(L(),A(),D()),C({header:"Success",text:"Successfully submitted configuration"}),y({feature:"DyncnfForm",description:"Submit success",id:t})})).catch((e=>{var n,l;const o=(null===(n=e.response)||void 0===n?void 0:n.data)||e;x({header:"Error",text:(null===o||void 0===o?void 0:o.message)||"Something went wrong"}),y({feature:"DyncnfForm",description:"Submit error",id:t,error:JSON.stringify((null===(l=e.response)||void 0===l?void 0:l.data)||{})})})).finally((()=>{f()}))}),[d,u,h,f,L,A,D,j]);return{isLoading:g,loaded:N,formData:F,setFormData:U,schema:k,resourcesError:P,errors:R,onChange:H,onSubmit:W,onError:j,getUserConfig:M}},le=(0,C.default)(r.TextBig).withConfig({displayName:"styled__StyledTitle",componentId:"sc-16w9sl7-0"})(["font-family:monospace;"]),oe=(0,C.default)(r.Icon).attrs((e=>({opacity:"1",cursor:"pointer",...e}))).withConfig({displayName:"styled__StyledTemplateArrow",componentId:"sc-16w9sl7-1"})(["opacity:",";cursor:",";"],(e=>{let{hasTemplateChildren:t}=e;return t?"1":"0"}),(e=>{let{hasTemplateChildren:t}=e;return t?"pointer":"default"})),re=(0,C.default)(r.Flex).withConfig({displayName:"styled__StyledHeader",componentId:"sc-16w9sl7-2"})(["height:","px;border-top:1px solid ",";border-left:1px solid ",";border-right:1px solid ",";border-bottom:1px solid ",";border-bottom-style:",";"],k.FL,(0,r.getColor)("border"),(0,r.getColor)("border"),(0,r.getColor)("border"),(0,r.getColor)("border"),(e=>{let{isOpenEntity:t}=e;return t?"none":"solid"})),ae=(0,C.default)(r.Collapsible).withConfig({displayName:"styled__StyledCollapsible",componentId:"sc-16w9sl7-3"})(["height:",";max-height:",";overflow:auto;"],(e=>{let{open:t,fullPage:n}=e;return t&&n?"100%":"auto"}),(e=>{let{flavour:t,fullPage:n,isJob:l}=e;return"path"!=t?n?"calc(100% - 55px)":l?"500px":"unset":"unset"})),ie=(0,C.default)(r.TextBig).withConfig({displayName:"styled__StyledNodeName",componentId:"sc-16w9sl7-4"})(["font-family:monospace;"]);var se=n(47130);const ce=(0,se.A)(r.Flex),de=e=>{let{source:t="",sourceType:n}=e;const l=t.split(",");return o.createElement(r.Flex,{column:!0,gap:2},o.createElement(r.Flex,{alignItems:"center",gap:1},o.createElement(r.Text,{strong:!0},"Source type"),o.createElement(r.Pill,null,n)),o.createElement(r.Flex,{column:!0,gap:1},l.length?l.map((e=>o.createElement(r.TextSmall,{key:e},e))):null))},ue=e=>{let{source:t,sourceType:n,...a}=e;const i=k.V6[n];if(!i)return null;const{icon:s}=i;return o.createElement(v.A,{isBasic:!0,content:o.createElement(de,{source:t,sourceType:n})},o.createElement(r.Box,null,o.createElement(r.Icon,(0,l.A)({name:s},a))))},me=e=>{let{type:t,status:n}=e;const l=k.bM[n];if(!l)return null;const{label:a,color:i,icon:s}=l;return"template"!=t?o.createElement(r.Flex,{width:{min:28},gap:1,padding:[1,2],border:{side:"all",color:i},round:!0,alignItems:"center",justifyContent:"center"},o.createElement(r.Icon,{name:s,height:"12px",color:i}),o.createElement(r.Text,{color:i},a)):null},pe=()=>o.createElement(r.Flex,{width:{max:100}},o.createElement(r.Text,null,"You can submit your changes to another node, or to multiple nodes by selecting"," ",o.createElement(r.Text,{strong:!0},"Submit to multiple nodes")," button.")),ge=()=>{const{submitType:e}=K(),{node:t,nodes:n}=H(),[l]=(0,i.Oj)({extraKey:"dyncfg",merge:!1}),a=n.filter((e=>{let{value:t}=e;return l.includes(t)})),s=a.length?a[0].label:"0",c="submit"==e?t.label:s,d=l.length>1?"and ".concat(l.length-1," more"):"",u="submit"==e?"node":l.length>1?"nodes":"node";return o.createElement(r.Flex,{"data-testid":"dyncfg-on-node",gap:2,alignItems:"center"},o.createElement(r.TextBig,null,"on"),o.createElement(ce,{padding:[1],background:"mainBackground",tooltip:"submit"==e?o.createElement(pe,null):null,tooltipProps:{isBasic:!0,plain:!1}},o.createElement(ie,{strong:!0},c)," "),o.createElement(r.TextBig,null,"multiple_submit"==e?o.createElement(r.TextBig,{strong:!0},"".concat(d," ")):null,u))},he=function(){let{title:e,type:t,source:n,sourceType:l,status:a,templateChildren:i={},onCollapseExpand:s,userDisabled:c}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{color:d}=k.g7[t]||k.g7.default,u=c||"disabled"==a?"disabled":d,{node:p}=H(),{open:g,isNewItem:h,formData:f,setName:b,entityProps:E={}}=K(),{cmds:v=[]}=E,y=v.includes("userconfig"),{name:C}=f||{},x=!!Object.keys(i).length,w=te({id:e,node:p,onError:m()}),S=(0,o.useCallback)((e=>{b(e.target.value),y&&w(f,e.target.value||"test")}),[f,b,y,w]);return o.createElement(r.Flex,{gap:2,alignItems:"center"},"template"==t?o.createElement(oe,{name:"chevron_right",color:"textLite",rotate:g?3:1,onClick:s,hasTemplateChildren:x}):null,o.createElement(me,{type:t,status:a}),o.createElement(ue,{source:n,sourceType:l,color:u}),h?null:o.createElement(le,{color:u},(0,Y.J3)(e)),h&&g?o.createElement(r.TextInput,{"data-testid":"dyncfg-config-item-name",width:65,value:C,onChange:S,placeholder:"Add configuration name",error:h&&!(null!==f&&void 0!==f&&f.name),hideErrorMessage:!0}):null,"template"!=t&&g?o.createElement(ge,null):null)};var fe=n(26688),be=n(70895),Ee=n(92155);const ve=(0,Ee.A)(be.A),ye=function(){let{title:e,buttonProps:t={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[,n]=(0,O.QH)(),r=(0,fe.A)(),{isLoading:a,entityProps:i}=K(),{cmds:s=[]}=i||{},c=a,d=(0,o.useCallback)((()=>{n(r({template:e,entityProps:i}))}),[e,i,r,n]);return s.includes("add")?o.createElement(ve,(0,l.A)({edit:!0,feature:"DyncnfTemplate",payload:{id:e,label:"Add job"},tooltip:"Add a new configuration item",icon:"plus",iconWidth:18,iconHeight:18,onClick:d,disabled:c},t)):null},Ce=(0,Ee.A)(be.A),xe=e=>{let{id:t,enable:n,open:l,onDecline:a,onConfirm:i}=e;const s=n?"enable":"disable";return l?o.createElement(r.ConfirmationDialog,{title:"".concat((0,Q.Zr)(s)," item?"),handleConfirm:i,handleDecline:a,confirmLabel:"Yes ".concat(s),declineLabel:"No",isConfirmPositive:!!n,message:o.createElement(r.Flex,{column:!0,gap:2},o.createElement(r.TextBig,null,"You are about to ",s," ",o.createElement(le,{strong:!0},t)," module and all its configurations."),o.createElement(r.TextBig,null,"Are you sure?"))}):null},we=function(){let{id:e,userDisabled:t,buttonProps:n={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{isLoading:l,startLoading:r,stopLoading:a}=K(),{node:i}=H(),s=(0,O.DP)({id:e,node:i}),c=(0,O.O_)({node:i,id:e}),[d,u]=X(),[m,p]=(0,o.useState)(),[g,,h,f]=(0,L.A)(),b=(0,o.useCallback)((()=>{f(),r(),s(m).then((e=>{c(),d({successMessage:"Successfully ".concat(m?"enabled":"disabled"," module")})(e)})).catch((e=>{u({header:"Couldn't ".concat(m?"enabled":"disabled"," module")})(e)})).finally((()=>{a()}))}),[f,r,s,c,d,u,a]),E=(0,o.useCallback)((e=>{l||(p(e),h())}),[l,h]),v=(0,o.useMemo)((()=>({edit:!0,feature:"DyncnfTemplate",payload:{id:e,label:t?"Enable":"Disable"},isLoading:l,disabled:l,...n,...t?{tooltip:"Enable this module",icon:"switch_off",iconColor:"disabled",onClick:()=>E(!0)}:{tooltip:"Disable this module",icon:"switch_off",onClick:()=>E(!1),iconColor:"success",danger:!0}})),[e,t,l,n,E]);return o.createElement(o.Fragment,null,o.createElement(Ce,v),o.createElement(xe,{id:e,enable:m,open:g,onDecline:f,onConfirm:b}))},ke="success",Se={iconColor:ke,flavour:"borderless",color:ke},Ie=e=>{let{title:t,userDisabled:n}=e;return o.createElement(o.Fragment,null,o.createElement(ye,{title:t,buttonProps:Se}),o.createElement(we,{id:t,userDisabled:n,buttonProps:Se}))};var Ae=n(16607);const Te=(0,Ae.A)(r.Button),Fe=function(){let{buttonProps:e={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{open:t,fullPage:n,setFullPage:r,isNewItem:a}=K(),i=(0,o.useMemo)((()=>({...e,icon:n?"reduceSize":"fullScreen",tooltip:n?"Reduce window size":"Expand window size"})),[n]),s=(0,o.useCallback)((()=>{r(!n)}),[n,r]);return t&&!a?o.createElement(Te,(0,l.A)({onClick:s},i)):null},Be=(0,Ee.A)(be.A),De=function(){let{id:e,onClick:t,buttonProps:n={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{open:r,isLoading:a,entityProps:i}=K(),{cmds:s=[]}=i||{},c=a,d=s.includes("update")?"Edit configuration":"You have no permissions to edit the configuration";return o.createElement(Be,(0,l.A)({view:!0,feature:"DyncnfItem",payload:{id:e,label:r?"Close":"View"},tooltip:r?"Close":d,icon:r?"x":"pencilOutline",onClick:t,disabled:c},n))},Ne=(0,Ae.A)(r.Button),Pe=function(){let{title:e,template:t={},onCollapseExpand:n=m(),buttonProps:r={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,Y.UE)(e),[,i]=(0,O.QH)(),{cmds:s,user_disabled:c}=t,{isLoading:d,open:u,formData:p,entityProps:g}=K(),h=(0,fe.A)(),f=(0,o.useCallback)((()=>{d||(i(h({template:a,formData:p,entityProps:g})),n())}),[d,a,p,g,i,h]);return u&&null!==s&&void 0!==s&&s.includes("add")?o.createElement(Ne,(0,l.A)({icon:"copy",onClick:f,disabled:d||c},c?{}:{tooltip:"Copy this item and create a new one"},r)):null},_e=(0,Ee.A)(be.A),Le=e=>{let{id:t,open:n,onDecline:l,onConfirm:a}=e;return n?o.createElement(r.ConfirmationDialog,{title:"Delete item?",handleConfirm:a,handleDecline:l,confirmLabel:"Yes, delete",declineLabel:"No",message:o.createElement(r.Flex,{column:!0,gap:2},o.createElement(r.TextBig,null,"You are going to completely remove ",o.createElement(le,{strong:!0},t)," and this action cannot be reverted."),o.createElement(r.TextBig,null,"Are you sure that you want to delete this item?"))}):null},Me=function(){let{id:e,buttonProps:t={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{isLoading:n,entityProps:r,startLoading:a,stopLoading:i}=K(),{type:s,cmds:c=[]}=r||{},{node:d}=H(),u=(0,O.OU)({id:e,node:d}),[m,p]=X(),g=(0,O.Hj)(),[h,,f,b]=(0,L.A)(),{sendButtonClickedLog:E}=(0,ee.A)(),v=n,y=(0,o.useCallback)((()=>{b(),a(),u().then((t=>{m({successMessage:"Successfully removed configuration"})(t),E({feature:"DyncnfItem",description:"Confirm deletion",id:e}),g()})).catch((e=>{p({header:"Couldn't remove configuration"})(e)})).finally((()=>{i()})),setTimeout((()=>{i()}),1e3)}),[u,b,a,i,g,E,m,p]),C=(0,o.useCallback)((()=>{n||f()}),[n,f]);return"job"==s&&c.includes("remove")?o.createElement(o.Fragment,null,o.createElement(_e,(0,l.A)({edit:!0,feature:"DyncnfItem",payload:{id:e,label:"Remove"},icon:"trashcan",onClick:C,disabled:v,tooltip:"Remove"},t)),o.createElement(Le,{id:e,open:h,onDecline:b,onConfirm:y})):null},Oe=(0,Ee.A)(be.A),Re=function(){let{id:e,template:t={},buttonProps:n={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{node:r}=H(),a=(0,O.ZN)({id:e,node:r}),[i,s]=X(),{isLoading:c,entityProps:d,startLoading:u,stopLoading:m}=K(),{user_disabled:p}=t,{cmds:g=[]}=d||{},h=(0,O.O_)({node:r,id:e}),f=c||p,b=(0,o.useCallback)((()=>{c||p||(u(),a().then((e=>{i({successMessage:"Successfully restarted configuration"})(e),h()})).catch((e=>{s({header:"Couldn't restart configuration"})(e)})).finally((()=>{m()})))}),[c,p,a,u,h,m,i,s]);return g.includes("restart")?o.createElement(Oe,(0,l.A)({edit:!0,feature:"DyncnfItem",payload:{id:e,label:"Restart"},icon:"refresh",onClick:b,disabled:f,tooltip:"Restart"},n)):null},je=e=>{let{id:t,template:n={}}=e;const{isLoading:l,entityProps:a,startLoading:i,stopLoading:s}=K(),{cmds:c=[],userDisabled:d}=a||{},[u,m]=(0,o.useState)(!d),{node:p}=H(),{user_disabled:g}=n,h=(0,O.DP)({id:t,node:p}),f=(0,O.O_)({node:p,id:t}),[b,E]=X(),{sendButtonClickedLog:y}=(0,ee.A)(),{hidden:C,isDisabled:x,tooltipText:w}=(0,be.j)({edit:!0,tooltip:u?"Disable":"Enable",disabled:l||g}),k=(0,o.useCallback)((e=>{if(!g){const n=e.currentTarget.checked;m(n),i(),h(n).then((e=>{y({feature:"DyncnfItem",description:n?"Enable item":"Disable item",id:t}),b({successMessage:"Successfully ".concat(n?"enabled":"disabled"," configuration")})(e),f()})).catch((e=>{y({feature:"DyncnfItem",description:"Failed to ".concat(n?"enable":"disable"," item"),id:t}),m(!n),E({header:"Couldn't ".concat(n?"enable":"disable"," configuration")})(e)})).finally((()=>{s()}))}}),[g,h,i,m,f,y,b,E]),S=c.includes("enable"),I=c.includes("disable");return!C&&S&&I?o.createElement(v.A,{align:"bottom",content:w},o.createElement(r.Box,{padding:[1.5,2]},o.createElement(r.Toggle,{onChange:k,checked:u,colored:!0,disabled:x}))):null},ze=()=>{const{id:e,isNewItem:t,entityProps:n}=K(),{node:l,path:o}=H(),{template:r}=n,a=(0,O.SD)({node:l,path:o,isNewItem:t})(t?r:e),i=(0,O._O)({node:l,id:r});return i?(0,S.Jz)(i):a||{}},He="text",Ue={iconColor:He,flavour:"borderless",color:He,type:"button"},We=(0,C.default)(r.Flex).attrs({alignItems:"center",border:{side:"all",color:"border"},round:!0}).withConfig({displayName:"itemActions__StyledContainer",componentId:"sc-1kpuq1a-0"})([""]),Ve=function(){let{title:e,isOpenEntity:t,isEditFromState:n,onViewButtonClick:l,onCollapseExpand:r=m()}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=ze();return o.createElement(o.Fragment,null,n?null:o.createElement(We,{gap:1},o.createElement(Pe,{title:e,template:a,onCollapseExpand:r,buttonProps:Ue}),o.createElement(Re,{id:e,template:a,buttonProps:Ue}),o.createElement(Me,{id:e,buttonProps:Ue}),t?null:o.createElement(je,{id:e,template:a})),o.createElement(We,{gap:1},n?null:o.createElement(Fe,{buttonProps:Ue}),o.createElement(De,{id:e,onClick:l,buttonProps:Ue})))},Ke=e=>{let{title:t,onViewButtonClick:n,onCollapseExpand:l,type:a,userDisabled:i,isOpenEntity:s,isEditFromState:c}=e;return o.createElement(r.Flex,{gap:2,alignItems:"center"},"template"==a?o.createElement(Ie,{title:t,userDisabled:i}):o.createElement(Ve,{title:t,onViewButtonClick:n,onCollapseExpand:l,isOpenEntity:s,isEditFromState:c}))},qe={vertical:2,horizontal:4},Ye=e=>{let{path:t,onClick:n,...a}=e;const{open:i}=K();return o.createElement(r.Flex,(0,l.A)({gap:2,onClick:n,cursor:"pointer"},a),o.createElement(r.Icon,{name:"chevron_right",color:"textLite",rotate:i?3:1}),o.createElement(le,{strong:!0},t))},$e=e=>{let{flavour:t,title:n,onViewButtonClick:r,onCollapseExpand:a,level:i,entityProps:s={},isOpenEntity:c,isEditFromState:d}=e;const{vertical:u,horizontal:m}=qe,p=(0,o.useMemo)((()=>[u,m,u,m*i]),[i]),g="path"==t;return o.createElement(re,{alignItems:"center",justifyContent:"between",padding:p,isOpenEntity:c},g?o.createElement(Ye,{path:n,onClick:a}):o.createElement(o.Fragment,null,o.createElement(he,(0,l.A)({title:n,onCollapseExpand:a},s)),o.createElement(Ke,(0,l.A)({title:n,onViewButtonClick:r,onCollapseExpand:a,isOpenEntity:c,isEditFromState:d},s))))},Ge=e=>{let{open:t,onDecline:n,onConfirm:l}=e;return t?o.createElement(r.ConfirmationDialog,{title:"Discard changes?",handleConfirm:l,handleDecline:n,confirmLabel:"Yes, discard",declineLabel:"No, keep editing",message:o.createElement(r.Flex,{column:!0,gap:2},o.createElement(r.TextBig,null,"If you exit Edit mode before submit, your changes will be lost."),o.createElement(r.TextBig,null,"Are you sure?"))}):null},Je=e=>(0,o.useEffect)((()=>{if(!e)return;const t=t=>{"Escape"==t.code&&e(t)};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)}),[e]),Qe=e=>{let{title:t,open:n,isLoading:l,isDirty:r,setIsDirty:a,toggle:i,refresh:s,refreshUserConfig:c,entityProps:d,error:u}=e;const m=d[k.D9],p=["single","job"].includes(null===d||void 0===d?void 0:d.type),[,g]=(0,O.QH)(),[h,,f,b]=(0,L.A)(),{close:E}=(0,O.IP)(),v=(0,o.useCallback)((()=>{r&&(a(!1),i(),b()),s(),c(),g(null),E(t)}),[t,E,g,r,a,i,s,c,b]),y=(0,o.useCallback)((()=>{l||(m||r?u?v():f():i())}),[l,m,r,u,v,f]);return Je((e=>{"Escape"==e.code&&n&&p&&(e.preventDefault(),y())})),{confirmationOpen:h,closeConfirmation:b,onConfirm:v,onClick:y}};var Ze=n(28738);const Xe=e=>{let{virtualIndex:t,virtualRowStart:n,flavour:a="path",title:i="",level:s=1,entityProps:c={},children:d,isNewItem:u,isOpen:m,isEditFromState:p,...g}=e;const[h,f]=(0,L.A)(u||m),{node:b,inModal:E}=H(),v=(0,O._O)({node:b,id:i})||c,y="job"==(null===v||void 0===v?void 0:v.type),C=["single","job"].includes(null===v||void 0===v?void 0:v.type),[x,,w,k]=(0,L.A)(),[S,I]=(0,o.useState)(u||p),[A,T]=(0,o.useState)(),[F,B]=(0,o.useState)(),D="path"!=a&&h&&x,{refresh:N}=(0,O.L5)(),{refresh:P}=(0,O.MQ)(),{confirmationOpen:_,closeConfirmation:M,onConfirm:R,onClick:j}=Qe({title:i,open:h,isLoading:x,isDirty:F,setIsDirty:B,refresh:N,refreshUserConfig:P,toggle:f,entityProps:v,error:A});(0,o.useEffect)((()=>{h||P()}),[h,N,P]);const z=(0,o.useCallback)((e=>{var t;u||I(null===e||void 0===e||null===(t=e.uiSchema)||void 0===t||null===(t=t.uiOptions)||void 0===t?void 0:t.fullPage)}),[I]);(0,o.useEffect)((()=>{if(void 0!==t&&void 0!==n){const e=document.querySelector(".dyncnf-virtual-row[data-key='".concat(i,"']"));e&&(e.style.transform=S&&h?"none":"translateY(".concat(n,"px)"))}}),[h,S]);const{containerProps:U,collapsibleProps:W,loaderProps:V}=(0,o.useMemo)((()=>({containerProps:{...h&&S?{position:"fixed",zIndex:"100",...E?{top:0,left:0,width:"100%",height:"100%"}:{top:"5vh",left:"5vw",width:"90vw",height:"90vh"}}:{position:"relative"},...h&&C?{border:{side:"all",color:"border"}}:{},...S?{}:{height:"100%"},background:C&&h?"modalBackground":"mainBackground",round:!0},collapsibleProps:{level:s,open:h,duration:0,flavour:a,fullPage:S,isJob:y,...h&&C?{padding:[2,2,2,4*s]}:{}},loaderProps:{position:"absolute",top:0,left:0,width:"100%",height:"100%",opacity:".9",zIndex:"100"}})),[h,S,E,C]);return o.createElement(o.Fragment,null,o.createElement(q,{id:i,open:h,isNewItem:u,isLoading:x,startLoading:w,stopLoading:k,fullPage:S,setFullPage:I,entityProps:v,isDirty:F,setIsDirty:B,error:A},o.createElement(r.Flex,(0,l.A)({"data-testid":"dyncfg-config-item-container",column:!0},U,g),o.createElement($e,{key:h,flavour:a,title:i,onViewButtonClick:j,onCollapseExpand:f,level:s,entityProps:v,isOpenEntity:h&&!!C,isEditFromState:p}),o.createElement(ae,W,o.Children.map(d,(e=>o.isValidElement(e)?o.cloneElement(e,{level:s+1,onSchemaFetch:z,setIsDirty:B,setError:T}):e))),D?o.createElement(Ze.A,(0,l.A)({title:"Loading..."},V)):null)),o.createElement(Ge,{open:_,onDecline:M,onConfirm:R}))};var et=n(73700),tt=n(51220);const nt=e=>{let{virtualIndex:t,virtualRowStart:n,flavour:r="entity",entryKey:a,entityProps:i,configItemLevel:s=1,children:c,...d}=e;return o.createElement(o.Fragment,null,o.createElement(Xe,(0,l.A)({virtualIndex:t,virtualRowStart:n,flavour:r,title:a,level:s,entityProps:i},d),c))};var lt=n(74810),ot=n(36091),rt=n(4659),at=n(87292),it=n(68831);const st=C.default.span.withConfig({displayName:"markdocSchema__Strong",componentId:"sc-1se2vza-0"})(["font-weight:bold;"]),ct=C.default.ol.withConfig({displayName:"markdocSchema__OrderedList",componentId:"sc-1se2vza-1"})(["list-style:roman;padding-left:14px;"]),dt=C.default.ul.withConfig({displayName:"markdocSchema__UnorderedList",componentId:"sc-1se2vza-2"})(['list-style-image:url("','/img/list-style-image.svg");padding-left:14px;'],it.A.assetsBaseURL),ut={heading:{render:e=>{let{level:t=1,...n}=e,a=r.H1;switch(t){case 2:a=r.H2;break;case 3:a=r.H3;break;case 4:a=r.H4;break;case 5:a=r.H5;break;case 6:a=r.H6}return o.createElement(a,(0,l.A)({margin:[2,0]},n))},attributes:{id:{type:String},level:{type:Number}}},paragraph:{render:e=>{let{children:t,...n}=e;return o.createElement(r.Flex,n,o.createElement(r.Text,null,t))}},strong:{render:st},link:{render:e=>{let{children:t,href:n,...r}=e;return o.createElement(rt.A,(0,l.A)({href:n,rel:"noopener noreferrer",target:"_blank"},r),t)},attributes:{href:{type:String}}},code:{render:e=>{let{content:t,...n}=e;return o.createElement(at.R0,n,t)},attributes:{content:{type:String}}},fence:{render:e=>{let{content:t,...n}=e;return o.createElement(at.Ay,n,t)},attributes:{content:{type:String}}},list:{render:e=>{let{ordered:t,children:n,...l}=e;const r=t?ct:dt;return o.createElement(r,l,n)},attributes:{ordered:{type:Boolean}}}},mt=e=>{let{children:t}=e;return o.createElement(ot.A,{transformConfiguration:{nodes:ut}},t)},pt=e=>{var t;let{description:n}=e;return("string"==typeof n&&n?n:"object"==typeof n?null===n||void 0===n||null===(t=n.props)||void 0===t?void 0:t.description:null)?o.createElement(v.A,{isBasic:!0,plain:!0,allowHoverOnTooltip:!0,content:o.createElement(r.Flex,{width:{max:70}},o.createElement(mt,null,n))},o.createElement(r.Icon,{name:"information",color:"text",size:"small"})):null},gt=e=>{var t;let{description:n}=e;if(!n)return null;const l="string"==typeof n?n:null===(t=n.props)||void 0===t?void 0:t.description;return o.createElement(mt,null,l)},ht=e=>{let{title:t,required:n,description:l,help:a}=e;return t?o.createElement(r.Flex,{column:!0,gap:.5},o.createElement(r.Flex,{alignItems:"center",gap:1},o.createElement(r.TextBig,{strong:!0},t,n?"*":null),a?o.createElement(pt,{description:a}):null),o.createElement(gt,{description:l})):null},ft=e=>{let{id:t,displayLabel:n,label:l,required:r,description:a,schema:i,uiSchema:s={}}=e;const c=s["ui:title"]||l,d=s["ui:help"],u=["array","boolean"].includes(i.type)||Array.isArray(i.type)&&(i.type.includes("array")||i.type.includes("boolean"));return c&&(n||u)?o.createElement("label",{htmlFor:t},o.createElement(ht,{title:c,required:r,description:a,help:d})):null},bt=e=>{let{id:t,label:n,required:l,description:a,errors:i,children:s,displayLabel:c,schema:d,classNames:u,hidden:m,uiSchema:p}=e;return m?null:o.createElement(r.Flex,{width:"100%",className:"".concat(u," dyncfg-field-container"),column:!0,gap:.5},o.createElement(ft,{id:t,displayLabel:c,label:n,required:l,description:a,schema:d,uiSchema:p}),o.createElement(r.Flex,{className:"dyncfg-field-content",column:!0,padding:[0,0,0,1]},s,i?o.createElement(r.TextMicro,{color:"errorText"},i):null))},Et=(vt=e=>{let{onAddClick:t,schema:n,registry:a,properties:i,...s}=e;const{WrapIfAdditionalTemplate:c,ButtonTemplates:d}=a.templates,{AddButton:u}=d;return o.createElement(o.Fragment,null,o.createElement(r.Flex,(0,l.A)({className:"dyncfg-object-field-content",column:!0,gap:3,padding:[0,0,0,3],border:{side:"left",color:"border"}},s),i.map((e=>o.createElement(c,(0,l.A)({key:e.content.key,elemKey:e.content.key},e.content.props),e.content)))),n.additionalProperties?o.createElement(r.Flex,{padding:[2]},o.createElement(u,{onClick:t(n)})):null)},e=>{let{className:t,...n}=e;return null!==t&&void 0!==t&&t.includes("dyncfg-grid")?o.createElement("div",{className:t},o.createElement(vt,n)):o.createElement(vt,n)});var vt;const yt=(0,o.createContext)(),Ct=e=>{let{children:t}=e;const[n,l]=(0,o.useState)({});return o.createElement(yt.Provider,{value:{collapsibleItemsState:n,setCollapsibleItemsState:l}},t)},xt=e=>{const{properties:t,uiSchema:n}=e,{tabs:a,rest:i}=n["ui:options"]||{},[s,c]=(0,o.useState)(0),d=(0,o.useMemo)((()=>(e=>{let{properties:t=[],tabs:n=[]}=e;return n.map((e=>({...e,properties:t.filter((t=>e.fields.includes(t.name)))})))})({properties:t,tabs:a})),[t,a]);return o.createElement(Ct,null,(i||[]).length?o.createElement(Et,(0,l.A)({},e,{properties:t.filter((e=>i.includes(e.name)))})):null,o.createElement(r.Tabs,{selected:s,onChange:c,height:"100%"},d.map((t=>{let{title:n,...a}=t;return o.createElement(r.Tab,{key:n,label:n},o.createElement(Et,(0,l.A)({},e,a,{border:{side:"top",color:"border"},padding:[2,0,0,3]})))}))))},wt={tabs:{Component:xt},default:{Component:Et}},kt=e=>{var t;const{title:n,description:l,required:a,uiSchema:i={},idSchema:s,formData:c}=e,d=s.$id,u=i["ui:flavour"],p=i["ui:help"],{Component:g}=wt[u]||wt.default,h=!(null===i||void 0===i||!i["ui:collapsible"])||!(null===i||void 0===i||null===(t=i["ui:options"])||void 0===t||!t.collapsible),{inContext:f,isItemDirty:b,isItemExpanded:E,setItemState:v}=(()=>{const e=(0,o.useContext)(yt),{collapsibleItemsState:t,setCollapsibleItemsState:n}=e||{},l=(0,o.useCallback)((e=>void 0!==t[e]),[t]),r=(0,o.useCallback)((e=>t[e]),[t]),a=(0,o.useCallback)(((e,t)=>{n((n=>({...n,[e]:t})))}),[n]);return{inContext:!!e,isItemDirty:e?l:m(),isItemExpanded:e?r:m(),setItemState:e?a:m()}})(),y=i["ui:initiallyExpanded"]||!!c,C=(0,o.useMemo)((()=>b(d)?E(d):y),[b,E]),[x,w]=(0,L.A)(C);return(0,o.useEffect)((()=>{f&&v(d,x)}),[f,x,v]),o.createElement(r.Flex,{className:"dyncfg-object-field-container",width:"100%",column:!0,gap:2},n?o.createElement(r.Flex,{gap:1,alignItems:"center"},o.createElement(ht,{title:n,required:a,description:l,help:p}),h?o.createElement(r.Icon,{name:"chevron_down",color:"text",size:"small",onClick:w,cursor:"pointer",rotate:x?2:0}):null):null,o.createElement(r.Collapsible,{className:"dyncfg-object-field-collapsible",open:x||!h,duration:0},o.createElement(g,e)))};n(25440);const St=(0,o.forwardRef)(((e,t)=>{let{title:n,active:a,index:i,setActiveTab:s,onDropIndexClick:c,onReorderClick:d,reordering:u,setReordering:m,hasRemove:p,hasMoveUp:g,hasMoveDown:h,...f}=e;const{onAddIndexClick:b,onCopyIndexClick:E,...v}=f,y=(0,o.useCallback)((e=>{p&&c(e)()}),[p,c]);return(0,o.useEffect)((()=>{if(2==(null===u||void 0===u?void 0:u.length)&&u[0]==i){const e=u[1];d(i,e)(),s(e),m()}}),[u]),o.createElement(r.NavigationTab,(0,l.A)({ref:t},v,{index:i,draggable:!!h&&!!g,active:a,icon:p?o.createElement(r.Icon,{name:"x",size:"small"}):null,onClick:()=>{s(i)},onRemove:y,fixed:!p}),o.createElement(r.TextBig,{whiteSpace:"nowrap"},n))})),It=(0,C.default)(r.IconButton).attrs((e=>({small:!0,padding:[0,1],...e}))).withConfig({displayName:"styled__StyledIconButton",componentId:"sc-xc1c2v-0"})(["height:",";"],(e=>{let{inTabs:t}=e;return t?"auto":"24px"})),At=e=>{let{icon:t,iconType:n,...r}=e;return o.createElement(It,(0,l.A)({flavour:"default",icon:"plus",tooltip:"Add item",type:"button",neutral:!1},r))},Tt=e=>{let{icon:t,iconType:n,...r}=e;return o.createElement(It,(0,l.A)({flavour:"hollow",icon:"copy",tooltip:"Copy current item into a new one",type:"button",neutral:!1},r))};var Ft=n(3705);const Bt=e=>{var t;let{items:n,onAddClick:l,onCopyClick:a,canAdd:i}=e;const[s,{width:c}]=(0,Ft.A)(),[d,u]=(0,o.useState)(0),[m,p]=(0,o.useState)();(0,o.useEffect)((()=>{d>=n.length&&u(0)}),[n.length]);const g=i?"calc(".concat(c,"px - 80px)"):"".concat(c,"px");return o.createElement(r.Flex,{ref:s,column:!0},o.createElement(r.Flex,{width:"".concat(c,"px"),margin:[0,0,2,0]},o.createElement(r.NavigationTabs,{width:g,overflow:{horizontal:"auto"}},o.createElement(r.DraggableTabs,{items:n.map(((e,t)=>({id:e.key,title:"Item ".concat(t),active:d==t,setActiveTab:u,reordering:m,setReordering:p,...e}))),Item:St,onDragEnd:(e,t)=>{p([e,t])}})),i?o.createElement(o.Fragment,null,o.createElement(Tt,{onClick:()=>a(d),padding:[1,3],inTabs:!0,groupFirst:!0}),o.createElement(At,{onClick:l,padding:[1,3],inTabs:!0,groupLast:!0})):null),o.Children.map(null===(t=n[d])||void 0===t?void 0:t.children,(e=>o.isValidElement(e)?o.cloneElement(e,{title:""}):e)))},Dt=(0,o.memo)(Bt),Nt=e=>{let{icon:t,iconType:n,...r}=e;return o.createElement(It,(0,l.A)({flavour:"hollow",icon:"checkmark_partial_s",danger:!0,tooltip:"Remove item",type:"button"},r))},Pt=e=>{let{icon:t,iconType:n,...r}=e;return o.createElement(It,(0,l.A)({flavour:"hollow",icon:"sort_ascending",tooltip:"Move up",type:"button"},r))},_t=e=>{let{icon:t,iconType:n,...r}=e;return o.createElement(It,(0,l.A)({flavour:"hollow",icon:"sort_descending",tooltip:"Move down",type:"button"},r))},Lt=(0,C.default)(r.Flex).attrs((e=>({open:!0,...e}))).withConfig({displayName:"collapsible__ContentWrapper",componentId:"sc-6ate9-0"})(["display:",";"],(e=>{let{open:t}=e;return t?"flex":"none"})),Mt=(0,se.A)(r.Icon),Ot=e=>{let{title:t="",isCollapsible:n,isOpen:a,onChange:i,children:s,...c}=e;const[d,u]=(0,L.A)(a);return(0,o.useEffect)((()=>{i(d)}),[d]),n?o.createElement(r.Flex,{width:"100%",column:!0,padding:[3,0]},o.createElement(r.Flex,{gap:2},o.createElement(Mt,{name:"chevron_left",size:"small",color:"textLite",rotate:d?1:3,onClick:u,cursor:"pointer",tooltip:d?"Hide contents":"Show contents"}),t?o.createElement(r.Text,{strong:!0},t):null),o.createElement(Lt,(0,l.A)({open:d},c),s)):s},Rt=e=>{var t,n;let{hasMoveDown:l,hasMoveUp:a,hasRemove:i,index:s,totalItems:c,onAddIndexClick:d,onDropIndexClick:u,onReorderClick:m,canAdd:p,uiSchema:g={},onCopyClick:h,children:f}=e;const[b,E]=(0,o.useState)(!0),v=a||l||i||p,y=m(s,s-1),C=m(s,s+1),x=u(s),w=d(s+1),k=!(null===g||void 0===g||!g["ui:collapsible"])||!(null===g||void 0===g||null===(t=g["ui:options"])||void 0===t||!t.collapsible),S=(0,o.useCallback)((e=>{E(e)}),[E]);return o.createElement(r.Flex,{width:"100%",gap:2,alignItems:b?"start":"center",justifyContent:"between",border:{side:"all",color:"border"},padding:[2,4]},o.createElement(Ot,{isCollapsible:k,title:null===(n=f.props)||void 0===n?void 0:n.title,isOpen:b,onChange:S},f),v?o.createElement(r.Flex,{gap:2,padding:[2,0]},a?o.createElement(Pt,{onClick:y}):null,l?o.createElement(_t,{onClick:C}):null,i?o.createElement(Nt,{onClick:x}):null,p?o.createElement(Tt,{onClick:()=>h(s)}):null,p&&s==c-1?o.createElement(At,{onClick:w}):null):null)},jt=e=>{let{onCopyClick:t,items:n}=e;return n.map((e=>o.createElement(Rt,(0,l.A)({key:e.key,onCopyClick:t},e))))},zt=(0,o.memo)(jt),Ht=e=>{let{canAdd:t,onAddClick:n,openEmptyItem:l}=e;return(0,o.useEffect)((()=>{l&&n()}),[l,n]),o.createElement(r.Flex,{gap:2,alignItems:"center"},o.createElement(r.TextBig,null,"No items"),t?o.createElement(At,{onClick:n}):null)},Ut=(0,se.A)(r.Toggle),Wt=e=>{var t,n;const{items:a,canAdd:i,onAddClick:s,idSchema:c,formContext:d}=e,u="list"==(null===e||void 0===e||null===(t=e.uiSchema)||void 0===t?void 0:t["ui:listFlavour"]),m=!(null===e||void 0===e||null===(n=e.uiSchema)||void 0===n||!n["ui:openEmptyItem"]),[p,g]=(0,L.A)(u),{formData:h}=K(),f=p?zt:Dt,b=(0,o.useCallback)((e=>{var t;const n=null===(t=a[e])||void 0===t||null===(t=t.children)||void 0===t||null===(t=t.props)||void 0===t?void 0:t.formData,{$id:l}=c,o=((e,t,n)=>{const l=e.replace(/^root_/,"").split("_");let o=n;for(let r=0;r{var t;let{elemKey:n,onKeyChange:l,schema:a,onDropPropertyClick:i,registry:s,children:c}=e;const[d,u]=(0,o.useState)((null===c||void 0===c||null===(t=c.props)||void 0===t?void 0:t.name)||""),{RemoveButton:m}=s.templates.ButtonTemplates,p=Vt.Rr in a,g=(0,o.useCallback)((e=>{i(n)(e)}),[i,n]),h=(0,o.useCallback)((e=>u(e.target.value)),[u]);return p?o.createElement(r.Flex,{width:"100%",gap:2,alignItems:"center"},o.createElement(r.Flex,{column:!0,gap:1,flex:{grow:1,shrink:1}},o.createElement(r.TextBig,{strong:!0},"Key"),o.createElement(r.TextInput,{value:d,onInput:h,onBlur:e=>l(e.target.value),border:"inputBorder",size:"small"})),o.createElement(r.Flex,{flex:{grow:2,shrink:1}},c),o.createElement(r.Flex,{column:!0,gap:.5},o.createElement(r.TextBig,{opacity:"0"},"x"),o.createElement(m,{onClick:g}))):c},qt={FieldTemplate:bt,ArrayFieldTemplate:Wt,ObjectFieldTemplate:kt,WrapIfAdditionalTemplate:Kt,ErrorListTemplate:()=>null,ButtonTemplates:{SubmitButton:()=>o.createElement(r.Button,{label:"Save"}),AddButton:At,RemoveButton:Nt,MoveUpButton:Pt,MoveDownButton:_t}},Yt=e=>{let{value:t,type:n,disabled:l,onChange:a,onBlur:i,placeholder:s,schema:c,rawErrors:d}=e;const u=n||(e=>"integer"==e||Array.isArray(e)&&e.includes("integer")?"number":"text")(c.type),m="number"==u?null==t||void 0==t?0:t:t||"";return o.createElement(r.TextInput,{value:m,type:u,placeholder:s,onChange:e=>{var t;return a(null===(t=e.target)||void 0===t?void 0:t.value)},onBlur:i,disabled:l,error:!(null===d||void 0===d||!d.length),hideErrorMessage:!0,border:"inputBorder",size:"small"})},$t=e=>{let{value:t,disabled:n,onChange:l}=e;return o.createElement(r.Flex,null,o.createElement(r.Checkbox,{checked:t,onChange:l,disabled:n}))};n(3064),n(72577);const Gt=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!e||0==t.length)return"";if(Array.isArray(e)){return[...t.filter((t=>e.map((e=>"string"==typeof e?e:e.value)).includes(t.value))),...e.filter((e=>"object"==typeof e&&e.__isNew__))]}return t.find((t=>t.value==e))},Jt=e=>{let{value:t,options:n,disabled:l,multiple:a,onChange:i,uiSchema:s}=e;const{enumOptions:c}=n||{},d=null===s||void 0===s?void 0:s["ui:creatable"],u=(0,o.useCallback)((e=>{var t;i((t=e)?Array.isArray(t)?t.map((e=>e.value)):t.value||"":"")}),[]);return c?o.createElement(r.Select,{value:Gt(t,c),isMulti:a,options:c,onChange:u,isDisabled:l,isCreatable:d,styles:{size:"tiny"}}):null},Qt=e=>{let{value:t,disabled:n,onChange:l,uiSchema:a,options:i}=e;const s=a[Vt.ce],c=(null===s||void 0===s?void 0:s.enumOptions)||(null===i||void 0===i?void 0:i.enumOptions),d=null===s||void 0===s?void 0:s.inline,u="buttonGroup"==(null===s||void 0===s?void 0:s.flavour),m=(0,o.useMemo)((()=>({gap:2,...d?{alignItems:"center"}:{column:!0}})),[d]);if(u){const e=c.map((e=>{var t;return{...e,title:null===(t=e.schema)||void 0===t?void 0:t.description}}));return o.createElement(r.ButtonGroup,{items:e,checked:t,onChange:l,buttonProps:{type:"button",small:!0}})}return c?o.createElement(r.Flex,m,c.map((e=>{var a;return o.createElement(r.RadioButton,{key:e.value,checked:t==e.value,onChange:()=>l(e.value),disabled:n},o.createElement("label",{title:null===e||void 0===e||null===(a=e.schema)||void 0===a?void 0:a.description},e.label))}))):null},Zt=C.default.textarea.withConfig({displayName:"textareaWidget__Textarea",componentId:"sc-3aqoej-0"})(["background:",";border-width:1px;border-style:solid;border-color:",";border-radius:2px;color:",";padding:8px 12px;opacity:",';font-size:14px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif;'],(0,r.getColor)("inputBg"),(e=>{let{hasValue:t,error:n}=e;return t?(0,r.getColor)("text"):n?(0,r.getColor)("error"):(0,r.getColor)("inputBorder")}),(e=>{let{disabled:t,hasValue:n}=e;return n?(0,r.getColor)("text"):t?(0,r.getColor)("placeholder"):(0,r.getColor)("textLite")}),(e=>{let{disabled:t}=e;return t?".4":"1"})),Xt=e=>{let{value:t,placeholder:n,disabled:l,onChange:r,options:a,rawErrors:i}=e;const{rows:s=2}=a||{};return o.createElement(Zt,{placeholder:n,disabled:l,onChange:e=>r(e.target.value),rows:s,hasValue:!!t,error:!(null===i||void 0===i||!i.length)},t)},en=e=>o.createElement(Yt,(0,l.A)({type:"password"},e)),tn=e=>o.createElement(Yt,(0,l.A)({type:"url"},e));var nn=n(40267);const ln=/^\$this\s*(==|>|<|>=|<=)\s*\((\d+)\)$/,on=/^\$this\s*(==|>|<|>=|<=)\s*\(\(\$status\s*(==|>|<|>=|<=)\s*(\$WARNING|\$CRITICAL)\s*\)\s*\?\s*\((\d+)\)\s*:\s*\((\d+)\)\)$/,rn=Object.values({lt:{label:"Lower than",value:"lt",symbol:"<"},lte:{label:"Lower than or equal",value:"lte",symbol:"<="},eq:{label:"Equal",value:"eq",symbol:"=="},gt:{label:"Greater than",value:"gt",symbol:">"},gte:{label:"Greater than or equal",value:"gte",symbol:">="}}),an={$CRITICAL:"critical",$WARNING:"warning"},sn={critical:"$CRITICAL",warning:"$WARNING"},cn=e=>{let{value:t,onChange:n,isDisabled:l}=e;const a=rn.find((e=>{let{symbol:n}=e;return n==t}))||"";return o.createElement(r.Select,{options:rn,value:a,onChange:n,isDisabled:l,styles:{size:"tiny"}})},dn=e=>{let{isDisabled:t,parsedExpression:n={},toggleRecoveryThreshold:l,onChangeThreshold:a}=e;const{isComplex:i,threshold:s}=n,c=(0,o.useCallback)((e=>{t||a(e.target.value)}),[a,t]),d=(0,o.useCallback)((e=>{t||l(e)}),[l,t]);return i?o.createElement(r.Flex,{alignItems:"center",gap:2},o.createElement(r.Pill,{flavour:"success",hollow:!0,icon:"reload"},"Recovery Threshold"),o.createElement(r.TextInput,{onChange:c,value:s,type:"number",min:0,size:"tiny",metaShrinked:!0,containerStyles:{width:"80px"},disabled:t}),o.createElement(v.A,{content:"Remove recovery threshold"},o.createElement(r.Button,{type:"button",icon:"trashcan",flavour:"borderless",onClick:()=>d(!1),iconColor:"textLite",iconSize:"small",disabled:t}))):o.createElement(r.Button,{type:"button",label:"Recovery Threshold",icon:"plus",flavour:"borderless",onClick:()=>d(!0),disabled:t})},un=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{isSimple:t,isComplex:n,operator:l,status:o,value:r,threshold:a}=e;return t?"$this ".concat(l," (").concat(r,")"):n?"$this ".concat(l," (($status >= ").concat(o,") ? (").concat(a,") : (").concat(r,"))"):""},mn=e=>{let{status:t,parsedExpression:n,onChange:l,isDisabled:r}=e;return{onOperatorChange:(0,o.useCallback)((e=>{let{symbol:t}=e;if(!r){const e=un({...n,operator:t});l(e)}}),[n,l,r]),onValueChange:(0,o.useCallback)((e=>{if(!r){const t=un({...n,value:e});l(t)}}),[n,l,r]),toggleRecoveryThreshold:(0,o.useCallback)((e=>{if(!r){const o=!e,r=!!e,a=un({...n,isSimple:o,isComplex:r,status:sn[t],threshold:"70"});l(a)}}),[t,n,l,r]),onChangeThreshold:(0,o.useCallback)((e=>{if(!r){const t=un({...n,threshold:e});l(t)}}),[n,l,r])}},pn=e=>{let{isDisabled:t,expression:n="",onChange:l}=e;const a=t?"":n,i=(0,o.useCallback)((e=>{var n;t||l((null===(n=e.target)||void 0===n?void 0:n.value)||"")}),[t,l]);return o.createElement(r.Flex,{column:!0,gap:1},o.createElement(r.Text,null,"Formula"),o.createElement(r.Box,{width:"500px"},o.createElement(r.TextInput,{value:a,placeholder:"$this",onChange:i,size:"tiny",disabled:t})))},gn=e=>{let{onDecline:t,onConfirm:n}=e;return o.createElement(r.ConfirmationDialog,{title:"Reset expression",confirmLabel:"Continue",handleConfirm:n,handleDecline:t,message:o.createElement(r.Flex,{gap:2,column:!0},o.createElement(r.TextBig,null,"Your custom expression is going to be reset."),o.createElement(r.TextBig,null,"Are you sure you want to change?"))})},hn=e=>t=>{const{isSimple:n,isComplex:a}=t.parsedExpression,i=t.value&&!n&&!a,[s,c]=(0,o.useState)(i?1:0),[d,,u,m]=(0,L.A)(),p=(0,o.useCallback)((e=>{"0"==e.target.value?u():c(1)}),[u,c]),g=(0,o.useCallback)((()=>{c(0),m()}),[c,m]),h=(0,o.useMemo)((()=>[{radioButtonValue:0,isDisabled:0!=s,checked:0==s,Component:e},{radioButtonValue:1,isDisabled:1!=s,checked:1==s,Component:pn}]),[s]);return o.createElement(o.Fragment,null,o.createElement(r.Flex,{column:!0,gap:2},h.map((e=>{let{radioButtonValue:n,isDisabled:a,checked:i,Component:s}=e;return o.createElement(r.Flex,{key:n,alignItems:"center",gap:2},o.createElement(r.RadioButton,{value:n,checked:i,onChange:p}),o.createElement(s,(0,l.A)({isDisabled:a},t)))}))),d?o.createElement(gn,{onDecline:m,onConfirm:g}):null)},fn=hn((e=>{let{isDisabled:t,parsedExpression:n={},options:l={},onChange:a}=e;const{alertStatus:i}=l,{operator:s,value:c,status:d}=n,u=an[d]||i,{onOperatorChange:m,onValueChange:p,toggleRecoveryThreshold:g,onChangeThreshold:h}=mn({status:u,parsedExpression:n,onChange:a,isDisabled:t});return o.createElement(r.Flex,{alignItems:"center",gap:2},o.createElement(r.Box,null,o.createElement(nn.A,{width:"80px",flavour:u,textSize:"small"},(0,Q.Zr)(u,!0))),o.createElement(cn,{value:s,onChange:m,isDisabled:t}),o.createElement(r.TextInput,{onChange:e=>p(e.target.value),value:c,type:"number",disabled:t,min:0,size:"tiny",metaShrinked:!0,containerStyles:{width:"80px"}}),o.createElement(dn,{isDisabled:t,parsedExpression:n,toggleRecoveryThreshold:g,onChangeThreshold:h}))})),bn=e=>{const{alertStatus:t}=e.options,n=(0,o.useMemo)((()=>function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=e.match(ln);if(t)return{isSimple:!0,operator:t[1],value:t[2]};const n=e.match(on);return n?{isComplex:!0,operator:n[1],statusOperator:n[2],status:n[3],threshold:n[4],value:n[5]}:{}}(e.value)),[e.value]);return t?o.createElement(fn,(0,l.A)({expression:e.value,parsedExpression:n},e)):(console.warn("".concat(e.id," field is declared to be an alert expression but it does not provide an alert status")),null)},En=(e,t)=>{const n=parseFloat(e),{multiplier:l}=t||{};return{num:n,multiplier:parseFloat(l)}},vn=e=>{let{value:t=0,onChange:n=m(),scale:l=[],defaultScale:a,min:i=0,step:s=1}=e;const c=l.find((e=>{let{value:t}=e;return t==a}))||l[0],[d,u]=(0,o.useState)(c),p=((e,t)=>{const{num:n,multiplier:l}=En(e,t);return l&&!isNaN(n)?Math.round(n/l*100)/100:0})(t,d),g=(0,o.useCallback)((e=>{const t=((e,t)=>{const{num:n,multiplier:l}=En(e,t);return l&&!isNaN(n)?n*l:0})(e.target.value,d);n(t)}),[d,n]);return o.createElement(r.Flex,{gap:2,alignItems:"center"},o.createElement(r.TextInput,{value:p,onChange:g,type:"number",min:i,step:s,size:"small"}),o.createElement(r.Select,{value:d,options:l,onChange:u,styles:{minWidth:"80px",size:"tiny"}}))},yn=[{value:"sec",label:"Seconds",multiplier:1},{value:"min",label:"Minutes",multiplier:60},{value:"hour",label:"Hours",multiplier:3600},{value:"day",label:"Days",multiplier:86400},{value:"week",label:"Weeks",multiplier:604800},{value:"month",label:"Months",multiplier:2592e3},{value:"year",label:"Years",multiplier:31536e3}],Cn=e=>{const{schema:t={}}=e,{type:n}=t,r="number"==n?.1:1,{scales:a}=e.options||{},i=a?yn.filter((e=>{let{value:t}=e;return a.includes(t)})):yn;return o.createElement(vn,(0,l.A)({scale:i,step:r},e))},xn=e=>{var t;return o.createElement(Cn,(0,l.A)({},e,{defaultScale:null===(t=e.options)||void 0===t?void 0:t.scale}))},wn=[{value:"B",label:"Bytes",multiplier:1},{value:"KiB",label:"KiB",multiplier:1024},{value:"MiB",label:"MiB",multiplier:Math.pow(1024,2)},{value:"GiB",label:"GiB",multiplier:Math.pow(1024,3)},{value:"TiB",label:"TiB",multiplier:Math.pow(1024,4)}],kn=e=>{const{scales:t}=e.options||{},n=t?wn.filter((e=>{let{value:n}=e;return t.includes(n)})):wn;return o.createElement(vn,(0,l.A)({scale:n},e))},Sn={TextWidget:Yt,CheckboxWidget:$t,SelectWidget:Jt,RadioWidget:Qt,TextareaWidget:Xt,PasswordWidget:en,URLWidget:tn,alertExpressionWidget:bn,durationWidget:xn,memorySizeWidget:e=>{var t;return o.createElement(kn,(0,l.A)({},e,{defaultScale:null===(t=e.options)||void 0===t?void 0:t.scale}))}};var In=n(22086);const An=(0,C.default)(In.Ay).withConfig({displayName:"styled__StyledForm",componentId:"sc-epjsfn-0"})(["display:flex;flex-direction:column;justify-content:space-between;height:100%;overflow-y:auto;padding-right:8px;"]);var Tn=n(83084),Fn=n(81638),Bn=n(30577),Dn=n(93615);const Nn=C.default.div.withConfig({displayName:"styled__StyledTerminalCommand",componentId:"sc-1oflxul-0"})(["display:flex;position:relative;flex-direction:column;color:",";background:",";border:1px solid ",";border-radius:4px;overflow-wrap:anywhere;white-space:pre-wrap;padding:16px 16px 24px;width:100%;height:100%;font-family:monospace;font-weight:bold;letter-spacing:0.09px;line-height:16px;font-size:12px;word-break:break-word;overflow-y:auto;"],(0,r.getColor)("primary"),(0,r.getColor)("terminalGreen"),(0,r.getColor)("primary")),Pn=(0,C.default)(r.Icon).withConfig({displayName:"styled__StyledIcon",componentId:"sc-1oflxul-1"})(["display:flex;align-self:flex-end;cursor:pointer;position:absolute;bottom:16px;right:16px;"]);var _n=n(3914),Ln=n(22292),Mn=n(19673),On=n(28061);const Rn={Business:!0,Pro:!0,Homelab:!0,Community:!1},jn=(0,se.A)(r.Button),zn=e=>{let{getShouldUpgrade:t,...n}=e;const{value:l}=(0,Mn.JN)(),r=(0,a.JT)("billing:Manage"),i=(0,On.A)(),s=(0,o.useMemo)((()=>"function"==typeof t?t(l):!function(){return Rn[(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).class]}(l)),[t,l]),c=(0,o.useMemo)((()=>s?r?"Upgrade your plan to use this feature":"You don't have sufficient permissions to upgrade the plan":null),[r,s]),d=(0,o.useMemo)((()=>({label:"Upgrade now!",onClick:i,tooltip:c,disabled:!r,noWrapper:!0,...n})),[i,c,r,n]);return s?o.createElement(jn,d):null},Hn=function(){let{getShouldUpgrade:e,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,Ln.uW)("isAnonymous"),r=(0,_n.dg)();return n||r?null:o.createElement(zn,(0,l.A)({getShouldUpgrade:e},t))};var Un=n(18682);const Wn=e=>{let{error:t}=e;return o.createElement(r.Flex,{padding:[4]},o.createElement(r.Text,{color:"error"},t))},Vn=e=>o.createElement(r.Flex,(0,l.A)({column:!0,gap:2},e),o.createElement(r.Flex,{gap:2,alignItems:"center"},o.createElement(r.Icon,{color:"warning",name:"warning_triangle"}),o.createElement(r.Text,null,"This feature is only available to paid plans")),o.createElement(Hn,{small:!0})),Kn=e=>{let{canGetUserConfig:t,onOpenTerminal:n}=e;const{value:l,error:a}=(0,O.MQ)(),i=(0,o.useMemo)((()=>(e=>e?e.replace(/password:\s*[^ \n]*/i,"password: ****"):e)(l)),[l]),{hasPermission:s}=(0,be.j)({edit:!0});return(0,o.useEffect)((()=>{n()}),[]),t?a?o.createElement(Wn,{error:a}):s?o.createElement(Nn,null,i,o.createElement(Pn,{name:"copy",size:"small",color:"textLite",onClick:(0,Un.C)(l,{text:"Config copied to your clipboard."})})):o.createElement(Vn,null):o.createElement(r.Flex,{padding:[4]},o.createElement(r.Text,null,"Configuration text export is not supported by this node."))},qn={configuration:{iconName:"gear",color:{active:"success",notActive:"textLite"},width:"14px",Content:Kn,dataTestId:"configurationTab",label:"Config"}},Yn=["configuration"],$n=e=>{let{isOpen:t,toggleIsOpen:n,canGetUserConfig:l,onOpenTerminal:r}=e;const{Content:a}=qn.configuration;return o.createElement(Fn.Ay,{collapsedComponent:o.createElement(Bn.A,{onClickTab:n,availableTabs:qn,tabsToShow:Yn}),isOpen:t,header:o.createElement(Dn.A,{isOpen:t,onToggle:n,title:"Configuration",icon:null})},t?o.createElement(a,{padding:[0,3,30],canGetUserConfig:l,onOpenTerminal:r}):null)},Gn=e=>{let{title:t="Error",children:n,...a}=e;return o.createElement(r.Flex,(0,l.A)({column:!0,gap:2},a),o.createElement(r.Flex,{alignItems:"center",gap:2},o.createElement(r.Icon,{name:"warning_triangle",color:"errorText"}),o.createElement(r.TextBigger,{color:"errorText"},t)),n)};var Jn=n(63314);const Qn=function(){let{remainingErrors:e=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[t,n]=(0,L.A)();return o.createElement(o.Fragment,null,o.createElement(r.Collapsible,{open:t,duration:0},e.map((e=>{let{message:t}=e;return o.createElement(r.Text,{key:t,color:"errorText"},t)}))),o.createElement(r.Flex,{padding:[2,0,0,0]},o.createElement(r.Button,{flavour:"hollow",neutral:!0,small:!0,label:t?"Hide":"Show ".concat(e.length," more"),onClick:n})))},Zn=function(){let{id:e,errors:t=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t.length?o.createElement(Jn.Ay,{feature:"DyncnfForm",id:e,validationErrors:!0},o.createElement(Gn,null,o.createElement(r.Flex,{alignItems:"start",column:!0},o.createElement(r.Text,{color:"errorText"},t[0].message),t.length>1?o.createElement(Qn,{remainingErrors:t.slice(1)}):null))):null},Xn=(0,C.default)(r.Flex).attrs((e=>({padding:[2,4,2,1.5],border:{side:"bottom",color:"border"},cursor:"pointer",...e}))).withConfig({displayName:"styled__StyledMenuItem",componentId:"sc-1sw1he6-0"})(["&:last-child{border:none;}&:hover{background:",";}"],(0,r.getColor)("modalBackground")),el=e=>{let{id:t,isActive:n,title:l,description:a,setSubmitType:i,closeMenu:s}=e;const c=(0,o.useCallback)((()=>{i(t),s()}),[t,i,s]);return o.createElement(Xn,{onClick:c},o.createElement(r.Flex,{gap:1},o.createElement(r.Box,{width:"16px",height:"16px"},n?o.createElement(r.Icon,{name:"check",color:"primary"}):null),o.createElement(r.Flex,{column:!0,gap:1},o.createElement(r.TextBig,{strong:!0},l),o.createElement(r.Text,null,a))))},tl=e=>{let{submitType:t,setSubmitType:n,closeMenu:a,node:i}=e;const s=(0,o.useMemo)((()=>(e=>[{id:"submit",title:"Submit",description:null!==e&&void 0!==e&&e.label?"Submit your changes to ".concat(e.label," node"):"Submit your changes"},{id:"multiple_submit",title:"Submit to multiple nodes",description:"Submit your changes to multiple nodes. You can use parent nodes to apply your changes automatically to their children."}])(i)),[i]);return o.createElement(r.Flex,{width:120,position:"absolute",column:!0,bottom:30,right:0,round:!0,background:"tooltip",border:{side:"all",color:"border"}},s.map((e=>o.createElement(el,(0,l.A)({key:e.id},e,{isActive:t==e.id,setSubmitType:n,closeMenu:a})))))};var nl=n(94177),ll=n(99292),ol=n(42828);const rl={...ol.Ii,Live:{...ol.Ii.Live,head:{...ol.Ii.Live.head,hasML:!1,hasParentNode:!0,hasFn:!1},node:{...ol.Ii.Live.node,showMl:!1,showParentNode:!0,showFn:!1}}},al=e=>{let{extraKey:t=k.q4}=e;return o.createElement(r.Flex,{column:!0,height:{max:"60vh"}},o.createElement(r.Flex,{flex:"1",overflow:"hidden"},o.createElement(r.Flex,{column:!0,flex:!0},o.createElement(nl.A,{flavour:"dyncfg",extraKey:t,statusProps:rl,testIdPrefix:"node-ids",param:"selectedNodeIds",groupProps:{collapsible:!1,background:"modalBackground",padding:[3],flex:"1",overflow:"hidden"},height:"auto",width:"100%"})),o.createElement(ll.Ay,{basis:60,baseWidth:60,flex:!1,title:"Dynamic filters",help:"Filter your nodes for this page. Count next to each item refer to the number of nodes that will be selected and used across the page.",includedTabs:["filters"],loaded:!0,onClose:()=>{},groupProps:{background:"modalBackground"},background:"modalBackground"})))},il=(0,C.default)(r.TextBig).withConfig({displayName:"styled__NodeName",componentId:"sc-1dfnbe3-0"})(["font-family:monospace;"]),sl={fulfilled:{text:"Success",color:"primary"},rejected:{text:"Failed",color:"error"},default:{text:"Processing...",color:"text"}},cl=e=>{var t;let{label:n,result:l={}}=e;const{status:a,reason:i}=l,s=(null===i||void 0===i||null===(t=i.response)||void 0===t||null===(t=t.data)||void 0===t?void 0:t.errorMessage)||(null===i||void 0===i?void 0:i.message)||"Something went wrong...",{text:c,color:d}=(0,o.useMemo)((()=>sl[a]||sl.default),[a]),[u,m]=(0,L.A)(!0);return o.createElement(r.Flex,{column:!0,gap:1},o.createElement(r.Flex,{gap:2,alignItems:"center"},o.createElement(r.TextBig,{color:d},c),o.createElement(il,null,n),i?o.createElement(r.Icon,{name:"chevron_down",width:"10px",height:"10px",color:"textLite",cursor:"pointer",onClick:m,rotate:u?2:null}):null),i?o.createElement(r.Collapsible,{open:u,padding:[0,0,0,2]},o.createElement(r.Text,{color:"error"},(0,Q.Zr)(s))):null)},dl=e=>{let{selectedNodes:t,results:n=[]}=e;return o.createElement(r.Flex,{column:!0,gap:4,padding:[4,0]},n.length?null:o.createElement(r.TextBig,null,"Submitting to multiple nodes..."),o.createElement(r.Flex,{column:!0,gap:3},t.map((e=>{let{value:t,label:l}=e;const r=n.find((e=>{let{nodeId:n}=e;return n==t}));return o.createElement(cl,{key:t,label:l,result:r})}))))},ul=e=>{let{id:t,formRef:n,onClose:l}=e;const{nodes:r}=H(),a=(0,i.a7)({extraKey:k.q4,merge:!1}),s=r.filter((e=>{let{value:t}=e;return a.includes(t)})),{isNewItem:c,setIsDirty:d}=K(),[u,m]=(0,o.useState)([]),p=(0,O.hp)({id:t,isNewItem:c}),[g,,h,f]=(0,L.A)(),[b,,E,v]=(0,L.A)(),[y,C]=(0,o.useState)(),x=(0,O.Hj)(),[w,S,,I]=(0,G.A)(),A=(0,o.useCallback)((()=>{null===l||void 0===l||l(),c&&y&&x()}),[l,y,c,x]),T=(0,o.useCallback)((()=>{var e;const t=null===n||void 0===n||null===(e=n.current)||void 0===e||null===(e=e.state)||void 0===e?void 0:e.formData;m([]),h(),E(),p({nodes:s,payload:t}).then((e=>{d(!1),m(e.map(((e,t)=>{var n;return{...e,nodeId:null===(n=s[t])||void 0===n?void 0:n.value}})));const t=e.map((e=>{let{status:t}=e;return t}));t.find((e=>"fulfilled"==e))?t.some((e=>"rejected"==e))?I({text:"Some submissions have failed."}):w({text:"All nodes updated successfully."}):S({text:"All submissions have failed."})})).catch(S).finally((()=>{f(),C(!0)}))}),[n,s,p,h,f,m,d,x,C]);return{selectedNodes:s,onSubmit:T,onCloseButtonClick:A,loading:g,inProcess:b,hideProcess:v,results:u,submitFinished:y}},ml=(0,se.A)(r.Button),pl=e=>{let{id:t,formRef:n,onClose:l}=e;const{selectedNodes:a,onSubmit:i,onCloseButtonClick:s,loading:c,inProcess:d,hideProcess:u,results:m,submitFinished:p}=ul({id:t,formRef:n,onClose:l});return o.createElement(r.Modal,{backdropProps:{backdropBlur:!0}},o.createElement(r.ModalContent,{width:{min:100,base:200},background:"modalBackground",round:2,overflow:"hidden"},o.createElement(r.ModalHeader,{background:"modalBackground"},o.createElement(r.H4,null,"Select nodes")),o.createElement(r.ModalBody,null,d?o.createElement(dl,{selectedNodes:a,results:m}):o.createElement(al,null)),o.createElement(r.ModalFooter,{gap:2},d?o.createElement(ml,{type:"button",flavour:"hollow",small:!0,label:"Back",icon:"arrow_left",iconColor:"primary",iconSize:"small",onClick:u,tooltip:"Go back to nodes selector",disabled:c}):null,o.createElement(r.Button,{type:"button",flavour:"hollow",small:!0,label:"Close",onClick:s,disabled:c}),o.createElement(ml,{type:"button",label:"Submit",small:!0,onClick:i,tooltip:a.length?null:"Select some nodes",disabled:c||!a.length||p}))))},gl=(0,Ae.A)(r.Button),hl=e=>{var t;let{id:n,formRef:s,loading:c}=e;const[d,u,,m]=(0,L.A)(),[p,,g,h]=(0,L.A)(),{state:f}=(0,O.L5)(),{nodeIds:b=[]}=f||{},{node:E,nodes:v}=H(),y=(v||[]).length>1,{isNewItem:C,entityProps:x={},submitType:w,setSubmitType:k}=K(),{cmds:S=[]}=x,I=C||S.includes("update"),{user_disabled:A}=ze(),T=J(),F=(0,On.A)(),B=(0,Ln.uW)("isAnonymous"),D=(0,a.JT)("billing:Manage"),[,N]=(0,i.Oj)({extraKey:"dyncfg",merge:!1});(0,o.useEffect)((()=>{g&&b.length&&(N(b),k("multiple_submit"))}),[g,b,N,k]);const P=(0,o.useCallback)((e=>T?I?e||null:"You don't have permissions to save your changes":"Please provide a name first"),[T,I]),_=(0,o.useMemo)((()=>({submit:{label:"Submit",tooltip:P("Submit your changes to ".concat(E.label," node"))},multiple_submit:{type:"button",label:"Submit to Multiple Nodes",tooltip:P("Submit your changes to another node or to multiple nodes"),onClick:g},nonPaid:{type:"button",label:"Upgrade",tooltip:"Upgrade your plan to use this feature.",disabled:!D||B,onClick:F}})),[g,I,D,B,F]),M=!I||c||A||!T,{hidden:R,isDisabled:j,tooltipText:z,showUpgradeButton:U}=(0,be.j)({edit:!0,tooltip:null===(t=_[w])||void 0===t?void 0:t.tooltip,disabled:M});return R?null:U?o.createElement(gl,(0,l.A)({small:!0,disabled:M,isLoading:c},_.nonPaid)):o.createElement(r.Flex,{position:"relative",alignItem:"center"},o.createElement(gl,(0,l.A)({small:!0,groupFirst:y,disabled:j,isLoading:c},_[w],{tooltip:z})),y?o.createElement(r.Button,{type:"button",icon:"chevron_down",tiny:!0,flavour:"hollow",groupLast:!0,onClick:u,disabled:j}):null,d?o.createElement(tl,{submitType:w,setSubmitType:k,closeMenu:m,node:E}):null,p?o.createElement(pl,{id:n,formRef:s,onClose:h}):null)},fl=(0,Ee.A)(be.A),bl=e=>{let{loading:t}=e;const{node:n}=H(),{id:l,formData:r,entityProps:a={}}=K(),{cmds:i=[]}=a,{user_disabled:s}=ze(),c=i.includes("test"),d=(0,O.EZ)({id:l,node:n}),u=J({defaultName:"test"}),m=t||s,[p,g]=X(),h=p({successMessage:"Successfully tested configuration"}),f=g(),b=(0,o.useCallback)((()=>{d({name:u,payload:r}).then(h).catch(f)}),[u,d,r,h,f]);return c?o.createElement(fl,{edit:!0,feature:"DyncnfItem",payload:{id:l,node:null===n||void 0===n?void 0:n.value},label:"Test",small:!0,tooltip:"Test your configuration",flavour:"hollow",onClick:b,disabled:m,type:"button"}):null},El=((0,Ae.A)(r.Button),e=>{let{id:t,formRef:n,loading:l,errors:a=[],openUserConfig:i}=e;return o.createElement(r.Flex,{background:"modalBackground",position:"sticky",bottom:0,gap:2,padding:[4,0,0,0],alignItems:"baseline",justifyContent:"between",zIndex:10},a.length?o.createElement(Zn,{id:t,errors:a}):o.createElement(r.Flex,null),o.createElement(r.Flex,{gap:2},null,o.createElement(bl,{loading:l}),o.createElement(hl,{id:t,formRef:n,loading:l})))}),vl=function(){let{id:e,error:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n="string"==typeof t?{error_message:t}:"object"==typeof t?t:{},{error_message:l,message:a}=n;return o.createElement(Jn.DL,{feature:"DyncnfForm",id:e,error:JSON.stringify(t)},o.createElement(r.Flex,{column:!0,gap:2},o.createElement(r.Flex,{alignItems:"center",gap:2},o.createElement(r.Icon,{name:"warning_triangle",color:"text"}),o.createElement(r.H3,null,"Error")),o.createElement(r.TextBig,null,l||a||k.Fn)))},yl=function(){let{id:e,node:t,isNewItem:n,data:l=k.gh,submitMethod:r,onSchemaFetch:a=m(),setIsDirty:i=m(),setError:s=m()}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const c=(0,o.useRef)(0),d=(0,o.useRef)(),{entityProps:u={}}=K(),{cmds:p=[]}=u,g=p.includes("userconfig"),[h,f,b]=(0,L.A)(g),{isLoading:E,loaded:v,formData:y,setFormData:C,schema:x,resourcesError:w,errors:S,onChange:I,onSubmit:A,onError:T,getUserConfig:F}=ne({id:e,node:t,data:l,submitMethod:r,userConfigIsOpen:h,onSchemaFetch:a,setIsDirty:i,setError:s}),{jsonSchema:B,uiSchema:D}=x||{};(0,o.useEffect)((()=>(c.current=Date.now(),()=>{c.current=0})),[]);const N=(0,o.useCallback)((e=>{const t=Date.now()-c.current,n=0==c.current||t<500;I(e,n)}),[I]),P=(0,o.useCallback)((()=>{setTimeout((()=>{if(c.current>0&&g){var e;const t=null===(e=d.current)||void 0===e||null===(e=e.state)||void 0===e?void 0:e.formData;F(t)}}),50)}),[c.current,d.current,g,F]);return v?w?o.createElement(vl,{id:e,error:w}):o.createElement(Jn.Ay,{feature:"DyncnfForm",id:e,isNewItem:n},o.createElement(Tn.A,{margin:[0,0,2],padding:[2,0,0,0],sidebar:o.createElement($n,{isOpen:h,toggleIsOpen:f,canGetUserConfig:g,onOpenTerminal:P}),containerProps:{id:"dyncfg-form-layout",border:{side:"top",color:"border"}}},o.createElement(An,{ref:d,className:"dyncfg-form",disabled:E,schema:B,uiSchema:D,formData:y,formContext:{setFormData:C},templates:qt,widgets:Sn,validator:lt.Ay,onError:T,onChange:N,onSubmit:A},o.createElement(El,{id:e,formRef:d,loading:E,errors:S,openUserConfig:b})))):o.createElement(Ze.A,{title:"Loading form...",background:"modalBackground"})},Cl=e=>{let{id:t,node:n,children:l}=e;const{setFormData:r}=K(),{loaded:a,value:i,hasError:s,error:c,refresh:d}=(0,O.SW)({id:t,node:n});return(0,o.useEffect)((()=>{a&&!s&&r(i)}),[a,s,r,i]),a?s?o.createElement(vl,{id:t,error:c}):o.Children.map(l,(e=>o.isValidElement(e)?o.cloneElement(e,{id:t,node:n,data:{loaded:a,value:i,hasError:s,refresh:d}}):e)):null},xl=e=>{let{formData:t={},children:n}=e;const{formData:l}=K();return o.Children.map(n,(e=>o.isValidElement(e)?o.cloneElement(e,{data:{...k.gh,value:{...t,...l}}}):e))},wl=e=>{let{id:t,formData:n,...r}=e;const{node:a}=H(),{isNewItem:i}=K(),s=(0,O.Nj)({id:t,node:a}),c=(0,O.xS)({id:t,node:a});return i?o.createElement(xl,{formData:n},o.createElement(yl,(0,l.A)({id:t,node:a,isNewItem:i,submitMethod:s},r))):o.createElement(Cl,{id:t,node:a},o.createElement(yl,(0,l.A)({submitMethod:c},r)))},kl=e=>{var t,n;let{entries:r=[],rowHeight:a=k.FL,level:i=1}=e;const s=(0,o.useRef)(),{node:c,path:d,containerRef:u}=H(),[m,p]=(0,O._F)({node:c,path:d}),g=null===(t=u.current)||void 0===t||null===(t=t.getBoundingClientRect())||void 0===t?void 0:t.bottom,h=null===(n=s.current)||void 0===n||null===(n=n.getBoundingClientRect())||void 0===n?void 0:n.top,f=g&&h?g-h:500,b=Math.floor(f/a),E=r.length>b,v=(0,tt.Te)({count:r.length,getScrollElement:()=>s.current,enableSmoothScroll:!0,estimateSize:()=>a,overscan:5}),y=(0,o.useCallback)((0,et.s)(300,(e=>{p(e.target.scrollTop)})),[p]);return(0,o.useEffect)((()=>{s.current&&(s.current.scrollTop=m)}),[]),E?o.createElement("div",{ref:s,style:{height:"".concat(f,"px"),overflow:"auto"},onScroll:y},o.createElement("div",{style:{minHeight:"".concat(v.getTotalSize(),"px"),width:"100%",position:"relative"}},v.getVirtualItems().map((e=>{const[t,n]=r[e.index];return o.createElement("div",{className:"dyncnf-virtual-row",key:e.key,style:{position:"absolute",top:0,left:0,width:"100%",transform:"translateY(".concat(e.start,"px)"),overflow:"hidden"},ref:v.measureElement,"data-index":e.index,"data-key":t},o.createElement(nt,{virtualIndex:e.index,virtualRowStart:e.start,entryKey:t,entityProps:(0,S.bn)(n),configItemLevel:i},o.createElement(wl,(0,l.A)({id:t},n))))})))):r.map((e=>{let[t,n]=e;return o.createElement(nt,{key:t,entryKey:t,entityProps:(0,S.bn)(n),configItemLevel:i},o.createElement(wl,(0,l.A)({id:t},n)))}))},Sl=e=>{let{entries:t=[],level:n=0}=e;const{testString:r,testProps:a}=f();return t.map((e=>{let[t,i]=e;const{templateChildren:s}=i||{},c=(0,S.bn)(i);if(s){const e=Object.entries(s).filter((e=>{let[t,n]=e;return r(t)&&a(n)}));return o.createElement(nt,{key:t,flavour:"template",entryKey:t,entityProps:c,configItemLevel:n,isOpen:!0},o.createElement(kl,{entries:e,level:n}))}return o.createElement(nt,{key:t,entryKey:t,entityProps:c,configItemLevel:n},o.createElement(wl,(0,l.A)({id:t},c)))}))},Il=(0,o.memo)(Sl),Al=function(){let{tree:e={},level:t=1,isVirtual:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{testString:l,testProps:r}=f();return n?o.createElement(Il,{entries:Object.entries(e),level:t}):Object.entries(e).map((e=>{let[n,a]=e;const i=n.match(/\/[^/]+/g),s=Object.keys(a).filter((e=>{const{templateChildren:t={}}=a[e],o=Object.values(t).some((e=>r(e)));return!(!r(a[e])&&!o)&&(l(n)||l(e)||Object.keys(t).some((e=>l(e))))})).reduce(((e,t)=>({...e,[t]:a[t]})),{});if(1==i.length)return o.createElement(Xe,{key:n,title:i[0],level:t,isOpen:!0},o.createElement(Al,{tree:s,level:t+1,isVirtual:!0}));const c=i.slice(1).join("");return o.createElement(Xe,{key:c,title:i[0],level:t,isOpen:!0},o.createElement(Al,{tree:{[c]:s},level:t+1}))}))},Tl=(0,o.memo)(Al),Fl=()=>o.createElement(r.Flex,null,o.createElement(r.TextBigger,null,"No available configuration found.")),Bl=()=>{const{node:e,path:t}=H(),n=(0,O.sh)({node:e,path:t}),{entityProps:r,...a}=n||{};return n?o.createElement(Xe,{flavour:"entity",title:"".concat(n.template,":placeholder"),entityProps:{...r,...a},isNewItem:!0},o.createElement(wl,(0,l.A)({id:n.template,formData:n.formData},r))):null};var Dl,Nl=n(37618);const Pl="dyncfg-edit-alet-warning-dismiss-".concat(null===(Dl=window.envSettings)||void 0===Dl?void 0:Dl.visitor),_l={lineHeight:1.6},Ll=e=>{let{alertName:t,nodeName:n}=e;const l=localStorage.getItem(Pl),[a,,,i]=(0,L.A)(!l),[s,c]=(0,o.useState)(),d=(0,o.useCallback)((e=>{c(e)}),[c]),u=(0,o.useCallback)((()=>{s&&localStorage.setItem(Pl,!0),i()}),[s,i]);return a?o.createElement(r.Modal,{backdropProps:{backdropBlur:!0}},o.createElement(r.ModalContent,null,o.createElement(r.ModalHeader,null,o.createElement(r.H4,null,"Editing Alerts")),o.createElement(r.ModalBody,null,o.createElement(r.Flex,{column:!0,gap:2,width:{max:120}},o.createElement(r.TextBig,_l,"You are about to edit the alert ",o.createElement(r.TextBig,{color:"primary"},t),n?o.createElement(o.Fragment,null," ","on node ",o.createElement(r.TextBig,{color:"primary"},n)):null,"."),o.createElement(r.TextBig,_l,'Keep in mind that alerts in Netdata are templates that are applied to all instances of the same kind (e.g. editing a disk alert, means you are changing the alerts for all disks on that node). If you want to overwrite the rules for a single instance, do not change the current rules. Instead add a new rule and select "Apply to a specific instance" for that rule, matching the instance you want to overwrite.'),Nl.Ay?o.createElement(r.TextBig,_l,'To apply an alert on all your currently connected nodes, edit it and select "Submit to Multiple Nodes".'):o.createElement(r.TextBig,_l,'When having parents and you have connected both parents and children to Netdata Cloud, the alert needs to be altered on both Netdata parents and children, otherwise one of the two will be using the old version. To apply an alert on multiple nodes, edit it and select "Submit to Multiple Nodes".'))),o.createElement(r.ModalFooter,{justifyContent:"between"},o.createElement(r.Flex,{gap:2,alignItems:"center"},o.createElement(r.Checkbox,{checked:s,onChange:d}),o.createElement(r.TextBig,null,"Do not show this again")),o.createElement(r.Button,{type:"button",flavour:"hollow",label:"OK",textTransform:"uppercase",onClick:u})))):null},Ml={alertName:{itemTitlePrefix:k.DR,treeEntryKey:k.$7}},Ol=e=>{var t;let{tree:n}=e;const{state:r}=(0,O.L5)(),{alertName:a,nodeId:i}=r||{},c=(0,s.xY)(i,"name"),{itemTitlePrefix:d,treeEntryKey:u}=Ml.alertName,m=a?"".concat(d).concat(a):null,p=n&&m?null===(t=n[u])||void 0===t?void 0:t[m]:null;return a?o.createElement(o.Fragment,null,o.createElement(Xe,{flavour:"entity",title:m,entityProps:p,isOpen:!0,isEditFromState:!0},o.createElement(wl,(0,l.A)({id:m},p))),o.createElement(Ll,{alertName:a,nodeName:c})):null},Rl=(0,j.A)((()=>n.e(4414).then(n.bind(n,74414))),"DyncfgStyles"),jl=e=>{let{node:t,nodes:n,path:l,tree:a,inModal:i}=e;const s=(0,o.useRef)();return o.createElement(U.Provider,{value:{node:t,nodes:n,path:l,inModal:i,containerRef:s}},o.createElement(o.Suspense,{fallback:""},o.createElement(Rl,null)),o.createElement(r.Flex,{ref:s,width:"100%",padding:[0,2],column:!0},o.createElement(r.Flex,{column:!0},Object.keys(a).length?o.createElement(Tl,{tree:(0,Y.m8)(a)}):o.createElement(Fl,null)),o.createElement(Bl,null),o.createElement(Ol,{tree:a})))};var zl=n(98496);const Hl={ErrForbidden:{title:"No permissions",Content:()=>o.createElement(o.Fragment,null,o.createElement(r.Text,null,"You don't have permissions to view the configurations."),o.createElement(r.Text,null,"Please contact the Space administrators if this is unexpected."))},ErrNoConfigurableNodes:{title:"No configurable nodes found",Content:()=>o.createElement(r.Text,null,"We couldn't find any node that can be configured from the UI.")},default:{title:"Error",Content:()=>o.createElement(o.Fragment,null,o.createElement(r.Text,null,"Something went wrong, please check again later."),o.createElement(r.Text,null,"If the problem persists feel free to contact us with a"," ",o.createElement(rt.A,{href:"https://github.com/netdata/netdata-cloud/issues/new/choose",target:"_blank",rel:"noopener noreferrer"},"ticket")))}},Ul=function(){let{error:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{errorMsgKey:t}=e||{},{title:n,Content:l}=Hl[t]||Hl.default;return o.createElement(Jn.DL,{feature:"DyncfgMainTabs",errorMsgKey:t},o.createElement(zl.A,{title:n},o.createElement(r.Flex,{column:!0,gap:1},o.createElement(l,null))))},Wl=e=>{let{node:t}=e;const n=(0,o.useRef)(),{state:l}=(0,O.L5)(),{isAlert:r}=l||{},{loaded:a,value:i,hasError:s}=(0,O.wd)({node:t}),c=a&&i&&!s?Object.keys(i.tree||{}).reduce(((e,t)=>{t.startsWith("/")||(t="/".concat(t));const n=t.match(/\/[^/]+/g);if(n.length){const t=n[0],l=(0,Q.Zr)(t.replace(/^\/?/,""));e.find((e=>e.value==t))||e.push({value:t,label:l})}return e}),[]):[],[d,u]=(0,o.useState)(0);return(0,o.useEffect)((()=>{if(c.length&&r&&!n.current){const e=c.map((e=>{let{value:t}=e;return t})).indexOf("/health");u(e),n.current=!0}}),[r,c,u,n.current]),{loaded:a,tabs:c,selectedTab:d,setSelectedTab:u}},Vl=e=>{var t;let{flavour:n,inModal:l,selectedNode:a,setNode:i,options:s}=e;const{loaded:c,tabs:d,selectedTab:u,setSelectedTab:m}=Wl({node:a}),{loaded:g,value:h,hasError:f,error:v}=(0,O.wd)({node:a,path:null===d||void 0===d||null===(t=d[u])||void 0===t?void 0:t.value}),{tree:y}=h||{},C=l?"60px":"110px",x=(0,o.useMemo)((()=>({height:"settings"==n?"calc(100% - ".concat(C,")"):"100%",padding:[4,0],border:{side:"top",color:"border"},overflow:{vertical:"auto"}})),[]);return s.length?o.createElement(b,null,o.createElement(r.Flex,{column:!0,height:"100%",gap:4},o.createElement(r.Flex,{alignItems:"center",justifyContent:"between"},o.createElement(r.Flex,{alignItems:"center",gap:4},o.createElement(p,{node:a,setNode:i,options:s}),o.createElement(E,null)),o.createElement(r.Flex,{alignItems:"center",gap:3},o.createElement(M,{tree:y}),o.createElement(R,null))),c?d.length?o.createElement(r.Tabs,{height:"100%",selected:u,onChange:m},d.map((e=>{let{label:t,value:n}=e;return o.createElement(r.Tab,{key:n,label:t},o.createElement(r.Flex,x,g?f?o.createElement(r.TextBigger,null,"Something went wrong"):y?o.createElement(jl,{key:JSON.stringify({value:n,selectedNode:a}),node:a,nodes:s,path:n,tree:y,inModal:l}):o.createElement(Ul,null):o.createElement(Ze.A,{height:"calc(100% - ".concat(C,")"),title:"Loading..."})))}))):o.createElement(Ul,{error:v}):o.createElement(Ze.A,{height:"100%",title:"Loading..."}))):o.createElement(r.TextBigger,null,"There are no available nodes.")};var Kl=n(20378),ql=n(78459),Yl=n(15255),$l=n(68741),Gl=n(40982);const Jl=e=>{let{message:t,title:n,footer:a,...i}=e;const s=(null===i||void 0===i?void 0:i["data-testid"])||"dyncnfError";return o.createElement(r.Flex,(0,l.A)({alignItems:"center",column:!0,"data-testid":s,flex:!0,gap:3,justifyContent:"center",padding:[0,20]},i),o.createElement(r.H3,{"data-testid":"".concat(s,"-title")},n),o.createElement(r.TextBig,{color:"textDescription","data-testid":"".concat(s,"-message")},t),a)},Ql=e=>{let{flavour:t,inModal:n,node:l,nodes:r}=e;const{options:a,node:i,setNode:s}=d({selectedNode:l,nodes:r});return null!==i&&void 0!==i&&i.value?o.createElement(Vl,{flavour:t,inModal:n,selectedNode:i,setNode:s,options:a}):o.createElement(Ul,{error:{errorMsgKey:"ErrNoConfigurableNodes"}})},Zl=e=>{const t=(0,i.eO)({extraKey:"nodesView",merge:!1,scoped:!0,roomSlug:e.isVirtual?Nl.gB:null});return o.createElement(Ql,(0,l.A)({},e,{nodes:t}))},Xl=e=>{const{nodes:t}=(0,c.A)({polling:!1});return o.createElement(Ql,(0,l.A)({},e,{nodes:t}))},eo=e=>{const t=(0,ql.OS)();return o.createElement(r.Button,(0,l.A)({label:"Get a fresh agent token",onClick:t},e))},to="Configurations expose sensitive information about your systems and applications. To protect your privacy, Netdata exposes this information only to logged-in users and claimed agents. When viewing Configurations directly on a Netdata Agent UI, this information is sent directly from the Netdata Agent to your web browser, without exposing it to any third parties.",no={notLoggedIn:{title:"Sign in to Netdata to use Configurations",description:to,footer:o.createElement($l.A,null)},notClaimed:{title:"Connect this agent to Netdata to use Configurations",description:to,footer:o.createElement(Gl.A,null)},noAccess:{title:"This agent belongs to a Netdata Space you are not member of",description:to,footer:o.createElement(r.TextBig,{color:"textDescription"},"Ask for an invitation from the administrators of the Netdata Space of the agent to use configurations.")},bearerError:{title:"You are not authorized to use Configurations",description:to,footer:o.createElement(eo,null)}},lo=e=>{let{flavour:t="settings",node:n,inModal:r}=e;const i=(0,_n.dg)(),c=(0,a.JT)("agent:ReadDynCfg"),{state:d}=(0,O.L5)(),{nodeId:u}=d||{},m=(0,s.xY)(u),p={flavour:t,node:u?m:n,inModal:r},[g]=(0,Kl.Q8)(),[{bearerProtection:h,error:f}]=(0,ql.f7)(),[{canBeClaimed:b,cloudStatus:E}]=(0,Yl.RJ)();if(i&&f&&h){const{title:e,description:t,footer:n}=(e=>{let{userStatus:t,userNodeStatus:n,accessError:l,canBeClaimed:o}=e;return no[t]?no[t]:l?no.notLoggedIn:o?no.notClaimed:no[n]?no[n]:no.bearerError})({...g,bearerError:f,canBeClaimed:b,cloudStatus:E});return o.createElement(Jl,{title:e,message:t,footer:n})}return c?i?o.createElement(Zl,(0,l.A)({isVirtual:i},p)):o.createElement(Xl,p):o.createElement(Ul,{error:{errorMsgKey:"ErrForbidden"}})}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/8938.5116982f737a2ef85330.chunk.js b/src/web/gui/v2/8938.5116982f737a2ef85330.chunk.js deleted file mode 100644 index 969277516..000000000 --- a/src/web/gui/v2/8938.5116982f737a2ef85330.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="f94a1e45-92e1-479f-8dd1-5b8ba1dbfadb",e._sentryDebugIdIdentifier="sentry-dbid-f94a1e45-92e1-479f-8dd1-5b8ba1dbfadb")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[8938],{68938:function(e,t,n){var o;e.exports=(o=n(96540),function(){var e={378:function(e){"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var o,r,i;if(Array.isArray(t)){if((o=t.length)!=n.length)return!1;for(r=o;0!=r--;)if(!e(t[r],n[r]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((o=(i=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(r=o;0!=r--;)if(!Object.prototype.hasOwnProperty.call(n,i[r]))return!1;for(r=o;0!=r--;){var a=i[r];if(!e(t[a],n[a]))return!1}return!0}return t!=t&&n!=n}},145:function(e,t,n){"use strict";n.r(t),t.default='@keyframes spin{to{transform:rotate(360deg)}}.tf-v1-popover{bottom:96px;position:fixed;right:16px;z-index:10001}.tf-v1-popover.open{max-width:100%;min-height:360px;min-width:360px}.tf-v1-popover-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:100%;width:100%;opacity:0;transition:opacity .25s ease-in-out;border-radius:4px;box-shadow:rgba(0,0,0,.08) 0 2px 4px,rgba(0,0,0,.06) 0 2px 12px}.tf-v1-popover-wrapper iframe{width:100%;height:100%;border:none;overflow:hidden;border-radius:8px}.tf-v1-popover-close{display:none}.tf-v1-popover-button{width:54px;height:54px;position:fixed;box-shadow:0 2px 12px rgba(0,0,0,.06),0 2px 4px rgba(0,0,0,.08);color:#fff;right:26px;bottom:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;background:#3a7685;line-height:0;border:none;padding:0}.tf-v1-popover-button-icon{width:54px;height:54px;font-size:24px;border-radius:50%;overflow:hidden;display:flex;justify-content:center;align-items:center}.tf-v1-popover-button-icon svg.default{margin-top:6px}.tf-v1-popover-button-icon svg,.tf-v1-popover-button-icon img{max-width:54px;max-height:54px}.tf-v1-popover-button-icon img{width:100%;height:100%;object-fit:cover;border-radius:50%}.tf-v1-popover-tooltip{position:fixed;right:94px;bottom:33px;max-width:240px;padding:10px 25px 10px 10px;border-radius:8px;background:#fff;box-shadow:0 2px 4px rgba(0,0,0,.08),0 2px 12px rgba(0,0,0,.06);font-size:14px;font-family:Helvetica,Arial,sans-serif;line-height:22px}.tf-v1-popover-tooltip::before{background-color:#fff;content:"";display:block;width:12px;height:12px;position:absolute;right:-4px;bottom:15px;transform:rotate(45deg);box-shadow:2px -2px 2px 0 rgba(0,0,0,.06)}.tf-v1-popover-tooltip-text{overflow:hidden}.tf-v1-popover-tooltip-close{color:rgba(0,0,0,.2);cursor:pointer;margin-left:4px;display:inline-block;width:20px;height:20px;font-size:18px;text-align:center;position:absolute;top:8px;right:6px}.tf-v1-popover-tooltip-close:hover{color:rgba(0,0,0,.3)}.tf-v1-popover-tooltip.closing{transition:opacity .25s ease-in-out;opacity:0}.tf-v1-popover-unread-dot{width:8px;height:8px;border-radius:50%;background-color:#fa6b05;border:2px solid #fff;position:absolute;top:2px;right:2px}.tf-v1-popover-unread-dot.closing{transition:opacity .25s ease-in-out;opacity:0}.tf-v1-spinner{border:3px solid #aaa;font-size:40px;width:1em;height:1em;border-radius:.5em;box-sizing:border-box;animation:spin 1s linear infinite;border-top-color:#fff;position:absolute;top:50%;left:50%;margin:-20px 0 0 -20px}@media(max-width: 480px){.tf-v1-popover.open{top:0;left:0;bottom:0;right:0;width:100% !important;height:100% !important}.tf-v1-popover.open .tf-v1-popover-close{display:block}.tf-v1-popover-wrapper{border-radius:0;box-shadow:none}.tf-v1-popover-wrapper iframe{border-radius:0}.tf-v1-popover-close{display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:6px;right:8px;background:none;border:none;border-radius:0;z-index:1;opacity:0}.tf-v1-popover-close:hover{opacity:1}}@media(max-width: 480px)and (min-width: 481px){.tf-v1-popover-close{color:#fff !important}}@media(max-width: 480px){.tf-v1-popover-button{width:44px;height:44px;right:8px;bottom:8px}.tf-v1-popover-button-icon{font-size:20px}.tf-v1-popover-button-icon svg{margin-top:4px;max-height:24px;max-width:24px}.tf-v1-popover-button-icon img{max-width:44px;max-height:44px}.tf-v1-popover-tooltip{position:fixed;right:66px;bottom:8px;left:auto;font-size:12px}.tf-v1-popover-tooltip::before{bottom:14px}.tf-v1-popover-unread-dot{top:0;right:0}.tf-v1-spinner{border:3px solid #aaa;font-size:32px;width:1em;height:1em;border-radius:.5em;box-sizing:border-box;animation:spin 1s linear infinite;border-top-color:#fff;position:absolute;top:50%;left:50%;margin:-16px 0 0 -16px}}'},792:function(e,t,n){"use strict";n.r(t),t.default="@keyframes spin{to{transform:rotate(360deg)}}.tf-v1-popup{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);transition:opacity .25s ease-in-out;z-index:10001;display:flex;align-items:center;justify-content:center}.tf-v1-popup .tf-v1-iframe-wrapper{position:relative;transition:opacity .25s ease-in-out;min-width:360px;min-height:360px}.tf-v1-popup .tf-v1-iframe-wrapper iframe{width:100%;height:100%;border:none;overflow:hidden;border-radius:8px}.tf-v1-popup .tf-v1-close{display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:-34px;right:0;background:none;border:none;border-radius:0}.tf-v1-popup .tf-v1-close:hover{opacity:1}@media(min-width: 481px){.tf-v1-popup .tf-v1-close{color:#fff !important}}.tf-v1-popup .tf-v1-spinner{border:3px solid #aaa;font-size:40px;width:1em;height:1em;border-radius:.5em;box-sizing:border-box;animation:spin 1s linear infinite;border-top-color:#fff;position:absolute;top:50%;left:50%;margin:-20px 0 0 -20px}@media(max-width: 480px){.tf-v1-popup{width:100% !important;height:100% !important}.tf-v1-popup .tf-v1-iframe-wrapper{position:relative;transition:opacity .25s ease-in-out;min-width:100%;min-height:100%}.tf-v1-popup .tf-v1-iframe-wrapper iframe{border-radius:0}.tf-v1-popup .tf-v1-close{display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:6px;right:8px;background:none;border:none;border-radius:0}.tf-v1-popup .tf-v1-close:hover{opacity:1}}@media(max-width: 480px)and (min-width: 481px){.tf-v1-popup .tf-v1-close{color:#fff !important}}"},838:function(e,t,n){"use strict";n.r(t),t.default="@keyframes spin{to{transform:rotate(360deg)}}.tf-v1-sidetab{position:fixed;top:50%;right:0;width:400px;height:580px;transform:translate(100%, -50%);box-shadow:0 2px 4px rgba(0,0,0,.08),0 2px 12px rgba(0,0,0,.06);z-index:10001;will-change:transform}.tf-v1-sidetab.ready{transition:transform 400ms cubic-bezier(0.5, 0, 0.75, 0)}.tf-v1-sidetab iframe{width:100%;height:100%;border:none;overflow:hidden;border-radius:8px 0 0 8px}.tf-v1-sidetab.open{transform:translate(0, -50%)}.tf-v1-sidetab-wrapper{position:relative;height:100%}.tf-v1-sidetab-button{position:absolute;top:50%;left:-48px;transform:rotate(-90deg) translateX(-50%);transform-origin:left top;min-width:100px;max-width:540px;height:48px;display:flex;align-items:center;padding:12px 16px;border-radius:8px 8px 0 0;color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.08),0 2px 12px rgba(0,0,0,.06);background-color:#3a7685;cursor:pointer;border:0;text-decoration:none;outline:none}.tf-v1-sidetab-button-text{flex:1;font-size:18px;font-family:Helvetica,Arial,sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tf-v1-sidetab-button-icon{width:24px;height:24px;font-size:24px;transform:rotate(90deg);margin-right:12px;position:relative;order:-1}.tf-v1-sidetab-button-icon>img{width:100%;height:100%;object-fit:contain}.tf-v1-sidetab-close{display:none}.tf-v1-sidetab .tf-v1-spinner{border:3px solid #aaa;font-size:24px;width:1em;height:1em;border-radius:.5em;box-sizing:border-box;animation:spin 1s linear infinite;border-top-color:#fff;position:absolute;top:50%;left:50%;margin:-12px 0 0 -12px;top:0;left:0;margin:0}@media(max-width: 480px){.tf-v1-sidetab{transition:unset}.tf-v1-sidetab.ready{transition:unset}.tf-v1-sidetab.open{top:0;left:0;right:0;bottom:0;transform:translate(0, 0);width:100% !important;height:100% !important}.tf-v1-sidetab-close{display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:6px;right:8px;background:none;border:none;border-radius:0;display:block;z-index:1}.tf-v1-sidetab-close:hover{opacity:1}}@media(max-width: 480px)and (min-width: 481px){.tf-v1-sidetab-close{color:#fff !important}}"},630:function(e,t,n){"use strict";n.r(t),t.default="@keyframes spin{to{transform:rotate(360deg)}}.tf-v1-slider{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);transition:opacity .25s ease-in-out;z-index:10001}.tf-v1-slider .tf-v1-iframe-wrapper{max-width:calc(100vw - 26px);height:100%;position:absolute;top:0;transition:right .5s ease-in-out,left .5s ease-in-out}.tf-v1-slider .tf-v1-iframe-wrapper iframe{width:100%;height:100%;border:none;overflow:hidden;border-radius:0}@media(min-width: 481px){.tf-v1-slider .tf-v1-iframe-wrapper iframe{border-radius:8px 0 0 8px}}.tf-v1-slider .tf-v1-close{display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:6px;right:8px;background:none;border:none;border-radius:0}.tf-v1-slider .tf-v1-close:hover{opacity:1}@media(min-width: 481px){.tf-v1-slider .tf-v1-close{color:#fff !important}}@media(min-width: 481px){.tf-v1-slider .tf-v1-close{top:4px;left:-26px}}.tf-v1-slider .tf-v1-close:hover{opacity:1}.tf-v1-slider .tf-v1-spinner{border:3px solid #aaa;font-size:40px;width:1em;height:1em;border-radius:.5em;box-sizing:border-box;animation:spin 1s linear infinite;border-top-color:#fff;position:absolute;top:50%;left:50%;margin:-20px 0 0 -20px}@media(min-width: 481px){.tf-v1-slider.left .tf-v1-iframe-wrapper iframe{border-radius:0 8px 8px 0}.tf-v1-slider.left .tf-v1-close{left:auto;right:-24px}}@media(max-width: 480px){.tf-v1-slider{width:100% !important;height:100% !important}.tf-v1-slider .tf-v1-iframe-wrapper{width:100% !important;max-width:100vw;height:100%;transition:unset}.tf-v1-slider .tf-v1-iframe-wrapper iframe{border-radius:none}.tf-v1-slider .tf-v1-close{display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:6px;right:8px;background:none;border:none;border-radius:0;left:auto}.tf-v1-slider .tf-v1-close:hover{opacity:1}}@media(max-width: 480px)and (min-width: 481px){.tf-v1-slider .tf-v1-close{color:#fff !important}}"},684:function(e,t,n){"use strict";n.r(t),t.default=".tf-v1-widget{width:100%;height:100%;min-height:inherit;position:relative}.tf-v1-widget iframe{width:100%;height:100%;border:none;overflow:hidden;border-radius:8px;min-height:inherit}.tf-v1-widget-close{display:none}.tf-v1-widget-iframe-overlay{width:100%;height:100%;border:none;overflow:hidden;border-radius:8px;position:absolute;top:0;left:0}.tf-v1-widget-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10001;width:100% !important;height:100% !important}.tf-v1-widget-fullscreen .tf-v1-widget-close{display:block;display:block;padding:0;margin:0;position:absolute;font-size:32px;font-weight:normal;line-height:24px;width:24px;height:24px;text-align:center;text-transform:none;cursor:pointer;opacity:.75;transition:opacity .25s ease-in-out;text-decoration:none;color:#000;top:6px;right:8px;background:none;border:none;border-radius:0;z-index:1}.tf-v1-widget-fullscreen .tf-v1-widget-close:hover{opacity:1}@media(min-width: 481px){.tf-v1-widget-fullscreen .tf-v1-widget-close{color:#fff !important}}.tf-v1-widget-fullscreen iframe{border-radius:0}"},281:function(e,t,n){"use strict";var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(11),t),r(n(739),t),r(n(860),t)},794:function(e,t,n){"use strict";var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,o=arguments.length;n\n '),a=null==e?void 0:e.startsWith("http");return o.innerHTML=a?"popover trigger icon button"):null!=e?e:r,o.dataset.testid="default-icon",o}(v.customIcon,v.buttonColor||u.buttonColor),_=function(){var e=document.createElement("div");e.className="tf-v1-spinner";var t=document.createElement("div");return t.className="tf-v1-popover-button-icon",t.dataset.testid="spinner-icon",t.append(e),t}(),P=c(),j=c("button","tf-v1-popover-close"),E=function(e,t){void 0===t&&(t={});var n=(0,i.getTextColor)(e),o=document.createElement("button");return o.className="tf-v1-popover-button",o.dataset.testid="tf-v1-popover-button",o.style.backgroundColor=e,o.style.color=n,(0,i.addAttributesToElement)(o,t),o}(v.buttonColor||u.buttonColor,v.buttonProps);(v.container||document.body).append(w),x.append(h),w.append(E),w.append(j),E.append(O);var C=function(){l&&l.parentNode&&(l.classList.add("closing"),setTimeout((function(){(0,i.unmountElement)(l)}),250))};v.tooltip&&v.tooltip.length>0&&(l=function(e,t){var n=document.createElement("span");n.className="tf-v1-popover-tooltip-close",n.dataset.testid="tf-v1-popover-tooltip-close",n.innerHTML="×",n.onclick=t;var o=document.createElement("div");o.className="tf-v1-popover-tooltip-text",o.innerHTML=e;var r=document.createElement("div");return r.className="tf-v1-popover-tooltip",r.dataset.testid="tf-v1-popover-tooltip",r.appendChild(o),r.appendChild(n),r}(v.tooltip,C),w.append(l)),v.notificationDays&&(v.enableSandbox||(0,a.canBuildNotificationDot)(e))&&(d=(0,a.buildNotificationDot)(),E.append(d)),h.onload=function(){w.classList.add("open"),x.style.opacity="1",j.style.opacity="1",s(_,P),(0,i.addCustomKeyboardListener)(I)};var S=function(){(0,i.isOpen)(x)||(C(),d&&(d.classList.add("closing"),v.notificationDays&&!v.enableSandbox&&(0,a.saveNotificationDotHideUntilTime)(e,v.notificationDays),setTimeout((function(){(0,i.unmountElement)(d)}),250)),setTimeout((function(){(0,i.isInPage)(x)?(x.style.opacity="0",j.style.opacity="0",x.style.display="flex",setTimeout((function(){w.classList.add("open"),x.style.opacity="1",j.style.opacity="1"})),s(O,P)):(w.append(x),s(O,_),x.style.opacity="0",j.style.opacity="0")})))},I=function(){var n;(0,i.isOpen)(w)&&((0,i.handlePreventReopenOnClose)(v,e),null===(n=t.onClose)||void 0===n||n.call(t),setTimeout((function(){v.keepSession?x.style.display="none":(0,i.unmountElement)(x),w.classList.remove("open"),s(P,O)}),250))};(0,i.setAutoClose)(b,v.autoClose,I);var T=function(){(0,i.isOpen)(x)?I():S()};return E.onclick=(0,i.invokeWithoutDefault)(T),j.onclick=(0,i.invokeWithoutDefault)(I),v.open&&!(0,i.isOpen)(x)&&(n=(0,i.handleCustomOpen)(S,v,e)),{open:S,close:I,toggle:T,refresh:g,focus:y,unmount:function(){(0,i.unmountElement)(w),v.open&&(null==n?void 0:n.remove)&&n.remove()}}}},1797:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(7528),t),r(n(6100),t)},1320:function(e,t){var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,o=arguments.length;nt&&(t&&function(e){var t=r();delete t[e],i(t)}(e),!0)},t.buildNotificationDot=function(){var e=document.createElement("span");return e.className="tf-v1-popover-unread-dot",e.dataset.testid="tf-v1-popover-unread-dot",e}},6100:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},9630:function(e,t,n){var o=this&&this.__rest||function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r\n '),c=null==e?void 0:e.startsWith("http");return a.innerHTML=c?"popover trigger icon button"):null!=e?e:s,a.dataset.testid="default-icon",a}(d.customIcon,d.buttonColor||a.buttonColor,d.buttonTextColor,d.buttonTextSize),_=s(),P=s("button","tf-v1-sidetab-close");(d.container||document.body).append(b),g.append(p),b.append(w),b.append(P),w.append(O),w.append(x),setTimeout((function(){b.classList.add("ready")}),250),p.onload=function(){b.classList.add("open"),c(y,_),(0,i.addCustomKeyboardListener)(E)};var j=function(){(0,i.isOpen)(g)||((0,i.isInPage)(g)?(g.style.display="flex",b.classList.add("open"),c(O,_)):(b.append(g),c(O,y)))},E=function(){var t;(0,i.isOpen)(g)&&((0,i.handlePreventReopenOnClose)(d,e),null===(t=d.onClose)||void 0===t||t.call(d),b.classList.remove("open"),setTimeout((function(){d.keepSession?g.style.display="none":(0,i.unmountElement)(g),c(_,O)}),250))};(0,i.setAutoClose)(v,d.autoClose,E);var C=function(){(0,i.isOpen)(g)?E():j()};return w.onclick=(0,i.invokeWithoutDefault)(C),P.onclick=(0,i.invokeWithoutDefault)(E),d.open&&!(0,i.isOpen)(g)&&(n=(0,i.handleCustomOpen)(j,d,e)),{open:j,close:E,toggle:C,refresh:m,focus:h,unmount:function(){(0,i.unmountElement)(b),d.open&&(null==n?void 0:n.remove)&&n.remove()}}}},1434:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(382),t),r(n(7668),t)},7668:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},2603:function(e,t,n){var o=this&&this.__rest||function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r0)&&!(o=i.next()).done;)a.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a};Object.defineProperty(t,"__esModule",{value:!0}),t.createWidget=void 0;var i=n(6797),a=n(8554),s=n(2313),c=n(1126);t.createWidget=function(e,t){if(!(0,i.hasDom)())return{refresh:function(){},focus:function(){},unmount:function(){}};var n=t.domain,u=o(t,["domain"]);u.inlineOnMobile=t.inlineOnMobile||t.fullScreen,u.inlineOnMobile||!u.forceTouch&&!(0,i.isFullscreen)()||(u.displayAsFullScreenModal=!0,u.forceTouch=!0);var l=(0,i.createIframe)("widget",{formId:e,domain:n,options:u}),d=l.embedId,f=l.iframe,p=l.refresh,v=l.focus,m=(0,s.buildWidget)(f,u.width,u.height);if(u.fullScreen&&(0,c.overrideFullScreenStyles)(t.container,f),u.autoResize){var h=r("string"==typeof u.autoResize?u.autoResize.split(",").map((function(e){return parseInt(e)})):[],2),b=h[0],g=h[1];window.addEventListener("message",(0,a.getFormHeightChangedHandler)(d,(function(e){var n=Math.max(e.height,b||0);g&&(n=Math.min(n,g)),t.container.style.height="".concat(n,"px")})))}u.autoFocus&&window.addEventListener("message",(0,a.getFormReadyHandler)(d,(function(){setTimeout((function(){v()}),1e3)})));var y,w=function(){return t.container.append(m)};if(t.container.innerHTML="",t.lazy?(0,i.lazyInitialize)(t.container,w):w(),u.displayAsFullScreenModal){var x="",O=t.container,_=O.style.height;window.addEventListener("message",(0,a.getWelcomeScreenHiddenHandler)(d,(function(){O.classList.add("tf-v1-widget-fullscreen"),void 0!==t.opacity&&(O.style.backgroundColor=x)}))),window.addEventListener("message",(0,a.getFormThemeHandler)(d,(function(e){var t;x=(0,i.changeColorOpacity)(null===(t=null==e?void 0:e.theme)||void 0===t?void 0:t.backgroundColor)})));var P=((y=document.createElement("button")).className="tf-v1-widget-close tf-v1-close-icon",y.innerHTML="×",y.ariaLabel="Close",y);P.onclick=(0,i.invokeWithoutDefault)((function(){var e;if(O.style.height=_,null===(e=t.onClose)||void 0===e||e.call(t),O.classList.remove("tf-v1-widget-fullscreen"),O.style.backgroundColor="",t.keepSession){var n=document.createElement("div");n.className="tf-v1-widget-iframe-overlay",n.onclick=function(){O.classList.add("tf-v1-widget-fullscreen"),(0,i.unmountElement)(n)},m.append(n)}else t.container.innerHTML="",w(),O.append(P)})),O.append(P)}return{refresh:p,focus:v,unmount:function(){(0,i.unmountElement)(m)}}}},1419:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.buildWidget=void 0;var o=n(6797);t.buildWidget=function(e,t,n){var r=document.createElement("div");return r.className="tf-v1-widget",r.dataset.testid="tf-v1-widget",r.append(e),(0,o.setElementSize)(r,{width:t,height:n})}},2313:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(1419),t)},1126:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.overrideFullScreenStyles=void 0,t.overrideFullScreenStyles=function(e,t){Object.assign(e.style,{zIndex:"10001",position:"absolute",top:"0",left:"0",width:"100%",height:"100%"}),t.style.borderRadius="0",Object.assign(document.body.style,{overflow:"hidden"})}},9321:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(718),t),r(n(4058),t)},4058:function(e,t){Object.defineProperty(t,"__esModule",{value:!0})},1920:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,o,r)}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(1797),t),r(n(5970),t),r(n(4071),t),r(n(9321),t),r(n(1434),t)},5084:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.addAttributesToElement=void 0;var o=n(7377);t.addAttributesToElement=function(e,t){void 0===t&&(t={}),Object.keys(t).forEach((function(n){e.setAttribute((0,o.camelCaseToKebabCase)(n),t[n])}))}},3626:function(e,t,n){var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,o=arguments.length;n0)&&!(o=i.next()).done;)a.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a};Object.defineProperty(t,"__esModule",{value:!0}),t.buildIframeSrc=void 0;var i=n(8027),a=n(4527),s=n(2346),c=n(2698),u=n(863),l={widget:"embed-widget",popup:"popup-blank",slider:"popup-drawer",popover:"popup-popover","side-tab":"popup-side-panel"};t.buildIframeSrc=function(e){var t=e.domain,n=e.formId,d=e.type,f=e.embedId,p=e.options,v=function(e,t,n){var r=n.transitiveSearchParams,i=n.source,a=n.medium,s=n.mediumVersion,u=n.hideFooter,d=n.hideHeaders,f=n.opacity,p=n.disableTracking,v=n.enableSandbox,m=n.shareGaInstance,h=n.forceTouch,b=n.displayAsFullScreenModal,g=n.tracking,y=n.redirectTarget,w=n.autoResize,x=n.disableScroll,O=n.onEndingButtonClick,_=n.noHeading,P=n.noScrollbars,j=(0,c.getTransitiveSearchParams)(r);return o(o(o({},{"typeform-embed-id":t,"typeform-embed":l[e],"typeform-source":i,"typeform-medium":a,"typeform-medium-version":s,"embed-hide-footer":u?"true":void 0,"embed-hide-headers":d?"true":void 0,"embed-opacity":f,"disable-tracking":p||v?"true":void 0,"__dangerous-disable-submissions":v?"true":void 0,"share-ga-instance":m?"true":void 0,"force-touch":h?"true":void 0,"add-placeholder-ws":"widget"===e&&b?"true":void 0,"typeform-embed-redirect-target":y,"typeform-embed-handles-redirect":1,"typeform-embed-auto-resize":w?"true":void 0,"typeform-embed-disable-scroll":x?"true":void 0,"typeform-embed-handle-ending-button-click":O?"true":void 0,"typeform-embed-no-heading":_?"true":void 0,"typeform-embed-no-scrollbars":P?"true":void 0}),j),g)}(d,f,function(e){return e.noHeading||(e.noHeading=document.querySelectorAll("h1").length>0),o(o({},{source:null===(t=null===window||void 0===window?void 0:window.location)||void 0===t?void 0:t.hostname.replace(/^www\./,""),medium:"embed-sdk",mediumVersion:"next"}),(0,a.removeUndefinedKeys)(e));var t}(p)),m=function(e,t){return void 0===t&&(t=i.DEFAULT_DOMAIN),e.startsWith("http://")||e.startsWith("https://")?new URL(e):new URL("https://".concat(t,"/to/").concat(e))}(n,t);if(Object.entries(v).filter((function(e){var t=r(e,2)[1];return(0,s.isDefined)(t)})).forEach((function(e){var t=r(e,2),n=t[0],o=t[1];m.searchParams.set(n,o)})),p.hubspot){var h=(0,u.getHubspotHiddenFields)();p.hidden=o(o({},p.hidden),h)}return m.hash=function(e,t){var n=new URLSearchParams;t.hidden&&Object.entries(t.hidden).filter((function(e){var t=r(e,2)[1];return(0,s.isDefined)(t)&&""!==t})).forEach((function(o){var i=r(o,2),a=i[0],s=i[1];"boolean"==typeof t.transitiveSearchParams&&e.searchParams.delete(a),n.set(a,s)}));var o=function(e){if(!e)return null;var t=Object.keys(e).at(0),n=t&&e[t]||void 0;return void 0===t||void 0===n?null:{key:"answers-".concat(t),value:n}}(t.preselect);if(o){var i=o.key,a=o.value;n.set(i,a)}return n.toString()}(m,p),m.href}},2391:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.changeColorOpacity=void 0,t.changeColorOpacity=function(e,t){return void 0===e&&(e=""),void 0===t&&(t=255),e.startsWith("rgba(")?null==e?void 0:e.replace(/, [\d.]+\)$/,", ".concat(t,")")):e}},8972:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.handleCustomOpen=t.handlePreventReopenOnClose=void 0;var n={remove:function(){}};t.handlePreventReopenOnClose=function(e,t){e.preventReopenOnClose&&r(t)},t.handleCustomOpen=function(e,t,r){var i=t.open,a=t.openValue,s=t.preventReopenOnClose,c=function(e,t,n,r){return function(){var i,a;if(!(r&&o(t)||"all"===n&&(a=document.querySelector(".tf-v1-popup, .tf-v1-slider, .tf-v1-popover-wrapper, .tf-v1-sidetab-wrapper"),(null==a?void 0:a.offsetHeight)||(null==a?void 0:a.offsetWidth)||(null===(i=null==a?void 0:a.getClientRects())||void 0===i?void 0:i.length))||"same"===n&&function(e){var t=document.querySelectorAll(".tf-v1-popup, .tf-v1-slider, .tf-v1-popover-wrapper, .tf-v1-sidetab-wrapper");return Array.from(t).some((function(t){var n,o=null===(n=t.querySelector("iframe"))||void 0===n?void 0:n.src;return(null==o?void 0:o.includes("typeform.com/to/".concat(e)))||(null==o?void 0:o.startsWith(e))}))}(t)))return e()}}(e,r,t.respectOpenModals,s);switch(i){case"load":return c(),n;case"exit":return a?function(e,t){var n=0,o=function(r){r.clientY=i;(s>=e||c)&&(t(),document.removeEventListener("scroll",n))}return document.addEventListener("scroll",n),{remove:function(){return document.removeEventListener("scroll",n)}}}(a,c):n;default:return n}};var o=function(e){return document.cookie.includes("tf-".concat(e,"-closed=true"))},r=function(e){document.cookie="tf-".concat(e,"-closed=true;Path=/")}},1553:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.createIframe=void 0;var o=n(3626),r=n(6797),i=n(8866),a=n(8554),s=n(2256),c=n(7144),u=n(5511);t.createIframe=function(e,t){var n=t.formId,l=t.domain,d=t.options,f=(0,i.generateEmbedId)(),p=d.iframeProps,v=void 0===p?{}:p,m=d.onReady,h=d.onStarted,b=d.onQuestionChanged,g=d.onHeightChanged,y=d.onSubmit,w=d.onEndingButtonClick,x=d.shareGaInstance,O=(0,o.buildIframeSrc)({formId:n,domain:l,embedId:f,type:e,options:d}),_=document.createElement("iframe");return _.src=O,_.dataset.testid="iframe",_.style.border="0px",_.allow="microphone; camera",(0,r.addAttributesToElement)(_,v),_.addEventListener("load",s.triggerIframeRedraw,{once:!0}),window.addEventListener("message",(0,a.getFormReadyHandler)(f,m)),window.addEventListener("message",(0,a.getFormStartedHandler)(f,h)),window.addEventListener("message",(0,a.getFormQuestionChangedHandler)(f,b)),window.addEventListener("message",(0,a.getFormHeightChangedHandler)(f,g)),window.addEventListener("message",(0,a.getFormSubmitHandler)(f,y)),window.addEventListener("message",(0,a.getFormThemeHandler)(f,(function(e){var t;if(null==e?void 0:e.theme){var n=document.querySelector(".tf-v1-close-icon");n&&(n.style.color=null===(t=e.theme)||void 0===t?void 0:t.color)}}))),window.addEventListener("message",(0,a.getThankYouScreenButtonClickHandler)(f,w)),window.addEventListener("message",(0,a.getRedirectHandler)(f,_)),"widget"!==e&&window.addEventListener("message",c.dispatchCustomKeyEventFromIframe),x&&window.addEventListener("message",(0,a.getFormReadyHandler)(f,(function(){(0,r.setupGaInstance)(_,f,x)}))),{iframe:_,embedId:f,refresh:function(){return(0,u.refreshIframe)(_)},focus:function(){var e;null===(e=_.contentWindow)||void 0===e||e.postMessage("embed-focus","*")}}}},8866:function(e,t){var n=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a};Object.defineProperty(t,"__esModule",{value:!0}),t.generateEmbedId=void 0,t.generateEmbedId=function(){var e=Math.random();return n(String(e).split("."),2)[1]}},8554:function(e,t,n){var o=this&&this.__rest||function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r0&&r[r.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]150?"#000000":"#FFFFFF"}},2698:function(e,t){var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,o=arguments.length;n0?e.reduce((function(e,o){var r,i=t.searchParams.get(o);return i?n(n({},e),((r={})[o]=i,r)):e}),{}):{}}},8252:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.hasDom=void 0,t.hasDom=function(){return"undefined"!=typeof document&&"undefined"!=typeof window}},2938:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.hexRgb=void 0;var n="a-f\\d",o="#?[".concat(n,"]{3}[").concat(n,"]?"),r="#?[".concat(n,"]{6}([").concat(n,"]{2})?"),i=new RegExp("[^#".concat(n,"]"),"gi"),a=new RegExp("^".concat(o,"$|^").concat(r,"$"),"i");t.hexRgb=function(e){if("string"!=typeof e||i.test(e)||!a.test(e))throw new TypeError("Expected a valid hex string");8===(e=e.replace(/^#/,"")).length&&(e=e.slice(0,6)),4===e.length&&(e=e.slice(0,3)),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);var t=Number.parseInt(e,16);return{red:t>>16,green:t>>8&255,blue:255&t}}},863:function(e,t,n){var o=this&&this.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function a(e){try{c(o.next(e))}catch(e){i(e)}}function s(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((o=o.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,o,r,i,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(c){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,o&&(r=2&s[0]?o.return:s[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,s[1])).done)return r;switch(o=0,r&&(s=[2&s[0],r.value]),s[0]){case 0:case 1:r=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,o=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!((r=(r=a.trys).length>0&&r[r.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]0)&&!(o=i.next()).done;)a.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a};Object.defineProperty(t,"__esModule",{value:!0}),t.loadOptionsFromAttributes=t.transformAttributeValue=t.camelCaseToKebabCase=void 0,t.camelCaseToKebabCase=function(e){return e.split("").map((function(e,t){return e.toUpperCase()===e?"".concat(0!==t?"-":"").concat(e.toLowerCase()):e})).join("")};var r=function(e){return e||void 0},i=function(e){if(null!==e)return""===e||"yes"===e||"true"===e},a=function(e){var t=e?parseInt(e,10):NaN;return isNaN(t)?void 0:t},s="%ESCAPED_COMMA%",c=function(e){if(e)return e.replace(/\s/g,"").replace(/\\,/g,s).split(",").filter((function(e){return!!e})).map((function(e){return e.replace(s,",")}))};t.transformAttributeValue=function(e,t){var u,l,d;switch(t){case"string":return r(e);case"boolean":return i(e);case"integer":return a(e);case"function":return function(e){var t=e&&e in window?window[e]:void 0;return"function"==typeof t?t:void 0}(e);case"array":return c(e);case"record":return function(e){if(e)return e.replace(/\\,/g,s).split(",").filter((function(e){return!!e})).map((function(e){return e.replace(s,",")})).reduce((function(e,t){var r,i=t.match(/^([^=]+)=(.*)$/);if(i){var a=o(i,3),s=a[1],c=a[2];return n(n({},e),((r={})[s.trim()]=c,r))}return e}),{})}(e);case"integerOrString":return function(e){if(e)return e.match(/^[0-9]+$/)?a(e):r(e)}(e);case"integerOrBoolean":return null!==(u=a(e))&&void 0!==u?u:i(e);case"stringOrBoolean":return null!==(l=r(e))&&void 0!==l?l:i(e);case"arrayOrBoolean":return null!==(d=c(e))&&void 0!==d?d:i(e);default:throw new Error("Invalid attribute transformation ".concat(t))}},t.loadOptionsFromAttributes=function(e,o){return Object.keys(o).reduce((function(r,i){var a;return n(n({},r),((a={})[i]=(0,t.transformAttributeValue)(e.getAttribute("data-tf-".concat((0,t.camelCaseToKebabCase)(i))),o[i]),a))}),{})}},6563:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.isFullscreen=t.isMobile=t.isBigScreen=void 0,t.isBigScreen=function(){return window.screen.width>=1024&&window.screen.height>=768},t.isMobile=function(){return/mobile|tablet|android/i.test(navigator.userAgent.toLowerCase())},t.isFullscreen=function(){return(0,t.isMobile)()&&!(0,t.isBigScreen)()}},4527:function(e,t,n){var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,o=arguments.length;n0)&&!(o=i.next()).done;)a.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a};Object.defineProperty(t,"__esModule",{value:!0}),t.removeUndefinedKeys=void 0;var i=n(2346);t.removeUndefinedKeys=function(e){return Object.entries(e).filter((function(e){var t=r(e,2)[1];return(0,i.isDefined)(t)})).reduce((function(e,t){var n,i=r(t,2),a=i[0],s=i[1];return o(o({},e),((n={})[a]=s,n))}),{})}},4748:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.setAutoClose=t.DEFAULT_AUTO_CLOSE_TIME=void 0;var o=n(8554);t.DEFAULT_AUTO_CLOSE_TIME=500,t.setAutoClose=function(e,n,r){n&&r&&window.addEventListener("message",(0,o.getFormSubmitHandler)(e,(function(){return setTimeout(r,(o="number"==typeof(e=n)?e:0,Math.max(o,t.DEFAULT_AUTO_CLOSE_TIME)));var e,o})))}},9533:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.setElementSize=t.getValueWithUnits=void 0,t.getValueWithUnits=function(e){return"string"!=typeof e||e.match(/^[0-9]+$/)?"".concat(e,"px"):e},t.setElementSize=function(e,n){var o=n.width,r=n.height;return o&&(e.style.width=(0,t.getValueWithUnits)(o)),r&&(e.style.height=(0,t.getValueWithUnits)(r)),e}},4392:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.setupGaInstance=t.sendGaIdMessage=void 0,t.sendGaIdMessage=function(e,t,n){var o={embedId:e,gaClientId:t};setTimeout((function(){n&&n.contentWindow&&n.contentWindow.postMessage({type:"ga-client-id",data:o},"*")}),0)};var n=function(e){console.error(e)},o=function(e){n("Whoops! You enabled the shareGaInstance feature in your typeform embed but ".concat(e,".\n\n")+"Make sure to include Google Analytics Javascript code before the Typeform Embed Javascript code in your page and use correct tracker ID.\n\nIt is also possible the Google Analytics was blocked by your adblock plugin.")};t.setupGaInstance=function(e,r,i){var a="string"==typeof i?i:void 0;if(window.gtag){if(a||(a=function(){if(window.dataLayer){var e=window.dataLayer.find((function(e){return e.length>1&&"config"===e[0]}));return e&&e[1]}}()),!a)return void o("the tracking ID could not be retrieved");var s=!1;window.gtag("get",a,"client_id",(function(n){s=!0,(0,t.sendGaIdMessage)(r,n,e)})),setTimeout((function(){s||o("the tracker with ID ".concat(a," was not found"))}),3e3)}else try{var c=function(e,t){return t?e.find((function(e){return e.get("trackingId")===t})):e[0]}(window.ga.getAll(),a);c?(0,t.sendGaIdMessage)(r,c.get("clientId"),e):o("the tracker with ID ".concat(a," was not found"))}catch(e){o("the Google Analytics object was not found"),n(e)}}},4623:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.sleep=void 0,t.sleep=function(e){return new Promise((function(t){return setTimeout(t,e)}))}},1451:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.unmountElement=void 0,t.unmountElement=function(e){var t;null===(t=e.parentNode)||void 0===t||t.removeChild(e)}}},t={};return function n(o){var r=t[o];if(void 0!==r)return r.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,n),i.exports}(1920)}()},156:function(e){"use strict";e.exports=o}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,n),i.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(o){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return function(){"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.Sidetab=e.Popover=e.SliderButton=e.PopupButton=e.Widget=void 0;var t=n(611),o=n(281),i=n(797);e.Widget=(0,i.memoComponent)(o.Widget),e.PopupButton=(0,i.memoComponent)((0,o.makeButtonComponent)(t.createPopup,"popup")),e.SliderButton=(0,i.memoComponent)((0,o.makeButtonComponent)(t.createSlider,"slider")),e.Popover=(0,i.memoComponent)((0,o.makeInitializerComponent)(t.createPopover,"popover")),e.Sidetab=(0,i.memoComponent)((0,o.makeInitializerComponent)(t.createSidetab,"sidetab"))}(),r}())}}]); \ No newline at end of file diff --git a/src/web/gui/v2/9292.cc5055091db9a0826933.chunk.js b/src/web/gui/v2/9292.cc5055091db9a0826933.chunk.js deleted file mode 100644 index 2c4b09179..000000000 --- a/src/web/gui/v2/9292.cc5055091db9a0826933.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="9bf611d0-e74f-45a7-95ec-7650e01eea77",e._sentryDebugIdIdentifier="sentry-dbid-9bf611d0-e74f-45a7-95ec-7650e01eea77")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[9292],{82700:(e,t,n)=>{n.d(t,{Ay:()=>y,H5:()=>f,V$:()=>p,b1:()=>g});var a=n(58168),r=(n(17333),n(41393),n(14905),n(8159),n(98992),n(54520),n(81454),n(8872),n(37550),n(62953),n(96540)),l=n(63950),o=n.n(l),i=n(8711),s=n(27467),c=n(83199),d=n(54924),u=n(29217);const m=e=>e?e[0].toUpperCase()+e.slice(1):"Unknown",g=(0,i.default)(c.Flex).attrs((e=>({as:"li",role:"option",padding:[1,2],gap:1,justifyContent:"between",width:"100%",...e}))).withConfig({displayName:"checkboxes__ItemContainer",componentId:"sc-1vef46u-0"})(["cursor:",";opacity:",";align-items:",";"," ",""],(e=>{let{disabled:t}=e;return t?"default":"pointer"}),(e=>{let{stale:t,disabled:n,selected:a}=e;return!t&&!n||a?1:.6}),(e=>{let{alignItems:t}=e;return t||"center"}),(e=>{let{multi:t,selected:n,theme:a}=e;return!t&&n&&"\n background-color: ".concat((e=>{let{theme:t}=e;const{name:n}=t;return("Dark"===n?(0,c.getRgbColor)(["green","green20"]):(0,c.getRgbColor)(["green","green170"]))({theme:t})})({theme:a}),";\n ")}),(e=>{let{multi:t,selected:n,disabled:a,theme:r}=e;return!t&&!n&&!a&&"\n &:hover {\n background-color: ".concat((0,c.getColor)("secondaryHighlight")({theme:r}),";\n }\n ")})),p=(0,i.default)(c.MenuDropdown).attrs((e=>({background:"transparent",hideShadow:!0,height:{max:"300px"},width:{max:"600px"},overflow:"auto",...e}))).withConfig({displayName:"checkboxes__CheckboxesContainer",componentId:"sc-1vef46u-1"})([""]),h=e=>e,f={itemProps:{padding:[1,.5],multi:!0},itemsProps:{head:{textColor:"textLite"},row:{textColor:"text"}},Item:e=>{let{item:t,onItemClick:n,itemProps:l,...i}=e;const{value:s,disabled:p,onClick:h,label:f,selected:y,excluded:v,indeterminate:x,textColor:b,iconName:I,count:E,countLabel:C="results",actualCount:A,actualCountLabel:k,pill:w,info:S,level:P=0,stale:N,...F}=t,{capitalized:_}=l,{multi:K}=l,M=p||!K&&y,L=e=>{p||(h&&h(e),n({value:s,label:f,checked:!y,item:t}))};return r.createElement(g,(0,a.A)({"aria-selected":y,selected:y,disabled:M,stale:0===E||"0"===E||N||v},F,i,l,{"data-testid":"".concat(l.testIdPrefix,"-filters-item")}),r.createElement(c.Flex,{gap:2,alignItems:"center",padding:[0,0,0,4*P],width:"100%",overflow:"hidden"},K?r.createElement(c.Checkbox,{"data-testid":"".concat(l.testIdPrefix,"-filters-checkbox-").concat(f),checked:y,disabled:M,indeterminate:x,onChange:L,label:r.createElement(c.Flex,{gap:1,alignItems:"center",width:"100%"},I&&r.createElement(c.Icon,{name:I,size:"small",color:"textLite"}),r.createElement(d.default,{Component:c.TextSmall,text:"string"===typeof f&&_?m(f):f.toString(),color:b}))}):r.createElement(c.Flex,{flex:!0,gap:1,padding:[0,1],alignItems:"center",onClick:y?o():L,"data-testid":"".concat(l.testIdPrefix,"-filters-item-").concat(f)},r.createElement(d.default,{Component:c.TextSmall,text:"string"===typeof f&&_?m(f):f.toString(),color:b}))),(!isNaN(E)||/%/.test(E||"")||w)&&r.createElement(u.A,{align:"top",content:S||(A?"".concat(A," ").concat(k," aggregated in ").concat(E," ").concat(C):"".concat(E," ").concat(C))},r.createElement(c.Pill,{flavour:"neutral",hollow:!0,"data-testid":"".concat(l.testIdPrefix,"-filters-").concat(f,"-count"),size:"small"},!!A&&r.createElement(c.TextSmall,null,A," \u2283\xa0"),(w||E).toString())))},getValue:h,getLabel:h},y=(0,r.memo)((e=>{let{baseKey:t,extraKey:n,paramFlavour:l="arr",param:o,Item:i=f.Item,testIdPrefix:c,collection:d,getValue:u=f.getValue,getLabel:m=f.getLabel,itemsProps:g=f.itemsProps,itemProps:h=f.itemProps,capitalized:y=!0,multi:v=!0,merge:x=!1,...b}=e;const[I,E]=(0,s.N9)(o,{defaultValue:[],key:t,extraKey:n,flavour:l,merge:x});(0,r.useEffect)((()=>{if(!d.length||!I.length)return;const e=I.filter((e=>d.some((t=>u(t)===e))));e.length!==I.length&&E(e)}),[d.length,E]);const C=(0,r.useCallback)((e=>{let{value:t,checked:n}=e;E(v?function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(t)?n?t:[]:n?[...e,t]:e.filter((e=>e!==t))}:()=>n?[t]:[])}),[E]),A=(0,r.useMemo)((()=>(e=>{let{collection:t,selected:n,getValue:a,getLabel:r,itemsProps:l,multi:o}=e;if(!t.length)return[];const i=o&&t.length<=n.length,s=o&&!i&&!!n.length;return t.reduce(((e,t)=>{const o=n.includes(a(t));return[...e,{...l.row,...t,value:a(t),label:r(t),selected:o}]}),o?[{...l.head,label:"Select all",value:t.map(a),selected:i,indeterminate:s}]:[])})({collection:d,selected:I,getValue:u,getLabel:m,itemsProps:g,multi:v})),[I,d]);return r.createElement(p,(0,a.A)({"data-testid":"".concat(c,"-filter-selections"),items:A,Item:i,onItemClick:C,value:I,"data-value":I.join(",")||"all-selected",hasSearch:d.length>5,searchMargin:[0,0,1],itemProps:{...h,testIdPrefix:c,capitalized:y,multi:v}},b))}),((e,t)=>e.baseKey===t.baseKey&&e.extraKey===t.extraKey&&e.multi===t.multi&&e.collection===t.collection))},59846:(e,t,n)=>{n.d(t,{A:()=>c});var a=n(58168),r=(n(62953),n(96540)),l=n(83199),o=n(27467),i=n(87659),s=n(29217);const c=e=>{let{margin:t,title:n,testIdPrefix:c,baseKey:d,extraKey:u,param:m,paramFlavour:g="arr",children:p,multi:h=!0,defaultIsOpen:f=!0,border:y={side:"bottom",color:"borderSecondary"},required:v=!1,configElements:x,showCounter:b=!0,help:I,collapsible:E=!0,merge:C=!1,...A}=e;const[k,w]=(0,o.N9)(m,{key:d,extraKey:u,flavour:g,merge:C}),[S,P]=(0,i.A)(f||!(null===k||void 0===k||!k.length));return r.createElement(l.Flex,(0,a.A)({"data-testid":"".concat(c,"-filter"),column:!0,padding:[2,0,0],border:y},A),r.createElement(l.Flex,{justifyContent:"between",margin:!E||S?t:[0],gap:2,onClick:E?P:void 0,cursor:"pointer"},r.createElement(l.Flex,{alignItems:"center",gap:2,height:4.5},r.createElement(l.Flex,{gap:2},v&&!(null!==k&&void 0!==k&&k.length)&&r.createElement(l.Icon,{color:"error",name:"error",size:"small"}),r.createElement(l.Flex,{alignItems:"center",gap:.5},r.createElement(l.TextSmall,{strong:!0},n),!!I&&r.createElement(s.A,{align:"top",content:I},r.createElement(l.Flex,null,r.createElement(l.Icon,{name:"question",color:"textLite",width:"12px",height:"12px"})))),b&&!(null===k||void 0===k||!k.length)&&r.createElement(l.Pill,{flavour:"neutral",hollow:!0,"data-testid":"".concat(c,"-selected-count"),tiny:!0},null===k||void 0===k?void 0:k.length)),!v&&h&&!(null===k||void 0===k||!k.length)&&r.createElement(l.Button,{padding:[0],flavour:"borderless",onClick:e=>{e.stopPropagation(),w([])},"data-testid":"".concat(c,"-filter-resetAll"),label:"Reset",small:!0})),r.createElement(l.Flex,{gap:1,alignItems:"center"},"function"===typeof x?x({isOpen:S,collapsible:E}):x,E&&r.createElement(l.Icon,{name:"chevron_left",size:"small",color:"textLite",rotate:S?1:3}))),r.createElement(l.Collapsible,{open:!E||S,height:"100%"},p))}},42828:(e,t,n)=>{n.d(t,{Ay:()=>T,Ii:()=>A});var a=n(58168),r=(n(17333),n(14905),n(8159),n(98992),n(54520),n(8872),n(37550),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215),n(62953),n(96540)),l=n(83199),o=n(66245),i=n.n(o),s=n(89935),c=n.n(s),d=n(84976),u=n(47762),m=n(11128),g=n(69418),p=n(54924),h=n(4659),f=n(88494),y=n(37019),v=n(82700),x=n(73865),b=n(47130);const I=(0,b.A)(p.default),E=(0,b.A)(l.Flex),C="By selecting a parent node, you apply your changes to all it's children nodes too.",A={Live:{head:{label:"Live nodes",textColor:"textLite",iconName:"connectivityStatusLive",hasML:!1,hasParentNode:!0,hasAlerts:!0,hasFn:!1},node:{textColor:"textFocus",showAlerts:!0,showMl:!1,showFn:!1,showParentNode:!0}},Stale:{head:{label:"Stale nodes",textColor:"textLite",iconName:"connectivityStatusStale"},node:{textColor:"textFocus"}},Offline:{head:{label:"Offline nodes",textColor:"textLite",iconName:"connectivityStatusOffline"},node:{textColor:"textLite"}}},k=e=>{let{toggle:t,expanded:n}=e;return r.createElement(l.Flex,{cursor:"pointer",role:"button",padding:[.5],gap:.5,onClick:e=>{e.preventDefault(),e.stopPropagation(),t(),setTimeout((()=>e.target.scrollIntoView({behavior:"smooth",block:"nearest"})))}},r.createElement(l.TextNano,{color:"textLite"},n?"Collapse":"Expand"),r.createElement(l.Icon,{name:"chevron_down",width:"10px",height:"10px",color:"textLite",rotate:n?2:null}))},w=(S=e=>{let{iconName:t,label:n,textColor:a,value:o,nodePath:i,nodeId:s,onAnchorClick:c,isParentNode:u,showParentNode:m,onToggleHidden:g,itemsHidden:p,status:f}=e;return r.createElement(l.Flex,{gap:2,alignItems:"center"},t&&r.createElement(l.Icon,{name:t,size:"small",color:"textLite"}),r.createElement(I,{Component:l.TextSmall,text:n,color:a,truncate:!0,tooltip:m&&u?C:null}),"Offline"!==f&&!Array.isArray(o)&&r.createElement(h.A,{as:d.N_,to:i,state:{nodeId:s},"data-testid":"filterNodes-item-gta",color:"textLite",hoverColor:"text",onClick:c},r.createElement(l.Icon,{name:"nav_arrow_goto",height:"10px",width:"10px"})),!!g&&r.createElement(k,{toggle:g,expanded:!p}))},e=>{let{limitationsApplied:t,...n}=e;return t&&Array.isArray(n.value)?r.createElement(S,n):r.createElement(l.Checkbox,{"data-testid":"filterNodes-checkbox-".concat(n.label),checked:n.selected,disabled:n.isDisabled,indeterminate:n.indeterminate,onChange:n.onSelect,label:r.createElement(S,n)})});var S;const P=e=>{let{item:{value:t,disabled:n,onClick:o,label:i,nodeId:s,selected:m,excluded:b,stale:I,status:A,indeterminate:S,textColor:P,iconName:N,hasAlerts:F,hasML:_,hasParentNode:K,hasFn:M,showAlerts:L,showMl:T,showParentNode:D,showFn:B,requireML:q,requireFn:V,capabilities:O,count:z,multi:H=!0,checkIsDisabled:W=c(),onToggleHidden:j,itemsHidden:G,isParent:R,isParentNode:U,hasExtraInfo:Q,flavour:Z,...Y},onItemClick:$,itemProps:J,close:X,...ee}=e;const[,,te]=(0,g.A)(),ne=(0,u.Zl)(s),{hasLimitations:ae,preferredNodes:re,maxNodes:le}=(0,x.A)(),oe=(0,r.useMemo)((()=>{var e;return!B||!O||(null===(e=O.funcs)||void 0===e?void 0:e.enabled)}),[B]),ie=(0,r.useMemo)((()=>{var e;return!B||!O||(null===(e=O.ml)||void 0===e?void 0:e.enabled)}),[B]),se=ae&&!re.includes(s),ce=!Array.isArray(t)&&se&&te>le,de=n||ce||q&&!ie||V&&!oe||!H&&m||W(s),ue=e=>{de||(o&&o(e),$({value:t,checked:!m,status:A}))},me=e=>{e.stopPropagation(),null===X||void 0===X||X()},ge=b||I,pe={status:A,limitationsApplied:se,iconName:N,isDisabled:de,indeterminate:S,label:i,textColor:P,value:t,nodePath:ne,nodeId:s,onAnchorClick:me,onSelect:ue,isStale:ge,excluded:b,selected:m,isParent:R,isParentNode:U,showParentNode:D,itemProps:J,onToggleHidden:j,itemsHidden:G,flavour:Z};return r.createElement(v.b1,(0,a.A)({"aria-selected":m,selected:m,disabled:de,stale:ge||0===z||"0"===z},Y,ee,J,{"data-testid":"filterNodes-item-".concat(i),multi:H}),r.createElement(l.Flex,(0,a.A)({gap:2,alignItems:"center",flex:!0},R?{}:{padding:[0,0,0,1.5]}),H?r.createElement(w,(0,a.A)({},pe,ce?{iconName:"padlock"}:{})):r.createElement(l.Flex,{gap:1,padding:[0,1],alignItems:"center",onClick:ue,"data-testid":"filterNodes-item-".concat(i),flex:!0},r.createElement(p.default,{Component:l.TextSmall,text:i,color:P}),"Offline"!==A&&!Array.isArray(t)&&r.createElement(h.A,{as:d.N_,to:ne,state:{nodeId:s},"data-testid":"filterNodes-item-gta",color:"textLite",hoverColor:"text",onClick:me},r.createElement(l.Icon,{name:"nav_arrow_goto",height:"10px",width:"10px"})),!!j&&r.createElement(k,{toggle:j,expanded:!G}))),Q&&r.createElement(l.Flex,{gap:1},L&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:17},r.createElement(y.A,{id:t,isLive:!0,name:i})),T&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:10},r.createElement(f.A,{badge:"ml","data-testid":"nodes-indicator-machine-learning",enabled:ie,name:i})),D&&r.createElement(E,{gap:1,justifyContent:"center",width:14,tooltip:U?C:null},U?r.createElement(l.Icon,{name:"check",color:"primary"}):null),B&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:10},r.createElement(f.A,{badge:"fn","data-testid":"nodes-indicator-fn",enabled:oe,name:i})),F&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:17},r.createElement(l.Icon,{name:"alarm",size:"small",color:"textLite"}),r.createElement(l.TextSmall,{strong:!0,color:"textLite"},"Alerts")),_&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:10},r.createElement(l.Icon,{name:"anomaliesLens",size:"small",color:"textLite"}),r.createElement(l.TextSmall,{strong:!0,color:"textLite"},"ML")),K&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:14},r.createElement(l.TextSmall,{strong:!0,color:"textLite"},"Parent")),M&&r.createElement(l.Flex,{gap:1,justifyContent:"center",width:10},r.createElement(l.Icon,{name:"functions",size:"small",color:"textLite"}),r.createElement(l.TextSmall,{strong:!0,color:"textLite"},"Fn")),!isNaN(z)&&r.createElement(l.Pill,{flavour:"neutral",hollow:!0,"data-testid":"".concat(J.testIdPrefix,"-filters-").concat(i,"-count"),size:"small"},z.toString())))},N=["dyncfg"],F=e=>{let{ids:t,status:n,selectedIds:a,excludedIds:r,filteredIds:l,nodesById:o,statusProps:i,multi:s=!0,nodeCounts:c,checkIsDisabled:d,setHidden:u,hidden:m,extraKey:g,flavour:p}=e;if(!t.length)return[];const h=s&&!t.some((e=>!a.includes(e))),f=s&&a.length&&!h&&t.some((e=>a.includes(e))),y=s&&!t.some((e=>!r.includes(e))),v=s&&r.length&&!y&&t.some((e=>r.includes(e))),x=!g||N.includes(g);return t.reduce(((e,t)=>{var u;if(m[n])return e;const{name:g,capabilities:h,labels:f,ni:y}=o[t];if("dyncfg"==p&&(null===h||void 0===h||null===(u=h.dyncfg)||void 0===u||!u.enabled))return e;const v=a.includes(t),b=!!r.length&&r.includes(t),I=s&&!l.includes(t)&&("dyncfg"==p||!!l.length),E=0==y||"true"==(null===f||void 0===f?void 0:f._is_parent);return[...e,{value:t,label:g,nodeId:t,selected:v,excluded:b,stale:I,status:n,capabilities:h,...i[n].node,multi:s,checkIsDisabled:d,count:c?c[t]||0:NaN,hasExtraInfo:x,isParentNode:E,flavour:p}]}),[{value:t,selected:h,indeterminate:f,disabled:!s,status:n,...i[n].head,multi:s,onToggleHidden:()=>u((e=>({...e,[n]:!m[n]}))),itemsHidden:m[n],excluded:y,someExcluded:v,isParent:!0,hasExtraInfo:x}])},_=e=>e,K=(e,t)=>e.isParentNode&&!t.isParentNode?-1:t.isParentNode&&!e.isParentNode?1:0,M=e=>{const t=e.filter((e=>e.isParent)),n=e.filter((e=>!e.isParent)).sort(K);return t.length>0?[t[0],...n]:n},L=e=>{let{baseKey:t,extraKey:n,statusProps:l=A,multi:o=!0,useFilteredIds:s=_,nodeCounts:c,checkIsDisabled:d,flavour:g,...p}=e;const[h,f]=(0,r.useState)((()=>({Stale:!0,Offline:!0}))),y=(0,m.w7)({extraKey:n,omit:"selectedNodeIds",merge:!0,emptyIfAll:!1}),x=(0,m.w7)({extraKey:n,merge:!1}),[b,I]=(0,m.Oj)({key:t,extraKey:n,merge:!1}),[E,C]=(0,m.PF)({key:t,extraKey:n,merge:!1}),k=s(y),w=(0,u.BU)(n?k:void 0),S=(0,u.Ig)(n?k:void 0),N=(0,u.GE)(n?k:void 0),K=(0,r.useCallback)((e=>{let{value:t,checked:n,excluded:a}=e;if("undefined"!==typeof a){if(!o)return void C((()=>n?[t]:[]));C((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(t)?n?[...new Set([...e,...t])]:i()(e,t):n?[...e,t]:e.filter((e=>e!==t))}))}I(o?function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(t)?n?[...new Set([...e,...t])]:i()(e,t):n?[...e,t]:e.filter((e=>e!==t))}:()=>n?[t]:[])}),[b,I]),L=(0,u.ss)(),T=(0,r.useMemo)((()=>{const e=F({ids:w,status:"Live",selectedIds:b,excludedIds:E,filteredIds:x,nodesById:L,statusProps:l,multi:o,nodeCounts:c,checkIsDisabled:d,setHidden:f,hidden:h,extraKey:n,flavour:g}),t=F({ids:S,status:"Stale",selectedIds:b,excludedIds:E,filteredIds:x,nodesById:L,statusProps:l,multi:o,nodeCounts:c,checkIsDisabled:d,setHidden:f,hidden:h,extraKey:n,flavour:g}),a=F({ids:N,status:"Offline",selectedIds:b,excludedIds:E,filteredIds:x,nodesById:L,statusProps:l,multi:o,nodeCounts:c,checkIsDisabled:d,setHidden:f,hidden:h,extraKey:n,flavour:g});return"dyncfg"==g?M(e):M(e).concat(t,a)}),[b,E.length,k.length,x.length,c,d,h,g]);return r.createElement(v.V$,(0,a.A)({"data-testid":"filterNodes-drop",items:T,Item:P,onItemClick:K,value:b,"data-value":b.join(",")||"all-nodes",hasSearch:!0},p))},T=(0,r.memo)(L,((e,t)=>e.baseKey===t.baseKey&&e.extraKey===t.extraKey&&e.statusProps===t.statusProps&&e.multi===t.multi&&e.nodeCounts===t.nodeCounts&&e.useFilteredIds===t.useFilteredIds&&e.checkIsDisabled===t.checkIsDisabled))},93615:(e,t,n)=>{n.d(t,{A:()=>s});var a=n(58168),r=n(96540),l=n(83199),o=n(64473);const i=e=>{let{onToggle:t,icon:n="node_hollow",isOpen:i,title:s,...c}=e;return r.createElement(o.A,(0,a.A)({dataTestId:"collapsed-header",iconClose:i?"arrow_w_line_right":"arrow_w_line_left",onClick:t},c),i&&r.createElement(l.Flex,{gap:2,alignItems:"center","data-testid":"sidebar-nodeName"},r.createElement(l.Icon,{name:n,color:"text",size:"small"}),r.createElement(l.TextSmall,{strong:!0},s)))},s=(0,r.memo)(i)},30577:(e,t,n)=>{n.d(t,{A:()=>s});var a=n(58168),r=(n(41393),n(81454),n(96540)),l=n(83199);const o=e=>{let{iconName:t,label:n,onClick:o,containerStyles:i,textStyles:s}=e;return r.createElement(l.Flex,(0,a.A)({"data-testid":"sidebar-icon-item"},i,{column:!0,margin:[2,0],alignItems:"center"}),r.createElement(l.Flex,{"data-testid":"sidebar-icon-item-wrapper",margin:[0,0,.5,0],alignItems:"center",onClick:o,cursor:"pointer"},r.createElement(l.Icon,{name:t,color:"textLite",width:"18px",height:"18px"})),r.createElement(l.TextMicro,(0,a.A)({color:"text"},s),n))},i=e=>{let{onClickTab:t,availableTabs:n,tabsToShow:i,...s}=e;return r.createElement(l.Flex,(0,a.A)({"data-testid":"collapsed-sidebar",column:!0,justifyContent:"center"},s),i.map(((e,a)=>{const{iconName:l,label:i}=n[e];return r.createElement(o,{containerStyles:{border:{size:"2px",type:"solid",color:"mainBackground",side:"left"}},textStyles:{color:"textLite"},key:l,onClick:()=>t(a),iconName:l,label:i})})))},s=(0,r.memo)(i)},12352:(e,t,n)=>{n.d(t,{A:()=>o});var a=n(58168),r=n(96540),l=n(83199);const o=e=>{let{children:t,iconName:n,name:o,size:i,testId:s="entry-line-text-container",...c}=e;const d="small"===i?l.TextSmall:l.Text,u="undefined"!==typeof t&&null!==t;return r.createElement(l.Flex,{alignItems:"start","data-testid":"entry-line"},n&&r.createElement(l.Flex,{"data-testid":"entry-line-icon-container",padding:[0,1,0,0]},r.createElement(l.Icon,{color:"textLite","data-testid":"entry-line-icon",name:n,width:"16px",height:"16px"})),r.createElement(l.Flex,(0,a.A)({column:!0,alignItems:"start","data-testid":s,gap:.5},c),r.createElement(d,{"data-testid":"entry-line-text-label",whiteSpace:"nowrap",color:"textDescription"},o,u&&": "),u&&r.createElement(l.TextSmall,{color:"textDescription","data-testid":"entry-line-text-value",strong:!0},t)))}},50065:(e,t,n)=>{n.d(t,{A:()=>g});var a=n(58168),r=(n(62953),n(8711)),l=n(96540),o=n(83199),i=n(87659),s=n(29217);const c=(0,r.default)(o.Icon).withConfig({displayName:"group__IconLink",componentId:"sc-9459pv-0"})(["&:hover{fill:",";}"],(0,o.getColor)("textDescription")),d=e=>e.stopPropagation(),u=e=>{let{children:t,isEnabled:n,link:a,onClick:r,open:i}=e;return l.createElement(o.Flex,{alignItems:"center",justifyContent:"between",height:8,onClick:n?r:null,cursor:n?"pointer":"default"},l.createElement(o.Flex,{gap:2,alignItems:"center"},l.createElement(o.TextSmall,{strong:!0},t),a&&l.createElement(o.Flex,{as:"a",href:a,target:"_blank",onClick:d},l.createElement(c,{height:"13px",width:"13px",name:"documentation",size:"small",color:"placeholder"}))),n&&l.createElement(o.Icon,{name:"chevron_left",size:"small",color:"textLite",rotate:i?1:3}))},m=(0,r.default)(o.Flex).withConfig({displayName:"group__StyledFlex",componentId:"sc-9459pv-1"})(["&:last-child{border:none;}"]),g=e=>{let{children:t,isEnabled:n=!0,link:r,name:c,noDataLabel:d,...g}=e;const[p,h]=(0,i.A)(!0),f=n?null:d;return l.createElement(s.A,{content:f,isBasic:!0},l.createElement(m,(0,a.A)({column:!0,border:{side:"bottom",color:"borderSecondary"},padding:[1,0,p?2:1],isEnabled:n},g),l.createElement(u,{isEnabled:n,open:p,onClick:h,link:r},c),l.createElement(o.Collapsible,{column:!0,open:p,gap:1},t)))}},64473:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(58168),r=n(96540),l=n(83199),o=n(29217);const i=e=>{let{children:t,onClick:n,iconClose:i="x",icon:s,dataTestId:c,title:d,help:u,...m}=e;return r.createElement(l.Flex,(0,a.A)({"data-testid":c,height:12,alignItems:"center",justifyContent:"between",border:{side:"bottom",color:"borderSecondary"},padding:[0,2],flex:!1},m),d?r.createElement(l.Flex,{gap:2,alignItems:"center","data-testid":"sidebar-nodeName"},r.createElement(l.Icon,{name:s,color:"text",size:"small"}),r.createElement(l.TextSmall,{strong:!0},d),!!u&&r.createElement(o.A,{align:"top",content:u},r.createElement(l.Flex,null,r.createElement(l.Icon,{name:"question",color:"textLite",width:"12px",height:"12px"})))):t,r.createElement(l.Icon,{"data-testid":"sidebarHeader-icon",name:i,color:"textLite",onClick:n,cursor:"pointer"}))}},81638:(e,t,n)=>{n.d(t,{Ay:()=>o});var a=n(58168),r=n(96540),l=n(83199);const o=(0,r.memo)((e=>{let{children:t,collapsedComponent:n,isOpen:o,header:i,width:s=90,...c}=e;const d=!!n;return r.createElement(l.Collapsible,(0,a.A)({open:o,column:!0,closedValue:d?48:0,persist:d,direction:"horizontal",border:{side:"left",color:"borderSecondary"},width:s,flex:!0,basis:s},c),(e=>r.createElement(r.Fragment,null,i,e?t:n)))}))},92136:(e,t,n)=>{n.d(t,{A:()=>P});var a=n(58168),r=(n(62953),n(96540)),l=n(67602),o=n(83199),i=n(64118),s=n(15327),c=n(74618),d=n(40267),u=n(5871),m=n(28738),g=n(11164),p=n(52768);const h=(0,r.memo)((e=>{let{id:t}=e;const{fullyLoaded:n,nodeId:a,instance:l,lastStatusChangeValue:o,lastStatusChange:s,units:c,context:d,value:u,lastUpdated:m,status:h}=(0,i.JL)(t),f=(0,p.J4)(u,c),y=(0,p.J4)(o,c);return r.createElement(g.A,{instance:l,context:d,formattedLastValue:f,formattedLastStatusChangeValue:y,lastStatusChange:s,lastUpdated:m,isFormattedValueLoaded:"clear"===h||n,nodeId:a,status:h,testid:"alertDetailsModal"})}));n(9391);var f=n(3914),y=n(69765),v=n(47767),x=n(50876);const b=e=>{let{alertId:t,testid:n}=e;const a=(0,f.bq)(),l=(0,y.QW)(),i="/spaces/".concat(a,"/rooms/").concat(l,"/alerts/").concat(t),s=(0,v.Zp)(),{sendButtonClickedLog:c,isReady:d}=(0,x.A)(),u=(0,r.useCallback)((e=>{e.preventDefault(),c({dataGa:"".concat(n,"::view-alert-button")}).finally((()=>{s(i)}))}),[s,i,d]);return r.createElement(o.Button,{as:"a","data-testid":"".concat(n,"-view-alert-button"),"data-ga":"".concat(n,"::view-alert-button"),href:i,onClick:u,label:"View alert page",width:"224px"})};var I=n(43407),E=n(7660),C=n(4974),A=n(85686),k=n(73865),w=n(63314);const S=e=>{let{alertId:t,onClose:n}=e;const{isNodeRestricted:a}=(0,k.A)(),{name:l="unknown alert",status:g,fullyLoaded:p,info:f,nodeId:y}=(0,i.JL)(t);(0,i.yk)(t);const v=y&&a(y);return r.createElement(w.Ay,{mode:"AlertDetailsModal"},r.createElement(s.GO,{onClose:n},r.createElement(c.z,{onClose:n,title:l,"data-testid":"alertDetailsModal-alertName"},r.createElement(d.A,{flavour:g,icon:"alarm_bell","data-testid":"alertDetailsModal-alertPill"},g)),p?v?r.createElement(A.A,{flavour:"alert"}):r.createElement(r.Fragment,null,r.createElement(s.Yv,{overflow:{vertical:"auto"},hasModalTitle:!1,gap:2,hasFooter:!0},r.createElement(I.A,{iconName:"monitoring",iconSize:"20px"},"Time Values"),r.createElement(E.A,{alertId:t}),r.createElement(I.A,{iconName:"documentation"},"Alert Description"),r.createElement(o.Text,{"data-testid":"alertDetailsModal-info"},f),r.createElement(C.A,{alertId:t}),r.createElement(h,{id:t}),r.createElement(u.A,{id:t})),r.createElement(s.CG,null,r.createElement(b,{alertId:t,testid:"alertDetailsModal"}))):r.createElement(m.A,{title:"Loading alert..."})))},P=()=>{const[e,,t,n,o]=(0,l.A)("alertDetailsModal"),i=(0,r.useCallback)((e=>{let{alertId:n}=e;t("",{alertId:n})}),[]),s=(0,r.useMemo)((()=>r.createElement(S,(0,a.A)({onClose:n},o))),[o]);return[e,i,n,s]}},23452:(e,t,n)=>{n.d(t,{QD:()=>p,hv:()=>u,qr:()=>g});n(17333),n(41393),n(8159),n(98992),n(54520),n(81454),n(37550),n(62953);var a=n(47444),r=n(27467),l=n(69765),o=n(11128),i=n(64118);const s=e=>(t,n)=>!Array.isArray(n)||!n.length||n.includes(t[e]),c={alertStatuses:s("status"),alertNames:s("name"),alertContexts:s("context"),alertClasses:s("class"),alertRoles:s("recipient"),alertTypeComponents:(e,t)=>!Array.isArray(t)||!t.length||t.includes("".concat(e.type,"|").concat(e.component)),nodeIds:s("nodeId")},d=(0,a.K0)({key:"alertsFiltered",get:e=>{let{extraKey:t,roomId:n,omit:a,keepAll:l}=e;return e=>{let{get:s}=e;const d=s((0,r.GA)({key:n,extraKey:t,flavour:"arr"})),u=Object.keys(d).map((e=>[e,a&&a.split(":::").includes(e)?s((0,r.GA)({key:n,flavour:"arr",param:e})):d[e]]));if(!a||!a.includes("selectedNodeIds")){const e=s((0,o.QY)({key:n,extraKey:t,omit:a,keepAll:!1,merge:!1,scoped:!0}));null!==e&&void 0!==e&&e.length&&u.push(["nodeIds",e])}const m=s((0,i.Yo)(n)),g=(e=>t=>!e.some((e=>{let[n,a]=e;return!!c[n]&&!c[n](t,a)})))(u);return l?m.map((e=>g(e)?e:{...e,hidden:!0})):m.filter(g)}}}),u={alertStatuses:{critical:0,warning:0},alertClasses:{Errors:0,Latency:0,Utilization:0,Workload:0}},m={critical:0,warning:1},g={alertStatuses:(e,t)=>m[e.id]-m[t.id],default:(e,t)=>e.id.localeCompare(t.id,void 0,{sensitivity:"accent",ignorePunctuation:!0})},p=function(){let{extraKey:e,omit:t,keepAll:n=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=(0,l.ID)();return(0,a.vc)(d({extraKey:e,roomId:r,omit:t,keepAll:n}))}},81416:(e,t,n)=>{n.d(t,{Ay:()=>g,yD:()=>u,f_:()=>m});n(17333),n(41393),n(98992),n(54520),n(81454),n(62953);var a=n(96540),r=n(27467),l=n(61427);const o=function(e){let{after:t,before:n}=e,{offset:a,limit:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{offset:6e4,limit:Date.now()};const l=((e,t)=>{let{offset:n,limit:a}=t;const r=n/2;return e+r<=a?r:ae||t?o({after:parseInt(e),before:parseInt(t)},(e=>{const t=Date.now();return{limit:t,offset:t-e<6e4?3e4:15e3}})(t)):d,d=[null,null],u=()=>{const{after:e,before:t,highlight:n}=(0,r.rW)();if(!n.after||!n.before)return d;if(e<0){const t=Date.now();if(n.beforet)return d}else{if(n.beforet)return d}return[n.after,n.before]},m=(e,t,n)=>{const[o,d]=(0,a.useState)(),[m,g]=(0,a.useState)(!1),{sendLog:p}=(0,i.A)();let[h,f]=(()=>{const e=u();return(0,a.useMemo)((()=>c(...e)),[...e])})();const{after:y,before:v}=(0,r.rW)(),[x]=(0,l.er)({nodeIds:n,flavour:"rhs"},e,t);return[async()=>{const e=((e,t)=>{if(e<0){const n=Date.now();e=1e3*Math.floor(n/1e3+e),t=1e3*Math.floor(n/1e3)}return{after:e,before:t}})(y,v);g(!0);try{await x({flavour:"rhs",highlightAfter:h||e.after,highlightBefore:f||e.before,baselineAfter:h?e.after:null,baselineBefore:f?e.before:null,method:"anomaly-rate",aggregation:"avg",group:"average",nodeIds:n,options:["raw","null2zero"],groupBy:["context"]}),g(!1),p({action:s.o1.elementViewed,feature:"AnomalyRates-TOC",isSuccess:!0},!0)}catch(t){if(t.isCancel)return;d(t),g(!1),p({action:s.o1.elementViewed,feature:"AnomalyRates-TOC",isFailure:!0},!0)}},m,o]},g=(e,t,n)=>{const[o,s]=(()=>{const[e,t]=(0,a.useState)(0);return[e,(0,a.useCallback)((()=>t((e=>e+1))),[])]})(),[c,d]=(0,a.useState)(),[m,g]=u(),{after:p,before:h}=(0,r.rW)(),{contexts:f,metadata:y,getWeights:v,loading:x}=(0,l.Yy)({nodeIds:n,flavour:"anomaly"},e,t),{sendLog:b,isReady:I}=(0,i.A)();(0,a.useEffect)((()=>{if(m&&g&&g&&m)try{b({feature:"AnomalyAdvisor",isStart:!0}),v({highlightAfter:m,highlightBefore:g,baselineAfter:p,baselineBefore:h,method:"anomaly-rate",aggregation:"avg",group:"average",nodeIds:n,options:["null2zero","raw"],groupBy:["context","dimension"]})}catch(e){if(b({feature:"AnomalyAdvisor",isFailure:!0}),e.isCancel)return;d(e)}}),[n.length,g,m,o,I]);return[(0,a.useMemo)((()=>f.filter((e=>{var t;return((null===(t=y[e])||void 0===t?void 0:t.weight)||0)>0})).sort(((e,t)=>{const n=y[e].weight||0,a=y[t].weight||0;return n!=a?n>a?-1:1:0})).map((e=>{const t=e.split(",");return t.length>1?"".concat(t[1],"::").concat(t[0]):e}))),[f,y]),f,y,x,c,s]}},13271:(e,t,n)=>{n.d(t,{sK:()=>h,Um:()=>p,Ad:()=>m,rq:()=>f});n(17333),n(14905),n(8159),n(98992),n(54520),n(8872),n(37550),n(62953);var a=n(96540),r=n(47444),l=n(47767),o=n(23931),i=n(47762),s=n(69765),c=n(27467);const d=(0,r.Iz)({key:"chartsFilterValue",default:{filteredChartsIds:[],filteredChartsCount:0,chartsCount:0}}),u=()=>{const e=(0,s.ID)(),t=(0,i.nl)();return(0,a.useMemo)((()=>({roomId:e,nodeId:t})),[t,e])},m=()=>{const e=u();return(0,r.vc)(d(e))},g=()=>{const e=(0,s.ID)(),{nodeID:t}=(0,l.g)();return[e,t||"overview"]},p=()=>{const[e,t]=g();return(0,c.rW)("tocSearch",{key:e,extraKey:t,defaultValue:"",flavour:"val"})},h=()=>{const[e,t]=g();return(0,c.N9)("tocSearch",{key:e,extraKey:t,defaultValue:"",flavour:"val"})},f=function(e,t,n){let{shouldHide:l=(()=>!1),force:i=!1,cacheKey:s}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const m=(0,c.rW)("after"),g=(0,c.rW)("before"),h=(()=>{const e=p();return"string"!==typeof e?"":e.trim().toLowerCase()})(),f=(0,o.w1)(n),[y,v,x]=(0,a.useMemo)((()=>{let n=0,a=0;const r=Date.now()/1e3,o=h.split(/[\s,]+/).filter((e=>!!e));return[e.reduce(((e,t)=>{if(!e[t])return e;const{firstEntry:s,lastEntry:c,live:d}=e[t],u=!i&&e[t].visible||(m<0?d||r+m1e3*c||g<1e3*s)),p=!u||!Object.keys(e[t]).some((n=>{const a=e[t][n];return null===o||void 0===o||!o.length||o.some((e=>"string"===typeof a&&a.includes(e)))})),h=!u||l(e[t]);return e[t]={...e[t],filteredOut:p,visible:u,hidden:h},p||!u||h||(n+=1),h||(a+=1),e}),{...t}),a,n]}),[h,e,m,g,i,s]),b=(()=>{const e=u();return(0,r.lZ)(d(e))})();return(0,a.useEffect)((()=>{f(y),b({filteredChartsCount:x,chartsCount:v})}),[y,v,x,n]),x}},82543:(e,t,n)=>{n.d(t,{A:()=>p,g:()=>g});n(62953);var a=n(96540),r=n(83199),l=n(29217),o=n(47762),i=n(11128),s=n(69765),c=n(3914),d=n(81416),u=n(94944),m=n(50876);const g=()=>{const e=(0,o.nl)(),t=(0,i.w7)();return e?[e]:t},p=e=>t=>{const n=(0,c.vt)(),o=(0,s.ID)(),i=g(),{pause:p}=(0,u.A)(),{sendButtonClickedLog:h}=(0,m.A)(),[f,y]=(0,d.f_)(n,o,i);return a.createElement(r.Flex,{alignItems:"center",justifyContent:"between",width:"100%"},a.createElement(l.A,{content:"Overlay the maximum chart anomaly rate on each menu section.",align:"bottom",activateOn:"hover",isBasic:!0},a.createElement(r.Button,{tiny:!0,label:y?null:"Anomaly%",isLoading:y,flavour:"hollow",onClick:()=>{p(),f(),h({feature:"AnomalyRates-TOC",label:"Anomaly%",isStart:!0},!0)},textTransform:"uppercase","data-track":"menu-anomaly-rates::click-ar-button"})),a.createElement(r.Flex,{column:!0},a.createElement(e,t)))}},18713:(e,t,n)=>{n.d(t,{C:()=>u,Ny:()=>c,Ud:()=>d,W7:()=>m});n(62953);var a=n(96540),r=n(86856),l=n(55483);const o=(0,r.q6)(""),i=(0,r.q6)(""),s=(0,r.q6)(""),c=e=>{let{menuGroupId:t="",subMenuId:n="",children:r}=e;const[l,c]=(0,a.useState)(t),[d,u]=(0,a.useState)(n),m=(0,a.useMemo)((()=>({setMenuGroupId:c,setSubMenuId:u})),[]);return a.createElement(o.Provider,{value:m},a.createElement(i.Provider,{value:l},a.createElement(s.Provider,{value:d},r)))},d=()=>(0,l.A)(o),u=e=>{return t=t=>e===t,(0,l.A)(i,t);var t},m=e=>(0,l.A)(s,e)},31438:(e,t,n)=>{n.d(t,{BK:()=>E,NF:()=>v,Tg:()=>b,aA:()=>f,dd:()=>y,i8:()=>u,qR:()=>x,uy:()=>I,vN:()=>p,yO:()=>C});var a=n(58168),r=(n(41393),n(81454),n(96540)),l=n(83488),o=n.n(l),i=n(86856),s=n(55483);const c=r.createContext({}),d=(0,i.q6)({}),u=(0,i.q6)({}),m=(0,i.q6)([]),g=(0,i.q6)({}),p=e=>{let{container:t,menuItemAttributesById:n,getObject:a,allElements:l,stickyIds:o,children:i}=e;return r.createElement(c.Provider,{value:t},r.createElement(d.Provider,{value:a},r.createElement(u.Provider,{value:n},r.createElement(m.Provider,{value:l},r.createElement(g.Provider,{value:o},i)))))},h={},f=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o();return(0,s.A)(u,(n=>t(n[e]||h)))},y=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o();return(0,s.A)(u,(n=>Array.isArray(e)?e.map((e=>t(n[e]||h,e))):[]))},v=()=>r.useContext(c),x=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o();return(0,s.A)(m,e)},b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o();return(0,s.A)(g,e)},I=function(e){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:o())(C()(e))},E=e=>(0,r.forwardRef)(((t,n)=>{let{id:l,...o}=t;const i=f(l),{chartId:s}=i,c=I(s);return r.createElement(e,(0,a.A)({ref:n,id:l,chart:c,menuChartAttributes:i},o))})),C=()=>(0,s.A)(d)},8320:(e,t,n)=>{n.d(t,{Cs:()=>o,Gr:()=>s,UH:()=>i});n(62953);var a=n(96540);const r=(0,a.createContext)(),l=(0,a.createContext)(),o=e=>{let{children:t}=e;const[n,o]=(0,a.useState)();return a.createElement(r.Provider,{value:n},a.createElement(l.Provider,{value:o},t))},i=()=>(0,a.useContext)(r),s=()=>(0,a.useContext)(l)},55309:(e,t,n)=>{n.d(t,{$V:()=>f,Ee:()=>m,HB:()=>g,Ss:()=>h,ox:()=>c,re:()=>u,sF:()=>d});var a=n(58168),r=n(96540),l=n(83488),o=n.n(l),i=n(86856),s=n(55483);const c=(0,i.q6)({}),d=e=>{let{menuGroupById:t,children:n}=e;return r.createElement(c.Provider,{value:t},n)},u=e=>(0,s.A)(c,e),m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o();return u((n=>t((null===n||void 0===n?void 0:n[e])||{})))},g=(e,t)=>n=>{let{id:l,...o}=n;const i=m(l,t);return r.createElement(e,(0,a.A)({id:l},i,o))},p=(0,i.q6)([]),h=e=>{let{ids:t,children:n}=e;return r.createElement(p.Provider,{value:t},n)},f=e=>t=>{const n=(0,s.A)(p,l);var l;return r.createElement(e,(0,a.A)({menuGroupIds:n},t))}},59090:(e,t,n)=>{n.d(t,{A:()=>g,Ie:()=>u,jR:()=>m,xw:()=>c,zK:()=>d});var a=n(58168),r=n(96540),l=n(83488),o=n.n(l),i=n(86856),s=n(55483);const c=(0,i.q6)({}),d=e=>{let{subMenuById:t,children:n}=e;return r.createElement(c.Provider,{value:t},n)},u=e=>(0,s.A)(c,e),m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o();return u((n=>t(null===n||void 0===n?void 0:n[e])))},g=(e,t)=>n=>{let{id:l,...o}=n;const i=m(l,t);return r.createElement(e,(0,a.A)({id:l},i,o))}},79566:(e,t,n)=>{n.d(t,{A:()=>f});var a=n(96540),r=n(31438),l=n(8320),o=n(55309),i=n(59090),s=n(18713),c=n(47444),d=n(47762),u=n(69765);const m=(0,c.Iz)({key:"activeMenuGroupIdValue",default:""}),g=()=>{const e=(()=>{const e=(0,u.ID)(),t=(0,d.nl)();return(0,a.useMemo)((()=>({roomId:e,nodeId:t})),[t,e])})();return(0,c.lZ)(m(e))},p=e=>(t,n)=>{const a=t.querySelector(n);a&&e(a)},h="scrollIntoViewIfNeeded"in document.body?p((e=>e.scrollIntoViewIfNeeded())):p((e=>e.scrollIntoView())),f=e=>{let{onMenuGroupClick:t,onSubMenuClick:n,onChartNameChange:c,initialChartName:d,linkToGo:u,contextToGo:m,loaded:p=!0}=e;const f=(0,r.NF)(),y=(0,l.UH)(),v=(0,o.re)(),x=(0,i.Ie)(),{setMenuGroupId:b,setSubMenuId:I}=(0,s.Ud)(),E=g(),C=(0,a.useRef)(d);(0,a.useLayoutEffect)((()=>{p&&y&&u&&!C.current&&y.goToLink(u)}),[y,u]),(0,a.useLayoutEffect)((()=>{p&&y&&m&&!C.current&&y.goToElement(m)}),[y,m]);const A=(0,a.useCallback)((e=>{b(e),E(e),h(f,'[data-sidebar="true"] [data-sidebar-menugroupid="'.concat(e,'"]')),e&&v[e]&&c(v[e].link)}),[v]),k=(0,a.useCallback)((e=>{I(e),e in x&&(b(x[e].menuGroupId),h(f,'[data-sidebar="true"] [data-sidebar-submenuid="'.concat(e,'"]')),c(x[e].link))}),[x]);(0,a.useLayoutEffect)((()=>{p&&C.current&&y&&y.goToLink(d)&&(C.current=null)}),[y]);return{setActiveMenuGroupId:A,setActiveSubMenuId:k,onMenuGroupClick:(0,a.useCallback)(((e,n)=>{n&&n.preventDefault(),y&&(y.goToElement(e),t(e))}),[y]),onSubMenuClick:(0,a.useCallback)(((e,t,a)=>{a&&a.preventDefault(),y&&(y.goToElement(t),n(e,t))}),[y])}}},11988:(e,t,n)=>{n.d(t,{l3:()=>o,Xt:()=>c,YS:()=>d});n(14905),n(98992),n(8872),n(62953);var a=n(47444);const r=(0,a.eU)({key:"alertIdsByNodeId",default:{}}),l=[],o=(0,a.gD)({key:"nodesAlertIdsState",get:e=>{let{get:t}=e;return t(r)},set:(e,t)=>{let{set:n}=e;return n(r,t)}}),i=(0,a.K0)({key:"nodeAlertIdsState",get:e=>t=>{let{get:n}=t;return n(r)[e]||l},set:e=>(t,n)=>{let{set:a}=t;a(r,(t=>({...t,[e]:[...n].sort(((e,t)=>e.id-t.id))})))}}),s=(0,a.K0)({key:"nodesAlertIdsState",get:e=>t=>{let{get:n}=t;const a=n(r);return(e=e.length?e:Object.keys(a)).reduce(((e,t)=>[...e,...a[t]||[]]),[])},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),c=e=>(0,a.vc)(i(e)),d=e=>(0,a.vc)(s(e))},28146:(e,t,n)=>{n.d(t,{A:()=>u});var a=n(58168),r=n(96540),l=n(29217),o=n(8711),i=n(83199);const s=(0,o.default)(i.Flex).attrs((()=>({width:{max:"315px"},overflow:"hidden"}))).withConfig({displayName:"styled__Container",componentId:"sc-t6teia-0"})([""]),c=e=>{let{children:t,...n}=e;return r.createElement(s,(0,a.A)({"data-testid":"nodeInfoContent"},n),t)};var d=n(82432);const u=e=>{let{align:t="bottom",badge:n,children:o,connectivityState:i,content:s,isBasic:u=!0,status:m,nodeName:g,nodeType:p,...h}=e;return r.createElement(l.A,(0,a.A)({align:t,content:()=>r.createElement(c,{"data-testid":"nodeInfoTooltip-tooltipContent"},s||(0,d.Bb)(n,i,m,g,p)),"data-testid":"nodeInfoTooltip",isBasic:u},h),o)}},60072:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(96540),r=n(12352),l=n(50065),o=n(82432);const i=e=>{let{node:t}=e;const{_cloud_instance_region:n,_cloud_instance_type:i,_cloud_provider_type:s}=t.labels||{};return(0,o.Po)(n)&&(0,o.Po)(i)&&(0,o.Po)(s)?null:a.createElement(l.A,{name:"Cloud Instance Info"},a.createElement(r.A,{iconName:"ipNetworking",name:"Cloud provider",size:"small",testId:"sidebar-nodeInfoContent-cloudProvider"},(0,o.ws)(s)),a.createElement(r.A,{iconName:"universe",name:"Cloud region",size:"small",testId:"sidebar-nodeInfoContent-cloudRegion"},(0,o.ws)(n)),a.createElement(r.A,{iconName:"disk",name:"Instance type",size:"small",testId:"sidebar-nodeInfoContent-instanceType"},(0,o.ws)(i)))}},25825:(e,t,n)=>{n.d(t,{A:()=>c});var a=n(96540),r=n(50065),l=n(12352),o=n(82432),i=n(55905),s=n(33931);const c=e=>{let{node:t}=e;const n=(0,o.GM)(t.state);return a.createElement(r.A,{link:"https://learn.netdata.cloud/docs/agent/aclk",name:"Connection"},a.createElement(l.A,{size:"small",name:"Status",iconName:"integrations",testId:"sidebar-connectionGroup-connectionStatus"},a.createElement(s.A,{rawState:n})),a.createElement(l.A,{size:"small",name:"Netdata Agent",iconName:"netdata",testId:"sidebar-connectionGroup-agentVersion"},t.version),t.updateSeverity&&a.createElement(l.A,{size:"small",name:"Update Status",iconName:"update",testId:"sidebar-connectionGroup-agentVersion"},a.createElement(i.A,{name:t.name,os:t.os.id,container:t.hw.container,warningLevel:t.updateSeverity,labels:t.labels||{},version:t.version,text:t.updateSeverity})))}},17240:(e,t,n)=>{n.d(t,{A:()=>s});var a=n(96540),r=n(50065),l=n(83199),o=n(18682);const i=e=>{let{node:t}=e;return a.createElement(r.A,{name:"Files"},a.createElement(l.Flex,{gap:1,padding:[0,1],alignItems:"center"},a.createElement(l.Box,{sx:{fontWeight:"500",letterSpacing:"1px"},as:l.Text,color:"textLite"},"{;}"),a.createElement(l.TextSmall,null,"View node info in"),a.createElement(l.Flex,{cursor:"pointer",gap:1,onClick:(0,o.C)(JSON.stringify(t),{text:"JSON copied to clipboard"})},a.createElement(l.TextSmall,{color:"primary"},"json"),a.createElement(l.Icon,{color:"primary",size:"small",name:"copy"}))))},s=(0,a.memo)(i)},58010:(e,t,n)=>{n.d(t,{A:()=>o});n(17333),n(41393),n(98992),n(54520),n(81454);var a=n(96540),r=n(50065),l=n(12352);const o=e=>{let{node:{labels:t={}}={}}=e;const n=Object.keys(t).filter((e=>!e.startsWith("_")));return a.createElement(r.A,{link:"https://learn.netdata.cloud/guides/using-host-labels",name:"Host labels",isEnabled:n.length>0,noDataLabel:"No Data"},n.length>0&&n.map((e=>a.createElement(l.A,{size:"small",key:e,name:e,testId:"sidebar-hostLabelsGroup-label"},t[e]))))}},80618:(e,t,n)=>{n.d(t,{A:()=>c});var a=n(96540),r=n(83199),l=n(50065),o=n(12352),i=n(82432);const s={},c=e=>{let{node:t}=e;const n=t.hw||s,c=t.os||s,d=(0,i.Pg)(n.container,n.virtualization);return a.createElement(l.A,{name:"System info"},a.createElement(o.A,{size:"small",name:"Type",iconName:"virtualization",testId:"sidebar-nodeInfoContent-type"},a.createElement(r.Pill,{hollow:!0,icon:d.icon,flavour:"neutral"},d.label)),a.createElement(o.A,{size:"small",name:"O/S version",iconName:"database",testId:"sidebar-nodeInfoContent-osVersions"},(0,i.Ud)(c.nm,c.v,", ")),a.createElement(o.A,{iconName:"viewSingleNode",name:"Architecture",size:"small",testId:"sidebar-nodeInfoContent-architecture"},(0,i.ws)(n.architecture)),!!c.kernel&&a.createElement(o.A,{size:"small",name:"Kernel",iconName:"metrics_explorer",testId:"sidebar-nodeInfoContent-kernel"},(0,i.Ud)(c.kernel.nm,c.kernel.v,", ")),a.createElement(o.A,{size:"small",name:"CPU",iconName:"cpu",testId:"sidebar-nodeInfoContent-cpu"},(0,i.O)(n.cpuFrequency)," (",(0,i.ws)(n.cpus,1===n.cpus?"Core":"Cores"),")"),a.createElement(o.A,{size:"small",name:"Memory",iconName:"ram",testId:"sidebar-nodeInfoContent-ram"},(0,i.ws)((0,i.RI)(n.memory),"RAM")),a.createElement(o.A,{size:"small",name:"Hard disk size",iconName:"disk",testId:"sidebar-nodeInfoContent-disk"},(0,i.RI)(n.diskSpace)))}},37019:(e,t,n)=>{n.d(t,{A:()=>d});var a=n(58168),r=n(96540),l=n(83199),o=n(64118),i=n(11988),s=n(82432),c=n(28146);const d=e=>{let{id:t,isLive:n,name:d,onClick:u,...m}=e;const g=(0,i.Xt)(t),{critical:p,warning:h}=(0,o.AO)(g),f={...(null===m||void 0===m?void 0:m["data-testid"])&&{dataTestId:null===m||void 0===m?void 0:m["data-testid"]},isLive:n},y=(0,s.t3)({count:p,type:"critical",...f}),v=(0,s.t3)({count:h,type:"warning",...f});return r.createElement(c.A,(0,a.A)({badge:"alerts","data-testid":"node-alerts",nodeName:d},m),r.createElement(l.AlertMasterCard,{onClick:y.text||v.text?u:null,pillLeft:y,pillRight:v,size:"small"}))}},88494:(e,t,n)=>{n.d(t,{A:()=>s});var a=n(58168),r=n(96540),l=n(83199),o=n(82432),i=n(28146);const s=e=>{let{children:t,badge:n,enabled:s,name:c,onClick:d,...u}=e;const m=(0,o.lw)(s);return r.createElement(i.A,(0,a.A)({badge:n,"data-testid":"node-".concat(n,"-status"),status:m.status,nodeName:c},u),r.createElement(l.Flex,{alignItems:"center",gap:1,onClick:s?d:void 0,cursor:s&&d?"pointer":"default","data-ga":"nodes-list::click-capability::".concat(m.label)},t,r.createElement(l.Pill,{flavour:m.flavour,size:"small"},m.label)))}},61427:(e,t,n)=>{n.d(t,{UG:()=>I,Ip:()=>b,er:()=>v,Yy:()=>E,G9:()=>x});n(9920),n(14905),n(98992),n(3949),n(8872),n(62953);var a=n(96540),r=n(47444),l=n(27467),o=n(9224);const i={byContext:{},loaded:!1,loading:!1,method:null,options:null,group:"average",totalDimensionsCount:0},s=(0,r.Iz)({key:"weights",default:i}),c=(0,r.K0)({key:"weightsState",get:e=>t=>{let{get:n}=t;return n(s(e))},set:e=>(t,n)=>{let{set:a}=t;return a(s(e),n)},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),d={ci:"context",ni:"node",ii:"instance",di:"dimension"},u=(e,t)=>n=>({[d[e.name]]:t[e.dictionary][n]}),m={ni:u,ii:(e,t)=>(n,a,r)=>({[d[e.name]]:t[e.dictionary][n]?"".concat(t[e.dictionary][n],"@").concat(t.nodes[a[r.ni]]):null}),ci:u,di:u,row_type:e=>t=>({type:e.value[t]}),weight:()=>e=>({weight:e}),timeframe:e=>t=>({highlight:e.labels.reduce(((e,n,a)=>({...e,[n]:t[a]})),{})}),"baseline timeframe":e=>t=>({baseline:e.labels.reduce(((e,n,a)=>({...e,[n]:t[a]})),{})})},g={contexts:"ci",nodes:"ni",instances:"ii",dimensions:"di"},p={contexts:"id",nodes:"nodeId",instances:"id",dimensions:"id"},h=(e,t)=>null===e||e>t?t:e,f=(e,t)=>null===e||e{let{flavour:t,data:n,aggregation:a,options:r}=e,l={},o=0;if(n.v_schema){var i;const e=(null===(i=n.v_schema)||void 0===i?void 0:i.items)||[];l=n.result.reduce(((t,n)=>{let{id:r,v:l}=n;return t[r]=e.reduce(((e,t,n)=>{let{name:r,labels:o}=t;const i=o.indexOf(a);return e[r]=l[n][i],e}),{}),t}),{})}else{const e=(e=>{const t=Object.keys(e.dictionaries).reduce(((t,n)=>{t[n]||(t[n]={});const a=p[n];return e.dictionaries[n].forEach((e=>t[n][e[g[n]]]="nodeId"===a?e.nd||e.mg:e[a])),t}),{}),n={},a=e.schema.items.reduce(((e,a,r)=>{const l=(m[a.name]||m.default)(a,t);return e.push(l),n[a.name]=r,e}),[]);return e=>e.reduce(((t,r,l)=>({...t,...a[l](r,e,n)})),{})})(n);l=n.result.reduce(((t,n)=>{const{dimension:a,node:l,context:i,instance:s,type:c,weight:d,highlight:u,baseline:m}=e(n);if("node"===c)return t;const g=(p=t,y=i,function(e,t,n,a,r){let l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:h;n&&(n&&"undefined"===typeof p[y][t][n]&&(p[y][t][n]={}),"undefined"===typeof p[y][t][n][e]&&(p[y][t][n][e]=null),a&&(p[y][t][n][e]=l(p[y][t][n][e],r)))});var p,y;t[i]||(t[i]={dimensions:{},instances:{},nodes:{},weight:null});const v=!!r&&r.includes("anomaly-bit");g("weight","dimensions",a,"dimension"===c,d,v?f:h),g("weight","instances",s,"instance"===c,d,v?f:h),g("weight","nodes",l,"node"===c,d,v?f:h);const x=u?100*u.anomaly_count/u.count:0;g("arHighlight","dimensions",a,"dimension"===c,x,f),g("arHighlight","instances",s,"instance"===c,x,f),g("arHighlight","nodes",l,"node"===c,x,f);const b=m?100*(m.anomaly_count-u.anomaly_count)/(m.count-u.count)===0?1:m.count-u.count:0;g("arBaseline","dimensions",a,"dimension"===c,b,f),g("arBaseline","instances",s,"instance"===c,b,f),g("arBaseline","nodes",l,"node"===c,b,f);const I=b?x/b:0;return g("score","dimensions",a,"dimension"===c,I,f),g("score","instances",s,"instance"===c,I,f),g("score","nodes",l,"node"===c,I,f),"context"===c?t[i].weight=null===t[i].weight||t[i].weight>d?d:t[i].weight:"dimension"===c&&(o+=1),t}),{})}return{byContext:l,totalDimensionsCount:o}},v=(e,t,n)=>{const l=(0,a.useRef)();return[(0,r.Zs)((a=>{let{set:r}=a;return a=>{let{flavour:s,highlightAfter:d,highlightBefore:u,baselineAfter:m,baselineBefore:g,method:p,options:h,group:f,context:v,nodeIds:x,aggregation:b,groupBy:I}=a;return r(c(e),{...i,loading:!0}),l.current&&l.current.cancel(),l.current=(0,o.e0)(t,n,{highlightAfter:d,highlightBefore:u,baselineAfter:m,baselineBefore:g,method:p,options:h,group:f,context:v,nodeIds:x,aggregation:b,groupBy:I}),l.current.then((t=>{let{data:n}=t;const{byContext:a,totalDimensionsCount:l}=y({flavour:s,data:n,aggregation:b,options:h});r(c(e),{loading:!1,loaded:!0,byContext:a,options:h,totalDimensionsCount:l,method:p,group:f,groupBy:I,error:null})})).catch((t=>{var n;if(!t.isCancel)throw r(c(e),{...i,error:(null===t||void 0===t||null===(n=t.response)||void 0===n?void 0:n.data)||t}),t}))}}),[e]),(0,r.Zs)((t=>{let{reset:n}=t;return()=>{l.current&&l.current.cancel(),n(c(e))}}),[e])]},x=e=>(0,r.vc)(c(e)),b=e=>(0,r.E0)(c(e)),I=.01,E=(e,t,n)=>{const[r,o]=v(e,t,n),{loaded:i,loading:s,byContext:c,totalDimensionsCount:d,options:u,groupBy:m}=x(e),g=(()=>{const e=(0,l.rW)("threshold");return e?Number.parseFloat(e):I})(),[p,h,f]=(0,a.useMemo)((()=>{let e=0;const t=null===u||void 0===u?void 0:u.includes("raw"),n=(m||[]).length?c:Object.keys(c).reduce(((n,a)=>{const r=Object.keys(c[a].dimensions).reduce(((e,n)=>(!t&&c[a].dimensions[n].weight>g||(e[n]=c[a].dimensions[n]),e)),{}),l=Object.keys(r).length;return e+=l,l?(n[a]={...c[a],dimensions:r},n):n}),{});return[n,Object.keys(n),e]}),[i,g]);return{threshold:g,metadata:p,contexts:h,dimensionsCount:f,totalDimensionsCount:d,loaded:i,loading:s,getWeights:r,resetWeights:o}}},23931:(e,t,n)=>{n.d(t,{Zr:()=>c,b0:()=>b,YP:()=>x,Uo:()=>y,GR:()=>A,Bu:()=>k,yO:()=>C,bD:()=>w,OL:()=>h,aZ:()=>f,rx:()=>m,bo:()=>u,_0:()=>d,R7:()=>I,jI:()=>g,w1:()=>E,DQ:()=>p});n(14905),n(8159),n(98992),n(8872),n(37550),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215),n(62953);var a=n(96540),r=n(47444);const l={loaded:!1,fullyLoaded:!1,loading:!1,id:"",name:"",chartType:"",context:"",family:"",firstEntry:0,lastEntry:0,module:"",plugin:"",priority:0,updateEvery:0,visible:!1,filteredOut:!1,hidden:!1,domain:"room"};var o=n(69765),i=n(65570);const s={ids:(0,r.Iz)({key:"roomChartIds",default:[]}),updatedAt:(0,r.Iz)({key:"roomChartsUpdatedAt",default:""}),loaded:(0,r.Iz)({key:"roomChartsLoaded",default:!1}),error:(0,r.Iz)({key:"roomChartsError",default:null}),versions:(0,r.Iz)({key:"versions",default:{}}),fetchedFor:(0,r.Iz)({key:"fetchedFor",default:[]})},c=(0,r.K0)({key:"roomChartState",get:e=>{let{id:t,key:n}=e;return e=>{let{get:a}=e;return a(s[n](t))}},set:e=>{let{id:t,key:n}=e;return(e,a)=>{let{set:r}=e;r(s[n](t),a)}}}),d=e=>!!(0,r.vc)(c({id:e,key:"loaded"})),u=e=>(0,r.vc)(c({id:e,key:"fetchedFor"})),m=e=>(0,r.vc)(c({id:e,key:"error"})),g=e=>(0,r.vc)(c({id:e,key:"versions"})),p=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(0,r.lZ)(c({id:e,key:"versions"}));return(0,a.useCallback)((e=>n((n=>(e="function"===typeof e?e(n):e,t?e:(0,i.Ay)(n,e,{omit:["contextsSoftHash"]})?n:n.contextsHardHash&&"invalidating"!==n.contextsHardHash?e:n)))),[])},h=e=>(0,r.vc)(c({id:e,key:"ids"})),f=(e,t)=>(0,r.vc)(c({id:e,key:t})),y=(0,r.K0)({key:"roomChartsState/ids",get:e=>{let{roomId:t}=e;return e=>{let{get:n}=e;return n(s.ids(t))}},set:e=>{let{roomId:t,merge:n=!0}=e;return(e,a)=>{let{set:r}=e;r(s.ids(t),(e=>{const t=n?[...new Set([...a,...e])]:a;return n&&(0,i.Ay)(t,e)?e:t}))}}}),v=(0,r.Iz)({key:"roomsChartBatchState",default:{}}),x=(0,r.K0)({key:"roomChartsState",get:e=>{let{id:t,key:n}=e;return e=>{let{get:a}=e;const r=a(v(t))||l;return n?r[n]:r}},set:e=>{let{id:t,key:n}=e;return(e,a)=>{let{set:r}=e;"function"!==typeof a?Object.keys(a).length<1||r(v(t),(e=>({...e,[n]:a}))):r(v(t),(e=>({...e,[n]:a(e[n])})))}}}),b=(0,r.K0)({key:"roomChartsState/initialize",set:function(){let{id:e,merge:t=!0,nodeIds:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(a,r)=>{let{set:o}=a,{values:s,merge:d}=r;o(c({id:e,key:"fetchedFor"}),n),o(v(e),(e=>{const n=Object.keys(s).reduce(((n,a)=>{const{id:r}=s[a];return n[r]={...l,...(t||d)&&e[r],...s[a],loaded:!0},n}),t?{...e}:{});return t&&(0,i.Ay)(n,e,{omit:["lastEntry","firstEntry","family"]})?e:n}))}}}),I=(e,t)=>(0,r.vc)(x({id:e,key:t})),E=e=>(0,r.Zs)((t=>{let{set:n}=t;return t=>n(v(e),t)}),[]),C=(e,t)=>(0,r.Zs)((n=>{let{snapshot:a}=n;return n=>({...a.getLoadable(x({id:e,key:n})).contents,...(null===t||void 0===t?void 0:t[n])||{}})}),[e,t]),A=e=>{var t,n,a;const l=(0,o.ID)(),i=(0,r.vc)(v(l));return(null===(t=i[e])||void 0===t?void 0:t.visible)&&!(null!==(n=i[e])&&void 0!==n&&n.filteredOut)&&!(null!==(a=i[e])&&void 0!==a&&a.hidden)},k=e=>{const t=(0,o.ID)(),n=(0,r.vc)(v(t));return e.some((e=>{var t,a,r;return(null===(t=n[e])||void 0===t?void 0:t.visible)&&!(null!==(a=n[e])&&void 0!==a&&a.filteredOut)&&!(null!==(r=n[e])&&void 0!==r&&r.hidden)}))},w=()=>{const e=(0,o.ID)(),t=(0,r.vc)(v(e));return(0,a.useCallback)((e=>e.some((e=>{var n,a,r;return(null===(n=t[e])||void 0===n?void 0:n.visible)&&!(null!==(a=t[e])&&void 0!==a&&a.filteredOut)&&!(null!==(r=t[e])&&void 0!==r&&r.hidden)}))),[e,t])},S=(0,r.Iz)({key:"instancesByContextAtom",default:{}}),P=(0,r.K0)({key:"roomChartInstancesState",get:e=>{let{id:t,context:n}=e;return e=>{let{get:a}=e;const r=a(S(t));return n?r[n]:r}},set:e=>{let{id:t,context:n}=e;return(e,a)=>{let{set:r}=e;"function"!==typeof a?Object.keys(a).length<1||r(S(t),(e=>({...e,[n]:a}))):r(S(t),(e=>({...e,[n]:a(e[n])})))}}});(0,r.K0)({key:"roomChartInstances/initialize",set:e=>(t,n)=>{let{set:a}=t;a(S(e),(e=>({...e,...n})))}}),(0,r.K0)({key:"roomChartsInstancesState",get:e=>{let{id:t,contexts:n=[]}=e;return e=>{let{get:a}=e;const r=a(P({id:t}));return n.reduce(((e,t)=>(r[t]&&(e[t]=r[t]),e)),{})}}})},20687:(e,t,n)=>{n.d(t,{A:()=>E});n(41393),n(81454),n(62953);var a=n(96540),r=n(83199),l=n(47762),o=n(11988),i=n(64118),s=n(27467),c=n(29217),d=n(4659),u=n(8711),m=n(47767),g=n(45588),p=n(21290),h=n(45976);const f=(0,u.default)(r.Flex).withConfig({displayName:"alert__AlertContainer",componentId:"sc-ndxwzg-0"})(["transition:opacity 0.3s ease-in-out;&:hover{& ","{opacity:0.7;}}"],r.Text),y={overview:"overview",k8s:"kubernetes",singleNode:"nodes/:nodeId"},v=e=>{let{alert:t,onAlertClick:n,flavour:o}=e;const{value:i,instance:s,lastStatusChange:u,id:v,status:x,units:b,name:I,summary:E,nodeId:C}=t,A=(0,l.xY)(C,"name"),{localeTimeString:k,localeDateString:w}=(0,p.$j)(),S=(0,a.useMemo)((()=>{const e=new Date(1e3*u);return isNaN(e.valueOf())?"":"".concat(w(e,{long:!1})," ").concat(k(e,{secs:!1}))}),[u,k,w]),P=(0,a.useCallback)((()=>{n({alertId:v})}),[]),N=(0,m.g)(),F=(0,m.Zp)();return a.createElement(f,{column:!0,padding:[4,0],gap:1,border:{color:"border",side:"bottom"},"data-testid":"alertItem","data-test-name":"alertItem-".concat(I)},a.createElement(r.Flex,{column:!0},a.createElement(c.A,{plain:!0,content:E,isBasic:!0},a.createElement(r.Text,{strong:!0,"data-testid":"alertItem-alertName"},I)),a.createElement(r.TextSmall,{wordBreak:"break-all","data-testid":"alertItem-chartId"},s," @ ",A)),a.createElement(r.Flex,{alignItems:"center",justifyContent:"between"},a.createElement(h.A,{loaded:!0,status:x,units:b,value:i,flex:!1,"data-testid":"alertItem-alertValuePill"}),a.createElement(r.TextMicro,{color:"textLite","data-testid":"alertItem-alertDate"},S)),a.createElement(r.Flex,{gap:1},!!y[o]&&a.createElement(a.Fragment,null,a.createElement(d.A,{Component:r.TextMicro,onClick:()=>{F((0,g.tW)("/spaces/:spaceSlug/rooms/:roomSlug/".concat(y[o]),N),{replace:!0,state:{alertId:v}})}},"Plot on chart"),a.createElement(r.TextMicro,{color:"textLite"},"\u2022")),a.createElement(d.A,{Component:r.TextMicro,onClick:P},"Show info")))};var x=n(92136);const b=(e,t)=>e.status===t.status?0:"critical"===e.status?-1:1,I={nodesView:!0},E=e=>{let{nodeIds:t,flavour:n}=e;const[u,m]=(0,s.r$)("sidebarNodeId",{flavour:"val",extraKey:n}),g=(0,l.xY)(u),p=(0,o.YS)(u?[u]:t),h=(0,i.Gq)(p),f=(0,a.useMemo)((()=>[...h].sort(b)),[h]),[y,E,,C]=(0,x.A)(),A=h.length?"(".concat(h.length,")"):"";return a.createElement(r.Flex,{width:"100%",column:!0,overflow:"hidden"},a.createElement(r.Flex,{column:!0,gap:5,padding:[2]},a.createElement(r.Flex,{column:!0},a.createElement(c.A,{content:"Currently Active alerts",align:"bottom"},a.createElement(r.TextBig,{strong:!0,"data-testid":"nodeAlertsView-activeAlerts-header"},"Alerts ",A)),!!I[n]&&a.createElement(r.TextMicro,null,"Showing ",g.id?a.createElement(r.TextMicro,{strong:!0},g.name):"room"," alerts"," ",!!g.id&&a.createElement(a.Fragment,null," ","-"," ",a.createElement(d.A,{Component:r.TextMicro,onClick:()=>m("")},"Show all")))),!h.length&&a.createElement(r.Flex,{column:!0,gap:8,padding:[0,5],"data-testid":"nodesAlertsView-blankSlate",alignItems:"center"},a.createElement(r.Icon,{name:"checkmark",width:"90px",height:"90px"}),a.createElement(r.H4,{textAlign:"center"},1!==t.length?"No":"This node has no"," active alerts, you are all good!"))),a.createElement(r.Flex,{column:!0,overflow:{vertical:"auto"},padding:[0,2]},f.map((e=>a.createElement(v,{key:e.id,alert:e,onAlertClick:E,flavour:n})))),y&&C)}},94177:(e,t,n)=>{n.d(t,{A:()=>i});var a=n(58168),r=n(96540),l=n(42828),o=n(59846);const i=e=>{let{baseKey:t,extraKey:n,testIdPrefix:i,groupProps:s,...c}=e;return r.createElement(o.A,(0,a.A)({title:"Nodes",testIdPrefix:i,baseKey:t,extraKey:n,param:"selectedIds",defaultIsOpen:!1,help:"Select nodes individually. By selecting nodes in this filter, you bypass the rest of the filters."},s),r.createElement(l.Ay,(0,a.A)({baseKey:t,extraKey:n,itemProps:{padding:[1,1,1,.5]},searchMargin:[0,0,1],height:{max:"300px"},testIdPrefix:i},c)))}},99292:(e,t,n)=>{n.d(t,{kO:()=>Xe,Ay:()=>lt});var a=n(58168),r=(n(17333),n(41393),n(98992),n(54520),n(81454),n(62953),n(96540)),l=n(8711),o=n(83199),i=n(27467),s=n(81638),c=n(30577),d=n(93615),u=n(64473),m=n(47762),g=n(12352),p=n(60072),h=n(80618),f=n(25825),y=n(50065);const v=[{name:"MySQL",title:"MySQL",iconName:"serviceMySQL",logoFilename:"mysql.svg",category:"Databases",collectors:["python.d.plugin:mysql","go.d.plugin:mysql"],contexts:["mysql.queries","mysql.net","mysql.connections"],priority:1},{name:"MariaDB",title:"MariaDB",iconName:"serviceMariaDB",logoFilename:"mariadb.svg",category:"Databases",collectors:["python.d.plugin:mysql","go.d.plugin:mysql"],contexts:["mysql.queries","mysql.net","mysql.connections"],priority:2},{name:"Oracle Database",title:"Oracle Database",iconName:"osOracle",logoFilename:"oracle.svg",category:"Databases",collectors:["python.d.plugin:oracledb"],contexts:["oracledb.session_count","oracledb.physical_disk_read_writes","oracledb.tablespace_usage_in_percent"],priority:3},{name:"PostgreSQL",title:"PostgreSQL",iconName:"servicePostgreSQL",logoFilename:"postgresql.svg",category:"Databases",collectors:["python.d.plugin:postgres"],contexts:["postgres.checkpointer","postgres.archive_wal","postgres.db_size"],priority:4},{name:"MongoDB",title:"MongoDB",iconName:"serviceMongoDB",logoFilename:"mongodb.svg",category:"Databases",collectors:["python.d.plugin:mongodb"],contexts:["mongodb.active_clients","mongodb.read_operations","mongodb.write_operations"],priority:5},{name:"ElasticSearch",title:"ElasticSearch",iconName:"serviceElasticSearch",logoFilename:"elasticsearch.svg",category:"Databases",collectors:["python.d.plugin:elasticsearch"],contexts:["elastic.search_performance_total","elastic.index_performance_total","elastic.index_segments_memory"],priority:6},{name:"CouchDB",title:"CouchDB",iconName:"serviceCouchDB",logoFilename:"couchdb.svg",category:"Databases",collectors:["python.d.plugin:couchdb"],contexts:["couchdb.activity","couchdb.response_codes"],priority:7},{name:"Proxy SQL",title:"Proxy SQL",iconName:"serviceProxySQL",logoFilename:"proxysql.svg",category:"Databases",collectors:["python.d.plugin:proxysql"],contexts:["proxysql.questions","proxysql.pool_status","proxysql.pool_overall_net"],priority:8},{name:"Redis",title:"Redis",iconName:"serviceRedis",logoFilename:"redis.svg",category:"Databases",collectors:["python.d.plugin:redis"],contexts:["redis.operations","redis.net","redis.connections"],priority:9},{name:"MemCached",title:"MemCached",iconName:"serviceMemCached",logoFilename:"memcached.svg",category:"Databases",collectors:["python.d.plugin:memcached"],contexts:["memcached.cache","memcached.net","memcached.connections"],priority:10},{name:"RethinkDB",title:"RethinkDB",iconName:"serviceRethinkDB",logoFilename:"rethinkdb.svg",category:"Databases",collectors:["python.d.plugin:rethinkdbs"],contexts:["rethinkdb.cluster_queries","rethinkdb.cluster_clients_active","rethinkdb.cluster_connected_servers"],priority:11},{name:"Solr",title:"Solr",iconName:"serviceSolr",logoFilename:"solr.svg",category:"Databases",collectors:["go.d.plugin:solr"],contexts:["solr.search_requests","solr.update_requests"],priority:12},{name:"RabbitMQ",title:"RabbitMQ",iconName:"serviceRabbitMQ",logoFilename:"rabbitmq.svg",category:"Messaging",collectors:["python.d.plugin:rabbitmq","go.d.plugin:rabbitmq"],contexts:["rabbitmq.queued_messages","rabbitmq.erlang_run_queue"],priority:1},{name:"Beanstalkd",title:"Beanstalkd",iconName:"serviceBeanstalk",logoFilename:"beanstalkd.svg",category:"Messaging",collectors:["python.d.plugin:beanstalk"],contexts:["beanstalk.total_jobs_rate","beanstalk.connections_rate","beanstalk.current_tubes"],priority:2},{name:"Apache",title:"Apache",iconName:"serviceApache",logoFilename:"apache.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:apache","go.d.plugin:apache"],contexts:["apache.requests","apache.connections","apache.net"],priority:1},{name:"nginx",title:"nginx",iconName:"serviceNginx",logoFilename:"nginx.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:nginx","go.d.plugin:nginx"],contexts:["nginx.requests","nginx.connections"],priority:2},{name:"nginx+",title:"nginx+",iconName:"serviceNginxPlus",logoFilename:"nginx-plus.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:nginx_plus"],contexts:["nginx_plus.requests_total","nginx_plus.connections_statistics"],priority:3},{name:"lighthttpd",title:"lighthttpd",iconName:"serviceLighthttpd",logoFilename:"lighthttpd.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:lighttpd","go.d.plugin:lighttp"],contexts:["lighttpd.requests","lighttpd.net"],priority:4},{name:"lighthttpd2",title:"lighthttpd2",iconName:"serviceLighthttpd2",logoFilename:"lighthttpd.svg",category:"Web, Proxies, LBs, Streaming",collectors:["go.d.plugin:lighttpd2"],contexts:["lighttpd2.requests","lighttpd2.traffic"],priority:5},{name:"LiteSpeed",title:"LiteSpeed",iconName:"serviceLiteSpeed",logoFilename:"litespeed.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:litespeed"],contexts:["litespeed.requests","litespeed.requests_processing"],priority:6},{name:"Tomcat",title:"Tomcat",iconName:"serviceApacheTomcat",logoFilename:"tomcat.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:tomcat"],contexts:["tomcat.accesses","tomcat.processing_time","tomcat.bandwidth"],priority:7},{name:"PHP FPM",title:"PHP FPM",iconName:"servicePhpFpm",logoFilename:"php-fpm.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:phpfm"],contexts:["phpfpm.performance","phpfpm.requests","phpfpm.connections"],priority:8},{name:"HAproxy",title:"HAproxy",iconName:"serviceHAProxy",logoFilename:"haproxy.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:haproxy"],contexts:["haproxy_f.scur","haproxy_f.bin","haproxy_f.bout"],priority:9},{name:"Squid",title:"Squid",iconName:"serviceSquid",logoFilename:"squid.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:squid"],contexts:["squid.clients_requests","squid.clients_net"],priority:10},{name:"Traefik",title:"Traefik",iconName:"serviceTraefik",logoFilename:"traefik.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:traefik"],contexts:["traefik.response_codes"],priority:11},{name:"Varnish",title:"Varnish",iconName:"serviceVarnish",logoFilename:"varnish.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:varnish"],contexts:["varnish.session_connection","varnish.client_requests"],priority:12},{name:"IPVS",title:"IPVS",iconName:"serviceIPVS",logoFilename:"load-balancer.svg",category:"Web, Proxies, LBs, Streaming",collectors:["proc.plugin:/proc/net/ip_vs_stats"],contexts:["ipvs.sockets","ipvs.packets","ipvs.net"],priority:13},{name:"Web Log",title:"Web Log",iconName:"serviceWebLog",logoFilename:"log-file.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:web_log","go.d.plugin:web_log"],contexts:["web_log.response_codes","web_log.bandwidth"],priority:14},{name:"IPFS",title:"IPFS",iconName:"serviceIPFS",logoFilename:"ipfs.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:ipfs"],contexts:["ipfs.bandwidth","ipfs.peers"],priority:15},{name:"IceCast Media Streaming",title:"IceCast Media Streaming",iconName:"serviceIceCast",logoFilename:"icecast.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:icecast"],contexts:["icecast.listeners"],priority:16},{name:"RetroShare",title:"RetroShare",iconName:"serviceRetroShare",logoFilename:"retroshare.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:retroshare"],contexts:["retroshare.bandwidth","retroshare.peers"],priority:17},{name:"HTTP Check",title:"HTTP Check",iconName:"serviceHTTPCheck",logoFilename:"server-connection.svg",category:"Web, Proxies, LBs, Streaming",collectors:["python.d.plugin:httpcheck","go.d.plugin:httpcheck"],contexts:["httpcheck.responsetime","httpcheck.status"],priority:18},{name:"x509 Check",title:"x509 Check",iconName:"serviceX509Check",logoFilename:"data-encryption.svg",category:"Web, Proxies, LBs, Streaming",collectors:["go.d.plugin:x509check"],contexts:["x509check.time_until_expiration"],priority:19}].reduce(((e,t)=>({...e,[t.name]:t})),{}),x=e=>{var t;return(null===(t=v[e])||void 0===t?void 0:t.iconName)||"services"},b=e=>{var t;let{node:n}=e;return null!==(t=n.services)&&void 0!==t&&t.length?r.createElement(y.A,{link:"https://learn.netdata.cloud/docs/agent/collectors/collectors#service-and-application-collectors",name:"Services"},n.services.map((e=>r.createElement(g.A,{size:"small",key:e,iconName:x(e),name:e,testId:"sidebar-ServicesGroup-service-".concat(e)})))):null};var I=n(58010),E=n(17240);const C=e=>{let{nodeIds:t,flavour:n}=e;const a=(0,i.l6)("sidebarNodeId",{defaultValue:t[0],flavour:"val",extraKey:n}),l=(0,m.xY)(a);return l.id?r.createElement(o.Flex,{column:!0,gap:1,overflow:{horizontal:"hidden",vertical:"auto"},padding:[2],width:"100%"},r.createElement(o.TextBig,{strong:!0},"Info"),r.createElement(o.Flex,{column:!0,padding:[2,0,3],border:{side:"bottom",color:"borderSecondary"}},false,r.createElement(o.TextSmall,{"data-testid":"sidebar-nodeInfoContent-hostname",strong:!0},"Hostname: ",l.name)),r.createElement(f.A,{node:l}),r.createElement(p.A,{node:l}),r.createElement(h.A,{node:l}),r.createElement(I.A,{node:l}),r.createElement(b,{node:l}),r.createElement(E.A,{node:l})):r.createElement(o.Text,null,"Select a node to see its\u2019 info")};var A=n(29217),k=n(20687),w=(n(25440),n(55309)),S=n(20982),P=n(18713),N=n(59090);const F=e=>e&&"0"!==e?"".concat(parseFloat(e).toFixed(2),"%"):"-";n(14905),n(8872);var _=n(82543),K=n(61427);const M=e=>{let{chartIds:t,weightKey:n,flavour:l="rhs",...i}=e;const[s,c,d]=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],{flavour:t,weightKey:n="weight"}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=(0,_.g)(),{loaded:l,byContext:o}=(0,K.G9)({nodeIds:a,flavour:t});return(0,r.useMemo)((()=>{if(!l)return[!1,null,null];let t=null;const a=e.reduce(((e,a)=>{let r;if(/::/.test(a)){const e=a.split("::");a=e[0],r=e[1]}const[l,i]=r?((e,t,n,a)=>{var r,l;let{max:o,maxWeightContext:i,weightKey:s}=a;const c="".concat(n,",").concat(t);return e[c]&&((null===(r=e[c])||void 0===r?void 0:r[s])||0)>o?[(null===(l=e[c])||void 0===l?void 0:l[s])||0,t]:[o,i]})(o,a,r,{max:e,maxWeightContext:t,weightKey:n}):((e,t,n)=>{let{max:a,maxWeightContext:r,weightKey:l}=n;return e[t]&&(e[t][l]||0)>a?[e[t][l]||0,t]:[a,r]})(o,a,{max:e,maxWeightContext:t,weightKey:n});return t=i,l}),0);return[!0,a,t]}),[e,o])}(t,{flavour:l,weightKey:n});return s?r.createElement(A.A,{content:d,align:"top",enterDelay:200,activateOn:"hover"},r.createElement(o.Pill,(0,a.A)({hollow:!0,flavour:"neutral",tiny:!0,cursor:i.onClick?"pointer":"auto"},i),F(c))):null},L=(0,l.default)(o.IconButton).attrs((e=>({flavour:"borderless",cursor:"pointer",width:"12px",height:"12px",iconColor:"textLite",padding:[0],...e}))).withConfig({displayName:"config__ConfigButton",componentId:"sc-1q0bfbp-0"})([""]),T=(0,l.default)(o.Flex).withConfig({displayName:"menuSettings__SettingsContainer",componentId:"sc-1nq4zzt-0"})(["display:",";"],(e=>e.active&&!e.hasSubmenuActive?"flex":"none")),D=(0,l.css)(["","{display:flex;"," .button-icon__color{fill:"," !important;}}"],T,L,(0,o.getColor)("text")),B=e=>{let{id:t,chartIds:n,arFlavour:a,showAR:l=!0,showConfig:i,weightKey:s,active:c,hasSubmenuActive:d,extraKey:u}=e;return r.createElement(o.Flex,{gap:1,alignItems:"center"},!1,l&&r.createElement(M,{chartIds:n,flavour:a,weightKey:s}))},q=(0,l.default)(o.TextSmall).attrs((e=>{let{active:t,id:n,name:a,link:r,children:l,...o}=e;return{strong:t,children:a||l||n,href:"#".concat(r),"data-sidebar-submenuid":n,truncate:!0,whiteSpace:"normal",color:"textLite",wordWrap:"break-word",...o}})).withConfig({displayName:"menuItem__MenuLabelWrapper",componentId:"sc-18613h0-0"})(["&&&{text-decoration:none;}"]),V=(0,l.css)(["border-left:1px solid ",";","{color:",";}"],(0,o.getColor)("key"),q,(0,o.getColor)("key")),O=(0,l.default)(o.Flex).attrs((e=>{let{active:t,...n}=e;return{width:"98%",padding:[.5,1,.5,4],role:"listitem",as:"a","aria-current":t,active:t,...n}})).withConfig({displayName:"menuItem__Container",componentId:"sc-18613h0-1"})(["&&&{border-left:1px solid transparent;"," "," text-decoration:none;cursor:pointer;&:hover{"," ","}}"],(e=>e.active&&V),(e=>e.active&&"".concat(q," { font-weight: bold; }")),V,D),z=(0,N.A)(q,(e=>{let{name:t,id:n}=e;return{children:t||n}})),H=(0,r.forwardRef)(((e,t)=>{let{id:n,useItemsAreVisible:l,...o}=e;const i=l(o.chartIds);return o.forceVisibility||i?r.createElement(O,(0,a.A)({ref:t,as:"a",gap:2,alignItems:"center",justifyContent:"between","data-sidebar-menugroupid":n},o)):null})),W=(0,N.A)(H,(e=>{let{id:t,link:n,chartIds:a,forceVisibility:r}=e;return{id:t,href:"#".concat(n),chartIds:a,forceVisibility:r}})),j=(0,N.A)((e=>t=>{let{id:n,...l}=t;const o=(0,P.W7)((e=>n===e));return r.createElement(e,(0,a.A)({active:o,id:n},l))})((G=e=>{let{id:t,...n}=e;return r.createElement(W,(0,a.A)({id:t},n),r.createElement(z,{id:t}),r.createElement(B,(0,a.A)({},n,{id:t})))},e=>{let{id:t,onSubMenuClick:n,...l}=e;const o=(0,r.useMemo)((()=>n&&(e=>n(t,e))),[n,t]);return r.createElement(G,(0,a.A)({onClick:o,id:t},l))})));var G;const R=(0,l.default)(o.Text).attrs({color:"textLite"}).withConfig({displayName:"menuGroup__MenuGroupLabelWrapper",componentId:"sc-1q9pvct-0"})(["font-weight:500;"]),U=(0,l.default)(o.Flex).attrs({flex:!1,color:"textLite",width:6,alignItems:"center",justifyContent:"center"}).withConfig({displayName:"menuGroup__FaIcon",componentId:"sc-1q9pvct-1"})([""]),Q=(0,l.css)(["border-left:2px solid ",";","{color:",";}"],(0,o.getColor)("text"),R,(0,o.getColor)("text")),Z=(0,l.default)(o.Flex).attrs({width:"98%"}).withConfig({displayName:"menuGroup__Container",componentId:"sc-1q9pvct-2"})(["&&&{border-left:2px solid transparent;"," "," text-decoration:none;cursor:pointer;&:hover{"," ","}}"],(e=>e.active&&Q),(e=>e.active&&"".concat(R," { font-weight: bold; }")),Q,D),Y=(0,w.HB)(R,(e=>{let{name:t,id:n}=e;return{children:t||n}})),$=(0,w.HB)((e=>{let{icon:t}=e;return t?r.createElement(U,null,o.iconsList[t]?r.createElement(o.Icon,{name:t,size:"small",color:"text"}):r.createElement(S.g,{icon:t})):null}),(e=>{let{icon:t}=e;return{icon:t}})),J=(0,r.forwardRef)(((e,t)=>{let{id:n,subMenuChartIds:l,useItemsAreVisible:o,...i}=e;const s=o(l);return i.forceVisibility||s?r.createElement(Z,(0,a.A)({ref:t,as:"a",gap:2,padding:[1],alignItems:"center",justifyContent:"between","data-sidebar-menugroupid":n},i)):null})),X=(0,w.HB)(J,(e=>{let{id:t,link:n,subMenuChartIds:a,forceVisibility:r}=e;return{id:t,href:"#".concat(n),subMenuChartIds:a,forceVisibility:r}})),ee=e=>{let{id:t,...n}=e;return r.createElement(X,(0,a.A)({id:t},n),r.createElement(o.Flex,null,r.createElement($,{id:t}),r.createElement(Y,{id:t})),r.createElement(B,(0,a.A)({},n,{id:t})))},te=(0,w.HB)((e=>{let{subMenuIds:t,onSubMenuClick:n,useItemsAreVisible:l,...i}=e;return r.createElement(o.Flex,(0,a.A)({column:!0,role:"list",padding:[0,0,2,0]},i),t.map((e=>r.createElement(j,{key:e,id:e,onSubMenuClick:n,useItemsAreVisible:l}))))}),(e=>{let{subMenuIds:t}=e;return{subMenuIds:t}})),ne=(0,r.forwardRef)(((e,t)=>r.createElement(o.Flex,(0,a.A)({as:"li",column:!0,ref:t},e)))),ae=(e=>t=>{let{id:n,...l}=t;const o=(0,P.C)(n),i=(0,P.W7)((e=>!!e));return r.createElement(e,(0,a.A)({active:o,hasSubmenuActive:i,id:n},l))})((e=>t=>{let{id:n,onMenuGroupClick:l,onSubMenuClick:o,...i}=t;const s=(0,r.useMemo)((()=>l&&(e=>l(n,e))),[l,n]),c=(0,r.useMemo)((()=>o&&((e,t)=>o(n,e,t))),[o,n]);return r.createElement(e,(0,a.A)({id:n,onMenuGroupClick:s,onSubMenuClick:c},i))})((e=>{let{id:t,active:n,hasSubmenuActive:l,onMenuGroupClick:o,onSubMenuClick:i,showChildren:s=!0,useItemsAreVisible:c,...d}=e;const u=(0,w.Ee)(t);return u?r.createElement(ne,d,r.createElement(ee,(0,a.A)({},u,{id:t,onClick:o,active:n,hasSubmenuActive:l,chartIds:u.subMenuChartIds,useItemsAreVisible:c})),s&&n&&r.createElement(te,{id:t,onSubMenuClick:i,useItemsAreVisible:c})):null}))),re=(0,r.forwardRef)(((e,t)=>r.createElement(o.Flex,(0,a.A)({as:"ul",width:"100%",role:"complementary",column:!0,overflow:{vertical:"auto"},"data-sidebar":"true",ref:t},e)))),le=()=>!0,oe=(0,r.memo)((e=>{let{menuGroupIds:t,onMenuGroupClick:n,onSubMenuClick:l,menuGroupProps:o,useItemsAreVisible:i=le,extraKey:s,...c}=e;return r.createElement(re,c,t.map((e=>r.createElement(ae,(0,a.A)({key:e,id:e,onMenuGroupClick:n,onSubMenuClick:l,useItemsAreVisible:i,extraKey:s},o)))))})),ie=(0,w.$V)(oe),se=(0,r.memo)(ie);var ce=n(79566),de=n(71847),ue=n(73700),me=n(13271);const ge=()=>{const[e,t]=(0,me.sK)(),n=(0,r.useCallback)((0,ue.s)(300,(e=>{t(e.target.value),(0,de.H)("toc-search","search-automatic-trigger","charts-view",e.target.value)})),[]),[a,l,,,{resetValue:i}]=(0,o.useInputValue)({value:e,onChange:n}),s=(0,r.useCallback)((()=>{t(""),i(),(0,de.H)("toc-search","clear-search-button","charts-view")}),[]);return r.createElement(o.TextInput,{value:a,onChange:l,size:"small",iconRight:a&&r.createElement(o.Icon,{name:"x",color:"textLite",cursor:"pointer",size:"small",onClick:s,"data-testid":"filterChartsInput-clearButton"}),placeholder:"Search charts",name:"Search charts","data-testid":"filterChartsInput",containerStyles:{width:"100%"}})};var pe=n(47767),he=n(4659),fe=n(97054);const ye=(0,ue.s)(300,((e,t)=>(0,de.H)("toc-search","search-results","charts-view",e,"".concat(t," -- charts")))),ve=()=>{const e=(0,pe.Zp)(),[t]=(0,fe.Ay)(),n=(0,me.Um)(),{filteredChartsCount:a,chartsCount:l}=(0,me.Ad)();(0,r.useEffect)((()=>{n&&ye(n,a)}),[n,a]);const i=(0,r.useCallback)((n=>{n.preventDefault(),e("/spaces/".concat(t,"/settings/configurations"),{replace:!0})}),[t,e]);return r.createElement(r.Fragment,null,r.createElement(o.TextMicro,{alignSelf:"end",color:"textLite",margin:[1,0,0],"data-testid":"numberOfChartsIndication"},"Showing"," ",r.createElement(o.TextMicro,{strong:!0,color:"textDescription","data-testid":"numberOfChartsIndication-filteredChartsCount"},a)," ","of total"," ",r.createElement(o.TextMicro,{strong:!0,color:"textDescription","data-testid":"numberOfChartsIndication-chartsCount"},l)," ","charts"),r.createElement(he.A,{Component:o.TextMicro,alignSelf:"end","data-ga":"toc-search::click-link-collectors::".concat(name),onClick:i,target:"_blank",rel:"noopener noreferrer"},"Add more charts"))},xe=()=>{const{filteredChartsCount:e}=(0,me.Ad)();return e?null:r.createElement(o.Flex,{width:"100%",gap:1,margin:[4,0,0],padding:[2],round:1,background:"disabledBackground",alignItems:"center","data-testid":"noResultsWereFound"},r.createElement(o.Icon,{name:"information",color:"textDescription"}),r.createElement(o.TextMicro,{strong:!0,color:"textDescription"},"No results were found"))},be=(0,_.A)(ve),Ie=()=>r.createElement(o.Flex,{column:!0,alignItems:"center",height:{min:"65px"}},r.createElement(ge,null),r.createElement(be,null),r.createElement(xe,null));var Ee=n(23931),Ce=n(8320),Ae=n(68831),ke=n(87659),we=n(3914),Se=n(69765);const{demoSlug:Pe,demoFavourites:Ne}=Ae.A,Fe=(0,l.default)(o.Icon).attrs({size:"small",name:"chevron_left",color:"textLite"}).withConfig({displayName:"favourites__StyledChevron",componentId:"sc-mwcyj8-0"})(["transition:transform 0.2s ease-in-out;"]),_e={showChildren:!1},Ke=e=>{let{onMenuGroupClick:t,onSubMenuClick:n,initialChartName:a,flavour:l}=e;const i=(0,we.bq)(),s=(0,Se.QW)(),c=Pe===i&&Ne[s]||[],d=(0,w.re)((u=c,e=>u.reduce(((t,n)=>e[n]?[...t,n]:t),[])));var u;const{onMenuGroupClick:m,onSubMenuClick:g}=(0,ce.A)({onMenuGroupClick:t,onSubMenuClick:n}),[p,h]=(0,ke.A)(!0),f=(0,Ce.UH)();return(0,r.useEffect)((()=>{f&&!a&&d.length&&t(d[0])}),[f,a]),d.length?r.createElement(o.Flex,{column:!0,gap:1,border:{side:"bottom",color:"borderSecondary"},padding:[0,0,2]},r.createElement(o.Flex,{onClick:h,cursor:"pointer",alignItems:"center",justifyContent:"between"},r.createElement(o.Flex,{gap:1,alignItems:"center"},r.createElement("i",{className:"fa-regular fa-star"}),r.createElement(o.Text,{strong:!0,color:"textFocus"},"Favourites")),r.createElement(Fe,{rotate:p?1:3,alignSelf:"end"})),r.createElement(o.Collapsible,{open:p,padding:[0,0,0,2]},r.createElement(oe,{menuGroupIds:d,onMenuGroupClick:m,onSubMenuClick:g,menuGroupProps:_e,extraKey:l}))):null},Me={nodesView:()=>!0,default:Ee.Bu},Le=e=>(0,de.H)("metric-sidebar","click-".concat(De(e)),"mn-overview"),Te=e=>{const t=De(e);(0,de.H)("metric-sidebar","click-".concat(t),"mn-overview",t)},De=e=>e.startsWith("Kubernetes")?"k8s":e.replace(/[^\w]/g,"-").toLowerCase(),Be=e=>{let{initialChartName:t,loaded:n,hasSearch:a=!0,flavour:l}=e;const{onMenuGroupClick:i,onSubMenuClick:s}=(0,ce.A)({onMenuGroupClick:Le,onSubMenuClick:Te,loaded:n}),c=Me[l]||Me.default;return r.createElement(r.Fragment,null,a&&r.createElement(o.Flex,{column:!0,position:"sticky",top:"0",gap:1,padding:[0,2]},r.createElement(o.Text,{strong:!0},"Sections and Charts"),r.createElement(Ie,null)),n&&r.createElement(r.Fragment,null,r.createElement(Ke,{onMenuGroupClick:i,onSubMenuClick:s,initialChartName:t,useItemsAreVisible:c,flavour:l}),r.createElement(se,{position:"relative",onMenuGroupClick:i,onSubMenuClick:s,width:"100%",useItemsAreVisible:c,extraKey:l})))};var qe=n(23452),Ve=n(59846),Oe=n(82700);const ze=e=>e.id,He=e=>{let{baseKey:t,param:n,paramKey:l,extraKey:o,testIdPrefix:s,title:c,groupProps:d}=e;const u=(e=>{let{extraKey:t,param:n,paramKey:a}=e;const l=(0,qe.QD)({extraKey:t,omit:n,keepAll:!0}),o=(0,i.l6)(n,{extraKey:t,flavour:"arr"});return(0,r.useMemo)((()=>Object.entries(l.reduce(((e,t)=>(e[t[a]]=(e[t[a]]||0)+(t.hidden?0:1),e)),{...qe.hv[n]||{}})).map((e=>{let[t,n]=e;return{id:t,count:n}})).sort(qe.qr[n]||qe.qr.default)),[l.filter((e=>e.hidden)).length,o])})({param:n,extraKey:o,paramKey:l});return u.length?r.createElement(Ve.A,(0,a.A)({title:c,testIdPrefix:s,baseKey:t,extraKey:o,param:n,help:"Filter the alerts. Count next to each item refer to the number of alerts that will be selected."},d),r.createElement(Oe.Ay,{param:n,baseKey:t,extraKey:o,testIdPrefix:s,collection:u,getValue:ze,getLabel:ze})):null};n(30237),n(32679),n(8159),n(30670),n(37550),n(25509),n(65223),n(60321),n(41927),n(11632),n(64377),n(66771),n(12516),n(68931),n(52514),n(35694),n(52774),n(49536),n(21926),n(94483),n(16215);var We=n(66245),je=n.n(We),Ge=n(45467);const Re=e=>{const{baseKey:t,extraKey:n,param:l,testIdPrefix:o,itemsProps:s,itemProps:c,groupProps:d,...u}={...Oe.H5,...e},m=(e=>{let{extraKey:t,param:n}=e;const a=(0,qe.QD)({extraKey:t,omit:n,keepAll:!0}),l=(0,i.l6)(n,{extraKey:t,flavour:"arr"});return(0,r.useMemo)((()=>Object.entries(a.reduce(((e,t)=>{let{type:n,component:a,hidden:r}=t;return e[n]=e[n]||{count:0,children:{}},e[n].count=(e[n].count||0)+(r?0:1),e[n].children[a]=(e[n].children[a]||0)+(r?0:1),e}),{})).reduce(((e,t)=>{let[n,{count:a,children:r}]=t;return e.push({id:n,count:a,children:Object.entries(r).map((e=>{let[t,a]=e;return{value:"".concat(n,"|").concat(t),label:t,count:a,level:1}}))}),e}),[]).sort(qe.qr[n]||qe.qr.default)),[a.filter((e=>e.hidden)).length,l])})({param:l,extraKey:n}),[g,p]=(0,i.N9)(l,{defaultValue:[],key:t,extraKey:n,flavour:"arr"});(0,Ge.A)((()=>{m.length&&g.length&&p((e=>e.filter((e=>m.some((t=>t.children.some((t=>t.value===e))))))))}),[m.length,p]);const h=(0,r.useCallback)((e=>{let{value:t,checked:n}=e;p((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(t)?n?[...new Set([...e,...t])]:je()(e,t):n?[...e,t]:e.filter((e=>e!==t))}))}),[p]),f=(0,r.useMemo)((()=>(e=>{let{options:t,selected:n,itemsProps:a={}}=e;if(!t.length)return[];const r=t.flatMap((e=>e.children.map((e=>e.value)))),l=r.length===n.length,o=!l&&!!n.length;return[{...a.head,label:"Select all",value:r,selected:l,indeterminate:o},...t.flatMap((e=>{let{id:t,children:r,count:l}=e;const o=n.length&&!r.some((e=>!n.includes(e.value))),i=!o&&n.length&&r.some((e=>n.includes(e.value)));return r.reduce(((e,t)=>{const r=n.includes(t.value);return[...e,{...a.row,...t,selected:r}]}),[{...a.head,label:t,value:r.map((e=>e.value)),selected:o,indeterminate:i,count:l}])}))]})({options:m,selected:g,itemsProps:s})),[g,p,m]);return m.length?r.createElement(Ve.A,(0,a.A)({title:"Alert type & component",testIdPrefix:o,baseKey:t,extraKey:n,param:l,help:"Filter the alerts. Count next to each item refer to the number of alerts that will be selected."},d),r.createElement(Oe.V$,(0,a.A)({"data-testid":"".concat(o,'-filter-selections"'),searchMargin:[0,0,1],items:f,onItemClick:h,value:g,"data-value":g.join(",")||"all-selected",hasSearch:m.length>5,itemProps:{testIdPrefix:o,...c}},u))):null};var Ue=n(11128);const Qe=e=>e.id,Ze=e=>{let{baseKey:t,param:n,paramKey:l,extraKey:o,testIdPrefix:s,title:c,groupProps:d,...u}=e;const m=(e=>{let{extraKey:t,param:n,paramKey:a}=e;const l=(0,Ue.eO)({extraKey:t,omit:n,keepAll:!0,scoped:!!t}),o=(0,i.l6)(n,{extraKey:t,flavour:"arr"});return(0,r.useMemo)((()=>Object.entries(l.reduce(((e,t)=>(e[t[a]]=(e[t[a]]||0)+(t.hidden?0:1),e)),{})).map((e=>{let[t,n]=e;return{id:t,count:n}})).sort(Ue.qr[n]||Ue.qr.default)),[l.filter((e=>e.hidden)).length,o])})({param:n,extraKey:o,paramKey:l});return m.length?r.createElement(Ve.A,(0,a.A)({title:c,testIdPrefix:s,baseKey:t,extraKey:o,param:n,defaultIsOpen:!1},d),r.createElement(Oe.Ay,(0,a.A)({param:n,baseKey:t,extraKey:o,testIdPrefix:s,collection:m,getValue:Qe,getLabel:Qe},u))):null};n(9920),n(3949);const Ye=e=>{const{baseKey:t,extraKey:n,param:l,testIdPrefix:o,itemsProps:s,itemProps:c,groupProps:d,...u}={...Oe.H5,...e},m=(e=>{let{extraKey:t,param:n}=e;const a=(0,Ue.eO)({extraKey:t,omit:n,keepAll:!0,merge:!0}),l=(0,i.l6)(n,{extraKey:t,flavour:"arr"});return(0,r.useMemo)((()=>Object.entries(a.reduce(((e,t)=>{let{labels:n,hidden:a}=t;return Object.keys(n).forEach((t=>{e[t]=e[t]||{count:0,children:{}},e[t].count=(e[t].count||0)+(a?0:1),e[t].children[n[t]]=(e[t].children[n[t]]||0)+(a?0:1)})),e}),{})).reduce(((e,t)=>{let[n,{count:a,children:r}]=t;return e.push({id:n,count:a,children:Object.entries(r).map((e=>{let[t,a]=e;return{value:"".concat(n,"|").concat(t),label:t,count:a,level:1}}))}),e}),[]).sort(Ue.qr[n]||Ue.qr.default)),[a.filter((e=>e.hidden)).length,l])})({param:l,extraKey:n}),[g,p]=(0,i.N9)(l,{defaultValue:[],key:t,extraKey:n,flavour:"arr",merge:!1});(0,Ge.A)((()=>{m.length&&g.length&&p((e=>e.filter((e=>m.some((t=>t.children.some((t=>t.value===e))))))))}),[m.length,p]);const h=(0,r.useCallback)((e=>{let{value:t,checked:n}=e;p((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(t)?n?[...new Set([...e,...t])]:je()(e,t):n?[...e,t]:e.filter((e=>e!==t))}))}),[p]),f=(0,r.useMemo)((()=>(e=>{let{options:t,selected:n,itemsProps:a={}}=e;if(!t.length)return[];const r=t.flatMap((e=>e.children.map((e=>e.value)))),l=r.length===n.length,o=!l&&!!n.length;return[{...a.head,label:"Select all",value:r,selected:l,indeterminate:o},...t.flatMap((e=>{let{id:t,children:r,count:l}=e;const o=n.length&&!r.some((e=>!n.includes(e.value))),i=!o&&n.length&&r.some((e=>n.includes(e.value)));return r.reduce(((e,t)=>{const r=n.includes(t.value);return[...e,{...a.row,...t,selected:r}]}),[{...a.head,label:t,value:r.map((e=>e.value)),selected:o,indeterminate:i,count:l}])}))]})({options:m,selected:g,itemsProps:s})),[g,p,m]);return m.length?r.createElement(Ve.A,(0,a.A)({title:"Host labels",testIdPrefix:o,baseKey:t,extraKey:n,param:l},d),r.createElement(Oe.V$,(0,a.A)({"data-testid":"".concat(o,'-filter-selections"'),searchMargin:[0,0,1],items:f,onItemClick:h,value:g,"data-value":g.join(",")||"all-selected",hasSearch:m.length>3,itemProps:{testIdPrefix:o,...c}},u))):null};var $e=n(94177);const Je=(0,r.memo)((e=>{let{flavour:t,groupProps:n,...l}=e;const i=(0,Se.ID)();return r.createElement(o.Flex,(0,a.A)({column:!0,overflow:{vertical:"auto"},padding:[0,2,30]},l),"alerts"===t&&r.createElement(r.Fragment,null,r.createElement(He,{title:"Alert status",testIdPrefix:"alert-status",baseKey:i,extraKey:t,param:"alertStatuses",paramKey:"status",groupProps:n}),r.createElement(He,{title:"Alert name",testIdPrefix:"alert-name",baseKey:i,extraKey:t,param:"alertNames",paramKey:"name",groupProps:n}),r.createElement(He,{title:"Alert context",testIdPrefix:"alert-context",baseKey:i,extraKey:t,param:"alertContexts",paramKey:"context",groupProps:n}),r.createElement(He,{title:"Alert class",testIdPrefix:"alert-class",baseKey:i,extraKey:t,param:"alertClasses",paramKey:"class",groupProps:n}),r.createElement(Re,{testIdPrefix:"alert-type-component",baseKey:i,extraKey:t,param:"alertTypeComponents",groupProps:n}),r.createElement(He,{title:"Alert role",testIdPrefix:"alert-role",baseKey:i,extraKey:t,param:"alertRoles",paramKey:"recipient",groupProps:n})),"singleNode"!==t&&"anomalies"!==t&&r.createElement(r.Fragment,null,r.createElement(Ye,{testIdPrefix:"node-labels",baseKey:i,extraKey:t,param:"nodeLabels",groupProps:n}),r.createElement(Ze,{title:"Node status",testIdPrefix:"node-status",baseKey:i,extraKey:t,param:"nodeStatuses",paramKey:"nodeStatus",groupProps:n}),r.createElement(Ze,{title:"Netdata version",testIdPrefix:"node-version",baseKey:i,extraKey:t,param:"nodeVersions",paramKey:"version",groupProps:n})),!!t&&"singleNode"!==t&&r.createElement($e.A,{testIdPrefix:"node-ids",baseKey:i,extraKey:t,groupProps:{defaultIsOpen:"anomalies"===t,...n}}))})),Xe={color:{active:"success",notActive:"textLite"},minWidth:"auto"},et={chartIndexing:{...Xe,iconName:"charts_view",Content:Be,dataTestId:"nodeInfo-chartIndexing",label:"Charts"},filters:{...Xe,iconName:"filterList",Content:Je,dataTestId:"nodeInfo-filters",label:"Filters"},alerts:{...Xe,iconName:"alarm_bell",Content:k.A,dataTestId:"nodeInfo-alertsTab",label:"Alerts"},info:{...Xe,iconName:"information",dataTestId:"nodeInfo-alertsTab",Content:C,label:"Info"}},tt=[],nt=(0,l.default)(o.Tabs).withConfig({displayName:"sidebar__StyledTabs",componentId:"sc-1d5ify6-0"})(["overflow:hidden;height:100%;"]),at=e=>{let{flavour:t,children:n}=e;return r.createElement(r.Fragment,null,n)},rt=e=>{let{isActive:t,color:n,name:a,label:l}=e;return r.createElement(A.A,{plain:!0,content:l},r.createElement(o.Icon,{name:a,color:t?n.active:n.notActive,height:"18px",width:"18px"}))},lt=e=>{let{tabs:t=et,hiddenTabs:n=tt,includedTabs:l=tt,title:m,help:g,nodeIds:p=tt,onClose:h,baseWidth:f,...y}=e;const[v,x]=(0,i.r$)("sidebarTab",{defaultValue:"",flavour:"val",extraKey:y.flavour}),b=(0,r.useMemo)((()=>Object.keys(t).filter((e=>(!l.length||l.includes(e))&&!n.includes(e)))),[n]),I=(0,r.useMemo)((()=>{const e=b.findIndex((e=>e===v));return-1===e?0:e}),[v]),[E,C]=(0,i.r$)("sidebarOpen",{defaultValue:!0,flavour:"bool"}),A=(0,r.useCallback)((e=>{x(b[e]),C(!0)}),[b]);return r.createElement(s.Ay,{collapsedComponent:y.flavour&&r.createElement(c.A,{onClickTab:A,availableTabs:t,tabsToShow:b}),isOpen:E,header:y.flavour?r.createElement(d.A,{isOpen:E,onToggle:()=>C(!E),title:m}):r.createElement(u.A,{title:m,help:g,onClick:h}),width:f},r.createElement(o.Flex,{"data-testid":"sidebar-tabs",column:!0,overflow:"hidden",height:"100%"},r.createElement(nt,{selected:I,onChange:A,noDefaultBorder:!0,TabsHeader:(0,r.useMemo)((()=>e=>r.createElement(at,(0,a.A)({flavour:y.flavour},e))),[y.flavour])},b.map(((e,n)=>{const{iconName:l,Content:i,dataTestId:s,color:c,label:d,...u}=t[e];return r.createElement(o.Tab,(0,a.A)({style:{display:1===b.length?"none":"inherit"},"data-testid":s,maxWidth:"100%",key:l,small:!0,label:r.createElement(rt,{isActive:v===n,name:l,color:c,label:d})},u),r.createElement(o.Flex,{column:!0,overflow:"hidden",height:"100%",position:"relative",gap:3,padding:[1,0]},r.createElement(i,(0,a.A)({nodeIds:p},y))))})))))}},55483:(e,t,n)=>{n.d(t,{A:()=>c});var a=n(96540),r=n(83488),l=n.n(r),o=n(2404),i=n.n(o),s=n(86856);const c=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l();const n=(0,a.useRef)();return(0,s.i7)(e,(e=>{const a=t(e);return i()(n.current,a)||(n.current=a),n.current}))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/934.24d6fdc5f60aa6493962.chunk.js b/src/web/gui/v2/934.24d6fdc5f60aa6493962.chunk.js deleted file mode 100644 index ae22a4b8e..000000000 --- a/src/web/gui/v2/934.24d6fdc5f60aa6493962.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="f54005cd-254a-4d44-abb8-62e22bbc3514",e._sentryDebugIdIdentifier="sentry-dbid-f54005cd-254a-4d44-abb8-62e22bbc3514")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[934],{83863:(e,t,n)=>{n.d(t,{Bo:()=>b,Hv:()=>l,Lf:()=>g,Lm:()=>D,NK:()=>C,OK:()=>_,Pm:()=>A,R8:()=>f,Ro:()=>y,WB:()=>c,Ws:()=>N,XG:()=>x,ZE:()=>v,j8:()=>r,jV:()=>i,uZ:()=>h});n(62953);const a={threshold:{label:"Threshold",value:"threshold"},variance:{label:"Variance",value:"variance"},anomalies:{label:"Anomalies",value:"anomalies"}},l=Object.values(a),o=a.threshold.value,i={thresholds:{above:{label:"above",value:"above",symbol:">"},below:{label:"below",value:"below",symbol:"<"}}},r=Object.values(i.thresholds),s=i.thresholds.above,u={seconds:{label:"seconds",value:"seconds",symbol:"s"},minutes:{label:"minutes",value:"minutes",symbol:"m"},hours:{label:"hours",value:"hours",symbol:"h"},days:{label:"days",value:"days",symbol:"d"}},c=Object.values(u),d={"5_min":{label:"5 mins",value:"5_min",after:"-5m"},"10_min":{label:"10 mins",value:"10_min",after:"-10m"},"15_min":{label:"15 mins",value:"15_min",after:"-15m"},"30_min":{label:"30 mins",value:"30_min",after:"-30m"},"1_hour":{label:"1 hour",value:"1_hour",after:"-1h"},"2_hours":{label:"2 hours",value:"2_hours",after:"-2h"},"6_hours":{label:"6 hours",value:"6_hours",after:"-6h"},"12_hours":{label:"12 hours",value:"12_hours",after:"-12h"},"1_day":{label:"1 day",value:"1_day",after:"-1d"},"2_days":{label:"2 days",value:"2_days",after:"-2d"},"7_days":{label:"7 days",value:"7_days",after:"-7d"}},v=Object.values(d),m=d["5_min"],p={linux:{label:"Linux",value:"linux"},freeBSD:{label:"FreeBSD",value:"freeBSD"},windows:{label:"Windows",value:"windows"}},g={label:"".concat(Object.keys(p).length," OS"),value:""},f=[g,...Object.values(p)],h={avg:{label:"AVG()",value:"average"},sum:{label:"SUM()",value:"sum"},min:{label:"MIN()",value:"min"},max:{label:"MAX()",value:"max"},stddev:{label:"STDDEV()",value:"stddev"},cv:{label:"CV()",value:"cv"}},b=Object.values(h),y=h.stddev,C=h.avg,w={sum:{label:"SUM",value:"of"},each:{label:"EACH",value:"foreach"}},D=Object.values(w),O=w.sum,A={unaligned:{label:"unaligned",value:"unaligned"},percentage:{label:"percentage",value:"percentage"},absolute:{label:"absolute",value:"absolute"},min2max:{label:"min2max",value:"min2max"}},N=Object.values(A),_={label:"&this",value:"$this"},x={alertId:null,detection:{method:o},metrics:{on:"",hosts:{items:[],expression:""},os:[],charts:{items:[],expression:""},chartLabels:{items:[],expression:""},lookup:{aggregation:C,denoter:O,dimensions:[],timePeriod:m,options:[]},calc:{active:!1,value:""},units:""},alertingConditions:{denoter:s,critical:{isFormula:!1,denoter:s,value:85,recovery:null},warning:{isFormula:!1,denoter:s,value:75,recovery:null},interval:{value:60,unit:u.seconds},delayNotification:{active:!1,up:{value:0,unit:u.seconds},down:{value:0,unit:u.seconds},multiplier:1,max:{value:0,unit:u.hours}},agentOptions:{active:!1,off:!0,warningAlertsDuration:{value:15,unit:u.minutes},criticalAlertsDuration:{value:5,unit:u.minutes},sendTo:{value:"",clearNotifications:!0},execScript:{active:!1,path:""}}},description:{summary:"",templateName:"",templateDescription:""}}},60934:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(62953);var a=n(96540),l=n(39225),o=n(8711),i=n(83199),r=n(29217),s=n(21875),u=n(64118),c=n(59303),d=n(28738),v=n(93155);const m=(0,l.A)((()=>Promise.all([n.e(7144),n.e(6331)]).then(n.bind(n,33590))),"Content"),p=(0,o.default)(i.ModalContent).attrs({width:{base:"90vw"},height:{base:"90vh",min:"90vh",max:"90vh"},padding:[0,0,4,0]}).withConfig({displayName:"configurationManagement__ModalContent",componentId:"sc-56l9v5-0"})(["box-shadow:0 18px 28px rgba(0,0,0,0.5);"]),g=()=>a.createElement(d.A,{title:"Loading configuration manager"}),f=()=>{const[e,t]=(0,s.v7)(),[,n]=(0,s.$h)(),l=(0,s.Vj)(),[o,d]=(0,a.useState)(!1);(0,u.yk)(null===e||void 0===e?void 0:e.alertId);const f=(0,u.JL)(null===e||void 0===e?void 0:e.alertId);(0,a.useEffect)((()=>{e&&!e.alertId&&d(!0)}),[e]),(0,a.useEffect)((()=>{if(null!==f&&void 0!==f&&f.fullyLoaded){const e=(0,c.we)(f);n(e),d(!0)}}),[f]);const h=(0,a.useCallback)((()=>{t(null),l(),d(!1)}),[t,l,d]);return v.Dm&&e?a.createElement(i.Modal,{backdropProps:{backdropBlur:!0}},a.createElement(p,null,a.createElement(i.ModalHeader,{justifyContent:"between",padding:[4]},a.createElement(i.Flex,{gap:2,alignItems:"center"},a.createElement(i.Icon,{name:"alarm_bell",color:"text",size:"small"}),a.createElement(i.H4,null,"Generate Alert Configuration")),a.createElement(i.Flex,{gap:2,alignItems:"baseline"},a.createElement(r.A,{align:"bottom",content:"Close window",zIndex:7050},a.createElement(i.Flex,null,a.createElement(i.ModalCloseButton,{onClose:h,testId:"assistant-modal-close-button"}))))),a.createElement(i.ModalBody,{height:"100%",padding:[0,4],overflow:"hidden"},o?a.createElement(a.Suspense,{fallback:a.createElement(g,null)},a.createElement(m,null)):a.createElement(g,null)))):null}},21875:(e,t,n)=>{n.d(t,{v7:()=>c,vX:()=>u,$h:()=>v,op:()=>h,I8:()=>b,aR:()=>p,BO:()=>f,Vj:()=>m});n(17333),n(98992),n(54520),n(62953);var a=n(96540),l=n(47444),o=n(83863);const i=(0,l.eU)({key:"alertConfiguration",default:o.XG}),r=(0,l.eU)({key:"alertConfigurationChart",default:null});var s=n(59303);const u=()=>(0,l.vc)(r),c=()=>(0,l.L4)(r),d=(0,l.gD)({key:"alertConfigurationSelector",get:e=>{let{get:t}=e;return t(i)},set:(e,t)=>{let{set:n}=e;n(i,(e=>({...e,...t})))}}),v=()=>(0,l.L4)(d),m=()=>(0,l.E0)(i),p=()=>{const[e,t]=v(),{detection:{method:n},metrics:a}=e;return{detectionMethod:n,setDetectionMethod:e=>t({detection:{method:e},metrics:{...a,lookup:{...a.lookup,aggregation:"variance"==e?o.Ro:o.NK}}})}},g=e=>{let{scope:t,setConfiguration:n,metrics:a,isComposite:l}=e;return e=>{const o=null!==e&&void 0!==e&&e.length?e.filter((e=>{let{value:t}=e;return t})):e;n({metrics:{...a,[t]:l||Array.isArray(o)?o:o.value?[o]:[]}})}},f=()=>{const[e,t]=v(),{metrics:n}=e,a=g({scope:"hosts",setConfiguration:t,metrics:n,isComposite:!0}),l=g({scope:"charts",setConfiguration:t,metrics:n,isComposite:!0}),o=g({scope:"chartLabels",setConfiguration:t,metrics:n,isComposite:!0}),i=g({scope:"os",setConfiguration:t,metrics:n});return{metrics:n,setLookup:e=>{let{aggregation:a,denoter:l,dimensions:o,timePeriod:i,options:r}=e;t({metrics:{...n,lookup:{...n.lookup,...a?{aggregation:a}:{},...l?{denoter:l}:{},...o?{dimensions:o}:{},...i?{timePeriod:i}:{},...r?{options:r}:{}}}})},setOn:e=>t({metrics:{...n,on:e}}),setHosts:a,setCharts:l,setChartLabels:o,setOs:i,setCalcActive:e=>t({metrics:{...n,calc:{...n.calc,active:e,...e?{}:{value:""}}}}),setCalcValue:e=>t({metrics:{...n,calc:{...n.calc,value:e}}}),setUnitsValue:e=>t({metrics:{...n,units:e}})}},h=()=>{const[e,t]=v(),{alertId:n,alertingConditions:a}=e,l=!!n,o=e=>n=>t({alertingConditions:{...a,interval:{...a.interval,[e]:n}}}),i=o("value"),r=o("unit"),s=e=>n=>t({alertingConditions:{...a,[e]:{...a[e],active:n}}}),u=s("delayNotification"),c=e=>n=>l=>o=>t({alertingConditions:{...a,[e]:{...a[e],[n]:{...a[e][n],[l]:o}}}}),d=c("delayNotification"),m=d("up"),p=m("value"),g=m("unit"),f=d("down"),h=f("value"),b=f("unit"),y=d("max"),C=y("value"),w=y("unit"),D=s("agentOptions"),O=c("agentOptions"),A=O("warningAlertsDuration"),N=A("value"),_=A("unit"),x=O("criticalAlertsDuration"),E=x("value"),I=x("unit"),k=e=>n=>t({alertingConditions:{...a,agentOptions:{...a.agentOptions,sendTo:{...a.agentOptions.sendTo,[e]:n}}}}),j=k("value"),S=k("clearNotifications"),M=e=>n=>t({alertingConditions:{...a,agentOptions:{...a.agentOptions,execScript:{...a.agentOptions.execScript,[e]:n}}}}),L=M("active"),V=M("path");return{isEdit:l,alertingConditions:a,setMainDenoter:e=>t({alertingConditions:{...a,denoter:e,critical:{...a.critical,denoter:e},warning:{...a.warning,denoter:e}}}),setIntervalValue:i,setIntervalUnit:r,setThreshold:(e,n)=>l=>t({alertingConditions:{...a,[e]:{...a[e],[n]:l}}}),setRecoveryThreshold:(e,n)=>l=>t({alertingConditions:{...a,[e]:{...a[e],recovery:{...a[e].recovery,[n]:l}}}}),setDelayNotificationActive:u,setDelayNotificationUpValue:p,setDelayNotificationUpUnit:g,setDelayNotificationDownValue:h,setDelayNotificationDownUnit:b,setDelayNotificationMaxDelayValue:C,setDelayNotificationMaxDelayUnit:w,setDelayNotificationMultiplier:e=>t({alertingConditions:{...a,delayNotification:{...a.delayNotification,multiplier:e}}}),setAgentOptionsActive:D,setAgentOptionsRepeatNotification:e=>t({alertingConditions:{...a,agentOptions:{...a.agentOptions,off:e}}}),setAgentOptionsWarningAlertsDurationValue:N,setAgentOptionsWarningAlertsDurationUnit:_,setAgentOptionsCriticalAlertsDurationValue:E,setAgentOptionsCriticalAlertsDurationUnit:I,setAgentOptionsSendToValue:j,setAgentOptionsSendToClearNotifications:S,setAgentOptionsExecScriptActive:L,setAgentOptionsExecScriptPath:V}},b=()=>{const[e,t]=v(),{metrics:{on:n},description:{templateName:l,templateDescription:o,summary:i}}=e;return(0,a.useEffect)((()=>{if(n){const{template:a,info:i}=(0,s.q7)({on:n,templateName:l,templateDescription:o});t({description:{...e.description,templateName:a,templateDescription:i}})}}),[n]),{templateName:l,templateDescription:o,summary:i,setTemplateName:n=>t({description:{...e.description,templateName:n}}),setTemplateDescription:n=>t({description:{...e.description,templateDescription:n}}),setSummary:n=>t({description:{...e.description,summary:n}})}}},59303:(e,t,n)=>{n.d(t,{L7:()=>r,m8:()=>o,pU:()=>i,q7:()=>y,sS:()=>A,we:()=>N});n(17333),n(3064),n(41393),n(14905),n(98992),n(54520),n(72577),n(81454),n(8872),n(62953);var a=n(83863),l=n(33829);const o=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return n=>{let{target:{checked:a}}=n;return e(t?!a:a)}},i=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return n=>e(t?!n:n)},r=e=>t=>{let{target:{value:n}}=t;return e(n)},s=function(){var e,t;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{alertId:l,alertingConditions:o={}}=n,{critical:i,warning:r}=o;return!!l?{...null!==i&&void 0!==i&&i.value?{crit:i.value}:{},...null!==r&&void 0!==r&&r.value?{warn:r.value}:{}}:i&&r&&null!==(e=i.denoter)&&void 0!==e&&e.value&&void 0!==i.value&&null!==(t=r.denoter)&&void 0!==t&&t.value&&void 0!==r.value?{crit:c({flavour:"critical",formula:a.OK.value,isFormula:i.isFormula,denoter:i.denoter,value:i.value,recovery:i.recovery}),warn:c({flavour:"warning",formula:a.OK.value,isFormula:r.isFormula,denoter:r.denoter,value:r.value,recovery:r.recovery})}:{}},u={critical:"$status == $CRITICAL",warning:"$status >= $WARNING"},c=e=>{let{flavour:t,formula:n=a.OK.value,isFormula:l,denoter:o,value:i,recovery:r}=e;const s=u[t];return l?i:null!==r&&void 0!==r&&r.value&&s?"$this ".concat(null===o||void 0===o?void 0:o.symbol," ((").concat(s,") ? (").concat(r.value,")) : (").concat(i,")"):"".concat(n," ").concat(null===o||void 0===o?void 0:o.symbol," (").concat(i,")")},d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{value:t,unit:n}=e;return"".concat(t).concat(null===n||void 0===n?void 0:n.symbol)},v=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value";return function(){let t=arguments.length>1?arguments[1]:void 0;const n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map((t=>t[e]));return t?n:n.join(" ")}},m=v(),p=v("label"),g=function(){let{aggregation:e,denoter:t,dimensions:n=[],timePeriod:a,options:l=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;const i=l.map((e=>{let{value:t}=e;return t})).join(" "),r=n.map((e=>{let{value:t}=e;return t})).filter(Boolean),s=r.length?"".concat((null===t||void 0===t?void 0:t.value)||"of"," ").concat(r.join(",")):"foreach"==(null===t||void 0===t?void 0:t.value)?"foreach *":null,u="anomalies"==o?"anomaly-rate":"";return{lookup:[null===e||void 0===e?void 0:e.value,null===a||void 0===a?void 0:a.after,i,s,u].filter(Boolean).join(" ")}},f=function(){let{active:e,up:t,down:n,multiplier:a,max:l}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!e||0==parseInt(null===t||void 0===t?void 0:t.value,10)&&0==parseInt(null===n||void 0===n?void 0:n.value,10))return{};const o=[...parseInt(null===t||void 0===t?void 0:t.value,10)>0?["up ".concat(d(t))]:[],...parseInt(null===n||void 0===n?void 0:n.value,10)>0?["down ".concat(d(n))]:[],...parseFloat(a)>0?["multiplier ".concat(a)]:[],...parseInt(null===l||void 0===l?void 0:l.value,10)>0?["max ".concat(d(l))]:[]];return o.length?{delay:o.join(" ")}:{}},h=function(){let{off:e,warningAlertsDuration:t,criticalAlertsDuration:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=[...e?["off"]:[],...!e&&null!==t&&void 0!==t&&t.value?["warning ".concat(d(t))]:[],...!e&&null!==n&&void 0!==n&&n.value?["critical ".concat(d(n))]:[]];return a.length?{repeat:a.join(" ")}:{}},b=function(){let{active:e,sendTo:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{value:n,clearNotifications:a}=t||{};return{...n?{to:n}:{},...e&&!a?{options:"no-clear-notification"}:{}}},y=e=>{let{templateName:t,templateDescription:n,on:a}=e;const o=(0,l.A)(),i=a?"".concat(a.split(".").join("_"),"_").concat(o):o;return{template:t||i,info:n||"Alert description"}},C=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return function(){var n;let{items:a=[],expression:l=""}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=null===(n=[t(a),l].join(" "))||void 0===n?void 0:n.trim();return o?{[e]:o}:{}}},w=C("hosts"),D=C("charts",(function(){return p(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],!0).reduce(((e,t)=>{var n;const a=(null===(n=/\.(.*?)@/.exec(t))||void 0===n?void 0:n[1])||t;return e.includes(a)||e.push(a),e}),[]).join(" ")})),O=C("chart labels",(e=>m(e,!0).map((e=>e.split(":").join("="))).join(" "))),A=function(){const e=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{detection:t,metrics:n={},description:a={},alertingConditions:l={}}=e,{on:o,hosts:i,os:r,charts:u,chartLabels:c,lookup:v,calc:p,units:y}=n,{templateName:C,templateDescription:A,summary:N}=a,{agentOptions:_={},interval:x={},delayNotification:E={}}=l,{execScript:I={},sendTo:k={}}=_;return{...C?{template:C}:{},...o?{on:o}:{},...w(i),...null!==r&&void 0!==r&&r.length?{os:m(r)}:{},...D(u),...O(c),...g(v,null===t||void 0===t?void 0:t.method),...null!==p&&void 0!==p&&p.value?{calc:p.value}:{},...y&&null!==p&&void 0!==p&&p.value?{units:y}:{},...x.value?{every:d(x)}:{},...s(e),..._.active&&I.active&&I.path?{exec:I.path}:{},...A?{info:A}:{},...N?{summary:N}:{},...f(E),..._.active?h(_):{},...b(_)}}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});return Object.entries(e).reduce(((e,t)=>{let[n,a]=t;return[...e,"".concat(n,": ").concat(a)]}),[]).join("\n")},N=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t,context:n="",calculation:l="",displayName:o="",configInfo:i="",critical:r="",warning:s="",lookupMethod:u="",lookupOptions:c=[],lookupAfter:d,lookupBefore:v,lookupDimensions:m="",summary:p}=e;return{...a.XG,...t?{alertId:t}:{},metrics:{...a.XG.metrics,on:n,lookup:{...a.XG.metrics.lookup,aggregation:Object.values(a.uZ).find((e=>{let{value:t}=e;return t==u})),dimensions:m.split(" ").map((e=>({label:e,value:e}))),options:Object.values(a.Pm).filter((e=>{let{value:t}=e;return c.includes(t)}))}},alertingConditions:{...a.XG.alertingConditions,critical:{value:r},warning:{value:s}},description:{summary:p,templateName:o,templateDescription:i}}}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/9400.6250bbf86c4fd3173de2.chunk.js b/src/web/gui/v2/9400.6250bbf86c4fd3173de2.chunk.js deleted file mode 100644 index 4b7c9ff18..000000000 --- a/src/web/gui/v2/9400.6250bbf86c4fd3173de2.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="2cdc8de5-2f78-4f07-abfe-b7e633a5a36c",e._sentryDebugIdIdentifier="sentry-dbid-2cdc8de5-2f78-4f07-abfe-b7e633a5a36c")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[9400],{79400:(e,t,l)=>{l.r(t),l.d(t,{default:()=>se});l(41393),l(81454);var n=l(96540),a=l(83199),o=l(4659),s=l(63450),r=l(58168),i=(l(62953),l(63950)),c=l.n(i),d=l(29217),u=l(78940);const m=e=>{let{scope:t,setScope:l=c(),isDisabled:o,...s}=e;return n.createElement(a.Flex,(0,r.A)({gap:3},s),Object.entries(u.Wu).map((e=>{let[s,{text:r,tooltip:i}]=e;return n.createElement(a.RadioButton,{key:s,checked:s===t,onChange:()=>l(s),disabled:o},n.createElement(d.A,{content:i,align:"bottom"},n.createElement(a.TextSmall,{color:"textDescription"},r)))})))};var p=l(54518),b=l(87659);const g=e=>{let{selectedKey:t,selectedValue:l,onAddHostLabel:o=c(),onRemoveHostLabel:s=c(),isDefault:r=!1,showPlaceholder:i=c(),isDisabled:u}=e;const[m,b]=(0,n.useState)(t||""),[g,h]=(0,n.useState)(l||""),E=()=>{m&&g&&(o({[m]:g}),i())};return n.createElement(a.Flex,{gap:2},n.createElement(p.A,{component:"input",onChange:b,onBlur:E,placeholder:"Host key",value:m,disabled:u||!r}),n.createElement(p.A,{component:"input",onChange:h,onBlur:E,placeholder:"Host value",value:g,disabled:u||!r||!m}),r?n.createElement(d.A,{content:"Save label pair",align:"bottom"},n.createElement(a.Button,{flavour:"borderless",disabled:!m||!g},n.createElement(a.Icon,{name:"check",color:"primary",size:"small"}))):n.createElement(d.A,{content:"Remove label pair",align:"bottom"},n.createElement(a.Button,{flavour:"borderless",onClick:()=>s(t)},n.createElement(a.Icon,{name:"x",color:"primary",size:"small"}))))},h=e=>{let{hostLabels:t,onAddHostLabel:l,onRemoveHostLabel:a}=e;return Object.entries(t).map((e=>{let[t,o]=e;return n.createElement(g,{key:t,onAddHostLabel:l,selectedKey:t,selectedValue:o,onRemoveHostLabel:a})}))},E=e=>{let{hostLabels:t,onAddHostLabel:l=c(),onRemoveHostLabel:o=c(),isEdit:s,isDisabled:r}=e;const i=!!Object.entries(t||{}).length,[d,,u]=(0,b.A)(!1);return n.createElement(a.Flex,{column:!0,gap:1},n.createElement(a.TextSmall,{color:"textLite"},"Host labels"),i&&n.createElement(h,{hostLabels:t,onAddHostLabel:l,onRemoveHostLabel:o}),(!i||d)&&n.createElement(g,{key:JSON.stringify(t),onAddHostLabel:l,isDefault:!0,showPlaceholder:u,isDisabled:r}),s&&!d&&i&&n.createElement(a.Flex,{justifyContent:"end"},n.createElement(a.Button,{flavour:"borderless",onClick:u},"Add host label")))};var v=l(99851);function f(){const e=new Date,t=e.getFullYear(),l=e.getMonth(),n=e.getDate(),a=new Date(0);return a.setFullYear(t,l,n+1),a.setHours(0,0,0,0),a}var C=l(51730),A=l(82526),x=l(27467);const S=Object.entries(u.SB).map((e=>{let[t,l]=e;return{label:l,value:t}})),D=f(),y=(0,C.o)((0,A.W)(D,{years:1})),k=e=>{let{duration:t,setDuration:l,setDate:o,endDate:s,isDisabled:r}=e;const i=(0,x.rW)("offset");return n.createElement(a.Flex,{gap:2},n.createElement(p.A,{component:"select",title:"Duration",onChange:l,options:S,placeholder:"Select duration",value:t,isDisabled:r}),"custom"===t.value&&n.createElement(a.Flex,{alignSelf:"end"},n.createElement(v.A,{isSinglePicker:!0,values:{singleDate:s},minDate:D,maxDate:y,utc:i,onChange:o,isPlaying:!1,accessorProps:u.Iv,padding:[4,0],width:"auto",accessorTooltipContent:"Select end date"})))};function I(){return(0,C.o)(Date.now())}const L=I(),O=f(),R=e=>{let{start:t,end:l,onChange:o,isDisabled:s,isEdit:r}=e;const[i,c]=(0,n.useState)(r?"schedule":u.SX),[m,p]=(0,n.useState)(u.DK),[b,g]=(0,n.useState)(0),h=(0,x.rW)("offset"),[E,S]=(0,n.useState)(t?new Date(t):r?null:L),[D,y]=(0,n.useState)(l?new Date(l):r?null:O),[R,w]=(0,n.useState)((0,C.o)((0,A.W)(E,{days:1})));(0,n.useEffect)((()=>{const e=(0,A.W)(E,{days:1});w(e),!r&&E>=D&&y(e)}),[E]),(0,n.useEffect)((()=>{o({start:E,end:D,scheduleOption:i,duration:m})}),[E,D,i,m]);const H=f(),N=(0,C.o)((0,A.W)(H,{years:1}));return n.createElement(a.Flex,{column:!0,gap:3},!r&&n.createElement(a.Flex,{gap:3},Object.entries(u.Yo).map((e=>{let[t,{text:l,tooltip:o}]=e;return n.createElement(a.RadioButton,{key:t,checked:t===i,onChange:()=>c(t),disabled:s},n.createElement(d.A,{content:o,align:"bottom"},n.createElement(a.TextSmall,{color:"textDescription"},l)))}))),"now"===i?n.createElement(k,{duration:m,setDuration:p,setDate:e=>{S(Date.now()),y(e)},endDate:D,isDisabled:s}):n.createElement(a.Flex,{gap:2},n.createElement(a.Flex,{column:!0,gap:2,flex:{grow:1,shrink:1},basis:0},n.createElement(a.TextSmall,null,"Start date"),n.createElement(v.A,{isSinglePicker:!0,values:{singleDate:new Date(E)},minDate:I(),maxDate:N,utc:h,onChange:e=>{S(e),g((e=>e+1))},isPlaying:!1,accessorProps:u.Iv,padding:[4,0],width:"auto",accessorTooltipContent:"Select start date"})),n.createElement(a.Flex,{column:!0,gap:2,flex:{grow:1,shrink:1},basis:0},n.createElement(a.TextSmall,null,"End date"),n.createElement(v.A,{key:b,isSinglePicker:!0,values:{singleDate:D?new Date(D):D},minDate:R,maxDate:N,utc:h,onChange:y,isPlaying:!1,accessorProps:u.Iv,padding:[4,0],width:"auto",accessorTooltipContent:"Select end date"}))))},w=e=>{let{content:t="Loading alerts..."}=e;return n.createElement(a.Flex,{height:45,alignItems:"center",justifyContent:"center"},n.createElement(a.Text,null,t))};var H=l(51719),N=(l(9391),l(17333),l(3064),l(98992),l(54520),l(72577),l(47767)),P=l(38819),F=l(22292),_=l(46741),T=l(3914),B=l(67990),M=l(71856),j=l(88982),U=l(29848),W=l(36021),z=l(47444),K=l(45860);const V=(0,z.K0)({key:"spaceAlertMetas",get:e=>()=>(0,K.z5)(e)});var J=l(64118),Y=l(10368),G=l(79394),Z=l(71835);const q={name:"",rooms:[],nodes:[],hostLabels:null,alertNames:[],alertContexts:[],alertRoles:[],startsAt:null,lastsUntil:null},X=e=>{let{id:t,name:l,...n}=e;return{label:l,value:t,...n}},$=e=>({label:e,value:e}),Q=e=>{var t;let{rooms:l,nodes:n,hostLabels:a,startsAt:o,lastsUntil:s,...r}=e;return{...r,scope:r.accountId?"personal":u._V,canSubmit:!(null===r||void 0===r||null===(t=r.name)||void 0===t||!t.length),rooms:null!==l&&void 0!==l&&l.length?l.map(X):[M.PT],...null!==n&&void 0!==n&&n.length?{nodes:n.map(X).filter((e=>{let{notAvailable:t}=e;return!t}))}:{},...a?{hostLabels:a}:{},...o?{startsAt:o}:{},...s?{lastsUntil:s}:{}}},ee=e=>{let{value:t}=e;return t},te=(e,t)=>{const{scope:l,rooms:n,nodes:a,hostLabels:o,startsAt:s,lastsUntil:r,scheduleOption:i,duration:c,...d}=e,m=n.filter((e=>{let{value:t}=e;return t!==u.jH.value})).map(ee),p=a.map(ee),b=!!Object.keys(o||{}).length,{start:g,end:h}=(e=>{let{startsAt:t,lastsUntil:l,scheduleOption:n,duration:a}=e;if("schedule"==n)return{start:t,end:l};let o,s=Date.now();switch(a){case"oneHour":o=(0,A.W)(s,{hours:1});break;case"sixHours":o=(0,A.W)(s,{hours:6});break;case"twelveHours":o=(0,A.W)(s,{hours:12});break;case"oneDay":o=(0,A.W)(s,{days:1});break;case"custom":o=l}return{start:s,...o?{end:o}:{}}})({startsAt:s,lastsUntil:r,scheduleOption:i,duration:c});return{...d,..."personal"==l?{account_id:t}:{},...m.length?{room_ids:m}:{},...p.length?{node_ids:p}:{},...b?{host_labels:o}:{},...g?{starts_at:new Date(g).toISOString()}:{},...h?{lasts_until:new Date(h).toISOString()}:{}}},le=[{label:"CRITICAL",value:"CRITICAL"},{label:"WARNING",value:"WARNING"},{label:"CLEAR",value:"CLEAR"}],ne=e=>{var t;let{rule:l,onClose:a,isEdit:o}=e;const s=(0,F.NJ)(),r=(0,N.Zp)(),i=(0,T.bq)(),[c,d]=(0,b.A)(),m=(0,j.A)({all:!0}),p=null===(t=m.find((e=>{let{label:t}=e;return"All nodes"==t})))||void 0===t?void 0:t.value,{loaded:g,value:h,hasError:E}=(()=>{var e;const t=(0,T.vt)(),l=(0,z.xf)(V(t));return{loaded:"loading"!==l.state,value:(null===(e=l.contents)||void 0===e?void 0:e.data)||K.rx,hasError:"hasError"===l.state}})(),v=(0,W._B)(),f=(0,W.FU)(),C=o?f:v,A=(0,U.ly)(),x=(0,W.Lz)(),[,,S]=(0,Z.A)(),[D,y]=(0,n.useState)({alertNameOptions:[],alertContextOptions:[],alertRoleOptions:[]}),{alertNameOptions:k,alertContextOptions:I,alertRoleOptions:L}=D,[O,R]=(0,n.useState)((()=>({...q,...Q(l)}))),[w,H]=(0,n.useState)([]),{loaded:M,value:X}=(0,J.I8)({alertNames:O.alertNames,contexts:O.alertContexts,allowEmptyName:!0});(0,n.useEffect)((()=>{const e=(X||[]).filter((e=>!((O.alertNames||[]).length&&!O.alertNames.includes(e.name))&&(!((O.alertContexts||[]).length&&!O.alertContexts.includes(e.context))&&!((O.nodeIds||[]).length&&!O.nodeIds.includes(e.nodeId))))).map((e=>{let{instance:t,instanceName:l}=e;return{value:t,label:l}}));H(e)}),[M,X,O.alertNames,O.alertContexts,O.nodeIds]);const ee=(0,B.vv)(O.roomIds||[p]),ne=(0,n.useCallback)((e=>R((t=>({...t,scope:e})))),[]),ae=(0,n.useCallback)((e=>R((t=>({...t,name:e,canSubmit:!(null===e||void 0===e||!e.length)})))),[]),oe=(0,n.useCallback)((function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const l=(e=>e.length<=1?e:e[e.length-1].value==u.jH.value?[u.jH]:e.filter((e=>{let{value:t}=e;return!!t})))(e),n=l.map((e=>{let{value:t}=e;return t||p})),a=t.length{let{value:l}=e;return!t.includes(l)}))[0]:null;R((e=>({...e,rooms:l,roomIds:n,lastRoomAdded:a||null})))}),[p]),se=(0,n.useCallback)((e=>R((t=>({...t,nodeIds:e.map((e=>{let{value:t}=e;return t})),nodes:e})))),[]),re=(0,n.useCallback)((e=>R((t=>({...t,hostLabels:{...t.hostLabels,...e}})))),[]),ie=(0,n.useCallback)((e=>R((t=>{const l={...t.hostLabels};return delete l[e],{...t,hostLabels:l}}))),[]),ce=(0,n.useCallback)((e=>t=>R((l=>({...l,[e]:t.map((e=>{let{value:t}=e;return t}))})))),[]),de=(0,n.useCallback)((e=>{let{start:t,end:l,scheduleOption:n,duration:a}=e;return R((e=>({...e,startsAt:t,lastsUntil:l,scheduleOption:n,duration:a.value})))}),[]),ue=(0,n.useCallback)((()=>{d(),C(te(O,s)).then((()=>{a(),x(),A()})).catch((e=>S((0,Y.H)(e)))).finally(d)}),[O,s]),me=(0,G.A)();(0,n.useEffect)((()=>{var e;const t=(null===(e=O.lastRoomAdded)||void 0===e?void 0:e.value)||p;let l=null;return t&&(l=me(t)),()=>{var e;return!(null===(e=l)||void 0===e||!e.cancel)&&l.cancel()}}),[O.roomIds,me]),(0,n.useEffect)((()=>{if(g){const{contexts:e,names:t,roles:l}=h||{};y({alertNameOptions:t?t.map($):[],alertContextOptions:e?e.map($):[],alertRoleOptions:l?l.map($):[]})}}),[g]),(0,n.useEffect)((()=>{const e=(0,P.PP)(),t=(()=>{const{silencingRulePrefill:e}=(0,P.PP)();if(!e)return{};let t={};try{t=JSON.parse(e)}catch(l){}return t})(),{alertName:l,nodeId:n,context:a,instance:o,roomId:s}=t;if(s){const e=m.filter((e=>{let{value:t}=e;return t==s}));e&&oe(e)}if(l&&R((e=>({...e,alertNames:[l]}))),a&&R((e=>({...e,alertContexts:[a]}))),o&&R((e=>({...e,alertInstances:[o]}))),n){const e=ee.filter((e=>{let{value:t}=e;return t==n}));e&&se(e)}(0,P.Z8)({...e,silencingRulePrefill:""})}),[R,ce,se,ee]);const pe=(0,_.JT)("space:CreatePersonalSilencingRule"),be=(0,n.useCallback)((()=>r("/spaces/".concat(i,"/settings/billing"))),[i]);return{state:O,onScopeChange:ne,onRuleNameChange:ae,onRoomsSelectionChange:oe,roomOptions:m,onNodesSelectionChange:se,nodesOptions:ee,alertMetasLoaded:g,alertMetas:h,alertNameOptions:k,alertContextOptions:I,alertInstancesEnabled:!0,alertInstancesOptions:w,alertRoleOptions:L,alertStatusOptions:le,alertMetasError:E,onAlertValueChange:ce,onAddHostLabel:re,onRemoveHostLabel:ie,onDatesChange:de,loading:c,onSave:ue,spaceCreatePersonalSilencingRule:pe,onUpdateButtonClick:be}},ae=e=>null!==e&&void 0!==e&&e.length?e.map($):[],oe=()=>n.createElement(a.Box,{as:"hr",height:"1px",width:"100%",sx:{borderWidth:"1px 0px 0px 0px",borderColor:"borderSecondary",borderStyle:"solid"}}),se=e=>{let{rule:t={},onClose:l,isEdit:r}=e;const{state:i,onScopeChange:c,onRuleNameChange:u,onRoomsSelectionChange:b,roomOptions:g,onNodesSelectionChange:h,nodesOptions:v,alertMetasLoaded:f,alertNameOptions:C,alertContextOptions:A,alertInstancesEnabled:x,alertInstancesOptions:S,alertRoleOptions:D,alertStatusOptions:y,onAlertValueChange:k,onAddHostLabel:I,onRemoveHostLabel:L,onDatesChange:O,loading:N,onSave:P,spaceCreatePersonalSilencingRule:F,onUpdateButtonClick:_}=ne({rule:t,onClose:l,isEdit:r});return n.createElement(a.Modal,{onEsc:l,backdropProps:{backdropBlur:!0}},n.createElement(s.$m,{style:{maxHeight:"800px"}},n.createElement(a.ModalHeader,{padding:[6,4,3]},n.createElement(a.Flex,{column:!0,gap:2},n.createElement(a.Flex,{flex:!0,alignItems:"center",justifyContent:"between"},n.createElement(a.H4,null,"Add silencing rule"),l&&n.createElement(s.Oj,{onClose:l})),n.createElement(a.Text,null,"Define an alert notification silencing rule that will apply to all users or just you."," ",n.createElement(o.A,{"data-ga":"alert-silencing::click-link-docs::rule-modal","data-testid":"silencing-rules-doc",href:"https://learn.netdata.cloud/docs/alerts-and-notifications/notifications/netdata-cloud-notifications/manage-alert-notification-silencing-rules",rel:"noopener noreferrer",target:"_blank"},"Learn how to configure silencing rules.")),!F&&n.createElement(H.A,null))),n.createElement(a.ModalBody,{padding:[0]},n.createElement(s.fn,null,n.createElement(a.Flex,{column:!0,gap:3},n.createElement(m,{scope:i.scope,setScope:c,padding:[0,0,1,0],isDisabled:!F}),n.createElement(p.A,{component:"input",onChange:u,placeholder:"Add rule name",title:"Rule name*",value:i.name,disabled:!F}),n.createElement(p.A,{component:"select",isMulti:!0,onChange:e=>b(e,i.roomIds),options:g,placeholder:"Select rooms",title:"Rooms*",value:i.rooms,isDisabled:!F}),n.createElement(p.A,{component:"select",isMulti:!0,onChange:h,options:v,placeholder:"Select nodes",title:"Nodes",value:i.nodes,isDisabled:!F||!v.length}),n.createElement(E,{hostLabels:i.hostLabels,onAddHostLabel:I,onRemoveHostLabel:L,isEdit:r,isDisabled:!F}),f?n.createElement(n.Fragment,null,n.createElement(oe,null),n.createElement(p.A,{component:"select",isMulti:!0,onChange:k("alertNames"),options:C,placeholder:"Select alert name",title:"Alert name",value:ae(i.alertNames),isDisabled:!F}),n.createElement(p.A,{component:"select",isMulti:!0,onChange:k("alertContexts"),options:A,placeholder:"Select alert context",title:"Alert context",value:ae(i.alertContexts),isDisabled:!F}),n.createElement(p.A,{component:"select",isMulti:!0,onChange:k("alertInstances"),options:S,placeholder:"Select alert instance",title:"Alert instance",value:ae(i.alertInstances),isDisabled:!F||!x}),n.createElement(p.A,{component:"select",isMulti:!0,onChange:k("severities"),options:y,placeholder:"Select alert status",title:"Alert status",value:ae(i.severities),isDisabled:!F}),n.createElement(p.A,{component:"select",isMulti:!0,onChange:k("alertRoles"),options:D,placeholder:"Select alert role",title:"Alert role",value:ae(i.alertRoles),isDisabled:!F})):n.createElement(w,null),n.createElement(oe,null),n.createElement(R,{start:i.startsAt,end:i.lastsUntil,onChange:O,isEdit:r,isDisabled:!F}))),n.createElement(s.fn,{alignItems:"end",justifyContent:"center"},n.createElement(a.Flex,{gap:4},n.createElement(a.Button,{flavour:"borderless",label:"Cancel",onClick:l,disabled:N}),F?n.createElement(d.A,{content:r?"Update the rule":"Create the rule",align:"bottom"},n.createElement(a.Button,{label:"OK",onClick:P,"data-ga":"alert-silencing::click-save-".concat(r?"edit":"new","-rule::rule-modal"),"data-testid":"saveRule-button",textTransform:"uppercase",isLoading:N,disabled:N||!i.canSubmit})):n.createElement(d.A,{content:"Update to a paid plan in order to be able to create silencing rules",align:"bottom"},n.createElement(a.Button,{label:"Upgrade!",onClick:_})))))))}},51719:(e,t,l)=>{l.d(t,{A:()=>i});var n=l(58168),a=l(96540),o=l(83199),s=l(54856),r=l(3914);const i=e=>{const t=(0,r.dg)();return a.createElement(o.Flex,(0,n.A)({gap:2,alignItems:"center"},e),a.createElement(o.Icon,{size:"small",color:"warning",name:"warning_triangle"}),a.createElement(o.Text,null,"This feature is only available to paid plans"),t?null:a.createElement(s.A,null))}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/9473.4fd4742ffb6b5348bea8.chunk.js b/src/web/gui/v2/9473.4fd4742ffb6b5348bea8.chunk.js deleted file mode 100644 index ec6f0f2ae..000000000 --- a/src/web/gui/v2/9473.4fd4742ffb6b5348bea8.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="d8fef4ac-14dc-4d3b-bf8b-36c3bcc25e90",e._sentryDebugIdIdentifier="sentry-dbid-d8fef4ac-14dc-4d3b-bf8b-36c3bcc25e90")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[9473],{36196:(e,t,a)=>{a.d(t,{A:()=>y});var n=a(58168),o=a(96540),l=a(22332),r=a(10534),c=a(89380),s=a(25369),i=a(39360),d=a(95662),u=a(99891),m=a(49096),g=a(74487),p=a(64131);const h=(0,o.forwardRef)(((e,t)=>{let{width:a,height:l,...r}=e;return o.createElement(c.ChartWrapper,{width:a,height:l},o.createElement(p.N1,(0,n.A)({hasHeader:!1,hasFilters:!1,hasFooter:!1,width:a,height:l},r,{ref:t})))})),f=(0,r.default)(h,{tile:!0}),E={dygraph:p.Ay,easypiechart:u.Ay,gauge:i.Ay,number:m.Ay,groupBoxes:s.Ay,d3pie:d.Ay,bars:g.Ay},v=e=>{const t=(0,l.useChart)(),a=(0,l.useAttributeValue)("sparkline"),r=(0,l.useAttributeValue)("chartLibrary"),c=(0,o.useMemo)((()=>t?a?f:E[r]:null),[t,r,a]);return c?o.createElement(c,(0,n.A)({},e,{chart:t})):null},y=(0,l.withChartProvider)((0,o.memo)(v))},85686:(e,t,a)=>{a.d(t,{A:()=>d});var n=a(96540),o=a(8711),l=a(83199),r=a(6586),c=a(12602);const s=(0,o.default)(l.Flex).withConfig({displayName:"restrictedContentMessage__StyledBox",componentId:"sc-wbsw81-0"})(["transform:translate(-50%,-50%);"]),i={node:"This node is locked so you can't see the Single Node dashboard.",alert:"This node is locked so you can't see the full alert details. ",dashboard:"This dashboard is locked so you can't see it."},d=e=>{let{flavour:t="node"}=e;return n.createElement(s,{column:!0,width:"100%",gap:2,alignItems:"center",position:"absolute",top:"50%",left:"50%",padding:[4],round:2},n.createElement(l.TextBigger,null,i[t]||""),n.createElement(c.A,null,n.createElement(l.TextBig,{color:"primary"},"Upgrade for no limitations!")),n.createElement(l.TextBig,null,"or"),n.createElement(r.A,null,n.createElement(l.TextBig,{color:"primary"},"Change your active node selection to unlock it.")))}},40267:(e,t,a)=>{a.d(t,{A:()=>l});var n=a(96540),o=a(83199);const l=e=>{let{flavour:t,icon:a,children:l}=e;return n.createElement(o.Pill,{icon:a,textProps:{textTransform:"capitalize"},flavour:t},l)}},4974:(e,t,a)=>{a.d(t,{A:()=>d});a(62953);var n=a(96540),o=a(83199),l=a(64118),r=(a(25440),a(26655));var c=a(4659),s=a(69765),i=a(51913);const d=e=>{let{alertId:t}=e;const a=(0,l.JL)(t),{name:d="unknown alert"}=a,[u,m]=(e=>{const[t,a]=(0,n.useState)(!0),o="".concat("https://community.netdata.cloud/t","/").concat(null===e||void 0===e?void 0:e.replace(/[._]/g,"-"));return(0,n.useEffect)((()=>{e&&r.A.get(o).then((()=>a(!1))).catch((()=>a(!0)))}),[e]),[o,t]})(d),g=(0,s.ID)(),[,p]=(0,i.bg)(),h=(0,n.useMemo)((()=>({alignSelf:"start",onClick:()=>p({roomId:g,alert:a})})),[u,m,p]);return n.createElement(c.A,h,"Learn more about this alert",!m&&n.createElement(o.Icon,{name:"arrow_left",rotate:2,size:"small",margin:[0,0,-.75,1],color:"success"}))}},43407:(e,t,a)=>{a.d(t,{A:()=>r});var n=a(58168),o=a(96540),l=a(83199);const r=e=>{let{iconName:t,iconSize:a,children:r,...c}=e;return o.createElement(l.Flex,(0,n.A)({gap:2,alignItems:"center"},c),o.createElement(l.Icon,(0,n.A)({name:t,color:"textLite"},a&&{height:a,width:a})),o.createElement(l.Text,{strong:!0},r))}},7660:(e,t,a)=>{a.d(t,{A:()=>u});var n=a(58168),o=a(96540),l=a(83199),r=a(64118),c=a(21290),s=a(45976),i=a(52768);const d=e=>{let{label:t,testid:a,status:n,value:r,when:d,units:u}=e;const{localeTimeString:m,localeDateString:g}=(0,c.$j)(),p=(0,o.useMemo)((()=>{const e=new Date(1e3*d);return e&&"".concat(g(e,{long:!1})," ").concat(m(e,{secs:!0}))}),[d,g,m]),h=(0,i.J4)(r,u);return o.createElement(l.Flex,{gap:2,alignItems:"center"},o.createElement(l.Flex,{width:"100px"},o.createElement(l.TextSmall,null,t)),o.createElement(l.Flex,{gap:2,alignItems:"center"},o.createElement(l.TextSmall,{color:"text","data-testid":"".concat(a,"-dateTime")},p),o.createElement(s.A,{loaded:!0,status:n,valueWithUnit:h,"data-testid":"".concat(a,"-value")})))},u=e=>{let{alertId:t,...a}=e;const{fullyLoaded:c=!1,units:s,lastStatusChangeValue:i,lastStatusChange:u,status:m,lastUpdated:g,value:p,prevStatus:h,prevValue:f,prevDuration:E}=(0,r.JL)(t);return c?o.createElement(l.Flex,(0,n.A)({gap:2,column:!0,"data-testid":"alertValues"},a),g&&o.createElement(d,{label:"Latest",status:m,testid:"alertValues-latest",value:p,when:g,units:s}),u&&o.createElement(d,{label:"CLEAR"===m?"WARNING"===h||"CRITICAL"===h?"Cleared":"Initialized":"Triggered",status:m,testid:"alertValues-triggered",value:i,when:u,units:s})):null}},11164:(e,t,a)=>{a.d(t,{A:()=>E});var n=a(96540),o=a(36196),l=a(63950),r=a.n(l),c=a(83199),s=a(57605),i=a(28738),d=a(3914),u=a(69765),m=a(80925),g=a(47731),p=a(52768);const h=e=>t=>"alert-modal::".concat(e.getAttribute("id"),"::").concat(t),f={width:"108px",height:"77px"},E=e=>{let{instance:t,context:a,isFormattedValueLoaded:l,nodeId:E,status:v,lastStatusChange:y,formattedLastStatusChangeValue:b,lastUpdated:x,spaceId:w,roomId:A,setChartSelected:I=r()}=e;const k=(0,d.vt)();w=w||k;const C=(0,u.ID)();A=A||C;const S=(0,g.J)(),T=(0,m.e)(),N=(0,s.A)();(0,n.useEffect)((()=>(N(),N)),[]);const L=(0,d.dg)(),_=(0,n.useMemo)((()=>{if(!l)return;const e=T.makeChart({attributes:{nodeId:E,contextScope:[a],selectedInstances:t&&E?["".concat(t,"@").concat(E)]:[],id:t,roomId:A,enabledResetRange:!1,overlays:{proceeded:{type:"proceeded"},alarm:{type:"alarm",status:v,value:b,when:y}},host:L?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(w,"/rooms/").concat(A),nodesScope:[E],toolboxElements:[],sparkline:S,hasToolbox:!S},makeTrack:h});return T.getRoot().appendChild(e),e}),[t,l]);return(0,p.Vt)({lastUpdated:x,lastStatusChange:y},l),(0,n.useEffect)((()=>(I((e=>({...e,..._}))),()=>{_&&_.destroy(),I(null)})),[_]),n.createElement(c.Flex,{flex:!1,width:"100%",height:75},l&&_?n.createElement(o.A,{"data-chartid":t,chart:_,hasHeader:!S,hasFooter:!S}):n.createElement(i.A,{iconProps:f,title:"Loading chart..."}))}},87815:(e,t,a)=>{a.d(t,{A:()=>i});var n=a(58168),o=(a(25440),a(96540)),l=a(8711),r=a(83199),c=a(52768);const s=l.default.div.withConfig({displayName:"timeCell__TimeBox",componentId:"sc-1k785pi-0"})(["display:flex;flex-direction:column;align-items:start;justify-content:center;"]),i=e=>{let{rawTime:t,secs:a,long:l,nowrap:i=!1,...d}=e;const{timeAgo:u,formattedDate:m=""}=(0,c.lT)({rawTime:t,secs:a,long:l});return o.createElement(s,d,o.createElement(r.TextSmall,null,u),o.createElement(r.TextMicro,(0,n.A)({color:"textLite"},i&&{whiteSpace:"nowrap"}),m?null===m||void 0===m?void 0:m.replace(/ /g," - "):""))}},5871:(e,t,a)=>{a.d(t,{A:()=>D});var n=a(96540),o=a(83199),l=a(64118),r=a(87292),c=a(8711);const s=c.default.div.withConfig({displayName:"styled__StyledAlertTypeIndicator",componentId:"sc-19nk935-0"})(["width:",";height:",";border-radius:",";background-color:",";"],(0,o.getSizeBy)(1),(0,o.getSizeBy)(1),(0,o.getSizeBy)(1),(e=>{let{critical:t,theme:a}=e;return(0,o.getColor)(t?"error":["yellow","sunglow"])({theme:a})})),i=c.default.a.withConfig({displayName:"styled__StyledLink",componentId:"sc-19nk935-1"})(["padding:",";text-decoration:none;color:",";&:visited{color:",";}&:hover{text-decoration:none;}"],(e=>{let{padding:t}=e;return null!==t&&void 0!==t?t:"0"}),(0,o.getColor)("success"),(0,o.getColor)("success"));var d=a(29217);const u=e=>{let{title:t,value:a,testId:l,status:c}=e;return a?n.createElement(n.Fragment,null,n.createElement(o.Flex,{justifyContent:"between"},n.createElement(o.Flex,{gap:1,alignItems:"center"},n.createElement(s,{critical:"critical"===c}),n.createElement(o.H6,{color:"textDescription"},t)),n.createElement(o.Flex,{gap:1,alignItems:"center"},n.createElement(o.TextSmall,{color:"textDescription"},"More details about"," ",n.createElement(o.TextSmall,{strong:!0,color:"textDescription"},"$this")," ","command"),n.createElement(d.A,{content:"The $this value comes from the DB Lookup or the Calculation above",isBasic:!0,plain:!0},n.createElement(o.Flex,{margin:[-.5,0,0]},n.createElement(o.Icon,{name:"informationPress",color:"textLite",width:"16px",height:"16px"}))))),n.createElement(r.Ay,{"data-testid":l},a)):null};var m=a(31826),g=a(93001),p=a(29708);const h=e=>{if("string"===typeof e&&(e=parseInt(e,10)),0===e)return"now";const t=new Date;return e<0?(0,m.k)((0,g.p)(t,e),t,{addSuffix:!0}):(0,m.k)((0,p.W)(t,e),t,{addSuffix:!0})},f=e=>{const{instance:t,lookupAfter:a,lookupBefore:o,lookupDimensions:r,lookupMethod:c,lookupOptions:s}=(0,l.JL)(e);return(0,n.useMemo)((()=>a?(e=>{let{lookupOptions:t,lookupDimensions:a,lookupMethod:n,lookupAfter:o,lookupBefore:l,instance:r}=e,c="of all values";if(a){const e=a.split(","),t=e.length>1?"of the sum of dimensions":"of all values of dimension";c="".concat(t," ").concat(e.join(", "))}const s=t?", with options ".concat(t):"";return"".concat(n," ").concat(c," of chart ").concat(r,", starting ").concat(h(o+l)," and up to ").concat(h(l)).concat(s)})({lookupOptions:s,lookupDimensions:r,lookupMethod:c,lookupAfter:a,lookupBefore:o,instance:t}):""),[a,t])};var E=a(43407);const v=e=>{let{heading:t,value:a,testId:l}=e;return a&&a.length?n.createElement(o.Flex,{column:!0,gap:3},t&&n.createElement(o.H6,{textTransform:"uppercase",color:"textDescription"},t),n.createElement(r.Ay,{"data-testid":l},a)):null},y=(0,n.memo)(v);var b=a(25232),x=a(58168);const w=e=>{let{iconName:t,category:a,iconSize:l="16px",value:r,testid:c}=e;return r?n.createElement(o.Flex,{alignItems:"center",gap:1},n.createElement(o.Flex,{alignItems:"center",gap:1,basis:"100px"},n.createElement(o.Icon,(0,x.A)({name:t,color:"textLite"},l&&{height:l,width:l})),n.createElement(o.TextSmall,{whiteSpace:"nowrap",color:"textDescription"},a,":")),n.createElement(o.TextSmall,{strong:!0,"data-testid":c},r)):null},A=e=>{let{id:t,testid:a}=e;const{calculation:r,warning:c,critical:i,updateEvery:d}=(0,l.JL)(t),m=f(t),g=(0,n.useMemo)((()=>(0,b.Ay)(r)),[r]);return n.createElement(o.Flex,{column:!0,gap:4},n.createElement(E.A,{iconName:"code"},"Configuration"),n.createElement(y,{heading:"DB lookup",value:m,testId:"".concat(a,"-lookup")}),n.createElement(y,{heading:"Calculation",value:g,testId:"".concat(a,"-calculation")}),n.createElement(o.H6,{textTransform:"uppercase",color:"textDescription"},"Severity Conditions"),n.createElement(o.Flex,{column:!0,gap:2},n.createElement(u,{title:"Warning when",value:c,testId:"".concat(a,"-warningWhen"),status:"warning"},n.createElement(s,{critical:!1})),n.createElement(u,{title:"Critical when",value:i,testId:"".concat(a,"-criticalWhen"),status:"critical"},n.createElement(s,{critical:!0}))),n.createElement(o.H6,{textTransform:"uppercase",color:"textDescription"},"Check"),n.createElement(w,{iconName:"clock_hollow",category:"Check every",value:"".concat(d," seconds"),testid:"".concat(a,"-checkEvery")}))},I=(0,n.memo)(A);var k=a(47762),C=a(92861),S=a(40267),T=a(87815),N=a(45976);const L=e=>{let{isHighlighted:t,lastStatusChangeValue:a,lastStatusChange:l,units:r,status:c,nodeName:s,...i}=e;return n.createElement(o.Flex,(0,x.A)({background:t&&"modalTabsBackground",border:{side:"all",color:"borderSecondary"},color:"textDescription",justifyContent:"between",padding:[4],round:!0},i),n.createElement(o.Flex,{column:!0,justifyContent:"between",gap:2},s&&n.createElement(o.Text,{strong:!0},s),n.createElement(T.A,{rawTime:l,secs:!0,"data-testid":"nodeItem-lastStatusChange"})),n.createElement(o.Flex,{height:5,gap:2,alignItems:"center",alignSelf:"start"},n.createElement(d.A,{content:"CLEAR"===c?"Cleared value":"Triggered value",align:"bottom"},n.createElement(o.Box,null,n.createElement(N.A,{loaded:!0,status:c,units:r,value:a,"data-testid":"nodeItem-alertValue"}))),n.createElement(S.A,{flavour:c,icon:"alarm_bell","data-testid":"alertView-alertPill-value"},c)))};var _=a(38966);const F=e=>{let{children:t}=e;return n.createElement(o.Flex,{gap:2,column:!0},t)},D=e=>{let{id:t,nodeName:a,testid:r="alertDetailsModal"}=e;const{class:c,instanceName:s,component:d,family:u,nodeId:m,type:g,lastStatusChangeValue:p,lastStatusChange:h,units:f,status:v,notificationType:y}=(0,l.JL)(t),b=(0,k.xY)(m,"name");return n.createElement(o.Flex,{column:!0,gap:4,padding:[0,0,4,0]},n.createElement(E.A,{iconName:"information",margin:[0,0,0,-.5]},"Alert Info"),n.createElement(F,null,n.createElement(w,{iconName:"nodes_hollow",category:"Node",value:a||b,testid:"".concat(r,"-hostname")}),n.createElement(w,{iconName:"charts_view",category:"Instance",value:s,testid:"".concat(r,"-chartId")}),n.createElement(w,{iconName:"data_retention",category:"Type",value:g,testid:"".concat(r,"-type")}),n.createElement(w,{iconName:"last_week",category:"Hostname"}),n.createElement(w,{iconName:"metrics",category:"Component",value:d,testid:"".concat(r,"-component")}),n.createElement(w,{iconName:"applications_hollow",category:"Family",value:u,testid:"".concat(r,"-family")}),n.createElement(w,{iconName:"networkingStack",category:"Class",value:c,testid:"".concat(r,"-class")}),n.createElement(w,{iconName:"incident_manager",category:"Event ID",testid:"".concat(r,"-eventId")})),n.createElement(I,{id:t,testid:r}),n.createElement(E.A,{iconName:"nodes_hollow",iconSize:"20px"},"Instance Values - Node Instances"),n.createElement(o.Flex,{column:!0,gap:2},"agent"!==y&&n.createElement(o.Text,{color:"textDescription"},"A node may be claimed through multiple instances on the cloud (streaming through parent) and Netdata aggregates the alerts from all the instances and displays a single Active alert based on the highest severity, latest change."),n.createElement(L,{lastStatusChangeValue:p,lastStatusChange:h,units:f,status:v,nodeName:b,isHighlighted:!0})),n.createElement(E.A,{iconName:"gear",iconSize:"20px"},"Edit Alert"),n.createElement(o.Flex,{gap:2},n.createElement(_.A,{alertId:t,nodeId:m,small:!0,"data-testid":"".concat(r,"-edit-alert-button-footer")}),n.createElement(i,{href:C.UW,target:"_blank",padding:"0 4px 0 0","data-testid":"".concat(r,"-editAlertConfig-link"),"data-ga":"alert-modal::click-edit::alerts-view"},"Visit the documentation",n.createElement(o.Icon,{name:"arrow_left",rotate:2,size:"small",margin:[0,0,-.75,1],color:"success"}))))}},45976:(e,t,a)=>{a.d(t,{A:()=>s});var n=a(58168),o=a(96540),l=a(83199),r=a(20081);const c={critical:{background:"errorSemi",border:{side:"all",color:"error"},color:"error"},warning:{background:"warningSemi",border:{side:"all",color:"warning"},color:"warning"},cleared:{background:"successSemi",border:{side:"all",color:"success"},color:"success"},default:{background:"generic",border:{side:"all",color:"border"},color:"text"}},s=e=>{let{loaded:t,status:a,units:s,value:i,valueWithUnit:d,...u}=e;const{background:m,border:g,color:p}=c[a]||c.default,h=(0,o.useMemo)((()=>{if(d)return d;if(void 0===i)return"-";const e=(0,r.W)(i);return"".concat(e," ").concat(s||"-")}),[i,d,s]);return o.createElement(l.Flex,(0,n.A)({background:m,border:g,padding:[.5,2],round:9,width:{min:10},justifyContent:"center"},u),o.createElement(l.TextSmall,{color:p,strong:!0,whiteSpace:"nowrap",truncate:!0},t?h:"-"))}},51913:(e,t,a)=>{a.d(t,{ZV:()=>b,bg:()=>h,vQ:()=>p,Ws:()=>f,Gp:()=>y,MY:()=>v});a(17333),a(3064),a(41393),a(98992),a(54520),a(72577),a(81454),a(62953);var n=a(96540),o=a(47444),l=a(26655),r=a(49286);var c=a(3914),s=a(69765);const i=(0,o.eU)({key:"assistantAlert",default:null}),d=(0,o.eU)({key:"assistantAlertsAtom",default:[]}),u=(0,o.eU)({key:"assistantChatAtom",default:{open:!1,messages:[]}});var m=a(33829);const g=(0,o.K0)({key:"assistantAlertSelector",get:e=>{let{space:t,room:a,alert:n,node:o,chart:r}=e;return()=>(e=>{let{space:t,room:a,alert:n,node:o,chart:r}=e;return l.A.post("/api/v1/troubleshoot",{space:t,room:a,alarm:n,node:o,chart:r})})({space:t,room:a,alert:n,node:o||"dummy-node-id",chart:r||"dummy-chart-id"})},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),p=e=>{var t;let{alert:a,node:n,chart:l}=e;const r=(0,c.vt)(),i=(0,s.ID)(),d=(0,o.xf)(g({space:r,room:i,alert:a,node:n,chart:l}));return{loaded:"loading"!==d.state,value:null===(t=d.contents)||void 0===t?void 0:t.data,hasError:"hasError"===d.state}},h=()=>(0,o.L4)(i),f=()=>(0,o.L4)(d),E=()=>(0,o.L4)(u),v=()=>{const[e,t]=E(),a=(0,n.useCallback)((()=>t((e=>({...e,open:!0})))),[t]),o=(0,n.useCallback)((()=>t((e=>({...e,open:!1})))),[t]);return[null===e||void 0===e?void 0:e.open,a,o]},y=()=>{const[e,t]=E(),a=(0,n.useCallback)((e=>t((t=>({...t,messages:[...t.messages,e]})))),[t]),o=(0,n.useCallback)((()=>{t((e=>({...e,messages:[]})))}),[t]),l=(0,n.useMemo)((()=>e.open&&!!e.messages.find((e=>{let{pending:t}=e;return!!t}))),[e]);return{messages:null===e||void 0===e?void 0:e.messages,pending:l,addMessage:a,clear:o}},b=()=>{const e=(()=>{const{addMessage:e}=y();return(0,n.useCallback)((t=>{const a=(0,m.A)();return e({id:a,type:"question",value:t}),a}),[e])})(),t=(()=>{const{addMessage:e}=y();return(0,n.useCallback)((t=>{let{questionId:a,pending:n,answer:o}=t;return e({id:(0,m.A)(),questionId:a,type:"answer",value:o,pending:n})}),[e])})(),a=(()=>{const[,e]=E();return(0,n.useCallback)((t=>{let{questionId:a,value:n,additionalInfo:o,error:l}=t;e((e=>({...e,messages:e.messages.map((e=>e.questionId==a?{...e,pending:!1,value:n,additionalInfo:o,error:l}:e))})))}),[])})();return(0,n.useCallback)((n=>{const o=e(n);var c;t({questionId:o,pending:!0}),(c=n,l.A.post("/api/v1/chat",{messages:[{role:"user",content:c}]},{transform:e=>(0,r.bn)(e)})).then((function(){let{data:e={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{session:{messages:t},additionalInfo:n}=e,l=(t||[]).filter((e=>{let{role:t}=e;return"assistant"==t})),r=l.length?l[l.length-1]:null;null!==r&&void 0!==r&&r.content?a({questionId:o,value:r.content,additionalInfo:n}):a({questionId:o,error:"Something went wrong"})})).catch((e=>{a({questionId:o,error:e.message||"Something went wrong"})}))}),[e,a])}},38966:(e,t,a)=>{a.d(t,{A:()=>i});var n=a(58168),o=a(96540),l=a(83199),r=a(14125),c=a(47130);const s=(0,a(92155).A)((0,c.A)(l.Button)),i=e=>{let{alertId:t,nodeId:a,small:l=!1,isLoading:c,disabled:i,...d}=e;const{canEdit:u,goToEdit:m}=(0,r.q)({nodeId:a,alertId:t});return o.createElement(s,(0,n.A)({small:l,label:"Edit alert",onClick:m,flavour:"hollow",isLoading:c,disabled:c||!u||i,width:l?"112px":"150px","data-ga":"alert-modal::click-edit-congiguration::alerts-view",payload:{action:"Edit alert",alertId:t,nodeId:a},tooltip:u?null:"You cannot edit this alert."},d))}},14125:(e,t,a)=>{a.d(t,{l:()=>m,q:()=>u});a(62953);var n=a(96540),o=a(47767),l=a(27467),r=a(97054),c=a(3914),s=a(47762),i=a(64118),d=a(8239);const u=e=>{var t;let{alertId:a,alertName:l,nodeId:c,nodes:u}=e;const m=(0,o.Zp)(),{setState:g}=(0,d.L5)(),[p]=(0,r.Ay)(),{name:h}=(0,i.JL)(a),f=l||h,{isParent:E}=(0,s.xY)(c),{loaded:v,value:y,hasError:b,error:x}=(0,d.wd)({node:{value:c,isParent:E},path:"/health"}),w=!(null===y||void 0===y||null===(t=y.tree)||void 0===t||null===(t=t["/health/alerts/prototypes"])||void 0===t||!t["health:alert:prototype:".concat(f)]);return{canEdit:v&&!b&&w,goToEdit:(0,n.useCallback)((()=>{g({nodeId:c,alertName:f,nodeIds:u,isAlert:!0}),m("/spaces/".concat(p,"/settings/configurations"),{replace:!0})}),[g,m,p,c,f]),error:(null===x||void 0===x?void 0:x.errorMessage)||x}},m=()=>{const e=(0,o.Zp)(),{slug:t}=(0,c.ap)(),[,a]=(0,l.N9)();return(0,n.useCallback)((n=>{n&&(a({dyncfgSearchTerm:n}),e("/spaces/".concat(t,"/settings/configurations"),{replace:!0}))}),[e,a,t])}},97054:(e,t,a)=>{a.d(t,{Ay:()=>d,KI:()=>i,TP:()=>s});var n=a(96540),o=a(47767),l=a(69765),r=a(3914);const c=(e,t,a)=>{const o=t();(0,n.useLayoutEffect)((()=>{o!==e&&a(e)}),[o,e])},s=()=>{const{roomSlug:e}=(0,o.g)(),t=(0,l.A2)();return c(e,l.QW,t),e},i=()=>{const{spaceSlug:e}=(0,o.g)(),t=(0,r.hX)();return c(e,r.bq,t),e},d=()=>[i(),s()]}}]); \ No newline at end of file diff --git a/src/web/gui/v2/963.35da4a3c4e49aac29dae.chunk.js b/src/web/gui/v2/963.35da4a3c4e49aac29dae.chunk.js deleted file mode 100644 index 6698ea438..000000000 --- a/src/web/gui/v2/963.35da4a3c4e49aac29dae.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="94514b2a-a272-48b2-988d-a174805c5b7f",e._sentryDebugIdIdentifier="sentry-dbid-94514b2a-a272-48b2-988d-a174805c5b7f")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[963],{92155:(e,t,o)=>{o.d(t,{A:()=>c});var n=o(58168),a=o(96540),r=o(50876);const l=e=>(0,a.forwardRef)(((t,o)=>{let{callback:l,feature:i,isStart:c,isSuccess:s,isFailure:d,eventReason:u,payload:p={},...g}=t;const{sendLog:f,isReady:b}=(0,r.A)(),v=(0,a.useCallback)((()=>{const e=g[l],t={feature:i,isStart:c,isSuccess:s,isFailure:d,eventReason:u,...p,...g["data-ga"]?{dataGa:g["data-ga"]}:{},...g.dataGa?{dataGa:g.dataGa}:{},...g["data-track"]?{dataTrack:g["data-track"]}:{},...g.label?{label:g.label}:{}};"function"==typeof e&&e(),f(t,!0)}),[l,f,b,p,g]),m=(0,a.useMemo)((()=>({...g,[l]:v})),[g,l,v]);return a.createElement(e,(0,n.A)({ref:o},m))}));var i=o(67276);const c=e=>(0,a.forwardRef)(((t,o)=>{let{payload:r={},...c}=t;const s=l(e);return a.createElement(s,(0,n.A)({},c,{ref:o,callback:"onClick",payload:{...r,action:i.o1.buttonClicked}}))}))},93155:(e,t,o)=>{o.d(t,{Df:()=>b,Dm:()=>g,EM:()=>f,Mh:()=>u,bO:()=>p});const n="mobileAppNotifications",a="trialWarning",r="alertConfiguration",l="editAlertConfiguration",i="userCustomSettings",c="oktaSSO",s=[a,r,n,c];function d(e){if(s.includes(e))return()=>!0;const t="true"===localStorage.getItem(e);return e=>e||t}const u=d(n)(),p=d(a)(),g=d(r)(),f=(d(l)(),d(i)()),b=d(c)()},18682:(e,t,o)=>{o.d(t,{C:()=>l});var n=o(33436),a=o(78217),r=o(13871);const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return()=>{(0,n.A)(e);const o=(0,r.UI)({header:"Copied",text:"Command copied to your clipboard! Please run it on your node's terminal.",icon:"gear",...t,success:!0});a.A.success(o,{context:"copy"})}}},87292:(e,t,o)=>{o.d(t,{Ay:()=>u,R0:()=>d});var n=o(96540),a=o(8711),r=o(83199),l=o(18682);const i=(0,a.default)(r.Box).attrs((e=>({color:"textDescription",background:"modalTabsBackground",border:{side:"all",color:"borderSecondary"},padding:[4,10,4,4],position:"relative",width:"100%",...e}))).withConfig({displayName:"command__StyledTerminalCommand",componentId:"sc-wnwmk3-0"})(["color:",";border-radius:2px;overflow-wrap:anywhere;white-space:pre-wrap;font-family:monospace;letter-spacing:0.09px;line-height:18px;font-size:14px;word-break:break-word;"],(0,r.getColor)("textDescription")),c=(0,a.default)(r.Icon).withConfig({displayName:"command__StyledIcon",componentId:"sc-wnwmk3-1"})(["display:flex;align-self:flex-end;cursor:pointer;"]),s=(0,a.default)(r.Box).attrs({color:"textDescription",border:{side:"all",color:"borderSecondary"},background:"modalTabsBackground",padding:[0,1]}).withConfig({displayName:"command__CodeText",componentId:"sc-wnwmk3-2"})(["display:inline-block;color:",";border-radius:2px;font-family:monospace;letter-spacing:0.09px;line-height:16px;font-size:12px;font-weight:bold;word-break:break-word;"],(0,r.getColor)("textDescription")),d=e=>{let{children:t,...o}=e;return n.createElement(s,o,t)},u=e=>{let{children:t,confirmationText:o="Command copied to your clipboard.",commandText:a=t,...s}=e;return n.createElement(i,s,t,n.createElement(r.Box,{position:"absolute",bottom:"8px",right:"8px"},n.createElement(c,{name:"copy",size:"small",color:"primary",onClick:(0,l.C)(a||t,{text:o})})))}},47130:(e,t,o)=>{o.d(t,{A:()=>i});var n=o(58168),a=o(96540),r=o(83199),l=o(29217);const i=e=>function(){let{tooltipProps:t={},noWrapper:o,...i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.tooltip||Object.keys(t).length?a.createElement(l.A,(0,n.A)({plain:!0,content:i.tooltip},t),o?a.createElement(e,i):a.createElement(r.Box,{"data-testid":"tooltip-box"},a.createElement(e,i))):a.createElement(e,i)}},36712:(e,t,o)=>{o.d(t,{$t:()=>k,FN:()=>A,MQ:()=>f,O0:()=>h,PE:()=>p,U2:()=>m,fn:()=>y,n$:()=>u,pZ:()=>v,td:()=>b,ue:()=>c});o(9920),o(14905),o(98992),o(3949),o(8872),o(62953);var n=o(26655),a=o(63950),r=o.n(a),l=o(49286),i=o(88116);const c={id:null,name:"",description:"",commitment:!1,pricing:[],enrolledAt:null,currentPeriodFrom:null,currentPeriodTo:null,committedNodes:0,billingEmail:"",balance:{amount:0,currency:"usd"}},s=e=>{var t;const o=i.Nw[e.class],n=(0,l.bn)(e),a=Array.isArray(n.pricing)?n.pricing.reduce(((e,t)=>({...e,[t.type]:t})),{}):{},r=null===(t=i.uC[o])||void 0===t?void 0:t[e.version];return{...c,...n,planLimitations:r,pricing:a,slug:o}},d=e=>(0,l.bn)(e),u=e=>n.A.get("/api/v2/spaces/".concat(e,"/billing/plans"),{transform:e=>{let{plans:t}=e;const o=t.reduce(((e,t)=>{const o=s(t),n=e[o.slug]||[];return"year"===o.interval?n.unshift(o):n.push(o),e[o.slug]=n,e}),{});return Object.entries(o).forEach((e=>{let[t,n]=e;const a=n.reduce(((e,t)=>{const{version:o}=t;return e[o]?e[o]=[...e[o],t]:e[o]=[t],e}),{});o[t]=a})),o}}),p=e=>n.A.get("/api/v2/spaces/".concat(e,"/billing/plan"),{allow401:!0,transform:s}),g=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"update";return function(t){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a="update"==e?n.A.put:n.A.post;return"function"!==typeof a?r():a("/api/v2/spaces/".concat(t,"/billing/plan"),(0,l.Jz)(o),{transform:e=>{let{url:t}=e;return t}})}},f=(e,t)=>g("checkout")(e,t),b=(e,t)=>g()(e,t),v=(e,t)=>n.A.get("/api/v2/spaces/".concat(e,"/billing/portal?redirect_url=").concat(encodeURIComponent(t)),{transform:e=>{let{url:t}=e;return t}}),m=(e,t)=>{let{after:o,before:a}=t;return n.A.get("/api/v2/spaces/".concat(e,"/billing/node-count?from=").concat(o,"&to=").concat(a))},h=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n.A.put("/api/v2/spaces/".concat(e,"/billing/plan/preview"),(0,l.Jz)(t),{transform:d})},y=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n.A.get("/api/v2/spaces/".concat(e,"/billing/plan/quote"),{transform:d,params:(0,l.Jz)(t)})},A=function(e){let{email:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n.A.post("/api/v2/spaces/".concat(e,"/billing/trial"),{email:t})},k=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n.A.post("api/v2/spaces/".concat(e,"/billing/promo-code/check"),(0,l.Jz)(t))}},19673:(e,t,o)=>{o.d(t,{og:()=>R,L_:()=>I,D:()=>S,JN:()=>w,Qh:()=>x,lU:()=>v,qW:()=>y,Tr:()=>k,i5:()=>N,M4:()=>_});o(9391),o(62953);var n=o(96540),a=o(47444);const r=(0,a.eU)({key:"billingPlanCancelling",default:!1});var l=o(63950),i=o.n(l),c=o(3914),s=o(36712),d=o(88116),u=o(29848),p=o(46741),g=o(37618);const f=[],b=(0,a.K0)({key:"plans",get:e=>()=>(0,s.n$)(e)}),v=()=>{var e;const t=(0,c.vt)(),o=(0,a.xf)(b(t));return{loaded:"loading"!==o.state,value:(null===(e=o.contents)||void 0===e?void 0:e.data)||f,hasError:"hasError"===o.state}},m=(0,a.K0)({key:"previewPlan",get:e=>{let{spaceId:t,payload:o}=e;return()=>o?(0,s.O0)(t,o):Promise.resolve({data:{noRequest:!0}})},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),h=e=>{var t;return d.aT[null===e||void 0===e||null===(t=e.response)||void 0===t||null===(t=t.data)||void 0===t?void 0:t.errorMsgKey]},y=(e,t)=>{var o;const n=(0,c.vt)(),r=(0,a.xf)(m({spaceId:n,payload:e,forceFetch:t}));return{loading:"loading"===r.state,value:(null===(o=r.contents)||void 0===o?void 0:o.data)||{},promoCodeError:"hasError"===r.state?h(r.contents):void 0}},A=(0,a.K0)({key:"planQuoteSelector",get:e=>{let{spaceId:t,payload:o}=e;return()=>o?(0,s.fn)(t,o):Promise.resolve({data:{noRequest:!0}})},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),k=(e,t)=>{var o;const n=(0,c.vt)(),r=(0,a.xf)(A({spaceId:n,payload:e,forceFetch:t}));return{loading:"loading"===r.state,value:(null===(o=r.contents)||void 0===o?void 0:o.data)||{},promoCodeError:"hasError"===r.state?h(r.contents):void 0}},E=(0,a.K0)({key:"currentPlan",get:e=>{let{spaceId:t,canFetchPlan:o}=e;return()=>o&&t&&!(0,g.ES)(t)?(0,s.PE)(t):Promise.resolve()}}),w=()=>{var e;const t=(0,c.vt)(),o=(0,p.JT)("billing:ReadBasic"),n=(0,a.xf)(E({spaceId:t,canFetchPlan:o})),r=(0,a.RH)(E({spaceId:t,canFetchPlan:o}));return{loaded:"loading"!==n.state,value:(null===(e=n.contents)||void 0===e?void 0:e.data)||s.ue,hasError:"hasError"===n.state,refresh:r}},x=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.href;const[t,o]=(0,n.useState)(!1),a=(0,c.vt)();return[(0,n.useCallback)((()=>{o(!0),(0,s.pZ)(a,e).then((e=>{let{data:t}=e;return location.href=t})).finally((()=>o(!1)))}),[a,e]),t]},C=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.td;const t=(0,c.vt)(),o=w(),n=(0,u.ly)();return!o.loaded||o.hasError?i():a=>e(t,a).then((e=>{o.refresh(),n(),null!==e&&void 0!==e&&e.data&&(location.href=e.data)}))},I=()=>C(s.MQ),_=()=>C(),N=()=>{const e=(0,c.vt)();return t=>(0,s.FN)(e,t)},R=()=>{const[e,t]=(0,a.L4)(r);return{cancelling:e,startCancelling:(0,n.useCallback)((()=>t(!0)),[]),stopCancelling:(0,n.useCallback)((()=>t(!1)),[])}},P=(0,a.K0)({key:"couponCheck",get:e=>{let{spaceId:t,...o}=e;return()=>o.promotionCode?(0,s.$t)(t,o):Promise.resolve({})}}),S=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=(0,c.vt)(),n=(0,a.xf)(P({spaceId:o,...t}));return{loading:"loading"===n.state,discount:(null===(e=n.contents)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.percent_off)||0,promoCodeError:"hasError"===n.state?h(n.contents):void 0}}},6586:(e,t,o)=>{o.d(t,{A:()=>c});var n=o(58168),a=o(96540),r=o(84976),l=o(4659),i=o(3914);const c=e=>{let{children:t,...o}=e;const c=(0,i.bq)(),s="/spaces/".concat(c,"/settings/nodes");return a.createElement(l.A,(0,n.A)({as:r.N_,to:s},o),t)}},12602:(e,t,o)=>{o.d(t,{A:()=>c});var n=o(58168),a=o(96540),r=o(84976),l=o(4659),i=o(27994);const c=e=>{let{children:t,...o}=e;const{url:c}=(0,i.A)("business");return a.createElement(l.A,(0,n.A)({as:r.N_,to:c,disabled:!c},o),t)}},73865:(e,t,o)=>{o.d(t,{A:()=>c});o(62953);var n=o(96540),a=o(69418),r=o(47762),l=o(19673),i=o(93155);const c=()=>{const[,e,t]=(0,a.A)(),{loaded:o,nodes:c,hasError:s,refresh:d}=(0,r.Du)(),{loaded:u,value:p,hasError:g}=(0,l.JN)(),f=i.bO&&!(null===p||void 0===p||!p.planLimitations),{maxNodes:b=0,maxDashboards:v=0}=(null===p||void 0===p?void 0:p.planLimitations)||{},m=(0,n.useCallback)((o=>f&&!e&&t>b&&!c.includes(o)),[c,f,e,t]);return{loaded:o&&u,hasError:s||g,currentPlan:p,hasLimitations:f,maxNodes:b,maxDashboards:v,preferredNodes:c,isNodeRestricted:m,refreshPreferredNodes:d}}},27994:(e,t,o)=>{o.d(t,{A:()=>l});var n=o(96540),a=o(19673),r=o(3914);const l=e=>{const{loaded:t,value:o,hasError:l}=(0,a.JN)(),i=(0,r.bq)(),c=t&&o?o.billingEmail?"update":"checkout":"",s="/spaces/".concat(i,"/settings/billing/all-plans"),d=(0,n.useCallback)((e=>t&&o?"".concat(s,"#billingModalType=").concat(c,"&billingModalSlug=").concat(e):null),[e,i,c]),u=e?d(e):s;return{loaded:t,getUrl:d,url:u,hasError:l}}},57605:(e,t,o)=>{o.d(t,{A:()=>l});o(62953);var n=o(45467),a=o(87659),r=o(80925);const l=()=>{const[e,t]=(0,a.A)(!1),o=(0,r.e)();return(0,n.A)((()=>{if(o&&o.getRoot())return o.getRoot().updateAttribute("paused",!o.getRoot().getAttribute("autofetchOnWindowBlur")&&o.getRoot().getAttribute("blurred")||e),()=>o.getRoot().updateAttribute("paused",!o.getRoot().getAttribute("autofetchOnWindowBlur")&&o.getRoot().getAttribute("blurred"))}),[e]),t}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/979.3e5fddf93c977e6c71c3.chunk.js b/src/web/gui/v2/979.3e5fddf93c977e6c71c3.chunk.js deleted file mode 100644 index 7f9882c44..000000000 --- a/src/web/gui/v2/979.3e5fddf93c977e6c71c3.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="aebc26a4-0684-493c-b27c-4b77771b8c35",e._sentryDebugIdIdentifier="sentry-dbid-aebc26a4-0684-493c-b27c-4b77771b8c35")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[979],{14125:(e,t,n)=>{n.d(t,{l:()=>d,q:()=>l});n(62953);var o=n(96540),r=n(47767),c=n(27467),a=n(97054),s=n(3914),i=n(47762),u=n(64118),f=n(8239);const l=e=>{var t;let{alertId:n,alertName:c,nodeId:s,nodes:l}=e;const d=(0,r.Zp)(),{setState:p}=(0,f.L5)(),[b]=(0,a.Ay)(),{name:v}=(0,u.JL)(n),h=c||v,{isParent:y}=(0,i.xY)(s),{loaded:g,value:w,hasError:m,error:E}=(0,f.wd)({node:{value:s,isParent:y},path:"/health"}),S=!(null===w||void 0===w||null===(t=w.tree)||void 0===t||null===(t=t["/health/alerts/prototypes"])||void 0===t||!t["health:alert:prototype:".concat(h)]);return{canEdit:g&&!m&&S,goToEdit:(0,o.useCallback)((()=>{p({nodeId:s,alertName:h,nodeIds:l,isAlert:!0}),d("/spaces/".concat(b,"/settings/configurations"),{replace:!0})}),[p,d,b,s,h]),error:(null===E||void 0===E?void 0:E.errorMessage)||E}},d=()=>{const e=(0,r.Zp)(),{slug:t}=(0,s.ap)(),[,n]=(0,c.N9)();return(0,o.useCallback)((o=>{o&&(n({dyncfgSearchTerm:o}),e("/spaces/".concat(t,"/settings/configurations"),{replace:!0}))}),[e,n,t])}},3705:(e,t,n)=>{n.d(t,{A:()=>c});n(62953);var o=n(96540);const r={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0},c=()=>{const[e,t]=(0,o.useState)(null),[n,c]=(0,o.useState)(r),a=(0,o.useMemo)((()=>new window.ResizeObserver((e=>{if(e[0]){const{x:t,y:n,width:o,height:r,top:a,left:s,bottom:i,right:u}=e[0].contentRect;c({x:t,y:n,width:o,height:r,top:a,left:s,bottom:i,right:u})}}))),[]);return(0,o.useLayoutEffect)((()=>{if(e)return a.observe(e),()=>{a.disconnect()}}),[e]),[t,n]}},97054:(e,t,n)=>{n.d(t,{Ay:()=>f,KI:()=>u,TP:()=>i});var o=n(96540),r=n(47767),c=n(69765),a=n(3914);const s=(e,t,n)=>{const r=t();(0,o.useLayoutEffect)((()=>{r!==e&&n(e)}),[r,e])},i=()=>{const{roomSlug:e}=(0,r.g)(),t=(0,c.A2)();return s(e,c.QW,t),e},u=()=>{const{spaceSlug:e}=(0,r.g)(),t=(0,a.hX)();return s(e,a.bq,t),e},f=()=>[u(),i()]},84428:(e,t,n)=>{var o=n(78227)("iterator"),r=!1;try{var c=0,a={next:function(){return{done:!!c++}},return:function(){r=!0}};a[o]=function(){return this},Array.from(a,(function(){throw 2}))}catch(s){}e.exports=function(e,t){try{if(!t&&!r)return!1}catch(s){return!1}var n=!1;try{var c={};c[o]=function(){return{next:function(){return{done:n=!0}}}},e(c)}catch(s){}return n}},87290:(e,t,n)=>{var o=n(50516),r=n(19088);e.exports=!o&&!r&&"object"==typeof window&&"object"==typeof document},50516:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},19088:(e,t,n)=>{var o=n(24475),r=n(44576);e.exports="process"===r(o.process)},10916:(e,t,n)=>{var o=n(24475),r=n(80550),c=n(94901),a=n(92796),s=n(33706),i=n(78227),u=n(87290),f=n(50516),l=n(96395),d=n(77388),p=r&&r.prototype,b=i("species"),v=!1,h=c(o.PromiseRejectionEvent),y=a("Promise",(function(){var e=s(r),t=e!==String(r);if(!t&&66===d)return!0;if(l&&(!p.catch||!p.finally))return!0;if(!d||d<51||!/native code/.test(e)){var n=new r((function(e){e(1)})),o=function(e){e((function(){}),(function(){}))};if((n.constructor={})[b]=o,!(v=n.then((function(){}))instanceof o))return!0}return!t&&(u||f)&&!h}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:h,SUBCLASSING:v}},90537:(e,t,n)=>{var o=n(80550),r=n(84428),c=n(10916).CONSTRUCTOR;e.exports=c||!r((function(e){o.all(e).then(void 0,(function(){}))}))},96167:(e,t,n)=>{var o=n(46518),r=n(69565),c=n(79306),a=n(36043),s=n(1103),i=n(72652);o({target:"Promise",stat:!0,forced:n(90537)},{allSettled:function(e){var t=this,n=a.f(t),o=n.resolve,u=n.reject,f=s((function(){var n=c(t.resolve),a=[],s=0,u=1;i(e,(function(e){var c=s++,i=!1;u++,r(n,t,e).then((function(e){i||(i=!0,a[c]={status:"fulfilled",value:e},--u||o(a))}),(function(e){i||(i=!0,a[c]={status:"rejected",reason:e},--u||o(a))}))})),--u||o(a)}));return f.error&&u(f.value),n.promise}})}}]); \ No newline at end of file diff --git a/src/web/gui/v2/9818.3ce64e0b472412bfbc97.chunk.js b/src/web/gui/v2/9818.3ce64e0b472412bfbc97.chunk.js deleted file mode 100644 index 3d89ec69a..000000000 --- a/src/web/gui/v2/9818.3ce64e0b472412bfbc97.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},a=(new Error).stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="d461deb3-9944-4c5e-b0a6-c59d648f9cb0",e._sentryDebugIdIdentifier="sentry-dbid-d461deb3-9944-4c5e-b0a6-c59d648f9cb0")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[9818],{92155:(e,a,t)=>{t.d(a,{A:()=>r});var n=t(58168),l=t(96540),o=t(50876);const d=e=>(0,l.forwardRef)(((a,t)=>{let{callback:d,feature:c,isStart:r,isSuccess:i,isFailure:s,eventReason:f,payload:u={},...b}=a;const{sendLog:p,isReady:g}=(0,o.A)(),y=(0,l.useCallback)((()=>{const e=b[d],a={feature:c,isStart:r,isSuccess:i,isFailure:s,eventReason:f,...u,...b["data-ga"]?{dataGa:b["data-ga"]}:{},...b.dataGa?{dataGa:b.dataGa}:{},...b["data-track"]?{dataTrack:b["data-track"]}:{},...b.label?{label:b.label}:{}};"function"==typeof e&&e(),p(a,!0)}),[d,p,g,u,b]),k=(0,l.useMemo)((()=>({...b,[d]:y})),[b,d,y]);return l.createElement(e,(0,n.A)({ref:t},k))}));var c=t(67276);const r=e=>(0,l.forwardRef)(((a,t)=>{let{payload:o={},...r}=a;const i=d(e);return l.createElement(i,(0,n.A)({},r,{ref:t,callback:"onClick",payload:{...o,action:c.o1.buttonClicked}}))}))},89818:(e,a,t)=>{t.r(a),t.d(a,{MobileApp:()=>i,default:()=>s});t(25440);var n=t(96540),l=t(83199),o=t(28738),d=t(92155),c=t(63314);const r=(0,d.A)(l.Button),i=()=>n.createElement(c.Ay,{feature:"MobileApp"},n.createElement(l.Layer,{full:!0},n.createElement(l.Flex,{alignItems:"center",justifyContent:"center",column:!0,width:"100%",height:"100%",background:"mainBackground",gap:4},n.createElement(o.m,null),n.createElement(l.TextBigger,{textAlign:"center"},"Please open this link using your mobile device."),n.createElement(l.Flex,{alignItems:"center"},n.createElement(r,{onClick:()=>window.location.replace("/"),feature:"MobileApp",payload:{label:"Go to app"}},"Go to app"))))),s=i}}]); \ No newline at end of file diff --git a/src/web/gui/v2/9843.93f8c71c64ef97b9905e.chunk.js b/src/web/gui/v2/9843.93f8c71c64ef97b9905e.chunk.js deleted file mode 100644 index b8efdb0a9..000000000 --- a/src/web/gui/v2/9843.93f8c71c64ef97b9905e.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ea998443-d78a-4069-961f-799ca2029e3e",e._sentryDebugIdIdentifier="sentry-dbid-ea998443-d78a-4069-961f-799ca2029e3e")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[9843],{19843:(e,t,l)=>{l.r(t),l.d(t,{default:()=>C});var n=l(58168),a=(l(62953),l(96540)),o=l(83199),r=l(22292),i=l(8711);i.default.ul.withConfig({displayName:"styled__StyledList",componentId:"sc-z791f1-0"})(["list-style:disc outside none;margin-left:16px;"]);const d=(0,i.default)(o.ModalContent).attrs((e=>{let{isMobile:t}=e;return{width:t?{base:"95vw"}:{}}})).withConfig({displayName:"styled__TrialWelcomeModalContent",componentId:"sc-z791f1-1"})([""]);var s=l(34641),c=l(66732);const u=e=>{let{onOptOutClick:t,isFailure:l}=e;return a.createElement(o.Flex,{column:!0,gap:4,width:{max:120},padding:[0,0,4,0]},l?a.createElement(a.Fragment,null,a.createElement(o.TextBigger,null,"Enrolment to 30-day free Business trial failed."),a.createElement(o.TextBigger,{lineHeight:1.5},"Something unexpected happened when trying to enrol you to the free Business trial.")):a.createElement(a.Fragment,null,a.createElement(o.TextBigger,{lineHeight:1.5},"We are happy to upgrade your account to Netdata Business, for free, for"," ",a.createElement(o.TextBigger,{strong:!0},"30 days"),"."),a.createElement(o.TextBigger,null,"Enjoy the best of Netdata!"),"function"===typeof t&&a.createElement(c.A,{onOptOutClick:t})))};var m=l(87659),f=l(92155),g=l(63314),p=l(47731),E=l(25624),b=l(35454),y=l(50503),h=l(19673),w=l(5668);const _=(0,f.A)(o.Button),C=(0,a.memo)((()=>{const{trialWelcomeVisible:e}=(0,E.A)(),t=(0,p.J)(),l=(0,r.uW)("email"),[i,,,c]=(0,m.A)(!0),[f,,C]=(0,m.A)(),{isFailure:x,reset:A}=(0,y.A)(),[B,,T,k]=(0,m.A)(),{refreshPlan:v}=(0,E.A)(),[,I]=(0,w.ng)("trialModalDismissed"),M=(0,h.i5)(),F=(0,a.useCallback)((()=>{T(),M({email:l}).then((()=>{setTimeout((()=>{v(),A(),k()}),2e3)})).catch((()=>{k()}))}),[l]),P=(0,a.useMemo)((()=>x?{feature:"CloseTrialEnrolmentErrorModal",label:"Close",flavour:"hollow"}:{feature:"TrialAccept",label:"OK",textTransform:"uppercase",flavour:"hollow",icon:"thumb_up"}),[x]);return e?f?a.createElement(s.A,{onDecline:C,onCancellingEnd:()=>{localStorage.setItem(b.$B,!0),C(),c()}}):i?a.createElement(o.Modal,{backdropProps:{backdropBlur:!0}},a.createElement(g.Ay,{feature:"TrialWelcome"},a.createElement(d,{isMobile:t},a.createElement(o.ModalHeader,null,a.createElement(o.Flex,{gap:2,alignItems:"center"},a.createElement(o.Icon,{name:"netdataPress",color:"text"}),a.createElement(o.H4,null,"Welcome to Netdata!"))),a.createElement(o.ModalBody,null,a.createElement(u,{isFailure:x})),a.createElement(o.ModalFooter,null,a.createElement(o.Flex,{gap:4,justifyContent:"end",padding:[1,2]},x&&a.createElement(_,{feature:"RetryTrialEnrolment",label:"Retry",onClick:F,disabled:B,isLoading:B}),a.createElement(_,(0,n.A)({onClick:()=>{var e,t;(c(),A(),localStorage.setItem(b.$B,!0),!x&&null!==(e=window.posthog)&&void 0!==e&&e.setPersonProperties)&&(null===(t=window.posthog)||void 0===t||t.setPersonProperties({netdata_cloud_trial_modal_seen:!0}));I(!0)},disabled:B},P))))))):null:null}))}}]); \ No newline at end of file diff --git a/src/web/gui/v2/9912.702300c2dd9616289606.chunk.js b/src/web/gui/v2/9912.702300c2dd9616289606.chunk.js deleted file mode 100644 index 815f314db..000000000 --- a/src/web/gui/v2/9912.702300c2dd9616289606.chunk.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="585f0732-e454-415f-880b-614ed891b696",e._sentryDebugIdIdentifier="sentry-dbid-585f0732-e454-415f-880b-614ed891b696")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[9912],{9912:(e,n,d)=>{d.r(n),d.d(n,{default:()=>c});var o=d(96540),t=d(22292),f=d(58168),l=(d(62953),d(39225)),r=d(69418),s=d(73865);const a=(0,l.A)((()=>d.e(3750).then(d.bind(d,63750))),"Modal"),u=e=>{const[,n,d]=(0,r.A)(),{loaded:t,hasLimitations:l,maxNodes:u,preferredNodes:b,refreshPreferredNodes:c}=(0,s.A)();return!(n||!t||!l)&&(d>u&&!b.length)?o.createElement(o.Suspense,{fallback:""},o.createElement(a,(0,f.A)({onSuccessfulSave:c},e))):null};var b=d(93155);const c=e=>{const n=(0,t.uW)("isAnonymous");return b.bO&&!n?o.createElement(u,e):null}}}]); \ No newline at end of file diff --git a/src/web/gui/v2/LICENSE.md b/src/web/gui/v2/LICENSE.md deleted file mode 100644 index 865d094f1..000000000 --- a/src/web/gui/v2/LICENSE.md +++ /dev/null @@ -1,42 +0,0 @@ -# Netdata Cloud UI License v1.0 (NCUL1) - -## Acceptance -By using the software, you agree to all of the terms and conditions below. - -## Copyright License -The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available the software, in each case subject to the limitations, restrictions and conditions below. - -## Limitations -This license allows you to use the Software only to interface with the licensor's other software components, such as Netdata Agents and Netdata Cloud. Any use with replacements for these components is not permitted. - -## Restrictions -The Software is provided in a binary form for use by end-users. You may not reverse engineer, decompile, disassemble, or modify the Software. The Software is licensed as a single product and its component parts may not be separated. - -## Patents -If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your license for the software granted under these terms ends immediately. If your company makes such a claim, your license ends immediately for work on behalf of your company. - -## Notices -You must ensure that anyone who gets a copy of the Software from you also gets a copy of these terms. - -## No Other Rights -These terms do not imply any licenses other than those expressly granted in these terms. - -## Termination -If you use the Software in violation of any of these terms, such use is not licensed, and your licenses will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violations of this license no later than 30 days after you receive that notice, your licenses will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your licenses to terminate automatically and permanently. - -## No Warranties and No Liability -The software comes "As Is", without any express or implied warranties of any kind, including but not limited to any warranties of merchantability, non-infringement, or fitness for a particular purpose. The licensor will not be liable to you for any damages arising out of these terms or the use or nature of the Software, under any kind of legal claim. - -## Open Source Components -The software includes certain third party open source components. Each of these components is subject to its own license. The list of open-source components used by Netdata Cloud UI is [here](https://app.netdata.cloud/3D_PARTY_LICENSES.txt). - -## Definitions -The "licensor" is Netdata Inc., the entity offering these terms, and the "**software**" is the Netdata Cloud UI software the licensor makes available under these terms, including any portion of it. - -"**you**" refers to the individual or entity agreeing to these terms. - -"**your company**" is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. "**Control**" means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect. - -"**your licenses**" are all the licenses granted to you for the software under these terms. - -"**use**" means anything you do with the software requiring one of your licenses. diff --git a/src/web/gui/v2/README.md b/src/web/gui/v2/README.md deleted file mode 120000 index d434d0b42..000000000 --- a/src/web/gui/v2/README.md +++ /dev/null @@ -1 +0,0 @@ -../.dashboard-v2-notice.md \ No newline at end of file diff --git a/src/web/gui/v2/agent.html b/src/web/gui/v2/agent.html deleted file mode 100644 index bad821a9d..000000000 --- a/src/web/gui/v2/agent.html +++ /dev/null @@ -1,245 +0,0 @@ -Netdata Agent Console \ No newline at end of file diff --git a/src/web/gui/v2/allFiles.6.138.3.json b/src/web/gui/v2/allFiles.6.138.3.json deleted file mode 100644 index e38d93a40..000000000 --- a/src/web/gui/v2/allFiles.6.138.3.json +++ /dev/null @@ -1,386 +0,0 @@ -{ - "bundlesManifest.json": "/bundlesManifest.6.json", - "app.css": "/app.cb2e9f9a81cf9533384e.css", - "app.js": "/app.08c9fe3ead1d43ff769b.js", - "runtime.js": "/runtime.ceccffb089cc539b1c1f.js", - "3624.chunk.js": "/3624.bfeb1fdc3057ba82ddac.chunk.js", - "7840.chunk.js": "/7840.2f2023f2eb1dcc943d94.chunk.js", - "5596.chunk.js": "/5596.2036706750ff4028cff2.chunk.js", - "3350.chunk.js": "/3350.ae7151980981854dc3d1.chunk.js", - "9818.chunk.js": "/9818.3ce64e0b472412bfbc97.chunk.js", - "7529.chunk.js": "/7529.658d363e12e73df83b60.chunk.js", - "1418.chunk.js": "/1418.16d53ba5cce2c6a8143a.chunk.js", - "1876.chunk.js": "/1876.e610906417b961290730.chunk.js", - "3621.chunk.js": "/3621.01ee70ee9c311ac163d9.chunk.js", - "7471.chunk.js": "/7471.f96c4d04a73fb7551c03.chunk.js", - "3736.chunk.js": "/3736.e572adfdf7951f74a741.chunk.js", - "683.css": "/683.cc9fa5f3bdc0bf3ab2fc.css", - "683.chunk.js": "/683.02c173493ef257c210fa.chunk.js", - "8784.chunk.js": "/8784.a04e9c07186e1f057f56.chunk.js", - "7146.chunk.js": "/7146.79304e386ac9238b7cf1.chunk.js", - "5598.chunk.js": "/5598.07ff43a6b96bd41e8637.chunk.js", - "7487.css": "/7487.89070793921be1288bb5.css", - "7487.chunk.js": "/7487.db63c95c27d973a07d9b.chunk.js", - "934.chunk.js": "/934.24d6fdc5f60aa6493962.chunk.js", - "7170.chunk.js": "/7170.5d6047bb6ce9d77d53db.chunk.js", - "8505.chunk.js": "/8505.c330f2104fefd71717da.chunk.js", - "5426.chunk.js": "/5426.254557ad3e1f2d14ad29.chunk.js", - "4680.chunk.js": "/4680.7d8122d91e9d4582836a.chunk.js", - "5700.chunk.js": "/5700.b7c9908dc7f30a5a57e7.chunk.js", - "5246.chunk.js": "/5246.07c5a1649f0805c140fe.chunk.js", - "3843.css": "/3843.89070793921be1288bb5.css", - "3843.chunk.js": "/3843.ffbb6f614ba4f7b77570.chunk.js", - "4034.chunk.js": "/4034.35199d2809d318eed690.chunk.js", - "1782.chunk.js": "/1782.d82eb301aa81b380dd0c.chunk.js", - "252.chunk.js": "/252.40edc9b0f6da1422f40b.chunk.js", - "6469.css": "/6469.89070793921be1288bb5.css", - "6469.chunk.js": "/6469.47926fa38028dc7d0d41.chunk.js", - "979.chunk.js": "/979.3e5fddf93c977e6c71c3.chunk.js", - "6331.css": "/6331.89070793921be1288bb5.css", - "6331.chunk.js": "/6331.c91b5d104cdff1be3b80.chunk.js", - "9843.chunk.js": "/9843.93f8c71c64ef97b9905e.chunk.js", - "1839.chunk.js": "/1839.a4196d2a87ac0fdd9f34.chunk.js", - "6661.chunk.js": "/6661.72f782bd78fea8c2d836.chunk.js", - "86.chunk.js": "/86.2c88d4d37b88e2620051.chunk.js", - "2007.chunk.js": "/2007.b33ce2b4b736228fd681.chunk.js", - "4958.chunk.js": "/4958.5969fedc1ff7dc82775e.chunk.js", - "9912.chunk.js": "/9912.702300c2dd9616289606.chunk.js", - "7959.chunk.js": "/7959.4f20f4b203e2bad8af39.chunk.js", - "3968.chunk.js": "/3968.483ca2ad3b300293e655.chunk.js", - "3104.chunk.js": "/3104.3b70865e21a81a616af3.chunk.js", - "8059.chunk.js": "/8059.4fdc76bb2cac1f74b41b.chunk.js", - "195.chunk.js": "/195.4cdbea6af54d14a95949.chunk.js", - "785.chunk.js": "/785.d016913841bcc0209d5b.chunk.js", - "7340.chunk.js": "/7340.25dce1c5cc66b613700f.chunk.js", - "7332.chunk.js": "/7332.3acf93dcfa52c7f1bc18.chunk.js", - "6944.chunk.js": "/6944.ab3e70c9ac0f05013b5f.chunk.js", - "6760.chunk.js": "/6760.370b9780120c145da28f.chunk.js", - "4140.css": "/4140.89070793921be1288bb5.css", - "4140.chunk.js": "/4140.46221d08bcda08826c78.chunk.js", - "185.chunk.js": "/185.42bab351ba68de7ca4aa.chunk.js", - "8842.chunk.js": "/8842.406028f523a00acb97bd.chunk.js", - "5304.chunk.js": "/5304.cc797fdd343c7e873b2f.chunk.js", - "3750.chunk.js": "/3750.4ad02f036f2a7c520b1c.chunk.js", - "4414.chunk.js": "/4414.590ba07d470ba2ce7dd0.chunk.js", - "9400.chunk.js": "/9400.6250bbf86c4fd3173de2.chunk.js", - "npm.react.dom.js": "/npm.react.dom.2994f1b4604bd8ce80f6.js", - "netdata.ui.js": "/netdata.ui.647a4c3303ee8ec0da64.js", - "netdata.charts.js": "/netdata.charts.fdfd27674ac5533bbcc2.js", - "8637.js": "/8637.0958494526e838a60d2b.js", - "7144.chunk.js": "/7144.382c341e09540fdebaa6.chunk.js", - "7857.chunk.js": "/7857.813ae058cca579e05462.chunk.js", - "4631.chunk.js": "/4631.158982e127e11bdc6a45.chunk.js", - "1220.chunk.js": "/1220.01d6bbaab869c74f4437.chunk.js", - "749.chunk.js": "/749.e44087ac3a2e3a994318.chunk.js", - "7519.chunk.js": "/7519.7982a2e0fcdf82ba78dd.chunk.js", - "6121.chunk.js": "/6121.f7286809e53e1c6d655a.chunk.js", - "6384.chunk.js": "/6384.0fad56b0bc902f186c98.chunk.js", - "8323.css": "/8323.e22de33686bb2f34063c.css", - "8323.chunk.js": "/8323.437406936b642e8f6cb3.chunk.js", - "5709.chunk.js": "/5709.c494eb62187917e2f2f6.chunk.js", - "3455.chunk.js": "/3455.f9ca876de57244386773.chunk.js", - "1396.chunk.js": "/1396.56f70d7c659ac0b694cd.chunk.js", - "5794.chunk.js": "/5794.252ff787d58d64eb4988.chunk.js", - "8938.chunk.js": "/8938.5116982f737a2ef85330.chunk.js", - "7208.chunk.js": "/7208.1d75cf5d007de32e403b.chunk.js", - "8239.chunk.js": "/8239.c85fc9f3599f198a9efb.chunk.js", - "9473.chunk.js": "/9473.4fd4742ffb6b5348bea8.chunk.js", - "6323.chunk.js": "/6323.26d4d949c9b6f8674c2e.chunk.js", - "9292.chunk.js": "/9292.cc5055091db9a0826933.chunk.js", - "7304.chunk.js": "/7304.ed4690ec296b59fbe7fd.chunk.js", - "8910.chunk.js": "/8910.019974f8675d8834dd07.chunk.js", - "6008.chunk.js": "/6008.3d0636fe17f4f6274485.chunk.js", - "963.chunk.js": "/963.35da4a3c4e49aac29dae.chunk.js", - "7436.chunk.js": "/7436.1ebd371d70e6a87c5499.chunk.js", - "3D_PARTY_LICENSES.txt": "/3D_PARTY_LICENSES.txt", - "static/site/pages/holding-page-503/holding-page-503.svg": "/static/site/pages/holding-page-503/holding-page-503.svg", - "favicon.ico": "/favicon.ico", - "static/img/logos/services/graphite.svg": "/static/img/logos/services/graphite.svg", - "sw.js": "/sw.js", - "static/img/no-filter-results.png": "/static/img/no-filter-results.png", - "static/img/logos/services/retroshare.svg": "/static/img/logos/services/retroshare.svg", - "static/img/logos/services/squid.svg": "/static/img/logos/services/squid.svg", - "static/img/no-nodes-room.svg": "/static/img/no-nodes-room.svg", - "static/img/logos/services/libvirt.svg": "/static/img/logos/services/libvirt.svg", - "static/img/logos/services/postfix.svg": "/static/img/logos/services/postfix.svg", - "static/img/logos/services/proxysql.svg": "/static/img/logos/services/proxysql.svg", - "static/img/logos/services/varnish.svg": "/static/img/logos/services/varnish.svg", - "static/img/logos/services/lxd.svg": "/static/img/logos/services/lxd.svg", - "static/img/logos/services/freeradius.svg": "/static/img/logos/services/freeradius.svg", - "static/img/logos/services/prowl.svg": "/static/img/logos/services/prowl.svg", - "static/img/logos/services/traefik.svg": "/static/img/logos/services/traefik.svg", - "static/img/logos/services/rethinkdb.svg": "/static/img/logos/services/rethinkdb.svg", - "static/img/logos/os/gentoo.svg": "/static/img/logos/os/gentoo.svg", - "static/img/logos/services/apc.svg": "/static/img/logos/services/apc.svg", - "static/img/logos/services/statsd.svg": "/static/img/logos/services/statsd.svg", - "static/img/logos/services/openldap.svg": "/static/img/logos/services/openldap.svg", - "static/img/logos/services/cups.svg": "/static/img/logos/services/cups.svg", - "static/img/logos/os/openwrt.svg": "/static/img/logos/os/openwrt.svg", - "static/img/logos/services/spigot.svg": "/static/img/logos/services/spigot.svg", - "static/img/logos/services/stiebel.svg": "/static/img/logos/services/stiebel.svg", - "agent.html": "/agent.html", - "local-agent.html": "/local-agent.html", - "static/img/logos/os/opensuse.svg": "/static/img/logos/os/opensuse.svg", - "static/img/logos/services/apache.svg": "/static/img/logos/services/apache.svg", - "static/img/logos/services/beanstalkd.svg": "/static/img/logos/services/beanstalkd.svg", - "static/img/logos/services/golang.svg": "/static/img/logos/services/golang.svg", - "static/img/new-dashboard.svg": "/static/img/new-dashboard.svg", - "static/img/logos/services/activemq.svg": "/static/img/logos/services/activemq.svg", - "static/img/logos/os/kubernetes.svg": "/static/img/logos/os/kubernetes.svg", - "static/img/logos/services/kubernetes.svg": "/static/img/logos/services/kubernetes.svg", - "static/img/logos/services/systemd.svg": "/static/img/logos/services/systemd.svg", - "static/img/logos/services/influxdb.svg": "/static/img/logos/services/influxdb.svg", - "static/img/rack.png": "/static/img/rack.png", - "static/email/img/isotype_600.png": "/static/email/img/isotype_600.png", - "static/img/logos/services/irc.svg": "/static/img/logos/services/irc.svg", - "static/img/logos/services/tomcat.svg": "/static/img/logos/services/tomcat.svg", - "registry-alert-redirect.html": "/registry-alert-redirect.html", - "static/img/logos/services/mariadb.svg": "/static/img/logos/services/mariadb.svg", - "static/img/logos/services/openzfs.svg": "/static/img/logos/services/openzfs.svg", - "static/img/logos/services/veritas.svg": "/static/img/logos/services/veritas.svg", - "static/img/logos/services/boinc.svg": "/static/img/logos/services/boinc.svg", - "static/img/logos/services/fail2ban.svg": "/static/img/logos/services/fail2ban.svg", - "static/img/logos/services/dns.svg": "/static/img/logos/services/dns.svg", - "static/img/logos/services/netfilter.svg": "/static/img/logos/services/netfilter.svg", - "static/img/logos/services/uwsgi.svg": "/static/img/logos/services/uwsgi.svg", - "static/img/logos/services/btrfs.svg": "/static/img/logos/services/btrfs.svg", - "static/img/logos/services/adaptec.svg": "/static/img/logos/services/adaptec.svg", - "static/img/logos/services/icecast.svg": "/static/img/logos/services/icecast.svg", - "static/img/logos/services/xen.svg": "/static/img/logos/services/xen.svg", - "static/img/logos/services/haproxy.svg": "/static/img/logos/services/haproxy.svg", - "static/img/logos/services/tor.svg": "/static/img/logos/services/tor.svg", - "static/img/logos/services/mysql.svg": "/static/img/logos/services/mysql.svg", - "static/img/logos/services/memcached.svg": "/static/img/logos/services/memcached.svg", - "static/img/logos/services/libreswan.svg": "/static/img/logos/services/libreswan.svg", - "static/img/logos/services/grafana.svg": "/static/img/logos/services/grafana.svg", - "static/img/logos/os/raspberry-pi.svg": "/static/img/logos/os/raspberry-pi.svg", - "static/img/logos/services/raspberry-pi.svg": "/static/img/logos/services/raspberry-pi.svg", - "static/img/logos/services/fluentd.svg": "/static/img/logos/services/fluentd.svg", - "static/img/logos/services/kairosdb.svg": "/static/img/logos/services/kairosdb.svg", - "static/img/logos/services/docker.svg": "/static/img/logos/services/docker.svg", - "static/img/logos/services/opentsdb.svg": "/static/img/logos/services/opentsdb.svg", - "static/img/logos/services/php-fpm.svg": "/static/img/logos/services/php-fpm.svg", - "static/img/logos/services/monit.svg": "/static/img/logos/services/monit.svg", - "static/img/logos/services/fping.svg": "/static/img/logos/services/fping.svg", - "static/img/logos/services/ntpd.svg": "/static/img/logos/services/ntpd.svg", - "static/email/img/header.png": "/static/email/img/header.png", - "static/img/logos/os/freenas.svg": "/static/img/logos/os/freenas.svg", - "static/img/logos/os/linux-small.svg": "/static/img/logos/os/linux-small.svg", - "static/img/logos/services/aws.svg": "/static/img/logos/services/aws.svg", - "static/img/logos/services/unbound.svg": "/static/img/logos/services/unbound.svg", - "static/img/logos/services/nsd.svg": "/static/img/logos/services/nsd.svg", - "static/img/logos/os/macos.svg": "/static/img/logos/os/macos.svg", - "static/img/logos/os/linux.svg": "/static/img/logos/os/linux.svg", - "static/img/logos/services/linux.svg": "/static/img/logos/services/linux.svg", - "static/img/logos/services/postgresql.svg": "/static/img/logos/services/postgresql.svg", - "static/img/logos/services/litespeed.svg": "/static/img/logos/services/litespeed.svg", - "registry-hello.html": "/registry-hello.html", - "static/img/logos/services/slack.svg": "/static/img/logos/services/slack.svg", - "static/img/logos/services/gnu-freeipmi.svg": "/static/img/logos/services/gnu-freeipmi.svg", - "static/img/logos/services/isc.svg": "/static/img/logos/services/isc.svg", - "static/img/logos/services/solr.svg": "/static/img/logos/services/solr.svg", - "static/img/logos/services/nut.svg": "/static/img/logos/services/nut.svg", - "static/img/logos/os/debian.svg": "/static/img/logos/os/debian.svg", - "static/img/logos/services/smstools3.svg": "/static/img/logos/services/smstools3.svg", - "static/email/img/reachability_siren.png": "/static/email/img/reachability_siren.png", - "static/splash.css": "/static/splash.css", - "registry-access.html": "/registry-access.html", - "static/img/logos/services/server-connection.svg": "/static/img/logos/services/server-connection.svg", - "LICENSE.md": "/LICENSE.md", - "static/email/img/crit_siren.png": "/static/email/img/crit_siren.png", - "static/img/logos/services/pushover.svg": "/static/img/logos/services/pushover.svg", - "static/img/logos/services/openvpn.svg": "/static/img/logos/services/openvpn.svg", - "static/img/logos/os/suse.svg": "/static/img/logos/os/suse.svg", - "static/img/logos/services/couchdb.svg": "/static/img/logos/services/couchdb.svg", - "static/img/logos/os/manjaro.svg": "/static/img/logos/os/manjaro.svg", - "static/img/logos/services/rabbitmq.svg": "/static/img/logos/services/rabbitmq.svg", - "static/img/logos/services/sma.svg": "/static/img/logos/services/sma.svg", - "static/email/img/warn_siren.png": "/static/email/img/warn_siren.png", - "static/img/logos/os/arch.svg": "/static/img/logos/os/arch.svg", - "static/img/logos/os/freebsd.svg": "/static/img/logos/os/freebsd.svg", - "static/img/logos/services/flock.svg": "/static/img/logos/services/flock.svg", - "static/img/logos/services/prometheus.svg": "/static/img/logos/services/prometheus.svg", - "static/img/logos/services/redis.svg": "/static/img/logos/services/redis.svg", - "static/img/logos/services/ipfs.svg": "/static/img/logos/services/ipfs.svg", - "static/img/logos/os/redhat.svg": "/static/img/logos/os/redhat.svg", - "static/img/logos/services/concul.svg": "/static/img/logos/services/concul.svg", - "static/img/mail/isotype.png": "/static/img/mail/isotype.png", - "static/img/logos/services/processor.svg": "/static/img/logos/services/processor.svg", - "static/img/logos/services/lm-sensors.svg": "/static/img/logos/services/lm-sensors.svg", - "static/img/logos/services/data-encryption.svg": "/static/img/logos/services/data-encryption.svg", - "static/site/pages/holding-page-503/multiple-logos-group.svg": "/static/site/pages/holding-page-503/multiple-logos-group.svg", - "static/email/img/crit_badge.png": "/static/email/img/crit_badge.png", - "static/img/logos/services/load-balancer.svg": "/static/img/logos/services/load-balancer.svg", - "index.html": "/index.html", - "static/img/logos/services/elasticsearch.svg": "/static/img/logos/services/elasticsearch.svg", - "static/img/logos/os/centos.svg": "/static/img/logos/os/centos.svg", - "static/email/img/clea_siren.png": "/static/email/img/clea_siren.png", - "static/img/logos/services/ceph.svg": "/static/img/logos/services/ceph.svg", - "static/img/logos/services/log-file.svg": "/static/img/logos/services/log-file.svg", - "static/img/logos/services/container.svg": "/static/img/logos/services/container.svg", - "static/img/logos/services/dovecot.svg": "/static/img/logos/services/dovecot.svg", - "static/img/logos/services/exim.svg": "/static/img/logos/services/exim.svg", - "static/img/logos/services/chrony.svg": "/static/img/logos/services/chrony.svg", - "static/email/img/warn_badge.png": "/static/email/img/warn_badge.png", - "static/img/logos/services/nfs.svg": "/static/img/logos/services/nfs.svg", - "static/img/logos/os/fedora.svg": "/static/img/logos/os/fedora.svg", - "static/img/logos/os/ubuntu.svg": "/static/img/logos/os/ubuntu.svg", - "static/img/logos/services/notification-bell.svg": "/static/img/logos/services/notification-bell.svg", - "static/email/img/flood_siren.png": "/static/email/img/flood_siren.png", - "static/img/logos/services/access-point.svg": "/static/img/logos/services/access-point.svg", - "static/email/img/label_recovered.png": "/static/email/img/label_recovered.png", - "static/img/logos/services/samba.svg": "/static/img/logos/services/samba.svg", - "static/img/logos/services/monitoring.svg": "/static/img/logos/services/monitoring.svg", - "static/img/logos/services/key-file.svg": "/static/img/logos/services/key-file.svg", - "static/img/logos/services/kafka.svg": "/static/img/logos/services/kafka.svg", - "static/email/img/label_warning.png": "/static/email/img/label_warning.png", - "static/img/logos/services/rocketchat.svg": "/static/img/logos/services/rocketchat.svg", - "static/img/mail/logotype.svg": "/static/img/mail/logotype.svg", - "static/img/logos/services/nginx-plus.svg": "/static/img/logos/services/nginx-plus.svg", - "static/email/img/label_critical.png": "/static/email/img/label_critical.png", - "static/img/logos/services/fronius.svg": "/static/img/logos/services/fronius.svg", - "static/img/logos/services/puppet.svg": "/static/img/logos/services/puppet.svg", - "static/img/logos/os/pfsense.svg": "/static/img/logos/os/pfsense.svg", - "static/img/logos/services/consul.svg": "/static/img/logos/services/consul.svg", - "static/img/logos/os/coreos.svg": "/static/img/logos/os/coreos.svg", - "static/site/pages/holding-page-503/index.html": "/static/site/pages/holding-page-503/index.html", - "static/site/pages/holding-page-503/holding-page-503.css": "/static/site/pages/holding-page-503/holding-page-503.css", - "static/img/logos/services/network.svg": "/static/img/logos/services/network.svg", - "static/img/logos/services/qos.svg": "/static/img/logos/services/qos.svg", - "static/img/logos/services/email.svg": "/static/img/logos/services/email.svg", - "static/img/logos/services/ddos.svg": "/static/img/logos/services/ddos.svg", - "static/img/logos/os/openstack.svg": "/static/img/logos/os/openstack.svg", - "static/img/mail/logotype.png": "/static/img/mail/logotype.png", - "static/email/img/full_logo.png": "/static/email/img/full_logo.png", - "static/email/img/community_icon.png": "/static/email/img/community_icon.png", - "static/email/img/configure_icon.png": "/static/email/img/configure_icon.png", - "static/img/logos/services/temperature.svg": "/static/img/logos/services/temperature.svg", - "static/img/logos/services/pushbullet.svg": "/static/img/logos/services/pushbullet.svg", - "static/img/logos/services/nginx.svg": "/static/img/logos/services/nginx.svg", - "static/img/logos/services/cloud.svg": "/static/img/logos/services/cloud.svg", - "static/img/logos/services/pagerduty.svg": "/static/img/logos/services/pagerduty.svg", - "static/img/logos/services/alerta.svg": "/static/img/logos/services/alerta.svg", - "static/img/logos/services/mongodb.svg": "/static/img/logos/services/mongodb.svg", - "static/email/img/clea_badge.png": "/static/email/img/clea_badge.png", - "static/img/logos/services/discord.svg": "/static/img/logos/services/discord.svg", - "static/img/logos/os/alpine.svg": "/static/img/logos/os/alpine.svg", - "static/img/logos/os/placeholder.svg": "/static/img/logos/os/placeholder.svg", - "static/img/logos/services/aws-sns.svg": "/static/img/logos/services/aws-sns.svg", - "static/img/logos/services/telegram.svg": "/static/img/logos/services/telegram.svg", - "static/img/logos/os/oracle.svg": "/static/img/logos/os/oracle.svg", - "static/img/logos/services/oracle.svg": "/static/img/logos/services/oracle.svg", - "static/img/logos/services/network-protocol.svg": "/static/img/logos/services/network-protocol.svg", - "static/img/logos/services/nvidia.svg": "/static/img/logos/services/nvidia.svg", - "static/img/logos/services/springboot.svg": "/static/img/logos/services/springboot.svg", - "static/img/logos/services/kavenegar.svg": "/static/img/logos/services/kavenegar.svg", - "static/img/logos/services/powerdns.svg": "/static/img/logos/services/powerdns.svg", - "static/img/logos/os/docker.svg": "/static/img/logos/os/docker.svg", - "static/img/logos/services/messagebird.svg": "/static/img/logos/services/messagebird.svg", - "static/img/logos/services/placeholder.svg": "/static/img/logos/services/placeholder.svg", - "static/site/pages/holding-page-503/reset.svg": "/static/site/pages/holding-page-503/reset.svg", - "static/img/logos/services/twilio.svg": "/static/img/logos/services/twilio.svg", - "static/img/logos/services/lighthttpd.svg": "/static/img/logos/services/lighthttpd.svg", - "static/img/logos/os/rocky.svg": "/static/img/logos/os/rocky.svg", - "static/img/list-style-image.svg": "/static/img/list-style-image.svg", - ".well-known/assetlinks.json": "/.well-known/assetlinks.json", - "static/.well-known/assetlinks.json": "/static/.well-known/assetlinks.json", - "static/img/logos/services/opensips.svg": "/static/img/logos/services/opensips.svg", - "static/img/logos/services/logstash.svg": "/static/img/logos/services/logstash.svg", - "static/img/mail/isotype.svg": "/static/img/mail/isotype.svg", - "static/site/pages/holding-page-503/netdata-logo-white.svg": "/static/site/pages/holding-page-503/netdata-logo-white.svg", - "static/img/logos/services/hub.svg": "/static/img/logos/services/hub.svg", - "apple-app-site-association": "/apple-app-site-association", - "static/apple-app-site-association": "/static/apple-app-site-association", - "app.css.map": "/app.cb2e9f9a81cf9533384e.css.map", - "app.js.map": "/app.08c9fe3ead1d43ff769b.js.map", - "runtime.js.map": "/runtime.ceccffb089cc539b1c1f.js.map", - "3624.chunk.js.map": "/3624.bfeb1fdc3057ba82ddac.chunk.js.map", - "7840.chunk.js.map": "/7840.2f2023f2eb1dcc943d94.chunk.js.map", - "5596.chunk.js.map": "/5596.2036706750ff4028cff2.chunk.js.map", - "3350.chunk.js.map": "/3350.ae7151980981854dc3d1.chunk.js.map", - "9818.chunk.js.map": "/9818.3ce64e0b472412bfbc97.chunk.js.map", - "7529.chunk.js.map": "/7529.658d363e12e73df83b60.chunk.js.map", - "1418.chunk.js.map": "/1418.16d53ba5cce2c6a8143a.chunk.js.map", - "1876.chunk.js.map": "/1876.e610906417b961290730.chunk.js.map", - "3621.chunk.js.map": "/3621.01ee70ee9c311ac163d9.chunk.js.map", - "7471.chunk.js.map": "/7471.f96c4d04a73fb7551c03.chunk.js.map", - "3736.chunk.js.map": "/3736.e572adfdf7951f74a741.chunk.js.map", - "683.css.map": "/683.cc9fa5f3bdc0bf3ab2fc.css.map", - "683.chunk.js.map": "/683.02c173493ef257c210fa.chunk.js.map", - "8784.chunk.js.map": "/8784.a04e9c07186e1f057f56.chunk.js.map", - "7146.chunk.js.map": "/7146.79304e386ac9238b7cf1.chunk.js.map", - "5598.chunk.js.map": "/5598.07ff43a6b96bd41e8637.chunk.js.map", - "7487.css.map": "/7487.89070793921be1288bb5.css.map", - "7487.chunk.js.map": "/7487.db63c95c27d973a07d9b.chunk.js.map", - "934.chunk.js.map": "/934.24d6fdc5f60aa6493962.chunk.js.map", - "7170.chunk.js.map": "/7170.5d6047bb6ce9d77d53db.chunk.js.map", - "8505.chunk.js.map": "/8505.c330f2104fefd71717da.chunk.js.map", - "5426.chunk.js.map": "/5426.254557ad3e1f2d14ad29.chunk.js.map", - "4680.chunk.js.map": "/4680.7d8122d91e9d4582836a.chunk.js.map", - "5700.chunk.js.map": "/5700.b7c9908dc7f30a5a57e7.chunk.js.map", - "5246.chunk.js.map": "/5246.07c5a1649f0805c140fe.chunk.js.map", - "3843.css.map": "/3843.89070793921be1288bb5.css.map", - "3843.chunk.js.map": "/3843.ffbb6f614ba4f7b77570.chunk.js.map", - "4034.chunk.js.map": "/4034.35199d2809d318eed690.chunk.js.map", - "1782.chunk.js.map": "/1782.d82eb301aa81b380dd0c.chunk.js.map", - "252.chunk.js.map": "/252.40edc9b0f6da1422f40b.chunk.js.map", - "6469.css.map": "/6469.89070793921be1288bb5.css.map", - "6469.chunk.js.map": "/6469.47926fa38028dc7d0d41.chunk.js.map", - "979.chunk.js.map": "/979.3e5fddf93c977e6c71c3.chunk.js.map", - "6331.css.map": "/6331.89070793921be1288bb5.css.map", - "6331.chunk.js.map": "/6331.c91b5d104cdff1be3b80.chunk.js.map", - "9843.chunk.js.map": "/9843.93f8c71c64ef97b9905e.chunk.js.map", - "1839.chunk.js.map": "/1839.a4196d2a87ac0fdd9f34.chunk.js.map", - "6661.chunk.js.map": "/6661.72f782bd78fea8c2d836.chunk.js.map", - "86.chunk.js.map": "/86.2c88d4d37b88e2620051.chunk.js.map", - "2007.chunk.js.map": "/2007.b33ce2b4b736228fd681.chunk.js.map", - "4958.chunk.js.map": "/4958.5969fedc1ff7dc82775e.chunk.js.map", - "9912.chunk.js.map": "/9912.702300c2dd9616289606.chunk.js.map", - "7959.chunk.js.map": "/7959.4f20f4b203e2bad8af39.chunk.js.map", - "3968.chunk.js.map": "/3968.483ca2ad3b300293e655.chunk.js.map", - "3104.chunk.js.map": "/3104.3b70865e21a81a616af3.chunk.js.map", - "8059.chunk.js.map": "/8059.4fdc76bb2cac1f74b41b.chunk.js.map", - "195.chunk.js.map": "/195.4cdbea6af54d14a95949.chunk.js.map", - "785.chunk.js.map": "/785.d016913841bcc0209d5b.chunk.js.map", - "7340.chunk.js.map": "/7340.25dce1c5cc66b613700f.chunk.js.map", - "7332.chunk.js.map": "/7332.3acf93dcfa52c7f1bc18.chunk.js.map", - "6944.chunk.js.map": "/6944.ab3e70c9ac0f05013b5f.chunk.js.map", - "6760.chunk.js.map": "/6760.370b9780120c145da28f.chunk.js.map", - "4140.css.map": "/4140.89070793921be1288bb5.css.map", - "4140.chunk.js.map": "/4140.46221d08bcda08826c78.chunk.js.map", - "185.chunk.js.map": "/185.42bab351ba68de7ca4aa.chunk.js.map", - "8842.chunk.js.map": "/8842.406028f523a00acb97bd.chunk.js.map", - "5304.chunk.js.map": "/5304.cc797fdd343c7e873b2f.chunk.js.map", - "3750.chunk.js.map": "/3750.4ad02f036f2a7c520b1c.chunk.js.map", - "4414.chunk.js.map": "/4414.590ba07d470ba2ce7dd0.chunk.js.map", - "9400.chunk.js.map": "/9400.6250bbf86c4fd3173de2.chunk.js.map", - "npm.react.dom.js.map": "/npm.react.dom.2994f1b4604bd8ce80f6.js.map", - "netdata.ui.js.map": "/netdata.ui.647a4c3303ee8ec0da64.js.map", - "netdata.charts.js.map": "/netdata.charts.fdfd27674ac5533bbcc2.js.map", - "8637.js.map": "/8637.0958494526e838a60d2b.js.map", - "7144.chunk.js.map": "/7144.382c341e09540fdebaa6.chunk.js.map", - "7857.chunk.js.map": "/7857.813ae058cca579e05462.chunk.js.map", - "4631.chunk.js.map": "/4631.158982e127e11bdc6a45.chunk.js.map", - "1220.chunk.js.map": "/1220.01d6bbaab869c74f4437.chunk.js.map", - "749.chunk.js.map": "/749.e44087ac3a2e3a994318.chunk.js.map", - "7519.chunk.js.map": "/7519.7982a2e0fcdf82ba78dd.chunk.js.map", - "6121.chunk.js.map": "/6121.f7286809e53e1c6d655a.chunk.js.map", - "6384.chunk.js.map": "/6384.0fad56b0bc902f186c98.chunk.js.map", - "8323.css.map": "/8323.e22de33686bb2f34063c.css.map", - "8323.chunk.js.map": "/8323.437406936b642e8f6cb3.chunk.js.map", - "5709.chunk.js.map": "/5709.c494eb62187917e2f2f6.chunk.js.map", - "3455.chunk.js.map": "/3455.f9ca876de57244386773.chunk.js.map", - "1396.chunk.js.map": "/1396.56f70d7c659ac0b694cd.chunk.js.map", - "5794.chunk.js.map": "/5794.252ff787d58d64eb4988.chunk.js.map", - "8938.chunk.js.map": "/8938.5116982f737a2ef85330.chunk.js.map", - "7208.chunk.js.map": "/7208.1d75cf5d007de32e403b.chunk.js.map", - "8239.chunk.js.map": "/8239.c85fc9f3599f198a9efb.chunk.js.map", - "9473.chunk.js.map": "/9473.4fd4742ffb6b5348bea8.chunk.js.map", - "6323.chunk.js.map": "/6323.26d4d949c9b6f8674c2e.chunk.js.map", - "9292.chunk.js.map": "/9292.cc5055091db9a0826933.chunk.js.map", - "7304.chunk.js.map": "/7304.ed4690ec296b59fbe7fd.chunk.js.map", - "8910.chunk.js.map": "/8910.019974f8675d8834dd07.chunk.js.map", - "6008.chunk.js.map": "/6008.3d0636fe17f4f6274485.chunk.js.map", - "963.chunk.js.map": "/963.35da4a3c4e49aac29dae.chunk.js.map", - "7436.chunk.js.map": "/7436.1ebd371d70e6a87c5499.chunk.js.map" -} \ No newline at end of file diff --git a/src/web/gui/v2/allFiles.6.json b/src/web/gui/v2/allFiles.6.json deleted file mode 100644 index e38d93a40..000000000 --- a/src/web/gui/v2/allFiles.6.json +++ /dev/null @@ -1,386 +0,0 @@ -{ - "bundlesManifest.json": "/bundlesManifest.6.json", - "app.css": "/app.cb2e9f9a81cf9533384e.css", - "app.js": "/app.08c9fe3ead1d43ff769b.js", - "runtime.js": "/runtime.ceccffb089cc539b1c1f.js", - "3624.chunk.js": "/3624.bfeb1fdc3057ba82ddac.chunk.js", - "7840.chunk.js": "/7840.2f2023f2eb1dcc943d94.chunk.js", - "5596.chunk.js": "/5596.2036706750ff4028cff2.chunk.js", - "3350.chunk.js": "/3350.ae7151980981854dc3d1.chunk.js", - "9818.chunk.js": "/9818.3ce64e0b472412bfbc97.chunk.js", - "7529.chunk.js": "/7529.658d363e12e73df83b60.chunk.js", - "1418.chunk.js": "/1418.16d53ba5cce2c6a8143a.chunk.js", - "1876.chunk.js": "/1876.e610906417b961290730.chunk.js", - "3621.chunk.js": "/3621.01ee70ee9c311ac163d9.chunk.js", - "7471.chunk.js": "/7471.f96c4d04a73fb7551c03.chunk.js", - "3736.chunk.js": "/3736.e572adfdf7951f74a741.chunk.js", - "683.css": "/683.cc9fa5f3bdc0bf3ab2fc.css", - "683.chunk.js": "/683.02c173493ef257c210fa.chunk.js", - "8784.chunk.js": "/8784.a04e9c07186e1f057f56.chunk.js", - "7146.chunk.js": "/7146.79304e386ac9238b7cf1.chunk.js", - "5598.chunk.js": "/5598.07ff43a6b96bd41e8637.chunk.js", - "7487.css": "/7487.89070793921be1288bb5.css", - "7487.chunk.js": "/7487.db63c95c27d973a07d9b.chunk.js", - "934.chunk.js": "/934.24d6fdc5f60aa6493962.chunk.js", - "7170.chunk.js": "/7170.5d6047bb6ce9d77d53db.chunk.js", - "8505.chunk.js": "/8505.c330f2104fefd71717da.chunk.js", - "5426.chunk.js": "/5426.254557ad3e1f2d14ad29.chunk.js", - "4680.chunk.js": "/4680.7d8122d91e9d4582836a.chunk.js", - "5700.chunk.js": "/5700.b7c9908dc7f30a5a57e7.chunk.js", - "5246.chunk.js": "/5246.07c5a1649f0805c140fe.chunk.js", - "3843.css": "/3843.89070793921be1288bb5.css", - "3843.chunk.js": "/3843.ffbb6f614ba4f7b77570.chunk.js", - "4034.chunk.js": "/4034.35199d2809d318eed690.chunk.js", - "1782.chunk.js": "/1782.d82eb301aa81b380dd0c.chunk.js", - "252.chunk.js": "/252.40edc9b0f6da1422f40b.chunk.js", - "6469.css": "/6469.89070793921be1288bb5.css", - "6469.chunk.js": "/6469.47926fa38028dc7d0d41.chunk.js", - "979.chunk.js": "/979.3e5fddf93c977e6c71c3.chunk.js", - "6331.css": "/6331.89070793921be1288bb5.css", - "6331.chunk.js": "/6331.c91b5d104cdff1be3b80.chunk.js", - "9843.chunk.js": "/9843.93f8c71c64ef97b9905e.chunk.js", - "1839.chunk.js": "/1839.a4196d2a87ac0fdd9f34.chunk.js", - "6661.chunk.js": "/6661.72f782bd78fea8c2d836.chunk.js", - "86.chunk.js": "/86.2c88d4d37b88e2620051.chunk.js", - "2007.chunk.js": "/2007.b33ce2b4b736228fd681.chunk.js", - "4958.chunk.js": "/4958.5969fedc1ff7dc82775e.chunk.js", - "9912.chunk.js": "/9912.702300c2dd9616289606.chunk.js", - "7959.chunk.js": "/7959.4f20f4b203e2bad8af39.chunk.js", - "3968.chunk.js": "/3968.483ca2ad3b300293e655.chunk.js", - "3104.chunk.js": "/3104.3b70865e21a81a616af3.chunk.js", - "8059.chunk.js": "/8059.4fdc76bb2cac1f74b41b.chunk.js", - "195.chunk.js": "/195.4cdbea6af54d14a95949.chunk.js", - "785.chunk.js": "/785.d016913841bcc0209d5b.chunk.js", - "7340.chunk.js": "/7340.25dce1c5cc66b613700f.chunk.js", - "7332.chunk.js": "/7332.3acf93dcfa52c7f1bc18.chunk.js", - "6944.chunk.js": "/6944.ab3e70c9ac0f05013b5f.chunk.js", - "6760.chunk.js": "/6760.370b9780120c145da28f.chunk.js", - "4140.css": "/4140.89070793921be1288bb5.css", - "4140.chunk.js": "/4140.46221d08bcda08826c78.chunk.js", - "185.chunk.js": "/185.42bab351ba68de7ca4aa.chunk.js", - "8842.chunk.js": "/8842.406028f523a00acb97bd.chunk.js", - "5304.chunk.js": "/5304.cc797fdd343c7e873b2f.chunk.js", - "3750.chunk.js": "/3750.4ad02f036f2a7c520b1c.chunk.js", - "4414.chunk.js": "/4414.590ba07d470ba2ce7dd0.chunk.js", - "9400.chunk.js": "/9400.6250bbf86c4fd3173de2.chunk.js", - "npm.react.dom.js": "/npm.react.dom.2994f1b4604bd8ce80f6.js", - "netdata.ui.js": "/netdata.ui.647a4c3303ee8ec0da64.js", - "netdata.charts.js": "/netdata.charts.fdfd27674ac5533bbcc2.js", - "8637.js": "/8637.0958494526e838a60d2b.js", - "7144.chunk.js": "/7144.382c341e09540fdebaa6.chunk.js", - "7857.chunk.js": "/7857.813ae058cca579e05462.chunk.js", - "4631.chunk.js": "/4631.158982e127e11bdc6a45.chunk.js", - "1220.chunk.js": "/1220.01d6bbaab869c74f4437.chunk.js", - "749.chunk.js": "/749.e44087ac3a2e3a994318.chunk.js", - "7519.chunk.js": "/7519.7982a2e0fcdf82ba78dd.chunk.js", - "6121.chunk.js": "/6121.f7286809e53e1c6d655a.chunk.js", - "6384.chunk.js": "/6384.0fad56b0bc902f186c98.chunk.js", - "8323.css": "/8323.e22de33686bb2f34063c.css", - "8323.chunk.js": "/8323.437406936b642e8f6cb3.chunk.js", - "5709.chunk.js": "/5709.c494eb62187917e2f2f6.chunk.js", - "3455.chunk.js": "/3455.f9ca876de57244386773.chunk.js", - "1396.chunk.js": "/1396.56f70d7c659ac0b694cd.chunk.js", - "5794.chunk.js": "/5794.252ff787d58d64eb4988.chunk.js", - "8938.chunk.js": "/8938.5116982f737a2ef85330.chunk.js", - "7208.chunk.js": "/7208.1d75cf5d007de32e403b.chunk.js", - "8239.chunk.js": "/8239.c85fc9f3599f198a9efb.chunk.js", - "9473.chunk.js": "/9473.4fd4742ffb6b5348bea8.chunk.js", - "6323.chunk.js": "/6323.26d4d949c9b6f8674c2e.chunk.js", - "9292.chunk.js": "/9292.cc5055091db9a0826933.chunk.js", - "7304.chunk.js": "/7304.ed4690ec296b59fbe7fd.chunk.js", - "8910.chunk.js": "/8910.019974f8675d8834dd07.chunk.js", - "6008.chunk.js": "/6008.3d0636fe17f4f6274485.chunk.js", - "963.chunk.js": "/963.35da4a3c4e49aac29dae.chunk.js", - "7436.chunk.js": "/7436.1ebd371d70e6a87c5499.chunk.js", - "3D_PARTY_LICENSES.txt": "/3D_PARTY_LICENSES.txt", - "static/site/pages/holding-page-503/holding-page-503.svg": "/static/site/pages/holding-page-503/holding-page-503.svg", - "favicon.ico": "/favicon.ico", - "static/img/logos/services/graphite.svg": "/static/img/logos/services/graphite.svg", - "sw.js": "/sw.js", - "static/img/no-filter-results.png": "/static/img/no-filter-results.png", - "static/img/logos/services/retroshare.svg": "/static/img/logos/services/retroshare.svg", - "static/img/logos/services/squid.svg": "/static/img/logos/services/squid.svg", - "static/img/no-nodes-room.svg": "/static/img/no-nodes-room.svg", - "static/img/logos/services/libvirt.svg": "/static/img/logos/services/libvirt.svg", - "static/img/logos/services/postfix.svg": "/static/img/logos/services/postfix.svg", - "static/img/logos/services/proxysql.svg": "/static/img/logos/services/proxysql.svg", - "static/img/logos/services/varnish.svg": "/static/img/logos/services/varnish.svg", - "static/img/logos/services/lxd.svg": "/static/img/logos/services/lxd.svg", - "static/img/logos/services/freeradius.svg": "/static/img/logos/services/freeradius.svg", - "static/img/logos/services/prowl.svg": "/static/img/logos/services/prowl.svg", - "static/img/logos/services/traefik.svg": "/static/img/logos/services/traefik.svg", - "static/img/logos/services/rethinkdb.svg": "/static/img/logos/services/rethinkdb.svg", - "static/img/logos/os/gentoo.svg": "/static/img/logos/os/gentoo.svg", - "static/img/logos/services/apc.svg": "/static/img/logos/services/apc.svg", - "static/img/logos/services/statsd.svg": "/static/img/logos/services/statsd.svg", - "static/img/logos/services/openldap.svg": "/static/img/logos/services/openldap.svg", - "static/img/logos/services/cups.svg": "/static/img/logos/services/cups.svg", - "static/img/logos/os/openwrt.svg": "/static/img/logos/os/openwrt.svg", - "static/img/logos/services/spigot.svg": "/static/img/logos/services/spigot.svg", - "static/img/logos/services/stiebel.svg": "/static/img/logos/services/stiebel.svg", - "agent.html": "/agent.html", - "local-agent.html": "/local-agent.html", - "static/img/logos/os/opensuse.svg": "/static/img/logos/os/opensuse.svg", - "static/img/logos/services/apache.svg": "/static/img/logos/services/apache.svg", - "static/img/logos/services/beanstalkd.svg": "/static/img/logos/services/beanstalkd.svg", - "static/img/logos/services/golang.svg": "/static/img/logos/services/golang.svg", - "static/img/new-dashboard.svg": "/static/img/new-dashboard.svg", - "static/img/logos/services/activemq.svg": "/static/img/logos/services/activemq.svg", - "static/img/logos/os/kubernetes.svg": "/static/img/logos/os/kubernetes.svg", - "static/img/logos/services/kubernetes.svg": "/static/img/logos/services/kubernetes.svg", - "static/img/logos/services/systemd.svg": "/static/img/logos/services/systemd.svg", - "static/img/logos/services/influxdb.svg": "/static/img/logos/services/influxdb.svg", - "static/img/rack.png": "/static/img/rack.png", - "static/email/img/isotype_600.png": "/static/email/img/isotype_600.png", - "static/img/logos/services/irc.svg": "/static/img/logos/services/irc.svg", - "static/img/logos/services/tomcat.svg": "/static/img/logos/services/tomcat.svg", - "registry-alert-redirect.html": "/registry-alert-redirect.html", - "static/img/logos/services/mariadb.svg": "/static/img/logos/services/mariadb.svg", - "static/img/logos/services/openzfs.svg": "/static/img/logos/services/openzfs.svg", - "static/img/logos/services/veritas.svg": "/static/img/logos/services/veritas.svg", - "static/img/logos/services/boinc.svg": "/static/img/logos/services/boinc.svg", - "static/img/logos/services/fail2ban.svg": "/static/img/logos/services/fail2ban.svg", - "static/img/logos/services/dns.svg": "/static/img/logos/services/dns.svg", - "static/img/logos/services/netfilter.svg": "/static/img/logos/services/netfilter.svg", - "static/img/logos/services/uwsgi.svg": "/static/img/logos/services/uwsgi.svg", - "static/img/logos/services/btrfs.svg": "/static/img/logos/services/btrfs.svg", - "static/img/logos/services/adaptec.svg": "/static/img/logos/services/adaptec.svg", - "static/img/logos/services/icecast.svg": "/static/img/logos/services/icecast.svg", - "static/img/logos/services/xen.svg": "/static/img/logos/services/xen.svg", - "static/img/logos/services/haproxy.svg": "/static/img/logos/services/haproxy.svg", - "static/img/logos/services/tor.svg": "/static/img/logos/services/tor.svg", - "static/img/logos/services/mysql.svg": "/static/img/logos/services/mysql.svg", - "static/img/logos/services/memcached.svg": "/static/img/logos/services/memcached.svg", - "static/img/logos/services/libreswan.svg": "/static/img/logos/services/libreswan.svg", - "static/img/logos/services/grafana.svg": "/static/img/logos/services/grafana.svg", - "static/img/logos/os/raspberry-pi.svg": "/static/img/logos/os/raspberry-pi.svg", - "static/img/logos/services/raspberry-pi.svg": "/static/img/logos/services/raspberry-pi.svg", - "static/img/logos/services/fluentd.svg": "/static/img/logos/services/fluentd.svg", - "static/img/logos/services/kairosdb.svg": "/static/img/logos/services/kairosdb.svg", - "static/img/logos/services/docker.svg": "/static/img/logos/services/docker.svg", - "static/img/logos/services/opentsdb.svg": "/static/img/logos/services/opentsdb.svg", - "static/img/logos/services/php-fpm.svg": "/static/img/logos/services/php-fpm.svg", - "static/img/logos/services/monit.svg": "/static/img/logos/services/monit.svg", - "static/img/logos/services/fping.svg": "/static/img/logos/services/fping.svg", - "static/img/logos/services/ntpd.svg": "/static/img/logos/services/ntpd.svg", - "static/email/img/header.png": "/static/email/img/header.png", - "static/img/logos/os/freenas.svg": "/static/img/logos/os/freenas.svg", - "static/img/logos/os/linux-small.svg": "/static/img/logos/os/linux-small.svg", - "static/img/logos/services/aws.svg": "/static/img/logos/services/aws.svg", - "static/img/logos/services/unbound.svg": "/static/img/logos/services/unbound.svg", - "static/img/logos/services/nsd.svg": "/static/img/logos/services/nsd.svg", - "static/img/logos/os/macos.svg": "/static/img/logos/os/macos.svg", - "static/img/logos/os/linux.svg": "/static/img/logos/os/linux.svg", - "static/img/logos/services/linux.svg": "/static/img/logos/services/linux.svg", - "static/img/logos/services/postgresql.svg": "/static/img/logos/services/postgresql.svg", - "static/img/logos/services/litespeed.svg": "/static/img/logos/services/litespeed.svg", - "registry-hello.html": "/registry-hello.html", - "static/img/logos/services/slack.svg": "/static/img/logos/services/slack.svg", - "static/img/logos/services/gnu-freeipmi.svg": "/static/img/logos/services/gnu-freeipmi.svg", - "static/img/logos/services/isc.svg": "/static/img/logos/services/isc.svg", - "static/img/logos/services/solr.svg": "/static/img/logos/services/solr.svg", - "static/img/logos/services/nut.svg": "/static/img/logos/services/nut.svg", - "static/img/logos/os/debian.svg": "/static/img/logos/os/debian.svg", - "static/img/logos/services/smstools3.svg": "/static/img/logos/services/smstools3.svg", - "static/email/img/reachability_siren.png": "/static/email/img/reachability_siren.png", - "static/splash.css": "/static/splash.css", - "registry-access.html": "/registry-access.html", - "static/img/logos/services/server-connection.svg": "/static/img/logos/services/server-connection.svg", - "LICENSE.md": "/LICENSE.md", - "static/email/img/crit_siren.png": "/static/email/img/crit_siren.png", - "static/img/logos/services/pushover.svg": "/static/img/logos/services/pushover.svg", - "static/img/logos/services/openvpn.svg": "/static/img/logos/services/openvpn.svg", - "static/img/logos/os/suse.svg": "/static/img/logos/os/suse.svg", - "static/img/logos/services/couchdb.svg": "/static/img/logos/services/couchdb.svg", - "static/img/logos/os/manjaro.svg": "/static/img/logos/os/manjaro.svg", - "static/img/logos/services/rabbitmq.svg": "/static/img/logos/services/rabbitmq.svg", - "static/img/logos/services/sma.svg": "/static/img/logos/services/sma.svg", - "static/email/img/warn_siren.png": "/static/email/img/warn_siren.png", - "static/img/logos/os/arch.svg": "/static/img/logos/os/arch.svg", - "static/img/logos/os/freebsd.svg": "/static/img/logos/os/freebsd.svg", - "static/img/logos/services/flock.svg": "/static/img/logos/services/flock.svg", - "static/img/logos/services/prometheus.svg": "/static/img/logos/services/prometheus.svg", - "static/img/logos/services/redis.svg": "/static/img/logos/services/redis.svg", - "static/img/logos/services/ipfs.svg": "/static/img/logos/services/ipfs.svg", - "static/img/logos/os/redhat.svg": "/static/img/logos/os/redhat.svg", - "static/img/logos/services/concul.svg": "/static/img/logos/services/concul.svg", - "static/img/mail/isotype.png": "/static/img/mail/isotype.png", - "static/img/logos/services/processor.svg": "/static/img/logos/services/processor.svg", - "static/img/logos/services/lm-sensors.svg": "/static/img/logos/services/lm-sensors.svg", - "static/img/logos/services/data-encryption.svg": "/static/img/logos/services/data-encryption.svg", - "static/site/pages/holding-page-503/multiple-logos-group.svg": "/static/site/pages/holding-page-503/multiple-logos-group.svg", - "static/email/img/crit_badge.png": "/static/email/img/crit_badge.png", - "static/img/logos/services/load-balancer.svg": "/static/img/logos/services/load-balancer.svg", - "index.html": "/index.html", - "static/img/logos/services/elasticsearch.svg": "/static/img/logos/services/elasticsearch.svg", - "static/img/logos/os/centos.svg": "/static/img/logos/os/centos.svg", - "static/email/img/clea_siren.png": "/static/email/img/clea_siren.png", - "static/img/logos/services/ceph.svg": "/static/img/logos/services/ceph.svg", - "static/img/logos/services/log-file.svg": "/static/img/logos/services/log-file.svg", - "static/img/logos/services/container.svg": "/static/img/logos/services/container.svg", - "static/img/logos/services/dovecot.svg": "/static/img/logos/services/dovecot.svg", - "static/img/logos/services/exim.svg": "/static/img/logos/services/exim.svg", - "static/img/logos/services/chrony.svg": "/static/img/logos/services/chrony.svg", - "static/email/img/warn_badge.png": "/static/email/img/warn_badge.png", - "static/img/logos/services/nfs.svg": "/static/img/logos/services/nfs.svg", - "static/img/logos/os/fedora.svg": "/static/img/logos/os/fedora.svg", - "static/img/logos/os/ubuntu.svg": "/static/img/logos/os/ubuntu.svg", - "static/img/logos/services/notification-bell.svg": "/static/img/logos/services/notification-bell.svg", - "static/email/img/flood_siren.png": "/static/email/img/flood_siren.png", - "static/img/logos/services/access-point.svg": "/static/img/logos/services/access-point.svg", - "static/email/img/label_recovered.png": "/static/email/img/label_recovered.png", - "static/img/logos/services/samba.svg": "/static/img/logos/services/samba.svg", - "static/img/logos/services/monitoring.svg": "/static/img/logos/services/monitoring.svg", - "static/img/logos/services/key-file.svg": "/static/img/logos/services/key-file.svg", - "static/img/logos/services/kafka.svg": "/static/img/logos/services/kafka.svg", - "static/email/img/label_warning.png": "/static/email/img/label_warning.png", - "static/img/logos/services/rocketchat.svg": "/static/img/logos/services/rocketchat.svg", - "static/img/mail/logotype.svg": "/static/img/mail/logotype.svg", - "static/img/logos/services/nginx-plus.svg": "/static/img/logos/services/nginx-plus.svg", - "static/email/img/label_critical.png": "/static/email/img/label_critical.png", - "static/img/logos/services/fronius.svg": "/static/img/logos/services/fronius.svg", - "static/img/logos/services/puppet.svg": "/static/img/logos/services/puppet.svg", - "static/img/logos/os/pfsense.svg": "/static/img/logos/os/pfsense.svg", - "static/img/logos/services/consul.svg": "/static/img/logos/services/consul.svg", - "static/img/logos/os/coreos.svg": "/static/img/logos/os/coreos.svg", - "static/site/pages/holding-page-503/index.html": "/static/site/pages/holding-page-503/index.html", - "static/site/pages/holding-page-503/holding-page-503.css": "/static/site/pages/holding-page-503/holding-page-503.css", - "static/img/logos/services/network.svg": "/static/img/logos/services/network.svg", - "static/img/logos/services/qos.svg": "/static/img/logos/services/qos.svg", - "static/img/logos/services/email.svg": "/static/img/logos/services/email.svg", - "static/img/logos/services/ddos.svg": "/static/img/logos/services/ddos.svg", - "static/img/logos/os/openstack.svg": "/static/img/logos/os/openstack.svg", - "static/img/mail/logotype.png": "/static/img/mail/logotype.png", - "static/email/img/full_logo.png": "/static/email/img/full_logo.png", - "static/email/img/community_icon.png": "/static/email/img/community_icon.png", - "static/email/img/configure_icon.png": "/static/email/img/configure_icon.png", - "static/img/logos/services/temperature.svg": "/static/img/logos/services/temperature.svg", - "static/img/logos/services/pushbullet.svg": "/static/img/logos/services/pushbullet.svg", - "static/img/logos/services/nginx.svg": "/static/img/logos/services/nginx.svg", - "static/img/logos/services/cloud.svg": "/static/img/logos/services/cloud.svg", - "static/img/logos/services/pagerduty.svg": "/static/img/logos/services/pagerduty.svg", - "static/img/logos/services/alerta.svg": "/static/img/logos/services/alerta.svg", - "static/img/logos/services/mongodb.svg": "/static/img/logos/services/mongodb.svg", - "static/email/img/clea_badge.png": "/static/email/img/clea_badge.png", - "static/img/logos/services/discord.svg": "/static/img/logos/services/discord.svg", - "static/img/logos/os/alpine.svg": "/static/img/logos/os/alpine.svg", - "static/img/logos/os/placeholder.svg": "/static/img/logos/os/placeholder.svg", - "static/img/logos/services/aws-sns.svg": "/static/img/logos/services/aws-sns.svg", - "static/img/logos/services/telegram.svg": "/static/img/logos/services/telegram.svg", - "static/img/logos/os/oracle.svg": "/static/img/logos/os/oracle.svg", - "static/img/logos/services/oracle.svg": "/static/img/logos/services/oracle.svg", - "static/img/logos/services/network-protocol.svg": "/static/img/logos/services/network-protocol.svg", - "static/img/logos/services/nvidia.svg": "/static/img/logos/services/nvidia.svg", - "static/img/logos/services/springboot.svg": "/static/img/logos/services/springboot.svg", - "static/img/logos/services/kavenegar.svg": "/static/img/logos/services/kavenegar.svg", - "static/img/logos/services/powerdns.svg": "/static/img/logos/services/powerdns.svg", - "static/img/logos/os/docker.svg": "/static/img/logos/os/docker.svg", - "static/img/logos/services/messagebird.svg": "/static/img/logos/services/messagebird.svg", - "static/img/logos/services/placeholder.svg": "/static/img/logos/services/placeholder.svg", - "static/site/pages/holding-page-503/reset.svg": "/static/site/pages/holding-page-503/reset.svg", - "static/img/logos/services/twilio.svg": "/static/img/logos/services/twilio.svg", - "static/img/logos/services/lighthttpd.svg": "/static/img/logos/services/lighthttpd.svg", - "static/img/logos/os/rocky.svg": "/static/img/logos/os/rocky.svg", - "static/img/list-style-image.svg": "/static/img/list-style-image.svg", - ".well-known/assetlinks.json": "/.well-known/assetlinks.json", - "static/.well-known/assetlinks.json": "/static/.well-known/assetlinks.json", - "static/img/logos/services/opensips.svg": "/static/img/logos/services/opensips.svg", - "static/img/logos/services/logstash.svg": "/static/img/logos/services/logstash.svg", - "static/img/mail/isotype.svg": "/static/img/mail/isotype.svg", - "static/site/pages/holding-page-503/netdata-logo-white.svg": "/static/site/pages/holding-page-503/netdata-logo-white.svg", - "static/img/logos/services/hub.svg": "/static/img/logos/services/hub.svg", - "apple-app-site-association": "/apple-app-site-association", - "static/apple-app-site-association": "/static/apple-app-site-association", - "app.css.map": "/app.cb2e9f9a81cf9533384e.css.map", - "app.js.map": "/app.08c9fe3ead1d43ff769b.js.map", - "runtime.js.map": "/runtime.ceccffb089cc539b1c1f.js.map", - "3624.chunk.js.map": "/3624.bfeb1fdc3057ba82ddac.chunk.js.map", - "7840.chunk.js.map": "/7840.2f2023f2eb1dcc943d94.chunk.js.map", - "5596.chunk.js.map": "/5596.2036706750ff4028cff2.chunk.js.map", - "3350.chunk.js.map": "/3350.ae7151980981854dc3d1.chunk.js.map", - "9818.chunk.js.map": "/9818.3ce64e0b472412bfbc97.chunk.js.map", - "7529.chunk.js.map": "/7529.658d363e12e73df83b60.chunk.js.map", - "1418.chunk.js.map": "/1418.16d53ba5cce2c6a8143a.chunk.js.map", - "1876.chunk.js.map": "/1876.e610906417b961290730.chunk.js.map", - "3621.chunk.js.map": "/3621.01ee70ee9c311ac163d9.chunk.js.map", - "7471.chunk.js.map": "/7471.f96c4d04a73fb7551c03.chunk.js.map", - "3736.chunk.js.map": "/3736.e572adfdf7951f74a741.chunk.js.map", - "683.css.map": "/683.cc9fa5f3bdc0bf3ab2fc.css.map", - "683.chunk.js.map": "/683.02c173493ef257c210fa.chunk.js.map", - "8784.chunk.js.map": "/8784.a04e9c07186e1f057f56.chunk.js.map", - "7146.chunk.js.map": "/7146.79304e386ac9238b7cf1.chunk.js.map", - "5598.chunk.js.map": "/5598.07ff43a6b96bd41e8637.chunk.js.map", - "7487.css.map": "/7487.89070793921be1288bb5.css.map", - "7487.chunk.js.map": "/7487.db63c95c27d973a07d9b.chunk.js.map", - "934.chunk.js.map": "/934.24d6fdc5f60aa6493962.chunk.js.map", - "7170.chunk.js.map": "/7170.5d6047bb6ce9d77d53db.chunk.js.map", - "8505.chunk.js.map": "/8505.c330f2104fefd71717da.chunk.js.map", - "5426.chunk.js.map": "/5426.254557ad3e1f2d14ad29.chunk.js.map", - "4680.chunk.js.map": "/4680.7d8122d91e9d4582836a.chunk.js.map", - "5700.chunk.js.map": "/5700.b7c9908dc7f30a5a57e7.chunk.js.map", - "5246.chunk.js.map": "/5246.07c5a1649f0805c140fe.chunk.js.map", - "3843.css.map": "/3843.89070793921be1288bb5.css.map", - "3843.chunk.js.map": "/3843.ffbb6f614ba4f7b77570.chunk.js.map", - "4034.chunk.js.map": "/4034.35199d2809d318eed690.chunk.js.map", - "1782.chunk.js.map": "/1782.d82eb301aa81b380dd0c.chunk.js.map", - "252.chunk.js.map": "/252.40edc9b0f6da1422f40b.chunk.js.map", - "6469.css.map": "/6469.89070793921be1288bb5.css.map", - "6469.chunk.js.map": "/6469.47926fa38028dc7d0d41.chunk.js.map", - "979.chunk.js.map": "/979.3e5fddf93c977e6c71c3.chunk.js.map", - "6331.css.map": "/6331.89070793921be1288bb5.css.map", - "6331.chunk.js.map": "/6331.c91b5d104cdff1be3b80.chunk.js.map", - "9843.chunk.js.map": "/9843.93f8c71c64ef97b9905e.chunk.js.map", - "1839.chunk.js.map": "/1839.a4196d2a87ac0fdd9f34.chunk.js.map", - "6661.chunk.js.map": "/6661.72f782bd78fea8c2d836.chunk.js.map", - "86.chunk.js.map": "/86.2c88d4d37b88e2620051.chunk.js.map", - "2007.chunk.js.map": "/2007.b33ce2b4b736228fd681.chunk.js.map", - "4958.chunk.js.map": "/4958.5969fedc1ff7dc82775e.chunk.js.map", - "9912.chunk.js.map": "/9912.702300c2dd9616289606.chunk.js.map", - "7959.chunk.js.map": "/7959.4f20f4b203e2bad8af39.chunk.js.map", - "3968.chunk.js.map": "/3968.483ca2ad3b300293e655.chunk.js.map", - "3104.chunk.js.map": "/3104.3b70865e21a81a616af3.chunk.js.map", - "8059.chunk.js.map": "/8059.4fdc76bb2cac1f74b41b.chunk.js.map", - "195.chunk.js.map": "/195.4cdbea6af54d14a95949.chunk.js.map", - "785.chunk.js.map": "/785.d016913841bcc0209d5b.chunk.js.map", - "7340.chunk.js.map": "/7340.25dce1c5cc66b613700f.chunk.js.map", - "7332.chunk.js.map": "/7332.3acf93dcfa52c7f1bc18.chunk.js.map", - "6944.chunk.js.map": "/6944.ab3e70c9ac0f05013b5f.chunk.js.map", - "6760.chunk.js.map": "/6760.370b9780120c145da28f.chunk.js.map", - "4140.css.map": "/4140.89070793921be1288bb5.css.map", - "4140.chunk.js.map": "/4140.46221d08bcda08826c78.chunk.js.map", - "185.chunk.js.map": "/185.42bab351ba68de7ca4aa.chunk.js.map", - "8842.chunk.js.map": "/8842.406028f523a00acb97bd.chunk.js.map", - "5304.chunk.js.map": "/5304.cc797fdd343c7e873b2f.chunk.js.map", - "3750.chunk.js.map": "/3750.4ad02f036f2a7c520b1c.chunk.js.map", - "4414.chunk.js.map": "/4414.590ba07d470ba2ce7dd0.chunk.js.map", - "9400.chunk.js.map": "/9400.6250bbf86c4fd3173de2.chunk.js.map", - "npm.react.dom.js.map": "/npm.react.dom.2994f1b4604bd8ce80f6.js.map", - "netdata.ui.js.map": "/netdata.ui.647a4c3303ee8ec0da64.js.map", - "netdata.charts.js.map": "/netdata.charts.fdfd27674ac5533bbcc2.js.map", - "8637.js.map": "/8637.0958494526e838a60d2b.js.map", - "7144.chunk.js.map": "/7144.382c341e09540fdebaa6.chunk.js.map", - "7857.chunk.js.map": "/7857.813ae058cca579e05462.chunk.js.map", - "4631.chunk.js.map": "/4631.158982e127e11bdc6a45.chunk.js.map", - "1220.chunk.js.map": "/1220.01d6bbaab869c74f4437.chunk.js.map", - "749.chunk.js.map": "/749.e44087ac3a2e3a994318.chunk.js.map", - "7519.chunk.js.map": "/7519.7982a2e0fcdf82ba78dd.chunk.js.map", - "6121.chunk.js.map": "/6121.f7286809e53e1c6d655a.chunk.js.map", - "6384.chunk.js.map": "/6384.0fad56b0bc902f186c98.chunk.js.map", - "8323.css.map": "/8323.e22de33686bb2f34063c.css.map", - "8323.chunk.js.map": "/8323.437406936b642e8f6cb3.chunk.js.map", - "5709.chunk.js.map": "/5709.c494eb62187917e2f2f6.chunk.js.map", - "3455.chunk.js.map": "/3455.f9ca876de57244386773.chunk.js.map", - "1396.chunk.js.map": "/1396.56f70d7c659ac0b694cd.chunk.js.map", - "5794.chunk.js.map": "/5794.252ff787d58d64eb4988.chunk.js.map", - "8938.chunk.js.map": "/8938.5116982f737a2ef85330.chunk.js.map", - "7208.chunk.js.map": "/7208.1d75cf5d007de32e403b.chunk.js.map", - "8239.chunk.js.map": "/8239.c85fc9f3599f198a9efb.chunk.js.map", - "9473.chunk.js.map": "/9473.4fd4742ffb6b5348bea8.chunk.js.map", - "6323.chunk.js.map": "/6323.26d4d949c9b6f8674c2e.chunk.js.map", - "9292.chunk.js.map": "/9292.cc5055091db9a0826933.chunk.js.map", - "7304.chunk.js.map": "/7304.ed4690ec296b59fbe7fd.chunk.js.map", - "8910.chunk.js.map": "/8910.019974f8675d8834dd07.chunk.js.map", - "6008.chunk.js.map": "/6008.3d0636fe17f4f6274485.chunk.js.map", - "963.chunk.js.map": "/963.35da4a3c4e49aac29dae.chunk.js.map", - "7436.chunk.js.map": "/7436.1ebd371d70e6a87c5499.chunk.js.map" -} \ No newline at end of file diff --git a/src/web/gui/v2/app.08c9fe3ead1d43ff769b.js b/src/web/gui/v2/app.08c9fe3ead1d43ff769b.js deleted file mode 100644 index 2540a1142..000000000 --- a/src/web/gui/v2/app.08c9fe3ead1d43ff769b.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="c00e49dd-0bde-488b-aa4e-cb2cbd03e2c2",e._sentryDebugIdIdentifier="sentry-dbid-c00e49dd-0bde-488b-aa4e-cb2cbd03e2c2")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[3524],{80158:(e,t,a)=>{"use strict";a.d(t,{P3:()=>r,QU:()=>s,Vn:()=>i,Yv:()=>c,Zr:()=>o});a(25440);var n=a(86263);const r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;return(0,n.default)(e,t)},o=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=arguments.length>1&&void 0!==arguments[1]&&arguments[1]?e.toLowerCase():e;return t.charAt(0).toUpperCase()+t.slice(1)},i=e=>e.replace(/([a-z])([A-Z])/g,"$1 $2"),s=e=>e.replace(/([^:]\/)\/+/g,"$1"),c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e=e.trim(),e=e.replace(/\s+/g,"-"),e=e.replace(/[^a-zA-Z0-9-]/g,""),e=e.toLowerCase(),e}},63314:(e,t,a)=>{"use strict";a.d(t,{K_:()=>s,DL:()=>m,_0:()=>d,Ay:()=>g});a(3064),a(98992),a(72577),a(62953);var n=a(96540),r=a(50876),o=a(58168);var i=a(67276);const s=(0,n.createContext)({}),c={allowLogInvisible:!0},l=e=>{let{children:t,logImpression:a=!0,options:o={},delay:l=750,...d}=e;const u={...c,...o},m=(0,n.useContext)(s),[g,p]=(0,n.useState)(),h=(0,n.useRef)(),v=(0,n.useRef)(),{sendLog:f,isReady:A}=(0,r.A)(),y=(0,n.useCallback)((e=>{const t=e[0];t&&g!==t.isIntersecting&&p(t.isIntersecting)}),[]),b=(0,n.useCallback)((()=>{var e;const t=new IntersectionObserver(y,{root:null,rootMargin:"0px",threshold:.5}),a=null===h||void 0===h||null===(e=h.current)||void 0===e?void 0:e.childNodes,n=Array.from(a||[]).find((e=>null!==e.offsetParent));n&&t.observe(n)}),[null===h||void 0===h?void 0:h.current]);return(0,n.useEffect)((()=>{u.allowLogInvisible||b()}),[u.allowLogInvisible]),(0,n.useEffect)((()=>{let e=!0,t=null;const n={action:i.o1.elementViewed,...m,...d};return A&&(null===v||void 0===v?void 0:v.current)!==JSON.stringify(n)&&a&&(u.allowLogInvisible||g)&&(t=setTimeout((()=>{e&&(f(n),v.current=JSON.stringify(n))}),l)),()=>{e=!1,t&&(clearTimeout(t),t=null)}}),[A,a,g,d]),n.createElement(s.Consumer,null,(e=>n.createElement(s.Provider,{value:{...e,...d}},n.createElement("div",{ref:h,style:{display:"contents"}},t))))},d=(u=l,e=>n.createElement(u,(0,o.A)({},e,{isSuccess:!0})));var u;const m=(e=>t=>n.createElement(e,(0,o.A)({},t,{isFailure:!0})))(l),g=l},67276:(e,t,a)=>{"use strict";a.d(t,{KI:()=>n,lO:()=>r,mu:()=>s,o1:()=>i,yq:()=>o});const n={success:"success",fail:"failure"},r={visitor:"visitor"},o={sequence:"telemetrySequence",session:"telemetrySessionId"},i={elementViewed:"element-viewed",buttonClicked:"button-clicked"},s={start:"start",end:"end"}},50876:(e,t,a)=>{"use strict";a.d(t,{A:()=>y});a(62953);var n=a(96540),r=a(63950),o=a.n(r),i=a(37618),s=a(26655);var c,l=a(3914),d=a(63314),u=a(35600),m=a(75542);const g="undefined"!==typeof process&&!(null===(c=process)||void 0===c||null===(c=c.env)||void 0===c||!c.JEST_WORKER_ID);var p=a(69418),h=a(67276),v=a(67990),f=a(88982),A=a(47762);const y=()=>{if(g)return{sendLog:o(),isReady:!0};const e=(0,m.A)(),{isAnonymous:t,...a}=e,r=(0,l.vt)(),c=(0,n.useContext)(d.K_),[,y,b]=(0,p.A)(),S=a.id&&(!y||t),k=(0,f.n)("id"),I=(0,v.gr)(k,"ids"),w=(0,A.BU)(I),E=(0,A.Ig)(I),x=(0,A.GE)(I),C=(0,A.no)(I),T=(0,n.useCallback)(((e,t)=>{var n,o;const l={...t?{...c}:{},...e},{feature:d,action:m,isStart:g,isSuccess:p,isFailure:v,eventReason:f,...A}=l;return(e=>s.A.post("/api/v1/telemetry/push",e))({"@timestamp":(new Date).toISOString(),labels:{...A,...window.localNetdataRegistry?{...window.localNetdataRegistry.mg?{machine:window.localNetdataRegistry.mg}:{},...window.localNetdataRegistry.nd?{nodeId:window.localNetdataRegistry.nd}:{}}:{}},event:{action:m,sequence:(0,u.Il)(),provider:i.Ay?"agent":"app",...p||v?{outcome:p?h.KI.success:h.KI.fail}:{},...g?{type:[h.mu.start]}:p||v?{type:[h.mu.end]}:{},...f?{reason:f}:{}},user:a,url:{full:null===(n=window)||void 0===n||null===(n=n.location)||void 0===n?void 0:n.href},Netdata:{...r?{space:{id:r}}:{},statistics:{nodes:{total:i.Ay?1:b,...i.Ay?{}:{live:(w||[]).length,stale:(E||[]).length,offline:(x||[]).length,created:(C||[]).length}}},telemetry:{feature:d,session:{id:(0,u.u0)()},visitor:{id:null===(o=window.envSettings)||void 0===o?void 0:o.visitor}}}}).catch((e=>{"production"!==window.envSettings.nodeEnv&&(console.groupCollapsed("[Netdata telemetry error]"),console.warn(e),console.groupEnd())}))}),[a,t,b,y,r,S]),N=(0,n.useCallback)(((e,t)=>T({action:h.o1.buttonClicked,...e},t)),[]);return{sendLog:T,sendButtonClickedLog:N,isReady:S,user:e}}},75542:(e,t,a)=>{"use strict";a.d(t,{A:()=>i});a(25440);var n=a(96540),r=a(22292),o=a(37618);const i=()=>{const{id:e,email:t,isAnonymous:a}=(0,r.uW)();return(0,n.useMemo)((()=>{var n,r,i;return{id:a?(null===(n=window.localNetdataRegistry)||void 0===n?void 0:n.pg)||window.envSettings.visitor:e||"",email:a?void 0:t,domain:a?(null===(r=window.localNetdataRegistry)||void 0===r?void 0:r.registry)||"localhost":o.Ay?((null===(i=window.envSettings)||void 0===i?void 0:i.apiUrl)||"").replace(/^https:\/\//,""):location.host,isAnonymous:a}}),[e,t,a])}},35600:(e,t,a)=>{"use strict";a.d(t,{Il:()=>o,u0:()=>i,y:()=>s});a(9920),a(98992),a(3949);var n=a(67276),r=a(33829);const o=()=>{var e,t;const a=n.yq.sequence,r=parseInt((null===(e=window.sessionStorage)||void 0===e?void 0:e.getItem(a))||0,10);return null===(t=window.sessionStorage)||void 0===t||t.setItem(a,r+1),r},i=()=>(sessionStorage.getItem(n.yq.session)||sessionStorage.setItem(n.yq.session,(0,r.A)()),sessionStorage.getItem(n.yq.session)||""),s=()=>{Object.values(n.yq).forEach((e=>sessionStorage.removeItem(e)))}},21290:(e,t,a)=>{"use strict";a.d(t,{$j:()=>g,ii:()=>u});var n=a(96540),r=a(87991),o=a(38819),i=a(82838);const s=!!(Intl&&Intl.DateTimeFormat&&navigator.language),c=e=>"number"===typeof e?new Date(e):e,l=e=>(e=c(e))?(0,r.GP)(e,"MM/dd/yyyy"):"",d=e=>(e=c(e))?(0,r.GP)(e,"HH:mm"):"",u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return new Date(new Date(e).getTime()+60*parseInt(t)*60*1e3)},m=(e,t)=>{let{locale:a,...n}=t;return new Intl.DateTimeFormat(null!==a&&void 0!==a?a:navigator.language,(e=>{let{long:t,isTime:a,secs:n,timezone:r,...o}=e;return{hourCycle:"h23",...a?{}:t?{weekday:"short",year:"numeric",month:"short",day:"2-digit"}:{dateStyle:"short"},...a&&{timeStyle:n?"medium":"short"},timeZone:r,...o}})(n)).format(e)},g=()=>{const{utc:e,offset:t}=(()=>{let{utc:e}=(0,o.PP)();return(0,i.M)("default",e)})();return{localeDateString:(0,n.useMemo)((()=>s?(t,a)=>m(t,{long:!0,timezone:e,...a}):l),[e]),localeTimeString:(0,n.useMemo)((()=>s?(t,a)=>m(t,{secs:!0,isTime:!0,timezone:e,...a}):d),[e]),utcOffset:t}}},65570:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>o,pb:()=>n});a(74648),a(17333),a(98992),a(23215),a(54520);const n=(e,t)=>{let{omit:a=[],keep:n=[]}=t;return a.length||n.length?e.filter((e=>n.length?n.includes(e):!a.includes(e))):e},r=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e===t)return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;const o=n(Object.keys(e),a),i=n(Object.keys(t),a);if(o.length!==i.length)return!1;const s=Object.prototype.hasOwnProperty.bind(t);return o.every((a=>!!s(a)&&r(e[a],t[a])))},o=r},64454:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});a(14905),a(98992),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(65570);const r=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e===t||"object"!==typeof e||null===e||"object"!==typeof t||null===t?t:Array.isArray(t)?((e,t,a)=>{const o=(0,n.pb)(e,a);return o.reduce(((e,t,n)=>(e.push(r(t,o[n],a)),e)),[])})(e,0,a):((e,t,a)=>{const o=(0,n.pb)([...new Set([...Object.keys(e),...Object.keys(t)])],a),i=Object.prototype.hasOwnProperty.bind(t);return o.reduce(((n,o)=>(i(o)?n[o]=r(e[o],t[o],a):n[o]=e[o],n)),{})})(e,t,a)},o=r},38819:(e,t,a)=>{"use strict";a.d(t,{PP:()=>d,Pg:()=>h,W6:()=>p,Z8:()=>g,yq:()=>m});a(41393),a(14905),a(98992),a(81454),a(8872),a(62953);var n=a(49870),r=a.n(n),o=a(55364),i=a.n(o),s=a(90179),c=a.n(s);const l=/[&;]/,d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:decodeURIComponent(window.location.hash.substr(1));if(0===e.length)return{};return e.split(l).reduce(((e,t)=>{const a=t.indexOf("=");if(-1!==a){e[t.substring(0,a)]=t.substring(a+1)}return e}),{})},u=e=>{const t=Object.entries(e);return 0===t.length?"":t.map((e=>{let[t,a]=e;return"".concat(t,"=").concat(encodeURIComponent(a))})).join("&")},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:decodeURIComponent(window.location.hash.substr(1));const a=c()(d(t),e);return u(a)},g=(r()([d,u]),e=>{const t=d();i()(t,e);const a="#".concat(u(t)),n=history.state;location.hash=a,history.replaceState(n,"",a)}),p=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:decodeURIComponent(window.location.hash.substr(1));return d(t)[e]},h=e=>{history.replaceState(history.state,"","#".concat(m(e)))}},63457:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});var n=a(77783),r=a(63950),o=a.n(r);const i=86400,s=e=>{if(!e)throw new Error("Please pass a name for the idb store");const t=(0,n.y$)(e,"".concat(e,"-cache")),a=(e,a)=>(0,n.hZ)(e,(e=>({value:e,timestamp:Date.now()}))(a),t).catch(o());return{store:t,set:a,get:function(e){let r,{fetch:s,maxAge:c=i}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const l=(0,n.Jt)(e,t).then((t=>{const n=1e3*c;return t&&t.timestamp+n>Date.now()?t.value:s?(r=s(),r.then((t=>(a(e,t),t)))):null})).catch(o());return l.abort=()=>r&&r.abort(),l},clear:()=>(0,n.IU)(t).catch(o()),del:e=>(0,n.yH)(e,t).catch(o())}}},37618:(e,t,a)=>{"use strict";a.d(t,{mz:()=>S,LA:()=>b,hq:()=>v,gB:()=>h,yu:()=>p,Z2:()=>g,z0:()=>m,Ay:()=>k,kG:()=>f,I:()=>l,tB:()=>y,ES:()=>A,y7:()=>d,sA:()=>u});a(25440);var n=a(38280),r=a(80158);var o,i,s;const c=(null===(o=window.envSettings)||void 0===o?void 0:o.isAgent)||!1,l=()=>{var e,t,a;return c&&!(null!==(e=window.localNetdataAgent)&&void 0!==e&&e.cloudEnabled||"disabled"!==(null===(t=window.localNetdataRegistry)||void 0===t?void 0:t.cloudStatus)&&"unavailable"!==(null===(a=window.localNetdataRegistry)||void 0===a?void 0:a.cloudStatus)||localStorage.getItem("netdataJWT"))},d=/\/(spaces|nodes|overview|alerts|dashboards|anomalies|events|cloud)\/?.*/,u=c?window.location.pathname.replace(d,""):"/",m=(0,r.Yv)((null===(i=window.localNetdataRegistry)||void 0===i?void 0:i.hostname)||"agent"),g=(null===(s=window.localNetdataRegistry)||void 0===s?void 0:s.mg)||"agent",p={createdAt:"",description:"",iconURL:"",id:g,error:null,loaded:!0,name:m,slug:m,permissions:{"user:ChangeName":"user:ChangeName","user:ChangeTheme":"user:ChangeTheme","user:ChangeEmailSetting":"user:ChangeEmailSetting","user:ChangeSpaceRoomNotifications":!1,"user:AddAPIToken":"user:AddAPIToken","user:DeleteAPIToken":"user:DeleteAPIToken","user:ReplaceAPIToken":"user:ReplaceAPIToken","user:UpdateVisitedNodes":"user:UpdateVisitedNodes","space:Read":"space:Read","space:UpdateMeta":"space:UpdateMeta","room:ReadUsers":"room:ReadUsers","room:ReadAll":"room:ReadAll","room:Read":"room:Read","dashboard:ReadAll":"dashboard:ReadAll","dashboard:Update":"dashboard:Update","dashboard:UpdateSelf":"dashboard:UpdateSelf","dashboard:Create":"dashboard:Create","dashboard:Delete":"dashboard:Delete","dashboard:DeleteSelf":"dashboard:DeleteSelf","chart:AddToDashboard":"chart:AddToDashboard","alert:ReadAll":"alert:ReadAll","function:ReadAll":"function:ReadAll","function:ExecAll":"function:ExecAll","function:Exec":"function:Exec","function:ExecPrivileged":"function:ExecPrivileged","feed:ReadBasic":"feed:ReadBasic","feed:ReadManagement":"feed:ReadManagement","billing:ReadAll":"billing:ReadAll","billing:ReadBasic":"billing:ReadBasic","visitedNodes:Update":"visitedNodes:Update","visitedNodes:ReadAll":"visitedNodes:ReadAll","agent:ReadDynCfg":"agent:ReadDynCfg","agent:EditDynCfg":"agent:EditDynCfg","agent:EditNotificationsConfig":"agent:EditNotificationsConfig","agent:ViewNotificationsConfig":"agent:ViewNotificationsConfig","oidc:Manage":"oidc:Manage"}},h="local",v={...n.A,id:h,slug:h,name:h,loaded:!0,fullyLoaded:!0,spaceId:g,untouchable:!1},f="overview",A=e=>c&&e===g,y=e=>c&&e===h,b="local-custom-dashboard",S={id:b,isOwner:!0,name:b,slug:b,snapshot:{cards:{},containerIds:[],containers:{},layout:{}},version:0},k=c},39225:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});var n=a(96540);const r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const a="refreshed-after-lazy-import",r=t?"".concat(t,"-").concat(a):a;return(0,n.lazy)((async()=>{const t=JSON.parse(window.sessionStorage.getItem(r)||"false");try{const t=await e();return window.sessionStorage.setItem(r,"false"),t}catch(a){if(!t)return window.sessionStorage.setItem(r,"true"),window.location.reload();throw a}}))}},49286:(e,t,a)=>{"use strict";a.d(t,{Ds:()=>g,Jz:()=>u,bn:()=>m});a(25440),a(41393),a(14905),a(98992),a(81454),a(8872);const n=e=>e.replace(/([A-Z])/g,"_$1").toLowerCase(),r=e=>e.replace(/([_][a-z])/g,(e=>e[1].toUpperCase())),o=e=>e.replace(/([\s\-_][a-z])/g,(e=>e[1].toUpperCase())),i=[],s=(e,t,a)=>({...e,[n(t)]:a}),c=(e,t,a)=>({...e,[r(t)]:a}),l=(e,t,a)=>({...e,[o(t)]:a}),d=(e,t)=>{let{func:a,action:n,omit:r=i,depth:o=0}=t;return o-=1,o?Array.isArray(e)?e.map((e=>a(e,{omit:r}))):"object"===typeof e&&e?Object.keys(e).reduce(((t,o)=>{if(r.includes(o))return{...t,[o]:e[o]};const i=a(e[o],{omit:r});return n(t,o,i)}),{}):e:e},u=function(e){let{omit:t,depth:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return d(e,{func:u,action:s,omit:t,depth:a})},m=function(e){let{omit:t,depth:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return d(e,{func:m,action:c,omit:t,depth:a})},g=function(e){let{omit:t,depth:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return d(e,{func:g,action:l,omit:t,depth:a})}},26655:(e,t,a)=>{"use strict";a.d(t,{A:()=>u});a(62953);var n=a(46266),r=a(68831),o=a(37618),i=(a(25440),a(80158));const s=(e,t,a)=>{const n=a.includes("join-callback")?a:encodeURIComponent(a);return"".concat(t).concat(t?"&":"?","cloudRoute=").concat(e).concat(n)},c=e=>(t,a)=>{try{if(/text\/plain/.test(a.getContentType()))throw{errorMessage:t};const n=JSON.parse(t||"{}");if(n.errorMsgKey)throw n;return e?e(n):n}catch(n){return n}},l=e=>e,d=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(e=>function(){for(var t=arguments.length,a=new Array(t),n=0;n{var t,n;if(401!==(null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.status)||null!==e&&void 0!==e&&null!==(n=e.config)&&void 0!==n&&n.allow401)throw e;if(o.Ay){const t=window.location.origin+window.location.pathname.replace(o.y7,"");if(a[1].baseURL===window.envSettings.agentApiUrl)throw e;return void(window.location.href=(0,i.QU)("".concat(window.envSettings.cloudUrl,"/trust?redirect_uri=").concat(encodeURIComponent(window.location.href),"&agent_uri=").concat(encodeURIComponent(t||window.envSettings.agentApiUrl))))}const{pathname:r,search:c,hash:l}=window.location;if(!/(sign-(in|up)|join-space)/.test(r))return window.location.replace((0,i.QU)("".concat(o.Ay?window.envSettings.cloudUrl:"","/sign-in").concat(s(r,c,l))))}));return c.cancel=r.cancel,c})((function(a){for(var i,s,d,u=arguments.length,m=new Array(u>1?u-1:0),g=1;ge<300||304===e)}=h,y=localStorage.getItem("netdataJWT"),b=null===(i=window.localNetdataRegistry)||void 0===i?void 0:i.mg,S=localStorage.getItem("agentJWT:".concat(b)),k=h.baseURL||r.A.apiBaseURL||"",I=((a,r)=>t?n.A[e](a,p,r):n.A[e](a,r))(a,{validateStatus:A,...h,baseURL:k,transformResponse:h.noResponseParsing?f:[c(f)],cancelToken:v.token,...(!!y||!!S)&&{headers:{...null===h||void 0===h?void 0:h.headers,.../netdata\.cloud/.test(k)&&{Authorization:"Bearer ".concat(y)},...k===window.envSettings.agentApiUrl&&S&&"undefined"!==S&&(null!==(s=window.localNetdataRegistry)&&void 0!==s&&s.xNetdataAuthHeader?{"X-Netdata-Auth":"Bearer ".concat(S)}:{Authorization:"Bearer ".concat(S)})}}}),w=I.catch((e=>{throw e.isCancel=n.A.isCancel(e),e}));w.cancel=()=>v.cancel();const E=null===(d=a.match(/\/spaces\/(.+?)\//))||void 0===d?void 0:d[1];return(0,o.ES)(E)&&w.cancel(),w}))},u={get:d("get"),post:d("post",!0),patch:d("patch",!0),put:d("put",!0),delete:d("delete")}},94355:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});const n=e=>{if(!e.response){const t=500,a=e.message||"Something went wrong";return{errorCode:t,errorMessage:a,errorMsgKey:t,status:t,statusText:a}}const{data:{errorCode:t,errorMessage:a,errorMsgKey:n},status:r,statusText:o}=e.response;return{errorCode:t,errorMessage:a,errorMsgKey:n,status:r,statusText:o}}},79731:(e,t,a)=>{"use strict";a.d(t,{o:()=>r});a(71517),a(11379),a(93777),a(14190),a(12359),a(86097),a(17273),a(27415),a(19929),a(37583),a(55122),a(20230),a(57268),a(79733),a(62953);const n=new Map([["ErrParsingRequestBody","Bad Request"],["ErrUntrustedRedirectURI","Untrusted Redirect URI"],["ErrInternalServerError","Internal Server Error"],["ErrUnauthenticated","User Not Authenticated"],["ErrInvalidLastUpdatedRange","Invalid Time Selection"],["ErrForbidden","Forbidden"],["ErrInvalidEmail","Invalid E-mail"],["ErrInvalidRedirectURI","Invalid Redirect URI"],["ErrMissingStateCookie","Missing Authentication Cookie"],["ErrIncorrectChallengeResponse","Incorrect Response"],["ErrAccountDeleted","Account Deleted!"],["ErrInvalidAccountID","Invalid Account ID"],["ErrVisitedNodeNotFound","Node Not Found"],["ErrAccountIsTheLastMemberOfAPaidSpace","Cannot delete account"],["ErrOAuthNotFound","A Netdata account linked to this email already exists, please try another login method."],["ErrWworkspaceSlugTaken","Space Slug Unavailable"],["ErrInvalidWorkspaceName","Bad Space Name"],["ErrNotWorkspaceMember","User is not a Space member"],["ErrInvalidWorkspaceID","Invalid Space ID"],["ErrWorkspaceNotFound","No Space Found"],["ErrSpaceSlugTaken","Space Slug Unavailable"],["ErrInvalidSpaceName","Invalid Space Name"],["ErrNotSpaceMember","Not a Space Member"],["ErrForbiddenNotAdmin","Not a Space Admin"],["ErrLastSpaceAdmin","Last Admin In Space"],["ErrLastSpaceMember","Last Member In Space"],["ErrInvalidSpaceID","Bad Space ID"],["ErrInvalidMemberID","Bad Member ID"],["ErrForbiddenNotMember","Not a Member"],["ErrMissingMemberIDs","No Member IDs Given"],["ErrSpaceNotFound","Space Not Found"],["ErrSpaceMemberNotFound","Space Member Not Found"],["ErrMissingTokenIDs","Token ID Not Found"],["ErrCannotDeleteCurrentToken","You cannot delete the token in use for this session"],["ErrInvalidRole","Invalid Member Role"],["ErrCannotLeaveSpace","Cannot Leave Space"],["ErrInvalidSpaceDescription","Invalid Space Description"],["ErrInvalidEmailDomain","Invalid Email Domain"],["ErrCanNotDeletePaidSpace","Cannot delete paid space"],["ErrAgentCanceledBigResponse","Agent's response is too big"],["ErrAgentExpired","Agent is overloaded"],["ErrAgentTimeout","Timeout waiting agent response"],["ErrAlreadyClaimed","Node Already Claimed"],["ErrContextNotFound","Node doesn't have the requested context"],["ErrInternal","Internal server error"],["ErrInvalidNodeID","Invalid Node ID"],["ErrMissingNodeIDs","No Node IDs Given"],["ErrNoData","Node doesn't have data for the requested period"],["ErrNodeNotFound","Node Not Found"],["ErrNodeUnreachable","Unreachable Node"],["ErrUnreachable","Node is unreachable"],["ErrNodeInstanceNotFound","Node doesn't exist on Netdata"],["ErrRoomNameExist","Room Name Already Exists"],["ErrInvalidRoomName","Invalid Room Name"],["ErrRoomNotFound","Room Not Found"],["ErrInvalidRoomID","Invalid Room ID"],["ErrRoomNameTaken","Room Name Unavailable"],["ErrContextNotFound","Context Not Found"],["ErrNodeContextNotFound","Metric Context Not Found"],["ErrInvalidContextID","Invalid Metric Context ID"],["ErrForbiddenNotRoomMember","Not a Room Member"],["ErrUntouchableRoom","Room Cannot Be Changed"],["ErrRoomCannotBeDefault","Private Room Cannot Be Set As Default"],["ErrInvalidRoomDescription","Invalid Room Description"],["ErrRoomMemberAlreadyExists","Member Already Exists In Room"],["ErrAllowedMembersIncreased","Space member limit"],["ErrPendingInvitationsLimitReached","Pending invitations limit"],["ErrSpaceMembersLimitReached","Space member limit"],["ErrCardDeclined","Card declined"],["Network Error","No internet connection"],["Timeout","Timeout"],["default","Something went wrong"]]),r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.get("default");if(!e)return;return n.has(e)?n.get(e):t}},33222:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});const n=36e5,r=function(e){const t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date)-e;if(t<0)return"0 seconds ago";const a=Math.floor(t/864e5);if(a>1)return"".concat(a," days ago");const r=Math.floor(t/n);if(r>0)return"".concat(r," hours ago");const o=Math.floor(t/6e4);if(o>1)return"".concat(o," mins ago");const i=Math.floor(t/1e3);return"".concat(i," seconds ago")}},27229:(e,t,a)=>{"use strict";a.d(t,{W:()=>n});const n=e=>e.messages&&e.messages.length>0?e.messages[0]:void 0},80542:(e,t,a)=>{"use strict";a.d(t,{H:()=>n,k:()=>r});a(14905),a(98992),a(8872),a(62953);const n=(e,t)=>({isValid:e,message:t});function r(e){return Array.isArray(e)?t=>{return e.reduce((a=t,(e,t)=>{const{isValid:n,message:r}=t(a);if(n)return e;const{messages:o=[]}=e;return{isValid:n,messages:[...o,r]}}),{isValid:!0});var a}:(t=e,e=>{const{isValid:a,message:n}=t(e);return n?{isValid:a,messages:[n]}:{isValid:a}});var t}},44554:(e,t,a)=>{"use strict";a.d(t,{GN:()=>o,Hp:()=>r,Pe:()=>u,Su:()=>l,bj:()=>c,lc:()=>v,oE:()=>m});a(17333),a(3064),a(14905),a(98992),a(54520),a(72577),a(8872),a(62953);const n=!1,r=e=>e.reduce(((e,t)=>t.top+t.height>e?t.top+t.height:e),0),o=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Array.isArray(e)){if(!a)return;return Object.keys(e||{}).reduce(((a,n)=>a||e[n].find((e=>e.id===t))),null)}return e.find((e=>e.id===t))},i=(e,t)=>e.id!==t.id&&(!(e.left+e.width<=t.left)&&(!(e.left>=t.left+t.width)&&(!(e.top+e.height<=t.top)&&!(e.top>=t.top+t.height)))),s=(e,t)=>e.find((e=>i(e,t))),c=(e,t)=>"horizontal"===t?(e=>e.slice(0).sort((function(e,t){return e.left>t.left||e.left===t.left&&e.top>t.top?1:-1})))(e):"vertical"===t?(e=>e.slice(0).sort((function(e,t){return e.top>t.top||e.top===t.top&&e.left>t.left?1:-1})))(e):e,l=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(((e,t)=>[...e,{...t}]),[])},d=(e,t,a,n,r,o)=>{const i="horizontal"===r,c="vertical"===r,l=t.static;if(n){n=!1;const d={left:i?Math.max(t.left-a.width,0):a.left,top:c?Math.max(t.top-a.height,0):a.top,width:a.width,height:a.height,id:"-1"},m=s(e,d),g=m&&m.top+m.height>t.top,p=m&&t.left+t.width>m.left;if(!m)return u(e,a,i?d.left:void 0,c?d.top:void 0,n,l,r,o);if(g&&c)return u(e,a,void 0,t.top+1,n,l,r,o);if(g&&null==r)return t.top=a.top,a.top=a.top+a.height,e;if(p&&i)return u(e,t,a.left,void 0,n,l,r,o)}const d=i?a.left+1:void 0,m=c?a.top+1:void 0;return null==d&&null==m?e:u(e,a,i?a.left+1:void 0,c?a.top+1:void 0,n,l,r,o)},u=(e,t,a,r,o,s,u,m,g)=>{if(t.static)return e;if(t.top===r&&t.left===a)return e;const p=t.left,h=t.top;"number"===typeof a&&(t.left=a),"number"===typeof r&&(t.top=r),t.moved=!0;let v=c(e,u);("vertical"===u&&"number"===typeof r?h>=r:"horizontal"===u&&"number"===typeof a&&p>=a)&&(v=v.reverse());const f=((e,t)=>e.filter((e=>i(e,t))))(v,t),A=f.length>0;if(A&&g)return l(e);if(A&&s)return t.left=p,t.top=h,t.moved=!1,e;for(let i=0,c=f.length;i{const r=e.filter((e=>e.static)),o=c(e,t),i=Array(e.length);for(let s=0,c=o.length;s{const r=g[n];t[n]+=1;for(let o=e.findIndex((e=>e.id===t.id))+1;ot.top+t.height)break;i(t,s)&&p(e,s,a+t[r],n)}}t[n]=a},h=(e,t,a,n,o,i)=>{const c="horizontal"===a;if("vertical"===a)for(t.top=Math.min(r(e),t.top);t.top>0&&!s(e,t);)t.top--;else if(c)for(;t.left>0&&!s(e,t);)t.left--;let l;for(;(l=s(e,t))&&(null!==a||!i)&&"undefined"!==typeof(null===(d=l)||void 0===d?void 0:d.width);){var d;if(c?p(o,t,l.left+l.width,"left"):p(o,t,l.top+l.height,"top"),c&&t.left+t.width>n)for(t.left=n-t.width,t.top++;t.left>0&&!s(e,t);)t.left--}return t.top=Math.max(t.top,0),t.left=Math.max(t.left,0),t.width=t.width>n?n:t.width,t},v=e=>{let{minWidth:t,minHeight:a,...n}=e;return n}},60247:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var n=a(58168),r=a(96540),o=a(62061),i=a(6504),s=a(22332),c=a(46741);const l=e=>{var t;let{iconWidth:a="14px",iconHeight:l="14px",...d}=e;const u=(0,c.JT)("dashboard:Update"),m=(0,s.useAttributeValue)("toolboxProps");return r.createElement(i.Button,(0,n.A)({icon:r.createElement(i.default,{svg:o.default,width:a,height:l}),title:"Drag & drop","data-testid":"chartHeaderToolbox-drag",disabled:!u,cursor:null!==(t=m.drag)&&void 0!==t&&t.dragging?"grabbing":"grab"},m.drag||{},d))},d=(0,r.memo)(l)},4659:(e,t,a)=>{"use strict";a.d(t,{A:()=>p});var n=a(58168),r=a(96540),o=a(84976),i=a(8711),s=a(83199),c=a(29217);const l={default:{initial:"primary",visited:"accent",hover:"primary"},tableLink:{initial:"text",visited:"text",hover:"primary"}},d=e=>(0,i.default)(e).withConfig({displayName:"anchor__withAnchor",componentId:"sc-oaxxs6-0"})(["",""],(e=>{let{disabled:t,color:a,hoverColor:n,disabledColor:r,visitedColor:o,theme:i,flavour:c="default"}=e;return t?(e=>{var t,a,n;let{disabledColor:r,color:o,theme:i,flavour:c,visitedColor:d}=e;return"\n color: ".concat((0,s.getColor)(r||o||(null===(t=l[c])||void 0===t?void 0:t.initial))({theme:i}),";\n ").concat(r?"":"opacity: 0.4;","\n pointer-events: none;\n\n & > svg > use {\n fill: ").concat((0,s.getColor)(r||o||(null===(a=l[c])||void 0===a?void 0:a.initial))({theme:i}),";\n }\n \n &:visited {\n color: ").concat((0,s.getColor)(d||r||o||(null===(n=l[c])||void 0===n?void 0:n.visited))({theme:i}),";\n }\n")})({disabledColor:r,color:a,theme:i,flavour:c}):(e=>{var t,a,n,r,o,i;let{color:c,theme:d,hoverColor:u,visitedColor:m,flavour:g}=e;return"\n color: ".concat((0,s.getColor)(c||(null===(t=l[g])||void 0===t?void 0:t.initial))({theme:d}),";\n & > svg > use {\n fill: ").concat((0,s.getColor)(c||(null===(a=l[g])||void 0===a?void 0:a.initial))({theme:d}),";\n }\n &:hover {\n color: ").concat((0,s.getColor)(u||(null===(n=l[g])||void 0===n?void 0:n.hover))({theme:d})," !important;\n & > svg > use {\n fill: ").concat((0,s.getColor)(u||(null===(r=l[g])||void 0===r?void 0:r.hover))({theme:d})," !important;\n }\n }\n &:visited {\n color: ").concat((0,s.getColor)(m||c||(null===(o=l[g])||void 0===o?void 0:o.visited))({theme:d}),";\n & > svg > use {\n fill: ").concat((0,s.getColor)(m||c||(null===(i=l[g])||void 0===i?void 0:i.visited))({theme:d}),";\n }\n }\n cursor:pointer\n")})({color:a,theme:i,hoverColor:n,visitedColor:o,flavour:c})})),u=d("a"),m=d((0,r.forwardRef)(((e,t)=>{let{alignItems:a,disabledColor:i,color:s,flavour:c,hoverColor:l,visitedColor:d,gap:u,strong:m,...g}=e;return r.createElement(o.N_,(0,n.A)({ref:t},g))}))),g=e=>e.preventDefault(),p=(h=e=>{let{Component:t=s.Text,as:a="a",disabled:o,onClick:i,to:c,href:l,isBasic:d,...p}=e;return r.createElement(t,(0,n.A)({as:"a"===a?u:m,disabled:o,onClick:o?g:i},c&&!o&&{to:c},l&&!o&&{href:l},p))},e=>{let{boxProps:t,showToolTip:a,content:n,align:o,isBasic:i,...l}=e;return a?r.createElement(c.A,{plain:!0,content:n,align:o,isBasic:i},r.createElement(s.Box,t,r.createElement(h,l))):r.createElement(h,l)});var h},24266:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>u,H4:()=>s,Xc:()=>d});var n=a(41358),r=a(96540),o=a(83199),i=a(4659);const s=e=>{let{title:t="Oops, something unexpected happened!",message:a=""}=e;return r.createElement(o.Flex,{alignItems:"center",justifyContent:"center","data-testid":"error-boundary",flex:!0},r.createElement(o.Flex,{flex:!0,column:!0,alignItems:"center",gap:4,width:{max:115}},r.createElement(o.H3,null,t),!!a&&r.createElement(o.Text,null,a),r.createElement(o.Text,null,"We track these errors automatically, but if the problem persists feel free to contact us with a"," ",r.createElement(i.A,{href:"https://github.com/netdata/netdata-cloud/issues/new/choose",target:"_blank",rel:"noopener noreferrer"},"ticket"),", a"," ",r.createElement(i.A,{href:"https://community.netdata.cloud/",target:"_blank",rel:"noopener noreferrer"},"post in the forum")," ","or through"," ",r.createElement(i.A,{href:"https://discord.com/invite/mPZ6WZKKG2",target:"_blank",rel:"noopener noreferrer"},"Discord"),"."),r.createElement(o.Text,null,"In the meantime you can refresh this page"),r.createElement(o.Button,{label:"Refresh",icon:"refresh",onClick:()=>window.location.reload(),"data-ga":"error-boundary::click-reload::reload-on-error","data-testid":"error-boundary-reload"})))};class c extends r.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0}}componentDidCatch(e,t){console.log(e,t)}render(){return this.state.hasError?r.createElement(s,null):this.props.children}}class l extends n.tH{}l.defaultProps={fallback:s};const d=e=>{const t=window.envSettings.tracking?l:c;return a=>r.createElement(t,{fallback:s},r.createElement(e,a))},u=l},82838:(e,t,a)=>{"use strict";a.d(t,{M:()=>c,O:()=>i});a(25440),a(9920),a(14905),a(98992),a(3949),a(8872),a(62953);const n=[{value:"Dateline Standard Time",abbr:"DST",text:"International Date Line West",utc:["Etc/GMT+12"]},{value:"UTC-11",abbr:"U",text:"Coordinated Universal Time-11",utc:["Etc/GMT+11","Pacific/Midway","Pacific/Niue","Pacific/Pago_Pago"]},{value:"Hawaiian Standard Time",abbr:"HST",text:"Hawaii",utc:["Etc/GMT+10","Pacific/Honolulu","Pacific/Johnston","Pacific/Rarotonga","Pacific/Tahiti"]},{value:"Alaskan Standard Time",abbr:"AKDT",text:"Alaska",utc:["America/Anchorage","America/Juneau","America/Nome","America/Sitka","America/Yakutat"]},{value:"Pacific Standard Time (Mexico)",abbr:"PDT",text:"Baja California",utc:["America/Santa_Isabel"]},{value:"Pacific Standard Time",abbr:"PST",text:"Pacific Time (US & Canada)",utc:["America/Los_Angeles","America/Dawson","America/Tijuana","America/Vancouver","America/Whitehorse","PST8PDT"]},{value:"US Mountain Standard Time",abbr:"UMST",text:"Arizona",utc:["America/Creston","America/Dawson_Creek","America/Hermosillo","America/Phoenix","Etc/GMT+7"]},{value:"Mountain Standard Time (Mexico)",abbr:"MDT",text:"Chihuahua, La Paz, Mazatlan",utc:["America/Chihuahua","America/Mazatlan"]},{value:"Mountain Standard Time",abbr:"MDT",text:"Mountain Time (US & Canada)",utc:["America/Boise","America/Cambridge_Bay","America/Denver","America/Edmonton","America/Inuvik","America/Ojinaga","America/Yellowknife","MST7MDT"]},{value:"Central America Standard Time",abbr:"CAST",text:"Central America",utc:["America/Belize","America/Costa_Rica","America/El_Salvador","America/Guatemala","America/Managua","America/Tegucigalpa","Etc/GMT+6","Pacific/Galapagos"]},{value:"Central Standard Time",abbr:"CDT",text:"Central Time (US & Canada)",utc:["America/Chicago","America/Indiana/Knox","America/Indiana/Tell_City","America/Matamoros","America/Menominee","America/North_Dakota/Beulah","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/Rainy_River","America/Rankin_Inlet","America/Resolute","America/Winnipeg","CST6CDT"]},{value:"Central Standard Time (Mexico)",abbr:"CDT",text:"Guadalajara, Mexico City, Monterrey",utc:["America/Bahia_Banderas","America/Cancun","America/Merida","America/Mexico_City","America/Monterrey"]},{value:"Canada Central Standard Time",abbr:"CCST",text:"Saskatchewan",utc:["America/Regina","America/Swift_Current"]},{value:"SA Pacific Standard Time",abbr:"SPST",text:"Bogota, Lima, Quito",utc:["America/Bogota","America/Cayman","America/Coral_Harbour","America/Eirunepe","America/Guayaquil","America/Jamaica","America/Lima","America/Panama","America/Rio_Branco","Etc/GMT+5"]},{value:"Eastern Standard Time",abbr:"EDT",text:"Eastern Time (US & Canada)",utc:["America/Detroit","America/Havana","America/Indiana/Petersburg","America/Indiana/Vincennes","America/Indiana/Winamac","America/Iqaluit","America/Kentucky/Monticello","America/Louisville","America/Montreal","America/Nassau","America/New_York","America/Nipigon","America/Pangnirtung","America/Port-au-Prince","America/Thunder_Bay","America/Toronto","EST5EDT"]},{value:"US Eastern Standard Time",abbr:"UEDT",text:"Indiana (East)",utc:["America/Indiana/Marengo","America/Indiana/Vevay","America/Indianapolis"]},{value:"Venezuela Standard Time",abbr:"VST",text:"Caracas",utc:["America/Caracas"]},{value:"Paraguay Standard Time",abbr:"PYT",text:"Asuncion",utc:["America/Asuncion"]},{value:"Atlantic Standard Time",abbr:"ADT",text:"Atlantic Time (Canada)",utc:["America/Glace_Bay","America/Goose_Bay","America/Halifax","America/Moncton","America/Thule","Atlantic/Bermuda"]},{value:"Central Brazilian Standard Time",abbr:"CBST",text:"Cuiaba",utc:["America/Campo_Grande","America/Cuiaba"]},{value:"SA Western Standard Time",abbr:"SWST",text:"Georgetown, La Paz, Manaus, San Juan",utc:["America/Anguilla","America/Antigua","America/Aruba","America/Barbados","America/Blanc-Sablon","America/Boa_Vista","America/Curacao","America/Dominica","America/Grand_Turk","America/Grenada","America/Guadeloupe","America/Guyana","America/Kralendijk","America/La_Paz","America/Lower_Princes","America/Manaus","America/Marigot","America/Martinique","America/Montserrat","America/Port_of_Spain","America/Porto_Velho","America/Puerto_Rico","America/Santo_Domingo","America/St_Barthelemy","America/St_Kitts","America/St_Lucia","America/St_Thomas","America/St_Vincent","America/Tortola","Etc/GMT+4"]},{value:"Pacific SA Standard Time",abbr:"PSST",text:"Santiago",utc:["America/Santiago","Antarctica/Palmer"]},{value:"Newfoundland Standard Time",abbr:"NDT",text:"Newfoundland",utc:["America/St_Johns"]},{value:"E. South America Standard Time",abbr:"ESAST",text:"Brasilia",utc:["America/Sao_Paulo"]},{value:"Argentina Standard Time",abbr:"AST",text:"Buenos Aires",utc:["America/Argentina/La_Rioja","America/Argentina/Rio_Gallegos","America/Argentina/Salta","America/Argentina/San_Juan","America/Argentina/San_Luis","America/Argentina/Tucuman","America/Argentina/Ushuaia","America/Buenos_Aires","America/Catamarca","America/Cordoba","America/Jujuy","America/Mendoza"]},{value:"SA Eastern Standard Time",abbr:"SEST",text:"Cayenne, Fortaleza",utc:["America/Araguaina","America/Belem","America/Cayenne","America/Fortaleza","America/Maceio","America/Paramaribo","America/Recife","America/Santarem","Antarctica/Rothera","Atlantic/Stanley","Etc/GMT+3"]},{value:"Greenland Standard Time",abbr:"GDT",text:"Greenland",utc:["America/Godthab"]},{value:"Montevideo Standard Time",abbr:"MST",text:"Montevideo",utc:["America/Montevideo"]},{value:"Bahia Standard Time",abbr:"BST",text:"Salvador",utc:["America/Bahia"]},{value:"UTC-02",abbr:"U",text:"Coordinated Universal Time-02",utc:["America/Noronha","Atlantic/South_Georgia","Etc/GMT+2"]},{value:"Mid-Atlantic Standard Time",abbr:"MDT",text:"Mid-Atlantic - Old",utc:[]},{value:"Azores Standard Time",abbr:"ADT",text:"Azores",utc:["America/Scoresbysund","Atlantic/Azores"]},{value:"Cape Verde Standard Time",abbr:"CVST",text:"Cape Verde Is.",utc:["Atlantic/Cape_Verde","Etc/GMT+1"]},{value:"Morocco Standard Time",abbr:"MDT",text:"Casablanca",utc:["Africa/Casablanca","Africa/El_Aaiun"]},{value:"UTC",abbr:"UTC",text:"Coordinated Universal Time",utc:["America/Danmarkshavn","Etc/GMT"]},{value:"GMT Standard Time",abbr:"GMT",text:"Edinburgh, London",utc:["Europe/Isle_of_Man","Europe/Guernsey","Europe/Jersey","Europe/London"]},{value:"GMT Standard Time",abbr:"GDT",text:"Dublin, Lisbon",utc:["Atlantic/Canary","Atlantic/Faeroe","Atlantic/Madeira","Europe/Dublin","Europe/Lisbon"]},{value:"Greenwich Standard Time",abbr:"GST",text:"Monrovia, Reykjavik",utc:["Africa/Abidjan","Africa/Accra","Africa/Bamako","Africa/Banjul","Africa/Bissau","Africa/Conakry","Africa/Dakar","Africa/Freetown","Africa/Lome","Africa/Monrovia","Africa/Nouakchott","Africa/Ouagadougou","Africa/Sao_Tome","Atlantic/Reykjavik","Atlantic/St_Helena"]},{value:"W. Europe Standard Time",abbr:"WEDT",text:"Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",utc:["Arctic/Longyearbyen","Europe/Amsterdam","Europe/Andorra","Europe/Berlin","Europe/Busingen","Europe/Gibraltar","Europe/Luxembourg","Europe/Malta","Europe/Monaco","Europe/Oslo","Europe/Rome","Europe/San_Marino","Europe/Stockholm","Europe/Vaduz","Europe/Vatican","Europe/Vienna","Europe/Zurich"]},{value:"Central Europe Standard Time",abbr:"CEDT",text:"Belgrade, Bratislava, Budapest, Ljubljana, Prague",utc:["Europe/Belgrade","Europe/Bratislava","Europe/Budapest","Europe/Ljubljana","Europe/Podgorica","Europe/Prague","Europe/Tirane"]},{value:"Romance Standard Time",abbr:"RDT",text:"Brussels, Copenhagen, Madrid, Paris",utc:["Africa/Ceuta","Europe/Brussels","Europe/Copenhagen","Europe/Madrid","Europe/Paris"]},{value:"Central European Standard Time",abbr:"CEDT",text:"Sarajevo, Skopje, Warsaw, Zagreb",utc:["Europe/Sarajevo","Europe/Skopje","Europe/Warsaw","Europe/Zagreb"]},{value:"W. Central Africa Standard Time",abbr:"WCAST",text:"West Central Africa",utc:["Africa/Algiers","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Africa/Kinshasa","Africa/Lagos","Africa/Libreville","Africa/Luanda","Africa/Malabo","Africa/Ndjamena","Africa/Niamey","Africa/Porto-Novo","Africa/Tunis","Etc/GMT-1"]},{value:"Namibia Standard Time",abbr:"NST",text:"Windhoek",utc:["Africa/Windhoek"]},{value:"GTB Standard Time",abbr:"GDT",text:"Athens, Bucharest",utc:["Europe/Athens","Asia/Nicosia","Europe/Bucharest","Europe/Chisinau"]},{value:"Middle East Standard Time",abbr:"MEDT",text:"Beirut",utc:["Asia/Beirut"]},{value:"Egypt Standard Time",abbr:"EST",text:"Cairo",utc:["Africa/Cairo"]},{value:"Syria Standard Time",abbr:"SDT",text:"Damascus",utc:["Asia/Damascus"]},{value:"E. Europe Standard Time",abbr:"EEDT",text:"E. Europe",utc:["Asia/Nicosia","Europe/Athens","Europe/Bucharest","Europe/Chisinau","Europe/Helsinki","Europe/Kiev","Europe/Mariehamn","Europe/Nicosia","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Uzhgorod","Europe/Vilnius","Europe/Zaporozhye"]},{value:"South Africa Standard Time",abbr:"SAST",text:"Harare, Pretoria",utc:["Africa/Blantyre","Africa/Bujumbura","Africa/Gaborone","Africa/Harare","Africa/Johannesburg","Africa/Kigali","Africa/Lubumbashi","Africa/Lusaka","Africa/Maputo","Africa/Maseru","Africa/Mbabane","Etc/GMT-2"]},{value:"FLE Standard Time",abbr:"FDT",text:"Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",utc:["Europe/Helsinki","Europe/Kiev","Europe/Mariehamn","Europe/Riga","Europe/Sofia","Europe/Tallinn","Europe/Uzhgorod","Europe/Vilnius","Europe/Zaporozhye"]},{value:"Turkey Standard Time",abbr:"TDT",text:"Istanbul",utc:["Europe/Istanbul"]},{value:"Israel Standard Time",abbr:"JDT",text:"Jerusalem",utc:["Asia/Jerusalem"]},{value:"Libya Standard Time",abbr:"LST",text:"Tripoli",utc:["Africa/Tripoli"]},{value:"Jordan Standard Time",abbr:"JST",text:"Amman",utc:["Asia/Amman"]},{value:"Arabic Standard Time",abbr:"AST",text:"Baghdad",utc:["Asia/Baghdad"]},{value:"Kaliningrad Standard Time",abbr:"KST",text:"Kaliningrad",utc:["Europe/Kaliningrad"]},{value:"Arab Standard Time",abbr:"AST",text:"Kuwait, Riyadh",utc:["Asia/Aden","Asia/Bahrain","Asia/Kuwait","Asia/Qatar","Asia/Riyadh"]},{value:"E. Africa Standard Time",abbr:"EAST",text:"Nairobi",utc:["Africa/Addis_Ababa","Africa/Asmera","Africa/Dar_es_Salaam","Africa/Djibouti","Africa/Juba","Africa/Kampala","Africa/Khartoum","Africa/Mogadishu","Africa/Nairobi","Antarctica/Syowa","Etc/GMT-3","Indian/Antananarivo","Indian/Comoro","Indian/Mayotte"]},{value:"Moscow Standard Time",abbr:"MSK",text:"Moscow, St. Petersburg, Volgograd, Minsk",utc:["Europe/Kirov","Europe/Moscow","Europe/Simferopol","Europe/Volgograd","Europe/Minsk"]},{value:"Samara Time",abbr:"SAMT",text:"Samara, Ulyanovsk, Saratov",utc:["Europe/Astrakhan","Europe/Samara","Europe/Ulyanovsk"]},{value:"Iran Standard Time",abbr:"IDT",text:"Tehran",utc:["Asia/Tehran"]},{value:"Arabian Standard Time",abbr:"AST",text:"Abu Dhabi, Muscat",utc:["Asia/Dubai","Asia/Muscat","Etc/GMT-4"]},{value:"Azerbaijan Standard Time",abbr:"ADT",text:"Baku",utc:["Asia/Baku"]},{value:"Mauritius Standard Time",abbr:"MST",text:"Port Louis",utc:["Indian/Mahe","Indian/Mauritius","Indian/Reunion"]},{value:"Georgian Standard Time",abbr:"GET",text:"Tbilisi",utc:["Asia/Tbilisi"]},{value:"Caucasus Standard Time",abbr:"CST",text:"Yerevan",utc:["Asia/Yerevan"]},{value:"Afghanistan Standard Time",abbr:"AST",text:"Kabul",utc:["Asia/Kabul"]},{value:"West Asia Standard Time",abbr:"WAST",text:"Ashgabat, Tashkent",utc:["Antarctica/Mawson","Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Dushanbe","Asia/Oral","Asia/Samarkand","Asia/Tashkent","Etc/GMT-5","Indian/Kerguelen","Indian/Maldives"]},{value:"Yekaterinburg Time",abbr:"YEKT",text:"Yekaterinburg",utc:["Asia/Yekaterinburg"]},{value:"Pakistan Standard Time",abbr:"PKT",text:"Islamabad, Karachi",utc:["Asia/Karachi"]},{value:"India Standard Time",abbr:"IST",text:"Chennai, Kolkata, Mumbai, New Delhi",utc:["Asia/Kolkata"]},{value:"India Standard Time",abbr:"IST",text:"Chennai, Kolkata, Mumbai, New Delhi",utc:["Asia/Calcutta"]},{value:"Sri Lanka Standard Time",abbr:"SLST",text:"Sri Jayawardenepura",utc:["Asia/Colombo"]},{value:"Nepal Standard Time",abbr:"NST",text:"Kathmandu",utc:["Asia/Kathmandu"]},{value:"Central Asia Standard Time",abbr:"CAST",text:"Nur-Sultan (Astana)",utc:["Antarctica/Vostok","Asia/Almaty","Asia/Bishkek","Asia/Qyzylorda","Asia/Urumqi","Etc/GMT-6","Indian/Chagos"]},{value:"Bangladesh Standard Time",abbr:"BST",text:"Dhaka",utc:["Asia/Dhaka","Asia/Thimphu"]},{value:"Myanmar Standard Time",abbr:"MST",text:"Yangon (Rangoon)",utc:["Asia/Rangoon","Indian/Cocos"]},{value:"SE Asia Standard Time",abbr:"SAST",text:"Bangkok, Hanoi, Jakarta",utc:["Antarctica/Davis","Asia/Bangkok","Asia/Hovd","Asia/Jakarta","Asia/Phnom_Penh","Asia/Pontianak","Asia/Saigon","Asia/Vientiane","Etc/GMT-7","Indian/Christmas"]},{value:"N. Central Asia Standard Time",abbr:"NCAST",text:"Novosibirsk",utc:["Asia/Novokuznetsk","Asia/Novosibirsk","Asia/Omsk"]},{value:"China Standard Time",abbr:"CST",text:"Beijing, Chongqing, Hong Kong, Urumqi",utc:["Asia/Hong_Kong","Asia/Macau","Asia/Shanghai"]},{value:"North Asia Standard Time",abbr:"NAST",text:"Krasnoyarsk",utc:["Asia/Krasnoyarsk"]},{value:"Singapore Standard Time",abbr:"MPST",text:"Kuala Lumpur, Singapore",utc:["Asia/Brunei","Asia/Kuala_Lumpur","Asia/Kuching","Asia/Makassar","Asia/Manila","Asia/Singapore","Etc/GMT-8"]},{value:"W. Australia Standard Time",abbr:"WAST",text:"Perth",utc:["Australia/Perth","Antarctica/Casey"]},{value:"Taipei Standard Time",abbr:"TST",text:"Taipei",utc:["Asia/Taipei"]},{value:"Ulaanbaatar Standard Time",abbr:"UST",text:"Ulaanbaatar",utc:["Asia/Choibalsan","Asia/Ulaanbaatar"]},{value:"North Asia East Standard Time",abbr:"NAEST",text:"Irkutsk",utc:["Asia/Irkutsk"]},{value:"Japan Standard Time",abbr:"JST",text:"Osaka, Sapporo, Tokyo",utc:["Asia/Dili","Asia/Jayapura","Asia/Tokyo","Etc/GMT-9","Pacific/Palau"]},{value:"Korea Standard Time",abbr:"KST",text:"Seoul",utc:["Asia/Pyongyang","Asia/Seoul"]},{value:"Cen. Australia Standard Time",abbr:"CAST",text:"Adelaide",utc:["Australia/Adelaide","Australia/Broken_Hill"]},{value:"AUS Central Standard Time",abbr:"ACST",text:"Darwin",utc:["Australia/Darwin"]},{value:"E. Australia Standard Time",abbr:"EAST",text:"Brisbane",utc:["Australia/Brisbane","Australia/Lindeman"]},{value:"AUS Eastern Standard Time",abbr:"AEST",text:"Canberra, Melbourne, Sydney",utc:["Australia/Melbourne","Australia/Sydney"]},{value:"West Pacific Standard Time",abbr:"WPST",text:"Guam, Port Moresby",utc:["Antarctica/DumontDUrville","Etc/GMT-10","Pacific/Guam","Pacific/Port_Moresby","Pacific/Saipan","Pacific/Truk"]},{value:"Tasmania Standard Time",abbr:"TST",text:"Hobart",utc:["Australia/Currie","Australia/Hobart"]},{value:"Yakutsk Standard Time",abbr:"YST",text:"Yakutsk",utc:["Asia/Chita","Asia/Khandyga","Asia/Yakutsk"]},{value:"Central Pacific Standard Time",abbr:"CPST",text:"Solomon Is., New Caledonia",utc:["Etc/GMT-11"]},{value:"Vladivostok Standard Time",abbr:"VST",text:"Vladivostok",utc:["Asia/Sakhalin","Asia/Ust-Nera","Asia/Vladivostok"]},{value:"New Zealand Standard Time",abbr:"NZST",text:"Auckland, Wellington",utc:["Antarctica/McMurdo","Pacific/Auckland"]},{value:"UTC+12",abbr:"U",text:"Coordinated Universal Time+12",utc:["Etc/GMT-12","Pacific/Funafuti","Pacific/Kwajalein","Pacific/Majuro","Pacific/Nauru","Pacific/Tarawa","Pacific/Wake","Pacific/Wallis"]},{value:"Fiji Standard Time",abbr:"FST",text:"Fiji",utc:["Pacific/Fiji"]},{value:"Magadan Standard Time",abbr:"MST",text:"Magadan",utc:["Asia/Anadyr","Asia/Kamchatka","Asia/Magadan","Asia/Srednekolymsk"]},{value:"Kamchatka Standard Time",abbr:"KDT",text:"Petropavlovsk-Kamchatsky - Old",utc:["Asia/Kamchatka"]},{value:"Tonga Standard Time",abbr:"TST",text:"Nuku'alofa",utc:["Etc/GMT-13","Pacific/Enderbury","Pacific/Fakaofo","Pacific/Tongatapu"]},{value:"Samoa Standard Time",abbr:"SST",text:"Samoa",utc:["Pacific/Apia"]}],r=new Date,o=()=>{try{const e=new Intl.DateTimeFormat("default",{});return e.resolvedOptions().timeZone||"Etc/GMT"}catch(e){return"Etc/GMT"}},i=(()=>{const e={};return n.reduce(((t,a)=>{const{utc:n}=a;try{const o=new Intl.DateTimeFormat("fr",{timeZone:n[0],timeZoneName:"short"}).format(r),[i]=o.match(/[\u2212+].+/)||[],s=(e=>e?e.replace("\u2212","-"):"")(i);if(e[s])return t.concat({...a,offset:e[s]});const c=(e=>{if(!e)return"+0";const t=e.split(":");return t.length>1?"".concat(t[0]).concat((t[1]/60).toString().substr(1)):t[0]})(s);return e[s]=c,t.concat({...a,offset:c})}catch(o){return t}}),[])})().sort(((e,t)=>e.offset-t.offset)),s=(e=>e.reduce(((e,t)=>{let{utc:a,...n}=t;return a.forEach((t=>e[t]={...n,utc:t})),e}),{}))(i),c=(e,t)=>{const a=t||("default"===e?o():e);return s[a in s?a:o()]||{}}},57419:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>u,isTryingToJoinWorkspace:()=>l});a(62953),a(48408);var n=a(96540),r=a(47767),o=a(78969),i=a(28738),s=a(22292),c=a(24198);const l=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").includes("/join-space")},d="Successfully joined space!",u=()=>{const e=(0,s.uW)("isAnonymous"),t=(0,r.Zp)(),a=new URLSearchParams(window.location.hash.substr(1));return(0,n.useEffect)((()=>{if(e)return;const n=a.has("error_msg_key")?decodeURIComponent(a.get("error_msg_key")||""):null;if(n){const e=a.has("error_message")?decodeURIComponent(a.get("error_message")||""):null;n===o.vK?(0,c.Fw)(d):(0,c.Fw)(e||"Error joining space",!0),t("/spaces",{replace:!0})}else(0,c.Fw)(d)}),[e]),n.createElement(i.A,{title:"Adding you to the space..."})}},28738:(e,t,a)=>{"use strict";a.d(t,{A:()=>d,m:()=>l});var n=a(58168),r=a(96540),o=a(8711),i=a(83199);const s=(0,o.keyframes)(["from{opacity:0.4;}to{opacity:1;}"]),c=(0,o.default)(i.Icon).withConfig({displayName:"loader__StyledIcon",componentId:"sc-a76ek6-0"})(["width:",";height:",";animation:",";"],(e=>e.width),(e=>e.height),(e=>{let{animate:t}=e;return t?(0,o.css)([""," 1.6s ease-in infinite"],s):""})),l=e=>{let{title:t="Loading",width:a="208px",height:o="177px",...i}=e;return r.createElement(c,(0,n.A)({name:"netdata",color:"primary",title:t,"data-testid":"loading-logo",width:a,height:o},i))},d=e=>{let{title:t,body:a,iconProps:o,animate:s=!0,...c}=e;return r.createElement(i.Flex,(0,n.A)({column:!0,height:"100vh",background:"mainBackground",width:"100%",justifyContent:"center",alignItems:"center"},c),r.createElement(l,(0,n.A)({},o,{animate:s})),t&&r.createElement(i.H3,{color:"text",margin:[1,0,0]},t),a&&r.createElement(i.Text,{color:"text",margin:[4.5,0,0]},a))}},13871:(e,t,a)=>{"use strict";a.d(t,{Eg:()=>c,UI:()=>d,gi:()=>l});var n=a(58168),r=a(96540),o=a(83199),i=a(79731);const s={success:"success",error:"error",warning:"warning",default:"border"},c=e=>{const{header:t,text:a,icon:n,renderContent:i,success:c,error:l,warning:d,closeToast:u}=e,m=(c?"success":l&&"error")||d&&"warning"||"default";return r.createElement(o.Flex,{padding:[2],alignItems:"center",justifyContent:"between"},r.createElement(o.Flex,{alignItems:"center",gap:3},n&&r.createElement(o.Flex,{flex:!1},r.createElement(o.Icon,{color:s[m],name:n,size:"large"})),r.createElement(o.Flex,{column:!0,gap:1},t&&r.createElement(o.H5,{color:s[m]},t),a&&r.createElement(o.TextSmall,{color:s[m]},a),i&&i(e))),r.createElement(o.Flex,null,r.createElement(o.Icon,{name:"x",size:"large",color:s[m],onClick:u})))},l=e=>{let{errorCode:t,errorMessage:a,errorMsgKey:o,...s}=e;return r.createElement(c,(0,n.A)({error:!0,icon:"error",text:a,header:(0,i.o)(o)},s))},d=e=>r.createElement(c,e)},24198:(e,t,a)=>{"use strict";a.d(t,{$j:()=>p,AM:()=>o,Fw:()=>d,R9:()=>s,X7:()=>u,ZM:()=>m,jE:()=>g,mw:()=>l,r0:()=>i,sb:()=>c});var n=a(78217),r=a(13871);const o=e=>{const t={header:"Nodes",text:e},a=(0,r.UI)({...t,success:!0,icon:"node"});n.A.success(a,{context:"showNodesNotification"})},i=e=>{const t={header:"Rooms",text:e},a=(0,r.UI)({...t,success:!0,icon:"space"});n.A.success(a,{context:"showRoomsNotification"})},s=function(e){const t={header:"Room users",text:e||(arguments.length>1&&void 0!==arguments[1]&&arguments[1]?"Users left the room!":"Users were added to room!")},a=(0,r.UI)({...t,success:!0,icon:"space"});n.A.success(a,{context:"showUsersInRoomNotification"})},c=function(e){const t={header:"Space users",text:e||(arguments.length>1&&void 0!==arguments[1]&&arguments[1]?"Users left the space!":"Users were added to space!")},a=(0,r.UI)({...t,success:!0,icon:"space"});n.A.success(a,{context:"showUsersInSpaceNotification"})},l=function(e){const t={header:"Rooms",text:e||(arguments.length>1&&void 0!==arguments[1]&&arguments[1]?"Rooms removed from Space!":"Rooms were added to Space!")},a=(0,r.UI)({...t,success:!0,icon:"space"});n.A.success(a,{context:"showRoomsInSpaceNotification"})},d=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a={header:t?"Error joining space":"Welcome!",text:e},o=(0,r.UI)({...a,success:!t,icon:"gear"});t?n.A.error(o,{context:"showJoiningSpaceNotification"}):n.A.success(o,{context:"showJoiningSpaceNotification"})},u=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a={header:t?"Space removed":"Space added",text:e},o=(0,r.UI)({...a,success:!t,icon:"gear"});n.A.success(o,{context:"showSpaceNotification"})},m=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a={header:t?"Error creating room":"Rooms",text:e},o=(0,r.UI)({...a,success:!t,icon:"gear"});t?n.A.error(o,{context:"showRoomCreationNotification"}):n.A.success(o,{context:"showRoomCreationNotification"})},g=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a={text:e},o=(0,r.UI)({...a,text:e,success:!t,icon:"chart_added"});t?n.A.error(o,{context:"showDashboardCreatedNotification"}):n.A.success(o,{context:"showDashboardCreatedNotification"})},p=()=>{const e=(0,r.UI)({header:"Dashboard",text:"Invalid dashboard link. Please double-check the dashboard you are trying to access.",success:!1});n.A.error(e,{context:"showInvalidDashboardSlugNotification"})}},78217:(e,t,a)=>{"use strict";a.d(t,{A:()=>i});var n=a(99571);const r={position:n.oR.POSITION.BOTTOM_RIGHT,autoClose:1e4,pauseOnFocusLoss:!1,closeOnClick:!1},o={},i={success:function(e){let{context:t,...a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t&&o[t]&&(n.oR.dismiss(o[t]),delete o[t]),o[t]=n.oR.success(e,{...r,...a})},warning:function(e){let{context:t,...a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t&&o[t]&&(n.oR.dismiss(o[t]),delete o[t]),o[t]=n.oR.warn(e,{...r,...a})},error:function(e){let{context:t,...a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t&&o[t]&&(n.oR.dismiss(o[t]),delete o[t]),o[t]=n.oR.error(e,{...r,...a})},dismiss:e=>n.oR.dismiss(e)}},80925:(e,t,a)=>{"use strict";a.d(t,{A:()=>v,e:()=>h});a(9920),a(98992),a(3949),a(62953);var n=a(96540),r=a(5668),o=a(45467),i=a(24830),s=a(28973),c=a(27467),l=a(3914),d=a(64118),u=a(52768),m=a(38819),g=a(82838);const p=(0,n.createContext)(null),h=()=>(0,n.useContext)(p),v=e=>{var t;let{children:a}=e,h=(0,r.xd)("theme");h=h&&"unspecified"!==h?h:"dark";const[{after:v,before:f,utc:A,highlight:y,forcePlay:b},S]=(0,c.N9)(),k=function(){let{after:e,before:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,n.useMemo)((()=>{if(e=+e,t=+t,!isNaN(e)&&!isNaN(t)&&e&&t)return{type:"highlight",range:[Math.floor(e/1e3),Math.ceil(t/1e3)]}}),[e,t])}(y),[I]=(0,d.KB)(),w=(0,n.useMemo)((()=>({after:v<0?v:Math.floor(v/1e3),before:v<0?0:Math.ceil(f/1e3)})),[v,f]),E=(0,l.dg)(),x=(0,n.useMemo)((()=>{const e=(()=>{let{utc:e}=(0,m.PP)();return(0,g.M)("default",e).utc})(),t=(0,i.A)({attributes:{theme:h,timezone:e,overlays:{...k&&{highlight:k}},autofetchOnWindowBlur:b,...w,agent:E,containerWidth:.8*window.innerWidth,expandable:!1}});return window.netdataSDK=t,t}),[]);(0,o.A)((()=>{x.getNodes().forEach((e=>e.updateAttribute("theme",h)))}),[h]),(0,o.A)((()=>{const e=x.getRoot().getAttribute("timezone");A!==e&&x.getRoot().getApplicableNodes({syncTimezone:!0}).forEach((e=>e.updateAttributes({timezone:A})))}),[A]),(0,o.A)((()=>{const e=x.getRoot().getAttribute("overlays");if(k)x.getRoot().updateAttribute("overlays",{...e,highlight:k}),x.getRoot().getApplicableNodes({syncHighlight:!0}).forEach((e=>e.updateAttribute("overlays",{...e.getAttribute("overlays"),highlight:k})));else{const t={...e};delete t.highlight,x.getRoot().updateAttribute("overlays",t),x.getRoot().getApplicableNodes({syncHighlight:!0}).forEach((e=>{const t={...e.getAttribute("overlays")};delete t.highlight,e.updateAttribute("overlays",t)}))}}),[k]),(0,n.useEffect)((()=>{if(!I)return;x.trigger("goToLink",null,I.linkToGo);const e=x.getRoot().getNode({id:I.context});if(e){const t=e.getAttribute("overlays");e.updateAttribute("overlays",{...t,alarm:{type:"alarm",status:I.status,value:I.formattedLastStatusChangeValue,when:I.lastStatusChange}}),e.updateAttributes({selectedInstances:["".concat(I.instance,"@").concat(I.nodeId)],selectedNodes:[I.nodeId]})}const t=!!I&&x.getRoot().on("chartLoaded",(e=>{const a=e.getAttribute("id");if(I.context!==a)return;const n=e.getAttribute("overlays");e.updateAttribute("overlays",{...n,alarm:{type:"alarm",status:I.status,value:I.formattedLastStatusChangeValue,when:I.lastStatusChange}}),e.updateAttributes({selectedInstances:["".concat(I.instance,"@").concat(I.nodeId)],selectedNodes:[I.nodeId]}),t()}));return(0,s.unregister)(t)}),[I]),(0,n.useEffect)((()=>{const{after:e,before:t}=w;x.getRoot().moveX(e,t)}),[w]),(0,u.Vt)(I);const C=localStorage.getItem("netdataJWT"),T=null===(t=window.localNetdataRegistry)||void 0===t?void 0:t.mg,N=localStorage.getItem("agentJWT:".concat(T)),R=E?N:C;return(0,n.useEffect)((()=>{x.getNodes().forEach((e=>{var t;return e.updateAttributes({...E&&null!==(t=window.localNetdataRegistry)&&void 0!==t&&t.xNetdataAuthHeader?{xNetdataBearer:R,bearer:null}:{xNetdataBearer:null,bearer:R},agent:E})}))}),[E,R]),(0,n.useEffect)((()=>(0,s.unregister)(x.getRoot().onAttributeChange("after",(()=>{const{after:e,before:t}=x.getRoot().getAttributes();S({after:e<0?e:1e3*e,before:e<0?0:1e3*t})})),x.getRoot().onAttributeChange("overlays",((e,t)=>{const{highlight:a}=e;if(a===t.highlight)return;const n=null===a||void 0===a?void 0:a.range;if(n){const[e,t]=n;S({highlight:{after:1e3*e,before:1e3*t}})}else S({highlight:{after:null,before:null}})})))),[x]),x?n.createElement(p.Provider,{value:x},a):a}},74618:(e,t,a)=>{"use strict";a.d(t,{z:()=>i});var n=a(58168),r=a(96540),o=a(83199);const i=e=>{let{children:t,isSubmodal:a,onClose:i,title:s,...c}=e;return r.createElement(o.Flex,{justifyContent:"between",background:"modalHeaderBackground",alignItems:"center",padding:[3]},r.createElement(o.Flex,{alignItems:"center"},!!i&&r.createElement(o.Button,{neutral:!0,flavour:"borderless",icon:a?"chevron_left":"x",onClick:()=>i(),"data-testid":"sidebarModalHeader_".concat(a?"chevron_left":"close_button")}),r.createElement(o.H4,(0,n.A)({color:"text"},c),s)),t)}},15327:(e,t,a)=>{"use strict";a.d(t,{CG:()=>u,GO:()=>l,Yv:()=>d});var n=a(58168),r=(a(62953),a(96540)),o=a(8711),i=a(87659),s=a(83199);const c=(0,r.forwardRef)(((e,t)=>{let{toggle:a,isOpen:o=!0,closeOnClickOutside:i=!0,closeOnEsc:c=!0,full:l="vertical",backdrop:d=!0,position:u="right",...m}=e;return o?r.createElement(s.Layer,{position:u,full:l,backdrop:d,shadow:!0,onClickOutside:i?a:void 0,onEsc:c?a:void 0},r.createElement(s.Flex,(0,n.A)({column:!0,background:"mainBackground",width:{max:"50vw",base:150}},m,{ref:t}))):null})),l=e=>{let{onClose:t,defaultIsOpen:a=!0,...o}=e;const[s,l]=(0,i.A)(a);return(0,r.useEffect)((()=>{s||t&&t()}),[s]),r.createElement(c,(0,n.A)({isOpen:s,toggle:l},o))},d=(0,o.default)(s.Flex).attrs((e=>({column:!0,background:"mainBackground",padding:[3,3,0],flex:"1",gap:3,...e}))).withConfig({displayName:"sidebar__SidebarContent",componentId:"sc-tmwerm-0"})([""]),u=(0,o.default)(s.Flex).attrs({justifyContent:"end",alignItems:"center",padding:[3],background:"mainBackground",border:{side:"top",color:"borderSecondary"}}).withConfig({displayName:"sidebar__SidebarFooter",componentId:"sc-tmwerm-1"})([""])},45765:(e,t,a)=>{"use strict";a.d(t,{U:()=>i});var n=a(58168),r=a(96540),o=a(83199);const i=e=>{let{children:t,...a}=e;return r.createElement(o.Flex,(0,n.A)({justifyContent:"between",background:"mainBackground",alignItems:"center",padding:[3,3,0]},a),r.createElement(o.H3,null,t))}},55337:(e,t,a)=>{"use strict";a.d(t,{A:()=>d,g:()=>l});var n=a(58168),r=a(96540),o=a(8711),i=a(83199),s=a(5668);const c={light:i.DefaultTheme,dark:i.DarkTheme,unspecified:i.DarkTheme},l=(e,t)=>a=>{let{...n}=a;return r.createElement(o.ThemeProvider,{theme:c[t]||c.unspecified},r.createElement(e,n))},d=e=>{const t=(0,s.xd)("theme"),a=(0,s.xd)("customTheme"),i=(0,r.useMemo)((()=>"blue"===t?{...c.dark,colors:{...c.dark.colors,...a||{}}}:e.theme?c[e.theme]||c.unspecified:c[t]||c.unspecified),[t,e.theme,a]);return r.createElement(o.ThemeProvider,(0,n.A)({},e,{theme:i}))}},29217:(e,t,a)=>{"use strict";a.d(t,{A:()=>c});var n=a(58168),r=a(96540),o=a(83199);const i=e=>{let{children:t,background:a,isBasic:i,padding:s}=e;return t?r.createElement(o.Flex,(0,n.A)({padding:s||[1.5,2],margin:[2],background:a||"tooltip",round:1,alignSelf:"start"},!i&&{width:{max:"300px"}}),r.createElement(o.TextSmall,{color:"tooltipText"},t)):null},s=(e,t)=>{let{background:a,isBasic:n,padding:o}=t;const s="function"===typeof e?e():e;return"string"===typeof e||null!==e&&void 0!==e&&n?r.createElement(i,{background:a,isBasic:n,padding:o},s):s},c=e=>{let{children:t,content:a,isBasic:i,...c}=e;const l=(0,r.useCallback)((()=>s(a,{isBasic:i})),[a]);return a?r.createElement(o.Tooltip,(0,n.A)({plain:!0,animation:!0,content:l,zIndex:1e3},c),t):t}},68831:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});const n={assetsBaseURL:"".concat(window.envSettings.cloudUrl,"/static"),apiBaseURL:window.envSettings.apiUrl,demoUrl:"".concat(window.envSettings.cloudUrl,"/spaces/netdata-demo"),demoSlug:window.envSettings.demoSlug,demoFavourites:window.envSettings.demoFavourites,demoDefaultRoomViews:{default:"overview"},pollingInterval:3e4,defaultRoomView:"home",integrationsView:"integrate-anything"}},78969:(e,t,a)=>{"use strict";a.d(t,{BX:()=>l,I7:()=>c,J4:()=>d,P8:()=>r,Q$:()=>u,Qy:()=>p,Wd:()=>m,_9:()=>o,eC:()=>i,fx:()=>h,ux:()=>s,vK:()=>v,x7:()=>g});var n=a(62805);const r="/api/v2",o="/api/v3/spaces",i=n.A,s=20,c=13,l=["J2kdSTRJzV4","KCFFZ_qfKXk"],d={live:{flavour:"success",statusTextColor:"primary",indicatorWrapperColor:"primary",counterColor:"primary"},stale:{flavour:"stale",statusTextColor:["green","vista"],indicatorWrapperColor:["green","vista"],counterColor:["green","vista"]},offline:{flavour:"neutral",statusTextColor:"textLite",indicatorWrapperColor:"textLite",counterColor:"textLite"},unseen:{statusTextColor:"textLite",indicatorWrapperColor:"textLite",counterColor:"textLite"}},u={completed:{icon:"check",indicatorWrapperColor:"primary",textColor:"primary",text:"Completed",tooltip:"has been claimed and has successfully connected to Netdata at least once"},pending:{icon:"clock_hollow",indicatorWrapperColor:"textLite",textColor:"textLite",text:"Pending...",tooltip:"has been claimed but never connected to the Netdata."}},m=[1,44,0],g=[1,45,6],p="v1.44.0",h="v1.45.6",v="ErrSpaceMemberAlreadyExists"},97674:(e,t,a)=>{"use strict";a.d(t,{L_:()=>n,pj:()=>r,zl:()=>o});a(17333),a(98992),a(54520);const n=e=>["admin","manager","troubleshooter","observer","billing"].concat("EarlyBird"===e?"member":[]),r=e=>[e["user:SetAdmin"]&&"admin",e["user:SetManager"]&&"manager",e["user:SetMember"]&&"member",e["user:SetTroubleshooter"]&&"troubleshooter",e["user:SetObserver"]&&"observer",e["user:SetBilling"]&&"billing"].filter(Boolean),o=e=>[e["user:SetFromAdmin"]&&"admin",e["user:SetFromManager"]&&"manager",e["user:SetFromMember"]&&"member",e["user:SetFromTroubleshooter"]&&"troubleshooter",e["user:SetFromObserver"]&&"observer",e["user:SetFromBilling"]&&"billing"].filter(Boolean)},45860:(e,t,a)=>{"use strict";a.d(t,{C2:()=>c,PY:()=>p,l1:()=>m,qM:()=>v,rn:()=>f,rx:()=>d,z5:()=>l});a(69479),a(25440),a(41393),a(81454);var n=a(26655),r=a(49286),o=a(37618);const i=e=>{let{roomID:t,alarmCounter:a,unreachableCount:n,state:r}=e;return{id:t,alertCounter:a,unreachableCount:n,state:r}},s=e=>{let{results:t}=e;return{results:(t||[]).map(i)}},c=e=>(0,o.ES)(e)?Promise.resolve({data:{results:[]}}):n.A.get("/api/v2/spaces/".concat(e,"/alarms"),{transform:s}),l=e=>(0,o.ES)(e)?Promise.resolve({data:null}):n.A.get("/api/v2/spaces/".concat(e,"/alarms/metas")),d={contexts:null,names:null,roles:null},u=e=>{let{alerts:t=[],nodes:a=[],alert_instances:n=[]}=e;return(0,r.bn)(n.map((e=>{let{ni:n,ati:r,tr_i:o,tr_v:i,tr_t:s,cfg:c,info:l,fami:d,ch:u,ch_n:m=u,ctx:g,v:p,t:h,flags:v,st:f,src:A,units:y,to:b,cl:S,cm:k,tp:I,sum:w,slc:E}=e;const x=a[n],{nm:C,cr:T,wr:N,cl:R,er:M,in:D,nd:_,cfg:U}=t[r],P=(C||"unknown_alert").replace(/_/g," ");return{mg:x.mg,nd:x.nd,nodeId:x.nd||x.mg,id:o,context:g,value:p,status:f.toLowerCase(),summary:w||P,name:C,displayName:P,alert:alert,criticalCount:T,warningCount:N,clearCount:R,errorCount:M,instanceCount:D,nodeCount:_,configCount:U,lastStatusChangeValue:i,lastStatusChange:s,configHash:c,info:l,family:d,instance:u,instanceName:m,lastUpdated:h,flags:v,units:y,source:A,recipient:b,class:S,component:k,type:I,silencing:E}})))},m=(e,t)=>(0,o.ES)(e)?n.A.get("/api/v2/alerts?options=summary,instances,values,minify&status=raised",{baseURL:window.envSettings.agentApiUrl,transform:u}):n.A.post("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/alerts"),{scope:{nodes:[],contexts:[]},selectors:{status:["raised"]},options:["summary","values","instances"]},{transform:u}),g=e=>{let{transitions:t=[]}=e;if(!t[0])return{};const{config_hash_id:a,context:n,machine_guid:r,info:o,transition_id:i,node_id:s,alert:c,new:{status:l,value:d},when:u,old:{status:m,value:g,duration:p},instance:h,instance_n:v=h,units:f}=t[0];return{configHash:a,context:n,name:c,id:i,mg:r,nodeId:s||r,nd:s,alert:c,info:o,displayName:(c||"unknown_alert").replace(/_/g," "),status:l.toLowerCase(),lastStatusChange:u,lastStatusChangeValue:d,prevStatus:m.toLowerCase(),prevValue:g,prevDuration:p,instance:h,instanceName:v,units:f}},p=(e,t,a)=>(0,o.ES)(e)?n.A.get("/api/v2/alert_transitions?options=minify&transition=".concat(a),{baseURL:window.envSettings.agentApiUrl,transform:g}).then((a=>{let{data:n}=a;return y(e,t,n.configHash,n)})):n.A.post("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/alert_transitions"),{transition:a},{transform:g}).then((a=>{let{data:n}=a;return y(e,t,n.configHash,n)})),h=e=>{let{alerts:t=[]}=e;return t.map((e=>{let{nm:t,cr:a,wr:n,cl:r,er:o,in:i,nd:s,cfg:c,sum:l,slc:d}=e;return{name:t,displayName:(t||"unknown_alert").replace(/_/g," "),criticalCount:a,warningCount:n,clearCount:r,errorCount:o,instanceCount:i,nodeCount:s,configCount:c,summary:l||t,silencing:d}}))},v=(e,t)=>(0,o.ES)(e)?n.A.get("/api/v2/alerts?options=minify",{baseURL:window.envSettings.agentApiUrl,transform:h}).then((e=>{let{data:t}=e;return t})):n.A.post("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/alerts"),{scope:{nodes:[]}},{transform:h}).then((e=>{let{data:t}=e;return t})),f=function(){let{spaceId:e,roomId:t,name:a,context:r,allowEmptyName:i}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if((!a||!a.length)&&!i)return Promise.resolve({data:[]});if((0,o.ES)(e)){const e=Array.isArray(a)?a.join(","):a;return n.A.get("/api/v2/alerts?options=summary,values,instances,minify&alert=".concat(e),{baseURL:window.envSettings.agentApiUrl,transform:u})}const s=Array.isArray(a)?a:[a],c=r?Array.isArray(r)?r:[r]:void 0;return n.A.post("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/alerts"),{scope:{nodes:[],contexts:c},selectors:{alert:s},options:["summary","instances","values"]},{transform:u})},A=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t=>{let{class:a,component:n,type:r,info:o,value:{calc:i="",update_every:s,units:c,db:l},status:d,notification:u}=t;const{type:m,exec:g,to:p,delay:h,repeat:v}=u||{},{warn:f,crit:A}=v||{},{warn:y,crit:b,green:S,red:k}=d||{},{dimensions:I,method:w,after:E,before:x,options:C}=l||{};return{info:o,...e,configInfo:o,class:a,component:n,type:r,calculation:i,updateEvery:s,units:c,warning:y,critical:b,lookupDimensions:I,lookupMethod:w,lookupAfter:E,lookupBefore:x,lookupOptions:C,notificationType:m,exec:g,recipient:p,delay:h,warnRepeatEvery:f,critRepeatEvery:A,green:S,red:k}}},y=function(e,t,a){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return(0,o.ES)(e)?n.A.get("/api/v2/alert_config?options=minify&config=".concat(a),{baseURL:window.envSettings.agentApiUrl,transform:A(r)}):n.A.post("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/alert_config"),{config:a},{transform:A(r)})}},96935:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>s,J7:()=>l,Qk:()=>c,So:()=>m,_v:()=>u,ue:()=>i,xz:()=>d});var n=a(47444),r=a(92861),o=a(45860);const i={id:null,loaded:!1,nodeId:null,instance:null,instanceName:null,name:"",calculation:"",lookupAfter:0,lookupBefore:0,status:"unknown",date:"",fullyLoaded:!1,fullyLoading:!1,info:"",configInfo:"",warning:"",critical:"",updateEvery:0,source:"",recipient:"Unknown",units:"",delayUpDuration:null,delayDownDuration:null,delayMaxDuration:null,multiplier:null,delayUpToTimestamp:null,lookupDimensions:"",lookupMethod:"",lookupOptions:"",class:"Unknown",type:"Unknown",component:"Unknown"},s=(0,n.eU)({key:"alert",default:{}}),c=(0,n.eU)({key:"selectedAlert",default:null}),l=(0,n.eU)({key:"alertsTabsAtom",default:r.Sy}),d=(0,n.Iz)({key:"alertConfigurations",default:e=>{let{spaceId:t,roomId:a}=e;return(0,o.qM)(t,a)}}),u=(0,n.Iz)({key:"alertInstances",default:e=>{let{spaceId:t,roomId:a,name:n}=e;return(0,o.rn)({spaceId:t,roomId:a,name:n}).then((e=>{let{data:t}=e;return t}))}}),m=(0,n.Iz)({key:"selectedAlertConfiguration",default:r.Vh})},92861:(e,t,a)=>{"use strict";a.d(t,{Sy:()=>r,UW:()=>i,Vh:()=>o,kc:()=>n});const n={alertStatus:"alertStatus",os:"os"},r=0,o={alertName:null,nodeId:null},i="https://learn.netdata.cloud/docs/alerting/health-configuration-reference#edit-health-configuration-files"},52768:(e,t,a)=>{"use strict";a.d(t,{J4:()=>g,Vt:()=>v,lT:()=>p,m3:()=>m,x7:()=>u});a(62953);var n=a(96540),r=a(47767),o=a(69765),i=a(27467),s=a(11128),c=a(20081),l=a(33222),d=a(21290);const u=e=>{const t=(0,r.Zp)(),a=(0,o.r9)(),c=(0,s.u7)({extraKey:"alerts"}),l=(0,i.Fw)("alertStatuses",{extraKey:"alerts"});return(0,n.useCallback)((n=>{e&&c([e]),n&&"string"===typeof n&&l([n]),t("".concat(a,"/alerts"))}),[e,a,c])},m=(e,t)=>{if(void 0===e)return"-";const a=(0,c.W)(e);return t?"".concat(a," ").concat(t):a},g=(e,t)=>(0,n.useMemo)((()=>m(e,t)),[e,t]),p=e=>{let{rawTime:t,secs:a=!1,long:r=!1}=e;const{localeTimeString:o,localeDateString:i}=(0,d.$j)();return(0,n.useMemo)((()=>{const e=new Date(1e3*t);return isNaN(e.valueOf())?{}:{timeAgo:(0,l.A)(e,new Date),formattedDate:"".concat(i(e,{long:r})," ").concat(o(e,{secs:a}))}}),[t,o,i])},h=()=>Math.floor((new Date).getTime()/1e3),v=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const{lastUpdated:a,lastStatusChange:r}=e||{},o=(0,i.rI)(),[s,c]=(e=>{const{lastUpdated:t,lastStatusChange:a}=e||{};return(0,n.useMemo)((()=>{if(!t||!a)return[];const e=t||h(),n=e-a,r=Math.round(a-n),o=Math.round(e+n);return[r,o>h()?h():o]}),[t,a])})({lastUpdated:a,lastStatusChange:r});(0,n.useEffect)((()=>{t&&(s||c)&&o({after:1e3*s,before:1e3*c})}),[t,s,c])}},64118:(e,t,a)=>{"use strict";a.d(t,{AO:()=>x,DV:()=>M,Gq:()=>b,I8:()=>N,JL:()=>f,KB:()=>A,SB:()=>h,Yo:()=>I,kJ:()=>R,oU:()=>C,q1:()=>T,ud:()=>D,x:()=>w,yk:()=>S,zu:()=>k});a(17333),a(41393),a(14905),a(98992),a(54520),a(81454),a(8872);var n=a(96540),r=a(47444),o=a(69765),i=a(67990),s=a(51074),c=a(88982),l=a(47762),d=a(92861),u=a(3914),m=a(96935),g=a(45860),p=a(20081);const h=(0,r.K0)({key:"alertState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n(m.Ay)[t]||m.ue;return a?r[a]:r}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r(m.Ay,a?"function"!==typeof n?e=>({...e,[t]:{...e[t],[a]:n}}):e=>({...e,[t]:{...e[t],[a]:n(e[t][a])}}):e=>({...e,[t]:{...m.ue,...e[t],...n}}))}}}),v=(0,r.K0)({key:"alertInstancesState",get:e=>{let{spaceId:t,roomId:a,alertNames:n,contexts:r,allowEmptyName:o}=e;return()=>(0,g.rn)({spaceId:t,roomId:a,name:n,context:r,allowEmptyName:o})}}),f=(e,t)=>(0,r.vc)(h({id:e,key:t})),A=()=>(0,r.L4)(m.Qk),y=(0,r.K0)({key:"alertsState",get:e=>t=>{let{get:a}=t;return e.map((e=>a(h({id:e}))))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),b=e=>(0,r.vc)(y(e)),S=function(e){let{spaceId:t,roomId:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=(0,u.vt)();t=t||i;const s=(0,o.ID)();a=a||s;const c=(0,r.Zs)((n=>{let{set:r}=n;return()=>{r(h({id:e,key:"fullyLoading"}),!0);const n=(0,g.PY)(t,a,e);return n.then((t=>{let{data:a}=t;return r(h({id:e}),{...a,fullyLoaded:!0,fullyLoading:!1,loaded:!0})})).catch((()=>r(h({id:e,key:"fullyLoading"}),!1))),()=>n.cancel()}}),[a,t,e]);(0,n.useEffect)((()=>{e&&c()}),[e,c])},k=()=>{const e=(()=>{const e=(0,o.ID)();return(0,r.vc)(I(e))})(),t=(0,i.CK)(),a=(0,l.Gt)(t);return(0,n.useMemo)((()=>a.map((t=>{const a=e.filter((e=>e.nodeId===t.id));if(!a.length)return t;const n=a.map((e=>e.status));return{...t,[d.kc.alertStatus]:(0,p.h)(n)}}))),[e,a])},I=(0,r.K0)({key:"roomAlerts",get:e=>t=>{let{get:a}=t;const n=a((0,s.t)({id:e,key:"ids"}));return a(y(n))}}),w=()=>{const e=(0,o.ID)();return(0,r.vc)((0,s.t)({id:e,key:"loaded"}))},E={warning:0,critical:0,clear:0},x=e=>{const t=b(e);return(0,n.useMemo)((()=>t.reduce(((e,t)=>{let{status:a}=t;return e[a]=e[a]+1,e}),{...E})),[e])},C=()=>{const e=(0,u.vt)(),t=(0,o.ID)();return(0,r.vc)((0,m.xz)({spaceId:e,roomId:t}))},T=(e,t)=>{const a=(0,u.vt)(),i=(0,o.ID)(),s=(0,c.n)("id"),l=i||s,d=(0,r.vc)((0,m._v)({spaceId:a,roomId:l,name:e}));return(0,n.useMemo)((()=>t?d.filter((e=>e.nodeId===t)):d),[d,t])},N=e=>{var t;let{alertNames:a,contexts:n,allowEmptyName:i}=e;const s=(0,u.vt)(),l=(0,o.ID)(),d=(0,c.n)("id"),m=l||d,g=(0,r.xf)(v({spaceId:s,roomId:m,alertNames:a,contexts:n,allowEmptyName:i}));return{loaded:"loading"!==g.state,value:null===(t=g.contents)||void 0===t?void 0:t.data,hasError:"hasError"===g.state}},R=()=>(0,r.L4)(m.J7),M=()=>{const e=(0,o.ID)();return(0,r.L4)((0,m.So)(e))},D=()=>{const e=(0,o.ID)();return(0,r.E0)((0,m.So)(e))}},20081:(e,t,a)=>{"use strict";a.d(t,{W:()=>n,h:()=>r});const n=e=>{const t=e<1?Number(e).toPrecision(3):Number(e).toFixed(2),a=Number.parseFloat(t);return Math.abs(a)>=1e9||Math.abs(a)<=1e-5&&0!==a?a.toExponential(3):a},r=e=>e.includes("critical")?"critical":e.includes("warning")?"warning":e.includes("clear")?"clear":e[0]},58384:(e,t,a)=>{"use strict";a.d(t,{t:()=>d,A:()=>m});var n=a(58168),r=(a(62953),a(96540)),o=a(83199),i=a(87659),s=a(8711);const c=(0,s.default)(o.Drop).attrs({align:{top:"bottom",left:"left"},animation:!0,background:"dropdown",column:!0,margin:[.5,0,0],overflow:{vertical:"auto"},padding:[2,0],round:1}).withConfig({displayName:"styled__Drop",componentId:"sc-1x9syns-0"})(["box-sizing:content-box;"]),l=(0,s.default)(o.TextSmall).withConfig({displayName:"styled__DropdownItemClickable",componentId:"sc-1x9syns-1"})(["cursor:pointer;pointer-events:",";"," &:hover{background-color:",";}"],(e=>{let{isDisabled:t}=e;return t?"none":"auto"}),(e=>e.isDisabled&&"opacity: 0.6;"),(0,o.getColor)("selected")),d=e=>{let{children:t,color:a="text",disabled:i,icon:s,...c}=e;return r.createElement(l,(0,n.A)({as:o.Flex,"data-testid":"dropdownItem",gap:2,isDisabled:i,padding:[2,4]},c),r.createElement(o.Icon,{color:i?"textLite":a,"data-testid":"dropdownItem-icon",height:"16px",name:s,width:"16px"}),r.createElement(o.Text,{color:a,"data-testid":"dropdownItem-text",whiteSpace:"nowrap"},t))},u=(0,r.forwardRef)(((e,t)=>{let{Component:a,category:o,context:i,...s}=e;return r.createElement(a,(0,n.A)({"data-ga":"".concat(o,"::").concat(i,"::options"),"data-testid":"chartOptions",icon:"nav_dots",iconWidth:"12px",iconHeight:"12px",flavour:"borderless",neutral:!0,small:!0,padding:[0],ref:t,title:"Options"},s))})),m=e=>{let{Component:t=o.IconButton,category:a,context:s,children:l,testId:d,...m}=e;const[g,p,,h]=(0,i.A)(),v=(0,r.useRef)(),f=d||"chartsDropdown";return r.createElement(r.Fragment,null,r.createElement(u,(0,n.A)({},m,{"data-testid":"".concat(f,"-button"),category:a,context:s,onClick:p,ref:v,Component:t})),v.current&&g&&r.createElement(c,{close:h,"data-testid":f,onClickOutside:h,onEsc:h,target:v.current},l({close:h})))}},11604:(e,t,a)=>{"use strict";a.d(t,{Yr:()=>x,z2:()=>R,DH:()=>I,Js:()=>w,tN:()=>N,So:()=>T,LC:()=>C});a(25440),a(9920),a(41393),a(14905),a(98992),a(3949),a(81454),a(8872),a(62953);var n=a(96540),r=a(47767),o=a(79731),i=a(3914),s=a(86663),c=a(26655),l=a(18061),d=a(71835),u=a(61649),m=a(76201),g=a(37618),p=a(22292),h=a(11368),v=a(57419);const f=e=>{let{cloudRoute:t,redirectUri:a}=e;try{if(!(0,v.isTryingToJoinWorkspace)(t))return"";const{inviteToken:e,spaceId:n}=(e=>{const t=s.parse(e);let{error_retry:a,token:n}=t.error_retry||t.token?{...t,token:decodeURIComponent(t.token)}:s.parse(decodeURIComponent(e));return n||(n=s.parse(a).token),{inviteToken:n,spaceId:/spaces\/(.*)\/join-callback/.exec(a)[1]}})(a);return"?".concat(s.stringify({token:e,space:n}))}catch(n){return console.warn("error parsing join-callback url",n),""}};var A=a(35600),y=a(50503),b=a(36850),S=a(50876);const k=function(e){let{path:t="/sign-up"}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(window.envSettings.tracking)try{var a;const n="".concat(t,"/thank-you");window.dataLayer.push({event:"pageview",virtualPage:"".concat(n).concat(e)}),window.posthog.setPersonPropertiesForFlags({netdata_cloud_account_created_days_ago:0}),(0,m.F)("".concat(null===(a=window)||void 0===a||null===(a=a.location)||void 0===a?void 0:a.origin).concat(n).concat(e))}catch(n){}},I=e=>(0,u.A)((function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return c.A.patch("/api/v1/accounts/".concat(e),t)}),[e]),w=()=>{const{search:e,hash:t}=(0,r.zy)(),a=(0,r.RQ)("/sign-up"),i=(0,r.RQ)("/sign-in"),s=a?a.pathname:i?i.pathname:"",l=(0,r.Zp)(),[u,m]=(0,d.A)(),{sendLog:g,isReady:p}=(0,S.A)();return(0,n.useCallback)((a=>{let{isSSO:n,email:r,redirectURI:i,registerURI:d,isUnverifiedRegistration:p,resend:h}=a;return(n?c.A.get("/api/v2/auth/account/okta/magic-link?redirect_uri=".concat(i,"®ister_uri=").concat(d,"&email=").concat(r)):c.A.post("/api/v2/auth/account/magic-link",{email:r,redirectURI:i,registerURI:d,isUnverifiedRegistration:p})).then((()=>{u({header:"Sign in email sent"}),h||(k(e,{path:s}),"/sign-up"==s&&g({feature:"SignUpThankYou"}),l("/sign-in/magic-link-sent".concat(e).concat(t),{state:{email:r}}))})).catch((e=>{var t,a;const n=(0,o.o)((null===e||void 0===e||null===(t=e.response)||void 0===t||null===(t=t.data)||void 0===t?void 0:t.errorMsgKey)||(null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.errorMessage)||"Something went wrong");throw m({header:"Sign in",text:n}),n}))}),[s,e,t,g,p])},E=e=>{let{authorized_origins:t=[]}=e;return t.map((e=>{let{id:t,url:a,last_accessed_at:n}=e;return{id:t,url:a,lastAccessedAt:n}}),[])},x=function(){let{onSuccess:e,onFail:t,...a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(0,l.A)((()=>({fetch:()=>c.A.get("/api/v1/auth/account/origins",{transform:E}),initialValue:[],isDefaultLoading:!0,onSuccess:t=>{null===e||void 0===e||e(t)},onFail:e=>{null===t||void 0===t||t(e)},...a})),n)},C=()=>{const[e,t]=(0,n.useState)(""),[a,r]=(0,n.useState)(!1),[,o]=(0,d.A)();return[e,(0,n.useCallback)((async e=>{r(!0);try{const a=await c.A.post("/api/v1/auth/account/origins",{origin_url:e});t(a.authorized_origin_url),r(!1)}catch(a){o({header:"Trust URL",text:"We couldn't trust the URL"}),r(!1)}}),[]),a]},T=e=>{e&&e.preventDefault();const[,t]=(0,d.A)(),{search:a}=(0,r.zy)(),{cloudRoute:o,oauth:i,token:l,username:u,redirect_uri:m}=s.parse(a),g=(0,h.hn)(),{setFailure:p}=(0,y.A)(),v=f({cloudRoute:o,redirectUri:m}),{sendLog:A,isReady:b}=(0,S.A)();return(0,n.useCallback)((async()=>{const e="/api/v2/auth/account/".concat(i||"magic-link","/register");try{const{data:t}=await c.A.post("".concat(e).concat(v),{token:l,username:u}),{errorMsgKey:n}=t||{};"ErrTrialUpdateFailed"==n&&p(),g(),k(a)}catch(n){t(n)}}),[i,l,u,A,b])},N=()=>{const e=(0,i.dg)();return(0,n.useCallback)((async()=>{var e;return await c.A.post("/api/v1/auth/account/logout"),"function"==typeof(null===(e=window.posthog)||void 0===e?void 0:e.reset)&&window.posthog.reset(),(()=>{const e=b.V.reduce(((e,t)=>({...e,[t]:localStorage.getItem(t)})),{});localStorage.clear(),Object.entries(e).forEach((e=>{let[t,a]=e;localStorage.setItem(t,a)}))})(),(0,A.y)(),g.Ay?window.location.reload():window.location.replace("/sign-in")}),[e])},R=()=>{const e=(0,p.NJ)(),t=N(),[,a]=(0,d.A)();return(0,n.useCallback)((async()=>{try{await c.A.delete("/api/v1/accounts/".concat(e)),t()}catch(n){a(n)}}),[])}},36850:(e,t,a)=>{"use strict";a.d(t,{S:()=>n,V:()=>r});const n="https://learn.netdata.cloud/docs/nightly/concepts/role-based-access-model",r=["lastSignInMethod","oktaSSO"]},11368:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>f,hn:()=>h});a(14905),a(98992),a(8872);var n=a(96540),r=a(47444),o=a(26655),i=a(78969),s=a(37618),c=a(92861);const l={auth_type:"",avatarURL:null,createdAt:"",email:"",id:null,name:"",termsAccepted:!0,isAnonymous:!1,authorizedOrigins:[]},d={theme:"unspecified",spacePanelCollapsed:!0,alertsGrouping:c.kc.alertStatus},u=e=>{let{permissions:t,settings:a,...n}=e;const r=n.id===i.eC;return{permissions:t,settings:a,user:{...n,isAnonymous:r,termsAccepted:r||n.termsAccepted}}},m=()=>{var e;const t=JSON.parse(localStorage.getItem("userSettings"))||{},a={user:{...l,id:(null===(e=window.localNetdataRegistry)||void 0===e?void 0:e.pg)||null,isLoaded:!0,isAnonymous:!0},permissions:{},settings:{...d,...t,isLoaded:!0}};if((0,s.I)())return Promise.resolve(a);let n;return(()=>{var e,r;return null===(e=n)||void 0===e||null===(r=e.cancel)||void 0===r||r.call(e),n=o.A.get("/api/v2/accounts/me",{transform:u,allow401:!0}),n.then((e=>{let{data:{user:n,permissions:r=[],settings:o}}=e;return s.Ay&&n.isAnonymous?a:{user:{...l,...n,isLoaded:!0},permissions:r.reduce(((e,t)=>({...e,[t]:t})),{}),settings:{...d,...t,...o,isLoaded:!0}}})).catch((()=>s.Ay?a:{user:{...l,isLoaded:!0,isAnonymous:!0},permissions:{},settings:{...d,...t,isLoaded:!0}}))})()},g=(0,r.eU)({key:"currentUserFetcher",default:null}),p=(0,r.eU)({key:"checkAuthAtom",default:1}),h=()=>{const e=(0,r.lZ)(p),t=(0,r.lZ)(g);return(0,n.useCallback)((async()=>{const a=await m();t(a),e((e=>e+1))}),[])},v=(0,r.gD)({key:"fullStateFetcher",get:async e=>{let{get:t}=e;return t(g)||await m()}}),f=(0,r.K0)({key:"currentUserFullState",get:e=>t=>{let{get:a}=t;return a(v)[e]}})},46741:(e,t,a)=>{"use strict";a.d(t,{Dk:()=>p,_s:()=>f,Ge:()=>A,JT:()=>v});a(14905),a(98992),a(8872);var n=a(96540),r=a(47444),o=a(65570),i=a(3914),s=a(37618);const c=(0,r.Iz)({key:"permissionsBySpaceId",default:{},effects:e=>(0,s.ES)(e)?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(s.yu.permissions)}]:[]});var l=a(97674),d=a(11368);const u=(0,r.eU)({key:"userPermissions",default:(0,d.Ay)("permissions")}),m=["space:Leave","room:Create","space:InviteUser","space:RemoveUser","space:UpdateMeta","space:Delete","room:Delete","room:AddNode","node:Delete","user:ChangeRoles","room:UpdateMeta","room:Leave","room:RemoveNode","billing:Manage"],g={"space:ReadSettings":e=>!m.some((t=>!e[t]))},p=(0,r.K0)({key:"permissionsSelector",get:e=>t=>{let{get:a}=t;return a(c(e))},set:e=>function(t){let{set:a}=t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};a(c(e),(e=>(0,o.Ay)(e,n)?e:n))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),h=e=>{const t=(0,i.vt)(),a=(0,r.vc)(p(e||t)),o=(0,r.xf)(u);return(0,n.useMemo)((()=>{let e={...a};return"hasValue"===o.state&&(e={...e,...o.contents}),t=e,{...t,...Object.keys(g).reduce(((e,a)=>g[a](t)?{...e,[a]:a}:e),{})};var t}),[a,o.state])},v=(e,t)=>!!h(t)[e],f=()=>{const e=h();return(0,n.useMemo)((()=>(0,l.pj)(e)),[e])},A=()=>{const e=h();return(0,n.useMemo)((()=>(0,l.zl)(e)),[e])}},5668:(e,t,a)=>{"use strict";a.d(t,{ng:()=>h,tF:()=>g,xd:()=>m});a(62953);var n=a(47444),r=a(86723),o=a(11368);const i=(0,n.eU)({key:"currentUserSettings",default:(0,o.Ay)("settings")});var s=a(11604),c=a(22292),l=a(3914);const d=(0,n.K0)({key:"userSettings",get:e=>t=>{let{get:a}=t;const n=a(i);return e?n[e]:n},set:e=>(t,a)=>{let{set:n}=t;return n(i,(t=>e?{...t,[e]:"function"===typeof a?a(t[e]):a}:"function"===typeof a?a(t):a))}}),u=e=>{const t=(0,c.uW)("isAnonymous"),a=(0,n.lZ)(d(e)),o=(0,c.NJ)(),i=(0,s.DH)(o),[,l]=(0,r.A)("userSettings",{});return(0,n.Zs)((n=>{let{snapshot:r}=n;return async n=>{a(n);const o=r.retain();try{const a={...await r.getPromise(d()),...e?{[e]:n}:n};if(t)return void l(a);await i({settings:a})}catch(s){const t=await r.getPromise(d());a(e?t[e]:t)}finally{o()}}}),[e])},m=e=>(0,n.vc)(d(e)),g=e=>[m(e),u(e)],p="spaceSettings",h=e=>{var t;const a=(0,l.vt)(),n=m(p),r=u(p);return[null===n||void 0===n||null===(t=n[a])||void 0===t?void 0:t[e],t=>{r({...n||{},[a]:{...(null===n||void 0===n?void 0:n[a])||{},[e]:t}})}]}},76689:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});var n=a(47444),r=a(11368);const o=(0,n.eU)({key:"currentUser",default:(0,r.Ay)("user")})},22292:(e,t,a)=>{"use strict";a.d(t,{Dm:()=>i,Ir:()=>d,NJ:()=>c,qO:()=>l,uW:()=>s});var n=a(47444),r=a(76689),o=a(11604);const i=(0,n.K0)({key:"userState",get:e=>t=>{let{get:a}=t;const n=a(r.A);return e?n[e]:n},set:e=>(t,a)=>{let{set:n}=t;n(r.A,(t=>e?{...t,[e]:a}:{...t,...a}))}}),s=e=>(0,n.vc)(i(e)),c=()=>(0,n.vc)(i("id")),l=function(e){let{shouldPersist:t,onSuccess:a,onFail:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=(0,n.lZ)(i(e)),l=c(),d=(0,o.DH)(l);return(0,n.Zs)((n=>{let{snapshot:r}=n;return async n=>{if(s(n),!t)return;const o=r.retain();try{await d({...e?{[e]:n}:n}),a&&a()}catch(c){const t=await r.getPromise(i());s(e?t[e]:t)}finally{o()}}}),[e,t,a,r])},d=(e,t)=>[s(e),l(e,t)]},2025:(e,t,a)=>{"use strict";a.d(t,{DH:()=>y,jA:()=>f,yK:()=>v,z2:()=>A});a(9920),a(41393),a(98992),a(3949),a(81454),a(62953);var n=a(47444),r=a(61649),o=a(71835),i=a(69765),s=a(3914),c=a(72802),l=a(68980),d=a(86652),u=a(58388),m=a(80925),g=a(27078),p=a(91517),h=a(43124);const v=(e,t)=>{const[a,n]=(0,o.A)();return(0,r.A)((function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=(0,c.k9)(e,t,r);return o.then((e=>(a({header:"Dashboards",text:"Dashboard successfully created!"}),e))).catch((e=>!e.isCancel&&n(e))),o}),[e,t])},f=()=>{const[e,t]=(0,o.A)();return(0,r.A)((a=>{let{dashboards:n}=a;const r=n.map((e=>{let{id:t}=e;return t})).toString(),o=n[0].roomId,i=n[0].spaceId;return(0,c.A_)(i,o,r).then((()=>e({header:"Dashboards",text:"Dashboards successfully deleted!"}))).catch((e=>!e.isCancel&&t))}),[])},A=e=>{const t=(0,l.fz)(e,"spaceId"),a=(0,l.fz)(e,"roomId"),[n,i]=(0,o.A)();return(0,r.A)((()=>{const r=(0,c.A_)(t,a,e);return r.then((()=>n({header:"Dashboards",text:"Dashboard successfully deleted!"}))).catch((e=>!e.isCancel&&i(e))),r}),[e,t,a])},y=function(e){let{onSuccess:t,onFail:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=(0,m.e)(),o=(0,s.vt)(),v=(0,i.ID)();return(0,n.Zs)((n=>{let{snapshot:i,set:s}=n;return function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e;s((0,l.Qx)({id:n,key:"processing"}),!0);const m=i.getLoadable((0,l.Qx)({id:n})).contents,{layout:f,containerIds:A,containers:y}=i.getLoadable((0,d.kY)({id:n})).contents,b=i.getLoadable((0,u.nG)({id:n})).contents,S=(0,g.My)(r,n),k={version:m.version+1,name:m.name,snapshot:{uiState:{layout:f,containerIds:A,containers:y,cards:b}}},I=(0,c.mQ)(o,v,n,k);return I.then((e=>{let{data:a}=e;const{createdAt:n,id:r,name:i,roomID:c=v,slug:m,spaceID:g=o,updatedAt:f,version:A}=a,{cards:y}=(0,p.S)(a);s((0,u.nG)({id:r}),y),s((0,l.Qx)({id:r}),(e=>({...e,createdAt:n,id:r,name:i,roomId:c,slug:m,spaceId:g,updatedAt:f,version:A,processing:!1}))),s(h.H9,m),s((0,h.yC)([g,c,m]),r),s((0,d.Ie)(r)),S&&Object.keys(y).forEach((e=>{var t,a;"text"!==y[e].type&&(null===(t=S.getNode({cardId:e}))||void 0===t||null===(a=t.removePristine)||void 0===a||a.call(t))})),t&&t(a)})).catch((e=>{throw s((0,l.Qx)({id:n,key:"processing"},!1)),a&&a(e),e})),I}}))}},67544:(e,t,a)=>{"use strict";a.d(t,{A_:()=>x,Dn:()=>I,Kv:()=>b,Ts:()=>E,W6:()=>w,c6:()=>k,nM:()=>S});a(17333),a(9920),a(14905),a(98992),a(54520),a(3949),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(96540),r=a(47444),o=a(33829),i=a(54621),s=a(21591),c=a(30673),l=a(8196),d=a(86652),u=a(68980),m=a(58388),g=a(72802),p=a(2025);const h=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{...c.kG,...c.Pk,id:(0,o.A)(),contextScope:e,...t}},v="A",f=e=>function(t,a){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3?arguments[3]:void 0;return n=n||{},r=r||Object.keys(t)[0]||v,{...t,[r]:[...t[r]||[],{...e,...n,id:a}]}},A=f(l.u6),y=f(l.BC),b=e=>(0,r.Zs)((t=>{let{set:a,snapshot:n}=t;return async function(){let{dashboardId:t,containerId:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const i=(0,o.A)(),s={...c.kG,...c.cY,id:i,editing:!0};e=e||t;const l=await n.getPromise((0,d.kY)({id:e,key:"containerIds"}));r=r||l[0]||v,a((0,u.Qx)({id:e,key:"cardIds"}),(e=>[...e,i])),a((0,d.xB)(e),(e=>y(e,i,null,r))),a((0,d.MX)(e),(e=>e.includes(r)?e:[...new Set([...e,r])])),a((0,m.nG)({id:e,resourceId:i}),s)}})),S=e=>(0,r.Zs)((t=>{let{set:a,snapshot:n}=t;return async function(t){let{itemLayout:r,containerId:o,...i}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>{};const c=h(t,i),{id:l,dashboardId:g}=c;e=e||g;const p=await n.getPromise((0,d.kY)({id:e,key:"containerIds"}));o=o||p[0]||v,a((0,u.Qx)({id:e,key:"cardIds"}),(e=>[...e,l])),a((0,d.xB)(e),(e=>A(e,l,r,o))),a((0,d.MX)(e),(e=>e.includes(o)?e:[...new Set([...e,o])])),a((0,m.nG)({id:e,resourceId:l}),c),s(c)}})),k=(e,t,a)=>(0,r.Zs)((n=>{let{set:r}=n;return()=>{r((0,u.Qx)({id:e,key:"cardIds"}),(e=>e.filter((e=>e!==t)))),r((0,d.xB)(e),(e=>{if(!t){const t={...e};return delete t[a],t}return a?{...e,[a]:e[a].filter((e=>{let{id:a}=e;return a!==t}))}:Object.keys(e).reduce(((a,n)=>({[n]:e[n].filter((e=>{let{id:a}=e;return a!==t}))})),{})})),a&&r((0,d.MX)(e),(e=>e.filter((e=>e!==a)))),t&&r((0,m.nG)({id:e}),(e=>{const a={...e};return delete a[t],a}))}})),I=function(e,t){let{onSuccess:a,onFail:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,p.yK)(e,t);return(0,r.Zs)((r=>{let{set:i}=r;return async function(r){let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a;try{const{data:a}=await o(r),n={...r,spaceId:e,roomId:t,...a,loaded:!0};i((0,u._d)(a.id),n),i((0,s.hZ)(t),n),c&&c(n)}catch(l){n?n(r):console.warn("failed",l)}}}),[o,e,a,n])},w=(e,t,a)=>{const r=I(e,t,a);return(0,n.useCallback)(((n,o,i)=>{const s=h(o,i);return r({name:n},(n=>{var r;(0,g.mQ)(e,t,n.id,{version:n.version+1||2,snapshot:{uiState:A({},s.id,i.itemLayout),items:[{...s,cardAttributes:{...i,id:s.id}}]}}),null===a||void 0===a||null===(r=a.onSuccess)||void 0===r||r.call(a,n)}))}),[r])},E=()=>(e=>{const t=(0,i.nT)();return(0,r.Zs)((a=>{let{snapshot:n,set:r}=a;return async function(a){let{ids:o}=a,{onSuccess:i,onFail:c}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const l=await n.getPromise((0,u.dE)(o));e({dashboards:l}).then((()=>{l.forEach((e=>{let{id:a,roomId:n}=e;r((0,u.kg)(a)),r((0,s.wt)(n),[a]),t(a)})),i&&i(l)})).catch((e=>{c?c(l):console.warn("failed",e)}))}}),[e])})((0,p.jA)()),x=(e,t)=>function(e,t){let{onSuccess:a,onFail:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,u.fz)(e,"spaceId"),c=(0,u.fz)(e,"roomId"),l=(0,i.nT)();return(0,r.Zs)((r=>{let{snapshot:o,set:i}=r;return async()=>{const r=await o.getPromise((0,u.Qx)({id:e}));try{await t(),i((0,u.kg)(e)),i((0,s.wt)(c),[e]),l(e),a&&a(r)}catch(d){n?n(r):console.warn("failed",d)}}}),[t,o,c,e,a,n])}(e,(0,p.z2)(e),t)},72802:(e,t,a)=>{"use strict";a.d(t,{A_:()=>c,f7:()=>l,k9:()=>s,mQ:()=>i});var n=a(26655),r=a(37618);const o=(0,a(63457).A)("netdata"),i=(e,t,a,i)=>(0,r.ES)(e)&&(0,r.tB)(t)&&a===r.LA?o.get(r.LA).then((e=>e||r.mz)).then((e=>{const t={...e,...i};return o.set(r.LA,t),{data:t}})):n.A.patch("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/dashboards/").concat(a),i),s=(e,t,a)=>n.A.post("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/dashboards"),a),c=(e,t,a)=>n.A.delete("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/dashboards?dashboard_ids=").concat(a)),l=(e,t,a)=>(0,r.ES)(e)&&(0,r.tB)(t)&&a===r.LA?o.get(r.LA).then((e=>({data:e||r.mz}))):n.A.get("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/dashboards/").concat(a))},30673:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>s,Pk:()=>r,cY:()=>o,kG:()=>i});var n=a(47444);const r={pristine:{},id:null,type:"chart"},o={pristine:{},id:null,text:"",editing:!1,type:"text",textType:"text"},i={id:null,type:""},s=(0,n.Iz)({key:"dashboardCards",default:{}})},58388:(e,t,a)=>{"use strict";a.d(t,{T6:()=>c,bE:()=>s,nG:()=>o,r:()=>d,v_:()=>l});var n=a(47444),r=a(30673);const o=(0,n.K0)({key:"dashboardCardsState",get:e=>{let{id:t,resourceId:a}=e;return e=>{let{get:n}=e;const o=n((0,r.Ay)(t));return a?o[a]||r.kG:o}},set:e=>{let{id:t,resourceId:a}=e;return(e,n)=>{let{set:o}=e;return a?"function"===typeof n?o((0,r.Ay)(t),(e=>({...e,[a]:n(e[a])}))):void o((0,r.Ay)(t),(e=>({...e,[a]:{...e[a],...n}}))):o((0,r.Ay)(t),n)}}}),i=(0,n.K0)({key:"dashboardCardState",get:e=>{let{id:t,resourceId:a,key:n}=e;return e=>{let{get:r}=e;const i=r(o({id:t,resourceId:a}));return n?i[n]:i}},set:e=>{let{id:t,resourceId:a,key:n}=e;return(e,r)=>{let{set:i}=e;return i(o({id:t,resourceId:a}),n?{[n]:r}:r)}}}),s=(e,t,a)=>(0,n.vc)(i({id:e,resourceId:t,key:a})),c=e=>{const t=(0,n.vc)(i({id:e}));return e=>t[e]||r.kG},l=(e,t,a)=>(0,n.lZ)(i({id:e,resourceId:t,key:a})),d=(e,t,a)=>(0,n.L4)(i({id:e,resourceId:t,key:a}))},8018:(e,t,a)=>{"use strict";a.d(t,{A:()=>u});var n=a(58168),r=(a(62953),a(96540)),o=a(83199),i=a(80542),s=a(27229),c=a(49667);const l="Cannot exceed ".concat(c.q," characters"),d=e=>{const t=e.length<=c.q;return(0,i.H)(t,l)},u=e=>{let{value:t,isValid:a,setIsValid:c,onChange:l,label:u,validators:m=[],hint:g,placeholder:p="Enter dashboard name",...h}=e;const v=(0,i.k)([d,...m]),[f,A]=(0,r.useState)("");return(0,r.useEffect)((()=>{const e=v(t),n=e.isValid,r=(0,s.W)(e);!a&&n?c(!0):a&&!n&&c(!1),A(r||"")}),[a,c,v,t]),r.createElement(o.TextInput,(0,n.A)({label:u||" ",name:"name",placeholder:p,value:t,onChange:l,hint:g,error:!a&&f},h))}},49667:(e,t,a)=>{"use strict";a.d(t,{$:()=>o,q:()=>r});var n=a(68831);const r=50,o="".concat(n.A.assetsBaseURL,"/img/new-dashboard.svg")},8196:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>s,BC:()=>r,u6:()=>o,ue:()=>i});var n=a(47444);const r={id:null,left:0,top:0,width:12,height:2,minWidth:1,minHeight:.5},o={id:null,left:0,top:0,width:10,height:9,minWidth:1,minHeight:3},i={layout:{},containerIds:[],containers:{},pristine:{}},s=(0,n.Iz)({key:"dashboardLayout",default:i})},86652:(e,t,a)=>{"use strict";a.d(t,{kY:()=>s,Ie:()=>d,MX:()=>m,xB:()=>l,Ix:()=>g,QZ:()=>p,B1:()=>u,Xc:()=>c});var n=a(47444),r=a(65570);var o=a(8196);const{updatePristine:i}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"pristine";return{updatePristine:(t,a,n)=>{if(!(a in(t[e]||{}))&&!(0,r.Ay)(t[a],n))return{...t,[e]:{...t[e],[a]:t[a]}};if((0,r.Ay)(t[e][a],n)){const n={...t[e]};return delete n[a],{...t,[e]:n}}return t},resetPristine:t=>({...t,...t[e],[e]:{}})}}(),s=(0,n.K0)({key:"dashboardLayoutState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n((0,o.Ay)(t));return a?r[a]:r}},set:e=>(t,a)=>{let{set:n}=t;n((0,o.Ay)(e),{...o.ue,...a})}}),c=(e,t)=>(0,n.vc)(s({id:e,key:t})),l=(0,n.K0)({key:"updateDashboardLayoutState",get:e=>t=>{let{get:a}=t;return a(s({id:e,key:"layout"}))},set:e=>(t,a)=>{let{set:n}=t;n((0,o.Ay)(e),(e=>({...e,...i(e,"layout",a),layout:a})))}}),d=(0,n.K0)({key:"removePristineDashboardLayoutState",set:e=>t=>{let{set:a}=t;a((0,o.Ay)(e),(e=>({...e,pristine:{}})))}}),u=e=>{const t=c(e,"layout"),a=(e=>(0,n.lZ)(l(e)))(e);return[t,a]},m=(0,n.K0)({key:"updateDashboardContainerIdsState",get:e=>t=>{let{get:a}=t;return a(s({id:e,key:"containerIds"}))},set:e=>(t,a)=>{let{set:n}=t;n((0,o.Ay)(e),(e=>({...e,...i(e,"containerIds",a),containerIds:a})))}}),g=e=>{const t=c(e,"containerIds"),a=(e=>(0,n.lZ)(m(e)))(e);return[t,a]},p=((0,n.K0)({key:"updateDashboardContainersState",get:e=>t=>{let{get:a}=t;return a(s({id:e,key:"containers"}))},set:e=>(t,a)=>{let{set:n}=t;n((0,o.Ay)(e),(e=>({...e,...i(e,"containers",a),containers:a})))}}),(e,t)=>{var a;return null===(a=c(e,"containers"))||void 0===a?void 0:a[t]})},68980:(e,t,a)=>{"use strict";a.d(t,{_u:()=>S,_d:()=>b,yl:()=>I,kg:()=>k,Qx:()=>h,dE:()=>A,zi:()=>T,oj:()=>N,zN:()=>C,TN:()=>v,fz:()=>f,Sf:()=>y});a(41393),a(8159),a(98992),a(81454),a(37550),a(62953);var n=a(96540),r=a(47444),o=a(3914),i=a(69765),s=a(80925),c=a(86652),l=a(58388),d=a(43124),u=a(37618);const m={id:null,loaded:!1,fullyLoaded:!1,loading:!1,processing:!1,isOwner:!1,spaceSlug:"",roomSlug:"",spaceId:"",roomId:"",name:"",slug:"",version:0,createdAt:"",updatedAt:"",cardIds:[]},g=(0,r.Iz)({key:"dashboard",default:m,effects:e=>u.LA===e?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(u.mz)}]:[]});var p=a(27078);const h=(0,r.K0)({key:"dashboardState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n(g(t));return a?r[a]:r}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;return a?"function"===typeof n?r(g(t),(e=>({...e,[a]:n(e[a])}))):void r(g(t),(e=>({...e,[a]:n}))):r(g(t),{...m,...n})}}}),v=e=>{let{id:t,key:a}=e;return(0,r.L4)(h({id:t,key:a}))},f=(e,t)=>(0,r.vc)(h({id:e,key:t})),A=(0,r.K0)({key:"dashboardsState",get:e=>t=>{let{get:a}=t;return e.map((e=>a(h({id:e}))))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),y=e=>(0,r.vc)(A(e)),b=(0,r.K0)({key:"dashboardInitializeState",get:e=>t=>{let{get:a}=t;return a(g(e))},set:e=>(t,a)=>{let{set:n}=t;n(h({id:e}),{...a,loaded:!0});const{spaceId:r,roomId:o,slug:i}=a;n((0,d.yC)([r,o,i]),e)}}),S=(0,r.K0)({key:"dashboardFullyInitializeState",set:e=>(t,a)=>{let{set:n}=t,{layout:r={},containerIds:o=[],containers:i={},dashboard:s={},cards:u={}}=a;n(h({id:e}),{...s,loaded:!0,fullyLoaded:!0,loading:!1}),n((0,c.kY)(e),{layout:r,containerIds:o,containers:i}),n((0,l.nG)({id:e}),u);const{spaceId:m,roomId:g,slug:p}=s;n((0,d.yC)([m,g,p]),e)}}),k=(0,r.K0)({key:"dashboardReset",set:e=>t=>{let{get:a,set:n,reset:r}=t;const{spaceId:o,roomId:i,slug:s}=a(g(e));r(g(e)),n(d.H9,null),r((0,d.yC)([o,i,s]))}}),I=(0,r.K0)({key:"dashboardLoadingState",set:e=>(t,a)=>{let{set:n}=t;n(h({id:e,key:"loading"}),a)}}),w=e=>{let{pristine:t={}}=e;return 0===Object.keys(t).length},E=(0,r.K0)({key:"dashboardIsPristineState",get:e=>t=>{let{get:a}=t;const n=a((0,l.nG)({id:e}));return!Object.keys(n).length||Object.keys(n).some((e=>w(n[e])))}}),x=(0,r.K0)({key:"dashboardLayoutIsPristineState",get:e=>t=>{let{get:a}=t;return w(a((0,c.kY)({id:e})))}}),C=e=>{const t=(0,s.e)(),a=()=>{const a=(0,p.My)(t,e);return!a||!a.getChildren().some((e=>{return t=e.getAttribute("pristine"),!(0===Object.keys(t).length);var t}))},[o,i]=(0,n.useState)(a);(0,n.useEffect)((()=>null===t||void 0===t?void 0:t.on("pristineChanged",(()=>i(a)))),[t]);const c=(0,r.vc)(E(e)),l=(0,r.vc)(x(e));return o&&c&&l},T=e=>{const t=(0,o.vt)(),a=(0,i.ID)(),n=(0,d.Tf)();return(0,d.mS)(t,a,e||n)},N=e=>{const t=T();return f(t,e)}},43124:(e,t,a)=>{"use strict";a.d(t,{H9:()=>o,Tf:()=>s,Xv:()=>c,mS:()=>l,yC:()=>i});a(62953);var n=a(47444),r=a(37618);const o=(0,n.eU)({key:"currentDashboardSlug",default:null}),i=(0,n.Iz)({key:"dashboardIdBySlug",default:"",effects:e=>{let[t,a,n]=e;return(0,r.ES)(t)&&(0,r.tB)(a)&&n===r.LA?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(r.LA)}]:[]}}),s=()=>(0,n.vc)(o),c=e=>(0,n.lZ)(o,e),l=(e,t,a)=>(0,n.vc)(i([e,t,a]))},27078:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>F,My:()=>B,qh:()=>z});a(3064),a(9920),a(98992),a(72577),a(3949);var n=a(96540),r=a(17323),o=a(3914),i=a(80925),s=a(11128),c=a(45467),l=a(68980),d=(a(62953),a(47767)),u=a(22332),m=a(58388);a(25440);var g=a(58384),p=a(58168),h=a(46741);const v=e=>{let{category:t,closeParent:a,context:r,openDialog:o,...i}=e;const s=(0,h.JT)("dashboard:Update");return n.createElement(g.t,(0,p.A)({icon:"trashcan",onClick:()=>{o(),a()},"data-ga":"".concat(t,"::click-remove::").concat(r),"data-testid":"removeChart-option",disabled:!s},i),"Remove")},f=e=>{let{category:t,closeParent:a,context:r,openModal:o}=e;const i=(0,h.JT)("dashboard:Update");return n.createElement(g.t,{icon:"pencilOutline",onClick:()=>{a(),o()},"data-testid":"renameChart-option","data-ga":"".concat(t,"::click-rename-chart::").concat(r),disabled:!i},"Rename chart")};var A=a(83199),y=a(67544),b=a(47762);const S=e=>{let{cardId:t,close:a,id:r}=e;const{nodeId:o,chartId:i}=(0,m.bE)(r,t),s=(0,b.xY)(o,"name"),c=(0,y.c6)(r,t);return n.createElement(A.ConfirmationDialog,{"data-ga":"remove-chart-dialog","data-testid":"removeChartDialog",handleConfirm:c,handleDecline:a,message:n.createElement(n.Fragment,null,"You are about to remove ",n.createElement("strong",null,i),s&&n.createElement(n.Fragment,null," ","of node ",n.createElement("strong",null,s)),".",n.createElement("br",null),"Are you sure you want to continue?"),title:"Remove chart"})};var k=a(15327),I=a(74618),w=a(45765),E=a(78969),x=a(8018),C=a(2025);const T=e=>{let{id:t,cardId:a,close:r}=e;const[o,i]=(0,n.useState)(!0),[s,c]=(0,m.r)(t,a,"title"),[l,d]=(0,n.useState)(s||""),u=l!==s,g=o&&u,p=(0,C.DH)(t),h=(0,n.useCallback)((()=>{c(l),p().then((()=>r()))}),[r,l]);return n.createElement(k.GO,{onClose:r,"data-testid":"renameChart-modal"},n.createElement(I.z,{onClose:r,title:"Rename Chart"},n.createElement(A.Button,{label:"Save Changes",onClick:h,disabled:!g})),n.createElement(w.U,{"data-testid":"renameChart-title"},"Rename chart ",s),n.createElement(k.Yv,null,n.createElement(x.A,{value:l,label:"Name",onChange:e=>{d(e.target.value)},isValid:o,setIsValid:i,isDirty:u,instantFeedback:"all",onKeyDown:e=>e.keyCode===E.I7&&g&&h(),"data-testid":"renameChart-input",placeholder:"Chart name"})))};var N=a(87659);const R="chart-options",M="custom-dashboard",D=e=>{let{id:t,cardId:a,onClick:r}=e;const o=(0,d.Zp)(),i=(0,m.bE)(t,a,"chartId"),{spaceSlug:s,roomSlug:c}=(0,l.fz)(t);return n.createElement(g.t,{icon:"line_chart",onClick:()=>{r();const e=(e=>{return"".concat("chart_").concat("string"===typeof(t=e)?t.replace(/ /g,"_").replace(/:/g,"_").replace(/\(/g,"_").replace(/\)/g,"_").replace(/\./g,"_").replace(/\//g,"_"):"");var t})(i);o("/spaces/".concat(s,"/rooms/").concat(c,"/overview#chartName=").concat(e))},"data-ga":"".concat(R,"::click-go-to-chart::").concat(M),"data-testid":"chart-goToChart"},"Go to Chart")},_=()=>{const[e,,t,a]=(0,N.A)(),[r,,o,i]=(0,N.A)(),s=(0,u.useAttributeValue)("cardId"),c=(0,u.useAttributeValue)("dashboardId");return n.createElement(n.Fragment,null,n.createElement(g.A,{category:R,context:M,testId:"chartDropdown"},(e=>{let{close:a}=e;return n.createElement(n.Fragment,null,n.createElement(D,{id:c,cardId:s,onClick:a}),n.createElement(f,{id:c,cardId:s,closeParent:a,openModal:o,category:R,context:M}),n.createElement(v,{cardId:s,category:R,closeParent:a,context:M,id:c,openDialog:t}))})),e&&n.createElement(S,{cardId:s,close:a,id:c}),r&&n.createElement(T,{cardId:s,close:i,id:c}))};var U=a(60247),P=a(13752),L=a(92815),K=a(72582);const B=(e,t)=>e&&e.getRoot().getChildren().find((e=>e.match({id:t}))),z=e=>t=>"dashboard-page::".concat(e.getAttribute("id"),"::").concat(t),F=e=>{const{spaceId:t,roomId:a}=(0,l.fz)(e),d=(0,i.e)(),u=(0,s.w7)({extraKey:"dashboard-".concat(e),merge:!1,scoped:!0}),m=(0,o.dg)();(0,n.useMemo)((()=>{if(!d)return;let n=B(d,e);n||(n=d.makeContainer({attributes:{...d.getRoot().getAttributes(),id:e,navigation:"pan",nodesScope:u,overlays:{proceeded:{type:"proceeded"}},host:m?"".concat(window.envSettings.agentApiUrl,"/api/v2"):"".concat(window.envSettings.apiUrl,"/api/v3/spaces/").concat(t,"/rooms/").concat(a),leftHeaderElements:[_,r.default],toolboxElements:[K.default,P.default,L.default,U.A]}}),d.appendChild(n))}),[d,e]),(0,c.A)((()=>{if(!d)return;const t=B(d,e);t&&t.getNodes().forEach((e=>e.updateAttribute("nodesScope",u)))}),[d,a,u]),(0,n.useEffect)((()=>()=>{const t=B(d,e);t&&t.destroy()}),[d,a])}},91517:(e,t,a)=>{"use strict";a.d(t,{A:()=>f,S:()=>v});a(41393),a(14905),a(98992),a(81454),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(96540),r=a(47444),o=a(44554),i=a(8196),s=a(30673),c=a(72802),l=a(68980);const d={TextCard:"text",ChartCard:"chart",compositeChart:"chart",chart:"chart",text:"text"},u=new Set(["text","chart"]),m=(e,t)=>{var a,n;return{...null!==(a=e[(t=(e=>{let{i:t,id:a=t,x:n,left:r=n,y:o,top:i=o,w:s,width:c=s,h:l,height:d=l}=e;return{id:a,width:c,height:d,left:r,top:i}})(t)).id])&&void 0!==a&&a.type&&"text"!==(null===(n=e[t.id])||void 0===n?void 0:n.type)?i.u6:i.BC,...t}},g=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.trim().startsWith("

    ")?e:"

    ".concat(e,"

    ")},p="A",h=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const a=Array.isArray(e),n=[],r=t.reduce(((e,t)=>{let{type:a,cardID:r,id:o=r,chartID:i,chartId:c=i,nodeID:l,nodeId:m=l,chartMetadata:p,context:h,attributes:v,cardAttributes:f=v,contextScope:A,text:y,...b}=t;if(A=A||[h||(null===p||void 0===p?void 0:p.context)||c],a=d[a]||a,e[o]={id:o,type:a,nodeId:m,contextScope:A},u.has(a)){if(n.push(o),"text"===a)return e[o]={...s.cY,...f,text:g(y||f.text),...e[o]},e;e[o]=(e=>{let{aggregationMethod:t,chartType:a,dimensions:n=[],selectedDimensions:r=n||[],filteredLabels:o=[],selectedLabels:i=o||[],selectedNodeIds:c=[],selectedNodes:l=c||[],selectedInstances:d=[],chartId:u,groupBy:m,groupingMethod:g,id:p,host:h,...v}=e;return{...s.Pk,aggregationMethod:t||"avg",chartType:a||"line",selectedDimensions:Array.isArray(r)?r:[],selectedLabels:Array.isArray(i)?i:i&&"object"===typeof i?Object.keys(i):[],selectedNodes:Array.isArray(l)?l:[],selectedInstances:Array.isArray(d)?d:u?[u]:[],groupBy:Array.isArray(m)?m:m?[m]:["dimension"],groupingMethod:g||"average",id:p,...v}})({...b,...f,chartId:c,...e[o]})}return e}),{});return{layout:a?e?{[p]:e.map((e=>m(r,e)))}:{[p]:t.map((e=>{let{layout:t}=e;return m(r,t)}))}:e||{[p]:[]},containerIds:[p],containers:{[p]:{name:p}},cards:r}},v=e=>{var t;let{id:a,name:n,slug:r,version:i,createdAt:s,updatedAt:c,snapshot:l}=e;const d=Array.isArray(l.uiState)||!(null!==(t=l.uiState)&&void 0!==t&&t.layout),{layout:u,containerIds:g,containers:p,cards:v}=d?h(l.uiState,l.items||[]):l.uiState,f={id:a,name:n,slug:r,version:i,createdAt:s,updatedAt:c,cardIds:Object.keys(v)};return{layout:Object.keys(u).reduce(((e,t)=>({...e,[t]:(0,o.bj)(u[t].map((e=>m(v,e))),"vertical")})),{}),containerIds:g,containers:p,dashboard:f,cards:v}},f=(e,t)=>{let{spaceId:a,spaceSlug:o,roomId:i,roomSlug:s}=t;const[d,u]=(0,n.useState)(!0),m=(0,r.Zs)((t=>{let{set:n}=t;return async()=>{u(!0),n((0,l.yl)(e),!0);const{data:t}=await(0,c.f7)(a,i,e),{layout:r,containerIds:d,containers:m,dashboard:g,cards:p}=v(t);n((0,l._u)(e),{layout:r,containerIds:d,containers:m,dashboard:{...g,spaceSlug:o,roomSlug:s,spaceId:a,roomId:i},cards:p}),u(!1),n((0,l.yl)(e),!1)}}));return(0,n.useEffect)((()=>{e&&m(e)}),[e]),d}},54702:(e,t,a)=>{"use strict";a.d(t,{D4:()=>i,XY:()=>c,kE:()=>o,w5:()=>l});a(41393),a(81454);var n=a(26655);const r=e=>e.map((e=>{let{accountID:t,...a}=e;return{id:t,...a}})),o=e=>n.A.get("/api/v2/spaces/".concat(e,"/members"),{allow401:!0,transform:r}),i=(e,t)=>n.A.get("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/members"),{allow401:!0,transform:r}),s=e=>{let{account_ids:t}=e;return"account_ids=".concat(t.join(","))},c=(e,t)=>n.A.delete("/api/v1/spaces/".concat(e,"/members"),{paramsSerializer:s,params:{account_ids:t}}),l=(e,t,a)=>n.A.patch("/api/v1/spaces/".concat(e,"/members/").concat(t),a)},35273:(e,t,a)=>{"use strict";a.d(t,{A:()=>o,u:()=>r});var n=a(47444);const r={id:null,avatarURL:null,deactivated:!1,email:"",joinedAt:null,name:"",role:""},o=(0,n.eU)({key:"member",default:{}})},70716:(e,t,a)=>{"use strict";a.d(t,{Uv:()=>l,WJ:()=>d,Z6:()=>c,m:()=>s});a(9920),a(41393),a(98992),a(3949),a(81454),a(62953);var n=a(47444),r=a(64454),o=a(65570),i=a(35273);const s=(0,n.K0)({key:"memberState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n(i.A)[t]||i.u;return a?r[a]:r}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r(i.A,a?"function"!==typeof n?e=>({...e,[t]:{...e[t],[a]:n}}):e=>({...e,[t]:{...e[t],[a]:n(e[t][a])}}):e=>({...e,[t]:{...i.u,...e[t],...n}}))}}}),c=(0,n.K0)({key:"membersState",get:e=>t=>{let{get:a}=t;return e.map((e=>a(s({id:e}))))},set:()=>(e,t)=>{let{set:a,get:n}=e;const r=n(i.A);t.forEach((e=>{r[e.id]=e})),a(i.A,r)},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),l=e=>(0,n.vc)(c(e)),d=(0,n.gD)({key:"membersInitialize",get:e=>{let{get:t}=e;return t(i.A)},set:(e,t)=>{let{set:a}=e,{values:n,merge:s}=t;return a(i.A,(e=>{const t=s?(0,r.A)(e,n):n;return(0,o.Ay)(t,e)?e:t}))}})},54621:(e,t,a)=>{"use strict";a.d(t,{DF:()=>S,_F:()=>h,ZB:()=>v,xK:()=>A,nT:()=>y,NU:()=>b,tV:()=>f});a(17333),a(3064),a(41393),a(98992),a(54520),a(72577),a(81454),a(62953);var n=a(96540),r=a(47444),o=a(3914),i=a(69765);const s=e=>{let{spaceSlug:t,roomSlug:a}=e;return"".concat(t,"-").concat(a,"-tabs")},c=(e,t)=>{let{spaceSlug:a,roomSlug:n}=e;const r=s({spaceSlug:a,roomSlug:n});Promise.resolve().then((()=>{try{localStorage.setItem(r,JSON.stringify(t))}catch(e){}}))},l=(0,r.Iz)({key:"navigation",default:function(e){let{spaceSlug:t,roomSlug:a}=e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{const e=s({spaceSlug:t,roomSlug:a}),r=localStorage.getItem(e);return r?JSON.parse(r):n}catch(r){return n}}}),d=(0,r.K0)({key:"navigationTabsState",get:e=>{let{spaceSlug:t,roomSlug:a}=e;return e=>{let{get:n}=e;return n(l({spaceSlug:t,roomSlug:a}))}},set:e=>{let{spaceSlug:t,roomSlug:a}=e;return(e,n)=>{let{set:r}=e;n&&t&&a&&r(l({spaceSlug:t,roomSlug:a}),(e=>{if(e.find((e=>{let{id:t}=e;return n.id===t})))return e;const r=[...e,n];return c({spaceSlug:t,roomSlug:a},r),r}))}}}),u=(0,r.K0)({key:"navigationTabsState/remove",get:()=>()=>null,set:e=>{let{spaceSlug:t,roomSlug:a}=e;return(e,n)=>{let{set:r}=e;r(l({spaceSlug:t,roomSlug:a}),(e=>{const r=e.filter(((e,t)=>t!==n));return c({spaceSlug:t,roomSlug:a},r),r}))}}}),m=(0,r.K0)({key:"navigationTabsState/removeById",get:()=>()=>null,set:e=>{let{spaceSlug:t,roomSlug:a}=e;return(e,n)=>{let{set:r}=e;r(l({spaceSlug:t,roomSlug:a}),(e=>{const r=e.filter((e=>e.id!==n));return c({spaceSlug:t,roomSlug:a},r),r}))}}}),g=(0,r.K0)({key:"navigationTabsState/reorder",get:()=>()=>null,set:e=>{let{spaceSlug:t,roomSlug:a}=e;return(e,n)=>{let{set:r}=e,{sourceIndex:o,destinationIndex:i}=n;r(l({spaceSlug:t,roomSlug:a}),(e=>{const n=[...e],[r]=n.splice(o,1);return n.splice(i,0,r),c({spaceSlug:t,roomSlug:a},n),n}))}}}),p=(0,r.K0)({key:"navigationTabsState/removeById",get:()=>()=>null,set:e=>{let{spaceSlug:t,roomSlug:a}=e;return(e,n)=>{let{set:r}=e,{id:o,slug:i,path:s}=n;r(l({spaceSlug:t,roomSlug:a}),(e=>{const n=e.map((e=>e.id!==o?e:{...e,title:i,path:s}));return c({spaceSlug:t,roomSlug:a},n),n}))}}}),h=()=>{const e=(0,o.bq)(),t=(0,i.QW)();return(0,r.vc)(d({spaceSlug:e,roomSlug:t}))},v=e=>{let{title:t,path:a,id:s,destination:c,type:l="nodes",params:u,isReady:m=!0,...g}=e;const p=(0,i.r9)(),h=(0,o.bq)(),v=(0,i.QW)(),f=(0,r.lZ)(d({spaceSlug:h,roomSlug:v}));(0,n.useEffect)((()=>{if(!m)return;if(!s||!t)return;f({id:s,title:t,type:l,icon:"alerts"===l?"alarm":"node_hollow",params:u,path:"".concat(a||p,"/").concat(l,"/").concat(c),...g})}),[p,t,a,s,c,l,f,m])},f=()=>{const e=(0,i.r9)(),t=(0,o.bq)(),a=(0,i.QW)(),s=(0,r.lZ)(d({spaceSlug:t,roomSlug:a}));return(0,n.useCallback)((t=>{let{title:a,path:n,id:r,destination:o,type:i="nodes",params:c,...l}=t;if(!r||!a)return;s({id:r,title:a,type:i,icon:"alerts"===i?"alarm":"node_hollow",params:c,path:"".concat(n||e,"/").concat(i,"/").concat(o),...l})}),[e,s])},A=()=>{const e=(0,o.bq)(),t=(0,i.QW)();return(0,r.lZ)(u({spaceSlug:e,roomSlug:t}))},y=()=>{const e=(0,o.bq)(),t=(0,i.QW)();return(0,r.lZ)(m({spaceSlug:e,roomSlug:t}))},b=()=>{const e=(0,o.bq)(),t=(0,i.QW)();return(0,r.lZ)(g({spaceSlug:e,roomSlug:t}))},S=()=>{const e=(0,o.bq)(),t=(0,i.QW)();return(0,r.lZ)(p({spaceSlug:e,roomSlug:t}))}},9224:(e,t,a)=>{"use strict";a.d(t,{Bz:()=>h,F:()=>y,UL:()=>l,VP:()=>u,az:()=>i,e0:()=>A,iY:()=>m,ih:()=>b,q5:()=>s,sm:()=>p,tz:()=>d,uQ:()=>c,ys:()=>g});var n=a(26655),r=a(37618),o=a(49286);const i=e=>n.A.get("/api/v1/agents/".concat(e,"/user_agent_node_access"),{transform:o.bn}),s=(e,t,a)=>n.A.get("/api/v2/bearer_get_token?node_id=".concat(e,"&claim_id=").concat(a,"&machine_guid=").concat(t),{transform:function(){let{token:e,expiration:t,bearer_protection:a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{token:e,expiration:t,bearerProtection:a}}}),c=e=>n.A.get("/api/v1/accounts/".concat(e,"/nodes")),l=(e,t)=>n.A.post("/api/v1/accounts/".concat(e,"/nodes/").concat(t,"/touch")),d=(e,t)=>n.A.get("/api/v1/accounts/".concat(e,"/nodes/").concat(encodeURIComponent(t))),u=(e,t)=>{const a=(0,r.ES)(t);return n.A.get(a?"/api/v1/info":"/api/v1/nodes/".concat(e,"/info"),{transform:t=>({...t,nodeId:e}),baseURL:a?window.envSettings.agentApiUrl:""})},m=e=>n.A.get("/api/v1/agents/".concat(e,"/info")),g=e=>n.A.get("/api/v1/agents/".concat(e,"/user_access"),{transform:e=>e.authorizedNodeIDs}).catch((()=>({data:[]}))),p=(e,t)=>n.A.delete("/api/v1/accounts/".concat(e,"/nodes"),{params:{node_ids:t.join(",")}}),h=(e,t,a,r)=>n.A.put("/api/v1/accounts/".concat(e,"/nodes/").concat(t),{name:a,urls:r}),v="*",f=[v],A=(e,t,a)=>{let{baselineAfter:o,baselineBefore:i,highlightAfter:s,highlightBefore:c,method:l,options:d,group:u,nodeIds:m,points:g,context:p,aggregation:h="avg",groupBy:A=[]}=a;return(0,r.ES)(e)?n.A.get("".concat(window.envSettings.agentApiUrl,"/api/v2/weights"),{params:{format:"json",options:"".concat(Array.isArray(d)?d.join("|"):d,"|minify|nonzero|unaligned"),contexts:v,scope_contexts:p||v,scope_nodes:m.join("|")||v,nodes:v,instances:v,dimensions:v,labels:v,group_by:A.join("|"),aggregation:h,method:l||"ks2",time_group:u||"average",time_group_options:"",time_resampling:0,after:Math.floor(s/1e3),before:Math.floor(c/1e3),points:g,baseline_after:Math.floor(o/1e3),baseline_before:Math.floor(i/1e3),timeout:18e4}}):n.A.post("/api/v3/spaces/".concat(e,"/rooms/").concat(t,"/weights"),{selectors:{nodes:f,contexts:f,dimensions:f,labels:f,alerts:f},aggregations:{time:{time_group:u||"average",time_group_options:"",time_resampling:0},metrics:[{group_by:A,aggregation:h}]},window:{after:Math.floor(s/1e3),before:Math.floor(c/1e3),points:g,baseline:{after:Math.floor(o/1e3),before:Math.floor(i/1e3)}},scope:{nodes:m,contexts:p?[p]:f},method:l||"ks2",options:d?Array.isArray(d)?d:[d]:[],timeout:18e4})},y=e=>n.A.get("/api/v3/spaces/".concat(e,"/settings/preferred_nodes")),b=(e,t)=>n.A.post("/api/v3/spaces/".concat(e,"/settings/preferred_nodes"),{preferred_node_ids:t})},41739:(e,t,a)=>{"use strict";a.d(t,{A:()=>o,q:()=>r});var n=a(47444);const r=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{fullyLoaded:!1,loaded:!1,id:(null===e||void 0===e?void 0:e.nd)||(null===e||void 0===e?void 0:e.mg)||null,mg:null,nd:null,isDeleted:!1,name:"",version:"",ni:null,labels:{},labelKeys:[],hw:{architecture:"",cpuFrequency:"",cpus:"",memory:"",diskSpace:"",virtualization:"",container:""},os:{id:"",nm:"",v:"",kernel:{nm:"",v:""}},capabilities:{},state:"",isProtobufCapable:!0,urls:[],accessCount:0,lastAccessTime:"",updateSeverity:"",hasAccessibleData:!1,isLive:!1,nodeStatus:null,isPreferred:!0}},o=(0,n.eU)({key:"nodes",default:{}})},11128:(e,t,a)=>{"use strict";a.d(t,{Oj:()=>k,PF:()=>I,QY:()=>p,_e:()=>w,a7:()=>b,eO:()=>A,qr:()=>f,u7:()=>S,w7:()=>y});a(17333),a(9920),a(41393),a(14905),a(8159),a(98992),a(54520),a(3949),a(81454),a(8872),a(37550),a(62953);var n=a(47444),r=a(27467),o=a(67990),i=a(69765),s=a(47762);const c=e=>(t,a)=>!Array.isArray(a)||!a.length||"".concat(a).includes(t[e]),l={nodeStatuses:c("nodeStatus"),nodeLabels:(e,t)=>!((!Array.isArray(t)||t.length)&&t)||Object.keys(e.labels).some((a=>!Array.isArray(t)||!t.length||t.includes("".concat(a,"|").concat(e.labels[a])))),nodeCapabilities:c("capabilityKeys"),nodeVersions:c("version")},d={excludedNodeIds:c("id")},u=[],m=(0,n.K0)({key:"nodesFilters",get:e=>{let{extraKey:t,key:a,omit:n,merge:o}=e;return e=>{let{get:i}=e;const s=n&&n.split(":::"),c=t?i(p({key:a,merge:!1})):[],u=!t&&!!s&&!s.includes("selectedNodeIds"),m=s&&s.includes("selectedNodeIds")||t&&o?c:i((0,r.GA)({key:a,extraKey:t,flavour:"arr",param:"selectedNodeIds"}))||[];let g=[];const h=i((0,r.GA)({key:a,extraKey:t,flavour:"arr",merge:o}));return Object.keys(h).forEach((e=>{var n;const c=!!s&&s.includes(e);(l[e]||d[e])&&null!==(n=h[e])&&void 0!==n&&n.length&&(c||g.push([e,c?[]:h[e]]),o&&t&&g.push([e,i((0,r.GA)({key:a,flavour:"arr",param:e}))||[]]))})),[g,m,c,u]}},set:e=>{let{extraKey:t,key:a}=e;return(e,n)=>{let{get:o,set:i}=e,{param:s,removedValue:c}=n;const l=o((0,r.GA)({key:a,extraKey:t,param:s,flavour:"arr"}));i((0,r.GA)({key:a,extraKey:t,param:s,flavour:"arr"}),Array.isArray(c)?c:l.filter((e=>e!==c)))}}}),g=(0,n.K0)({key:"nodesFiltered",get:e=>{let{key:t,extraKey:a,omit:n,keepAll:o=!1,merge:i}=e;return e=>{let{get:c}=e;const[u,g,p,h]=c(m({key:t,extraKey:a,omit:n,merge:i})),v=c((0,s.kr)(t));if(!u.length&&(null===g||void 0===g||!g.length))return v;const f=((e,t)=>{let{selectedNodeIds:a,excludedNodeIds:n,globalNodeIds:r,omittedNonNodeFilter:o}=t;const i=a.reduce(((e,t)=>(e[t]=!n||n.includes(t),e)),{}),s=r.reduce(((e,t)=>(e[t]=!n||n.includes(t),e)),{});return t=>!(r.length&&!s[t.id])&&(!(!a.length||!i[t.id])||!(!o&&!e.length&&a&&a.length)&&!e.some((e=>{let[a,n]=e;return d[a]?d[a](t,n):!!l[a]&&!l[a](t,n)})))})(u,{selectedNodeIds:g,excludedNodeIds:c((0,r.GA)({key:t,extraKey:a,flavour:"arr",param:"excludedNodeIds"})),globalNodeIds:p,omittedNonNodeFilter:h});return o?v.map((e=>f(e)?e:{...e,hidden:!0})):v.filter(f)}}}),p=(0,n.K0)({key:"nodeIdsFiltered",get:e=>{let{key:t,extraKey:a,omit:n,keepAll:r,emptyIfAll:i=!0,merge:s,scoped:c}=e;return e=>{let{get:l}=e;const d=l(g({key:t,extraKey:a,omit:n,keepAll:r,merge:s}));return i&&l((0,o.dT)({id:t,key:"ids"})).length===d.length?c?l(p({key:t,extraKey:a,omit:n,keepAll:r,emptyIfAll:!1,merge:!0})):u:d.map((e=>{let{id:t,hidden:a}=e;return r?[t,!a]:t}))}}}),h={Live:0,Stale:1,Offline:2},v=["_aclk_available","_aclk_ng_new_cloud_protocol","_aclk_proxy"],f={nodeStatuses:(e,t)=>h[e.id]-h[t.id],selectedNodeIds:(e,t)=>h[e.id]-h[t.id],nodeLabels:(e,t)=>v.includes(e.id)?1:v.includes(t.id)?-1:f.default(e,t),nodeVersions:(e,t)=>t.id.localeCompare(e.id,void 0,{sensitivity:"accent",ignorePunctuation:!0}),default:(e,t)=>e.id.localeCompare(t.id,void 0,{sensitivity:"accent",ignorePunctuation:!0})},A=function(){let{key:e,extraKey:t,omit:a,keepAll:r=!1,merge:o=!0,roomSlug:s}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const c=(0,i.ID)(s);return(0,n.vc)(g({extraKey:t,key:e||c,omit:a,keepAll:r,merge:o}))},y=function(){let{key:e,extraKey:t,omit:a,keepAll:r=!1,emptyIfAll:o=!0,merge:s=!1,scoped:c=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const l=(0,i.ID)();return(0,n.vc)(p({extraKey:t,key:e||l,omit:a,keepAll:r,emptyIfAll:o,merge:s,scoped:c}))},b=function(){let{key:e,extraKey:t,merge:a=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=(0,i.ID)();return(0,r.rW)("selectedNodeIds",{key:e||n,extraKey:t,flavour:"arr",merge:a,defaultValue:u})},S=function(){let{key:e,extraKey:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,i.ID)();return(0,r.rI)("selectedNodeIds",{key:e||a,extraKey:t,flavour:"arr"})},k=function(){let{key:e,extraKey:t,merge:a=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return[b({key:e,extraKey:t,merge:a}),S({key:e,extraKey:t})]},I=function(){let{key:e,extraKey:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=function(){let{key:e,extraKey:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,i.ID)();return(0,r.rW)("excludedNodeIds",{key:e||a,extraKey:t,flavour:"arr",defaultValue:u})}({key:e,extraKey:t}),n=function(){let{key:e,extraKey:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,i.ID)();return(0,r.rI)("excludedNodeIds",{key:e||a,extraKey:t,flavour:"arr"})}({key:e,extraKey:t});return[a,n]},w=function(){let{key:e,extraKey:t,omit:a,merge:r=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const o=(0,i.ID)();return(0,n.L4)(m({key:e||o,extraKey:t,omit:a,merge:r}))}},47762:(e,t,a)=>{"use strict";a.d(t,{BQ:()=>y,BU:()=>M,Du:()=>f,GE:()=>P,GN:()=>b,Gn:()=>z,Gt:()=>E,Ig:()=>_,TG:()=>N,Ux:()=>Z,Y7:()=>k,Zl:()=>V,d3:()=>H,dN:()=>O,gl:()=>j,je:()=>A,kr:()=>w,nl:()=>q,no:()=>K,ss:()=>G,th:()=>I,xY:()=>S,yN:()=>C});a(17333),a(41393),a(14905),a(98992),a(54520),a(81454),a(8872),a(62953);var n=a(96540),r=a(47444),o=a(47767),i=a(64454),s=a(65570),c=a(3914),l=a(56639),d=a(54308),u=a(67990),m=a(69765),g=a(41739),p=a(9224);const h=(0,r.K0)({key:"nodeInfoState",get:e=>{let{nodeId:t,spaceId:a}=e;return async()=>{try{return(await(0,p.VP)(t,a)).data}catch(e){}}}}),v=(0,r.K0)({key:"preferredNodes",get:e=>()=>e?(0,p.F)(e):Promise.resolve()}),f=()=>{var e;const t=(0,c.vt)(),a=(0,r.xf)(v(t)),n=(0,r.RH)(v(t));return{loaded:"loading"!==a.state,nodes:(null===(e=a.contents)||void 0===e?void 0:e.data)||[],hasError:"hasError"===a.state,refresh:n}},A=()=>{const e=(0,c.vt)();return t=>(0,p.ih)(e,t)},y=(e,t)=>(0,r.xf)(h({nodeId:e,spaceId:t})),b=(0,r.K0)({key:"nodeState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n(g.A)[t]||(0,g.q)();return a?r[a]:r}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;return a?"function"===typeof n?r(g.A,(e=>{const r=e[t]||(0,g.q)();return{...e,[t]:{...r,[a]:n(r[a])}}})):void r(g.A,(e=>{const r=e[t]||(0,g.q)();return{...e,[t]:{...r,[a]:n}}})):r(g.A,(e=>({...e,[t]:{...(0,g.q)(),...n}})))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),S=(e,t)=>(0,r.vc)(b({id:e,key:t})),k=()=>(0,r.Zs)((e=>{let{snapshot:t}=e;return e=>t.getLoadable(b({id:e})).contents}),[]),I=(0,r.K0)({key:"nodesState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.map((e=>n[e]||(0,g.q)()))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),w=(0,r.K0)({key:"nodesState",get:e=>t=>{let{get:a}=t;if(!e){const t=a(l.Li),n=a((0,l.aR)(t)),r=a(d.yz);e=a((0,d.x4)([n,r]))}const n=a((0,u.dT)({id:e,key:"ids"}));return a(I(n))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),E=e=>{const t=(0,u.CK)();return(0,r.vc)(I(e||t))},x=(0,r.K0)({key:"cloudNodeIdsSelector",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.reduce(((e,t)=>{var a;return null!==(a=n[t])&&void 0!==a&&a.nd?[...e,n[t].nd]:e}),[])},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),C=e=>(0,r.vc)(x(e||[])),T=(0,r.K0)({key:"queryableNodeIdsState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.filter((e=>{var t,a;return(null===(t=n[e])||void 0===t?void 0:t.isLive)||"stale"===(null===(a=n[e])||void 0===a?void 0:a.state)}))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),N=e=>{const t=(0,u.CK)();return(0,r.vc)(T(e||t))},R=(0,r.K0)({key:"liveNodeIdsState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.filter((e=>{var t;return null===(t=n[e])||void 0===t?void 0:t.isLive}))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),M=e=>{const t=(0,u.CK)();return(0,r.vc)(R(e||t))},D=(0,r.K0)({key:"staleNodeIdsState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.filter((e=>{var t;return"stale"===(null===(t=n[e])||void 0===t?void 0:t.state)}))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),_=e=>{const t=(0,u.CK)();return(0,r.vc)(D(e||t))},U=(0,r.K0)({key:"offlineNodeIdsState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.filter((e=>{var t;return null===(t=n[e])||void 0===t?void 0:t.isOffline}))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),P=e=>{const t=(0,u.CK)();return(0,r.vc)(U(e||t))},L=(0,r.K0)({key:"unseenNodeIdsState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.filter((e=>{var t;return null===(t=n[e])||void 0===t?void 0:t.isUnseen}))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),K=e=>{const t=(0,u.CK)();return(0,r.vc)(L(e||t))},B=(0,r.K0)({key:"needUpdateNodeIdsState",get:e=>{let{ids:t,severities:a=["warning","critical"]}=e;return e=>{let{get:n}=e;const r=n(g.A);return t.filter((e=>{var t;return a.includes(null===(t=r[e])||void 0===t?void 0:t.updateSeverity)}))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),z=function(){let{ids:e,severity:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=M();return(0,r.vc)(B({ids:e||a,...t&&{severities:[t]}}))},F=(0,r.K0)({key:"fnNodeIdsState",get:e=>t=>{let{get:a}=t;const n=a(g.A);return e.filter((e=>{var t;return null===(t=n[e])||void 0===t||null===(t=t.capabilities.funcs)||void 0===t?void 0:t.enabled}))},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),O=e=>{const t=(0,u.CK)();return(0,r.vc)(F(e||t))},j=(0,r.gD)({key:"nodesState/initialize",get:e=>{let{get:t}=e;return t(g.A)},set:(e,t)=>{let{set:a}=e,{values:n,merge:r}=t;return a(g.A,(e=>{const t=r?(0,i.A)(e,n):n;return(0,s.Ay)(t,e)?e:t}))}}),G=()=>(0,r.vc)(j),W=()=>{const e=(0,m.r9)();return e&&"".concat(e,"/nodes")},V=e=>{const t=W();return"".concat(t,"/").concat(e)},Z=()=>{const e=W();return t=>"".concat(e,"/").concat(t)},H=function(e){let{alertId:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=(()=>{const e=(0,o.Zp)(),t=W();return(0,n.useCallback)(((a,n)=>{e("".concat(t,"/").concat(a),n?{state:n}:"")}),[t,e])})();return(0,n.useCallback)((()=>a(e,{alertId:t})),[a])},q=()=>{var e;return null===(e=(0,o.RQ)("/spaces/:spaceSlug/rooms/:roomSlug/nodes/:nodeId"))||void 0===e||null===(e=e.params)||void 0===e?void 0:e.nodeId}},49389:(e,t,a)=>{"use strict";a.d(t,{ID:()=>i,fe:()=>c,sH:()=>s,su:()=>r});a(25440),a(41393),a(81454),a(62953);var n=a(78969);const r=e=>1===e?"Node":"Nodes",o=[1,26],i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o;if(!e||"unknown"===e)return!1;const[a,n,r]=(e=>e.replace(/^v/,"").split("."))(e).map((e=>Number(e)));return!(a&&!isNaN(a)&&!isNaN(n))||(at[0])&&(nt[1])&&r{let{container:t,os:a,_install_type:r,version:o}=e;const c=i(o,n.x7);if(!t&&!a&&!r)return s.default;return s["docker"===t?"docker":"mac"===a?"mac":"binpkg"===r&&c?"binpkg":"default"]}},71856:(e,t,a)=>{"use strict";a.d(t,{C4:()=>m,D_:()=>h,HA:()=>s,N4:()=>c,Oh:()=>l,PT:()=>n,WB:()=>o,a$:()=>i,dZ:()=>g,fF:()=>u,r7:()=>r,rx:()=>p,w8:()=>d});const n={label:"All rooms",value:""},r={plan:"Your plan does not support this configuration.",role:"You do not have permission to change Global Notification configurations."},o="You do not have permission to add configurations. Contact a space administrator to add this configuration.",i={Discord:{name:"integrationDiscordColored"},Webhook:{name:"integrationWebhookColored"},Email:{name:"integrationEmailColored"},MobilePush:{color:"successLite",name:"mobilePushNotifications"},PagerDuty:{name:"integrationPagerdutyColored"},Slack:{name:"integrationSlackColored"},Splunk:{name:"integrationSplunk"},Opsgenie:{name:"integrationOpsgenieColored"},Mattermost:{name:"integrationMattermostColored"},RocketChat:{name:"integrationRocketChatColored"},MobileApp:{name:"integrationMobileAppColored"},AwsSns:{name:"integrationAWSSNSColored"},MicrosoftTeams:{name:"integrationTeamsColored"},Telegram:{name:"integrationTelegramColored"},VictorOps:{name:"integrationVictorOpsColored"}},s={PERSONAL:{icon:"userPress",tooltip:"Notification methods whose destination will be a user-specific attribute, e.g. user's e-mail."},SYSTEM:{icon:"systemOverviewPress",tooltip:"Notification methods that the destination will be a target that usually isn't specific to a single user, e.g. Slack channel."}},c={ALARMS_SETTING_ALL:{value:"ALARMS_SETTING_ALL",label:"All Alerts and unreachable"},ALARMS_SETTING_ALL_BUT_UNREACHABLE:{value:"ALARMS_SETTING_ALL_BUT_UNREACHABLE",label:"All Alerts"},ALARMS_SETTING_CRITICAL:{value:"ALARMS_SETTING_CRITICAL",label:"Critical only"},ALARMS_SETTING_UNREACHABLE:{value:"ALARMS_SETTING_UNREACHABLE",label:"Unreachable only"}},l={label:"User defined",value:"USER_DEFINED"},d={...c,USER_DEFINED:l},u={...c,ALARMS_SETTING_NONE:{value:"ALARMS_SETTING_NONE",label:"No notifications"}},m={"^.*$":"input"},g={string:"input"},p=/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)/g,h="607bfd3c-02c1-4da2-b67a-0d01b518ce5d"},88982:(e,t,a)=>{"use strict";a.d(t,{A:()=>i,n:()=>o});a(3064),a(41393),a(98992),a(72577),a(81454),a(62953);var n=a(71856),r=a(14994);const o=e=>{const t=(0,r.DL)().find((e=>{let{name:t}=e;return"All nodes"==t}));return t?e?t[e]:t:null},i=function(){let{all:e,internal:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,r.DL)().map((e=>{let{id:t,name:a}=e;return{label:a,value:t}})),o=[];return t&&o.push(n.Oh),e&&o.push(n.PT),o.push(...a),o}},27467:(e,t,a)=>{"use strict";a.d(t,{GA:()=>b,r$:()=>x,l6:()=>w,N9:()=>I,rW:()=>S,Fw:()=>E,rI:()=>k});var n={};a.r(n),a.d(n,{global:()=>d,specific:()=>v});var r={};a.r(r),a.d(r,{global:()=>f,specific:()=>m});a(14905),a(98992),a(8872),a(62953);var o=a(47444),i=a(69765);const s={arr:"arr",bool:"bool",int:"int",val:"val",obj:"obj",dec:"dec"};a(41393),a(81454);var c=a(38819),l=a(82838);const d=()=>[e=>{let{onSet:t}=e;t(((e,t)=>{let{after:a,before:n,correlation:r,utc:o,forcePlay:i,...s}=e,{correlation:d,forcePlay:u,...m}=t;n=a<0?0:n;const{offset:g=""}=(0,l.M)("default",o||m.utc),p=(h=s.modalParams||m.modalParams)?Object.keys(h).map((e=>"".concat(e,"=").concat(h[e]))).join(","):"";var h;const{highlight:v,...f}={...m,...s,after:a,before:n,offset:g,metrics_correlation:"undefined"===typeof r?d:r,force_play:"undefined"===typeof i?u:i,utc:o,modalParams:p};v.after?(0,c.Z8)({highlight_after:v.after,highlight_before:v.before,...f}):((0,c.Z8)(f),(0,c.Pg)(["highlight_after","highlight_before"]))}))}];a(25440);const u={default:e=>e?e.split(","):[],[s.arr]:e=>e?e.split(","):[],[s.bool]:e=>"true"===e,[s.int]:e=>e?parseInt(e,10):0,[s.val]:e=>e,[s.dec]:e=>e?parseFloat(e):0,[s.obj]:e=>{try{return JSON.parse(decodeURIComponent(e))}catch(t){return{}}}},m=e=>{let{key:t,extraKey:a=""}=e;if(!t&&!a)return{};const n="".concat(t,"-").concat(a,"-"),r=(0,c.PP)();let o=[];const i=Object.keys(r).reduce(((e,t)=>{if(!t.startsWith(n))return e;if(t.startsWith(n+n))return o.push(t),e;const a=t.replace(n,""),[i]=a.split("-").reverse(),c=s[i]?u[i]:u[a]||u.default;return e[a]=c(r[t]),e}),{});return(0,c.Pg)(o),i},g=e=>e.toString(),p={default:e=>Array.isArray(e)?e.join(","):(e||"").toString(),[s.arr]:e=>Array.isArray(e)?e.join(","):(e||"").toString(),[s.bool]:g,[s.int]:g,[s.val]:g,[s.dec]:g,[s.obj]:e=>encodeURIComponent(JSON.stringify(e||{}))},h=e=>Array.isArray(e)?s.arr:"boolean"===typeof e?s.bool:"number"===typeof e?e%1===0?s.int:s.dec:e&&"object"===typeof e?s.obj:s.val,v=e=>{let{key:t,extraKey:a=""}=e;const n="".concat(t,"-").concat(a,"-");return[e=>{let{setSelf:n,trigger:r,node:o,getLoadable:i}=e;if("get"===r){if(Object.keys(i(o).contents).length)return;const e=(0,c.PP)();if(Object.keys(e).length)return;setTimeout((()=>n(m({key:t,extraKey:a}))))}},e=>{let{onSet:t}=e;t((function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=[],r=Object.keys(e).reduce(((r,o)=>{const i=o.split("-").reverse()[0];let c=i;if(s[c]||(s[c]||(c=h(e[o])),s[c]||(c=h(t[o]))),"undefined"===typeof e[o])return a.push(n+o),delete r[o],r;const l=p[c]||p[o]||p.default,d="".concat(n).concat(o).concat(s[i]?"":"-".concat(c));return r[d]=l(e[o]),r[d]||a.push(d),r}),{});(0,c.Z8)(r),(0,c.Pg)(a)}))}]},f=()=>{const{after:e=-900,before:t=0,utc:a="default",highlight_after:n,highlight_before:r,metrics_correlation:o=!1,timezoneName:i,modal:s="",modalTab:d="",modalParams:u,force_play:m}=(0,c.PP)(),{offset:g=0,utc:p,text:h=""}=(0,l.M)("default",a),v=i&&"undefined"!==i?i:h,f={after:isNaN(Number(n))?null:Number(n),before:isNaN(Number(r))?null:Number(r)},A=isNaN(Number(e))?-900:Number(e),y={after:A,before:A<0?0:isNaN(Number(t))?A+900:Number(t),utc:p,offset:g,timezoneName:v,modal:s,modalTab:d};return f.after?(0,c.Z8)({highlight_after:f.after,highlight_before:f.before,metrics_correlation:o,...y}):(0,c.Z8)({metrics_correlation:o,...y}),{highlight:f,correlation:"true"===o,forcePlay:"true"===m,...y,modalParams:(b=u,b&&b.split(",").reduce(((e,t)=>{const[a,n]=t.split("=");return e[a]=n,e}),{}))};var b},A=(0,o.Iz)({key:"paramsAtom",default:e=>(r[e.key||"global"]||m)(e),effects:e=>(n[e.key||"global"]||v)(e)}),y=(e,t,a)=>{if("global"===e)return t;const[n]=t.split("-").reverse();return s[n]?t:s[a]?"".concat(t,"-").concat(a):t},b=(0,o.K0)({key:"paramsState",get:e=>{let{key:t="global",extraKey:a,param:n,flavour:r,merge:o}=e;return e=>{let{get:i}=e,c=i(A({key:t,extraKey:a}));if(a&&o&&(c=Object.keys(c).reduce(((e,t)=>("undefined"===typeof c[t]||Array.isArray(c[t])&&!c[t].length||null===c[t]||(e[t]=c[t]),e)),{...i(A({key:t,extraKey:void 0}))})),n){const e=y(t,n,r);return r||"global"===t?e in c?c[e]:c[n]:(console.warn("Will use val as flavour for",n),c[y(t,n,"val")])}return Object.keys(c).reduce(((e,a)=>(e[((e,t,a)=>{if("global"===e)return t;const[n,...r]=t.split("-").reverse();return s[a||n]&&s[n]?r.reverse().join("-"):t})(t,a,r)]=c[a],e)),{})}},set:e=>{let{key:t="global",extraKey:a,param:n,flavour:r}=e;return(e,o)=>{let{set:i}=e;n&&(n=y(t,n,r)),i(A({key:t,extraKey:a}),(e=>"function"===typeof o?n?{...e,[n]:o(e[n])}:{...e,...o(e)}:n?{...e,[n]:o}:{...e,...o}))}}}),S=function(e){let{key:t,extraKey:a,flavour:n,defaultValue:r,merge:i}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=(0,o.vc)(b({key:t,param:e,extraKey:a,flavour:n,merge:i}));return"undefined"===typeof s?r:s},k=function(e){let{key:t,extraKey:a,flavour:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,o.lZ)(b({key:t,param:e,extraKey:a,flavour:n}))},I=function(e){let{key:t,extraKey:a,flavour:n,defaultValue:r,merge:o}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return[S(e,{key:t,extraKey:a,flavour:n,defaultValue:r,merge:o}),k(e,{key:t,extraKey:a,flavour:n})]},w=(e,t)=>{let{extraKey:a,defaultValue:n,flavour:r,merge:o}=t;const s=(0,i.ID)();return S(e,{key:s,extraKey:a,defaultValue:n,flavour:r,merge:o})},E=(e,t)=>{let{extraKey:a,flavour:n}=t;const r=(0,i.ID)();return k(e,{key:r,extraKey:a,flavour:n})},x=(e,t)=>{let{extraKey:a,defaultValue:n,flavour:r,merge:o}=t;return[w(e,{extraKey:a,defaultValue:n,flavour:r,merge:o}),E(e,{extraKey:a,flavour:r})]}},1522:(e,t,a)=>{"use strict";a.d(t,{DH:()=>g,e8:()=>b,eY:()=>S,j_:()=>y,n2:()=>h,rp:()=>k,th:()=>A,y5:()=>f,yK:()=>v,z2:()=>p});a(17333),a(98992),a(54520),a(62953);var n=a(71835),r=a(61649),o=a(22292),i=a(3914),s=a(69765),c=a(12800),l=a(5169),d=a(29662),u=a(63129),m=a(46902);const g=function(e){let{silent:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=(0,s.wz)(e,"spaceId"),[c,l]=(0,n.A)(),d=(0,o.uW)("isAnonymous"),m=(0,i.dg)();return(0,r.A)((function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(d||m)return Promise.resolve().then((()=>!t&&c({header:"Rooms",text:"Connect to cloud to be able to save your settings!"})));const r=(0,u.xX)(a,e,n);return r.then((()=>!t&&c({header:"Rooms",text:"Room successfully updated!"}))).catch((e=>!e.isCancel&&l(e))),r}),[e,d,m,a])},p=(e,t)=>{const[a,o]=(0,n.A)(),i=(0,s.wz)(t,"name");return(0,r.A)((()=>{const n=(0,u.HN)(e,t);return n.then((()=>a({header:"Rooms",text:"Room ".concat(i," was successfully deleted!")}))).catch((e=>!e.isCancel&&o(e))),n}),[t,e])},h=(e,t)=>{const[,a]=(0,n.A)(),i=(0,o.NJ)(),c=(0,r.A)((()=>{const n=(0,u.cx)(e,t,i);return n.catch((e=>!e.isCancel&&a(e))),n}),[e,t,i]),[l,...d]=(0,m.ES)(t,"ids"),g=p(e,t),h=(0,s.wz)(t,"untouchable");return d.length||l!==i||h?c:g},v=e=>{const[t,a]=(0,n.A)();return(0,r.A)((function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=(0,u.ab)(e,n);return r.then((()=>t({header:"Rooms",text:"Room ".concat(n.name," was successfully created!")}))).catch((e=>!e.isCancel&&a(e))),r}),[e])},f=(e,t)=>{const[a,o]=(0,n.A)();return(0,r.A)((n=>{const r=(0,u.pD)(e,t,n);return r.then((()=>a({header:"Rooms",text:"Member".concat(n.length>1?"s":""," successfully added!")}))).catch((e=>!e.isCancel&&o(e))),r}),[e])},A=function(e,t){let{onSuccess:a,onFail:i}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const c=(0,o.NJ)(),[l,d]=(0,n.A)(),m=(0,s.a8)(t);return(0,r.A)((()=>{const n=(0,u.pD)(e,t,[c]);return n.then((()=>{m({isMember:!0}),l({header:"Rooms",text:"Successfully joined the room"}),null===a||void 0===a||a()})).catch((e=>{!e.isCancel&&d(e),null===i||void 0===i||i()})),n}),[t,m,e])},y=(e,t)=>{const a=(0,l.t)(),[o,i]=(0,n.A)();return(0,r.A)((n=>{const r=(0,u.cx)(e,t,n);return r.then((()=>{(async e=>{let{cacheKeyPrefix:t,memberIds:a,spaceId:n,roomId:r}=e;const o="".concat(t).concat((0,d.E)(n,r));await(0,c.y)({key:o,handleResults:e=>e.results.filter((e=>!a.includes(e.id)))})})({cacheKeyPrefix:a,memberIds:n,spaceId:e,roomId:t}),o({header:"Rooms",text:"Member".concat(n.length>1?"s":""," successfully removed!")})})).catch((e=>!e.isCancel&&i(e))),r}),[t,e])},b=(e,t)=>{const[a,o]=(0,n.A)();return(0,r.A)((function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=(0,u.lW)(e,t,n);return r.then((()=>a({header:"Rooms",text:"Nodes successfully added!"}))).catch((e=>!e.isCancel&&o(e))),r}),[t,e])},S=e=>{const[t,a]=(0,n.A)();return(0,r.A)((function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const r=(0,u.Xm)(e,n);return r.then((()=>t({header:"Rooms",text:"Node successfully deleted!"}))).catch((e=>!e.isCancel&&a(e))),r}),[e])},k=(e,t)=>{const[a,o]=(0,n.A)();return(0,r.A)((n=>{const r=(0,u.if)(e,t,n);return r.then((()=>a({header:"Rooms",text:"Nodes successfully removed!"}))).catch((e=>!e.isCancel&&o(e))),r}),[t,e])}},51074:(e,t,a)=>{"use strict";a.d(t,{t:()=>i,s:()=>s});var n=a(47444),r=a(69765);const o={ids:(0,n.Iz)({key:"roomAlertIds",default:[]}),error:(0,n.Iz)({key:"roomAlertError",default:null}),updatedAt:(0,n.Iz)({key:"roomAlertsUpdatedAt",default:""}),loaded:(0,n.Iz)({key:"roomAlertsLoaded",default:!1})},i=(0,n.K0)({key:"roomAlertState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(o[a](t))}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r(o[a](t),n)}}}),s=e=>((e,t)=>(0,n.vc)(i({id:e,key:t})))((0,r.ID)(),e)},63129:(e,t,a)=>{"use strict";a.d(t,{HN:()=>y,K8:()=>f,SJ:()=>h,TM:()=>T,Xm:()=>I,a9:()=>g,ab:()=>v,cx:()=>S,hn:()=>R,if:()=>w,jt:()=>D,lW:()=>k,pD:()=>b,uP:()=>x,uQ:()=>u,xX:()=>A});a(41393),a(14905),a(98992),a(81454),a(8872);var n=a(26655),r=a(49286),o=a(81048),i=a(78969),s=a(49389),c=a(37618);const l=function(){let{container:e,virtualization:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e&&"unknown"!=e?"Container":t&&"unknown"!=t?"VM":"Bare metal"},d=e=>t=>{let{nodes:a=[]}=t;return a.map((t=>{let{nm:a,capabilities:n,v:c,...d}=t;return{name:a,version:c,hasAccessibleData:o.iy[d.state],isOffline:d.state===o.j8.offline,isUnseen:d.state===o.j8.unseen,isLive:o.c1[d.state],updateSeverity:(m=c,(0,s.ID)(m,i.Wd)?"critical":(0,s.ID)(m,i.x7)?"warning":null),capabilities:n.reduce(((e,t)=>(e[t.name]=t,e)),{}),capabilityKeys:n.map((e=>e.name)),...(0,r.bn)(d),labels:d.labels||{},labelKeys:Object.keys(d.labels||{}),id:d.nd||d.mg,nodeStatus:(u=d.state,u===o.j8.offline?"Offline":u===o.j8.unseen?"Unseen":u===o.j8.stale?"Stale":o.c1[u]?"Live":"Unknown"),isPreferred:!!e||d.isPreferred,technology:l(d.hw)};var u,m}))},u=e=>{let{roomId:t,spaceId:a}=e;return(0,c.ES)(a)?n.A.get("/api/v2/nodes",{baseURL:window.envSettings.agentApiUrl,transform:d(!0)}):n.A.post("/api/v3/spaces/".concat(a,"/rooms/").concat(t,"/nodes"),{scope:{nodes:[]}},{transform:d()})},m=e=>{let{context:t,chartType:a="",...n}=e;return{id:t,name:t,context:t,chartType:a,...n}},g=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],{after:o,before:i}=arguments.length>3?arguments[3]:void 0;return(0,c.ES)(e)?n.A.get("/api/v2/contexts?scope_nodes=".concat(a.join("|")||"*"),{baseURL:window.envSettings.agentApiUrl,transform:e=>{let{contexts:t={},versions:a={}}=e;return{results:Object.keys(t).map((e=>m({...(0,r.bn)(t[e]),id:e,context:e}))),versions:(0,r.bn)(a)}}}):n.A.post("/api/v3/spaces/".concat(e,"/rooms/").concat(t,"/contexts"),{scope:{contexts:["*"],nodes:a},selectors:{contexts:[],nodes:[]},window:{after:o,before:i}},{transform:e=>{let{contexts:t={},versions:a={}}=e;return{results:Object.keys(t).map((e=>m({...(0,r.bn)(t[e]),id:e,context:e}))),versions:(0,r.bn)(a)}}})},p=(e,t)=>a=>{let{results:n}=a;return{results:n.map((a=>({...a,spaceId:e,roomId:t})))}},h=(e,t)=>n.A.get("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/dashboards"),{transform:p(e,t)}),v=(e,t)=>n.A.post("/api/v1/spaces/".concat(e,"/rooms"),t),f=(e,t)=>n.A.get("/api/v1/spaces/".concat(e,"/rooms/").concat(t)),A=(e,t,a)=>n.A.patch("/api/v1/spaces/".concat(e,"/rooms/").concat(t),a),y=(e,t)=>n.A.delete("/api/v1/spaces/".concat(e,"/rooms/").concat(t)),b=(e,t,a)=>n.A.post("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/members"),a),S=(e,t,a)=>n.A.delete("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/members?account_ids=").concat(a)),k=(e,t,a)=>n.A.post("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/claimed-nodes"),a),I=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return n.A.delete("/api/v1/spaces/".concat(e,"/nodes"),{data:{node_ids:t}})},w=(e,t,a)=>n.A.delete("/api/v1/spaces/".concat(e,"/rooms/").concat(t,"/claimed-nodes?node_ids=").concat(a)),E=e=>(0,r.bn)(e,{depth:3}),x=(e,t)=>n.A.get("/api/v3/spaces/".concat(e,"/rooms/").concat(t,"/parent-child-stats"),{allow401:!0,transform:E}),C=e=>{var t;const a=(0,r.bn)(e);return a.stability=null===(t=a.stability)||void 0===t?void 0:t.reduce(((e,t)=>{let{nodeId:a,isStable:n}=t;return{...e,[a]:{isStable:n}}}),{}),a},T=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return n.A.post("/api/v3/spaces/".concat(e,"/rooms/").concat(t,"/nodes/stability"),{scope:{nodes:a}},{transform:C})},N=e=>(0,r.bn)(e,{depth:3}),R=function(e,t){let{sort:a="",start:r="",end:o=""}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.A.get("/api/v2/spaces/".concat(e,"/rooms/").concat(t,"/alerts_stats?sort=").concat(a,"&start=").concat(r,"&end=").concat(o),{transform:N})},M=e=>(0,r.bn)(e),D=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return n.A.post("/api/v3/spaces/".concat(e,"/rooms/").concat(t,"/charts/stats"),{scope:{nodes:a}},{transform:M})}},54308:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>c,x4:()=>s,yz:()=>i});a(62953);var n=a(47444),r=a(37618),o=a(38280);const i=(0,n.eU)({key:"currentRoomSlug",default:null}),s=(0,n.Iz)({key:"roomIdBySlug",default:"",effects:e=>{let[t,a]=e;return(0,r.ES)(t)&&a===r.gB?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(r.gB)}]:[]}}),c=(0,n.Iz)({key:"room",default:o.A,effects:e=>(0,r.tB)(e)?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(r.hq)}]:[]})},81048:(e,t,a)=>{"use strict";a.d(t,{Q8:()=>n,c1:()=>i,iy:()=>o,j8:()=>s,mL:()=>r});const n="All nodes",r="all-nodes",o={created:!1,reachable:!0,stale:!0,unreachable:!1},i={created:!0,reachable:!0,stale:!1,unreachable:!1},s={offline:"unreachable",unseen:"created",stale:"stale",live:"reachable"}},21591:(e,t,a)=>{"use strict";a.d(t,{z_:()=>d,hZ:()=>p,wt:()=>h,q:()=>m,RQ:()=>g});a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(47444),r=a(66245),o=a.n(r),i=a(68980),s=a(69765),c=a(37618);const l={ids:(0,n.Iz)({key:"roomDashboardIds",default:[],effects:e=>c.gB===e?[e=>{let{onSet:t,trigger:a,setSelf:n}=e;"get"===a&&n([c.LA]),t((e=>{n([c.LA,...e])}))}]:[]}),loaded:(0,n.Iz)({key:"roomDashboardsLoaded",default:!1,effects:e=>c.gB===e?[e=>{let{trigger:t,setSelf:a}=e;"get"===t&&a(!0)}]:[]})},d=(0,n.K0)({key:"roomDashboardState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(l[a](t))}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;return r(l[a](t),n)}}}),u=(e,t)=>(0,n.vc)(d({id:e,key:t})),m=()=>{const e=(0,s.ID)();return u(e,"ids")},g=()=>{const e=(0,s.ID)();return u(e,"loaded")},p=(0,n.K0)({key:"roomDashboardsState/add",set:e=>(t,a)=>{let{set:n,get:r}=t;const o=e=>r((0,i.Qx)({id:e,key:"name"}));n(l.ids(e),(e=>[...new Set([...e,a.id])].sort(((e,t)=>o(e).localeCompare(o(t),void 0,{sensitivity:"accent",ignorePunctuation:!0})))))}}),h=(0,n.K0)({key:"roomDashboardsState/remove",set:e=>(t,a)=>{let{set:n}=t;n(l.ids(e),(e=>o()(e,a)))}})},38280:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});const n={loaded:!1,fullyLoaded:!1,id:null,isMember:!1,name:"",memberCount:null,nodeCount:null,description:"",private:!1,slug:"",spaceId:null,createdAt:"",untouchable:!0}},46902:(e,t,a)=>{"use strict";a.d(t,{x2:()=>d,n:()=>h,lb:()=>m,di:()=>g,zC:()=>f,ES:()=>u});a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(47444),r=a(66245),o=a.n(r),i=a(70716),s=a(69765);const c={ids:(0,n.Iz)({key:"roomMemberIds",default:[]}),error:(0,n.Iz)({key:"roomMembersError",default:null}),updatedAt:(0,n.Iz)({key:"roomMembersUpdatedAt",default:""}),loaded:(0,n.Iz)({key:"roomMembersLoaded",default:!1})};var l=a(1522);const d=(0,n.K0)({key:"roomMemberState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(c[a](t))}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r(c[a](t),n)}}}),u=(e,t)=>(0,n.vc)(d({id:e,key:t})),m=()=>{const e=(0,s.ID)();return u(e,"ids")},g=()=>{const e=m();return(0,i.Uv)(e)},p=(0,n.K0)({key:"roomMembersState/add",set:e=>(t,a)=>{let{set:n,get:r}=t;const o=e=>r((0,i.m)({id:e,key:"name"}));n(c.ids(e),(e=>[...new Set([...e,...a])].sort(((e,t)=>o(e).localeCompare(o(t),void 0,{sensitivity:"accent",ignorePunctuation:!0})))))}}),h=function(e,t){let{onSuccess:a,onFail:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,l.y5)(e,t);return(0,n.Zs)((e=>{let{set:n}=e;return e=>{try{o(e),n(p(t),e),a&&a(e)}catch(i){r&&r(e)}}}),[o,e,a,r])},v=(0,n.K0)({key:"roomMembersState/remove",set:e=>(t,a)=>{let{set:n}=t;return n(c.ids(e),(e=>o()(e,a)))}}),f=function(e,t){let{onSuccess:a,onFail:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,l.j_)(e,t);return(0,n.Zs)((e=>{let{set:n}=e;return e=>{try{o(e),n(v(t),e),a&&a(e)}catch(i){r&&r(e)}}}),[o,e,t,a,r])}},21204:(e,t,a)=>{"use strict";a.d(t,{lM:()=>g,gV:()=>y,uB:()=>m,e6:()=>u,tY:()=>f,Vw:()=>h,tQ:()=>A,XH:()=>v});a(17333),a(9920),a(41393),a(98992),a(54520),a(3949),a(81454),a(62953);var n=a(47444),r=a(33829),o=a(1522);const i=[{id:"system.cpu",context:"system.cpu",dimensions:[],enableAllDimensions:!0,hidden:!1,title:"Total CPU",unit:"percentage"},{id:"system.load",context:"system.load",dimensions:[{id:"load15",name:"load15"}],enableAllDimensions:!1,hidden:!1,title:"Load 15",unit:"load"},{id:"mem.available",context:"mem.available",dimensions:[],enableAllDimensions:!0,hidden:!1,title:"Mem Available",unit:"MiB"},{id:"mem.swap",context:"mem.swap",dimensions:[{id:"free",name:"free"}],enableAllDimensions:!1,hidden:!1,title:"Swap Free",unit:"MiB"},{id:"system.io-in",context:"system.io",dimensions:[{id:"in",name:"in"}],enableAllDimensions:!1,hidden:!1,title:"Disk Reads",unit:"KiB/s"},{id:"system.io-out",context:"system.io",dimensions:[{id:"out",name:"out"}],enableAllDimensions:!1,hidden:!1,title:"Disk Writes",unit:"KiB/s"},{id:"system.net-received",context:"system.net",dimensions:[{id:"InOctets",name:"received"}],enableAllDimensions:!1,hidden:!1,title:"Network In",unit:"kilobits/s"},{id:"system.net-sent",context:"system.net",dimensions:[{id:"OutOctets",name:"sent"}],enableAllDimensions:!1,hidden:!1,title:"Network Out",unit:"kilobits/s"}].reduce(((e,t)=>({...e,[t.id]:t})),{}),s={id:null,title:"",context:"",unit:"",dimensions:[],enableAllDimensions:!1,hidden:!1},c=(0,n.Iz)({key:"roomMetricIds",default:Object.keys(i)}),l=(0,n.Iz)({key:"roomMetrics",default:e=>{let{id:t}=e;return i[t]||{}}}),d=(0,n.K0)({key:"roomMetricState",get:e=>{let{id:t,roomId:a,key:n}=e;return e=>{let{get:r}=e;const o=r(l({id:t,roomId:a}));return n?o[n]:o}},set:e=>{let{id:t,roomId:a,key:n}=e;return(e,r)=>{let{set:o}=e;return n?"function"===typeof r?o(l({id:t,roomId:a}),(e=>({...e,[n]:r(e[n])}))):void o(l({id:t,roomId:a}),(e=>({...e,[n]:r}))):o(l({id:t,roomId:a}),"function"===typeof r?r:{...s,...r})}}}),u=(e,t,a)=>(0,n.vc)(d({id:t,roomId:e,key:a})),m=(e,t)=>(0,n.E0)(l({id:t,roomId:e})),g=(0,n.K0)({key:"roomMetricIdsState",get:e=>t=>{let{get:a}=t;return a(c(e))},set:e=>(t,a)=>{let{set:n}=t;n(c(e),a.map((e=>e.id))),a.forEach((t=>n(l({roomId:e,id:t.id}),t)))}}),p=(0,n.K0)({key:"roomMetricsState",get:e=>t=>{let{get:a}=t;return a(g(e)).map((t=>a(l({id:t,roomId:e}))))}}),h=e=>(0,n.vc)(p(e)),v=function(e){let{shouldPersist:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=(0,o.DH)(e,{silent:!0});return(0,n.Zs)((n=>{let{set:r,snapshot:o}=n;return async function(n){for(var i=arguments.length,s=new Array(i>1?i-1:0),c=1;c{let{set:a}=t;return a(d({roomId:e,id:n,key:l}),u)})).getPromise(p(e));await a({metrics:t})}catch(m){r(d({roomId:e,id:n,key:l}),await o.getPromise(d({roomId:e,id:n,key:l})))}}}),[e])},f=e=>[h(e),v(e)],A=e=>{const t=(0,o.DH)(e);return(0,n.Zs)((a=>{let{set:n,snapshot:o}=a;return async a=>{const i="new"===a.id,s=(await o.getPromise(p(e))).filter((e=>e.id!==a.id)),l=i?{...a,id:(0,r.A)()}:a,u=[...s,l];await t({metrics:u}),n(d({roomId:e,id:l.id}),l),i&&n(c(e),(e=>[...e,l.id]))}}),[e])},y=e=>{const t=(0,o.DH)(e,{silent:!0});return(0,n.Zs)((a=>{let{set:n,reset:r,snapshot:o}=a;return async a=>{const i=(await o.getPromise(p(e))).filter((e=>e.id!==a));await t({metrics:i}),n(c(e),(e=>e.filter((e=>e!==a)))),r(l({roomId:e,id:a}))}}),[e])}},67990:(e,t,a)=>{"use strict";a.d(t,{dT:()=>u,$6:()=>g,Hx:()=>y,CK:()=>v,nj:()=>f,nl:()=>k,vV:()=>I,gr:()=>m,vv:()=>h});a(9920),a(41393),a(14905),a(98992),a(3949),a(81454),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(47444),r=a(66245),o=a.n(r),i=a(47762),s=a(69765),c=a(1522);const l={ids:(0,n.Iz)({key:"roomNodeIds",default:[]}),error:(0,n.Iz)({key:"roomNodesError",default:null}),updatedAt:(0,n.Iz)({key:"roomNodesUpdatedAt",default:""}),loaded:(0,n.Iz)({key:"roomNodesLoaded",default:!1})},d={nodes:(0,n.Iz)({key:"roomNodesOptions",default:[]}),error:(0,n.Iz)({key:"roomNodesOptionsError",default:null}),loaded:(0,n.Iz)({key:"roomNodesOptionsLoaded",default:!1})},u=(0,n.K0)({key:"roomNodeState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(l[a](t))}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;return r(l[a](t),n)}}}),m=(e,t)=>(0,n.vc)(u({id:e,key:t})),g=(0,n.K0)({key:"roomNodesOptions",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(d[a](t))}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r(d[a](t),n)}}}),p=(0,n.K0)({key:"roomsNodesOptions",get:e=>t=>{let{get:a}=t;return null!==e&&void 0!==e&&e.length?e.reduce(((e,t)=>{const n=e.map((e=>{let{value:t}=e;return t}));return a(g({id:t,key:"nodes"})).forEach((t=>{n.includes(t.value)||e.push(t)})),e}),[]):[]}}),h=e=>(0,n.vc)(p(e)),v=()=>{const e=(0,s.ID)();return m(e,"ids")},f=()=>{const e=(0,s.ID)();return m(e,"loaded")},A=(0,n.K0)({key:"roomNodesState/add",get:()=>()=>null,set:e=>(t,a)=>{let{set:n,get:r}=t;const o=e=>r((0,i.GN)({id:e,key:"name"}));n(l.ids(e),(e=>[...new Set([...e,...a])].sort(((e,t)=>o(e).localeCompare(o(t),void 0,{sensitivity:"accent",ignorePunctuation:!0}))))),n(l.updatedAt(e),"")}}),y=function(e,t){let{onSuccess:a,onFail:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,c.e8)(e,t);return(0,n.Zs)((e=>{let{set:n}=e;return async function(e){let{makeCallback:i=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{const r=await o(e);r&&e.reduce(((e,t,a)=>{var n;return null!==(n=r[a])&&void 0!==n&&n.errorCode?e:[...e,t]}),[]),n(A(t),e),i&&a&&a(e)}catch(s){i&&r&&r(e)}}}),[o,e,a,r])},b=(0,n.K0)({key:"roomNodesState/obsolete",get:()=>()=>null,set:e=>{let{roomId:t,nodeIds:a}=e;return e=>{let{set:n}=e;n(l.ids(t),(e=>o()(e,a))),n(l.updatedAt(t),"")}}}),S=(0,n.K0)({key:"roomNodesState/remove",get:()=>()=>null,set:e=>(t,a)=>{let{set:n}=t;n(l.ids(e),(e=>o()(e,a))),n(l.updatedAt(e),"")}}),k=(e,t)=>{const a=(0,c.eY)(e);return(0,n.Zs)((e=>{let{set:n}=e;return async function(e){let{onSuccess:r,onFail:o}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{await a(e),e.map((e=>{n((0,i.GN)({id:e,key:"state"}),"deleted")})),t.map((t=>{n(b({roomId:t,nodeIds:e}))})),r&&r(e)}catch(s){o&&o()}}}),[a,e])},I=function(e,t){let{onSuccess:a,onFail:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=(0,c.rp)(e,t);return(0,n.Zs)((e=>{let{set:n}=e;return async function(e){let{onSuccess:i,onFail:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{await o(e),n(S(t),e),a&&a(e),i&&i()}catch(c){r&&r(e),s&&s()}}}),[o,e,t,a,r])}},69765:(e,t,a)=>{"use strict";a.d(t,{If:()=>y,LS:()=>b,NG:()=>I,At:()=>U,ID:()=>M,r9:()=>_,QW:()=>C,XA:()=>D,pr:()=>R,HX:()=>x,NQ:()=>E,J_:()=>N,wz:()=>S,A2:()=>T,a8:()=>k});a(17333),a(98992),a(54520);var n=a(47444),r=a(14994),o=a(3914),i=a(81048),s=a(56820),c=a(54308),l=a(38280),d=a(1522),u=a(82265),m=a(21204),g=a(96540),p=a(5169),h=a(87633),v=a(12800);const f=e=>{const t="".concat((0,p.t)()).concat((0,h.e)(e));return(0,g.useCallback)((e=>(0,v.y)({key:t,handleResults:t=>t.results.concat(e)})),[t])};var A=a(37618);const y=(0,n.K0)({key:"roomInitialize",get:e=>t=>{let{get:a}=t;return a((0,c.Ay)(e))},set:e=>(t,a)=>{let{set:n}=t;const{settings:r,metrics:o,...i}=a;n((0,c.Ay)(e),(e=>({...l.A,...e,...i}))),n((0,c.x4)([i.spaceId,i.slug]),e),r&&n((0,u.A)(e),(e=>({...e,...r}))),o&&n((0,m.lM)(e),o)}}),b=(0,n.K0)({key:"roomState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n((0,c.Ay)(t));return a?r[a]:r}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r((0,c.Ay)(t),a?"function"!==typeof n?e=>({...e,[a]:n}):e=>({...e,[a]:n(e[a])}):{...l.A,...n})}},reset:e=>{let{id:t,key:a}=e;return(e,n)=>{let{reset:r,set:o}=e;a?o((0,c.Ay)(t),"function"!==typeof n?e=>({...e,[a]:n}):e=>({...e,[a]:n(e[a])})):r((0,c.Ay)(t))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),S=(e,t)=>(0,n.vc)(b({id:e,key:t})),k=function(e){let{key:t,shouldPersist:a,onSuccess:r,onFail:o}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=(0,n.lZ)(b({id:e,key:t})),s=(0,d.DH)(e);return(0,n.Zs)((n=>{let{snapshot:c}=n;return async n=>{const l=t?{[t]:n}:n;if(i((e=>({...e,...l}))),!a)return;const d=await c.getPromise(b({id:e}));try{await s(l),r&&r(n)}catch(u){i(t?d[t]:d),o&&o(n)}}}),[e,t,a,r,o])},I=function(e){let{onSuccess:t,onFail:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=(0,d.yK)(e),i=f(e);return(0,n.Zs)((n=>{let{set:s}=n;return async n=>{try{const{data:a}=await o(n),c={...n,spaceId:e,...a,loaded:!0};await i(c),s(y(c.id),c),s((0,r.Jz)(e),c),t&&t(c)}catch(c){a&&a(n)}}}),[o,e,t,a,i])},w=function(e,t){let{onSuccess:a,onFail:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=(0,n.E0)(b({id:e})),l=S(e,"spaceId");return(0,n.Zs)((n=>{let{snapshot:d,set:u,reset:m}=n;return async()=>{const n=await d.getPromise(b({id:e})),g=await d.getPromise((0,r.YB)({id:n.spaceId})),p=(0,s.Pb)(g.filter((t=>t.id!==e)));try{await t(),m((0,c.x4)([l,n.slug])),u(c.yz,p),u((0,r.Oy)(l),n.id),i(),a&&a(n)}catch(h){o&&o(n)}}}),[t,l,e,a,o])},E=(e,t)=>{const a=S(e,"spaceId"),n=(0,d.n2)(a,e);return w(e,n,t)},x=(e,t)=>{const a=S(e,"spaceId"),n=(0,d.z2)(a,e);return w(e,n,t)},C=()=>(0,n.vc)(c.yz),T=e=>(0,n.lZ)(c.yz,e),N=(e,t)=>(0,n.vc)((0,c.x4)([e,t])),R=()=>{const e=(0,r.DL)(),t=(0,o.dg)()?null===A.hq||void 0===A.hq?void 0:A.hq.slug:i.mL;return e.filter((e=>{let{slug:a}=e;return a===t}))[0]||{id:""}},M=e=>{const t=(0,o.vt)(),a=C(),{id:n=""}=R();return N(t,e||a)||n},D=e=>{const t=M();return S(t,e)},_=()=>{const e=(0,o.bq)(),t=C();return e&&t&&"/spaces/".concat(e,"/rooms/").concat(t)},U=()=>{const{id:e=""}=R();return"member"===(0,o.ap)("roleInSpace")&&!!e}},82265:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});const n=(0,a(47444).Iz)({key:"roomSettings",default:{groupMode:""}})},29662:(e,t,a)=>{"use strict";a.d(t,{A:()=>d,E:()=>l});var n=a(83957),r=a(54702),o=a(70716),i=a(35273),s=a(46902),c=a(46741);const l=(e,t)=>"spaces.".concat(e,".rooms.").concat(t,".members"),d=function(e,t){let{polling:a=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const d=(0,c.JT)("room:ReadUsers");(0,n.A)((()=>({key:l(e,t),autorun:!!e&&!!t&&d,fetch:()=>(0,r.D4)(e,t),polling:a,association:{getError:()=>(0,s.x2)({id:t,key:"error"}),getIds:()=>(0,s.x2)({id:t,key:"ids"}),getLoaded:()=>(0,s.x2)({id:t,key:"loaded"}),getUpdatedAt:()=>(0,s.x2)({id:t,key:"updatedAt"})},sort:(e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:"accent",ignorePunctuation:!0}),getResource:e=>(0,o.m)({id:e}),getResourcesInitializer:()=>o.WJ,getResourceInitialState:()=>i.u,pollingOptions:{pollingInterval:18e4}})),[e,t])}},82428:(e,t,a)=>{"use strict";a.d(t,{p:()=>n});const n=(e,t)=>t.untouchable?1:e.untouchable?-1:e.name.localeCompare(t.name,void 0,{sensitivity:"accent",ignorePunctuation:!0})},7484:(e,t,a)=>{"use strict";a.d(t,{EL:()=>s,Q9:()=>g,RM:()=>h,XD:()=>c,Yk:()=>m,bz:()=>d,cN:()=>l,qi:()=>u});a(41393),a(14905),a(98992),a(81454),a(8872);var n=a(26655),r=a(49286),o=a(78969),i=a(91069);const s=()=>n.A.get(o._9,{transform:e=>e.map((e=>{let{permissions:t,...a}=e;return{...a,permissions:t.reduce(((e,t)=>({...e,[t]:t})),{})}}))}),c=e=>n.A.get("/api/v3/spaces/slug/".concat(e)),l=e=>n.A.delete("/api/v1/spaces/".concat(e)),d=e=>n.A.post("/api/v1/spaces",{name:e}),u=(e,t)=>n.A.post("/api/v1/spaces/default",{email:t},{headers:{"Netdata-Account-Id":e}}),m=(e,t)=>n.A.patch("/api/v1/spaces/".concat(e),t),g=e=>n.A.get("/api/v3/spaces/slug?slug=".concat(e),{transform:e=>(0,r.bn)(e)}),p=e=>t=>t.map((t=>({...(0,r.bn)(t),spaceId:e}))),h=function(e){let{defaultParam:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return n.A.get((0,i.t)({spaceId:e}),{params:{default:t},transform:p(e)})}},56639:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>c,Li:()=>i,aR:()=>s,ue:()=>o});var n=a(47444),r=a(37618);const o={createdAt:"",description:"",iconURL:"",id:"",error:null,loaded:!1,name:"",slug:""},i=(0,n.eU)({key:"currentSpaceSlug",default:null}),s=(0,n.Iz)({key:"spaceIdBySlug",default:"",effects:e=>r.Ay&&e===r.z0?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(r.Z2)}]:[]}),c=(0,n.Iz)({key:"space",default:o,effects:e=>(0,r.ES)(e)?[e=>{let{setSelf:t,trigger:a}=e;"get"===a&&t(r.yu)}]:[]})},88116:(e,t,a)=>{"use strict";a.d(t,{FJ:()=>i,HR:()=>s,Nw:()=>r,VH:()=>n,aT:()=>l,jS:()=>d,rY:()=>c,tD:()=>o,uC:()=>u});const n={pro:"pro",free:"free",earlyBird:"earlyBird",business:"business",homelab:"homelab"},r={Pro:n.pro,Professional:n.pro,Community:n.free,EarlyBird:n.earlyBird,Business:n.business,Homelab:n.homelab},o=[n.homelab,n.pro,n.business],i={free:{level:0,title:"Community",features:{2023.11:["Max 5 Active Connected Nodes","Max 1 Active Custom Dashboards (per Room)"]},showAnnualPrice:!1},earlyBird:{level:0,title:"Early Bird",features:{2023.02:['"Member" role available with existing permissions.','"Member" role with access to _All Nodes_ room.']},showAnnualPrice:!1},pro:{level:10,title:"Pro",features:{2023.02:["7 days of alert history and auditing events.",'Unlock the "Troubleshooter" role and add members to the space without providing management permission.',"Enable webhook alert notification integration."]},showAnnualPrice:!1},business:{level:20,title:"Business",features:{2023.02:["Up-to 90 days of alert history and topology events. Never miss an important event while troubleshooting.",'Unlock all user roles including "Manager", "Observer" and "Billing". Empower your teams to excel.',"Enable alert notification integrations (Slack, PagerDuty and more)."],2024.03:["Unlimited Nodes","Unlimited Custom Dashboards","Role-based access control (RBAC)","Single Sign-On (SSO)","Centralized Configuration Management","Enterprise Notification Integrations"]},showAnnualPrice:!1},homelab:{level:20,title:"Homelab",features:{2024.02:["Targeted for homelab users or students, for non-commercial use","No limits! Unlimited Connected Nodes or Custom Dashboards","Full business level features","Fair and flat pricing","Regulated by the Fair Usage Policy"]},showAnnualPrice:!0},enterprise:{features:{2023.11:["Host Netdata Cloud and all its components completely on your premises","Ideal for monitoring air gapped facilities and critical infrastructure","Enable the customization that your organization requires"]},showAnnualPrice:!1}},s=["year","month"],c={year:"yearly",month:"monthly"},l={ErrInvalidPromotionCode:"Promotion code is invalid",ErrInactivePromotionCode:"Promotion code is inactive",ErrInvalidPromotionCodePlan:"Promotion code cannot be applied to this plan"},d="planEnrolmentError",u={free:{2023.11:{maxNodes:5,maxDashboards:1}}}},50503:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});a(62953);var n=a(96540),r=a(88116);const o=()=>{const[e,t]=(0,n.useState)(localStorage.getItem(r.jS));return{isFailure:e,setFailure:(0,n.useCallback)((()=>{t(!0),localStorage.setItem(r.jS,!0)}),[]),reset:(0,n.useCallback)((()=>{t(!1),localStorage.removeItem(r.jS)}),[])}}},55189:(e,t,a)=>{"use strict";a.d(t,{dy:()=>i,eA:()=>r,pz:()=>o,sh:()=>s});var n=a(96540);const r="SPACE_NOT_FOUND",o=5,i=20,s={delete:n.createElement(n.Fragment,null,"Cannot delete last space of account.",n.createElement("br",null),"You can delete your account instead."),leave:n.createElement(n.Fragment,null,"Cannot leave last space of account.",n.createElement("br",null),"You can delete your account instead.")}},48849:(e,t,a)=>{"use strict";a.d(t,{A:()=>n});const n=(0,a(47444).eU)({key:"publicSpacesAtom",default:[]})},14994:(e,t,a)=>{"use strict";a.d(t,{Is:()=>d,YB:()=>v,$e:()=>l,Jz:()=>p,Oy:()=>h,DL:()=>A,WW:()=>g,Y7:()=>m,CB:()=>f,sC:()=>u});a(17333),a(9920),a(41393),a(98992),a(54520),a(3949),a(81454),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(47444),r=a(69765),o=a(3914),i=a(37618);const s={ids:(0,n.Iz)({key:"spaceRoomIds",default:[],effects:e=>(0,i.ES)(e)?[e=>{let{onSet:t,trigger:a,setSelf:n}=e;"get"===a&&n([i.gB]),t((e=>{n([i.gB,...e])}))}]:[]}),updatedAt:(0,n.Iz)({key:"spaceRoomsUpdatedAt",default:""}),loaded:(0,n.Iz)({key:"spaceRoomsLoaded",default:!1,effects:e=>(0,i.ES)(e)?[e=>{let{trigger:t,setSelf:a}=e;"get"===t&&a(!0)}]:[]})};var c=a(82428);const l=(0,n.K0)({key:"spaceRoomState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(s[a](t))}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r(s[a](t),n)}}}),d=(e,t)=>{Object.values(s).forEach((a=>e(a(t))))},u=(e,t)=>(0,n.vc)(l({id:e,key:t})),m=e=>{const t=(0,o.vt)();return u(t,e)},g=()=>{const e=(0,o.vt)();return u(e,"ids")},p=(0,n.K0)({key:"spaceRoomsState/add",get:()=>()=>null,set:e=>(t,a)=>{let{set:n,get:o}=t;const i=e=>o((0,r.LS)({id:e}));n(l({id:e,key:"ids"}),(e=>[...new Set([...e,a.id])].sort(((e,t)=>(0,c.p)(i(e),i(t)))))),n(l({id:e,key:"loaded"}),!0),n(l({id:e,key:"updatedAt"}),"")}}),h=(0,n.K0)({key:"spaceRoomsState/remove",get:()=>()=>null,set:e=>(t,a)=>{let{set:n}=t;n(l({id:e,key:"ids"}),(e=>e.filter((e=>e!==a)))),n(l({id:e,key:"loaded"}),!0),n(l({id:e,key:"updatedAt"}),"")}}),v=(0,n.K0)({key:"spaceFullRooms",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;return n(l({id:t,key:"ids"})).map((e=>n((0,r.LS)({id:e,key:a}))))}},cachePolicy_UNSTABLE:{eviction:"most-recent"}}),f=(e,t)=>(0,n.vc)(v({id:e,key:t})),A=e=>{const t=(0,o.vt)();return f(t,e)}},3914:(e,t,a)=>{"use strict";a.d(t,{EG:()=>g,Jn:()=>m,U2:()=>u,nC:()=>l,Pk:()=>f,vt:()=>b,bq:()=>A,ap:()=>k,jw:()=>I,hX:()=>y,Ak:()=>v,dg:()=>S,ns:()=>p,UV:()=>h});a(9920),a(41393),a(98992),a(3949),a(81454),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(47444),r=a(37618),o=a(76689);const i={ids:(0,n.eU)({key:"spaceIds",default:[],effects:r.Ay?[e=>{let{onSet:t,trigger:a,setSelf:n}=e;"get"===a&&n([r.Z2]),t((e=>{n([r.Z2,...e])}))}]:[]}),error:(0,n.eU)({key:"spacesError",default:null}),updatedAt:(0,n.eU)({key:"spacesUpdatedAt",default:""}),loaded:(0,n.eU)({key:"spacesLoaded",default:!1,effects:[e=>{var t;let{trigger:a,setSelf:n,getLoadable:r}=e;null!==(t=r(o.A).contents)&&void 0!==t&&t.isAnonymous&&"get"===a&&n(!0)}]})};var s=a(56639),c=a(48849);const l=(0,n.K0)({key:"spacesState",get:e=>t=>{let{get:a}=t;return a(i[e])},set:e=>(t,a)=>{let{set:n}=t;n(i[e],a)}}),d=(0,n.gD)({key:"availableSpaceIds",get:e=>{let{get:t}=e;const a=t(l("ids")),n=t(c.A);return[...new Set([...a,...n])]}}),u=(0,n.K0)({key:"spaceState",get:e=>{let{id:t,key:a}=e;return e=>{let{get:n}=e;const r=n((0,s.Ay)(t));return a?r[a]:r}},set:e=>{let{id:t,key:a}=e;return(e,n)=>{let{set:r}=e;r((0,s.Ay)(t),a?"function"!==typeof n?e=>({...e,[a]:n}):e=>({...e,[a]:n(e[a])}):{...s.ue,...n})}}}),m=(0,n.K0)({key:"spaceIdBySlugState",get:e=>t=>{let{get:a}=t;return a((0,s.aR)(e))},set:()=>(e,t)=>{let{set:a}=e;t.forEach((e=>{a((0,s.aR)(e.slug),e.id)}))}}),g=(0,n.gD)({key:"currentSpaceIdState",get:e=>{let{get:t}=e;const a=t(s.Li);return t(m(a))}}),p=(e,t)=>(0,n.vc)(u({id:e,key:t})),h=e=>(0,n.vc)(l(e)),v=e=>(0,n.vc)(m(e)),f=()=>(0,n.vc)(d),A=()=>(0,n.vc)(s.Li),y=e=>(0,n.lZ)(s.Li,e),b=()=>(0,n.vc)(g),S=()=>(0,r.ES)(b()),k=e=>{const t=b();return p(t,e)},I=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,n.Zs)((t=>{let{snapshot:a}=t;return()=>e.map((e=>a.getLoadable(u({id:e})).contents))}))()}},48388:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});var n=a(3914),r=a(90709),o=a(55189),i=a(37618);const s=()=>{const e=(0,r.U)(),t=(0,n.Ak)(e),a=(0,n.ns)(t||o.eA),s=(0,n.UV)("error");return(0,i.ES)(t)?{isFetching:!1,hasAccess:!0}:{isFetching:!!e&&!a.loaded&&!s&&!a.error,hasAccess:a.loaded&&!s&&!a.error}}},90709:(e,t,a)=>{"use strict";a.d(t,{A:()=>v,U:()=>h});a(14905),a(98992),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(47444),r=a(47767),o=a(7484),i=a(96540),s=a(3914);const c="/spaces/:spaceSlug/*";var l=a(22292),d=a(46741),u=a(48849),m=a(55189),g=a(94355),p=a(37618);const h=()=>{var e;return null===(e=(0,r.RQ)(c))||void 0===e||null===(e=e.params)||void 0===e?void 0:e.spaceSlug},v=()=>{const e=(()=>{const e=(0,r.RQ)(c),{spaceSlug:t}=(null===e||void 0===e?void 0:e.params)||{},a=(0,s.hX)(),n=(0,s.bq)();return(0,i.useEffect)((()=>{n!==t&&a(t)}),[n,t]),t})(),[t,a]=(0,i.useState)(null),h=(0,l.uW)("isAnonymous"),v=(0,n.Zs)((n=>{let{set:r}=n;return async()=>{try{const{data:t}=await(0,o.XD)(e),{id:a,permissions:n,...i}=t;r((0,d.Dk)(a),n.reduce(((e,t)=>({...e,[t]:t})),{})),r((0,s.U2)({id:a}),(e=>({...e,...i,loaded:!0}))),r((0,s.Jn)(),[{id:a,slug:e}]),r(u.A,(e=>[...new Set([...e,a])])),h&&r((0,s.nC)("loaded"),!0)}catch(t){r((0,s.U2)({id:m.eA}),(a=>({...a,error:(0,g.A)(t)}))),a(t)}}}),[h,e]);return(0,i.useEffect)((()=>{p.Ay&&e===p.z0||e&&v()}),[v,e]),t}},87633:(e,t,a)=>{"use strict";a.d(t,{A:()=>d,e:()=>l});var n=a(83957),r=a(69765),o=a(7484),i=a(14994),s=a(82428),c=a(37618);const l=e=>"spaces.".concat(e,".rooms"),d=function(e){let{autorun:t=!0,polling:a=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,n.A)((()=>({key:l(e),autorun:t&&!!e,polling:a,fetch:()=>(0,o.RM)(e),association:{getIds:()=>(0,i.$e)({id:e,key:"ids"}),getLoaded:()=>(0,i.$e)({id:e,key:"loaded"}),getUpdatedAt:()=>(0,i.$e)({id:e,key:"updatedAt"})},sort:s.p,getResource:r.If,pollingOptions:{pollingInterval:69e3},force:!c.Ay})),[e])}},47731:(e,t,a)=>{"use strict";a.d(t,{J:()=>r});var n=a(45463);const r=()=>(0,n.A)("(max-width: 767px)")},18061:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});a(9391),a(62953);var n=a(96540);const r=()=>{},o=(e,t)=>{const{fetch:a,enabled:o=!0,initialValue:i,onFail:s=r,onSettle:c=r,onSuccess:l=r,isDefaultLoading:d=!1}=(0,n.useMemo)(e,t),[u,m]=(0,n.useState)(i),[g,p]=(0,n.useState)(d),[h,v]=(0,n.useState)(null),f=(0,n.useRef)(!0);return(0,n.useEffect)((()=>{if(!o)return;m(i),p(!0),v(null);const e=a();return e.then((e=>{let{data:t}=e;f.current&&(m(t),l(t))})).catch((e=>{f.current&&(e.isCancel||(v(e),s(e)))})).finally((()=>{f.current&&(p(!1),c())})),()=>{var t;return null===e||void 0===e||null===(t=e.cancel)||void 0===t?void 0:t.call(e)}}),t),(0,n.useEffect)((()=>()=>f.current=!1),[]),[u,g,h]}},69418:(e,t,a)=>{"use strict";a.d(t,{A:()=>c,Q:()=>s});a(14905),a(98992),a(8872);var n=a(47767),r=a(3914),o=a(14994),i=a(37618);const s=()=>{const{pathname:e}=(0,n.zy)();return{isIntegrationsPath:/integrate-anything$/.test(e)}},c=()=>{const e=(0,r.vt)(),t=(0,o.CB)(e,"nodeCount").reduce(((e,t)=>t>e?t:e),0),a=(0,o.Y7)("loaded"),n=(0,i.ES)(e);return[!n&&a&&0===t,!n&&e&&!a,t]}},61649:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});a(62953);var n=a(96540);const r=(e,t)=>{const a=(0,n.useRef)();return(0,n.useCallback)((function(){var t,n;return a.current&&(null===(t=(n=a.current).cancel)||void 0===t||t.call(n)),a.current=e(...arguments),a.current}),t)}},86723:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});a(62953);var n=a(96540);const r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const a=localStorage.getItem(e);return a?JSON.parse(a):t},o=(e,t)=>{const[a,o]=(0,n.useState)((()=>r(e,t)));return(0,n.useEffect)((()=>localStorage.setItem(e,JSON.stringify(a))),[a]),[a,o]}},45463:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});a(62953);var n=a(96540);const r=e=>{var t;return"function"===typeof(null===(t=window)||void 0===t?void 0:t.matchMedia)&&window.matchMedia(e).matches},o=e=>{const[t,a]=(0,n.useState)((()=>r(e)));function o(){a(r(e))}return(0,n.useEffect)((()=>{if("function"!==typeof window.matchMedia)return;const t=window.matchMedia(e);return o(),t.addListener?t.addListener(o):t.addEventListener("change",o),()=>{t.removeListener?t.removeListener(o):t.removeEventListener("change",o)}}),[e]),t}},80862:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});var n=a(96540);const r=()=>{const e=(0,n.useRef)(!1);return(0,n.useEffect)((()=>(e.current=!0,()=>e.current=!1)),[]),e}},71835:(e,t,a)=>{"use strict";a.d(t,{A:()=>i});a(9920),a(98992),a(3949);var n=a(96540),r=a(78217),o=a(13871);const i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";const t=(0,n.useRef)({}),a=(0,n.useCallback)((a=>{const n=(0,o.UI)({...a,success:!0});t.current[e]&&r.A.dismiss(t.current[e]),t.current[e]=r.A.success(n)}),[]),i=(0,n.useCallback)((a=>{var n;const i=null===a||void 0===a||null===(n=a.response)||void 0===n?void 0:n.data,s=(0,o.gi)(null!==i&&void 0!==i&&i.errorMessage?i:{errorMessage:a.message,errorMsgKey:a.message,...a});t.current[e]&&r.A.dismiss(t.current[e]),t.current[e]=r.A.error(s)}),[]),s=(0,n.useCallback)((e=>e.forEach(i)),[]),c=(0,n.useCallback)((a=>{const n=(0,o.UI)({...a,warning:!0});t.current[e]&&r.A.dismiss(t.current[e]),t.current[e]=r.A.warning(n)}),[]);return[a,i,s,c]}},76201:(e,t,a)=>{"use strict";a.d(t,{A:()=>i,F:()=>o});var n=a(96540),r=a(47767);const o=function(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:location.href;null!==(e=window.posthog)&&void 0!==e&&e.__loaded&&window.posthog.capture("$pageview",{$current_url:t})},i=()=>{const{pathname:e}=(0,r.zy)();(0,n.useEffect)((()=>{o()}),[e])}},66627:(e,t,a)=>{"use strict";a.d(t,{A:()=>o,h:()=>r});const n=(0,a(63457).A)("netdata"),r=86400,o=function(e,t){let a,{maxAge:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=()=>{if(!a)return;const e=new Error("rejected");throw e.isCancel=!0,e},i=n.get(e,{maxAge:r}).then((e=>{if(o(),e)return t(e)})).then((()=>(o(),t=>n.set(e,t))));return i.abort=()=>{a=!0},i}},12800:(e,t,a)=>{"use strict";a.d(t,{y:()=>r});var n=a(66627);const r=async e=>{let t,{key:a,handleResults:r}=e;return(await(0,n.A)(a,(e=>(t={updatedAt:"",results:r(e)},t))))(t)}},5169:(e,t,a)=>{"use strict";a.d(t,{t:()=>r});var n=a(22292);const r=()=>{const e=(0,n.NJ)();return"user.".concat(e,".")}},83957:(e,t,a)=>{"use strict";a.d(t,{A:()=>y});a(17333),a(9920),a(41393),a(14905),a(98992),a(54520),a(3949),a(81454),a(8872),a(25509),a(65223),a(60321),a(41927),a(11632),a(64377),a(66771),a(12516),a(68931),a(52514),a(35694),a(52774),a(49536),a(21926),a(94483),a(16215),a(62953);var n=a(96540),r=a(47444),o=a(65570),i=a(83488),s=a.n(i),c=a(18300),l=a(80925),d=a(94355),u=a(68831),m=a(22292),g=a(66627),p=a(5169),h=a(71835);const v=(0,r.eU)({key:"subscriptionsLatestError",default:0}),f=(0,r.K0)({key:"useSubscribe/updateState",get:()=>()=>null,set:()=>(e,t)=>{let{get:a,set:n}=e,{results:r,wasDiff:i,updatedAt:c,getResource:l,getResourcesInitializer:d,getResourceInitialState:u,getUpdatedAt:m,getLoaded:g,getIds:p,getError:h,sort:v,saveToCache:f,restored:A=!1,polling:y=!0}=t;r=r||[],h&&n(h(),null);const b=()=>{n(m(),c),n(g(),!A||"restored")};if(0===r.length&&i)return void b();const{effected:S,deleted:k,byId:I}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s();return e.reduce(((e,a)=>(a.loaded=!0,"deleted"===a.state||a.isDeleted?e.deleted.push(a.id):(e.byId[a.id]={...t(a),...a},e.effected.push(a.id)),e)),{deleted:[],effected:[],byId:{}})}(r,u),w=e=>e in I?I[e]:a(l(e));let E=[];n(p(),(e=>!i&&y||!y?(E=S.length?S:E,v&&E.sort(((e,t)=>v(w(e),w(t)))),E):(k.length&&(E=e.filter((e=>!k.includes(e)))),i&&S.length&&(E=[...new Set([...e,...S])],v&&E.sort(((e,t)=>v(w(e),w(t))))),(0,o.Ay)(E,e)?e:E))),d?n(d(),{values:I,merge:!0}):S.forEach((e=>n(l(e),(t=>({...t,loaded:!0,...I[e]}))))),b(),f&&f({results:E.map(w),updatedAt:c})}}),A=e=>{const t=(0,l.e)(),a=(0,n.useMemo)((()=>t?t.getRoot():null),[t]),[,o]=(0,c.A)(),[,i]=(0,h.A)(e.key),s=(0,r.Zs)((e=>{let{snapshot:t,set:a}=e;return async(e,n)=>{let{getError:r,onFail:o}=n;const s=Date.now(),c=await t.getPromise(v);if(e.isCancel||c+1e4>s)throw e;throw r&&a(r(),(0,d.A)(e)),a(v,s),o?o(e):i(e),e}}),[e]),m=(0,r.Zs)((e=>{let{snapshot:t,set:a}=e;return async(e,n)=>{let{fetchResources:r,onReceive:o,getUpdatedAt:i,getError:c,clearRef:l,onFail:d,...u}=n;const g=await t.getPromise(i());return(l.promise=r(g),l.promise.catch((async e=>s(e,{onFail:d,getError:c})))).then((function(){let{data:e={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(e=>{const t=Array.isArray(e),n=t?e:e.results,s=t?"":e.updatedAt;return null===o||void 0===o||o({...t?{results:n}:{results:[],...e},lastUpdated:g}),a(f(),{fetchResources:r,results:n,wasDiff:!!g,updatedAt:s,getUpdatedAt:i,getError:c,clearRef:l,onFail:d,...u}),new Promise((e=>setTimeout(e,0)))})(e)})).catch((t=>{if(t.isCancel||1===e)throw t;return m(--e,{fetchResources:r,onReceive:o,getUpdatedAt:i,getError:c,clearRef:l,onFail:d,...u})}))}}),[e]);return(0,n.useCallback)((t=>{const{polling:n=!0,fetch:r,association:i,pollingOptions:s,keepPolling:c,...l}=e,d={timeoutId:null,animationFrameId:null,promise:null,killed:!1},g=()=>m(2,{fetchResources:r,saveToCache:t,polling:n,clearRef:d,...i,...l}),p=()=>{d.killed||(d.timeoutId=setTimeout((()=>{d.animationFrameId=requestAnimationFrame((()=>!c&&a&&(a.getAttribute("hovering")||a.getAttribute("paused"))?p():c||o.current||a&&a.getAttribute("autofetchOnWindowBlur")?void g().then(p).catch((e=>!e.isCancel&&p())):p()))}),(null===s||void 0===s?void 0:s.pollingInterval)||u.A.pollingInterval))};return g().then(n?p:null).catch((e=>n&&!e.isCancel&&p())),()=>{var e,t;d.killed=!0,null===(e=d.promise)||void 0===e||null===(t=e.cancel)||void 0===t||t.call(e),cancelAnimationFrame(d.animationFrameId),clearTimeout(d.timeoutId)}}),[e])},y=(e,t)=>{const a=(0,p.t)(),o=(0,m.uW)("isAnonymous"),i=(0,n.useMemo)((()=>{const{key:t,...n}=e();return{key:"".concat(a).concat(t),...n}}),[e,...t,o]),s=A(i),c=(0,r.Zs)((e=>{let{set:t}=e;return e=>{var a;let{results:n=[],updatedAt:r=""}=e;const o=(Array.isArray(n)&&n.length)>0;return null===(a=i.onReceive)||void 0===a||a.call(i,{results:n,lastUpdated:""}),t(f(),{results:n,updatedAt:o?r:"",...i,...i.association,restored:o}),new Promise((e=>setTimeout(e,0)))}}),t),l=(0,r.Zs)((e=>{let{snapshot:t}=e;return()=>{const{association:{getLoaded:e},key:a,cache:n=!0,maxCacheAge:r,skip:o}=i,l=t.getLoadable(e()).contents;if(!o&&(l||!n))return s();const d=(0,g.A)(a,c,{maxAge:r||g.h});let u;return d.then((e=>{u=s(e)})).catch((()=>{})),()=>{var e;o||(d.abort(),null===(e=u)||void 0===e||e())}}}),t);return(0,n.useEffect)((()=>{const{autorun:e=!0,force:t=!1,skip:a=!1}=i;if((!o||t)&&!a&&e)return l()}),[o,l]),s}},87659:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});a(62953);var n=a(96540);const r=function(e){let{on:t,off:a,toggle:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const[o,i]=(0,n.useState)(!!e);return[o,(0,n.useCallback)((e=>i((n=>{const o="boolean"===typeof e?e:!n;return r&&r(o),t&&o&&t(),a&&!o&&a(),o}))),[r,t,a]),(0,n.useCallback)((()=>{i(!0),t&&t()}),[t]),(0,n.useCallback)((()=>{i(!1),a&&a()}),[a])]}},45467:(e,t,a)=>{"use strict";a.d(t,{A:()=>o});var n=a(96540),r=a(80862);const o=(e,t)=>{const a=(0,r.A)();(0,n.useEffect)((()=>{if(a.current)return e()}),t)}},56820:(e,t,a)=>{"use strict";a.d(t,{Ay:()=>S,Pb:()=>b,z1:()=>v});a(8159),a(98992),a(37550),a(62953);var n=a(96540),r=a(47767),o=a(45588),i=a(3914),s=a(14994),c=a(48388),l=a(81048),d=a(21591),u=a(69765),m=a(68980),g=a(68831),p=a(24198),h=a(37618);const v=e=>{const t=(0,r.Zp)(),a=(0,r.g)(),o=(0,u.r9)(),i=(0,m.zi)(e||a.dashboardSlug),s=(0,d.RQ)(),c=(0,n.useRef)(!1);(0,n.useEffect)((()=>{!0===s&&(i?c.current=!0:(t("".concat(o,"/dashboards")),c.current||(0,p.$j)()))}),[s,i])},{demoSlug:f,demoDefaultRoomViews:A,defaultRoomView:y}=g.A,b=e=>{var t;return e.length?e.some((e=>{let{slug:t}=e;return t===l.mL}))?l.mL:null===(t=e[0])||void 0===t?void 0:t.slug:null},S=()=>{(0,r.zy)();const e=(0,r.Zp)(),t=(0,r.RQ)({path:"/spaces/:spaceSlug/*"}),a=(0,r.RQ)({path:"/spaces/:spaceSlug/rooms/:roomSlug/*"}),l=(0,r.RQ)({path:"/*"}),d=(null===a||void 0===a?void 0:a.params)||(null===t||void 0===t?void 0:t.params)||(null===l||void 0===l?void 0:l.params),m=!!(0,r.RQ)({path:"/spaces/:spaceSlug/settings/*"}),g=(0,i.Ak)(d.spaceSlug),p=(0,i.UV)("loaded"),v=(0,u.J_)(g,d.roomSlug),S=(0,s.Y7)("loaded"),[k]=(0,i.Pk)(),I=(0,i.ns)(k,"slug"),{isFetching:w}=(0,c.A)(),E=(0,s.DL)(),x=(0,i.hX)(),C=(0,i.bq)();(0,n.useEffect)((()=>{if(w)return;if(!h.Ay&&(!p||"restored"===p))return;if(m&&g)return;if(g&&C!==d.spaceSlug)return void x(d.spaceSlug);if(g&&!S)return;if(g&&v)return;const t=g?d.spaceSlug:I,a=v?null===d||void 0===d?void 0:d.roomSlug:b(E);e(g&&S&&!a?(0,o.tW)("/spaces/:spaceSlug/no-rooms",{spaceSlug:t}):((e,t)=>{if(!t)return(0,o.tW)("/spaces/:spaceSlug/",{spaceSlug:e});const a=f===e?A[t]||A.default:h.Ay&&e===h.z0&&t===h.gB?h.kG:y;return(0,o.tW)("/spaces/:spaceSlug/rooms/:roomSlug/".concat(a),{spaceSlug:e,roomSlug:t})})(t,a),{replace:!0})}),[m,w,d.roomSlug,d.spaceSlug,v,S,!!E.length,p,g,I,C])}},18300:(e,t,a)=>{"use strict";a.d(t,{A:()=>r});a(62953);var n=a(96540);const r=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const[t,a]=(0,n.useState)(e),r=(0,n.useRef)(t);return(0,n.useEffect)((()=>{const e=()=>{r.current=!1,a(!1)};window.addEventListener("blur",e);const t=()=>{r.current=!0,a(!0)};return window.addEventListener("focus",t),()=>{window.removeEventListener("blur",e),window.removeEventListener("focus",t)}}),[]),[t,r]}},85919:(e,t,a)=>{"use strict";a(17333),a(98992),a(54520),a(62953);var n=a(96540),r=a(39225),o=a(5338),i=a(47444),s=a(84976),c=a(47767),l=a(12968),d=a(86641),u=a(80925),m=a(55337),g=a(24266),p=a(47731),h=a(28738),v=a(37618);const f=Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function A(e,t){navigator.serviceWorker.register(e).then((e=>{a.g.registration=e,e.onupdatefound=()=>{const a=e.installing;null!=a&&(a.onstatechange=()=>{"installed"===a.state&&(navigator.serviceWorker.controller?(console.log("New content is available and will be used when all tabs for this page are closed. See http://bit.ly/CRA-PWA."),t&&t.onUpdate&&t.onUpdate(e)):(console.log("Content is cached for offline use."),t&&t.onSuccess&&t.onSuccess(e)))})}})).catch((e=>{console.error("Error during service worker registration:",e)}))}a(25440);var y=a(57971);const b=(e,t)=>(t.search=t.pathname===e.location.pathname?t.search:t.search||e.location.search,t.hash=t.hash||e.location.hash,t);function S(e){if(v.sA&&"/"!==v.sA&&e.startsWith(v.sA)){const t=v.sA+e.slice(v.sA.length).replace(new RegExp("^".concat(v.sA),"g"),"/");e=t}return e=e.replace(/\/+/g,"/")}const k=e=>"string"===typeof e?{pathname:S(e)}:{...e,pathname:S(e.pathname)},I=(0,y.zR)({window:window}),w=I.push,E=I.replace;I.push=(e,t)=>w.apply(I,[b(I,k(e)),t]),I.replace=(e,t)=>{E.apply(I,[b(I,k(e)),t])};const x=I,C=JSON.parse('{"UU":"cloud-frontend","rE":"6.138.3"}'),T=(0,r.A)((()=>Promise.all([a.e(4631),a.e(7840)]).then(a.bind(a,17840))),"Redirects"),N=(0,r.A)((()=>Promise.all([a.e(4631),a.e(7208),a.e(5596)]).then(a.bind(a,75596))),"SignIn"),R=(0,r.A)((()=>a.e(3350).then(a.bind(a,73350))),"Trust"),M=(0,r.A)((()=>a.e(9818).then(a.bind(a,89818))),"MobileApp"),D=(0,r.A)((()=>a.e(7529).then(a.bind(a,67529))),"AuthTokenCallback"),_=(0,r.A)((()=>Promise.all([a.e(4631),a.e(7208),a.e(1418)]).then(a.bind(a,11418))),"MagicLinkSent"),U=(0,r.A)((()=>a.e(1876).then(a.bind(a,41876))),"SignUpVerification"),P=(0,r.A)((()=>a.e(3621).then(a.bind(a,63621))),"CheckAuth"),L=(0,r.A)((()=>Promise.all([a.e(1396),a.e(7471)]).then(a.bind(a,86147))),"App"),K=(0,r.A)((()=>a.e(3736).then(a.bind(a,63736))),"GlobalStyles"),B=(0,r.A)((()=>a.e(683).then(a.bind(a,683))),"Notifications"),z=(0,r.A)((()=>Promise.all([a.e(7519),a.e(5794),a.e(8784)]).then(a.bind(a,38784)).then((e=>({default:e.AssistantAlerts})))),"AssistantAlerts"),F=(0,r.A)((()=>Promise.all([a.e(7519),a.e(5794),a.e(8784)]).then(a.bind(a,38784)).then((e=>({default:e.AssistantChat})))),"AssistantChat"),O=(0,r.A)((()=>a.e(7146).then(a.bind(a,57146))),"Webviews");window.envSettings.tracking?setTimeout((()=>{var e;const t=[!(null===(e=window)||void 0===e||null===(e=e.posthog)||void 0===e||!e.SentryIntegration)&&new window.posthog.SentryIntegration(window.posthog,"netdata-inc",5210883)].filter(Boolean);l.T({dsn:"https://43a4669badb04eee941ec8b242991df7@o382276.ingest.sentry.io/5210883",maxBreadcrumbs:100,release:"".concat(C.UU,"@").concat(C.rE),debug:!1,integrations:t,tracesSampleRate:.2,environment:window.envSettings.isAgent?"agent":window.envSettings.nodeEnv||"agent",denyUrls:[],autoSessionTracking:!1,beforeSend(e,t){var a;let{originalException:n={}}=t;if(!/netdata\.cloud/.test(null===e||void 0===e||null===(a=e.request)||void 0===a||null===(a=a.headers)||void 0===a?void 0:a.Referer))return null;if(!n)return e;const{response:r={},isCancel:o=!1}=n;if(o)return null;const{status:i}=r;return 400===i||422===i?e:i>=400&&i<=599?null:e},ignoreErrors:["Non-Error exception captured","Non-Error promise rejection captured","Request aborted",/ResizeObserver/,"timeout exceeded","this.get_config is not a function",/IndexSizeError/,"Invalid time value","not_found",/A mutation operation was attempted on a database that did not allow mutations/,/No data for this period/,/Network Error/]}),window.addEventListener("beforeunload",(function(){try{d.BF().getClient().getOptions().enabled=!1}catch(e){}}))}),500):console.log("Running in development mode version:",C.UU,C.rE);const j=(0,m.g)(g.H4,"light"),G=()=>null,W=()=>{const e=(0,p.J)();return n.createElement(i.bi,null,n.createElement(n.Suspense,{fallback:""},n.createElement(m.A,null,n.createElement(u.A,null,n.createElement(g.Ay,{fallback:j},n.createElement(n.Suspense,{fallback:""},n.createElement(K,{isScreenSmall:e}),n.createElement(B,null),n.createElement(z,null),n.createElement(F,null),n.createElement(s.rI,{className:"router",history:x,basename:v.Ay?v.sA:"/"},n.createElement(c.BV,null,n.createElement(c.qh,{path:"/webviews/*",element:n.createElement(G,null)}),n.createElement(c.qh,{path:"*",element:n.createElement(P,null)})),n.createElement(n.Suspense,{fallback:n.createElement(h.A,null)},n.createElement(c.BV,null,!v.Ay&&n.createElement(n.Fragment,null,n.createElement(c.qh,{path:"/sign-in",element:n.createElement(N,null)}),n.createElement(c.qh,{path:"/trust",element:n.createElement(R,null)}),n.createElement(c.qh,{path:"/sign-up",element:n.createElement(c.C5,{to:"/sign-in",replace:!0})}),n.createElement(c.qh,{path:"/sign-up/verify",element:n.createElement(U,null)}),n.createElement(c.qh,{path:"/sign-in/magic-link-sent",element:n.createElement(_,null)}),n.createElement(c.qh,{path:"/sign-in/mobile-app",element:n.createElement(M,null)}),n.createElement(c.qh,{path:"/webviews/*",element:n.createElement(O,null)})),n.createElement(c.qh,{path:"/cloud/origin/callback",element:n.createElement(D,null)}),n.createElement(c.qh,{path:"/redirects",element:n.createElement(T,null)}),n.createElement(c.qh,{path:"/spaces/test-form",element:n.createElement(U,null)}),n.createElement(c.qh,{path:"*",element:n.createElement(L,null)}))))))))))};var V;(0,o.H)(document.getElementById("app")).render(n.createElement(W,null)),"serviceWorker"in navigator&&window.addEventListener("load",(()=>{const e="".concat(window.envSettings.webpackPublicPath,"/sw.js");f?(function(e,t){fetch(e).then((a=>{const n=a.headers.get("content-type");404===a.status||null!=n&&-1===n.indexOf("javascript")?navigator.serviceWorker.ready.then((e=>{e.unregister().then((()=>{window.location.reload()}))})):A(e,t)})).catch((()=>{console.log("No internet connection found. App is running in offline mode.")}))}(e,V),navigator.serviceWorker.ready.then((()=>{console.log("This web app is being served cache-first by a service worker. To learn more, visit http://bit.ly/CRA-PWA")}))):A(e,V)}))},27752:(e,t,a)=>{"use strict";a(25440);a.p=window.envSettings.isAgent&&!window.envSettings.webpackPublicPath?window.envSettings.agentApiUrl+"/v2/":"".concat(window.envSettings.webpackPublicPath||"","/").replace(/([^:]\/)\/+/g,"$1")},98439:(e,t,a)=>{"use strict";a(62953);window.envSettings.tracking&&(window.posthog={},a.e(3624).then(a.bind(a,83624)).then((e=>{window.posthog=e.default,window.posthog.init(window.envSettings.posthogToken,{api_host:"https://app.posthog.com"})})),function(e,t,a,n,r){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var o=t.getElementsByTagName(a)[0],i=t.createElement(a);i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id=GTM-N6CBMJD",o.parentNode.insertBefore(i,o)}(window,document,"script","dataLayer"))},91069:(e,t,a)=>{"use strict";a.d(t,{t:()=>r});var n=a(78969);const r=e=>{let{spaceId:t}=e;return"".concat(n.P8,"/spaces/").concat(t,"/rooms?show_all=true")}},42634:()=>{}},e=>{e.O(0,[3524],(()=>{[3621,1396,7471].map(e.E)}),5);var t=t=>e(e.s=t);e.O(0,[3975,4292,2981,8637],(()=>(t(27752),t(98439),t(85919))));e.O()}]); \ No newline at end of file diff --git a/src/web/gui/v2/app.cb2e9f9a81cf9533384e.css b/src/web/gui/v2/app.cb2e9f9a81cf9533384e.css deleted file mode 100644 index 1dd170178..000000000 --- a/src/web/gui/v2/app.cb2e9f9a81cf9533384e.css +++ /dev/null @@ -1,2 +0,0 @@ -html{font-size:16px !important}body{margin:0}.react-grid-item{display:block;overflow-y:hidden;text-overflow:ellipsis;width:fit-content}.react-grid-item:hover{overflow-y:visible}.react-grid-item .netdata-container-with-legend{overflow:visible}.react-grid-item:hover{z-index:10}.react-grid-item>.react-resizable-handle::after{display:table-row;content:"";position:absolute;right:3px;bottom:3px;width:5px;height:5px;cursor:se-resize;border-right:1px solid rgba(0,0,0,0.4);border-bottom:1px solid rgba(0,0,0,0.4)}#hs-eu-cookie-confirmation{display:none} - diff --git a/src/web/gui/v2/apple-app-site-association b/src/web/gui/v2/apple-app-site-association deleted file mode 100644 index c4593e0c7..000000000 --- a/src/web/gui/v2/apple-app-site-association +++ /dev/null @@ -1,11 +0,0 @@ -{ - "applinks": { - "apps": [], - "details": [ - { - "appID": "2T8GZ986CU.cloud.netdata.ios", - "paths": [ "*" ] - } - ] - } -} diff --git a/src/web/gui/v2/bundlesManifest.6.json b/src/web/gui/v2/bundlesManifest.6.json deleted file mode 100644 index 96fc3d01b..000000000 --- a/src/web/gui/v2/bundlesManifest.6.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "app.css": "/app.cb2e9f9a81cf9533384e.css", - "app.js": "/app.08c9fe3ead1d43ff769b.js", - "runtime.js": "/runtime.ceccffb089cc539b1c1f.js", - "npm.react.dom.js": "/npm.react.dom.2994f1b4604bd8ce80f6.js", - "netdata.ui.js": "/netdata.ui.647a4c3303ee8ec0da64.js", - "netdata.charts.js": "/netdata.charts.fdfd27674ac5533bbcc2.js", - "8637.js": "/8637.0958494526e838a60d2b.js" -} \ No newline at end of file diff --git a/src/web/gui/v2/dashboard_v2.cmake b/src/web/gui/v2/dashboard_v2.cmake deleted file mode 100644 index 86e6e4c5d..000000000 --- a/src/web/gui/v2/dashboard_v2.cmake +++ /dev/null @@ -1,303 +0,0 @@ - - install(FILES src/web/gui/v2/1220.01d6bbaab869c74f4437.chunk.js -src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js -src/web/gui/v2/1396.56f70d7c659ac0b694cd.chunk.js.LICENSE.txt -src/web/gui/v2/1418.16d53ba5cce2c6a8143a.chunk.js -src/web/gui/v2/1782.d82eb301aa81b380dd0c.chunk.js -src/web/gui/v2/1839.a4196d2a87ac0fdd9f34.chunk.js -src/web/gui/v2/185.42bab351ba68de7ca4aa.chunk.js -src/web/gui/v2/1876.e610906417b961290730.chunk.js -src/web/gui/v2/195.4cdbea6af54d14a95949.chunk.js -src/web/gui/v2/2007.b33ce2b4b736228fd681.chunk.js -src/web/gui/v2/252.40edc9b0f6da1422f40b.chunk.js -src/web/gui/v2/3104.3b70865e21a81a616af3.chunk.js -src/web/gui/v2/3350.ae7151980981854dc3d1.chunk.js -src/web/gui/v2/3455.f9ca876de57244386773.chunk.js -src/web/gui/v2/3455.f9ca876de57244386773.chunk.js.LICENSE.txt -src/web/gui/v2/3621.01ee70ee9c311ac163d9.chunk.js -src/web/gui/v2/3624.bfeb1fdc3057ba82ddac.chunk.js -src/web/gui/v2/3736.e572adfdf7951f74a741.chunk.js -src/web/gui/v2/3750.4ad02f036f2a7c520b1c.chunk.js -src/web/gui/v2/3843.89070793921be1288bb5.css -src/web/gui/v2/3843.ffbb6f614ba4f7b77570.chunk.js -src/web/gui/v2/3968.483ca2ad3b300293e655.chunk.js -src/web/gui/v2/3D_PARTY_LICENSES.txt -src/web/gui/v2/4034.35199d2809d318eed690.chunk.js -src/web/gui/v2/4140.46221d08bcda08826c78.chunk.js -src/web/gui/v2/4140.89070793921be1288bb5.css -src/web/gui/v2/4414.590ba07d470ba2ce7dd0.chunk.js -src/web/gui/v2/4631.158982e127e11bdc6a45.chunk.js -src/web/gui/v2/4680.7d8122d91e9d4582836a.chunk.js -src/web/gui/v2/4958.5969fedc1ff7dc82775e.chunk.js -src/web/gui/v2/5246.07c5a1649f0805c140fe.chunk.js -src/web/gui/v2/5304.cc797fdd343c7e873b2f.chunk.js -src/web/gui/v2/5426.254557ad3e1f2d14ad29.chunk.js -src/web/gui/v2/5596.2036706750ff4028cff2.chunk.js -src/web/gui/v2/5598.07ff43a6b96bd41e8637.chunk.js -src/web/gui/v2/5700.b7c9908dc7f30a5a57e7.chunk.js -src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js -src/web/gui/v2/5709.c494eb62187917e2f2f6.chunk.js.LICENSE.txt -src/web/gui/v2/5794.252ff787d58d64eb4988.chunk.js -src/web/gui/v2/6008.3d0636fe17f4f6274485.chunk.js -src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js -src/web/gui/v2/6121.f7286809e53e1c6d655a.chunk.js.LICENSE.txt -src/web/gui/v2/6323.26d4d949c9b6f8674c2e.chunk.js -src/web/gui/v2/6331.89070793921be1288bb5.css -src/web/gui/v2/6331.c91b5d104cdff1be3b80.chunk.js -src/web/gui/v2/6384.0fad56b0bc902f186c98.chunk.js -src/web/gui/v2/6469.47926fa38028dc7d0d41.chunk.js -src/web/gui/v2/6469.89070793921be1288bb5.css -src/web/gui/v2/6661.72f782bd78fea8c2d836.chunk.js -src/web/gui/v2/6760.370b9780120c145da28f.chunk.js -src/web/gui/v2/683.02c173493ef257c210fa.chunk.js -src/web/gui/v2/683.cc9fa5f3bdc0bf3ab2fc.css -src/web/gui/v2/6944.ab3e70c9ac0f05013b5f.chunk.js -src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js -src/web/gui/v2/7144.382c341e09540fdebaa6.chunk.js.LICENSE.txt -src/web/gui/v2/7146.79304e386ac9238b7cf1.chunk.js -src/web/gui/v2/7170.5d6047bb6ce9d77d53db.chunk.js -src/web/gui/v2/7208.1d75cf5d007de32e403b.chunk.js -src/web/gui/v2/7304.ed4690ec296b59fbe7fd.chunk.js -src/web/gui/v2/7332.3acf93dcfa52c7f1bc18.chunk.js -src/web/gui/v2/7340.25dce1c5cc66b613700f.chunk.js -src/web/gui/v2/7436.1ebd371d70e6a87c5499.chunk.js -src/web/gui/v2/7471.f96c4d04a73fb7551c03.chunk.js -src/web/gui/v2/7487.89070793921be1288bb5.css -src/web/gui/v2/7487.db63c95c27d973a07d9b.chunk.js -src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js -src/web/gui/v2/749.e44087ac3a2e3a994318.chunk.js.LICENSE.txt -src/web/gui/v2/7519.7982a2e0fcdf82ba78dd.chunk.js -src/web/gui/v2/7529.658d363e12e73df83b60.chunk.js -src/web/gui/v2/7840.2f2023f2eb1dcc943d94.chunk.js -src/web/gui/v2/785.d016913841bcc0209d5b.chunk.js -src/web/gui/v2/7857.813ae058cca579e05462.chunk.js -src/web/gui/v2/7959.4f20f4b203e2bad8af39.chunk.js -src/web/gui/v2/8059.4fdc76bb2cac1f74b41b.chunk.js -src/web/gui/v2/8239.c85fc9f3599f198a9efb.chunk.js -src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js -src/web/gui/v2/8323.437406936b642e8f6cb3.chunk.js.LICENSE.txt -src/web/gui/v2/8323.e22de33686bb2f34063c.css -src/web/gui/v2/8505.c330f2104fefd71717da.chunk.js -src/web/gui/v2/86.2c88d4d37b88e2620051.chunk.js -src/web/gui/v2/8637.0958494526e838a60d2b.js -src/web/gui/v2/8637.0958494526e838a60d2b.js.LICENSE.txt -src/web/gui/v2/8784.a04e9c07186e1f057f56.chunk.js -src/web/gui/v2/8842.406028f523a00acb97bd.chunk.js -src/web/gui/v2/8910.019974f8675d8834dd07.chunk.js -src/web/gui/v2/8938.5116982f737a2ef85330.chunk.js -src/web/gui/v2/9292.cc5055091db9a0826933.chunk.js -src/web/gui/v2/934.24d6fdc5f60aa6493962.chunk.js -src/web/gui/v2/9400.6250bbf86c4fd3173de2.chunk.js -src/web/gui/v2/9473.4fd4742ffb6b5348bea8.chunk.js -src/web/gui/v2/963.35da4a3c4e49aac29dae.chunk.js -src/web/gui/v2/979.3e5fddf93c977e6c71c3.chunk.js -src/web/gui/v2/9818.3ce64e0b472412bfbc97.chunk.js -src/web/gui/v2/9843.93f8c71c64ef97b9905e.chunk.js -src/web/gui/v2/9912.702300c2dd9616289606.chunk.js -src/web/gui/v2/LICENSE.md -src/web/gui/v2/agent.html -src/web/gui/v2/allFiles.6.138.3.json -src/web/gui/v2/allFiles.6.json -src/web/gui/v2/app.08c9fe3ead1d43ff769b.js -src/web/gui/v2/app.cb2e9f9a81cf9533384e.css -src/web/gui/v2/apple-app-site-association -src/web/gui/v2/bundlesManifest.6.json -src/web/gui/v2/favicon.ico -src/web/gui/v2/index.html -src/web/gui/v2/local-agent.html -src/web/gui/v2/netdata.charts.fdfd27674ac5533bbcc2.js -src/web/gui/v2/netdata.ui.647a4c3303ee8ec0da64.js -src/web/gui/v2/netdata.ui.647a4c3303ee8ec0da64.js.LICENSE.txt -src/web/gui/v2/npm.react.dom.2994f1b4604bd8ce80f6.js -src/web/gui/v2/npm.react.dom.2994f1b4604bd8ce80f6.js.LICENSE.txt -src/web/gui/v2/registry-access.html -src/web/gui/v2/registry-alert-redirect.html -src/web/gui/v2/registry-hello.html -src/web/gui/v2/runtime.ceccffb089cc539b1c1f.js -src/web/gui/v2/sw.js COMPONENT netdata DESTINATION ${WEB_DEST}/v2) - install(FILES src/web/gui/v2/static/apple-app-site-association -src/web/gui/v2/static/splash.css COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static) - install(FILES src/web/gui/v2/static/email/img/clea_badge.png -src/web/gui/v2/static/email/img/clea_siren.png -src/web/gui/v2/static/email/img/community_icon.png -src/web/gui/v2/static/email/img/configure_icon.png -src/web/gui/v2/static/email/img/crit_badge.png -src/web/gui/v2/static/email/img/crit_siren.png -src/web/gui/v2/static/email/img/flood_siren.png -src/web/gui/v2/static/email/img/full_logo.png -src/web/gui/v2/static/email/img/header.png -src/web/gui/v2/static/email/img/isotype_600.png -src/web/gui/v2/static/email/img/label_critical.png -src/web/gui/v2/static/email/img/label_recovered.png -src/web/gui/v2/static/email/img/label_warning.png -src/web/gui/v2/static/email/img/reachability_siren.png -src/web/gui/v2/static/email/img/warn_badge.png -src/web/gui/v2/static/email/img/warn_siren.png COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static/email/img) - install(FILES src/web/gui/v2/static/img/list-style-image.svg -src/web/gui/v2/static/img/new-dashboard.svg -src/web/gui/v2/static/img/no-filter-results.png -src/web/gui/v2/static/img/no-nodes-room.svg -src/web/gui/v2/static/img/rack.png COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static/img) - install(FILES src/web/gui/v2/static/img/logos/os/alpine.svg -src/web/gui/v2/static/img/logos/os/arch.svg -src/web/gui/v2/static/img/logos/os/centos.svg -src/web/gui/v2/static/img/logos/os/coreos.svg -src/web/gui/v2/static/img/logos/os/debian.svg -src/web/gui/v2/static/img/logos/os/docker.svg -src/web/gui/v2/static/img/logos/os/fedora.svg -src/web/gui/v2/static/img/logos/os/freebsd.svg -src/web/gui/v2/static/img/logos/os/freenas.svg -src/web/gui/v2/static/img/logos/os/gentoo.svg -src/web/gui/v2/static/img/logos/os/kubernetes.svg -src/web/gui/v2/static/img/logos/os/linux-small.svg -src/web/gui/v2/static/img/logos/os/linux.svg -src/web/gui/v2/static/img/logos/os/macos.svg -src/web/gui/v2/static/img/logos/os/manjaro.svg -src/web/gui/v2/static/img/logos/os/openstack.svg -src/web/gui/v2/static/img/logos/os/opensuse.svg -src/web/gui/v2/static/img/logos/os/openwrt.svg -src/web/gui/v2/static/img/logos/os/oracle.svg -src/web/gui/v2/static/img/logos/os/pfsense.svg -src/web/gui/v2/static/img/logos/os/placeholder.svg -src/web/gui/v2/static/img/logos/os/raspberry-pi.svg -src/web/gui/v2/static/img/logos/os/redhat.svg -src/web/gui/v2/static/img/logos/os/rocky.svg -src/web/gui/v2/static/img/logos/os/suse.svg -src/web/gui/v2/static/img/logos/os/ubuntu.svg COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static/img/logos/os) - install(FILES src/web/gui/v2/static/img/logos/services/access-point.svg -src/web/gui/v2/static/img/logos/services/activemq.svg -src/web/gui/v2/static/img/logos/services/adaptec.svg -src/web/gui/v2/static/img/logos/services/alerta.svg -src/web/gui/v2/static/img/logos/services/apache.svg -src/web/gui/v2/static/img/logos/services/apc.svg -src/web/gui/v2/static/img/logos/services/aws-sns.svg -src/web/gui/v2/static/img/logos/services/aws.svg -src/web/gui/v2/static/img/logos/services/beanstalkd.svg -src/web/gui/v2/static/img/logos/services/boinc.svg -src/web/gui/v2/static/img/logos/services/btrfs.svg -src/web/gui/v2/static/img/logos/services/ceph.svg -src/web/gui/v2/static/img/logos/services/chrony.svg -src/web/gui/v2/static/img/logos/services/cloud.svg -src/web/gui/v2/static/img/logos/services/concul.svg -src/web/gui/v2/static/img/logos/services/consul.svg -src/web/gui/v2/static/img/logos/services/container.svg -src/web/gui/v2/static/img/logos/services/couchdb.svg -src/web/gui/v2/static/img/logos/services/cups.svg -src/web/gui/v2/static/img/logos/services/data-encryption.svg -src/web/gui/v2/static/img/logos/services/ddos.svg -src/web/gui/v2/static/img/logos/services/discord.svg -src/web/gui/v2/static/img/logos/services/dns.svg -src/web/gui/v2/static/img/logos/services/docker.svg -src/web/gui/v2/static/img/logos/services/dovecot.svg -src/web/gui/v2/static/img/logos/services/elasticsearch.svg -src/web/gui/v2/static/img/logos/services/email.svg -src/web/gui/v2/static/img/logos/services/exim.svg -src/web/gui/v2/static/img/logos/services/fail2ban.svg -src/web/gui/v2/static/img/logos/services/flock.svg -src/web/gui/v2/static/img/logos/services/fluentd.svg -src/web/gui/v2/static/img/logos/services/fping.svg -src/web/gui/v2/static/img/logos/services/freeradius.svg -src/web/gui/v2/static/img/logos/services/fronius.svg -src/web/gui/v2/static/img/logos/services/gnu-freeipmi.svg -src/web/gui/v2/static/img/logos/services/golang.svg -src/web/gui/v2/static/img/logos/services/grafana.svg -src/web/gui/v2/static/img/logos/services/graphite.svg -src/web/gui/v2/static/img/logos/services/haproxy.svg -src/web/gui/v2/static/img/logos/services/hub.svg -src/web/gui/v2/static/img/logos/services/icecast.svg -src/web/gui/v2/static/img/logos/services/influxdb.svg -src/web/gui/v2/static/img/logos/services/ipfs.svg -src/web/gui/v2/static/img/logos/services/irc.svg -src/web/gui/v2/static/img/logos/services/isc.svg -src/web/gui/v2/static/img/logos/services/kafka.svg -src/web/gui/v2/static/img/logos/services/kairosdb.svg -src/web/gui/v2/static/img/logos/services/kavenegar.svg -src/web/gui/v2/static/img/logos/services/key-file.svg -src/web/gui/v2/static/img/logos/services/kubernetes.svg -src/web/gui/v2/static/img/logos/services/libreswan.svg -src/web/gui/v2/static/img/logos/services/libvirt.svg -src/web/gui/v2/static/img/logos/services/lighthttpd.svg -src/web/gui/v2/static/img/logos/services/linux.svg -src/web/gui/v2/static/img/logos/services/litespeed.svg -src/web/gui/v2/static/img/logos/services/lm-sensors.svg -src/web/gui/v2/static/img/logos/services/load-balancer.svg -src/web/gui/v2/static/img/logos/services/log-file.svg -src/web/gui/v2/static/img/logos/services/logstash.svg -src/web/gui/v2/static/img/logos/services/lxd.svg -src/web/gui/v2/static/img/logos/services/mariadb.svg -src/web/gui/v2/static/img/logos/services/memcached.svg -src/web/gui/v2/static/img/logos/services/messagebird.svg -src/web/gui/v2/static/img/logos/services/mongodb.svg -src/web/gui/v2/static/img/logos/services/monit.svg -src/web/gui/v2/static/img/logos/services/monitoring.svg -src/web/gui/v2/static/img/logos/services/mysql.svg -src/web/gui/v2/static/img/logos/services/netfilter.svg -src/web/gui/v2/static/img/logos/services/network-protocol.svg -src/web/gui/v2/static/img/logos/services/network.svg -src/web/gui/v2/static/img/logos/services/nfs.svg -src/web/gui/v2/static/img/logos/services/nginx-plus.svg -src/web/gui/v2/static/img/logos/services/nginx.svg -src/web/gui/v2/static/img/logos/services/notification-bell.svg -src/web/gui/v2/static/img/logos/services/nsd.svg -src/web/gui/v2/static/img/logos/services/ntpd.svg -src/web/gui/v2/static/img/logos/services/nut.svg -src/web/gui/v2/static/img/logos/services/nvidia.svg -src/web/gui/v2/static/img/logos/services/openldap.svg -src/web/gui/v2/static/img/logos/services/opensips.svg -src/web/gui/v2/static/img/logos/services/opentsdb.svg -src/web/gui/v2/static/img/logos/services/openvpn.svg -src/web/gui/v2/static/img/logos/services/openzfs.svg -src/web/gui/v2/static/img/logos/services/oracle.svg -src/web/gui/v2/static/img/logos/services/pagerduty.svg -src/web/gui/v2/static/img/logos/services/php-fpm.svg -src/web/gui/v2/static/img/logos/services/placeholder.svg -src/web/gui/v2/static/img/logos/services/postfix.svg -src/web/gui/v2/static/img/logos/services/postgresql.svg -src/web/gui/v2/static/img/logos/services/powerdns.svg -src/web/gui/v2/static/img/logos/services/processor.svg -src/web/gui/v2/static/img/logos/services/prometheus.svg -src/web/gui/v2/static/img/logos/services/prowl.svg -src/web/gui/v2/static/img/logos/services/proxysql.svg -src/web/gui/v2/static/img/logos/services/puppet.svg -src/web/gui/v2/static/img/logos/services/pushbullet.svg -src/web/gui/v2/static/img/logos/services/pushover.svg -src/web/gui/v2/static/img/logos/services/qos.svg -src/web/gui/v2/static/img/logos/services/rabbitmq.svg -src/web/gui/v2/static/img/logos/services/raspberry-pi.svg -src/web/gui/v2/static/img/logos/services/redis.svg -src/web/gui/v2/static/img/logos/services/rethinkdb.svg -src/web/gui/v2/static/img/logos/services/retroshare.svg -src/web/gui/v2/static/img/logos/services/rocketchat.svg -src/web/gui/v2/static/img/logos/services/samba.svg -src/web/gui/v2/static/img/logos/services/server-connection.svg -src/web/gui/v2/static/img/logos/services/slack.svg -src/web/gui/v2/static/img/logos/services/sma.svg -src/web/gui/v2/static/img/logos/services/smstools3.svg -src/web/gui/v2/static/img/logos/services/solr.svg -src/web/gui/v2/static/img/logos/services/spigot.svg -src/web/gui/v2/static/img/logos/services/springboot.svg -src/web/gui/v2/static/img/logos/services/squid.svg -src/web/gui/v2/static/img/logos/services/statsd.svg -src/web/gui/v2/static/img/logos/services/stiebel.svg -src/web/gui/v2/static/img/logos/services/systemd.svg -src/web/gui/v2/static/img/logos/services/telegram.svg -src/web/gui/v2/static/img/logos/services/temperature.svg -src/web/gui/v2/static/img/logos/services/tomcat.svg -src/web/gui/v2/static/img/logos/services/tor.svg -src/web/gui/v2/static/img/logos/services/traefik.svg -src/web/gui/v2/static/img/logos/services/twilio.svg -src/web/gui/v2/static/img/logos/services/unbound.svg -src/web/gui/v2/static/img/logos/services/uwsgi.svg -src/web/gui/v2/static/img/logos/services/varnish.svg -src/web/gui/v2/static/img/logos/services/veritas.svg -src/web/gui/v2/static/img/logos/services/xen.svg COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static/img/logos/services) - install(FILES src/web/gui/v2/static/img/mail/isotype.png -src/web/gui/v2/static/img/mail/isotype.svg -src/web/gui/v2/static/img/mail/logotype.png -src/web/gui/v2/static/img/mail/logotype.svg COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static/img/mail) - install(FILES src/web/gui/v2/static/site/pages/holding-page-503/holding-page-503.css -src/web/gui/v2/static/site/pages/holding-page-503/holding-page-503.svg -src/web/gui/v2/static/site/pages/holding-page-503/index.html -src/web/gui/v2/static/site/pages/holding-page-503/multiple-logos-group.svg -src/web/gui/v2/static/site/pages/holding-page-503/netdata-logo-white.svg -src/web/gui/v2/static/site/pages/holding-page-503/reset.svg COMPONENT netdata DESTINATION ${WEB_DEST}/v2/static/site/pages/holding-page-503) diff --git a/src/web/gui/v2/favicon.ico b/src/web/gui/v2/favicon.ico deleted file mode 100644 index 59db5011b..000000000 Binary files a/src/web/gui/v2/favicon.ico and /dev/null differ diff --git a/src/web/gui/v2/index.html b/src/web/gui/v2/index.html deleted file mode 100644 index d3516de55..000000000 --- a/src/web/gui/v2/index.html +++ /dev/null @@ -1,245 +0,0 @@ -Netdata Agent Console

    Welcome to Netdata

    Loading latest Netdata UI...

    We couldn't load the latest Netdata UI. You can try again
    Or you can load the old single node dashboard or a local copy of Netdata UI
    \ No newline at end of file diff --git a/src/web/gui/v2/local-agent.html b/src/web/gui/v2/local-agent.html deleted file mode 100644 index d3516de55..000000000 --- a/src/web/gui/v2/local-agent.html +++ /dev/null @@ -1,245 +0,0 @@ -Netdata Agent Console

    Welcome to Netdata

    Loading latest Netdata UI...

    We couldn't load the latest Netdata UI. You can try again
    Or you can load the old single node dashboard or a local copy of Netdata UI
    \ No newline at end of file diff --git a/src/web/gui/v2/netdata.charts.fdfd27674ac5533bbcc2.js b/src/web/gui/v2/netdata.charts.fdfd27674ac5533bbcc2.js deleted file mode 100644 index 44ca83262..000000000 --- a/src/web/gui/v2/netdata.charts.fdfd27674ac5533bbcc2.js +++ /dev/null @@ -1 +0,0 @@ -!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="a63eb6fa-d4c6-497f-9719-f27eca81b0d5",e._sentryDebugIdIdentifier="sentry-dbid-a63eb6fa-d4c6-497f-9719-f27eca81b0d5")}catch(e){}}();var _global="undefined"!==typeof window?window:"undefined"!==typeof global?global:"undefined"!==typeof self?self:{};_global.SENTRY_RELEASE={id:"30b1ba65cc8722be7e184f4a401fb43e6b21634d"},(self.webpackChunkcloud_frontend=self.webpackChunkcloud_frontend||[]).push([[2981],{19318:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=o(r(68652)),n=r(28973),s=o(r(58370));function o(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function l(e){for(var t=1;t{function r(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function i(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var i=u(r(68652)),n=r(28973),s=u(r(58370)),o=u(r(85872)),a=r(86263),l=u(r(99906)),c=u(r(19543));function u(e){return e&&e.__esModule?e:{default:e}}function f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function d(e){for(var t=1;t{var i,n,s,o=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var i={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var o=n?Object.getOwnPropertyDescriptor(e,s):null;o&&(o.get||o.set)?Object.defineProperty(i,s,o):i[s]=e[s]}return i.default=e,r&&r.set(e,i),i}(r(19018));function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function c(e){for(var t=1;te.x+e.w||t.x+t.we.y+e.h)},getColorShade:function(e,t){(e=String(e).replace(/[^0-9a-f]/gi,"")).length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;for(var r="#",i=0;i<3;i++){var n=parseInt(e.substr(2*i,2),16);r+=("00"+(n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16))).substr(n.length)}return r},initSegmentColors:function(e){for(var t=e.options.data.content,r=e.options.misc.colors.segments,i=[],n=0;n=t.value?(i.push(e[u]),n+=e[u].value,s++):(e[u].isGrouped=!1,r.push(e[u]))}else if("percentage"===t.valueType){var f=l.getTotalPieSize(e);for(u=0;u99?99:o)<0?0:o;var l=i0&&(l-=c)}a=Math.floor(l/100*o)/2}else a=parseInt(t.pieOuterRadius,10);/%/.test(t.pieInnerRadius)?(o=(o=(o=parseInt(t.pieInnerRadius.replace(/[\D]/,""),10))>99?99:o)<0?0:o,s=Math.floor(a/100*o)):s=parseInt(t.pieInnerRadius,10),e.innerRadius=s,e.outerRadius=a},getTotalPieSize:function(e){for(var t=0,r=0;rt.label.toLowerCase()?1:-1}));break;case"label-desc":t.sort((function(e,t){return e.label.toLowerCase()n.truncation.truncateLength&&(r=e.label.substring(0,n.truncation.truncateLength)+"..."),r})).style("font-size",n.mainLabel.fontSize).style("font-family",n.mainLabel.font).style("font-weight",n.mainLabel.fontWeight).style("fill",(function(t,r){return"segment"===n.mainLabel.color?e.options.colors[r]:n.mainLabel.color})),i.percentage&&o.append("text").attr("id",(function(r,i){return e.cssPrefix+"segmentPercentage"+i+"-"+t})).attr("class",e.cssPrefix+"segmentPercentage-"+t).text((function(e,t){var r=e.percentage;return n.formatter?(a.index=t,a.part="percentage",a.value=e.value,a.label=e.percentage,r=n.formatter(a)):r+="%",r})).style("font-size",n.percentage.fontSize).style("font-family",n.percentage.font).style("font-weight",n.percentage.fontWeight).style("fill",n.percentage.color),i.value&&o.append("text").attr("id",(function(r,i){return e.cssPrefix+"segmentValue"+i+"-"+t})).attr("class",e.cssPrefix+"segmentValue-"+t).text((function(e,t){return a.index=t,a.part="value",a.value=e.value,a.label=e.value,a.realLabel=e.label,n.formatter?n.formatter(a,e.value):e.value})).style("font-size",n.value.fontSize).style("font-family",n.value.font).style("font-weight",n.value.fontWeight).style("fill",n.value.color)},positionLabelElements:function(e,t,r){u["dimensions-"+t]=[],e.__labels[t].each((function(r,i){var n=o.select(this).selectAll("."+e.cssPrefix+"segmentMainLabel-"+t),s=o.select(this).selectAll("."+e.cssPrefix+"segmentPercentage-"+t),a=o.select(this).selectAll("."+e.cssPrefix+"segmentValue-"+t);u["dimensions-"+t].push({mainLabel:null!==n.node()?n.node().getBBox():null,percentage:null!==s.node()?s.node().getBBox():null,value:null!==a.node()?a.node().getBBox():null})}));var i=5,n=u["dimensions-"+t];switch(r){case"label-value1":e.svg.selectAll("."+e.cssPrefix+"segmentValue-"+t).attr("dx",(function(e,t){return n[t].mainLabel.width+i}));break;case"label-value2":e.svg.selectAll("."+e.cssPrefix+"segmentValue-"+t).attr("dy",(function(e,t){return n[t].mainLabel.height}));break;case"label-percentage1":e.svg.selectAll("."+e.cssPrefix+"segmentPercentage-"+t).attr("dx",(function(e,t){return n[t].mainLabel.width+i}));break;case"label-percentage2":e.svg.selectAll("."+e.cssPrefix+"segmentPercentage-"+t).attr("dx",(function(e,t){return n[t].mainLabel.width/2-n[t].percentage.width/2})).attr("dy",(function(e,t){return n[t].mainLabel.height}))}},computeLabelLinePositions:function(e){e.lineCoordGroups=[],e.__labels.outer.each((function(t,r){return u.computeLinePosition(e,r)}))},computeLinePosition:function(e,t){var r,i,n,s,o=f.getSegmentAngle(t,e.options.data.content,e.totalSize,{midpoint:!0}),a=l.rotate(e.pieCenter.x,e.pieCenter.y-e.outerRadius,e.pieCenter.x,e.pieCenter.y,o),c=e.outerLabelGroupData[t].h/5,u=6,d=Math.floor(o/90),p=4;switch(2===d&&180===o&&(d=1),d){case 0:r=e.outerLabelGroupData[t].x-u-(e.outerLabelGroupData[t].x-u-a.x)/2,i=e.outerLabelGroupData[t].y+(a.y-e.outerLabelGroupData[t].y)/p,n=e.outerLabelGroupData[t].x-u,s=e.outerLabelGroupData[t].y-c;break;case 1:r=a.x+(e.outerLabelGroupData[t].x-a.x)/p,i=a.y+(e.outerLabelGroupData[t].y-a.y)/p,n=e.outerLabelGroupData[t].x-u,s=e.outerLabelGroupData[t].y-c;break;case 2:var b=e.outerLabelGroupData[t].x+e.outerLabelGroupData[t].w+u;r=a.x-(a.x-b)/p,i=a.y+(e.outerLabelGroupData[t].y-a.y)/p,n=e.outerLabelGroupData[t].x+e.outerLabelGroupData[t].w+u,s=e.outerLabelGroupData[t].y-c;break;case 3:var m=e.outerLabelGroupData[t].x+e.outerLabelGroupData[t].w+u;r=m+(a.x-m)/p,i=e.outerLabelGroupData[t].y+(a.y-e.outerLabelGroupData[t].y)/p,n=e.outerLabelGroupData[t].x+e.outerLabelGroupData[t].w+u,s=e.outerLabelGroupData[t].y-c}"straight"===e.options.labels.lines.style?e.lineCoordGroups[t]=[{x:a.x,y:a.y},{x:n,y:s}]:e.lineCoordGroups[t]=[{x:a.x,y:a.y},{x:r,y:i},{x:n,y:s}]},addLabelLines:function(e){var t=e.svg.insert("g","."+e.cssPrefix+"pieChart").attr("class",e.cssPrefix+"lineGroups").style("opacity",1).selectAll("."+e.cssPrefix+"lineGroup").data(e.lineCoordGroups).enter().append("g").attr("class",e.cssPrefix+"lineGroup"),r=o.line().curve(o.curveBasis).x((function(e){return e.x})).y((function(e){return e.y}));t.append("path").attr("d",r).attr("stroke",(function(t,r){return"segment"===e.options.labels.lines.color?e.options.colors[r]:e.options.labels.lines.color})).attr("stroke-width",1).attr("fill","none").style("opacity",(function(t,r){var i=e.options.labels.outer.hideWhenLessThanPercentage;return null!==i&&t.percentage0){var u=f.getSegmentAngle(i,e.options.data.content,e.totalSize,{midpoint:!0}),d=l.translate(e.pieCenter.x,e.pieCenter.y,e.innerRadius,u);c.x=d.x,c.y=d.y}var p=s.getDimensions(e.cssPrefix+"labelGroup"+i+"-inner"),b=p.w/2,m=p.h/4;n=c.x+(e.lineCoordGroups[i][0].x-c.x)/1.8,o=c.y+(e.lineCoordGroups[i][0].y-c.y)/1.8,n-=b,o+=m}return"translate("+n+","+o+")"}))},getIncludes:function(e){var t=!1,r=!1,i=!1;switch(e){case"label":t=!0;break;case"value":r=!0;break;case"percentage":i=!0;break;case"label-value1":case"label-value2":t=!0,r=!0;break;case"label-percentage1":case"label-percentage2":t=!0,i=!0}return{mainLabel:t,value:r,percentage:i}},computeOuterLabelCoords:function(e){e.__labels.outer.each((function(t,r){return u.getIdealOuterLabelPositions(e,r)})),u.resolveOuterLabelCollisions(e)},resolveOuterLabelCollisions:function(e){if("none"!==e.options.labels.outer.format){var t=e.options.data.content.length;u.checkConflict(e,0,"clockwise",t),u.checkConflict(e,t-1,"anticlockwise",t)}},checkConflict:function(e,t,r,i){var n,o;if(!(i<=1)){var a=e.outerLabelGroupData[t].hs;if(("clockwise"!==r||"right"===a)&&("anticlockwise"!==r||"left"===a)){var l="clockwise"===r?t+1:t-1,c=e.outerLabelGroupData[t],f=e.outerLabelGroupData[l],d={labelHeights:e.outerLabelGroupData[0].h,center:e.pieCenter,lineLength:e.outerRadius+e.options.labels.outer.pieDistance,heightChange:e.outerLabelGroupData[0].h+1};if("clockwise"===r){for(n=0;n<=t;n++)if(o=e.outerLabelGroupData[n],!u.isLabelHidden(e,n)&&s.rectIntersect(o,f)){u.adjustLabelPos(e,l,c,d);break}}else for(n=i-1;n>=t;n--)if(o=e.outerLabelGroupData[n],!u.isLabelHidden(e,n)&&s.rectIntersect(o,f)){u.adjustLabelPos(e,l,c,d);break}u.checkConflict(e,l,r,i)}}},isLabelHidden:function(e,t){var r=e.options.labels.outer.hideWhenLessThanPercentage;return null!==r&&d.percentageMath.abs(s)?Math.sqrt(i.lineLength*i.lineLength-s*s):Math.sqrt(s*s-i.lineLength*i.lineLength),o="right"===r.hs?i.center.x+n:i.center.x-n-e.outerLabelGroupData[t].w,e.outerLabelGroupData[t].x=o,e.outerLabelGroupData[t].y=a},getIdealOuterLabelPositions:function(e,t){var r=e.svg.select("#"+e.cssPrefix+"labelGroup"+t+"-outer").node();if(r){var i=r.getBBox(),n=f.getSegmentAngle(t,e.options.data.content,e.totalSize,{midpoint:!0}),s=e.pieCenter.x,o=e.pieCenter.y-(e.outerRadius+e.options.labels.outer.pieDistance),a=l.rotate(s,o,e.pieCenter.x,e.pieCenter.y,n),c="right";n>180?(a.x-=i.width+8,c="left"):a.x+=8,e.outerLabelGroupData[t]={x:a.x,y:a.y,w:i.width,h:i.height,hs:c}}}},f={effectMap:{none:o.easeLinear,bounce:o.easeBounce,linear:o.easeLinear,sin:o.easeSin,elastic:o.easeElastic,back:o.easeBack,quad:o.easeQuad,circle:o.easeCircle,exp:o.easeExp},create:function(e){var t=e.pieCenter,r=e.options.colors,i=(e.options.effects.load,e.options.misc.colors.segmentStroke),n=e.svg.insert("g","#"+e.cssPrefix+"title").attr("transform",(function(){return l.getPieTranslateCenter(t)})).attr("class",e.cssPrefix+"pieChart"),s=o.arc().innerRadius(e.innerRadius).outerRadius(e.outerRadius).startAngle(0).endAngle((function(t){return t.value/e.totalSize*2*Math.PI}));n.selectAll("."+e.cssPrefix+"arc").data(e.options.data.content).enter().append("g").attr("class",e.cssPrefix+"arc").append("path").attr("id",(function(t,r){return e.cssPrefix+"segment"+r})).attr("fill",(function(t,i){var n=r[i];return e.options.misc.gradient.enabled&&(n="url(#"+e.cssPrefix+"grad"+i+")"),n})).style("stroke",i).style("stroke-width",1).attr("data-index",(function(e,t){return t})).attr("d",s),e.svg.selectAll("g."+e.cssPrefix+"arc").attr("transform",(function(t,r){var i=0;return r>0&&(i=f.getSegmentAngle(r-1,e.options.data.content,e.totalSize)),"rotate("+i+")"})),e.arc=s},addGradients:function(e){var t=e.svg.append("defs").selectAll("radialGradient").data(e.options.data.content).enter().append("radialGradient").attr("gradientUnits","userSpaceOnUse").attr("cx",0).attr("cy",0).attr("r","120%").attr("id",(function(t,r){return e.cssPrefix+"grad"+r}));t.append("stop").attr("offset","0%").style("stop-color",(function(t,r){return e.options.colors[r]})),t.append("stop").attr("offset",e.options.misc.gradient.percentage+"%").style("stop-color",e.options.misc.gradient.color)},addSegmentEventHandlers:function(e){var t=e.svg.selectAll("."+e.cssPrefix+"arc");(t=t.merge(e.__labels.inner.merge(e.__labels.outer))).on("click",(function(){var t,r=o.select(this);if(r.attr("class")===e.cssPrefix+"arc")t=r.select("path");else{var i=r.attr("data-index");t=o.select("#"+e.cssPrefix+"segment"+i)}var n=t.attr("class")===e.cssPrefix+"expanded";f.onSegmentEvent(e,e.options.callbacks.onClickSegment,t,n),"none"!==e.options.effects.pullOutSegmentOnClick.effect&&(n?f.closeSegment(e,t.node()):f.openSegment(e,t.node()))})),t.on("mouseover",(function(){var t,r,i=o.select(this);if(i.attr("class")===e.cssPrefix+"arc"?t=i.select("path"):(r=i.attr("data-index"),t=o.select("#"+e.cssPrefix+"segment"+r)),e.options.effects.highlightSegmentOnMouseover){r=t.attr("data-index");var n=e.options.colors[r];t.style("fill",s.getColorShade(n,e.options.effects.highlightLuminosity))}e.options.tooltips.enabled&&(r=t.attr("data-index"),b.showTooltip(e,r));var a=t.attr("class")===e.cssPrefix+"expanded";f.onSegmentEvent(e,e.options.callbacks.onMouseoverSegment,t,a)})),t.on("mousemove",(function(){b.moveTooltip(e)})),t.on("mouseout",(function(){var t,r,i=o.select(this);if(i.attr("class")===e.cssPrefix+"arc"?t=i.select("path"):(r=i.attr("data-index"),t=o.select("#"+e.cssPrefix+"segment"+r)),e.options.effects.highlightSegmentOnMouseover){r=t.attr("data-index");var n=e.options.colors[r];e.options.misc.gradient.enabled&&(n="url(#"+e.cssPrefix+"grad"+r+")"),t.style("fill",n)}e.options.tooltips.enabled&&(r=t.attr("data-index"),b.hideTooltip(e,r));var s=t.attr("class")===e.cssPrefix+"expanded";f.onSegmentEvent(e,e.options.callbacks.onMouseoutSegment,t,s)}))},onSegmentEvent:function(e,t,r,i){if(s.isFunction(t)){var n=parseInt(r.attr("data-index"),10);t({segment:r.node(),index:n,expanded:i,data:e.options.data.content[n]})}},openSegment:function(e,t){e.isOpeningSegment||(e.isOpeningSegment=!0,f.maybeCloseOpenSegment(e),o.select(t).transition().ease(f.effectMap[e.options.effects.pullOutSegmentOnClick.effect]).duration(e.options.effects.pullOutSegmentOnClick.speed).attr("transform",(function(t,r){var i=e.arc.centroid(t),n=i[0],s=i[1],o=Math.sqrt(n*n+s*s),a=parseInt(e.options.effects.pullOutSegmentOnClick.size,10);return"translate("+n/o*a+","+s/o*a+")"})).on("end",(function(r,i){e.currentlyOpenSegment=t,e.isOpeningSegment=!1,o.select(t).attr("class",e.cssPrefix+"expanded")})))},maybeCloseOpenSegment:function(e){"undefined"!==typeof e&&e.svg.selectAll("."+e.cssPrefix+"expanded").size()>0&&f.closeSegment(e,e.svg.select("."+e.cssPrefix+"expanded").node())},closeSegment:function(e,t){o.select(t).transition().duration(400).attr("transform","translate(0,0)").on("end",(function(r,i){o.select(t).attr("class",""),e.currentlyOpenSegment=null}))},getCentroid:function(e){var t=e.getBBox();return{x:t.x+t.width/2,y:t.y+t.height/2}},getSegmentAngle:function(e,t,r,i){var n,s=a({compounded:!0,midpoint:!1},i),o=t[e].value;if(s.compounded){n=0;for(var l=0;l<=e;l++)n+=t[l].value}"undefined"===typeof n&&(n=o);var c=n/r*360;return s.midpoint&&(c-=o/r*360/2),c}},p={offscreenCoord:-1e4,addTitle:function(e){e.__title=e.svg.selectAll("."+e.cssPrefix+"title").data([e.options.header.title]).enter().append("text").text((function(e){return e.text})).attr("id",e.cssPrefix+"title").attr("class",e.cssPrefix+"title").attr("x",p.offscreenCoord).attr("y",p.offscreenCoord).attr("text-anchor",(function(){return"top-center"===e.options.header.location||"pie-center"===e.options.header.location?"middle":"left"})).attr("fill",(function(e){return e.color})).style("font-size",(function(e){return e.fontSize})).style("font-weight",(function(e){return e.fontWeight})).style("font-family",(function(e){return e.font}))},positionTitle:function(e){var t,r=e.textComponents,i=e.options.header.location,n=e.options.misc.canvasPadding,s=e.options.size.canvasWidth,o=e.options.header.titleSubtitlePadding;t="top-left"===i?n.left:(s-n.right)/2+n.left,t+=e.options.misc.pieCenterOffset.x;var a=n.top+r.title.h;"pie-center"===i&&(a=e.pieCenter.y,r.subtitle.exists?a=a-(r.title.h+o+r.subtitle.h)/2+r.title.h:a+=r.title.h/4),e.__title.attr("x",t).attr("y",a)},addSubtitle:function(e){var t=e.options.header.location;e.__subtitle=e.svg.selectAll("."+e.cssPrefix+"subtitle").data([e.options.header.subtitle]).enter().append("text").text((function(e){return e.text})).attr("x",p.offscreenCoord).attr("y",p.offscreenCoord).attr("id",e.cssPrefix+"subtitle").attr("class",e.cssPrefix+"subtitle").attr("text-anchor",(function(){return"top-center"===t||"pie-center"===t?"middle":"left"})).attr("fill",(function(e){return e.color})).style("font-size",(function(e){return e.fontSize})).style("font-weight",(function(e){return e.fontWeight})).style("font-family",(function(e){return e.font}))},positionSubtitle:function(e){var t,r=e.options.misc.canvasPadding,i=e.options.size.canvasWidth;t="top-left"===e.options.header.location?r.left:(i-r.right)/2+r.left,t+=e.options.misc.pieCenterOffset.x;var n=p.getHeaderHeight(e);e.__subtitle.attr("x",t).attr("y",n)},addFooter:function(e){e.__footer=e.svg.selectAll("."+e.cssPrefix+"footer").data([e.options.footer]).enter().append("text").text((function(e){return e.text})).attr("x",p.offscreenCoord).attr("y",p.offscreenCoord).attr("id",e.cssPrefix+"footer").attr("class",e.cssPrefix+"footer").attr("text-anchor",(function(){var t="left";return"bottom-center"===e.options.footer.location?t="middle":"bottom-right"===e.options.footer.location&&(t="left"),t})).attr("fill",(function(e){return e.color})).style("font-size",(function(e){return e.fontSize})).style("font-weight",(function(e){return e.fontWeight})).style("font-family",(function(e){return e.font}))},positionFooter:function(e){var t,r=e.options.footer.location,i=e.textComponents.footer.w,n=e.options.size.canvasWidth,s=e.options.size.canvasHeight,o=e.options.misc.canvasPadding;t="bottom-left"===r?o.left:"bottom-right"===r?n-i-o.right:n/2,e.__footer.attr("x",t).attr("y",s-o.bottom)},getHeaderHeight:function(e){var t;if(e.textComponents.title.exists){var r=e.textComponents.title.h+e.options.header.titleSubtitlePadding+e.textComponents.subtitle.h;t="pie-center"===e.options.header.location?e.pieCenter.y-r/2+r:r+e.options.misc.canvasPadding.top}else if("pie-center"===e.options.header.location){var i=e.options.misc.canvasPadding.bottom+e.textComponents.footer.h;t=(e.options.size.canvasHeight-i)/2+e.options.misc.canvasPadding.top+e.textComponents.subtitle.h/2}else t=e.options.misc.canvasPadding.top+e.textComponents.subtitle.h;return t}},b={addTooltips:function(e){var t=e.svg.insert("g").attr("class",e.cssPrefix+"tooltips");t.selectAll("."+e.cssPrefix+"tooltip").data(e.options.data.content).enter().append("g").attr("class",e.cssPrefix+"tooltip").attr("id",(function(t,r){return e.cssPrefix+"tooltip"+r})).style("opacity",0).append("rect").attr("rx",e.options.tooltips.styles.borderRadius).attr("ry",e.options.tooltips.styles.borderRadius).attr("x",-e.options.tooltips.styles.padding).attr("opacity",e.options.tooltips.styles.backgroundOpacity).style("fill",e.options.tooltips.styles.backgroundColor),t.selectAll("."+e.cssPrefix+"tooltip").data(e.options.data.content).append("text").attr("fill",(function(t){return e.options.tooltips.styles.color})).style("font-size",(function(t){return e.options.tooltips.styles.fontSize})).style("font-weight",(function(t){return e.options.tooltips.styles.fontWeight})).style("font-family",(function(t){return e.options.tooltips.styles.font})).text((function(t,r){var i=e.options.tooltips.string;return"caption"===e.options.tooltips.type&&(i=t.caption),b.replacePlaceholders(e,i,r,{label:t.label,value:t.value,percentage:t.percentage})})),t.selectAll("."+e.cssPrefix+"tooltip rect").attr("width",(function(t,r){return s.getDimensions(e.cssPrefix+"tooltip"+r).w+2*e.options.tooltips.styles.padding})).attr("height",(function(t,r){return s.getDimensions(e.cssPrefix+"tooltip"+r).h+2*e.options.tooltips.styles.padding})).attr("y",(function(t,r){return-s.getDimensions(e.cssPrefix+"tooltip"+r).h/2+1}))},showTooltip:function(e,t){var r=e.options.tooltips.styles.fadeInSpeed;b.currentTooltip===t&&(r=1),b.currentTooltip=t,o.select("#"+e.cssPrefix+"tooltip"+t).transition().duration(r).style("opacity",(function(){return 1})),b.moveTooltip(e)},moveTooltip:function(e){o.selectAll("#"+e.cssPrefix+"tooltip"+b.currentTooltip).attr("transform",(function(t){var r=o.pointer(this.parentNode);return"translate("+(r[0]+e.options.tooltips.styles.padding+2)+","+(r[1]-2*e.options.tooltips.styles.padding-2)+")"}))},hideTooltip:function(e,t){o.select("#"+e.cssPrefix+"tooltip"+t).style("opacity",(function(){return 0})),o.select("#"+e.cssPrefix+"tooltip"+b.currentTooltip).attr("transform",(function(t,r){return"translate("+(e.options.size.canvasWidth+1e3)+","+(e.options.size.canvasHeight+1e3)+")"}))},replacePlaceholders:function(e,t,r,i){s.isFunction(e.options.tooltips.placeholderParser)&&e.options.tooltips.placeholderParser(r,i);var n=function(){return function(e){var t=arguments[1];return i.hasOwnProperty(t)?i[arguments[1]]:arguments[0]}};return t.replace(/\{(\w+)\}/g,n(i))}},m=function(s,l){if(this.element=s,"string"===typeof s){var c=s.replace(/^#/,"");this.element=document.getElementById(c)}var u={};a(!0,u,i,l),this.options=u,null!==this.options.misc.cssPrefix?this.cssPrefix=this.options.misc.cssPrefix:(this.cssPrefix="p"+r+"_",r++),n.initialCheck(this)&&(o.select(this.element).attr(e,t),y.call(this),g.call(this))};m.prototype.recreate=function(){n.initialCheck(this)&&(y.call(this),g.call(this))},m.prototype.redraw=function(){this.element.innerHTML="",g.call(this)},m.prototype.destroy=function(){this.element.innerHTML="",o.select(this.element).attr(e,null)},m.prototype.getOpenSegment=function(){var e=this.currentlyOpenSegment;if(null!==e&&"undefined"!==typeof e){var t=parseInt(o.select(e).attr("data-index"),10);return{element:e,index:t,data:this.options.data.content[t]}}return null},m.prototype.openSegment=function(e){(e=parseInt(e,10))<0||e>this.options.data.content.length-1||f.openSegment(this,o.select("#"+this.cssPrefix+"segment"+e).node())},m.prototype.closeSegment=function(){f.maybeCloseOpenSegment(this)},m.prototype.updateProp=function(e,t){switch(e){case"header.title.text":var r=s.processObj(this.options,e);s.processObj(this.options,e,t),o.select("#"+this.cssPrefix+"title").html(t),(""===r&&""!==t||""!==r&&""===t)&&this.redraw();break;case"header.subtitle.text":var i=s.processObj(this.options,e);s.processObj(this.options,e,t),o.select("#"+this.cssPrefix+"subtitle").html(t),(""===i&&""!==t||""!==i&&""===t)&&this.redraw();break;case"callbacks.onload":case"callbacks.onMouseoverSegment":case"callbacks.onMouseoutSegment":case"callbacks.onClickSegment":case"effects.pullOutSegmentOnClick.effect":case"effects.pullOutSegmentOnClick.speed":case"effects.pullOutSegmentOnClick.size":case"effects.highlightSegmentOnMouseover":case"effects.highlightLuminosity":s.processObj(this.options,e,t);break;default:s.processObj(this.options,e,t),this.destroy(),this.recreate()}};var y=function(){this.options.data.content=l.sortPieData(this),this.options.data.smallSegmentGrouping.enabled&&(this.options.data.content=s.applySmallSegmentGrouping(this.options.data.content,this.options.data.smallSegmentGrouping)),this.options.colors=s.initSegmentColors(this),this.totalSize=l.getTotalPieSize(this.options.data.content);for(var e=this.options.labels.percentage.decimalPlaces,t=0;t{t.__esModule=!0,t.default=void 0;var r={hover:"themeCrosshair",click:"themeNetdata",default:"themeCrosshair"},i={hover:[5,5],click:[2,2],default:[5,5]};t.default=function(e,t,n){void 0===n&&(n="hover");var s=e.getDygraph(),o=s.getArea().h,a=s.canvas_ctx_,l=e.chart.getPayload().data[t];if(Array.isArray(l)){var c=s.toDomXCoord(l[0]);s.setSelection(t),a.save(),a.beginPath(),a.setLineDash(i[n]),a.strokeStyle=e.chart.getThemeAttribute(r[n]),a.moveTo(c,0),a.lineTo(c,o),a.stroke(),a.closePath(),a.restore()}}},99447:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(e){var t,r,i,n,s=function(t,r){var i=function(t,r){if(!Array.isArray(r))return{};var i=t.offsetY;return i>e.getDygraph().getArea().h-10?{seriesName:"ANNOTATIONS"}:i<15?{seriesName:"ANOMALY_RATE"}:e.chart.getAttribute("chartType")?e.getDygraph().findStackedPoint(t.offsetX,t.offsetY):e.getDygraph().findClosestPoint(t.offsetX,t.offsetY)}(t,r),n=i.seriesName;if(n){var s=e.getDygraph().getPropertiesForSeries(n);if(s){var o=e.chart.getPayloadDimensionIds();if(null!=o&&o.length)return o[s.column-1]||s.name}}},o=function(o,a,l){if(n!==a){i=l,n=a,t=o.offsetX,r=o.offsetY;var c=s(o,l);c&&(e.sdk.trigger("highlightHover",e.chart,a,c),e.chart.trigger("highlightHover",a,c))}},a=function(o,a,l){if(n!==a){i=l,n=a,t=o.offsetX,r=o.offsetY;var c=s(o,l);e.sdk.trigger("highlightClick",e.chart,a,c),e.chart.trigger("highlightClick",a,c)}},l=function(o){if(!(Math.abs(o.offsetX-t)<5&&Math.abs(o.offsetY-r)<5)){t=o.offsetX,r=o.offsetY;var a=s(o,i);a&&(e.sdk.trigger("highlightHover",e.chart,n,a),e.chart.trigger("highlightHover",n,a))}},c=function(){e.sdk.trigger("highlightBlur",e.chart),e.chart.trigger("highlightBlur")},u=function(){r=null,i=null,n=null,e.off("highlightCallback",o),e.off("mousemove",l),e.off("mouseout",c),e.off("click",a)};return{toggle:function(t){return t?e.on("highlightCallback",o).on("mousemove",l).on("mouseout",c).on("click",a):u()},destroy:u}}},80509:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=b(r(62523)),n=b(r(68652)),s=b(r(85872)),o=b(r(58370)),a=r(22753),l=r(97005),c=r(21945),u=b(r(6076)),f=b(r(99447)),d=b(r(19243)),p=b(r(34297));function b(e){return e&&e.__esModule?e:{default:e}}function m(e){return function(e){if(Array.isArray(e))return y(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return y(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return y(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);r1&&j.length>1,stackedGraphNaNFill:"none",plotter:u,errorBars:_,axes:{x:o?{ticker:i.default.dateTicker,axisLabelFormatter:t.formatXAxis,axisLabelWidth:60}:{drawAxis:!1},y:l?h(h(h({},P&&{ticker:P}),{},{axisLabelFormatter:w},c&&{axisLabelWidth:c}),{},{pixelsPerLabel:15}):{drawAxis:!1}},ylabel:t.getAttribute("hasYlabel")&&t.getUnitSign({long:!0,withoutConversion:(0,a.isHeatmap)(n)})}},S=function(){var e=g.chart.getThemeAttribute("themeGridColor");return{axisLineColor:e,gridLineColor:e}},M=function(){var e=t.getPayloadDimensionIds(),r=t.getPayload().labels;if(null==e||!e.length||null==r||!r.length)return{visibility:!1};var i=r.length-e.length,n=Array(i>0?i:0).fill(!0),s=t.getAttribute("selectedLegendDimensions");return{visibility:[].concat(m(e.map(s.length?t.isDimensionVisible:function(){return!0})),m(n))}},D=function(){var e=t.getAttributes(),r=e.outOfLimits,i=e.getValueRange,n=e.staticValueRange,s=e.chartType,o=t.getPayload(),l=o.data,c=o.labels,u=t.getDateWindow(),f=r||0===l.length;return{file:f?[[0]]:l,labels:f?["X"]:c,dateWindow:u,valueRange:n||((0,a.isHeatmap)(s)?[0,t.getVisibleDimensionIds().length]:i(t,{dygraph:!0}))}},E=function(){return t.isSparkline()?{drawGrid:!1,drawAxis:!1,ylabel:void 0,yLabelWidth:0,highlightCircleSize:3,fillAlpha:1,strokeWidth:0}:null},T=function(){var e=t.getPayloadDimensionIds();return e.length?{colors:e.map(t.selectDimensionColor)}:{}},L=h(h({},g),{},{getChartWidth:function(){return _?_.getArea().w:g.getChartWidth()},getChartHeight:function(){return _?_.getArea().h:100},getPreceded:function(){if(!_)return-1;if(1e3*t.getFirstEntry()<_.xAxisRange()[0])return-1;var e=_.xAxisExtremes()[0];return _.toDomXCoord(e)},mount:function(e){if(!_){g.mount(e);var n=t.getAttribute("theme");e.classList.add(n);var c=t.getAttributes(),u=t.getPayload(),f=u.data,d=u.labels;r=(0,s.default)();var b=c.outOfLimits||0===f.length;_=new i.default(e,b?[[0]]:f,h(h(h(h(h(h({legend:"never",showLabelsOnHighlight:!1,labels:b?["X"]:d,dateWindow:t.getDateWindow(),clickCallback:r.add((function(){for(var e=arguments.length,t=new Array(e),r=0;r{t.__esModule=!0,t.default=void 0;var i,n=r(81431),s=(i=r(10238))&&i.__esModule?i:{default:i};t.default=function(e){var t=function(t,r){return void 0===r&&(r=e.chart.getAttribute("navigation")),e.chart.updateAttributes({navigation:t,prevNavigation:r})},r=(0,n.debounce)(500,(function(e,t,r){e.moveX(t,r)})),i=e.on("mousedown",(function(e){e.shiftKey&&e.altKey?t("selectVertical"):e.altKey?t("highlight"):e.shiftKey&&t("select")})).on("mouseup",(function(){setTimeout((function(){var r=e.chart.getAttribute("prevNavigation");r&&t(r,null)}))})).on("wheel",(function(t,i){if(t.shiftKey||t.altKey){t.preventDefault(),t.stopPropagation();var n="number"!==typeof t.wheelDelta||Number.isNaN(t.wheelDelta)?-1.2*t.deltaY:t.wheelDelta/40,o=(t.detail?-1*t.detail:n)/50,a=t.offsetX||t.layerX-t.target.offsetLeft,l=function(e,t){var r=e.toDomCoords(e.xAxisRange()[0],null)[0],i=t-r,n=e.toDomCoords(e.xAxisRange()[1],null)[0]-r;return 0===n?0:i/n}(i,a);!function(t,n,o){o=o||.5;var a=t.xAxisRange(),l=a[0],c=a[1],u=(c-l)*n,f=u*o,d=u*(1-o),p=Math.round((l+f)/1e3),b=Math.round((c-d)/1e3),m=(0,s.default)({after:p,before:b}),y=m.fixedAfter,g=m.fixedBefore;y===l&&g===c||(r(e.chart,y,g),i.updateOptions({dateWindow:[1e3*y,1e3*g]}))}(i,o,l)}})).on("dblclick",e.chart.resetNavigation);return function(){return i()}}},6076:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=a(r(79513)),n=a(r(51434)),s=a(r(44047)),o=a(r(31412));function a(e){return e&&e.__esModule?e:{default:e}}var l={highlight:n.default,select:n.default,selectVertical:o.default,pan:s.default};t.default=function(e){var t,r,n=function(){null==t||t(),t=null},s=function(){n(),null==r||r(),r=null},o=function(i){var s;r&&(n(),t=null==(s=l[i])?void 0:s.call(l,e))};return{toggle:function(t,n){if(!t)return s();r=(0,i.default)(e),n&&o(n)},set:o,destroy:s}}},44047:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i,n=(i=r(62523))&&i.__esModule?i:{default:i};t.default=function(e){var t=function(t,s,o){e.sdk.trigger("panStart",e.chart),o.initializeMouseDown(t,s,o),n.default.startPan(t,s,o),o.is2DPan=!1,e.on("mousemove",r).on("mouseout",i).on("mouseup",i).on("touchmove",r).on("touchend",i)},r=function(e,t,r){r.isPanning&&n.default.movePan(e,t,r)},i=function t(i,s,o){o.isPanning&&(n.default.endPan(i,s,o),o.destroy(),e.sdk.trigger("panEnd",e.chart,s.dateWindow_)),e.off("mousemove",r),e.off("mouseup",t),e.off("mouseout",t),e.off("touchmove",r),e.off("touchend",t)};return e.on("mousedown",t).on("touchstart",t)}},51434:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i,n=(i=r(62523))&&i.__esModule?i:{default:i},s=r(43015);t.default=function(e){var t,r,i=function(e,t,i){if(i.isZooming){var n=t.canvas_ctx_,o=t.canvas_,a=t.getArea(),l=o.getBoundingClientRect(),c=l.left+a.x,u=(l.top,a.y,a.w);a.h;if(!(e.pageXc+u)){i.zoomMoved=!0,i.dragEndX=(0,s.dragGetX_)(e,i);var f=i.dragStartX,d=i.dragEndX;n.clearRect(0,0,o.width,o.height),n.fillStyle="rgba(128,128,128,0.3)",n.fillRect(Math.min(f,d),a.y,Math.abs(d-f),a.h),i.prevEndX=d,r=d}}},o=function n(s,o,a){if(a.isZooming){o.clearZoomRect_(),a.destroy();var l=function(e){return-1===r||Math.abs(t-r)<5?null:[Math.round(e.toDataXCoord(t)/1e3),Math.round(e.toDataXCoord(r)/1e3)].sort((function(e,t){return e-t}))}(o);e.sdk.trigger("highlightEnd",e.chart,l),e.chart.trigger("highlightEnd",l)}e.off("mousemove",i),e.off("mouseup",n)};return e.on("mousedown",(function(s,a,l){e.sdk.trigger("highlightStart",e.chart),l.initializeMouseDown(s,a,l),n.default.startZoom(s,a,l),t=l.dragStartX,r=-1,e.on("mousemove",i).on("mouseup",o)}))}},31412:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i,n=(i=r(62523))&&i.__esModule?i:{default:i},s=r(43015);t.default=function(e){var t,r,i=function(e,t,i){if(i.isZooming){var n=t.canvas_ctx_,o=t.canvas_,a=o.getBoundingClientRect();if(!(e.pageYa.bottom)){i.zoomMoved=!0,i.dragEndY=(0,s.dragGetY_)(e,i);var l=i.dragStartY,c=i.dragEndY,u=t.getArea();n.clearRect(0,0,o.width,o.height),n.fillStyle="rgba(128,128,128,0.3)",n.fillRect(u.x,Math.min(l,c),u.w,Math.abs(c-l)),i.prevEndY=c,r=c}}},o=function n(s,o,a){if(a.isZooming){o.clearZoomRect_(),a.destroy();var l=-1===r||Math.abs(t-r)<5?null:[o.toDataYCoord(t),o.toDataYCoord(r)].sort((function(e,t){return e-t}));e.sdk.trigger("highlightVerticalEnd",e.chart,l)}e.off("mousemove",i),e.off("mouseup",n)};return e.on("mousedown",(function(s,a,l){e.sdk.trigger("highlightVerticalStart",e.chart),l.initializeMouseDown(s,a,l),n.default.startZoom(s,a,l),t=l.dragStartY,r=-1,e.on("mousemove",i).on("mouseup",o)}))}},72222:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(48090),n={warning:"#F9A825",critical:"#FF4136",clear:"#00AB44"};t.default=function(e,t){var r=e.chart.getAttribute("overlays")[t],s=r.when,o=r.status,a=e.getDygraph(),l=a.getArea().h,c=a.hidden_ctx_,u=(0,i.getArea)(a,[s,s]);if(!u)return(0,i.trigger)(e,t);var f=u.from;(0,i.trigger)(e,t,u),c.save(),c.beginPath(),c.moveTo(f-1,0),c.lineTo(f-1,l),c.globalAlpha=1,c.lineWidth=2,c.setLineDash([4,4]),c.strokeStyle=n[o],c.stroke(),c.closePath(),c.restore()}},69789:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(48090),n={warning:"#FFF8E1",critical:"#FFEBEF",clear:"#E5F5E8"},s={warning:"#FFC300",critical:"#F59B9B",clear:"#68C47D"},o={warning:"#F9A825",critical:"#FF4136",clear:"#00AB44"};t.default=function(e,t){var r=e.chart.getAttribute("overlays")[t],a=r.whenTriggered,l=r.whenLast,c=void 0===l?Math.floor((new Date).getTime()/1e3):l,u=r.status,f=e.getDygraph(),d=f.getArea().h,p=f.hidden_ctx_,b=(0,i.getArea)(f,[a,c]);if(!b)return(0,i.trigger)(e,t);var m=b.from,y=b.width,g=b.to;(0,i.trigger)(e,t,b),p.save(),p.beginPath(),p.rect(m,0,y,d-1),p.fillStyle=s[u],p.globalAlpha=.1,p.fill();p.beginPath(),p.moveTo(m,0),p.lineTo(m,d),p.globalAlpha=1,p.lineWidth=2,p.setLineDash([4,4]),p.strokeStyle=n[u],p.stroke(),p.beginPath(),p.moveTo(g-2,0),p.lineTo(g-2,d),p.strokeStyle=o[u],p.stroke(),p.closePath(),p.restore()}},48090:(e,t)=>{t.__esModule=!0,t.trigger=t.getArea=void 0;t.getArea=function(e,t){var r=e.xAxisRange(),i=r[0],n=r[1],s=1e3*t[0],o=1e3*t[1];if(on)return null;var a=Math.max(i,s),l=Math.min(n,o),c=e.toDomXCoord(a),u=e.toDomXCoord(l);return{from:c,to:u,width:u-c}},t.trigger=function(e,t,r){return requestAnimationFrame((function(){return e.trigger("overlayedAreaChanged:"+t,r)}))}},26559:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(48090);t.default=function(e,t){var r=e.chart.getAttribute("overlays")[t].range;if(r){var n=e.getDygraph(),s=n.getArea().h,o=n.hidden_ctx_,a=(0,i.getArea)(n,r);if(!a)return(0,i.trigger)(e,t);var l=a.from,c=a.width;(0,i.trigger)(e,t,a),o.save(),o.beginPath(),o.rect(l,0,c,s-1),o.fillStyle="rgba(207, 213, 218, 0.12)",o.fill(),o.beginPath(),o.rect(l,0,0,s-1),o.rect(l+c,0,0,s-1),o.fill(),o.setLineDash([2,7]),o.lineWidth=1,o.strokeStyle="#CFD5DA",o.stroke(),o.stroke(),o.closePath(),o.restore()}}},19243:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i,n=(i=r(93226))&&i.__esModule?i:{default:i};t.default=function(e){var t=null,r=function(t){var r=e.chart.getAttribute("overlays")[t].type,i=n.default[r];i&&i(e,t)},i=function(){var t=e.chart.getAttribute("overlays");Object.keys(t).forEach(r)},s=function(){var t=e.getDygraph();t&&t.renderGraph_(!1)},o=function(){t&&(s(),t(),t=null)};return{toggle:function(){var r=e.chart.getAttribute("overlays");if(!Object.keys(r).length)return o();t?s():t=e.on("underlayCallback",i)},destroy:o}}},42980:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(48090);t.default=function(e,t){var r=e.getDygraph(),n=r.xAxisRange()[1],s=n/1e3,o=e.chart.getFirstEntry(),a=e.chart.getAttributes(),l=a.outOfLimits,c=a.error;if(l||o&&!(o>s)||c){var u=l||c?[n,n]:[o,o],f=(0,i.getArea)(r,u);(0,i.trigger)(e,t,f)}}},93226:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=a(r(72222)),n=a(r(69789)),s=a(r(26559)),o=a(r(42980));function a(e){return e&&e.__esModule?e:{default:e}}t.default={alarm:i.default,alarmRange:n.default,highlight:s.default,proceeded:o.default}},78051:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(96380);function n(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);r{t.__esModule=!0,t.default=void 0;var i=r(16199);t.default=function(e){return function(t){if(e&&"ANOMALY_RATE"===t.setName){var r=t.drawingContext,n=t.points;if(!n.length||!n[1])return;var s=n[1].canvasx-n[0].canvasx+1,o=Math.floor(s),a=(0,i.scaleLinear)().domain([0,100]).range(["transparent",e.chart.getThemeAttribute("themeAnomalyScaleColor")]),l=e.chart.getPayloadDimensionIds(),c=e.chart.getAttribute("selectedLegendDimensions"),u=l.reduce((function(t,r,i){return c.length?e.chart.isDimensionVisible(r)&&t.add(i):t.add(i),t}),new Set),f=e.chart.getPayload().all;n.forEach((function(t){var i=t.canvasx,n=e.chart.getClosestRow(t.xval),s=f[n].slice(1).reduce((function(e,t,r){var i=t.arp;return u.has(r)?e>(i||0)?e:i||0:e}),0);r.strokeStyle=r.fillStyle=a(s),r.fillRect(i-o/2,0,o,15),r.strokeRect(i-o/2,0,o,15)}))}}}},19281:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(22753);t.default=function(e){return function(t){if(e&&0===t.seriesIndex){var r=e.chart.getVisibleDimensionIds(),n=t.dygraph,s=t.drawingContext,o=t.allSeriesPoints,a=n.layout_.setNames,l=1/0;o.forEach((function(e){var t=e[1].canvasx-e[0].canvasx;t{t.__esModule=!0,t.darkenColor=void 0;var i,n=(i=r(62523))&&i.__esModule?i:{default:i};t.darkenColor=function(e){var t=n.default.toRGB_(e);return t.r=Math.floor((255+t.r)/2),t.g=Math.floor((255+t.g)/2),t.b=Math.floor((255+t.b)/2),"rgb("+t.r+","+t.g+","+t.b+")"}},97005:(e,t,r)=>{t.__esModule=!0,t.makeStackedBarPlotter=t.makeMultiColumnBarPlotter=t.makeLinePlotter=t.makeHeatmapPlotter=t.makeAnomalyPlotter=t.makeAnnotationsPlotter=void 0;var i=c(r(5433));t.makeLinePlotter=i.default;var n=c(r(21471));t.makeStackedBarPlotter=n.default;var s=c(r(79645));t.makeMultiColumnBarPlotter=s.default;var o=c(r(19281));t.makeHeatmapPlotter=o.default;var a=c(r(54296));t.makeAnomalyPlotter=a.default;var l=c(r(78051));function c(e){return e&&e.__esModule?e:{default:e}}t.makeAnnotationsPlotter=l.default},5433:(e,t,r)=>{t.__esModule=!0,t.default=void 0,r(63303);t.default=function(){return function(e){window.smoothPlotter(e)}}},79645:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(32360);t.default=function(){return function(e){if(0===e.seriesIndex){var t=e.dygraph,r=e.drawingContext,n=e.allSeriesPoints,s=t.toDomYCoord(0),o=1/0;n.forEach((function(e){var t=e[1].canvasx-e[0].canvasx;t1?n.length-1:1));r.fillRect(i,e.canvasy,a/n.length,s-e.canvasy),r.strokeRect(i,e.canvasy,a/n.length,s-e.canvasy)}))}))}}}},21471:(e,t)=>{t.__esModule=!0,t.default=void 0;t.default=function(){return function(e){var t=e.drawingContext,r=e.points,i=e.dygraph.toDomYCoord(0);t.fillStyle=e.color;var n=r[1].canvasx-r[0].canvasx,s=Math.floor(2/3*n);r.forEach((function(e){var r=e.canvasx;t.fillRect(r-s/2,e.canvasy,s,i-e.canvasy),t.strokeRect(r-s/2,e.canvasy,s,i-e.canvasy)}))}}},86893:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=r(22753);function n(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);r{t.__esModule=!0,t.numericTicker=t.heatmapTicker=void 0;var i=s(r(22190));t.numericTicker=i.default;var n=s(r(86893));function s(e){return e&&e.__esModule?e:{default:e}}t.heatmapTicker=n.default},22190:(e,t)=>{function r(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);rf));l++);for(b>m&&(p*=-1),a=0;a<=u;a++)c=b+a*p,d.push({v:c})}var O=n("axisLabelFormatter");for(a=0;a.08}))),[{label_v:w+k,label:"i"}])}},10732:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i=a(r(88208)),n=a(r(68652)),s=r(28973),o=a(r(58370));function a(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function c(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var i=a(r(52076)),n=a(r(68652)),s=r(28973),o=a(r(58370));function a(e){return e&&e.__esModule?e:{default:e}}function l(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return c(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,i=new Array(t);rt?t:e.clientHeight);e.firstChild.G__height=r,e.firstChild.style.height=r+"px";var i=t;e.firstChild.G__width=i,e.firstChild.style.width=i+"px",p.setOptions({}),p.update(!0),d.trigger("resize")}),(function(){return d.trigger("resize")}));var g=t.getAttributes().loaded;r=(0,s.unregister)(t.onAttributeChange("hoverX",y),!g&&t.onceAttributeChange("loaded",y),t.onAttributeChange("theme",(function(){var e=b(),t=e.color,r=e.strokeColor;p.setOptions({strokeColor:r,pointer:{color:t}})})));var h=e.clientWidth,_=.9*(e.clientHeight>h?h:e.clientHeight);e.firstChild.G__height=_,e.firstChild.style.height=_+"px";var v=h;e.firstChild.G__width=v,e.firstChild.style.width=v+"px",p.setOptions({}),y()}},unmount:function(){r&&r(),u&&u(),p=null,a=null,c=null,d.unmount()},render:y,getMinMax:m})}},52076:(e,t)=>{t.__esModule=!0,t.default=void 0;var r=function(e,t){for(var r in t.prototype)t.hasOwnProperty(r)&&(e[r]=t[r]);function i(){this.constructor=e}return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},i=function(e,t){var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=e[i]);for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);return r},n=function(e){return"#"===e.charAt(0)?e.substring(1,7):e};function s(e,t){null==e&&(e=!0),this.clear=null==t||t,e&&c.add(this)}function o(){return o.__super__.constructor.apply(this,arguments)}function a(e){if(this.gauge=e,void 0===this.gauge)throw new Error("The element isn't defined.");this.ctx=this.gauge.ctx,this.canvas=this.gauge.canvas,a.__super__.constructor.call(this,!1,!1),this.setOptions()}function l(e){var t,r;this.canvas=e,l.__super__.constructor.call(this),this.percentColors=null,"undefined"!==typeof G_vmlCanvasManager&&(this.canvas=window.G_vmlCanvasManager.initElement(this.canvas)),this.ctx=this.canvas.getContext("2d"),t=this.canvas.clientHeight,r=this.canvas.clientWidth,this.canvas.height=t,this.canvas.width=r,this.gp=[new a(this)],this.setOptions()}s.prototype.animationSpeed=32,s.prototype.update=function(e){var t;return null==e&&(e=!1),!(!e&&this.displayedValue===this.value)&&(this.ctx&&this.clear&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),t=this.value-this.displayedValue,Math.abs(t/this.animationSpeed)<=.001?this.displayedValue=this.value:this.displayedValue=this.displayedValue+t/this.animationSpeed,this.render(),!0)},r(o,s),o.prototype.displayScale=1,o.prototype.forceUpdate=!0,o.prototype.setMinValue=function(e,t){var r,i,n,s,o;if(this.minValue=e,null==t&&(t=!0),t){for(this.displayedValue=this.minValue,o=[],i=0,n=(s=this.gp||[]).length;i.5&&(this.options.angle=.5),this.configDisplayScale(),this},o.prototype.configDisplayScale=function(){var e,t,r,i;return!1===this.options.highDpiSupport?delete this.displayScale:(t=window.devicePixelRatio||1,e=this.ctx.webkitBackingStorePixelRatio||this.ctx.mozBackingStorePixelRatio||this.ctx.msBackingStorePixelRatio||this.ctx.oBackingStorePixelRatio||this.ctx.backingStorePixelRatio||1,this.displayScale=t/e),i=this.canvas.G__width||this.canvas.width,r=this.canvas.G__height||this.canvas.height,this.canvas.width=i*this.displayScale,this.canvas.height=r*this.displayScale,this.canvas.style.width=i+"px",this.canvas.style.height=r+"px",this.canvas.G__width=i,this.canvas.G__height=r,this},o.prototype.parseValue=function(e){return e=parseFloat(e)||Number(e),isFinite(e)?e:0},r(a,s),a.prototype.displayedValue=0,a.prototype.value=0,a.prototype.options={strokeWidth:.035,length:.1,color:"#000000",iconPath:null,iconScale:1,iconAngle:0},a.prototype.img=null,a.prototype.setOptions=function(e){if(null==e&&(e=null),this.options=i(this.options,e),this.length=2*this.gauge.radius*this.gauge.options.radiusScale*this.options.length,this.strokeWidth=this.canvas.height*this.options.strokeWidth,this.maxValue=this.gauge.maxValue,this.minValue=this.gauge.minValue,this.animationSpeed=this.gauge.animationSpeed,this.options.angle=this.gauge.options.angle,this.options.iconPath)return this.img=new Image,this.img.src=this.options.iconPath},a.prototype.render=function(){var e,t,r,i,n,s,o,a,l;if(e=this.gauge.getAngle.call(this,this.displayedValue),a=Math.round(this.length*Math.cos(e)),l=Math.round(this.length*Math.sin(e)),s=Math.round(this.strokeWidth*Math.cos(e-Math.PI/2)),o=Math.round(this.strokeWidth*Math.sin(e-Math.PI/2)),t=Math.round(this.strokeWidth*Math.cos(e+Math.PI/2)),r=Math.round(this.strokeWidth*Math.sin(e+Math.PI/2)),this.ctx.beginPath(),this.ctx.fillStyle=this.options.color,this.ctx.arc(0,0,this.strokeWidth,0,2*Math.PI,!1),this.ctx.fill(),this.ctx.beginPath(),this.ctx.moveTo(s,o),this.ctx.lineTo(a,l),this.ctx.lineTo(t,r),this.ctx.fill(),this.img)return i=Math.round(this.img.width*this.options.iconScale),n=Math.round(this.img.height*this.options.iconScale),this.ctx.save(),this.ctx.translate(a,l),this.ctx.rotate(e+Math.PI/180*(90+this.options.iconAngle)),this.ctx.drawImage(this.img,-i/2,-n/2,i,n),this.ctx.restore()},r(l,o),l.prototype.elem=null,l.prototype.value=[20],l.prototype.maxValue=80,l.prototype.minValue=0,l.prototype.displayedAngle=0,l.prototype.displayedValue=0,l.prototype.lineWidth=40,l.prototype.paddingTop=.1,l.prototype.paddingBottom=.1,l.prototype.percentColors=null,l.prototype.options={colorStart:"#6fadcf",colorStop:void 0,gradientType:0,strokeColor:"#e0e0e0",pointer:{length:.8,strokeWidth:.035,iconScale:1},angle:.15,lineWidth:.44,radiusScale:1,limitMax:!1,limitMin:!1},l.prototype.setOptions=function(e){var t,r,i,n,s;for(null==e&&(e=null),l.__super__.setOptions.call(this,e),this.configPercentColors(),this.extraPadding=0,this.options.angle<0&&(n=Math.PI*(1+this.options.angle),this.extraPadding=Math.sin(n)),this.availableHeight=this.canvas.height*(1-this.paddingTop-this.paddingBottom),this.lineWidth=this.availableHeight*this.options.lineWidth,this.radius=(this.availableHeight-this.lineWidth/2)/(1+this.extraPadding),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),r=0,i=(s=this.gp).length;r=s;r=0<=s?++i:--i)a=parseInt(n(this.options.percentColors[r][1]).substring(0,2),16),t=parseInt(n(this.options.percentColors[r][1]).substring(2,4),16),e=parseInt(n(this.options.percentColors[r][1]).substring(4,6),16),o.push(this.percentColors[r]={pct:this.options.percentColors[r][0],color:{r:a,g:t,b:e}});return o}},l.prototype.set=function(e){var t,r,i,n,s,o,l,u,f;for(e instanceof Array||(e=[e]),r=i=0,l=e.length-1;0<=l?i<=l:i>=l;r=0<=l?++i:--i)e[r]=this.parseValue(e[r]);if(e.length>this.gp.length)for(r=n=0,u=e.length-this.gp.length;0<=u?nu;r=0<=u?++n:--n)(t=new a(this)).setOptions(this.options.pointer),this.gp.push(t);else e.lengththis.maxValue?this.options.limitMax?f=this.maxValue:this.maxValue=f+1:f=a;n=0<=a?++s:--s)if(e<=this.percentColors[n].pct){!0===t?(l=this.percentColors[n-1]||this.percentColors[0],i=this.percentColors[n],o=(e-l.pct)/(i.pct-l.pct),r={r:Math.floor(l.color.r*(1-o)+i.color.r*o),g:Math.floor(l.color.g*(1-o)+i.color.g*o),b:Math.floor(l.color.b*(1-o)+i.color.b*o)}):r=this.percentColors[n].color;break}return"rgb("+[r.r,r.g,r.b].join(",")+")"},l.prototype.getColorForValue=function(e,t){var r;return r=(e-this.minValue)/(this.maxValue-this.minValue),this.getColorForPercentage(r,t)},l.prototype.renderTicks=function(e,t,r,i){var n,s,o,a,l,c,u,f,d,p,b,m,y,g,h,_,v,O,A,w;if(e!=={}){for(c=e.divisions||0,O=e.subDivisions||0,o=e.divColor||"#fff",g=e.subColor||"#fff",a=e.divLength||.7,_=e.subLength||.2,d=parseFloat(this.maxValue)-parseFloat(this.minValue),p=parseFloat(d)/parseFloat(e.divisions),h=parseFloat(p)/parseFloat(e.subDivisions),n=parseFloat(this.minValue),s=0+h,l=(f=d/400)*(e.divWidth||1),v=f*(e.subWidth||1),m=[],A=u=0,b=c+1;u0?m.push(function(){var e,t,r;for(r=[],e=0,t=O-1;ethis.maxValue&&(a=this.maxValue),p=this.radius*this.options.radiusScale,m.height&&(this.ctx.lineWidth=this.lineWidth*m.height,d=this.lineWidth/2*(m.offset||1-m.height),p=this.radius*this.options.radiusScale+d),this.ctx.strokeStyle=m.strokeStyle,this.ctx.beginPath(),this.ctx.arc(0,0,p,this.getAngle(l),this.getAngle(a),!1),this.ctx.stroke();else void 0!==this.options.customFillStyle?t=this.options.customFillStyle(this):null!==this.percentColors?t=this.getColorForValue(this.displayedValue,this.options.generateGradient):void 0!==this.options.colorStop?((t=0===this.options.gradientType?this.ctx.createRadialGradient(b,r,9,b,r,70):this.ctx.createLinearGradient(0,0,b,0)).addColorStop(0,this.options.colorStart),t.addColorStop(1,this.options.colorStop)):t=this.options.colorStart,this.ctx.strokeStyle=t,this.ctx.beginPath(),this.ctx.arc(b,r,c,(1+this.options.angle)*Math.PI,e,!1),this.ctx.lineWidth=this.lineWidth,this.ctx.stroke(),this.ctx.strokeStyle=this.options.strokeColor,this.ctx.beginPath(),this.ctx.arc(b,r,c,e,(2-this.options.angle)*Math.PI,!1),this.ctx.stroke(),this.ctx.save(),this.ctx.translate(b,r);for(this.options.renderTicks&&this.renderTicks(this.options.renderTicks,b,r,c),this.ctx.restore(),this.ctx.translate(b,r),n=0,o=(f=this.gp).length;n=0;n+=-1)i=a[n],c.elements.splice(i,1);return c.animId=t?null:requestAnimationFrame(c.run)}if(!1===e)return!0===c.animId&&cancelAnimationFrame(c.animId),c.animId=requestAnimationFrame(c.run)}};t.default=l},42872:(e,t,r)=>{t.__esModule=!0,t.initialValue=t.default=void 0;var i,n=r(28973),s=(i=r(68652))&&i.__esModule?i:{default:i};function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var i=o(r(68652)),n=r(28973),s=o(r(58370));function o(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function l(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;var i=o(r(68652)),n=r(28973),s=o(r(58370));function o(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function l(e){for(var t=1;t{t.__esModule=!0,t.default=void 0;t.default={"fping.latency":"FPing Latency","fping.packets":"FPing Packets","fping.quality":"FPing Quality"}},92810:(e,t,r)=>{t.__esModule=!0,t.default=void 0;var i,n=(i=r(8711))&&i.__esModule?i:{default:i},s=r(83199),o=r(33640),a=["icon","hoverIndicator","padding"];function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function c(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,a);return c(c({cursor:"pointer"},o),{},{children:t||o.children,active:o.active||o["aria-expanded"],hoverIndicator:i,padding:s})})).withConfig({displayName:"button__Button",componentId:"sc-oqiqxn-0"})(["border:initial;padding:",";height:auto;line-height:0;background:",";"," color:",";svg{fill:",";stroke:",";}"," &:hover{",";color:",";svg{fill:",";stroke:",";}}"],(function(e){return e.padding}),(function(e){var t=e.theme;return e.active?(0,s.getColor)("borderSecondary")({theme:t}):"initial"}),s.cursor,(function(e){var t=e.active,r=e.disabled,i=e.theme;return(0,s.getColor)(f({active:t,disabled:r}))({theme:i})}),(function(e){var t=e.active,r=e.disabled,i=e.theme;return e.stroked?"none":(0,s.getColor)(f({active:t,disabled:r}))({theme:i})}),(function(e){var t=e.active,r=e.disabled,i=e.theme;return e.stroked?(0,s.getColor)(f({active:t,disabled:r}))({theme:i}):"none"}),(function(e){var t=e.active,r=e.hoverIndicator;return(t||r)&&"\n border-radius: 4px;\n "}),(function(e){var t=e.theme,r=e.hoverIndicator,i=e.disabled;return r&&!i&&"background: "+(0,s.getColor)("mainChartTboxHover")({theme:t})+";"}),(function(e){var t=e.active,r=e.disabled,i=e.theme;return(0,s.getColor)(f({active:t,disabled:r}))({theme:i})}),(function(e){var t=e.theme,r=e.stroked,i=e.disabled;return r?"none":(0,s.getColor)(f({defaultColor:"text",disabled:i}))({theme:t})}),(function(e){var t=e.theme,r=e.stroked,i=e.disabled;return r?(0,s.getColor)(f({defaultColor:"text",disabled:i}))({theme:t}):"none"}));t.default=(0,o.withTooltip)(d)},6504:(e,t,r)=>{t.__esModule=!0,t.default=t.Button=void 0;var i=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var i={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var o=n?Object.getOwnPropertyDescriptor(e,s):null;o&&(o.get||o.set)?Object.defineProperty(i,s,o):i[s]=e[s]}return i.default=e,r&&r.set(e,i),i}(r(96540)),n=l(r(83503)),s=r(81900),o=l(r(92810));t.Button=o.default;var a=["svg","size","width","height"];function l(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t